diff --git a/.github/workflows/build_all.yml b/.github/workflows/build_all.yml index e184d65b..1a28c251 100644 --- a/.github/workflows/build_all.yml +++ b/.github/workflows/build_all.yml @@ -14,7 +14,7 @@ jobs: name: Build All strategy: matrix: - os: [ubuntu-22.04, macos-13, windows-2019] + os: [ubuntu-22.04, macos-13, windows-2022] runs-on: ${{ matrix.os }} defaults: run: @@ -69,6 +69,19 @@ jobs: echo 'C:\ProgramData\Chocolatey\lib\mingw\tools\install\mingw64\bin\' >> $GITHUB_PATH echo 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\' >> $GITHUB_PATH echo 'MW_MINGW64_LOC=/c/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/' >> $GITHUB_ENV + - name: Install Visual Studio 2019 Build Tools (for cuda 10) + if: ${{ matrix.os == 'windows-2022' }} + run: | + choco install visualstudio2019community --package-parameters "--add Microsoft.VisualStudio.Workload.MSBuildTools --add Microsoft.VisualStudio.Workload.VCTools --add Microsoft.VisualStudio.Component.VC.Tools.x86.x64 --add Microsoft.VisualStudio.Component.Windows10SDK" + - name: Setup MSVC environment (Windows only) + shell: cmd + if: ${{ runner.os == 'Windows' }} + run: | + call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat" + echo PATH=%PATH% >> %GITHUB_ENV% + echo INCLUDE=%INCLUDE% >> %GITHUB_ENV% + echo LIB=%LIB% >> %GITHUB_ENV% + echo VCINSTALLDIR=%VCINSTALLDIR% >> %GITHUB_ENV% - name: Install CUDA (Linux only) if: ${{ runner.os == 'Linux' }} run: | @@ -100,7 +113,7 @@ jobs: uses: Jimver/cuda-toolkit@v0.2.10 id: cuda-toolkit with: - cuda: '9.2.148' + cuda: '10.2.89' method: 'network' sub-packages: '["nvcc"]' - name: Link libgomp.a (MacOS only) @@ -132,7 +145,7 @@ jobs: make oct CC=gcc-10 CXX=g++-10 USEROCTOPT="CXXFLAGS='-pipe -Os -arch x86_64' DL_LD=g++-10 DL_LDFLAGS='-fopenmp -static-libgcc -static-libstdc++'" otool -L ../mcxlab/mcx.mex else - ln -s "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2" cuda + ln -s "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2" cuda make oct INCLUDEDIRS="-I./cuda/include" CUDA_PATH="./cuda" XTRA_CFLAGS='-openmp' XTRA_CXXFLAGS='-openmp' INCLUDEDIR=' ' objdump -p ../mcxlab/mcx.mex | grep "DLL Name:" fi @@ -198,7 +211,7 @@ jobs: zip -FSr --symlink packages/mcxlab-${{ env.RELEASE_TAG }}.zip mcxlab fi - name: Upload mcxlab package - if: ${{ matrix.os == 'ubuntu-22.04' || matrix.os == 'macos-13' || matrix.os == 'windows-2019' }} + if: ${{ matrix.os == 'ubuntu-22.04' || matrix.os == 'macos-13' || matrix.os == 'windows-2022' }} uses: actions/upload-artifact@v4 with: name: all-mcxlab-packages-${{ env.RELEASE_TAG }} @@ -230,7 +243,7 @@ jobs: zip -FSr --symlink mcx/packages/mcx-${{ env.RELEASE_TAG }}.zip mcx -x 'mcx/packages*' fi - name: Upload mcx package - if: ${{ matrix.os == 'ubuntu-22.04' || matrix.os == 'macos-13' || matrix.os == 'windows-2019' }} + if: ${{ matrix.os == 'ubuntu-22.04' || matrix.os == 'macos-13' || matrix.os == 'windows-2022' }} uses: actions/upload-artifact@v4 with: name: all-mcx-packages-${{ env.RELEASE_TAG }} @@ -245,7 +258,7 @@ jobs: - name: Download mcx uses: actions/download-artifact@v4 with: - pattern: all-mcxlab-packages-* + pattern: all-mcx* merge-multiple: true path: packages - name: Create all-in-one octave mcxlab diff --git a/.github/workflows/build_macos_arm64_wheel.yml b/.github/workflows/build_macos_arm64_wheel.yml new file mode 100644 index 00000000..fb381aa4 --- /dev/null +++ b/.github/workflows/build_macos_arm64_wheel.yml @@ -0,0 +1,74 @@ +name: Build+Upload MacOS Apple Silicon Python Wheels +on: + push: + branches: + - master + tags: + - '*' + pull_request: + branches: + - master + + +jobs: + build_macos_wheels: + if: false + name: Build macOS wheels + runs-on: macos-14 + strategy: + matrix: + python_version: [ '3.12' ] + outputs: + perform_pypi_upload: ${{ steps.perform_pypi_upload_check.outputs.perform_pypi_upload }} + steps: + - name: Checkout repo + uses: actions/checkout@v3 + with: + submodules: 'recursive' + - name: Update RCS keywords + shell: bash + run: | + printf '\n[filter "rcs-keywords"]\n\tclean = .git_filters/rcs-keywords.clean\n\tsmudge = .git_filters/rcs-keywords.smudge %f\n' >> .git/config + rm -rf src/*.c + git checkout src/*.c + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python_version }} + - name: Build Wheels + run: | + cd pmcx/ + perl -pi -e 's/^\s+(ext_modules|cmdclass)/#$1/g' setup.py + python -m pip install --upgrade pip + pip install wheel setuptools + pip wheel . -w ../dist/ --verbose + ls ../dist/ + cd ../ + - name: Check If the Build Version Exists on PyPI + id: perform_pypi_upload_check + run: | + bash $GITHUB_WORKSPACE/.github/check-pypi-upload.sh + - name: Prepare Wheels for Upload + uses: actions/upload-artifact@v4 + with: + name: macos-wheels-${{ matrix.os }}-${{ matrix.python_version }} + path: dist/ + + upload_macos_wheels: + needs: build_macos_wheels + runs-on: ubuntu-latest + if: ${{ github.repository_owner == 'fangq' && needs.build_macos_wheels.outputs.perform_pypi_upload == 1 && github.event_name != 'pull_request'}} + steps: + - name: Download Wheels from Build Job + uses: actions/download-artifact@v4 + with: + pattern: macos-wheels-* + merge-multiple: true + path: dist/ + - name: Upload packages to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 + with: + password: ${{ secrets.PYPI_API_TOKEN }} + verify_metadata: false + verbose: true + skip_existing: true diff --git a/.github/workflows/build_windows_wheel.yml b/.github/workflows/build_windows_wheel.yml index 23ff34df..b028b7d6 100644 --- a/.github/workflows/build_windows_wheel.yml +++ b/.github/workflows/build_windows_wheel.yml @@ -13,10 +13,10 @@ on: jobs: build_windows_wheels: name: Build Windows wheels - runs-on: windows-2019 + runs-on: windows-2022 strategy: matrix: - python_version: [ '3.6', '3.7', '3.8', '3.9', '3.10', '3.11', '3.12', 'pypy3.7', 'pypy3.8', 'pypy3.9', 'pypy3.10'] + python_version: [ '3.6', '3.7', '3.8', '3.9', '3.10', '3.11', '3.12', '3.13', 'pypy3.7', 'pypy3.8', 'pypy3.9', 'pypy3.10'] outputs: perform_pypi_upload: ${{ steps.perform_pypi_upload_check.outputs.perform_pypi_upload }} steps: @@ -34,6 +34,18 @@ jobs: uses: actions/setup-python@v4 with: python-version: ${{ matrix.python_version }} + - name: Install Visual Studio 2019 Build Tools (for cuda 10) + run: | + choco install visualstudio2019buildtools --package-parameters "--add Microsoft.VisualStudio.Workload.VCTools --add Microsoft.VisualStudio.Component.VC.Tools.x86.x64" -y + - name: Setup MSVC environment (Windows only) + shell: cmd + if: ${{ runner.os == 'Windows' }} + run: | + call "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvars64.bat" + echo PATH=%PATH% >> %GITHUB_ENV% + echo INCLUDE=%INCLUDE% >> %GITHUB_ENV% + echo LIB=%LIB% >> %GITHUB_ENV% + echo VCINSTALLDIR=%VCINSTALLDIR% >> %GITHUB_ENV% - name: Install CUDA uses: Jimver/cuda-toolkit@v0.2.10 id: cuda-toolkit @@ -54,6 +66,9 @@ jobs: echo "CMAKE_LIBRARY_PATH=$PWD\zlib\lib" >> $env:GITHUB_ENV rm zlib.zip - name: Build Wheels + env: + CMAKE_GENERATOR: "Visual Studio 16 2019" + CMAKE_GENERATOR_PLATFORM: "x64" run: | cd pmcx/ pip install wheel setuptools diff --git a/.github/workflows/release_test.yml b/.github/workflows/release_test.yml index 1757531d..c56876c7 100644 --- a/.github/workflows/release_test.yml +++ b/.github/workflows/release_test.yml @@ -9,7 +9,7 @@ jobs: name: Release package tests strategy: matrix: - os: [ubuntu-20.04, ubuntu-22.04, ubuntu-24.04, macos-13, macos-14, windows-2019, windows-2022] + os: [ubuntu-22.04, ubuntu-24.04, macos-13, macos-14, windows-2022, windows-2022] runs-on: ${{ matrix.os }} defaults: run: diff --git a/ChangeLog.txt b/ChangeLog.txt index 90901fc3..c02b260d 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -2,7 +2,53 @@ Major updates are marked with a "*" -== MCX v2025.6.pre (Kilo-Kelvin - 2.8), FangQ == +== MCX v2025.9 (Kilo-Kelvin - 2.8), FangQ == + 2025-09-25 [e230514] [bug] when srctype is unknown, the program can run successfully + 2025-08-26 [84adbfc] [pmcx] bump version to 0.5.1, some fixes after new unit tests + 2025-08-26 [e12bbef]*[pmcx] add additional unit tests + 2025-08-25 [521fcf0] [pmcx] pmcx v0.5.0 + 2025-08-25 [501d6b3] [pmcx] bump version 0.4.6 to update macos apple silicon src + 2025-08-24 [37c1205]*[pmcx] initial port of all remaining utils matlab functions to python + 2025-08-24 [101f3c7] [doc] fix inaccurate descrption of the 'energy' output type + 2025-08-24 [196d1de] [pmcx] bump pmcx version to 0.4.3 + 2025-07-20 [fbf5942]*[ci] build none-any pmcx package for Apple silicon macos + 2025-06-01 [6752c76] [i18n] updated es_MX translations verified by Edgar Guevara + 2025-06-01 [bdc9a79] [lang] fix some octave warnings, improve translations + 2025-06-01 [3ebff5b] [bug] use consistent message + 2025-06-01 [8097604] [feat] read env variable MCX_LANG to set language + 2025-06-01 [a2c8ef5] [bug] fix typos in translations, there could be more + 2025-06-01 [fc7c1cf] [pmcx] bump version to 0.4.2 to support cfg['lang'], print lang name + 2025-06-01 [8ece5d6] [pmcx] fix ci error for windows, support locale in pmcx, pass test + 2025-06-01 [70958b9] [ci] fix windows vs error, make mcx_lang const visible in c++ + 2025-06-01 [b99a33f] [ci] fix macos build error, add missing new unit in cmake + 2025-06-01 [729fc37]*[feat] initial i18n support for international languages + 2025-05-12 [8663b80] Fix photontof index in WPTOF calculation + 2025-04-21 [174e35c]*[feat] further polish rf replay for mus Jacobian, close #241 + 2025-04-21 [346a638] [feat] dynamically detect the lowest supported gpu arch by nvcc + 2025-04-18 [0b3c364] Create demo script for computing any or all of the available Jacobian types in replay mode + 2025-04-16 [512ea26] [pmcx] fix ci build errors + 2025-04-16 [9ec9be1] Fix typo in pmcx.cpp + 2025-04-15 [3e8b730] fix typo cfg.issaveexit to cfg["issaveexit"] + 2025-04-12 [0bf148c]*[bug] ensure tshift can not exceed gcfg->maxgate, fix #242 + 2025-03-18 [98c92ea] Fix undefined variable cfg, should be mcx_config. + 2025-03-18 [c1bc350] Format updated code and simplify example + 2025-03-18 [d94e4f4] Add terminal output types for new features. + 2025-03-17 [0d4c892] Fix typo in cfg struct name. + 2025-03-17 [ded9aba]*Implement computation of the total time-of-flight (TOF) and final detected weight + 2025-03-17 [eb4b171] Implement computation of total time-of-flight (TOF)- and final detected weight + 2025-03-14 [aa7bbdd] [doc] fix typo in mcxlab, fix mcxpreview format + 2025-03-12 [6d60f81]*[feat] accelerate mcxpreview using isosurface, must transpose + 2025-03-10 [2eacfb8] [example] fix rf replay script to use .jdat output, fix #239 + 2025-03-06 [4e02a5b] Add object files to gitignore + 2025-03-06 [c7df8d9] Fix memory error by unifying handling of otRF and otRFmus + 2025-03-06 [7e7d88b] Fix function name + 2025-03-06 [5f7d9c6] Fix compliation errors + 2025-02-27 [7f05c3b] Remove redundant ifdef + 2025-02-27 [c1b7c3c] Implement RFmus calculation + 2025-02-27 [40882be] Add RFmus output type and start implementing calculation + 2025-02-27 [7f09134] rename new example + 2025-02-27 [6599a1c] Added new example functions for RF scattering Jacobians. + 2025-02-23 [986ec46] [doc] post v2025 release action, close #238 == MCX v2025 (Jumbo Jolt - 2.6), FangQ == @@ -44,7 +90,6 @@ Major updates are marked with a "*" 2024-11-08 [ee5be15] [feat] make onecube benchmark maskdet work, fix --dumpmask 2024-11-08 [f2d3bc4] [feat] support 1x1x1 volume, add onecube/twocube benchmarks, det not working 2024-11-06 [eaafb0b] [feat] disabling issaveref if issave2pt is false - 2024-10-14 [6dbcc0f] Merge pull request #234 from epini/epini-patch-1 2024-10-09 [0411ec6] Fix data ordering in traj.iquv 2024-09-25 [8c0cfec] [pmcx] bump up pmcx version to 0.3.5 after fixing #233 2024-09-25 [58dec12] [bug] angleinvcdf and invcdf are not read in full in pmcx, fix #233 @@ -78,7 +123,7 @@ Major updates are marked with a "*" 2024-03-18 [94961f3] [bug] return source ID in multi-source simulation, fix #217 2024-03-17 [3c3d755] [release] post v2024.2 release action, close #216 2024-03-17 [7902a4e] [mcxcloud] update docker image to v2024.2 - 2024-03-15 [08bfe11] [feat] support _ArrayData_ in Shapes volume input + 2024-03-15 [08bfe11]*[feat] support _ArrayData_ in Shapes volume input == MCX v2024.2 (Interstellar Ion - 2.2), FangQ == diff --git a/README.md b/README.md index 883a5a6a..96b004e8 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Monte Carlo eXtreme (MCX) - CUDA Edition - Author: Qianqian Fang (q.fang at neu.edu) - License: GNU General Public License version 3 (GPLv3) -- Version: 2.8 (v2025.6.pre, Kilo-Kelvin) +- Version: 2.8 (v2025.9, Kilo-Kelvin) - Website: - Download: @@ -42,120 +42,76 @@ Table of Content: What's New ------------- -MCX v2025 is a maintenance release with multiple bug fixes and minor new features. It is highly +MCX v2025.9 is a maintenance release with multiple bug fixes and minor new features. It is highly recommended to upgrade for all users. -Notable major bug fixes include -- a high priority bug #222, introduced in 198cd34, was fixed. this bug affects all simulations - since v2023. Particularly, when a photon has a long pathlength, with weight drops to numerical 0, - its pathlength data is carried in the immediately launched new photon, causing skews in the - detected photon pathlength distributions -- further updates to the handling of low absorption medium (#164), previously affect not-so-low mua values -- a bug fix related to multi-source simulation to properly return the source ID (#217) -- fix angleinvcdf and invcdf in pmcx that was previously not enabled (#233) -- fix svmc flipped normal direction only in mcxlab for Octave (#221) -- fix continuous media nan handling (#224, #225) -- fix the bug that prevents the use of photon-sharing with pattern3d source -- correctly store detector ID and initial launch pixel index in pattern3d photon-sharing simulations -- for all brain related simulations, we have updated the CSF mua value of 0.004/mm that was - previously used in Custo et al. 2006 paper to 0.0004/mm, matching its upstream reference Strangman et al. 2003. - However, we want to highlight that both literature may not provide the best mua value for CSF - as such low - mua/mus CSF properties are mostly for CSF in the inner part of the brain, but not representiative to those in - the subarachnoid space. A few literature have shown that CSF in the subarachnoid space may have a higher - mus' value, in the range between 0.16/mm to 0.32/mm, as shown in Okada et al. 2003 - -1. [Okada_2003] -E. Okada and D. T. Delpy, "Near-infrared light propagation in an adult head model. I. Modeling of low-level scattering in the cerebrospinal fluid layer," Applied Optics 42, 2906–2914 (2003) -2. [Custo_2006] -A. Custo, W. M. Wells III., A. H. Barnett, et al., "Effective scattering coefficient of the cerebral spinal fluid in adult head models for diffuse optical imaging," Applied Optics 45, 4747 (2006) -3. [Strangman_2003] -G. Strangman, M. A. Franceschini, and D. A. Boas, "Factors affecting the accuracy of near-infrared spectroscopy concentration calculations for focal changes in oxygenation parameters," NeuroImage 18, 865–879 (2003) - - -In addition, in this release, we also added the following key new features - -- the new `-N/--net` command line flag allows one to browse and run growing number of community-contributed - simulations hosted on https://neurojson.io (one can browse the list at https://neurojson.org/db/mcx) -- mcx can read JSON input file from `stdin` (standard input) using pipe, allow one to use advanced text processing utilities in the shell, - such as `sed, perl, jq` to modify JSON inputs at runtime. For example `mcx -N cube60 --dumpjson | jq '.Forward.Dt=1e-10' | mcx -f` -- a new shortcut option `-Q` for `--bench` to conveniently browse and run built-in benchmarks -- a new demo script `demo_mcxlab_replay_traj.m` to show how to use replay to produce trajectories between source/detector -- mcxlab and pmcx cam set `cfg.flog=1` or 0 to disable printing of mcx banner -- setting a negative detector radius creates excluded detection areas, making it possible to create ring-shaped detectors +Notable new features include: +- initial international language support (i18n), including Chinese (zh_CN and zh_TW), + French (fr_CA), Spanish (es_MX), Germany (de_DE), Japanese (ja_JP), Korean (ko_KR), + Hindi (hi_IN) and Portugues (pt_BR); use `--lang` in the command line or `cfg.lang` + or `cfg['lang']`, or use environment variable `MCX_LANG` to set output language; +- ported additional mcx utility functions from mcxlab to pmcx, including `cwdiffusion`, + `cwfluxdiffusion`, `cwfluencediffusion`, `dcsg1`, `mcxcreate`, `rfreplay`, `rfmusreplay`, + `loadmc2`, `loadmch`, `loadfile`, `mcx2json`, `json2mcx`, `loadnii`, `preview`, + `plotshapes`, `plotphotons`, `plotvol`; all new functions are unit-tested +- make mcx data processing functions in `pmcx` Python module pip-installable for Mac + users running on Apple silicon. The GPU simulation binary module (`_pmcx`) is not + supported on Apple silicon as it does not support CUDA. +- use replay to produce frequency-domain Jacobians - contributed by Paulliina + +This release also contains a few bug fixes, including +- ensure time gate can not exceed gcfg->maxgate, fix #242 +- fix typos in pmcx functions +- package DLL files in the github action build script for mcxlab The detailed updates can be found in the below change log -* 2025-01-22 [24b445e] [bug] fix incorrect per-voxel pathlength when mua->0, #164 -* 2025-01-21 [1f536ba] [bug] fix windows -N error -* 2025-01-21 [aeca212] [cmake] update cmake to add -N support -* 2025-01-21 [134ab82] [ci] fix windows msvc compilation error -* 2025-01-21 [12071fd] [feat] add -N/--net to download simulations from NeuroJSON.io, add -Q -* 2025-01-10 [cf10d5f] [pmcx] Parse issavedet field of the cfg dict as an int instead of a bool. -* 2025-01-03 [8f433e9] [feat] allow plotting logical arrays in mcxplotvol -* 2024-12-15 [eafea84] [feat] polish and miss_hit format of `demo_mcxlab_replay_traj.m` -* 2024-12-15 [82e100b] [feat] add missing demo_mcxlab_replay_traj.m script -* 2024-12-11 [22bf12a] [bug] fix mcxlab castlist -* 2024-12-04 [86dcba9] [bug] force most scalar inputs to be double to avoid incorrect typecasting -* 2024-11-25 [4b7020d] [ci] upgrade pmcx macos build to macos-13 -* 2024-11-25 [51e9970] [bug] fix mcx crash when replay is requested without seed file -* 2024-11-22 [e8907db] [ci] include vcomp140.dll in windows binary -* 2024-11-22 [2902119] [ci] further test vcomp140 -* 2024-11-22 [c3d413d] [ci] find vcomp140.dll -* 2024-11-21 [4f1335c] [ci] print vcomp1xx.dll path -* 2024-11-21 [d033755] [bug] apply patch in #235 to pmcx, bump pmcx to v0.3.6 -* 2024-11-21 [744c088] [bug] correctly return integer based w0 and detid in pattern3d -* 2024-11-21 [dcf11c4] [bug] enable photon sharing for pattern3d source -* 2024-11-18 [bd62362] [bug] fix mcxlab crash with >2^31-1 voxels, fix #235, revert #164 -* 2024-11-13 [188338b] [feat] negative detector radius captures but does not save photons -* 2024-11-12 [dfc704f] [ci] reduce macos binary size using strip -* 2024-11-12 [7d33c14] [ci] disable octave download on macos -* 2024-11-12 [43e7416] [ci] download octave app with -L -* 2024-11-12 [c978a3e] [ci] use octave app on macos -* 2024-11-12 [30cc3cb] [ci] upload macos mcx package -* 2024-11-12 [24d1257] [ci] downgrade download-artifact as it does not support multiple jobs -* 2024-11-10 [f17dcc6] [bug] fix mcxlab crash when using issave2pt=0 with photonsharing -* 2024-11-09 [8c69db3] [ci] update setup.py for pmcx -* 2024-11-09 [fd83829] [ci] disable CMAKE_RANLIB -* 2024-11-09 [dbada19] [ci] debug ranlib -* 2024-11-09 [208c31d] [ci] use verbose option to debug macos build flags -* 2024-11-09 [4e0c672] [bug] fix maskdet 1cube test -* 2024-11-08 [ee5be15] [feat] make onecube benchmark maskdet work, fix --dumpmask -* 2024-11-08 [f2d3bc4] [feat] support 1x1x1 volume, add onecube/twocube benchmarks, det not working -* 2024-11-06 [eaafb0b] [feat] disabling issaveref if issave2pt is false -* 2024-10-09 [0411ec6] Fix data ordering in traj.iquv -* 2024-09-25 [8c0cfec] [pmcx] bump up pmcx version to 0.3.5 after fixing #233 -* 2024-09-25 [58dec12] [bug] angleinvcdf and invcdf are not read in full in pmcx, fix #233 -* 2024-09-14 [7b8ecb6] [ci] restore macos-12 -* 2024-09-13 [6fbf3db] [bug] fix the potential typo in Custo et al for CSF mua, fix #232 -* 2024-09-03 [c9456a7] [ci] fix action alert related to download-artifact -* 2024-08-22 [70f95ba] [pmcx] fix CI error for pmcx -* 2024-08-22 [82fb8f1] [feat] allow mcxlab and pmcx to use cfg.flog to control log printing -* 2024-08-18 [17e347c] [bug] fix lzma memory leakage, NeuroJSON/zmat#11, lloyd/easylzma#4 -* 2024-08-06 [5cc92ab] [bug] avoid using the same RNG seed when -E -1 on multiple GPUs -* 2024-08-06 [3c480b6] [doc] clarify the default RNG seed (1648335518) in html doc -* 2024-07-22 [d8959eb] [ci] update macos-11 to 12 as 11 no longer works -* 2024-07-14 [b17cb1a] [bug] mcxplotshapes patch by ChenJY-L to plot Box, close #227 -* 2024-07-14 [78716e4] [bug] avoid overwriting mua/mus when one is nan, fix #224, fix #225 -* 2024-07-04 [80b5794] [bug] read g and n when mua or mus=nan in asgn_float, close #225, close #224 -* 2024-06-22 [f959c71] [bug] store reflection position in trajectory -* 2024-06-19 [4ff5b60] [bug] print large photon numbers without overflow -* 2024-06-11 [d66a0a3] [test] sync test script between mcx and mcxcl after fangq/mcxcl#57 -* 2024-06-11 [1e7d0f1] [bug] reset replay.tof when tof exceeds tend, like fangq/mcxcl#57 -* 2024-06-07 [026eebf] [bug] ensure to clear shared mem buffer regardless of weight, #222 -* 2024-06-06 [b41c915] [bug] fix skewed nscat distribution, fix #222 -* 2024-06-05 [654dff1] [bug] fix outputtype error in json2mcx, reformat with miss_hit -* 2024-06-05 [25b0268] [feat] export iquv in trajectory data when cfg.istrajstokes=1 -* 2024-05-18 [0a76d17] [bug] fix mcxsvmc flipped normal direction in octave, fix #221 -* 2024-05-18 [2f42524] [ci] downgrade matlab from v2024a to v2022a -* 2024-05-14 [56aa355] [doc] update jsonlan and neurojson toolbox download links -* 2024-04-25 [ea67ea9] [bug] avoid double-base64-encoding when -Z 2 is used, fix #219 -* 2024-03-28 [3b7e11c] [doc] fix incorrect default value for gscatter -* 2024-03-25 [b4706ae] [release] update winget mcxstudio package -* 2024-03-18 [2953735] [doc] add documentation on the srcid output in detp and traj -* 2024-03-18 [94961f3] [bug] return source ID in multi-source simulation, fix #217 -* 2024-03-17 [3c3d755] [release] post v2024.2 release action, close #216 -* 2024-03-17 [7902a4e] [mcxcloud] update docker image to v2024.2 -* 2024-03-15 [08bfe11] [feat] support `_ArrayData_` in Shapes volume input +* 2025-09-25 [e230514] [bug] when srctype is unknown, the program can run successfully +* 2025-08-26 [84adbfc] [pmcx] bump version to 0.5.1, some fixes after new unit tests +* 2025-08-26 [e12bbef]*[pmcx] add additional unit tests +* 2025-08-25 [521fcf0] [pmcx] pmcx v0.5.0 +* 2025-08-25 [501d6b3] [pmcx] bump version 0.4.6 to update macos apple silicon src +* 2025-08-24 [37c1205]*[pmcx] initial port of all remaining utils matlab functions to python +* 2025-08-24 [101f3c7] [doc] fix inaccurate descrption of the 'energy' output type +* 2025-08-24 [196d1de] [pmcx] bump pmcx version to 0.4.3 +* 2025-07-20 [fbf5942]*[ci] build none-any pmcx package for Apple silicon macos +* 2025-06-01 [6752c76] [i18n] updated es_MX translations verified by Edgar Guevara +* 2025-06-01 [bdc9a79] [lang] fix some octave warnings, improve translations +* 2025-06-01 [3ebff5b] [bug] use consistent message +* 2025-06-01 [8097604] [feat] read env variable MCX_LANG to set language +* 2025-06-01 [a2c8ef5] [bug] fix typos in translations, there could be more +* 2025-06-01 [fc7c1cf] [pmcx] bump version to 0.4.2 to support cfg['lang'], print lang name +* 2025-06-01 [8ece5d6] [pmcx] fix ci error for windows, support locale in pmcx, pass test +* 2025-06-01 [70958b9] [ci] fix windows vs error, make mcx_lang const visible in c++ +* 2025-06-01 [b99a33f] [ci] fix macos build error, add missing new unit in cmake +* 2025-06-01 [729fc37]*[feat] initial i18n support for international languages +* 2025-05-12 [8663b80] Fix photontof index in WPTOF calculation +* 2025-04-21 [174e35c]*[feat] further polish rf replay for mus Jacobian, close #241 +* 2025-04-21 [346a638] [feat] dynamically detect the lowest supported gpu arch by nvcc +* 2025-04-18 [0b3c364] Create demo script for computing any or all of the available Jacobian types in replay mode +* 2025-04-16 [512ea26] [pmcx] fix ci build errors +* 2025-04-16 [9ec9be1] Fix typo in pmcx.cpp +* 2025-04-15 [3e8b730] fix typo cfg.issaveexit to cfg["issaveexit"] +* 2025-04-12 [0bf148c]*[bug] ensure tshift can not exceed gcfg->maxgate, fix #242 +* 2025-03-18 [98c92ea] Fix undefined variable cfg, should be mcx_config. +* 2025-03-18 [c1bc350] Format updated code and simplify example +* 2025-03-18 [d94e4f4] Add terminal output types for new features. +* 2025-03-17 [0d4c892] Fix typo in cfg struct name. +* 2025-03-17 [ded9aba]*Implement computation of the total time-of-flight (TOF) and final detected weight +* 2025-03-17 [eb4b171] Implement computation of total time-of-flight (TOF)- and final detected weight +* 2025-03-14 [aa7bbdd] [doc] fix typo in mcxlab, fix mcxpreview format +* 2025-03-12 [6d60f81]*[feat] accelerate mcxpreview using isosurface, must transpose +* 2025-03-10 [2eacfb8] [example] fix rf replay script to use .jdat output, fix #239 +* 2025-03-06 [4e02a5b] Add object files to gitignore +* 2025-03-06 [c7df8d9] Fix memory error by unifying handling of otRF and otRFmus +* 2025-03-06 [7e7d88b] Fix function name +* 2025-03-06 [5f7d9c6] Fix compliation errors +* 2025-02-27 [7f05c3b] Remove redundant ifdef +* 2025-02-27 [c1b7c3c] Implement RFmus calculation +* 2025-02-27 [40882be] Add RFmus output type and start implementing calculation +* 2025-02-27 [7f09134] rename new example +* 2025-02-27 [6599a1c] Added new example functions for RF scattering Jacobians. +* 2025-02-23 [986ec46] [doc] post v2025 release action, close #238 Introduction diff --git a/README.txt b/README.txt index c9b32ac4..20420da9 100644 --- a/README.txt +++ b/README.txt @@ -5,7 +5,7 @@ *Author: Qianqian Fang *License: GNU General Public License version 3 (GPLv3) -*Version: 2.8 (v2025.6.pre, Kilo-Kelvin) +*Version: 2.8 (v2025.9, Kilo-Kelvin) *Website: https://mcx.space *Download: https://mcx.space/wiki/?Get --------------------------------------------------------------------- diff --git a/inno/MCXStudio.iss b/inno/MCXStudio.iss old mode 100755 new mode 100644 index 8135b47c..9e2803c7 --- a/inno/MCXStudio.iss +++ b/inno/MCXStudio.iss @@ -10,7 +10,7 @@ #define MyAppName "MCX Studio" #define MyAppDir "MCXStudio" -#define MyAppVersion "v2025.6.pre" +#define MyAppVersion "v2025.9" #define MyAppPublisher "COTILab" #define MyAppURL "https://mcx.space" #define MyAppExeName "mcxstudio.exe" @@ -40,6 +40,7 @@ SolidCompression=yes WizardStyle=modern ChangesEnvironment=true SetupIconFile=mcxstudio_2023.ico +ShowLanguageDialog=yes ArchitecturesInstallIn64BitMode=x64 DefaultGroupName="{#MyAppName} {#MyAppVersion}" VersionInfoCompany={#MyAppPublisher} @@ -50,6 +51,17 @@ UninstallDisplayIcon={app}\{#MyAppExeName} [Languages] Name: "english"; MessagesFile: "compiler:Default.isl" +Name: "french"; MessagesFile: "compiler:Languages\French.isl" +Name: "german"; MessagesFile: "compiler:Languages\German.isl" +Name: "spanish"; MessagesFile: "compiler:Languages\Spanish.isl" +Name: "spanish"; MessagesFile: "compiler:Languages\Spanish.isl" +Name: "italian"; MessagesFile: "compiler:Languages\Italian.isl" +Name: "japanese"; MessagesFile: "compiler:Languages\Japanese.isl" +Name: "korean"; MessagesFile: "compiler:Languages\Korean.isl" +Name: "portuguese"; MessagesFile: "compiler:Languages\BrazilianPortuguese.isl" +;Name: "hindi"; MessagesFile: "compiler:Languages\Hindi.isl" +Name: "chinesesimplified"; MessagesFile: "compiler:Languages\ChineseSimplified.isl" +Name: "chinesetraditional"; MessagesFile: "compiler:Languages\ChineseTraditional.isl" ;;---------------------------------------------------------------------- @@ -69,6 +81,7 @@ Name: "{app}\MCXSuite" Source: "..\mcxstudio.exe"; DestDir: "{app}"; Flags: ignoreversion Source: "..\MCXSuite\mcx\bin\mcxshow.exe"; DestDir: "{app}"; Flags: ignoreversion Source: "..\MCXSuite\mcx\bin\mcxviewer.exe"; DestDir: "{app}"; Flags: ignoreversion +Source: "..\locale\*"; DestDir: "{app}\locale"; Flags: ignoreversion Source: "..\plink.exe"; DestDir: "{app}"; Flags: ignoreversion Source: "..\pscp.exe"; DestDir: "{app}"; Flags: ignoreversion Source: "..\README.txt"; DestDir: "{app}"; Flags: ignoreversion @@ -81,8 +94,8 @@ Source: "..\MCXSuite\mmc\matlab\*"; DestDir: "{code:GetMatlabToolboxLocalPath}\m ;;---------------------------------------------------------------------- [Icons] -Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Parameters: "--user" -Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Parameters: "--user"; Tasks: desktopicon +Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Parameters: "--user --lang={code:GetLanguageCode}" +Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Parameters: "--user --lang={code:GetLanguageCode}"; Tasks: desktopicon Name: "{group}\MCX Website"; Filename: "https://mcx.space/" Name: "{group}\MCX Wiki"; Filename: "https://mcx.space/wiki/" Name: "{group}\MCX Forum"; Filename: "https://groups.google.com/forum/?hl=en#!forum/mcx-users" @@ -97,12 +110,13 @@ Name: "{group}\MCX Forum"; Filename: "https://groups.google.com/forum/?hl=en#!fo Root: HKA; Subkey: "Software\COTILab"; Flags: uninsdeletekeyifempty Root: HKA; Subkey: "Software\COTILab\MCXStudio"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\COTILab\MCXStudio\Settings"; ValueType: string; ValueName: "Language"; ValueData: "{language}" +Root: HKA; Subkey: "Software\COTILab\MCXStudio\Settings"; ValueType: string; ValueName: "LanguageCode"; ValueData: "{code:GetLanguageCode}" ; Associate .mcxp files with My Program (requires ChangesAssociations=yes) Root: HKA; Subkey: "Software\Classes\.mcxp"; ValueType: string; ValueName: ""; ValueData: "MCXStudio.mcxp"; Flags: uninsdeletevalue Root: HKA; Subkey: "Software\Classes\.mcxp\OpenWithProgids"; ValueType: string; ValueName: "MCXStudio.mcxp"; ValueData: ""; Flags: uninsdeletevalue Root: HKA; Subkey: "Software\Classes\MCXStudio.mcxp"; ValueType: string; ValueName: ""; ValueData: "MCXStudio"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\MCXStudio.mcxp\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\mcxstudio.exe,0" -Root: HKA; Subkey: "Software\Classes\MCXStudio.mcxp\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\mcxstudio.exe"" ""%1""" +Root: HKA; Subkey: "Software\Classes\MCXStudio.mcxp\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\mcxstudio.exe"" ""--user"" ""--lang={code:GetLanguageCode}"" ""%1""" ; HKA (and HKCU) should only be used for settings which are compatible with ; roaming profiles so settings like paths should be written to HKLM, which ; is only possible in administrative install mode. @@ -120,7 +134,7 @@ Root: HKLM; Subkey: "System\CurrentControlSet\Control\GraphicsDrivers"; ValueTyp ;;---------------------------------------------------------------------- [Run] -Filename: "{app}\{#MyAppExeName}"; Parameters: "--user"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent +Filename: "{app}\{#MyAppExeName}"; Parameters: "--user --lang={code:GetLanguageCode}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent ;;---------------------------------------------------------------------- @@ -144,6 +158,27 @@ begin Log(Format('MCX Toolbox Path found at %s', [Result])); end; +// Function to convert installer language to application language code +function GetLanguageCode(Param: string): string; +begin + case ActiveLanguage of + 'english': Result := 'en-us'; + 'french': Result := 'fr'; + 'german': Result := 'de'; + 'spanish': Result := 'es'; + 'italian': Result := 'it'; + 'japanese': Result := 'ja'; + 'korean': Result := 'ko'; + 'portuguese': Result := 'pt'; + 'hindi': Result := 'hi'; + 'chinesesimplified': Result := 'zh-cn'; + 'chinesetraditional': Result := 'zh-tw'; + else + Result := 'en-us'; // Default fallback + end; + Log(Format('Language code selected: %s', [Result])); +end; + function InitializeSetup(): Boolean; var MatlabExePath: string; @@ -348,3 +383,4 @@ begin ); end; end; + diff --git a/manpage/mcx.1 b/manpage/mcx.1 index 02c1adb7..c56c0219 100644 --- a/manpage/mcx.1 +++ b/manpage/mcx.1 @@ -1,6 +1,6 @@ .\" Manpage for mcx. .\" Contact fangqq@gmail.com to correct errors or typos. -.TH man 7 "26 January 2025" "v2025.6.pre" "Monte Carlo eXtreme (MCX) man page" +.TH man 7 "26 January 2025" "v2025.9" "Monte Carlo eXtreme (MCX) man page" .SH NAME mcx \- a GPU-accelerated 3-D photon transport simulator .SH SYNOPSIS @@ -45,7 +45,7 @@ if -f is followed by nothing or a single '-', it reads input from stdin via pipe .TP \fB-Q/--bench \fR .TP -Use -Q or --bench to list all built-in benchmarks. As of MCX v2025.6.pre, these benchmarks include +Use -Q or --bench to list all built-in benchmarks. As of MCX v2025.9, these benchmarks include cube60 cube60b cube60planar diff --git a/manpage/mcxcontest.1 b/manpage/mcxcontest.1 index f5c350f5..b97b19c4 100644 --- a/manpage/mcxcontest.1 +++ b/manpage/mcxcontest.1 @@ -1,6 +1,6 @@ .\" Manpage for mcxcontest. .\" Contact fangqq@gmail.com to correct errors or typos. -.TH man 7 "26 January 2025" "v2025.6.pre" "mcxcontest man page" +.TH man 7 "26 January 2025" "v2025.9" "mcxcontest man page" .SH NAME mcxcontest \- benchmark your NVIDIA GPU hardware using MCX built-in tests .SH SYNOPSIS diff --git a/manpage/mcxshow.1 b/manpage/mcxshow.1 index a23e170c..ccd61d19 100644 --- a/manpage/mcxshow.1 +++ b/manpage/mcxshow.1 @@ -1,6 +1,6 @@ .\" Manpage for mcxshow. .\" Contact fangqq@gmail.com to correct errors or typos. -.TH man 7 "26 January 2025" "v2025.6.pre" "mcxshow man page" +.TH man 7 "26 January 2025" "v2025.9" "mcxshow man page" .SH NAME mcxshow \- a 3D previewer for MCX/MCXCL/MMC photon transport simulations .SH SYNOPSIS diff --git a/manpage/mcxstudio.1 b/manpage/mcxstudio.1 index 4a61c226..2972e2ff 100644 --- a/manpage/mcxstudio.1 +++ b/manpage/mcxstudio.1 @@ -1,6 +1,6 @@ .\" Manpage for mcxstudio. .\" Contact fangqq@gmail.com to correct errors or typos. -.TH man 7 "26 January 2025" "v2025.6.pre" "Monte Carlo eXtreme (MCX) Studio man page" +.TH man 7 "26 January 2025" "v2025.9" "Monte Carlo eXtreme (MCX) Studio man page" .SH NAME MCXStudio \- a cross-platform GUI for managing MCX/MCXCL/MMC simulations .SH SYNOPSIS diff --git a/manpage/mcxviewer.1 b/manpage/mcxviewer.1 index 22b65efe..3bd8ac17 100644 --- a/manpage/mcxviewer.1 +++ b/manpage/mcxviewer.1 @@ -1,6 +1,6 @@ .\" Manpage for mcxviewer. .\" Contact fangqq@gmail.com to correct errors or typos. -.TH man 7 "26 January 2025" "v2025.6.pre" "mcxviewer man page" +.TH man 7 "26 January 2025" "v2025.9" "mcxviewer man page" .SH NAME mcxviewer \- a 3D NIfTI/MC2 volumetric data renderer for MCX/MCXCL/MMC photon transport simulations .SH SYNOPSIS diff --git a/manpage/photon.1 b/manpage/photon.1 index ea56b36a..d3b9faf8 100644 --- a/manpage/photon.1 +++ b/manpage/photon.1 @@ -1,6 +1,6 @@ .\" Manpage for photon. .\" Contact fangqq@gmail.com to correct errors or typos. -.TH man 7 "26 January 2025" "v2025.6.pre" "photon man page" +.TH man 7 "26 January 2025" "v2025.9" "photon man page" .SH NAME photon \- a unified command line interface for running MCX/MMC photon simulations .SH SYNOPSIS diff --git a/mcxlab/DESCRIPTION b/mcxlab/DESCRIPTION index f031329d..415f046e 100644 --- a/mcxlab/DESCRIPTION +++ b/mcxlab/DESCRIPTION @@ -1,6 +1,6 @@ Name: mcxlab Version: 2.8 -Date: 2025-02-12 +Date: 2025-20-09 Title: GPU Monte Carlo eXtreme photon transport simulator for MATLAB/Octave Author: Qianqian Fang Maintainer: Qianqian Fang diff --git a/mcxlab/NEWS b/mcxlab/NEWS index 90901fc3..328f7827 100644 --- a/mcxlab/NEWS +++ b/mcxlab/NEWS @@ -2,7 +2,7 @@ Major updates are marked with a "*" -== MCX v2025.6.pre (Kilo-Kelvin - 2.8), FangQ == +== MCX v2025.9 (Kilo-Kelvin - 2.8), FangQ == == MCX v2025 (Jumbo Jolt - 2.6), FangQ == diff --git a/mcxlab/README.txt b/mcxlab/README.txt index 1a3d4ada..60ee7b3f 100644 --- a/mcxlab/README.txt +++ b/mcxlab/README.txt @@ -2,7 +2,7 @@ Author: Qianqian Fang License: GNU General Public License version 3 (GPLv3) -Version: this package is part of Monte Carlo eXtreme (MCX) v2025.6.pre +Version: this package is part of Monte Carlo eXtreme (MCX) v2025.9 diff --git a/mcxlab/mcxlab.m b/mcxlab/mcxlab.m index 6e846416..c4d47583 100644 --- a/mcxlab/mcxlab.m +++ b/mcxlab/mcxlab.m @@ -316,6 +316,8 @@ % for types rf, example: % for types rfmus/wltof/wptof, example: % cfg.session: a string for output file names (only used when no return variables) +% cfg.lang: specify the language code for printing, supported languages include +% zh_CN, zh_TW, ja_JP, fr_CA, es_MX, de_DE, ko_KR, hi_IN, ru_RU, pt_BR % % == Debug == % cfg.debuglevel: debug flag string (case insensitive), one or a combination of ['R','M','P','T'], no space diff --git a/mcxstudio/README.txt b/mcxstudio/README.txt index 5a7ec810..e41da0f2 100644 --- a/mcxstudio/README.txt +++ b/mcxstudio/README.txt @@ -4,7 +4,7 @@ Author: Qianqian Fang License: GNU General Public License version 3 (GPLv3) -Version: 1.8 (v2025.6.pre) +Version: 1.8 (v2025.9) Website: https://mcx.space --------------------------------------------------------------------- diff --git a/mcxstudio/i18n/Makefile b/mcxstudio/i18n/Makefile new file mode 100644 index 00000000..f295ec07 --- /dev/null +++ b/mcxstudio/i18n/Makefile @@ -0,0 +1,2 @@ +all: + find . -name '*.po' -exec sh -c 'msgfmt "$$0" -o ../locale/`basename $$0 .po`.mo' '{}' \; diff --git a/mcxstudio/i18n/mcxstudio.de.po b/mcxstudio/i18n/mcxstudio.de.po new file mode 100644 index 00000000..cc6512d9 --- /dev/null +++ b/mcxstudio/i18n/mcxstudio.de.po @@ -0,0 +1,1993 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: ge_DE\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 3.0.1\n" + +#: tfmabout.button1.caption +msgctxt "tfmabout.button1.caption" +msgid "OK" +msgstr "OK" + +#: tfmabout.caption +msgid "About Monte Carlo eXtreme Studio" +msgstr "Über Monte Carlo eXtreme Studio" + +#: tfmabout.image3.hint +msgctxt "tfmabout.image3.hint" +msgid "About MCX" +msgstr "Über MCX" + +#: tfmconfig.btcancel.caption +msgctxt "tfmconfig.btcancel.caption" +msgid "Cancel" +msgstr "Abbrechen" + +#: tfmconfig.btok.caption +msgctxt "tfmconfig.btok.caption" +msgid "OK" +msgstr "OK" + +#: tfmconfig.caption +msgid "MCX Studio Config" +msgstr "MCX Studio Konfiguration" + +#: tfmconfig.ckusemanualpath.caption +msgid "Use Manual Paths" +msgstr "Manuelle Pfade verwenden" + +#: tfmconfig.edlocalpath.columns[0].title.caption +msgctxt "tfmconfig.edlocalpath.columns[0].title.caption" +msgid "Value" +msgstr "Wert" + +#: tfmconfig.edscppath.hint +msgctxt "tfmconfig.edscppath.hint" +msgid "Local SCP Executable Path" +msgstr "Lokaler SCP-Ausführungspfad" + +#: tfmconfig.edsshpath.hint +msgid "Local SSH Path" +msgstr "Lokaler SSH-Pfad" + +#: tfmconfig.edworkpath.text +msgid "%MCXSTUDIO%/MCXOutput" +msgstr "%MCXSTUDIO%/MCXOutput" + +#: tfmconfig.groupbox2.caption +msgid "MCXStudio Local Output Root Directory" +msgstr "MCX Studio lokales Ausgabe-Wurzelverzeichnis" + +#: tfmconfig.groupbox3.caption +msgid "Remote MCX/MMC/MCXCl Executable Search Paths" +msgstr "Remote-MCX/MMC/MCXCl ausführbare Suchpfade" + +#: tfmconfig.groupbox4.caption +msgid "Local MCX/MMC/MCXCl Executable Search Paths" +msgstr "Lokale MCX/MMC/MCXCl ausführbare Suchpfade" + +#: tfmconfig.groupbox5.caption +msgid "Local SSH Executable Path" +msgstr "Lokaler SSH-Ausführungspfad" + +#: tfmconfig.groupbox6.caption +msgctxt "tfmconfig.groupbox6.caption" +msgid "Local SCP Executable Path" +msgstr "Lokaler SCP-Ausführungspfad" + +#: tfmconfig.groupbox7.caption +msgid "Remote MCX/MMC/MCXCl Output Directory" +msgstr "Remote-MCX/MMC/MCXCl Ausgabeverzeichnis" + +#: tfmconfig.groupbox8.caption +msgid "Remote GPU Server" +msgstr "Remote-GPU-Server" + +#: tfmconfig.label1.caption +msgid "Hostname or IP" +msgstr "Hostname oder IP" + +#: tfmconfig.label2.caption +msgid "Port" +msgstr "Port" + +#: tfmconfig.label3.caption +msgid "User name" +msgstr "Benutzername" + +#: tfmdatafile.btcancel.caption +msgctxt "tfmdatafile.btcancel.caption" +msgid "Cancel" +msgstr "Abbrechen" + +#: tfmdatafile.btok.caption +msgctxt "tfmdatafile.btok.caption" +msgid "OK" +msgstr "OK" + +#: tfmdatafile.caption +msgid " Data File Properties" +msgstr "Datendatei-Eigenschaften" + +#: tfmdatafile.eddataformat.text +msgid "Float (32bit)" +msgstr "Gleitkomma (32 Bit)" + +#: tfmdatafile.label10.caption +msgid "Data File" +msgstr "Datendatei" + +#: tfmdatafile.label4.caption +msgid "Y Dimension" +msgstr "Y-Dimension" + +#: tfmdatafile.label5.caption +msgid "X Dimension" +msgstr "X-Dimension" + +#: tfmdatafile.label6.caption +msgid "Z Dimension" +msgstr "Z-Dimension" + +#: tfmdatafile.label7.caption +msgctxt "tfmdatafile.label7.caption" +msgid "Time Gates" +msgstr "Zeitfenster" + +#: tfmdatafile.label8.caption +msgctxt "tfmdatafile.label8.caption" +msgid "Time Gates" +msgstr "Zeitfenster" + +#: tfmdatafile.label9.caption +msgid "Header Size" +msgstr "Header-Größe" + +#: tfmdomain.acexit.caption +msgid "acExit" +msgstr "acExit" + +#: tfmdomain.acexit.hint +msgctxt "tfmdomain.acexit.hint" +msgid "Exit" +msgstr "Beenden" + +#: tfmdomain.achidebbx.caption +msgid "acHideBBX" +msgstr "acHideBBX" + +#: tfmdomain.achidebbx.hint +msgid "Hide Domain Box" +msgstr "Domänen-Box ausblenden" + +#: tfmdomain.acloadjson.caption +msgid "acLoadJSON" +msgstr "acLoadJSON" + +#: tfmdomain.acloadjson.hint +msgid "Load JSON" +msgstr "JSON laden" + +#: tfmdomain.acrender.caption +msgid "acRender" +msgstr "acRender" + +#: tfmdomain.acrender.hint +msgid "Render" +msgstr "Rendern" + +#: tfmdomain.acresetcamera.caption +msgid "acResetCamera" +msgstr "acResetCamera" + +#: tfmdomain.acresetcamera.hint +msgid "Reset Camera" +msgstr "Kamera zurücksetzen" + +#: tfmdomain.acsaveimage.caption +msgid "acSaveImage" +msgstr "acSaveImage" + +#: tfmdomain.acsaveimage.hint +msgctxt "tfmdomain.acsaveimage.hint" +msgid "Save Screen" +msgstr "Bildschirm speichern" + +#: tfmdomain.acsavejson.caption +msgid "acSaveJSON" +msgstr "acSaveJSON" + +#: tfmdomain.acsavejson.hint +msgid "Save JSON" +msgstr "JSON speichern" + +#: tfmdomain.btbackground.hint +msgctxt "tfmdomain.btbackground.hint" +msgid "Change Background Color" +msgstr "Hintergrundfarbe ändern" + +#: tfmdomain.btpin.caption +msgid "Pin Editor" +msgstr "Editor anheften" + +#: tfmdomain.btpin.hint +msgid "Show editor" +msgstr "Editor anzeigen" + +#: tfmdomain.caption +msgid "MCX Domain Renderer" +msgstr "MCX Domänen-Renderer" + +#: tfmdomain.toolbar1.caption +msgctxt "tfmdomain.toolbar1.caption" +msgid "ToolBar1" +msgstr "ToolBar1" + +#: tfmdomain.toolbutton11.caption +msgid "ToolButton11" +msgstr "ToolButton11" + +#: tfmdomain.toolbutton7.caption +msgid "ToolButton7" +msgstr "ToolButton7" + +#: tfmdomain.toolbutton9.caption +msgctxt "tfmdomain.toolbutton9.caption" +msgid "ToolButton9" +msgstr "ToolButton9" + +#: tfmmcx.btexpandoutput.caption +msgid "â–µ" +msgstr "â–µ" + +#: tfmmcx.btexpandoutput.hint +msgid "To expand or collapse the command window." +msgstr "Um das Befehlsfenster zu erweitern oder zu reduzieren." + +#: tfmmcx.btgbexpand.caption +msgid "▾" +msgstr "▾" + +#: tfmmcx.btloadseed.hint +msgid "Load seed data from previous simulations for replay" +msgstr "Seed-Daten aus vorherigen Simulationen für Wiedergabe laden" + +#: tfmmcx.btsendcmd.caption +msgid "Send" +msgstr "Senden" + +#: tfmmcx.btsendcmd.hint +msgid "Send the user input to the input buffer of the external program \ncurrently being executed.\n" +msgstr "Die Benutzereingabe an den Eingabepuffer des aktuell ausgeführten externen Programms senden.\n" + +#: tfmmcx.button2.caption +msgid "Clear Output" +msgstr "Ausgabe löschen" + +#: tfmmcx.caption +msgid "MCX Studio" +msgstr "MCX Studio" + +#: tfmmcx.ckautopilot.caption +msgid "Let MCX decide thread/block size (-A)" +msgstr "MCX Thread-/Blockgröße entscheiden lassen (-A)" + +#: tfmmcx.ckautopilot.hint +msgid "Autopilot \n\nChecking this box tells MCX/MMC to automatically determine the \"optimal\"\nthread number and block size by using the hardware information.\n\nIt is recommended to always check this box. The key to maximize simulation\nthroughput is to ensure a large number of threads are launched to keep the\nhardware resources fully utilized.\n" +msgstr "Autopilot\n\nDiese Box zu aktivieren teilt MCX/MMC mit, automatisch die \"optimale\" Thread-Anzahl und Blockgröße anhand der Hardware-Informationen zu bestimmen.\n\nEs wird empfohlen, diese Box immer zu aktivieren. Der Schlüssel zur Maximierung des Simulationsdurchsatzes ist sicherzustellen, dass eine große Anzahl von Threads gestartet wird, um die Hardware-Ressourcen vollständig zu nutzen.\n" + +#: tfmmcx.ckbdebug.hint +msgctxt "tfmmcx.ckbdebug.hint" +msgid "DebugFlags" +msgstr "DebugFlags" + +#: tfmmcx.ckbdet.hint +msgid "SaveDetFlag \n\nThis checkbox list allows users to select the detected photon\ndata items that they want to save in the .mch file.\n\nBy default, only the Detector ID and Partial Pathlength are stored.\n" +msgstr "SaveDetFlag\n\nDiese Checkbox-Liste ermöglicht es Benutzern, die detektierten Photonen-Datenelemente auszuwählen, die sie in der .mch-Datei speichern möchten.\n\nStandardmäßig werden nur die Detektor-ID und die partielle Pfadlänge gespeichert.\n" + +#: tfmmcx.ckdoremote.caption +msgid "Run remote command:" +msgstr "Remote-Befehl ausführen:" + +#: tfmmcx.ckdoremote.hint +msgid "DoRemote \n\nCheck this option asks MCXStudio to call the specified ssh command \nand run mcx/mmc simulations on remote servers. \n\nPlease be aware that one must prepare the server and client to enable\nremote execution, this include\n\n1. install mcx/mmc/mcxcl executable on remote server and add path to\n the PATH environment \n2. install ssh client on the local client; for Linux/Mac, ssh/scp command is\n typically built-in; for windows, please install plink.exe and pscp.exe and\n ensure that their paths are on the PATH environment variable\n3. optionally, one can set the SSH key between the client and server to \n avoid typing password, please see http://www.linuxproblem.org/art_9.html\n" +msgstr "DoRemote\n\nDiese Option zu aktivieren fordert MCX Studio auf, den angegebenen SSH-Befehl aufzurufen und mcx/mmc-Simulationen auf Remote-Servern auszuführen.\n\nBitte beachten Sie, dass Server und Client für die Remote-Ausführung vorbereitet werden müssen. Dies beinhaltet:\n\n1. mcx/mmc/mcxcl-Ausführungsdatei auf dem Remote-Server installieren und Pfad zur PATH-Umgebungsvariablen hinzufügen\n2. SSH-Client auf dem lokalen Client installieren; für Linux/Mac ist der ssh/scp-Befehl typischerweise eingebaut; für Windows installieren Sie bitte plink.exe und pscp.exe und stellen sicher, dass ihre Pfade in der PATH-Umgebungsvariablen stehen\n3. optional kann der SSH-Schlüssel zwischen Client und Server eingerichtet werden, um das Eingeben von Passwörtern zu vermeiden, siehe http://www.linuxproblem.org/art_9.html\n" + +#: tfmmcx.ckdoreplay.caption +msgid "Replay" +msgstr "Wiedergabe" + +#: tfmmcx.ckdoreplay.hint +msgid "DoReplay \n\nWhen selecting a .mch file as the seed, this checkbox is automatically \nchecked, signifying that MCX/MMC will perform a photon replay by\nreading the RNG seeds from the .mch file and rerun the photons to produce\nthe Jacobians - in such case, one can use the \"Output Type\" to select which\nmetric to output.\n" +msgstr "DoReplay\n\nBei der Auswahl einer .mch-Datei als Seed wird diese Checkbox automatisch aktiviert, was bedeutet, dass MCX/MMC eine Photonen-Wiedergabe durchführt, indem die RNG-Seeds aus der .mch-Datei gelesen und die Photonen erneut ausgeführt werden, um die Jacobi-Matrizen zu erzeugen - in diesem Fall kann der \"Ausgabetyp\" verwendet werden, um zu wählen, welche Metrik ausgegeben werden soll.\n" + +#: tfmmcx.cklockgpu.caption +msgid "Lock GPU" +msgstr "GPU sperren" + +#: tfmmcx.cklockgpu.hint +msgid "Checking this box prevents MCXStudio from updating the device list\nwhen switching between different simulation sessions.\n\nWhen running simulation on a remote server, it is recommended to\nlock the GPU to avoid resetting of the device list.\n" +msgstr "Diese Box zu aktivieren verhindert, dass MCX Studio die Geräteliste beim Wechseln zwischen verschiedenen Simulationssitzungen aktualisiert.\n\nBei der Ausführung von Simulationen auf einem Remote-Server wird empfohlen, die GPU zu sperren, um ein Zurücksetzen der Geräteliste zu vermeiden.\n" + +#: tfmmcx.cknormalize.caption +msgid "Do normalization (-U)" +msgstr "Normalisierung durchführen (-U)" + +#: tfmmcx.cknormalize.hint +msgid "DoNormalize \n\nCheck this option allows MCX/MMC to normalize the output by the \nbelow formula\n\nΦ(i,j,k,t)=E(i,j,k,t) / (V*E_total*dT)\n\nwhere E(i,j,k,t) is the raw accummuated energy at each voxel; \nV is the size of the voxel in mm^3; dT is the time-gate width in s.\n\nAfter normalization, the result becomes TPSF or Green's function.\n\nUnchecking this option disables normalization.\n" +msgstr "DoNormalize\n\nDiese Option zu aktivieren ermöglicht es MCX/MMC, die Ausgabe mit der folgenden Formel zu normalisieren:\n\nΦ(i,j,k,t)=E(i,j,k,t) / (V*E_total*dT)\n\nwobei E(i,j,k,t) die rohe akkumulierte Energie an jedem Voxel ist; V ist die Größe des Voxels in mm^3; dT ist die Zeitfenster-Breite in s.\n\nNach der Normalisierung wird das Ergebnis zur TPSF oder Green-Funktion.\n\nDiese Option zu deaktivieren deaktiviert die Normalisierung.\n" + +#: tfmmcx.ckreflect.caption +msgid "Do reflection all boundaries (-b)" +msgstr "Reflexion an allen Grenzen (-b)" + +#: tfmmcx.ckreflect.hint +msgid "DoReflect \n\nCheck this option (by default) enables reflection/refrection calculations \nwhen refractive index mismatch is detected at tissue boundaries.\n\nIf this option is unchecked, any photon hits the boundary between a \nnon-zero and zero-valued voxel will be terminated (i.e. total\nabsorbtion boundary condition). \n\nThe medium outside of the volume bounding box is assumed to have \nthe optical properties defined as label 0 (the first row in the Media Settings\ntable on the right).\n" +msgstr "DoReflect\n\nDiese Option (standardmäßig) zu aktivieren ermöglicht Reflexions-/Brechungsberechnungen, wenn eine Brechungsindex-Diskrepanz an Gewebegrenzen erkannt wird.\n\nWenn diese Option nicht aktiviert ist, wird jedes Photon, das die Grenze zwischen einem Voxel mit Nicht-Null- und Null-Wert trifft, beendet (d.h. totale Absorptions-Randbedingung).\n\nDas Medium außerhalb der Volumen-Bounding-Box wird angenommen, die optischen Eigenschaften zu haben, die als Label 0 definiert sind (die erste Zeile in der Medien-Einstellungstabelle rechts).\n" + +#: tfmmcx.cksavedata.caption +msgid "Save fluence (-S)" +msgstr "Fluenz speichern (-S)" + +#: tfmmcx.cksavedata.hint +msgid "DoSave \n\nChecking this option makes MCX/MMC outputs the volumetric fluence\ndata: for MCX, it is the .mc2/.nii file; for MMC, it is a .dat file using P/H/B/S \nray-tracers and .mc2/.nii files when using the dual-grid mode (-M G).\n\nUnchecking this option stops MCX/MMC output the .mc2/.nii file.\n" +msgstr "DoSave\n\nDiese Option zu aktivieren lässt MCX/MMC die volumetrischen Fluenz-Daten ausgeben: für MCX ist es die .mc2/.nii-Datei; für MMC ist es eine .dat-Datei mit P/H/B/S-Ray-Tracern und .mc2/.nii-Dateien beim Dual-Grid-Modus (-M G).\n\nDiese Option zu deaktivieren stoppt die MCX/MMC-Ausgabe der .mc2/.nii-Datei.\n" + +#: tfmmcx.cksavedetector.caption +msgid "Save detected photons (-d)" +msgstr "Detektierte Photonen speichern (-d)" + +#: tfmmcx.cksavedetector.hint +msgid "SaveDetector \n\nChecking this option allows one to store detected photon \ninformation. The output data records can be user-defined by\nselecting the check-box list entitled \"Save detected photon\".\nThe output data are stored in a .mch file.\n\nUnchecking this option disables output the .mch file (can be \nslightly faster).\n" +msgstr "SaveDetector\n\nDiese Option zu aktivieren ermöglicht es, detektierte Photonen-Informationen zu speichern. Die Ausgabe-Datensätze können benutzerdefiniert werden, indem die Checkbox-Liste \"Detektierte Photonen speichern\" ausgewählt wird. Die Ausgabedaten werden in einer .mch-Datei gespeichert.\n\nDiese Option zu deaktivieren deaktiviert die Ausgabe der .mch-Datei (kann etwas schneller sein).\n" + +#: tfmmcx.cksavemask.caption +msgid "Save volume mask (-M)" +msgstr "Volumenmaske speichern (-M)" + +#: tfmmcx.cksavemask.hint +msgid "DoSaveMask \n\nChecking this option asks MCX to output the pre-processed volume \nmasks. The preprocessed mask contains the voxels that are covered\nunder detectors; these voxels are designated by setting the sign-bit \nas 1. One can visualize this dumped data mask using mcxplotvol.m\n\nUnchecking this option suppresses the output of this mask file.\n" +msgstr "DoSaveMask\n\nDiese Option zu aktivieren fordert MCX auf, die vorverarbeiteten Volumenmasken auszugeben. Die vorverarbeitete Maske enthält die Voxel, die unter Detektoren abgedeckt sind; diese Voxel werden durch Setzen des Vorzeichen-Bits auf 1 gekennzeichnet. Man kann diese ausgegebene Datenmaske mit mcxplotvol.m visualisieren.\n\nDiese Option zu deaktivieren unterdrückt die Ausgabe dieser Maskendatei.\n" + +#: tfmmcx.cksaveref.caption +msgid "Save diffuse reflectance (-X)" +msgstr "Diffuse Reflektanz speichern (-X)" + +#: tfmmcx.cksaveref.hint +msgid "DoSaveRef \n\nChecking this option allows MCX/MMC to output the escaped photon\nweights on the exterior surface of the domain. For MCX, to save the \ntotal diffuse reflectance, one must pad a layer of zero voxels in the \nfacet or full bounding box of the domain to store such data. The raw \ntotal diffuse reflectance are normalized and stored as negative values\nin the .mc2/.nii file. When loading such file using loadmc2.m, the diffuse\nreflectance data are extracted and converted to positive output.\n\nUnchecking this option disables saving diffuse reflectance data.\n" +msgstr "DoSaveRef\n\nDiese Option zu aktivieren ermöglicht es MCX/MMC, die Gewichte entkommener Photonen auf der Außenfläche des Bereichs auszugeben. Für MCX muss man zum Speichern der gesamten diffusen Reflektanz eine Schicht von Null-Voxeln in die Facette oder vollständige Bounding-Box des Bereichs einfügen, um solche Daten zu speichern. Die rohe gesamte diffuse Reflektanz wird normalisiert und als negative Werte in der .mc2/.nii-Datei gespeichert. Beim Laden einer solchen Datei mit loadmc2.m werden die diffusen Reflektanz-Daten extrahiert und in positive Ausgabe umgewandelt.\n\nDiese Option zu deaktivieren deaktiviert das Speichern von diffusen Reflektanz-Daten.\n" + +#: tfmmcx.cksaveseed.caption +msgid "Save photon seeds (-q)" +msgstr "Photonen-Seeds speichern (-q)" + +#: tfmmcx.cksaveseed.hint +msgid "DoSaveSeed \n\nChecking this option allows one to save the RNG seeds of the detected\nphotons in the .mch file. This makes it possible to perform photon replay\nto compute the Jacobian when feeding this output .mch file as the seed\nfor the replay run.\n\nUnchecking this option disables saving photon seeds.\n" +msgstr "DoSaveSeed\n\nDiese Option zu aktivieren ermöglicht es, die RNG-Seeds der detektierten Photonen in der .mch-Datei zu speichern. Dies macht es möglich, eine Photonen-Wiedergabe durchzuführen, um die Jacobi-Matrix zu berechnen, wenn diese Ausgabe-.mch-Datei als Seed für den Wiedergabelauf verwendet wird.\n\nDiese Option zu deaktivieren deaktiviert das Speichern von Photonen-Seeds.\n" + +#: tfmmcx.cksharedfs.caption +msgid "Shared file system" +msgstr "Gemeinsames Dateisystem" + +#: tfmmcx.cksharedfs.hint +msgid "DoSharedFS \n\nChecking this option suggests that both the client and the server\nshare the same file system, thus, no file copying is needed. In other\nword, the folder structure to read/write on both client and server\nare identical. This is the case when one uses nfs/autofs on Linux/Mac.\n" +msgstr "DoSharedFS\n\nDiese Option zu aktivieren deutet darauf hin, dass Client und Server dasselbe Dateisystem teilen, daher ist kein Dateikopieren erforderlich. Mit anderen Worten, die Ordnerstruktur zum Lesen/Schreiben auf Client und Server ist identisch. Dies ist der Fall bei der Verwendung von nfs/autofs auf Linux/Mac.\n" + +#: tfmmcx.ckshowprogress.caption +msgid "Show progress bar" +msgstr "Fortschrittsbalken anzeigen" + +#: tfmmcx.ckshowprogress.hint +msgid "ShowProgress \n\n(This option is highly experimental, use with caution, may cause hanging on some GPUs)\n\nCheck this option to let MCX/MMC to print a progress bar during the\nGPU simulation. In some hardware, this may cause unstable behaviors\nsuch as stalling or never return even the simulation is complete. If such\nbehavior is detected, please uncheck this option.\n" +msgstr "ShowProgress\n\n(Diese Option ist hochgradig experimentell, mit Vorsicht verwenden, kann bei einigen GPUs zu Hängern führen)\n\nDiese Option aktivieren, damit MCX/MMC während der GPU-Simulation einen Fortschrittsbalken anzeigt. Bei einiger Hardware kann dies zu instabilem Verhalten wie Blockierung oder niemals zurückkehren führen, auch wenn die Simulation abgeschlossen ist. Wenn solches Verhalten erkannt wird, deaktivieren Sie bitte diese Option.\n" + +#: tfmmcx.ckskipvoid.caption +msgid "Skip void space (-k)" +msgstr "Leerraum überspringen (-k)" + +#: tfmmcx.ckskipvoid.hint +msgid "DoSkipVoid \n\nChecking this option starts photon's ellapse time when it first enters\na non-zero voxel.\n\nUnchecking this option starts photon's ellapse time at launch time,\nregardless it is launched in the background (0-valued) voxel or non-zero\nvoxel.\n" +msgstr "DoSkipVoid\n\nDiese Option zu aktivieren startet die verstrichene Zeit des Photons, wenn es zum ersten Mal in ein Nicht-Null-Voxel eintritt.\n\nDiese Option zu deaktivieren startet die verstrichene Zeit des Photons zur Startzeit, unabhängig davon, ob es im Hintergrund- (0-wertig) oder Nicht-Null-Voxel gestartet wird.\n" + +#: tfmmcx.ckspecular.caption +msgid "Do specular reflection (-V)" +msgstr "Spiegelreflexion durchführen (-V)" + +#: tfmmcx.ckspecular.hint +msgid "DoSpecular \n\nChecking this option performs a transmission calculation if a photon \nis launched in the background; this results in change of direction angle\nand loss of energy.\n\nUnchecking this option moves a photon into a non-zero voxel without\nconsidering the specular reflection and change of direction.\n" +msgstr "DoSpecular\n\nDiese Option zu aktivieren führt eine Transmissionsberechnung durch, wenn ein Photon im Hintergrund gestartet wird; dies führt zu einer Änderung des Richtungswinkels und Energieverlust.\n\nDiese Option zu deaktivieren bewegt ein Photon in ein Nicht-Null-Voxel, ohne die Spiegelreflexion und Richtungsänderung zu berücksichtigen.\n" + +#: tfmmcx.cksrcfrom0.caption +msgid "Orign from [0,0,0] (-z)" +msgstr "Ursprung von [0,0,0] (-z)" + +#: tfmmcx.cksrcfrom0.hint +msgid "DoSrcFrom0 \n\nChecking this item assumes the lower-bottom corner of the voxelated \ndomain is [0,0,0] mm. The definitions of source and detector positions \nare impacted by this definition.\n\nUnchecking this option assumes the lower-bottom corner of the \ndomain is [1,1,1] mm.\n" +msgstr "DoSrcFrom0\n\nDieses Element zu aktivieren nimmt an, dass die untere linke Ecke des voxelisierten Bereichs [0,0,0] mm ist. Die Definitionen von Quell- und Detektorpositionen werden von dieser Definition beeinflusst.\n\nDiese Option zu deaktivieren nimmt an, dass die untere linke Ecke des Bereichs [1,1,1] mm ist.\n" + +#: tfmmcx.edbenchmark.hint +msgid "Benchmark \n\nThis option asks to run the built-in benchmark.\n" +msgstr "Benchmark\n\nDiese Option fordert auf, den eingebauten Benchmark auszuführen.\n" + +#: tfmmcx.edblocksize.hint +msgid "ThreadBlock \n\nSpecify a small integer, preferably a multiple of 32, to define \nthe block size - for example, 64 means a thread block contains \n64 threads.\n\nThis is only used when the -A (autopilot mode) is not enabled.\n" +msgstr "ThreadBlock\n\nEine kleine ganze Zahl angeben, vorzugsweise ein Vielfaches von 32, um die Blockgröße zu definieren - zum Beispiel bedeutet 64, dass ein Thread-Block 64 Threads enthält.\n\nDies wird nur verwendet, wenn der -A (Autopilot-Modus) nicht aktiviert ist.\n" + +#: tfmmcx.edblocksize.text +msgid "64" +msgstr "64" + +#: tfmmcx.edbubble.hint +msgctxt "tfmmcx.edbubble.hint" +msgid "BubbleSize" +msgstr "BubbleSize" + +#: tfmmcx.edbubble.text +msgid "-2" +msgstr "-2" + +#: tfmmcx.edcmdinput.hint +msgid "User Input\n\nWhen connecting to a remote server via ssh/scp, one may asked to type\n\"yes\" to save the ssh key or other interactive inputs. If this is the case, one\ncan use this field to type user input, and click \"Send\" to pipe user input to \nthe external program.\n" +msgstr "Benutzereingabe\n\nBeim Verbinden zu einem Remote-Server über ssh/scp kann man aufgefordert werden, \"yes\" zu tippen, um den SSH-Schlüssel zu speichern oder andere interaktive Eingaben zu machen. In diesem Fall kann man dieses Feld verwenden, um Benutzereingaben zu tippen, und \"Senden\" klicken, um die Benutzereingabe an das externe Programm zu leiten.\n" + +#: tfmmcx.edconfigfile.hint +msgid "InputFile \n\nSpecify the input file in either .inp or .json format.\n" +msgstr "InputFile\n\nDie Eingabedatei im .inp- oder .json-Format angeben.\n" + +#: tfmmcx.eddetectednum.hint +msgid "DetectedNum \n\nThis sets the maximum number of detected photons to be stored. If\nthe actual detected photon number is higher than this specified number,\nmcx/mmc will generate an warning and print out the actual detected \nphoton count; one can use that output in this field to allow MCX to store\nall photons.\n" +msgstr "DetectedNum\n\nDies setzt die maximale Anzahl der zu speichernden detektierten Photonen. Wenn die tatsächliche Anzahl detektierter Photonen höher ist als diese angegebene Zahl, erzeugt mcx/mmc eine Warnung und gibt die tatsächliche Anzahl detektierter Photonen aus; man kann diese Ausgabe in diesem Feld verwenden, um MCX zu erlauben, alle Photonen zu speichern.\n" + +#: tfmmcx.eddetectednum.text +msgid "10000000" +msgstr "10000000" + +#: tfmmcx.edgate.hint +msgctxt "tfmmcx.edgate.hint" +msgid "GateNum" +msgstr "GateNum" + +#: tfmmcx.edgpuid.hint +msgid "GPUID \n\nUse this list to select the device or devices (CPU or GPU) used to\nrun the simulation. For MCX, if multiple CUDA GPUs are installed, one\ncan select multiple devices to speed up the calculation; for MCXCL\nand MMC, one can select OpenCL devices that include both CPU and\nGPUs. In such case, only devices of the same platform can be selected.\nFor example, an NVIDIA GPU and a CPU can not be selected together.\n" +msgstr "GPUID\n\nDiese Liste verwenden, um das Gerät oder die Geräte (CPU oder GPU) auszuwählen, die für die Simulation verwendet werden. Für MCX kann man bei installierten mehreren CUDA-GPUs mehrere Geräte auswählen, um die Berechnung zu beschleunigen; für MCXCL und MMC kann man OpenCL-Geräte auswählen, die sowohl CPU als auch GPUs umfassen. In diesem Fall können nur Geräte derselben Plattform ausgewählt werden. Zum Beispiel können eine NVIDIA-GPU und eine CPU nicht zusammen ausgewählt werden.\n" + +#: tfmmcx.edmoreparam.hint +msgid "MoreParam \n\nOne can use this field to manually specify additional parameters that\nare not supported by this GUI tool. Any parameter set here will overwrite\nthe previous setting.\n" +msgstr "MoreParam\n\nMan kann dieses Feld verwenden, um manuell zusätzliche Parameter anzugeben, die von diesem GUI-Tool nicht unterstützt werden. Jeder hier gesetzte Parameter überschreibt die vorherige Einstellung.\n" + +#: tfmmcx.edoutputformat.hint +msgid "OutputFormat \n\nThis specifies the output data file format. The supported formats are\n\n.mc2 - a simple binary format stores the voxel-by-voxel binary data\n in the column-major order\n.nii - the NIfTI-1 format\n.tx3 - a simple 3D texture binary format.\nascii - text-based data file\n" +msgstr "OutputFormat\n\nDies gibt das Ausgabedateiformat an. Die unterstützten Formate sind:\n\n.mc2 - ein einfaches Binärformat, das die Voxel-für-Voxel-Binärdaten in spaltenweiser Reihenfolge speichert\n.nii - das NIfTI-1-Format\n.tx3 - ein einfaches 3D-Textur-Binärformat\nascii - textbasierte Datendatei\n" + +#: tfmmcx.edoutputtype.hint +msgid "OutputType \n\nThis option specifies the output data type. \n\n* Fluence rate [J/mm^2/s] - the default output\n* Fluence [J/mm^2] - the integration of the fluence \n rate over each time gate\n* Energy deposition [J] - can be computed by multiplying \n fluence with absorption μa and voxel volume [mm^3]\n* Absorption Jacobian (mua) [1/mm] - in the replay mode, this\n outputs the sensitivity matrix for μa;\n* Average scattering event count - in the replay mode, this\n outputs the number of scattering event per voxel\n* Momentum transfer sensivity (DCS) - in the replay mode, this \n outputs the momentum transfer contribution/sensitivity from \n each voxel.\n" +msgstr "OutputType\n\nDiese Option gibt den Ausgabedatentyp an.\n\n* Fluenzrate [J/mm^2/s] - die Standardausgabe\n* Fluenz [J/mm^2] - die Integration der Fluenzrate über jedes Zeitfenster\n* Energiedeposition [J] - kann durch Multiplikation der Fluenz mit Absorption μa und Voxelvolumen [mm^3] berechnet werden\n* Absorptions-Jacobi-Matrix (mua) [1/mm] - im Wiedergabemodus gibt dies die Sensitivitätsmatrix für μa aus\n* Durchschnittliche Streuungsereignisanzahl - im Wiedergabemodus gibt dies die Anzahl der Streuungsereignisse pro Voxel aus\n* Impulsübertragungssensitivität (DCS) - im Wiedergabemodus gibt dies den Impulsübertragungsbeitrag/die Sensitivität von jedem Voxel aus\n" + +#: tfmmcx.edphoton.hint +msgid "PhotonNum \n\nThis defines the total simulated photons.\n\nCan be an integer or number in scientific form. For example\n100000 and 1e5 are both acceptable.\n\nPlease be noted that we highly suggest one to start with a\nsmall photon number to avoid extended run time.\n" +msgstr "PhotonNum\n\nDies definiert die Gesamtzahl der simulierten Photonen.\n\nKann eine ganze Zahl oder Zahl in wissenschaftlicher Form sein. Zum Beispiel sind 100000 und 1e5 beide akzeptabel.\n\nBitte beachten Sie, dass wir dringend empfehlen, mit einer kleinen Photonenzahl zu beginnen, um längere Laufzeiten zu vermeiden.\n" + +#: tfmmcx.edphoton.text +msgid "1e6" +msgstr "1e6" + +#: tfmmcx.edphoton.texthint +msgid "Integer" +msgstr "Ganzzahl" + +#: tfmmcx.edremote.hint +msgid "RemoteCmd \n\nPlease choose the remote connection command using the dropdown list, or\ntype in this field manually. For windows, it is recommended to choose the \nplink.exe command; for Linux, it is recommended to use the ssh command.\n\nPlease replace the user@server by the actual username and the server IP\nor domain name.\n\nYou are highly recommended to set up key-based ssh access to avoid typing\npassword. Tutorials can be found at http://www.linuxproblem.org/art_9.html\n" +msgstr "RemoteCmd\n\nBitte wählen Sie den Remote-Verbindungsbefehl aus der Dropdown-Liste oder geben Sie in diesem Feld manuell ein. Für Windows wird empfohlen, den plink.exe-Befehl zu wählen; für Linux wird empfohlen, den ssh-Befehl zu verwenden.\n\nBitte ersetzen Sie user@server durch den tatsächlichen Benutzernamen und die Server-IP oder den Domainnamen.\n\nEs wird dringend empfohlen, schlüsselbasierten SSH-Zugang einzurichten, um das Eingeben von Passwörtern zu vermeiden. Tutorials finden Sie unter http://www.linuxproblem.org/art_9.html\n" + +#: tfmmcx.edremote.text +msgid "Built-in ssh" +msgstr "Eingebautes ssh" + +#: tfmmcx.edreplaydet.hint +msgctxt "tfmmcx.edreplaydet.hint" +msgid "ReplayDet" +msgstr "ReplayDet" + +#: tfmmcx.edrespin.hint +msgid "RespinNum \n\nSetting this to a positive number will repeat the simulation by the specified\nrepeition count starting from different random seeds.\n\nA negative integer asks MCX to divide the total photon number by the \nabsolute value of this input and run each subpart at a time. This can \nreduce the per-call run time, but may result in extensive overhead of\nrunning repeated simulations.\n" +msgstr "RespinNum\n\nDies auf eine positive Zahl zu setzen wiederholt die Simulation um die angegebene Wiederholungsanzahl, beginnend mit verschiedenen Zufallsseeds.\n\nEine negative Ganzzahl fordert MCX auf, die Gesamtzahl der Photonen durch den absoluten Wert dieser Eingabe zu teilen und jeden Teilbereich einzeln auszuführen. Dies kann die Laufzeit pro Aufruf reduzieren, aber zu erheblichem Overhead beim Ausführen wiederholter Simulationen führen.\n" + +#: tfmmcx.edseed.hint +msgid "Seed \n\nIf this field is a large integer number, this specifies the RNG seed; \n\nif this is a file name ending with .mch, it loads an .mch file generated \nfrom previous simulation and replays the detected photons.\n" +msgstr "Seed\n\nWenn dieses Feld eine große Ganzzahl ist, spezifiziert dies den RNG-Seed;\n\nwenn dies ein Dateiname ist, der mit .mch endet, lädt es eine .mch-Datei, die aus einer vorherigen Simulation generiert wurde, und gibt die detektierten Photonen wieder.\n" + +#: tfmmcx.edseed.text +msgid "1648335518" +msgstr "1648335518" + +#: tfmmcx.edseed.texthint +msgid "A large integer or .mch file name" +msgstr "Eine große Ganzzahl oder .mch-Dateiname" + +#: tfmmcx.edsession.hint +msgid "Session \n\nThis string will be used in all output files as part of the file names.\n" +msgstr "Session\n\nDiese Zeichenkette wird in allen Ausgabedateien als Teil der Dateinamen verwendet.\n" + +#: tfmmcx.edthread.hint +msgid "ThreadNum \n\nSpecify a large integer multiple of 32 (the warp size) to manually \ndefine the thread numbers.\n\nThis is only used when the -A (autopilot mode) is not enabled.\n" +msgstr "ThreadNum\n\nEin großes ganzzahliges Vielfaches von 32 (die Warp-Größe) angeben, um die Thread-Anzahl manuell zu definieren.\n\nDies wird nur verwendet, wenn der -A (Autopilot-Modus) nicht aktiviert ist.\n" + +#: tfmmcx.edthread.text +msgid "16384" +msgstr "16384" + +#: tfmmcx.edunitinmm.hint +msgid "UnitInMM \n\nThis defines the voxel size. By default, 1x1x1 mm^3 voxels\nare used. Has to be a positive floating point number. For example,\n0.1 defines a 0.1x0.1x0.1 mm^3 voxel.\n\nCurrently, only isotropic voxels are supported.\n" +msgstr "UnitInMM\n\nDies definiert die Voxel-Größe. Standardmäßig werden 1x1x1 mm^3 Voxel verwendet. Muss eine positive Gleitkommazahl sein. Zum Beispiel definiert 0.1 ein 0.1x0.1x0.1 mm^3 Voxel.\n\nDerzeit werden nur isotrope Voxel unterstützt.\n" + +#: tfmmcx.edunitinmm.text +msgid "1" +msgstr "1" + +#: tfmmcx.edworkload.hint +msgid "Workload \n\nOne can specify a series of comma-separated numbers to specify the\nrelative portion of workload between multiple selected devices. \n\nFor example: 10,10 asks MCX to run 50% of the total photons using the\n1st device and 50% on the 2nd device. On the other hand, 10,100 splits\nthe total photon 1:10 between the 1st and 2nd devices.\n" +msgstr "Workload\n\nMan kann eine Reihe kommagetrennnter Zahlen angeben, um den relativen Anteil der Arbeitslast zwischen mehreren ausgewählten Geräten zu spezifizieren.\n\nZum Beispiel: 10,10 fordert MCX auf, 50% der Gesamtphotonen mit dem 1. Gerät und 50% mit dem 2. Gerät auszuführen. Andererseits teilt 10,100 die Gesamtphotonen 1:10 zwischen dem 1. und 2. Gerät auf.\n" + +#: tfmmcx.edworkload.text +msgid "100" +msgstr "100" + +#: tfmmcx.edworkload.texthint +msgid "Comma separated numbers" +msgstr "Kommagetrennte Zahlen" + +#: tfmmcx.gradvsettings.caption +msgid "Advanced Settings" +msgstr "Erweiterte Einstellungen" + +#: tfmmcx.grarray.hint +msgid "ArrayOrder \n\nSelect MATLAB array order indicates that the input volume has a\ncolumn-major order - i.e. the left-most axis is the fastest index of\nthe array, like in MATLAB or FORTRAN.\n\nSelect C array order indicates that the input volume uses the \nrow-major order - i.e. the right-most index is the fastest index\nof the array, like in C and Python.\n" +msgstr "ArrayOrder\n\nMATLAB-Array-Reihenfolge auswählen zeigt an, dass das Eingabevolumen eine spaltenhauptordnung hat - d.h. die linkeste Achse ist der schnellste Index des Arrays, wie in MATLAB oder FORTRAN.\n\nC-Array-Reihenfolge auswählen zeigt an, dass das Eingabevolumen die zeilenhauptordnung verwendet - d.h. der rechteste Index ist der schnellste Index des Arrays, wie in C und Python.\n" + +#: tfmmcx.gratomic.hint +msgid "UseAtomic \n\nUsing atomic operations avoids conflicts between multiple threads when\nwriting to the same voxel, thus is highly recommended.\n\nIn the very old CUDA hardware, using atomic operations has a high \noverhead, but such overhead was signficiantly less since the Fermi GPU.\n" +msgstr "UseAtomic\n\nDie Verwendung atomarer Operationen vermeidet Konflikte zwischen mehreren Threads beim Schreiben in dasselbe Voxel und wird daher dringend empfohlen.\n\nBei sehr alter CUDA-Hardware haben atomare Operationen einen hohen Overhead, aber solcher Overhead war seit der Fermi-GPU deutlich geringer.\n" + +#: tfmmcx.grbasic.caption +msgid "Basic Settings" +msgstr "Grundeinstellungen" + +#: tfmmcx.grbc.caption +msgid "Boundary cond." +msgstr "Randbedingungen" + +#: tfmmcx.grdet.caption +msgid "Save detected photon" +msgstr "Detektierte Photonen speichern" + +#: tfmmcx.grgpu.caption +msgid "GPU Settings" +msgstr "GPU-Einstellungen" + +#: tfmmcx.grprogram.caption +msgctxt "tfmmcx.grprogram.caption" +msgid "Run Monte Carlo simulation with" +msgstr "Monte-Carlo-Simulation ausführen mit" + +#: tfmmcx.grprogram.hint +msgid "MCProgram\n\nIn this panel, you choose which simulator to use. \nCurrently we support 3 simulators, \n\n* MCX: NVIDIA GPU-based simulation using voxelated domain\n* MCX-CL: OpenCL based CPU/GPU simulation using voxelated domain\n* MMC: OpenCL based CPU/GPU simulation using tetrahedral meshes\n\nThe built-in domain designer only supports creating voxelated \ndomains and creating meshes will be supported in the future.\n" +msgstr "MCProgram\n\nIn diesem Panel wählen Sie, welchen Simulator Sie verwenden möchten.\nDerzeit unterstützen wir 3 Simulatoren:\n\n* MCX: NVIDIA GPU-basierte Simulation mit voxeliertem Bereich\n* MCX-CL: OpenCL-basierte CPU/GPU-Simulation mit voxeliertem Bereich\n* MMC: OpenCL-basierte CPU/GPU-Simulation mit tetraedrischen Netzen\n\nDer eingebaute Bereichsdesigner unterstützt nur die Erstellung voxelierter Bereiche und die Erstellung von Netzen wird in Zukunft unterstützt.\n" + +#: tfmmcx.grswitches.caption +msgid "Switches" +msgstr "Schalter" + +#: tfmmcx.image1.hint +msgctxt "tfmmcx.image1.hint" +msgid "About MCX" +msgstr "Über MCX" + +#: tfmmcx.label1.caption +msgid "Thread number (-t)" +msgstr "Thread-Anzahl (-t)" + +#: tfmmcx.label1.hint +msgid "-t (--thread)" +msgstr "-t (--thread)" + +#: tfmmcx.label10.caption +msgctxt "tfmmcx.label10.caption" +msgid "or" +msgstr "oder" + +#: tfmmcx.label10.hint +msgctxt "tfmmcx.label10.hint" +msgid "-a (--array)" +msgstr "-a (--array)" + +#: tfmmcx.label11.caption +msgid "Output format" +msgstr "Ausgabeformat" + +#: tfmmcx.label11.hint +msgctxt "tfmmcx.label11.hint" +msgid "-u (--unitinmm)" +msgstr "-u (--unitinmm)" + +#: tfmmcx.label12.caption +msgid "Run MCX on" +msgstr "MCX ausführen auf" + +#: tfmmcx.label12.hint +msgid "-G (--gpu)" +msgstr "-G (--gpu)" + +#: tfmmcx.label13.caption +msgid "Seed (-E)" +msgstr "Seed (-E)" + +#: tfmmcx.label13.hint +msgid "-E (--seed)" +msgstr "-E (--seed)" + +#: tfmmcx.label14.caption +msgid "Output type (-O)" +msgstr "Ausgabetyp (-O)" + +#: tfmmcx.label14.hint +msgid "-O (--outputtype)" +msgstr "-O (--outputtype)" + +#: tfmmcx.label15.caption +msgid "Workload split" +msgstr "Arbeitslast-Aufteilung" + +#: tfmmcx.label15.hint +msgid "-W (--workload)" +msgstr "-W (--workload)" + +#: tfmmcx.label16.caption +msgid "Debug flags" +msgstr "Debug-Flags" + +#: tfmmcx.label16.hint +msgid "-D (--debuglevel)" +msgstr "-D (--debuglevel)" + +#: tfmmcx.label17.caption +msgid "Replay detector ID (-Y)" +msgstr "Wiedergabe-Detektor-ID (-Y)" + +#: tfmmcx.label17.hint +msgctxt "tfmmcx.label17.hint" +msgid "-Y (--replaydet)" +msgstr "-Y (--replaydet)" + +#: tfmmcx.label18.caption +msgid "Additional parameters" +msgstr "Zusätzliche Parameter" + +#: tfmmcx.label18.hint +msgctxt "tfmmcx.label18.hint" +msgid "-Y (--replaydet)" +msgstr "-Y (--replaydet)" + +#: tfmmcx.label19.caption +msgctxt "tfmmcx.label19.caption" +msgid "or" +msgstr "oder" + +#: tfmmcx.label19.hint +msgctxt "tfmmcx.label19.hint" +msgid "-a (--array)" +msgstr "-a (--array)" + +#: tfmmcx.label2.caption +msgid "Thread block size (-T)" +msgstr "Thread-Block-Größe (-T)" + +#: tfmmcx.label2.hint +msgid "-T (--blocksize)" +msgstr "-T (--blocksize)" + +#: tfmmcx.label3.caption +msgid "Total photon number (-n)" +msgstr "Gesamtphotonenzahl (-n)" + +#: tfmmcx.label3.hint +msgid "-n (--photon)" +msgstr "-n (--photon)" + +#: tfmmcx.label4.caption +msgid "Session ID (-s)" +msgstr "Session-ID (-s)" + +#: tfmmcx.label4.hint +msgctxt "tfmmcx.label4.hint" +msgid "-s (--sessionid)" +msgstr "-s (--sessionid)" + +#: tfmmcx.label5.caption +msgid "User Input>" +msgstr "Benutzereingabe>" + +#: tfmmcx.label6.caption +msgid "Array order (-a)" +msgstr "Array-Reihenfolge (-a)" + +#: tfmmcx.label6.hint +msgctxt "tfmmcx.label6.hint" +msgid "-a (--array)" +msgstr "-a (--array)" + +#: tfmmcx.label7.caption +msgid "Gate group size (-g)" +msgstr "Gate-Gruppengröße (-g)" + +#: tfmmcx.label7.hint +msgid "-g (--gategroup)" +msgstr "-g (--gategroup)" + +#: tfmmcx.label8.caption +msgid "Voxel size in mm (-u)" +msgstr "Voxel-Größe in mm (-u)" + +#: tfmmcx.label8.hint +msgctxt "tfmmcx.label8.hint" +msgid "-u (--unitinmm)" +msgstr "-u (--unitinmm)" + +#: tfmmcx.label9.caption +msgid "Max detected photons(-H)" +msgstr "Max. detektierte Photonen (-H)" + +#: tfmmcx.label9.hint +msgid "-H (--maxdetphoton)" +msgstr "-H (--maxdetphoton)" + +#: tfmmcx.lbatomic.caption +msgid "Atomic operations" +msgstr "Atomare Operationen" + +#: tfmmcx.lbatomic.hint +msgid "(--atomic)" +msgstr "(--atomic)" + +#: tfmmcx.lbbubble.caption +msgid "Cache radius from src (-R)" +msgstr "Cache-Radius von Quelle (-R)" + +#: tfmmcx.lbbubble.hint +msgid "-r (--skipradius)" +msgstr "-r (--skipradius)" + +#: tfmmcx.lbrespin.caption +msgid "Repetition (-r)" +msgstr "Wiederholung (-r)" + +#: tfmmcx.lbrespin.hint +msgid "-r (--repeat)" +msgstr "-r (--repeat)" + +#: tfmmcx.lvjobs.columns[0].caption +msgctxt "tfmmcx.lvjobs.columns[0].caption" +msgid "Session" +msgstr "Session" + +#: tfmmcx.lvjobs.columns[10].caption +msgid "DoSave" +msgstr "DoSave" + +#: tfmmcx.lvjobs.columns[11].caption +msgid "DoNormalize" +msgstr "DoNormalize" + +#: tfmmcx.lvjobs.columns[12].caption +msgid "Autopilot" +msgstr "Autopilot" + +#: tfmmcx.lvjobs.columns[13].caption +msgid "SaveDetector" +msgstr "SaveDetector" + +#: tfmmcx.lvjobs.columns[14].caption +msgid "DetectedNum" +msgstr "DetectedNum" + +#: tfmmcx.lvjobs.columns[15].caption +msgid "GPUID" +msgstr "GPUID" + +#: tfmmcx.lvjobs.columns[16].caption +msgid "UnitInMM" +msgstr "UnitInMM" + +#: tfmmcx.lvjobs.columns[17].caption +msgid "DoSaveRef" +msgstr "DoSaveRef" + +#: tfmmcx.lvjobs.columns[18].caption +msgid "DoSaveSeed" +msgstr "DoSaveSeed" + +#: tfmmcx.lvjobs.columns[19].caption +msgid "DoSkipVoid" +msgstr "DoSkipVoid" + +#: tfmmcx.lvjobs.columns[1].caption +msgid "InputFile" +msgstr "InputFile" + +#: tfmmcx.lvjobs.columns[20].caption +msgid "DoSrcFrom0" +msgstr "DoSrcFrom0" + +#: tfmmcx.lvjobs.columns[21].caption +msgid "MediaCfg" +msgstr "MediaCfg" + +#: tfmmcx.lvjobs.columns[22].caption +msgid "DetectorCfg" +msgstr "DetectorCfg" + +#: tfmmcx.lvjobs.columns[23].caption +msgid "MCXConfig" +msgstr "MCXConfig" + +#: tfmmcx.lvjobs.columns[24].caption +msgid "Workload" +msgstr "Workload" + +#: tfmmcx.lvjobs.columns[25].caption +msgctxt "tfmmcx.lvjobs.columns[25].caption" +msgid "ShapeCfg" +msgstr "ShapeCfg" + +#: tfmmcx.lvjobs.columns[26].caption +msgid "Seed" +msgstr "Seed" + +#: tfmmcx.lvjobs.columns[27].caption +msgid "DoSaveMask" +msgstr "DoSaveMask" + +#: tfmmcx.lvjobs.columns[28].caption +msgctxt "tfmmcx.lvjobs.columns[28].caption" +msgid "DebugFlags" +msgstr "DebugFlags" + +#: tfmmcx.lvjobs.columns[29].caption +msgctxt "tfmmcx.lvjobs.columns[29].caption" +msgid "ReplayDet" +msgstr "ReplayDet" + +#: tfmmcx.lvjobs.columns[2].caption +msgid "ThreadNum" +msgstr "ThreadNum" + +#: tfmmcx.lvjobs.columns[30].caption +msgid "DoReplay" +msgstr "DoReplay" + +#: tfmmcx.lvjobs.columns[31].caption +msgid "MCProgram" +msgstr "MCProgram" + +#: tfmmcx.lvjobs.columns[32].caption +msgid "DoSpecular" +msgstr "DoSpecular" + +#: tfmmcx.lvjobs.columns[33].caption +msgid "UseAtomic" +msgstr "UseAtomic" + +#: tfmmcx.lvjobs.columns[34].caption +msgid "BasicOrder" +msgstr "BasicOrder" + +#: tfmmcx.lvjobs.columns[35].caption +msgid "DebugPhoton" +msgstr "DebugPhoton" + +#: tfmmcx.lvjobs.columns[36].caption +msgid "MoreParam" +msgstr "MoreParam" + +#: tfmmcx.lvjobs.columns[37].caption +msgid "RemoteCmd" +msgstr "RemoteCmd" + +#: tfmmcx.lvjobs.columns[38].caption +msgid "DoRemote" +msgstr "DoRemote" + +#: tfmmcx.lvjobs.columns[39].caption +msgid "DoSharedFS" +msgstr "DoSharedFS" + +#: tfmmcx.lvjobs.columns[3].caption +msgid "ThreadBlock" +msgstr "ThreadBlock" + +#: tfmmcx.lvjobs.columns[40].caption +msgid "OutputFormat" +msgstr "OutputFormat" + +#: tfmmcx.lvjobs.columns[41].caption +msgid "OutputType" +msgstr "OutputType" + +#: tfmmcx.lvjobs.columns[42].caption +msgid "Boundary" +msgstr "Boundary" + +#: tfmmcx.lvjobs.columns[43].caption +msgid "SaveDetFlag" +msgstr "SaveDetFlag" + +#: tfmmcx.lvjobs.columns[44].caption +msgid "Benchmark" +msgstr "Benchmark" + +#: tfmmcx.lvjobs.columns[4].caption +msgid "PhotonNum" +msgstr "PhotonNum" + +#: tfmmcx.lvjobs.columns[5].caption +msgid "RespinNum" +msgstr "RespinNum" + +#: tfmmcx.lvjobs.columns[6].caption +msgid "ArrayOrder" +msgstr "ArrayOrder" + +#: tfmmcx.lvjobs.columns[7].caption +msgctxt "tfmmcx.lvjobs.columns[7].caption" +msgid "BubbleSize" +msgstr "BubbleSize" + +#: tfmmcx.lvjobs.columns[8].caption +msgctxt "tfmmcx.lvjobs.columns[8].caption" +msgid "GateNum" +msgstr "GateNum" + +#: tfmmcx.lvjobs.columns[9].caption +msgid "DoReflect" +msgstr "DoReflect" + +#: tfmmcx.mcxdoabout.caption +msgid "About" +msgstr "Über" + +#: tfmmcx.mcxdoabout.hint +msgid "About the author" +msgstr "Über den Autor" + +#: tfmmcx.mcxdoadditem.caption +msgid "New" +msgstr "Neu" + +#: tfmmcx.mcxdoadditem.hint +msgid "Add a new task" +msgstr "Neue Aufgabe hinzufügen" + +#: tfmmcx.mcxdoconfig.caption +msgid "Setting" +msgstr "Einstellung" + +#: tfmmcx.mcxdoconfig.hint +msgid "Modify default paths" +msgstr "Standard-Pfade ändern" + +#: tfmmcx.mcxdocopy.caption +msgid "Copy session to clipboard" +msgstr "Session in Zwischenablage kopieren" + +#: tfmmcx.mcxdodefault.caption +msgid "Default" +msgstr "Standard" + +#: tfmmcx.mcxdodefault.hint +msgid "Set default values" +msgstr "Standardwerte setzen" + +#: tfmmcx.mcxdodeleteitem.caption +msgctxt "tfmmcx.mcxdodeleteitem.caption" +msgid "Delete" +msgstr "Löschen" + +#: tfmmcx.mcxdodeleteitem.hint +msgid "Delete selected task" +msgstr "Ausgewählte Aufgabe löschen" + +#: tfmmcx.mcxdodownloadmask.caption +msgid "Download volume labels (*_vol.nii)" +msgstr "Volumen-Labels herunterladen (*_vol.nii)" + +#: tfmmcx.mcxdodownloadmask.hint +msgctxt "tfmmcx.mcxdodownloadmask.hint" +msgid "_vol.nii" +msgstr "_vol.nii" + +#: tfmmcx.mcxdodownloadmc2.caption +msgid "Download fluence" +msgstr "Fluenz herunterladen" + +#: tfmmcx.mcxdodownloadmch.caption +msgid "Download detected photon data (*.mch)" +msgstr "Detektierte Photonen-Daten herunterladen (*.mch)" + +#: tfmmcx.mcxdodownloadmch.hint +msgid ".mch" +msgstr ".mch" + +#: tfmmcx.mcxdoexit.caption +msgctxt "tfmmcx.mcxdoexit.caption" +msgid "Exit" +msgstr "Beenden" + +#: tfmmcx.mcxdoexit.hint +msgid "Exit MCX Studio" +msgstr "MCX Studio beenden" + +#: tfmmcx.mcxdohelp.caption +msgctxt "tfmmcx.mcxdohelp.caption" +msgid "Help" +msgstr "Hilfe" + +#: tfmmcx.mcxdohelp.hint +msgctxt "tfmmcx.mcxdohelp.hint" +msgid "Browse help information" +msgstr "Hilfeinformationen durchsuchen" + +#: tfmmcx.mcxdohelpoptions.caption +msgid "Options" +msgstr "Optionen" + +#: tfmmcx.mcxdohelpoptions.hint +msgid "List command line options" +msgstr "Kommandozeilen-Optionen auflisten" + +#: tfmmcx.mcxdoopen.caption +msgid "Open" +msgstr "Öffnen" + +#: tfmmcx.mcxdoopen.hint +msgid "Open a project or volume file" +msgstr "Projekt- oder Volumendatei öffnen" + +#: tfmmcx.mcxdopaste.caption +msgid "Paste session from clipboard" +msgstr "Session aus Zwischenablage einfügen" + +#: tfmmcx.mcxdoplotjnifti.caption +msgid "Plot fluence (jnii)" +msgstr "Fluenz plotten (jnii)" + +#: tfmmcx.mcxdoplotjnifti.hint +msgid ".jnii" +msgstr ".jnii" + +#: tfmmcx.mcxdoplotmc2.caption +msgid "Plot fluence (mc2)" +msgstr "Fluenz plotten (mc2)" + +#: tfmmcx.mcxdoplotmc2.hint +msgid ".mc2" +msgstr ".mc2" + +#: tfmmcx.mcxdoplotmesh.caption +msgid "Plot mesh" +msgstr "Netz plotten" + +#: tfmmcx.mcxdoplotnifty.caption +msgid "Plot fluence (nii)" +msgstr "Fluenz plotten (nii)" + +#: tfmmcx.mcxdoplotnifty.hint +msgid ".nii" +msgstr ".nii" + +#: tfmmcx.mcxdoplotvol.caption +msgid "Plot Volume" +msgstr "Volumen plotten" + +#: tfmmcx.mcxdoplotvol.hint +msgctxt "tfmmcx.mcxdoplotvol.hint" +msgid "_vol.nii" +msgstr "_vol.nii" + +#: tfmmcx.mcxdoquery.caption +msgid "GPU" +msgstr "GPU" + +#: tfmmcx.mcxdoquery.hint +msgid "List GPU Info" +msgstr "GPU-Info auflisten" + +#: tfmmcx.mcxdorun.caption +msgctxt "tfmmcx.mcxdorun.caption" +msgid "Run" +msgstr "Ausführen" + +#: tfmmcx.mcxdorun.hint +msgid "Run selected task" +msgstr "Ausgewählte Aufgabe ausführen" + +#: tfmmcx.mcxdorunall.caption +msgid "Run All" +msgstr "Alle ausführen" + +#: tfmmcx.mcxdorunall.hint +msgid "Run all tasks" +msgstr "Alle Aufgaben ausführen" + +#: tfmmcx.mcxdosave.caption +msgid "Save" +msgstr "Speichern" + +#: tfmmcx.mcxdosave.hint +msgid "Save tasks to a project file" +msgstr "Aufgaben in Projektdatei speichern" + +#: tfmmcx.mcxdostop.caption +msgid "Stop" +msgstr "Stoppen" + +#: tfmmcx.mcxdostop.hint +msgid "Terminate current task" +msgstr "Aktuelle Aufgabe beenden" + +#: tfmmcx.mcxdotoggleview.caption +msgid "Toggle View" +msgstr "Ansicht umschalten" + +#: tfmmcx.mcxdoverify.caption +msgid "Verify" +msgstr "Überprüfen" + +#: tfmmcx.mcxdoverify.hint +msgid "Verify parameters" +msgstr "Parameter überprüfen" + +#: tfmmcx.mcxdoweb.caption +msgid "Web" +msgstr "Web" + +#: tfmmcx.mcxdoweb.hint +msgid "MCX homepage" +msgstr "MCX-Homepage" + +#: tfmmcx.mcxsetcurrent.caption +msgid "mcxSetCurrent" +msgstr "mcxSetCurrent" + +#: tfmmcx.menuitem1.caption +msgid "File" +msgstr "Datei" + +#: tfmmcx.menuitem11.caption +msgid "Settings" +msgstr "Einstellungen" + +#: tfmmcx.menuitem2.caption +msgctxt "tfmmcx.menuitem2.caption" +msgid "Run" +msgstr "Ausführen" + +#: tfmmcx.menuitem22.caption +msgid "Open output folder" +msgstr "Ausgabe-Ordner öffnen" + +#: tfmmcx.menuitem24.caption +msgid "Plot volume (_vol.nii)" +msgstr "Volumen plotten (_vol.nii)" + +#: tfmmcx.menuitem28.caption +msgid "Download fluence (mc2/nii/hdr/img)" +msgstr "Fluenz herunterladen (mc2/nii/hdr/img)" + +#: tfmmcx.menuitem3.caption +msgid "Tools" +msgstr "Werkzeuge" + +#: tfmmcx.menuitem31.caption +msgid "Download detected photon data (mch)" +msgstr "Detektierte Photonen-Daten herunterladen (mch)" + +#: tfmmcx.menuitem32.caption +msgid "Download volume mask (_vol.nii)" +msgstr "Volumenmaske herunterladen (_vol.nii)" + +#: tfmmcx.menuitem35.caption +msgid "MCX Documentation" +msgstr "MCX-Dokumentation" + +#: tfmmcx.menuitem35.hint +msgid "https://mcx.space/wiki/?Learn#mcx" +msgstr "https://mcx.space/wiki/?Learn#mcx" + +#: tfmmcx.menuitem36.caption +msgid "MMC Documentation" +msgstr "MMC-Dokumentation" + +#: tfmmcx.menuitem36.hint +msgid "https://mcx.space/wiki/?Learn#mmc" +msgstr "https://mcx.space/wiki/?Learn#mmc" + +#: tfmmcx.menuitem37.caption +msgid "MCX-CL Documentation" +msgstr "MCX-CL-Dokumentation" + +#: tfmmcx.menuitem37.hint +msgid "https://mcx.space/wiki/?Learn#mcxcl" +msgstr "https://mcx.space/wiki/?Learn#mcxcl" + +#: tfmmcx.menuitem39.caption +msgid "MCX/MCXCL User Forum (mcx-users)" +msgstr "MCX/MCXCL-Benutzerforum (mcx-users)" + +#: tfmmcx.menuitem39.hint +msgid "https://groups.google.com/forum/?hl=en#!forum/mcx-users" +msgstr "https://groups.google.com/forum/?hl=en#!forum/mcx-users" + +#: tfmmcx.menuitem4.caption +msgctxt "tfmmcx.menuitem4.caption" +msgid "Help" +msgstr "Hilfe" + +#: tfmmcx.menuitem40.caption +msgid "MMC User Forum (mmc-users)" +msgstr "MMC-Benutzerforum (mmc-users)" + +#: tfmmcx.menuitem40.hint +msgid "https://groups.google.com/forum/?hl=en#!forum/mmc-users" +msgstr "https://groups.google.com/forum/?hl=en#!forum/mmc-users" + +#: tfmmcx.menuitem41.caption +msgid "Iso2Mesh User Forum (iso2mesh-users)" +msgstr "Iso2Mesh-Benutzerforum (iso2mesh-users)" + +#: tfmmcx.menuitem41.hint +msgid "https://groups.google.com/forum/?hl=en#!forum/iso2mesh-users" +msgstr "https://groups.google.com/forum/?hl=en#!forum/iso2mesh-users" + +#: tfmmcx.menuitem43.caption +msgid "Download Nightly-Build" +msgstr "Nightly-Build herunterladen" + +#: tfmmcx.menuitem43.hint +msgid "https://mcx.space/nightly/" +msgstr "https://mcx.space/nightly/" + +#: tfmmcx.menuitem45.caption +msgid "MCX Github" +msgstr "MCX Github" + +#: tfmmcx.menuitem45.hint +msgid "https://github.com/fangq/mcx" +msgstr "https://github.com/fangq/mcx" + +#: tfmmcx.menuitem46.caption +msgid "MMC Github" +msgstr "MMC Github" + +#: tfmmcx.menuitem46.hint +msgid "https://github.com/fangq/mmc" +msgstr "https://github.com/fangq/mmc" + +#: tfmmcx.menuitem47.caption +msgid "MCX-CL Github" +msgstr "MCX-CL Github" + +#: tfmmcx.menuitem47.hint +msgid "https://github.com/fangq/mcxcl" +msgstr "https://github.com/fangq/mcxcl" + +#: tfmmcx.menuitem49.caption +msgid "Report MCX Issues" +msgstr "MCX-Probleme melden" + +#: tfmmcx.menuitem49.hint +msgid "https://github.com/fangq/mcx/issues" +msgstr "https://github.com/fangq/mcx/issues" + +#: tfmmcx.menuitem50.caption +msgid "Report MMC Issues" +msgstr "MMC-Probleme melden" + +#: tfmmcx.menuitem50.hint +msgid "https://github.com/fangq/mmc/issues" +msgstr "https://github.com/fangq/mmc/issues" + +#: tfmmcx.menuitem51.caption +msgid "Report MCX-CL Issues" +msgstr "MCX-CL-Probleme melden" + +#: tfmmcx.menuitem51.hint +msgid "https://github.com/fangq/mcxcl/issues" +msgstr "https://github.com/fangq/mcxcl/issues" + +#: tfmmcx.menuitem53.caption +msgid "MCX GPU Speed Benchmark Database" +msgstr "MCX GPU-Geschwindigkeits-Benchmark-Datenbank" + +#: tfmmcx.menuitem53.hint +msgid "https://mcx.space/gpubench/" +msgstr "https://mcx.space/gpubench/" + +#: tfmmcx.menuitem55.caption +msgid "Refereces" +msgstr "Referenzen" + +#: tfmmcx.menuitem56.caption +msgid "[Fang2009] Original MCX Paper" +msgstr "[Fang2009] Original-MCX-Paper" + +#: tfmmcx.menuitem56.hint +msgid "http://www.osapublishing.org/oe/abstract.cfm?uri=oe-17-22-20178" +msgstr "http://www.osapublishing.org/oe/abstract.cfm?uri=oe-17-22-20178" + +#: tfmmcx.menuitem57.caption +msgid "[Fang2010] Original MMC Paper" +msgstr "[Fang2010] Original-MMC-Paper" + +#: tfmmcx.menuitem57.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-1-1-165" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-1-1-165" + +#: tfmmcx.menuitem58.caption +msgid "[Yu2018] Original MCX-CL Paper" +msgstr "[Yu2018] Original-MCX-CL-Paper" + +#: tfmmcx.menuitem58.hint +msgid "https://www.spiedigitallibrary.org/journals/journal-of-biomedical-optics/volume-23/issue-01/010504/Scalable-and-massively-parallel-Monte-Carlo-photon-transport-simulations-for/10.1117/1.JBO.23.1.010504.full?SSO=1#ArticleLink" +msgstr "https://www.spiedigitallibrary.org/journals/journal-of-biomedical-optics/volume-23/issue-01/010504/Scalable-and-massively-parallel-Monte-Carlo-photon-transport-simulations-for/10.1117/1.JBO.23.1.010504.full?SSO=1#ArticleLink" + +#: tfmmcx.menuitem59.caption +msgid "[Fang2011] MMC ray-tracing comparison" +msgstr "[Fang2011] MMC-Ray-Tracing-Vergleich" + +#: tfmmcx.menuitem59.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-2-5-1258" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-2-5-1258" + +#: tfmmcx.menuitem60.caption +msgid "[Fang2012] SIMD MMC" +msgstr "[Fang2012] SIMD MMC" + +#: tfmmcx.menuitem60.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-3-12-3223" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-3-12-3223" + +#: tfmmcx.menuitem61.caption +msgid "[Yao2016] Widefield MMC" +msgstr "[Yao2016] Weitfeld-MMC" + +#: tfmmcx.menuitem61.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-7-1-171" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-7-1-171" + +#: tfmmcx.menuitem62.caption +msgid "[Yao2018] Jacobians with photon replay" +msgstr "[Yao2018] Jacobi-Matrizen mit Photonen-Wiedergabe" + +#: tfmmcx.menuitem62.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-9-10-4588" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-9-10-4588" + +#: tfmmcx.menuitem63.caption +msgid "[Yan2019] Dual-grid MMC" +msgstr "[Yan2019] Dual-Grid-MMC" + +#: tfmmcx.menuitem63.hint +msgid "https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fdx.doi.org%2F10.1117%2F1.JBO.24.2.020503&data=02%7C01%7Cq.fang%40northeastern.edu%7Cbb8daa56735543068b9c08d697592492%7Ca8eec281aaa34daeac9b9a398b9215e7%7C0%7C0%7C636862806460866013&sdata=2dWyN3eVPwwymydjXEWIHBfVZI43Fcl5zuZ8wiaJ10k%3D&reserved=0" +msgstr "https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fdx.doi.org%2F10.1117%2F1.JBO.24.2.020503&data=02%7C01%7Cq.fang%40northeastern.edu%7Cbb8daa56735543068b9c08d697592492%7Ca8eec281aaa34daeac9b9a398b9215e7%7C0%7C0%7C636862806460866013&sdata=2dWyN3eVPwwymydjXEWIHBfVZI43Fcl5zuZ8wiaJ10k%3D&reserved=0" + +#: tfmmcx.menuitem64.caption +msgid "MCX Main Web" +msgstr "MCX-Hauptwebsite" + +#: tfmmcx.menuitem66.caption +msgid "Table of all input flags" +msgstr "Tabelle aller Eingabe-Flags" + +#: tfmmcx.menuitem66.hint +msgid "http://bit.ly/2K0rG4R " +msgstr "http://bit.ly/2K0rG4R " + +#: tfmmcx.menuitem69.caption +msgid "[Fang2019] GPU MMC" +msgstr "[Fang2019] GPU MMC" + +#: tfmmcx.menuitem69.hint +msgid "http://dx.doi.org/10.1117/1.JBO.24.11.115002" +msgstr "http://dx.doi.org/10.1117/1.JBO.24.11.115002" + +#: tfmmcx.menuitem70.caption +msgid "[Brain2Mesh2020] Brain2Mesh brain meshing toolbox" +msgstr "[Brain2Mesh2020] Brain2Mesh Gehirn-Vernetzungs-Toolbox" + +#: tfmmcx.menuitem70.hint +msgid "https://doi.org/10.1117/1.NPh.7.1.015008" +msgstr "https://doi.org/10.1117/1.NPh.7.1.015008" + +#: tfmmcx.menuitem71.caption +msgid "[Yuan2020] PBM over lifespan" +msgstr "[Yuan2020] PBM über Lebensspanne" + +#: tfmmcx.menuitem71.hint +msgid "https://doi.org/10.1117/1.NPh.7.1.015009" +msgstr "https://doi.org/10.1117/1.NPh.7.1.015009" + +#: tfmmcx.menuitem72.caption +msgid "[Yuan2021] Implicit MMC (iMMC)" +msgstr "[Yuan2021] Implizites MMC (iMMC)" + +#: tfmmcx.menuitem72.hint +msgid "https://www.osapublishing.org/boe/fulltext.cfm?uri=boe-12-1-147" +msgstr "https://www.osapublishing.org/boe/fulltext.cfm?uri=boe-12-1-147" + +#: tfmmcx.menuitem73.caption +msgid "[Yan2020] SVMC hybrid method" +msgstr "[Yan2020] SVMC-Hybridmethode" + +#: tfmmcx.menuitem73.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-11-11-6262" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-11-11-6262" + +#: tfmmcx.menuitem76.caption +msgid "Open Volume Viewer" +msgstr "Volumen-Viewer öffnen" + +#: tfmmcx.menuitem9.caption +msgctxt "tfmmcx.menuitem9.caption" +msgid "Volume Designer" +msgstr "Volumen-Designer" + +#: tfmmcx.miclearlog.caption +msgid "Clear Log" +msgstr "Log löschen" + +#: tfmmcx.micopy.caption +msgid "Copy selected" +msgstr "Ausgewähltes kopieren" + +#: tfmmcx.miexportjson.caption +msgid "Export self-contained JSON input file" +msgstr "Eigenständige JSON-Eingabedatei exportieren" + +#: tfmmcx.miusematlab.caption +msgid "Print MATLAB plotting commands only" +msgstr "Nur MATLAB-Plotting-Befehle ausgeben" + +#: tfmmcx.openhistoryfile.title +msgctxt "tfmmcx.openhistoryfile.title" +msgid "Open Photon History File (*.mch)" +msgstr "Photonen-Verlaufsdatei öffnen (*.mch)" + +#: tfmmcx.openproject.title +msgid "Open existing project" +msgstr "Vorhandenes Projekt öffnen" + +#: tfmmcx.openvolume.title +msgctxt "tfmmcx.openvolume.title" +msgid "Open Photon History File (*.mch)" +msgstr "Photonen-Verlaufsdatei öffnen (*.mch)" + +#: tfmmcx.rbusebench.caption +msgid "Built-in" +msgstr "Eingebaut" + +#: tfmmcx.rbusedesigner.caption +msgid "User-defined »" +msgstr "Benutzerdefiniert »" + +#: tfmmcx.rbusefile.caption +msgid "Use Input File (-f)" +msgstr "Eingabedatei verwenden (-f)" + +#: tfmmcx.saveproject.title +msgid "Save project as" +msgstr "Projekt speichern als" + +#: tfmmcx.sbinfo.panels[0].text +msgid "Status: idle" +msgstr "Status: bereit" + +#: tfmmcx.sgconfig.columns[0].title.caption +msgctxt "tfmmcx.sgconfig.columns[0].title.caption" +msgid "Value" +msgstr "Wert" + +#: tfmmcx.sgconfig.hint +msgid "MCXConfig \n\nThis defines the remaining key parameters used in an MCX/MMC\nsimulation.\n" +msgstr "MCXConfig\n\nDies definiert die verbleibenden Schlüsselparameter, die in einer MCX/MMC-Simulation verwendet werden.\n" + +#: tfmmcx.sgdet.hint +msgid "DetectorCfg \n\nThis table defines all detectors in the domain. \n\nPlease note that currently MCX/MMC only supports spherical detectors,\ndefined by the [x,y,z] center position and radius (radius).\n\nPlease also note that photon detection only happens before a photon is\nterminated, i.e. when it escapes the exterior bounding box or moving from\na non-zero voxel to a zero voxel. Therefore, a detector's aperature is the\nactual bounding box surface or the surface of the non-zero voxels truncated\nby a sphere centered at [x,y,z] with raidus r.\n\nDetector position is sensitive to the \"Origin from [0 0 0] -z\" flag.\n" +msgstr "DetectorCfg\n\nDiese Tabelle definiert alle Detektoren im Bereich.\n\nBitte beachten Sie, dass MCX/MMC derzeit nur sphärische Detektoren unterstützt, die durch die [x,y,z]-Mittelposition und den Radius definiert sind.\n\nBeachten Sie auch, dass Photonendetektion nur vor der Beendigung eines Photons stattfindet, d.h. wenn es die äußere Bounding-Box verlässt oder sich von einem Nicht-Null-Voxel zu einem Null-Voxel bewegt. Daher ist die Apertur eines Detektors die tatsächliche Bounding-Box-Oberfläche oder die Oberfläche der Nicht-Null-Voxel, die von einer Kugel mit Mittelpunkt [x,y,z] und Radius r abgeschnitten wird.\n\nDie Detektorposition ist empfindlich gegenüber dem \"Ursprung von [0 0 0] -z\"-Flag.\n" + +#: tfmmcx.sgmedia.columns[0].title.caption +msgid "μa (1/mm)" +msgstr "μa (1/mm)" + +#: tfmmcx.sgmedia.columns[1].title.caption +msgid "μs (1/mm)" +msgstr "μs (1/mm)" + +#: tfmmcx.sgmedia.columns[2].title.caption +msgid "g (anisotropy)" +msgstr "g (Anisotropie)" + +#: tfmmcx.sgmedia.columns[3].title.caption +msgid "n (reflective index)" +msgstr "n (Brechungsindex)" + +#: tfmmcx.sgmedia.hint +msgid "MediaCfg \n\nThis table defines the optical properties for all needed tissue labels.\n\nThe first row (label 0) is reserved for the background medium - which includes\nthe space outside the bounding box of the volume, as well as any voxels with\na zero-value.\n\nOne can select a row and copy/paste to other rows.\n\nIf more labels are needed, move to the bottom of the table, and press \"down\"\narrow key to create a new row below.\n" +msgstr "MediaCfg\n\nDiese Tabelle definiert die optischen Eigenschaften für alle benötigten Gewebe-Labels.\n\nDie erste Zeile (Label 0) ist für das Hintergrundmedium reserviert - das den Raum außerhalb der Bounding-Box des Volumens sowie alle Voxel mit Null-Wert umfasst.\n\nMan kann eine Zeile auswählen und in andere Zeilen kopieren/einfügen.\n\nWenn mehr Labels benötigt werden, zum unteren Ende der Tabelle bewegen und die \"Pfeil nach unten\"-Taste drücken, um eine neue Zeile darunter zu erstellen.\n" + +#: tfmmcx.shapeaddbox.caption +msgid "Box" +msgstr "Box" + +#: tfmmcx.shapeaddbox.hint +msgid "Add a 3D box (using the center of the voxels - i.e. add 0.5 in all directions)" +msgstr "3D-Box hinzufügen (mit Voxel-Mittelpunkt - d.h. 0.5 in alle Richtungen addieren)" + +#: tfmmcx.shapeaddcylinder.caption +msgid "Cylinder" +msgstr "Zylinder" + +#: tfmmcx.shapeaddcylinder.hint +msgid "Add a cylinder" +msgstr "Zylinder hinzufügen" + +#: tfmmcx.shapeaddgrid.caption +msgid "Grid" +msgstr "Gitter" + +#: tfmmcx.shapeaddgrid.hint +msgid "Define a uniform grid as the simulation space" +msgstr "Gleichmäßiges Gitter als Simulationsraum definieren" + +#: tfmmcx.shapeaddname.caption +msgid "Name" +msgstr "Name" + +#: tfmmcx.shapeaddname.hint +msgid "Define a name for the domain" +msgstr "Namen für den Bereich definieren" + +#: tfmmcx.shapeaddorigin.caption +msgid "Origin" +msgstr "Ursprung" + +#: tfmmcx.shapeaddorigin.hint +msgid "Define the origin for subsequent objects" +msgstr "Ursprung für nachfolgende Objekte definieren" + +#: tfmmcx.shapeaddsphere.caption +msgid "Sphere" +msgstr "Kugel" + +#: tfmmcx.shapeaddsphere.hint +msgid "Add a 3D sphere" +msgstr "3D-Kugel hinzufügen" + +#: tfmmcx.shapeaddsubgrid.caption +msgid "Subgrid" +msgstr "Untergitter" + +#: tfmmcx.shapeaddsubgrid.hint +msgid "Add a 3D box (using the lower-corner of the voxel)" +msgstr "3D-Box hinzufügen (mit unterer Ecke des Voxels)" + +#: tfmmcx.shapeaddupperspace.caption +msgid "Upper" +msgstr "Oberer" + +#: tfmmcx.shapeaddupperspace.hint +msgid "Add an upper-space defined by a linear inequality" +msgstr "Oberen Raum hinzufügen, definiert durch lineare Ungleichung" + +#: tfmmcx.shapeaddxlayers.caption +msgid "XLayers" +msgstr "X-Schichten" + +#: tfmmcx.shapeaddxlayers.hint +msgid "Add a layered structure along x-axis" +msgstr "Geschichtete Struktur entlang x-Achse hinzufügen" + +#: tfmmcx.shapeaddxslabs.caption +msgid "XSlabs" +msgstr "X-Platten" + +#: tfmmcx.shapeaddxslabs.hint +msgid "Add a slab along x-axis" +msgstr "Platte entlang x-Achse hinzufügen" + +#: tfmmcx.shapeaddylayers.caption +msgid "YLayers" +msgstr "Y-Schichten" + +#: tfmmcx.shapeaddylayers.hint +msgid "Add a layered structure along y-axis" +msgstr "Geschichtete Struktur entlang y-Achse hinzufügen" + +#: tfmmcx.shapeaddyslabs.caption +msgid "YSlabs" +msgstr "Y-Platten" + +#: tfmmcx.shapeaddyslabs.hint +msgid "Add a slab along y-axis" +msgstr "Platte entlang y-Achse hinzufügen" + +#: tfmmcx.shapeaddzlayers.caption +msgid "ZLayers" +msgstr "Z-Schichten" + +#: tfmmcx.shapeaddzlayers.hint +msgid "Add a layered structure along z-axis" +msgstr "Geschichtete Struktur entlang z-Achse hinzufügen" + +#: tfmmcx.shapeaddzslabs.caption +msgid "ZSlabs" +msgstr "Z-Platten" + +#: tfmmcx.shapeaddzslabs.hint +msgid "Add a slab along z-axis" +msgstr "Platte entlang z-Achse hinzufügen" + +#: tfmmcx.shapedelete.caption +msgctxt "tfmmcx.shapedelete.caption" +msgid "Delete" +msgstr "Löschen" + +#: tfmmcx.shapedelete.hint +msgid "Delete selected object" +msgstr "Ausgewähltes Objekt löschen" + +#: tfmmcx.shapeedit.caption +msgid "Edit" +msgstr "Bearbeiten" + +#: tfmmcx.shapepreview.caption +msgctxt "tfmmcx.shapepreview.caption" +msgid "Preview" +msgstr "Vorschau" + +#: tfmmcx.shapepreview.hint +msgctxt "tfmmcx.shapepreview.hint" +msgid "Preview" +msgstr "Vorschau" + +#: tfmmcx.shapeprint.caption +msgid "Print" +msgstr "Drucken" + +#: tfmmcx.shapeprint.hint +msgid "Print selected object" +msgstr "Ausgewähltes Objekt drucken" + +#: tfmmcx.shapereset.caption +msgctxt "tfmmcx.shapereset.caption" +msgid "Reset" +msgstr "Zurücksetzen" + +#: tfmmcx.shapereset.hint +msgid "Reset to a 60x60x60 homogeneous cubic domain" +msgstr "Auf 60x60x60 homogenen kubischen Bereich zurücksetzen" + +#: tfmmcx.statictext1.caption +msgid "Additional Settings" +msgstr "Zusätzliche Einstellungen" + +#: tfmmcx.statictext2.caption +msgid "Media Settings" +msgstr "Medien-Einstellungen" + +#: tfmmcx.statictext3.caption +msgid "Detector Settings (in voxel unit)" +msgstr "Detektor-Einstellungen (in Voxel-Einheiten)" + +#: tfmmcx.tabinputdata.caption +msgid "Simulation Designer" +msgstr "Simulations-Designer" + +#: tfmmcx.tabvolumedesigner.caption +msgctxt "tfmmcx.tabvolumedesigner.caption" +msgid "Volume Designer" +msgstr "Volumen-Designer" + +#: tfmmcx.tbtverify.caption +msgid "Validate" +msgstr "Validieren" + +#: tfmmcx.toolbar1.caption +msgid "MCX Ribon" +msgstr "MCX-Menüband" + +#: tfmmcx.toolbar2.caption +msgid "ToolBar2" +msgstr "ToolBar2" + +#: tfmmcx.toolbar3.caption +msgid "ToolBar3" +msgstr "ToolBar3" + +#: tfmmcx.toolbutton11.caption +msgid "Plot ▾" +msgstr "Plotten ▾" + +#: tfmmcx.toolbutton11.hint +msgid "Plot MCX output data" +msgstr "MCX-Ausgabedaten plotten" + +#: tfmmcx.toolbutton12.caption +msgid "ToolButton12" +msgstr "ToolButton12" + +#: tfmmcx.toolbutton13.caption +msgid "ToolButton13" +msgstr "ToolButton13" + +#: tfmmcx.toolbutton17.caption +msgid "ToolButton17" +msgstr "ToolButton17" + +#: tfmmcx.toolbutton35.caption +msgid "ToolButton35" +msgstr "ToolButton35" + +#: tfmmcx.toolbutton39.hint +msgid "Reset volume and define a different dimension" +msgstr "Volumen zurücksetzen und andere Dimension definieren" + +#: tfmmcx.toolbutton5.caption +msgid "ToolButton5" +msgstr "ToolButton5" + +#: tfmmcx.toolbutton7.caption +msgctxt "tfmmcx.toolbutton7.caption" +msgid "Reset" +msgstr "Zurücksetzen" + +#: tfmmcx.toolbutton8.caption +msgctxt "tfmmcx.toolbutton8.caption" +msgid "ToolButton8" +msgstr "ToolButton8" + +#: tfmmcx.toolbutton9.caption +msgid "Help ▾" +msgstr "Hilfe ▾" + +#: tfmmcx.toolbutton9.hint +msgctxt "tfmmcx.toolbutton9.hint" +msgid "Browse help information" +msgstr "Hilfeinformationen durchsuchen" + +#: tfmmcx.tvshapes.hint +msgctxt "tfmmcx.tvshapes.hint" +msgid "ShapeCfg" +msgstr "ShapeCfg" + +#: tfmmcx.vlbc.hint +msgid "Boundary \n\nUsing this box to set the boundary condition for each one of the 6\nfacets on the bounding box. A total of 4 boundary conditions are\nsupported:\n\n1. total absorbing BC: photon hiting the boundary are terminated\n2. Fresnel reflection BC: perform Fresnel reflection/transmission\n3. mirror/total reflection BC: photon is 100% reflected (can run a long time)\n4. cylic BC: a photon exiting from a facet will re-enter from the opposite one\n" +msgstr "Boundary\n\nDiese Box verwenden, um die Randbedingung für jede der 6 Facetten der Bounding-Box zu setzen. Insgesamt werden 4 Randbedingungen unterstützt:\n\n1. Vollabsorbierende BC: Photonen, die die Grenze treffen, werden beendet\n2. Fresnel-Reflexions-BC: Fresnel-Reflexion/Transmission durchführen\n3. Spiegel/Vollreflexions-BC: Photon wird 100% reflektiert (kann lange dauern)\n4. Zyklische BC: Ein Photon, das eine Facette verlässt, tritt von der gegenüberliegenden wieder ein\n" + +#: tfmnewsession.btcancel.caption +msgctxt "tfmnewsession.btcancel.caption" +msgid "Cancel" +msgstr "Abbrechen" + +#: tfmnewsession.btok.caption +msgctxt "tfmnewsession.btok.caption" +msgid "OK" +msgstr "OK" + +#: tfmnewsession.caption +msgid "Create A New Simulation" +msgstr "Neue Simulation erstellen" + +#: tfmnewsession.edsession.hint +msgctxt "tfmnewsession.edsession.hint" +msgid "Session" +msgstr "Session" + +#: tfmnewsession.grprogram.caption +msgctxt "tfmnewsession.grprogram.caption" +msgid "Run Monte Carlo simulation with" +msgstr "Monte-Carlo-Simulation ausführen mit" + +#: tfmnewsession.grprogram.hint +msgid "Program" +msgstr "Programm" + +#: tfmnewsession.label4.caption +msgid "Please type in a unique session name" +msgstr "Bitte geben Sie einen eindeutigen Session-Namen ein" + +#: tfmnewsession.label4.hint +msgctxt "tfmnewsession.label4.hint" +msgid "-s (--sessionid)" +msgstr "-s (--sessionid)" + +#: tfmshapeeditor.btcancel.caption +msgctxt "tfmshapeeditor.btcancel.caption" +msgid "Cancel" +msgstr "Abbrechen" + +#: tfmshapeeditor.btok.caption +msgctxt "tfmshapeeditor.btok.caption" +msgid "OK" +msgstr "OK" + +#: tfmshapeeditor.caption +msgid "Edit Shapes" +msgstr "Formen bearbeiten" + +#: tfmsource.btcancel.caption +msgctxt "tfmsource.btcancel.caption" +msgid "Cancel" +msgstr "Abbrechen" + +#: tfmsource.btok.caption +msgctxt "tfmsource.btok.caption" +msgid "OK" +msgstr "OK" + +#: tfmsource.caption +msgid "Light Source Settings" +msgstr "Lichtquellen-Einstellungen" + +#: tfmsource.edsource.text +msgid "pencil" +msgstr "Bleistift" + +#: tfmsource.label4.caption +msgid "Please select a light source type:" +msgstr "Bitte wählen Sie einen Lichtquellentyp:" + +#: tfmsource.label5.caption +msgid "Please define source parameters:" +msgstr "Bitte definieren Sie Quellparameter:" + +#: tfmstop.caption +msgid "Running ..." +msgstr "Läuft ..." + +#: tfmstop.toolbar1.caption +msgid "Running" +msgstr "Läuft" + +#: tfmstop.toolbutton3.caption +msgid "Hide" +msgstr "Ausblenden" + +#: tfmstop.toolbutton3.hint +msgid "Hide this window" +msgstr "Dieses Fenster ausblenden" + +#: tfmstop.toolbutton8.caption +msgctxt "tfmstop.toolbutton8.caption" +msgid "ToolButton8" +msgstr "ToolButton8" + +#: tfmviewer.btbackground.hint +msgctxt "tfmviewer.btbackground.hint" +msgid "Change Background Color" +msgstr "Hintergrundfarbe ändern" + +#: tfmviewer.btopaque.caption +msgid "btOpaque" +msgstr "btOpaque" + +#: tfmviewer.btopaque.hint +msgid "Show Opaque Hull" +msgstr "Undurchsichtige Hülle anzeigen" + +#: tfmviewer.caption +msgid "MCX Studio Volume Renderer" +msgstr "MCX Studio Volumen-Renderer" + +#: tfmviewer.grdir.caption +msgid "Slicing direction" +msgstr "Schnittrichtung" + +#: tfmviewer.label1.caption +msgid "Rendering quality" +msgstr "Rendering-Qualität" + +#: tfmviewer.label2.caption +msgid "Cutting plane position:" +msgstr "Schnittebenen-Position:" + +#: tfmviewer.label3.caption +msgid "Invisible threshold" +msgstr "Unsichtbarkeitsschwelle" + +#: tfmviewer.label4.caption +msgid "Color level" +msgstr "Farbebene" + +#: tfmviewer.mcxplotexit.caption +msgctxt "tfmviewer.mcxplotexit.caption" +msgid "Exit" +msgstr "Beenden" + +#: tfmviewer.mcxplotexit.hint +msgctxt "tfmviewer.mcxplotexit.hint" +msgid "Exit" +msgstr "Beenden" + +#: tfmviewer.mcxplotopen.caption +msgid "Open File" +msgstr "Datei öffnen" + +#: tfmviewer.mcxplotopen.hint +msgid "Open Data File" +msgstr "Datendatei öffnen" + +#: tfmviewer.mcxplotrefresh.caption +msgctxt "tfmviewer.mcxplotrefresh.caption" +msgid "Refresh" +msgstr "Aktualisieren" + +#: tfmviewer.mcxplotrefresh.hint +msgctxt "tfmviewer.mcxplotrefresh.hint" +msgid "Refresh" +msgstr "Aktualisieren" + +#: tfmviewer.mcxplotresetcamera.caption +msgctxt "tfmviewer.mcxplotresetcamera.caption" +msgid "Reset" +msgstr "Zurücksetzen" + +#: tfmviewer.mcxplotsavescreen.caption +msgctxt "tfmviewer.mcxplotsavescreen.caption" +msgid "Save Screen" +msgstr "Bildschirm speichern" + +#: tfmviewer.mcxplotsavescreen.hint +msgid "Save screenshot" +msgstr "Screenshot speichern" + +#: tfmviewer.mcxplotshowbbx.caption +msgctxt "tfmviewer.mcxplotshowbbx.caption" +msgid "Show Bounding Box" +msgstr "Bounding-Box anzeigen" + +#: tfmviewer.mcxplotshowbbx.hint +msgctxt "tfmviewer.mcxplotshowbbx.hint" +msgid "Show Bounding Box" +msgstr "Bounding-Box anzeigen" + +#: tfmviewer.mcxplotusecolor.caption +msgid "Pseudocolor" +msgstr "Pseudofarbe" + +#: tfmviewer.mcxplotusecolor.hint +msgid "Use Pseudocolor" +msgstr "Pseudofarbe verwenden" + +#: tfmviewer.toolbar1.caption +msgctxt "tfmviewer.toolbar1.caption" +msgid "ToolBar1" +msgstr "ToolBar1" + +#: tfmviewer.toolbutton10.caption +msgid "ToolButton10" +msgstr "ToolButton10" + +#: tfmviewer.toolbutton4.hint +msgid "Reset 3D View" +msgstr "3D-Ansicht zurücksetzen" + +#: tfmviewer.toolbutton9.caption +msgctxt "tfmviewer.toolbutton9.caption" +msgid "ToolButton9" +msgstr "ToolButton9" \ No newline at end of file diff --git a/mcxstudio/i18n/mcxstudio.es.po b/mcxstudio/i18n/mcxstudio.es.po new file mode 100644 index 00000000..2060f281 --- /dev/null +++ b/mcxstudio/i18n/mcxstudio.es.po @@ -0,0 +1,1993 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: ge_DE\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 3.0.1\n" + +#: tfmabout.button1.caption +msgctxt "tfmabout.button1.caption" +msgid "OK" +msgstr "Aceptar" + +#: tfmabout.caption +msgid "About Monte Carlo eXtreme Studio" +msgstr "Acerca de Monte Carlo eXtreme Studio" + +#: tfmabout.image3.hint +msgctxt "tfmabout.image3.hint" +msgid "About MCX" +msgstr "Acerca de MCX" + +#: tfmconfig.btcancel.caption +msgctxt "tfmconfig.btcancel.caption" +msgid "Cancel" +msgstr "Cancelar" + +#: tfmconfig.btok.caption +msgctxt "tfmconfig.btok.caption" +msgid "OK" +msgstr "Aceptar" + +#: tfmconfig.caption +msgid "MCX Studio Config" +msgstr "Configuración de MCX Studio" + +#: tfmconfig.ckusemanualpath.caption +msgid "Use Manual Paths" +msgstr "Usar rutas manuales" + +#: tfmconfig.edlocalpath.columns[0].title.caption +msgctxt "tfmconfig.edlocalpath.columns[0].title.caption" +msgid "Value" +msgstr "Valor" + +#: tfmconfig.edscppath.hint +msgctxt "tfmconfig.edscppath.hint" +msgid "Local SCP Executable Path" +msgstr "Ruta del ejecutable SCP local" + +#: tfmconfig.edsshpath.hint +msgid "Local SSH Path" +msgstr "Ruta SSH local" + +#: tfmconfig.edworkpath.text +msgid "%MCXSTUDIO%/MCXOutput" +msgstr "%MCXSTUDIO%/MCXOutput" + +#: tfmconfig.groupbox2.caption +msgid "MCXStudio Local Output Root Directory" +msgstr "Directorio raíz de salida local de MCX Studio" + +#: tfmconfig.groupbox3.caption +msgid "Remote MCX/MMC/MCXCl Executable Search Paths" +msgstr "Rutas de búsqueda de ejecutables MCX/MMC/MCXCl remotos" + +#: tfmconfig.groupbox4.caption +msgid "Local MCX/MMC/MCXCl Executable Search Paths" +msgstr "Rutas de búsqueda de ejecutables MCX/MMC/MCXCl locales" + +#: tfmconfig.groupbox5.caption +msgid "Local SSH Executable Path" +msgstr "Ruta del ejecutable SSH local" + +#: tfmconfig.groupbox6.caption +msgctxt "tfmconfig.groupbox6.caption" +msgid "Local SCP Executable Path" +msgstr "Ruta del ejecutable SCP local" + +#: tfmconfig.groupbox7.caption +msgid "Remote MCX/MMC/MCXCl Output Directory" +msgstr "Directorio de salida MCX/MMC/MCXCl remoto" + +#: tfmconfig.groupbox8.caption +msgid "Remote GPU Server" +msgstr "Servidor GPU remoto" + +#: tfmconfig.label1.caption +msgid "Hostname or IP" +msgstr "Nombre de host o IP" + +#: tfmconfig.label2.caption +msgid "Port" +msgstr "Puerto" + +#: tfmconfig.label3.caption +msgid "User name" +msgstr "Nombre de usuario" + +#: tfmdatafile.btcancel.caption +msgctxt "tfmdatafile.btcancel.caption" +msgid "Cancel" +msgstr "Cancelar" + +#: tfmdatafile.btok.caption +msgctxt "tfmdatafile.btok.caption" +msgid "OK" +msgstr "Aceptar" + +#: tfmdatafile.caption +msgid " Data File Properties" +msgstr "Propiedades del archivo de datos" + +#: tfmdatafile.eddataformat.text +msgid "Float (32bit)" +msgstr "Flotante (32 bits)" + +#: tfmdatafile.label10.caption +msgid "Data File" +msgstr "Archivo de datos" + +#: tfmdatafile.label4.caption +msgid "Y Dimension" +msgstr "Dimensión Y" + +#: tfmdatafile.label5.caption +msgid "X Dimension" +msgstr "Dimensión X" + +#: tfmdatafile.label6.caption +msgid "Z Dimension" +msgstr "Dimensión Z" + +#: tfmdatafile.label7.caption +msgctxt "tfmdatafile.label7.caption" +msgid "Time Gates" +msgstr "Ventanas temporales" + +#: tfmdatafile.label8.caption +msgctxt "tfmdatafile.label8.caption" +msgid "Time Gates" +msgstr "Ventanas temporales" + +#: tfmdatafile.label9.caption +msgid "Header Size" +msgstr "Tamaño de encabezado" + +#: tfmdomain.acexit.caption +msgid "acExit" +msgstr "acExit" + +#: tfmdomain.acexit.hint +msgctxt "tfmdomain.acexit.hint" +msgid "Exit" +msgstr "Salir" + +#: tfmdomain.achidebbx.caption +msgid "acHideBBX" +msgstr "acHideBBX" + +#: tfmdomain.achidebbx.hint +msgid "Hide Domain Box" +msgstr "Ocultar caja de dominio" + +#: tfmdomain.acloadjson.caption +msgid "acLoadJSON" +msgstr "acLoadJSON" + +#: tfmdomain.acloadjson.hint +msgid "Load JSON" +msgstr "Cargar JSON" + +#: tfmdomain.acrender.caption +msgid "acRender" +msgstr "acRender" + +#: tfmdomain.acrender.hint +msgid "Render" +msgstr "Renderizar" + +#: tfmdomain.acresetcamera.caption +msgid "acResetCamera" +msgstr "acResetCamera" + +#: tfmdomain.acresetcamera.hint +msgid "Reset Camera" +msgstr "Restablecer cámara" + +#: tfmdomain.acsaveimage.caption +msgid "acSaveImage" +msgstr "acSaveImage" + +#: tfmdomain.acsaveimage.hint +msgctxt "tfmdomain.acsaveimage.hint" +msgid "Save Screen" +msgstr "Guardar pantalla" + +#: tfmdomain.acsavejson.caption +msgid "acSaveJSON" +msgstr "acSaveJSON" + +#: tfmdomain.acsavejson.hint +msgid "Save JSON" +msgstr "Guardar JSON" + +#: tfmdomain.btbackground.hint +msgctxt "tfmdomain.btbackground.hint" +msgid "Change Background Color" +msgstr "Cambiar color de fondo" + +#: tfmdomain.btpin.caption +msgid "Pin Editor" +msgstr "Fijar editor" + +#: tfmdomain.btpin.hint +msgid "Show editor" +msgstr "Mostrar editor" + +#: tfmdomain.caption +msgid "MCX Domain Renderer" +msgstr "Renderizador de dominio MCX" + +#: tfmdomain.toolbar1.caption +msgctxt "tfmdomain.toolbar1.caption" +msgid "ToolBar1" +msgstr "ToolBar1" + +#: tfmdomain.toolbutton11.caption +msgid "ToolButton11" +msgstr "ToolButton11" + +#: tfmdomain.toolbutton7.caption +msgid "ToolButton7" +msgstr "ToolButton7" + +#: tfmdomain.toolbutton9.caption +msgctxt "tfmdomain.toolbutton9.caption" +msgid "ToolButton9" +msgstr "ToolButton9" + +#: tfmmcx.btexpandoutput.caption +msgid "â–µ" +msgstr "â–µ" + +#: tfmmcx.btexpandoutput.hint +msgid "To expand or collapse the command window." +msgstr "Para expandir o contraer la ventana de comandos." + +#: tfmmcx.btgbexpand.caption +msgid "▾" +msgstr "▾" + +#: tfmmcx.btloadseed.hint +msgid "Load seed data from previous simulations for replay" +msgstr "Cargar datos semilla de simulaciones anteriores para repetición" + +#: tfmmcx.btsendcmd.caption +msgid "Send" +msgstr "Enviar" + +#: tfmmcx.btsendcmd.hint +msgid "Send the user input to the input buffer of the external program \ncurrently being executed.\n" +msgstr "Enviar la entrada del usuario al búfer de entrada del programa externo que se está ejecutando actualmente.\n" + +#: tfmmcx.button2.caption +msgid "Clear Output" +msgstr "Limpiar salida" + +#: tfmmcx.caption +msgid "MCX Studio" +msgstr "MCX Studio" + +#: tfmmcx.ckautopilot.caption +msgid "Let MCX decide thread/block size (-A)" +msgstr "Dejar que MCX decida el tamaño de hilo/bloque (-A)" + +#: tfmmcx.ckautopilot.hint +msgid "Autopilot \n\nChecking this box tells MCX/MMC to automatically determine the \"optimal\"\nthread number and block size by using the hardware information.\n\nIt is recommended to always check this box. The key to maximize simulation\nthroughput is to ensure a large number of threads are launched to keep the\nhardware resources fully utilized.\n" +msgstr "Piloto automático\n\nMarcar esta casilla le dice a MCX/MMC que determine automáticamente el número \"óptimo\" de hilos y el tamaño de bloque usando la información del hardware.\n\nSe recomienda marcar siempre esta casilla. La clave para maximizar el rendimiento de la simulación es asegurar que se lancen muchos hilos para mantener los recursos de hardware completamente utilizados.\n" + +#: tfmmcx.ckbdebug.hint +msgctxt "tfmmcx.ckbdebug.hint" +msgid "DebugFlags" +msgstr "DebugFlags" + +#: tfmmcx.ckbdet.hint +msgid "SaveDetFlag \n\nThis checkbox list allows users to select the detected photon\ndata items that they want to save in the .mch file.\n\nBy default, only the Detector ID and Partial Pathlength are stored.\n" +msgstr "SaveDetFlag\n\nEsta lista de casillas permite a los usuarios seleccionar los elementos de datos de fotones detectados que quieren guardar en el archivo .mch.\n\nPor defecto, solo se almacenan el ID del detector y la longitud parcial de trayectoria.\n" + +#: tfmmcx.ckdoremote.caption +msgid "Run remote command:" +msgstr "Ejecutar comando remoto:" + +#: tfmmcx.ckdoremote.hint +msgid "DoRemote \n\nCheck this option asks MCXStudio to call the specified ssh command \nand run mcx/mmc simulations on remote servers. \n\nPlease be aware that one must prepare the server and client to enable\nremote execution, this include\n\n1. install mcx/mmc/mcxcl executable on remote server and add path to\n the PATH environment \n2. install ssh client on the local client; for Linux/Mac, ssh/scp command is\n typically built-in; for windows, please install plink.exe and pscp.exe and\n ensure that their paths are on the PATH environment variable\n3. optionally, one can set the SSH key between the client and server to \n avoid typing password, please see http://www.linuxproblem.org/art_9.html\n" +msgstr "DoRemote\n\nMarcar esta opción le pide a MCX Studio que llame al comando ssh especificado y ejecute simulaciones mcx/mmc en servidores remotos.\n\nTenga en cuenta que se debe preparar el servidor y el cliente para habilitar la ejecución remota, esto incluye:\n\n1. instalar el ejecutable mcx/mmc/mcxcl en el servidor remoto y agregar la ruta a la variable de entorno PATH\n2. instalar el cliente ssh en el cliente local; para Linux/Mac, el comando ssh/scp generalmente está integrado; para Windows, instale plink.exe y pscp.exe y asegúrese de que sus rutas estén en la variable de entorno PATH\n3. opcionalmente, se puede configurar la clave SSH entre el cliente y el servidor para evitar escribir la contraseña, consulte http://www.linuxproblem.org/art_9.html\n" + +#: tfmmcx.ckdoreplay.caption +msgid "Replay" +msgstr "Repetir" + +#: tfmmcx.ckdoreplay.hint +msgid "DoReplay \n\nWhen selecting a .mch file as the seed, this checkbox is automatically \nchecked, signifying that MCX/MMC will perform a photon replay by\nreading the RNG seeds from the .mch file and rerun the photons to produce\nthe Jacobians - in such case, one can use the \"Output Type\" to select which\nmetric to output.\n" +msgstr "DoReplay\n\nCuando se selecciona un archivo .mch como semilla, esta casilla se marca automáticamente, indicando que MCX/MMC realizará una repetición de fotones leyendo las semillas RNG del archivo .mch y volviendo a ejecutar los fotones para producir los jacobianos - en tal caso, se puede usar el \"Tipo de salida\" para seleccionar qué métrica generar.\n" + +#: tfmmcx.cklockgpu.caption +msgid "Lock GPU" +msgstr "Bloquear GPU" + +#: tfmmcx.cklockgpu.hint +msgid "Checking this box prevents MCXStudio from updating the device list\nwhen switching between different simulation sessions.\n\nWhen running simulation on a remote server, it is recommended to\nlock the GPU to avoid resetting of the device list.\n" +msgstr "Marcar esta casilla evita que MCX Studio actualice la lista de dispositivos al cambiar entre diferentes sesiones de simulación.\n\nCuando se ejecuta la simulación en un servidor remoto, se recomienda bloquear la GPU para evitar el restablecimiento de la lista de dispositivos.\n" + +#: tfmmcx.cknormalize.caption +msgid "Do normalization (-U)" +msgstr "Hacer normalización (-U)" + +#: tfmmcx.cknormalize.hint +msgid "DoNormalize \n\nCheck this option allows MCX/MMC to normalize the output by the \nbelow formula\n\nΦ(i,j,k,t)=E(i,j,k,t) / (V*E_total*dT)\n\nwhere E(i,j,k,t) is the raw accummuated energy at each voxel; \nV is the size of the voxel in mm^3; dT is the time-gate width in s.\n\nAfter normalization, the result becomes TPSF or Green's function.\n\nUnchecking this option disables normalization.\n" +msgstr "DoNormalize\n\nMarcar esta opción permite a MCX/MMC normalizar la salida mediante la siguiente fórmula:\n\nΦ(i,j,k,t)=E(i,j,k,t) / (V*E_total*dT)\n\ndonde E(i,j,k,t) es la energía acumulada sin procesar en cada vóxel; V es el tamaño del vóxel en mm^3; dT es el ancho de la ventana temporal en s.\n\nDespués de la normalización, el resultado se convierte en TPSF o función de Green.\n\nDesmarcar esta opción deshabilita la normalización.\n" + +#: tfmmcx.ckreflect.caption +msgid "Do reflection all boundaries (-b)" +msgstr "Hacer reflexión en todos los límites (-b)" + +#: tfmmcx.ckreflect.hint +msgid "DoReflect \n\nCheck this option (by default) enables reflection/refrection calculations \nwhen refractive index mismatch is detected at tissue boundaries.\n\nIf this option is unchecked, any photon hits the boundary between a \nnon-zero and zero-valued voxel will be terminated (i.e. total\nabsorbtion boundary condition). \n\nThe medium outside of the volume bounding box is assumed to have \nthe optical properties defined as label 0 (the first row in the Media Settings\ntable on the right).\n" +msgstr "DoReflect\n\nMarcar esta opción (por defecto) habilita los cálculos de reflexión/refracción cuando se detecta una discrepancia de índice de refracción en los límites del tejido.\n\nSi esta opción no está marcada, cualquier fotón que golpee el límite entre un vóxel de valor no cero y cero será terminado (es decir, condición de límite de absorción total).\n\nSe asume que el medio fuera de la caja delimitadora del volumen tiene las propiedades ópticas definidas como etiqueta 0 (la primera fila en la tabla de Configuración de medios de la derecha).\n" + +#: tfmmcx.cksavedata.caption +msgid "Save fluence (-S)" +msgstr "Guardar fluencia (-S)" + +#: tfmmcx.cksavedata.hint +msgid "DoSave \n\nChecking this option makes MCX/MMC outputs the volumetric fluence\ndata: for MCX, it is the .mc2/.nii file; for MMC, it is a .dat file using P/H/B/S \nray-tracers and .mc2/.nii files when using the dual-grid mode (-M G).\n\nUnchecking this option stops MCX/MMC output the .mc2/.nii file.\n" +msgstr "DoSave\n\nMarcar esta opción hace que MCX/MMC genere los datos de fluencia volumétrica: para MCX, es el archivo .mc2/.nii; para MMC, es un archivo .dat usando trazadores de rayos P/H/B/S y archivos .mc2/.nii cuando se usa el modo de malla dual (-M G).\n\nDesmarcar esta opción detiene la salida del archivo .mc2/.nii de MCX/MMC.\n" + +#: tfmmcx.cksavedetector.caption +msgid "Save detected photons (-d)" +msgstr "Guardar fotones detectados (-d)" + +#: tfmmcx.cksavedetector.hint +msgid "SaveDetector \n\nChecking this option allows one to store detected photon \ninformation. The output data records can be user-defined by\nselecting the check-box list entitled \"Save detected photon\".\nThe output data are stored in a .mch file.\n\nUnchecking this option disables output the .mch file (can be \nslightly faster).\n" +msgstr "SaveDetector\n\nMarcar esta opción permite almacenar información de fotones detectados. Los registros de datos de salida pueden ser definidos por el usuario seleccionando la lista de casillas titulada \"Guardar fotones detectados\". Los datos de salida se almacenan en un archivo .mch.\n\nDesmarcar esta opción deshabilita la salida del archivo .mch (puede ser ligeramente más rápido).\n" + +#: tfmmcx.cksavemask.caption +msgid "Save volume mask (-M)" +msgstr "Guardar máscara de volumen (-M)" + +#: tfmmcx.cksavemask.hint +msgid "DoSaveMask \n\nChecking this option asks MCX to output the pre-processed volume \nmasks. The preprocessed mask contains the voxels that are covered\nunder detectors; these voxels are designated by setting the sign-bit \nas 1. One can visualize this dumped data mask using mcxplotvol.m\n\nUnchecking this option suppresses the output of this mask file.\n" +msgstr "DoSaveMask\n\nMarcar esta opción le pide a MCX que genere las máscaras de volumen preprocesadas. La máscara preprocesada contiene los vóxeles que están cubiertos bajo detectores; estos vóxeles se designan estableciendo el bit de signo como 1. Se puede visualizar esta máscara de datos volcada usando mcxplotvol.m\n\nDesmarcar esta opción suprime la salida de este archivo de máscara.\n" + +#: tfmmcx.cksaveref.caption +msgid "Save diffuse reflectance (-X)" +msgstr "Guardar reflectancia difusa (-X)" + +#: tfmmcx.cksaveref.hint +msgid "DoSaveRef \n\nChecking this option allows MCX/MMC to output the escaped photon\nweights on the exterior surface of the domain. For MCX, to save the \ntotal diffuse reflectance, one must pad a layer of zero voxels in the \nfacet or full bounding box of the domain to store such data. The raw \ntotal diffuse reflectance are normalized and stored as negative values\nin the .mc2/.nii file. When loading such file using loadmc2.m, the diffuse\nreflectance data are extracted and converted to positive output.\n\nUnchecking this option disables saving diffuse reflectance data.\n" +msgstr "DoSaveRef\n\nMarcar esta opción permite a MCX/MMC generar los pesos de fotones escapados en la superficie exterior del dominio. Para MCX, para guardar la reflectancia difusa total, se debe rellenar una capa de vóxeles cero en la faceta o caja delimitadora completa del dominio para almacenar tales datos. La reflectancia difusa total sin procesar se normaliza y se almacena como valores negativos en el archivo .mc2/.nii. Al cargar tal archivo usando loadmc2.m, los datos de reflectancia difusa se extraen y convierten a salida positiva.\n\nDesmarcar esta opción deshabilita el guardado de datos de reflectancia difusa.\n" + +#: tfmmcx.cksaveseed.caption +msgid "Save photon seeds (-q)" +msgstr "Guardar semillas de fotones (-q)" + +#: tfmmcx.cksaveseed.hint +msgid "DoSaveSeed \n\nChecking this option allows one to save the RNG seeds of the detected\nphotons in the .mch file. This makes it possible to perform photon replay\nto compute the Jacobian when feeding this output .mch file as the seed\nfor the replay run.\n\nUnchecking this option disables saving photon seeds.\n" +msgstr "DoSaveSeed\n\nMarcar esta opción permite guardar las semillas RNG de los fotones detectados en el archivo .mch. Esto hace posible realizar repetición de fotones para calcular el jacobiano cuando se alimenta este archivo .mch de salida como la semilla para la ejecución de repetición.\n\nDesmarcar esta opción deshabilita el guardado de semillas de fotones.\n" + +#: tfmmcx.cksharedfs.caption +msgid "Shared file system" +msgstr "Sistema de archivos compartido" + +#: tfmmcx.cksharedfs.hint +msgid "DoSharedFS \n\nChecking this option suggests that both the client and the server\nshare the same file system, thus, no file copying is needed. In other\nword, the folder structure to read/write on both client and server\nare identical. This is the case when one uses nfs/autofs on Linux/Mac.\n" +msgstr "DoSharedFS\n\nMarcar esta opción sugiere que tanto el cliente como el servidor comparten el mismo sistema de archivos, por lo tanto, no se necesita copia de archivos. En otras palabras, la estructura de carpetas para leer/escribir en tanto cliente como servidor son idénticas. Este es el caso cuando se usa nfs/autofs en Linux/Mac.\n" + +#: tfmmcx.ckshowprogress.caption +msgid "Show progress bar" +msgstr "Mostrar barra de progreso" + +#: tfmmcx.ckshowprogress.hint +msgid "ShowProgress \n\n(This option is highly experimental, use with caution, may cause hanging on some GPUs)\n\nCheck this option to let MCX/MMC to print a progress bar during the\nGPU simulation. In some hardware, this may cause unstable behaviors\nsuch as stalling or never return even the simulation is complete. If such\nbehavior is detected, please uncheck this option.\n" +msgstr "ShowProgress\n\n(Esta opción es altamente experimental, usar con precaución, puede causar colgado en algunas GPUs)\n\nMarcar esta opción permite a MCX/MMC imprimir una barra de progreso durante la simulación GPU. En algunos hardware, esto puede causar comportamientos inestables como atascos o nunca regresar incluso cuando la simulación esté completa. Si se detecta tal comportamiento, desmarque esta opción.\n" + +#: tfmmcx.ckskipvoid.caption +msgid "Skip void space (-k)" +msgstr "Omitir espacio vacío (-k)" + +#: tfmmcx.ckskipvoid.hint +msgid "DoSkipVoid \n\nChecking this option starts photon's ellapse time when it first enters\na non-zero voxel.\n\nUnchecking this option starts photon's ellapse time at launch time,\nregardless it is launched in the background (0-valued) voxel or non-zero\nvoxel.\n" +msgstr "DoSkipVoid\n\nMarcar esta opción inicia el tiempo transcurrido del fotón cuando entra por primera vez a un vóxel no cero.\n\nDesmarcar esta opción inicia el tiempo transcurrido del fotón en el momento del lanzamiento, independientemente de si se lanza en el vóxel de fondo (valor 0) o vóxel no cero.\n" + +#: tfmmcx.ckspecular.caption +msgid "Do specular reflection (-V)" +msgstr "Hacer reflexión especular (-V)" + +#: tfmmcx.ckspecular.hint +msgid "DoSpecular \n\nChecking this option performs a transmission calculation if a photon \nis launched in the background; this results in change of direction angle\nand loss of energy.\n\nUnchecking this option moves a photon into a non-zero voxel without\nconsidering the specular reflection and change of direction.\n" +msgstr "DoSpecular\n\nMarcar esta opción realiza un cálculo de transmisión si un fotón se lanza en el fondo; esto resulta en cambio de ángulo de dirección y pérdida de energía.\n\nDesmarcar esta opción mueve un fotón a un vóxel no cero sin considerar la reflexión especular y cambio de dirección.\n" + +#: tfmmcx.cksrcfrom0.caption +msgid "Orign from [0,0,0] (-z)" +msgstr "Origen desde [0,0,0] (-z)" + +#: tfmmcx.cksrcfrom0.hint +msgid "DoSrcFrom0 \n\nChecking this item assumes the lower-bottom corner of the voxelated \ndomain is [0,0,0] mm. The definitions of source and detector positions \nare impacted by this definition.\n\nUnchecking this option assumes the lower-bottom corner of the \ndomain is [1,1,1] mm.\n" +msgstr "DoSrcFrom0\n\nMarcar este elemento asume que la esquina inferior izquierda del dominio voxelado es [0,0,0] mm. Las definiciones de las posiciones de fuente y detector se ven afectadas por esta definición.\n\nDesmarcar esta opción asume que la esquina inferior izquierda del dominio es [1,1,1] mm.\n" + +#: tfmmcx.edbenchmark.hint +msgid "Benchmark \n\nThis option asks to run the built-in benchmark.\n" +msgstr "Benchmark\n\nEsta opción solicita ejecutar la prueba de rendimiento integrada.\n" + +#: tfmmcx.edblocksize.hint +msgid "ThreadBlock \n\nSpecify a small integer, preferably a multiple of 32, to define \nthe block size - for example, 64 means a thread block contains \n64 threads.\n\nThis is only used when the -A (autopilot mode) is not enabled.\n" +msgstr "ThreadBlock\n\nEspecificar un entero pequeño, preferiblemente múltiplo de 32, para definir el tamaño de bloque - por ejemplo, 64 significa que un bloque de hilos contiene 64 hilos.\n\nEsto solo se usa cuando el -A (modo piloto automático) no está habilitado.\n" + +#: tfmmcx.edblocksize.text +msgid "64" +msgstr "64" + +#: tfmmcx.edbubble.hint +msgctxt "tfmmcx.edbubble.hint" +msgid "BubbleSize" +msgstr "BubbleSize" + +#: tfmmcx.edbubble.text +msgid "-2" +msgstr "-2" + +#: tfmmcx.edcmdinput.hint +msgid "User Input\n\nWhen connecting to a remote server via ssh/scp, one may asked to type\n\"yes\" to save the ssh key or other interactive inputs. If this is the case, one\ncan use this field to type user input, and click \"Send\" to pipe user input to \nthe external program.\n" +msgstr "Entrada de usuario\n\nAl conectar a un servidor remoto via ssh/scp, se puede pedir escribir \"yes\" para guardar la clave ssh u otras entradas interactivas. Si este es el caso, se puede usar este campo para escribir la entrada del usuario, y hacer clic en \"Enviar\" para canalizar la entrada del usuario al programa externo.\n" + +#: tfmmcx.edconfigfile.hint +msgid "InputFile \n\nSpecify the input file in either .inp or .json format.\n" +msgstr "InputFile\n\nEspecificar el archivo de entrada en formato .inp o .json.\n" + +#: tfmmcx.eddetectednum.hint +msgid "DetectedNum \n\nThis sets the maximum number of detected photons to be stored. If\nthe actual detected photon number is higher than this specified number,\nmcx/mmc will generate an warning and print out the actual detected \nphoton count; one can use that output in this field to allow MCX to store\nall photons.\n" +msgstr "DetectedNum\n\nEsto establece el número máximo de fotones detectados a almacenar. Si el número real de fotones detectados es mayor que este número especificado, mcx/mmc generará una advertencia e imprimirá el conteo real de fotones detectados; se puede usar esa salida en este campo para permitir a MCX almacenar todos los fotones.\n" + +#: tfmmcx.eddetectednum.text +msgid "10000000" +msgstr "10000000" + +#: tfmmcx.edgate.hint +msgctxt "tfmmcx.edgate.hint" +msgid "GateNum" +msgstr "GateNum" + +#: tfmmcx.edgpuid.hint +msgid "GPUID \n\nUse this list to select the device or devices (CPU or GPU) used to\nrun the simulation. For MCX, if multiple CUDA GPUs are installed, one\ncan select multiple devices to speed up the calculation; for MCXCL\nand MMC, one can select OpenCL devices that include both CPU and\nGPUs. In such case, only devices of the same platform can be selected.\nFor example, an NVIDIA GPU and a CPU can not be selected together.\n" +msgstr "GPUID\n\nUsar esta lista para seleccionar el dispositivo o dispositivos (CPU o GPU) usados para ejecutar la simulación. Para MCX, si múltiples GPUs CUDA están instaladas, se pueden seleccionar múltiples dispositivos para acelerar el cálculo; para MCXCL y MMC, se pueden seleccionar dispositivos OpenCL que incluyen tanto CPU como GPUs. En tal caso, solo se pueden seleccionar dispositivos de la misma plataforma. Por ejemplo, una GPU NVIDIA y una CPU no pueden seleccionarse juntas.\n" + +#: tfmmcx.edmoreparam.hint +msgid "MoreParam \n\nOne can use this field to manually specify additional parameters that\nare not supported by this GUI tool. Any parameter set here will overwrite\nthe previous setting.\n" +msgstr "MoreParam\n\nSe puede usar este campo para especificar manualmente parámetros adicionales que no están soportados por esta herramienta GUI. Cualquier parámetro establecido aquí sobrescribirá la configuración anterior.\n" + +#: tfmmcx.edoutputformat.hint +msgid "OutputFormat \n\nThis specifies the output data file format. The supported formats are\n\n.mc2 - a simple binary format stores the voxel-by-voxel binary data\n in the column-major order\n.nii - the NIfTI-1 format\n.tx3 - a simple 3D texture binary format.\nascii - text-based data file\n" +msgstr "OutputFormat\n\nEsto especifica el formato del archivo de datos de salida. Los formatos soportados son:\n\n.mc2 - un formato binario simple que almacena los datos binarios vóxel por vóxel en orden de columna principal\n.nii - el formato NIfTI-1\n.tx3 - un formato binario de textura 3D simple\nascii - archivo de datos basado en texto\n" + +#: tfmmcx.edoutputtype.hint +msgid "OutputType \n\nThis option specifies the output data type. \n\n* Fluence rate [J/mm^2/s] - the default output\n* Fluence [J/mm^2] - the integration of the fluence \n rate over each time gate\n* Energy deposition [J] - can be computed by multiplying \n fluence with absorption μa and voxel volume [mm^3]\n* Absorption Jacobian (mua) [1/mm] - in the replay mode, this\n outputs the sensitivity matrix for μa;\n* Average scattering event count - in the replay mode, this\n outputs the number of scattering event per voxel\n* Momentum transfer sensivity (DCS) - in the replay mode, this \n outputs the momentum transfer contribution/sensitivity from \n each voxel.\n" +msgstr "OutputType\n\nEsta opción especifica el tipo de datos de salida.\n\n* Tasa de fluencia [J/mm^2/s] - la salida por defecto\n* Fluencia [J/mm^2] - la integración de la tasa de fluencia sobre cada ventana temporal\n* Deposición de energía [J] - puede calcularse multiplicando la fluencia con la absorción μa y el volumen del vóxel [mm^3]\n* Jacobiano de absorción (mua) [1/mm] - en modo de repetición, esto genera la matriz de sensibilidad para μa\n* Conteo promedio de eventos de dispersión - en modo de repetición, esto genera el número de eventos de dispersión por vóxel\n* Sensibilidad de transferencia de momento (DCS) - en modo de repetición, esto genera la contribución/sensibilidad de transferencia de momento de cada vóxel\n" + +#: tfmmcx.edphoton.hint +msgid "PhotonNum \n\nThis defines the total simulated photons.\n\nCan be an integer or number in scientific form. For example\n100000 and 1e5 are both acceptable.\n\nPlease be noted that we highly suggest one to start with a\nsmall photon number to avoid extended run time.\n" +msgstr "PhotonNum\n\nEsto define el total de fotones simulados.\n\nPuede ser un entero o número en forma científica. Por ejemplo, 100000 y 1e5 son ambos aceptables.\n\nTenga en cuenta que recomendamos encarecidamente comenzar con un número pequeño de fotones para evitar tiempo de ejecución extendido.\n" + +#: tfmmcx.edphoton.text +msgid "1e6" +msgstr "1e6" + +#: tfmmcx.edphoton.texthint +msgid "Integer" +msgstr "Entero" + +#: tfmmcx.edremote.hint +msgid "RemoteCmd \n\nPlease choose the remote connection command using the dropdown list, or\ntype in this field manually. For windows, it is recommended to choose the \nplink.exe command; for Linux, it is recommended to use the ssh command.\n\nPlease replace the user@server by the actual username and the server IP\nor domain name.\n\nYou are highly recommended to set up key-based ssh access to avoid typing\npassword. Tutorials can be found at http://www.linuxproblem.org/art_9.html\n" +msgstr "RemoteCmd\n\nPor favor elija el comando de conexión remota usando la lista desplegable, o escriba en este campo manualmente. Para Windows, se recomienda elegir el comando plink.exe; para Linux, se recomienda usar el comando ssh.\n\nPor favor reemplace user@server por el nombre de usuario real y la IP del servidor o nombre de dominio.\n\nSe recomienda encarecidamente configurar acceso ssh basado en clave para evitar escribir contraseña. Los tutoriales se pueden encontrar en http://www.linuxproblem.org/art_9.html\n" + +#: tfmmcx.edremote.text +msgid "Built-in ssh" +msgstr "ssh integrado" + +#: tfmmcx.edreplaydet.hint +msgctxt "tfmmcx.edreplaydet.hint" +msgid "ReplayDet" +msgstr "ReplayDet" + +#: tfmmcx.edrespin.hint +msgid "RespinNum \n\nSetting this to a positive number will repeat the simulation by the specified\nrepeition count starting from different random seeds.\n\nA negative integer asks MCX to divide the total photon number by the \nabsolute value of this input and run each subpart at a time. This can \nreduce the per-call run time, but may result in extensive overhead of\nrunning repeated simulations.\n" +msgstr "RespinNum\n\nEstablecer esto a un número positivo repetirá la simulación por el conteo de repetición especificado comenzando desde diferentes semillas aleatorias.\n\nUn entero negativo le pide a MCX dividir el número total de fotones por el valor absoluto de esta entrada y ejecutar cada subparte a la vez. Esto puede reducir el tiempo de ejecución por llamada, pero puede resultar en sobrecarga extensiva de ejecutar simulaciones repetidas.\n" + +#: tfmmcx.edseed.hint +msgid "Seed \n\nIf this field is a large integer number, this specifies the RNG seed; \n\nif this is a file name ending with .mch, it loads an .mch file generated \nfrom previous simulation and replays the detected photons.\n" +msgstr "Seed\n\nSi este campo es un número entero grande, esto especifica la semilla RNG;\n\nsi esto es un nombre de archivo que termina con .mch, carga un archivo .mch generado desde simulación anterior y repite los fotones detectados.\n" + +#: tfmmcx.edseed.text +msgid "1648335518" +msgstr "1648335518" + +#: tfmmcx.edseed.texthint +msgid "A large integer or .mch file name" +msgstr "Un entero grande o nombre de archivo .mch" + +#: tfmmcx.edsession.hint +msgid "Session \n\nThis string will be used in all output files as part of the file names.\n" +msgstr "Session\n\nEsta cadena se usará en todos los archivos de salida como parte de los nombres de archivo.\n" + +#: tfmmcx.edthread.hint +msgid "ThreadNum \n\nSpecify a large integer multiple of 32 (the warp size) to manually \ndefine the thread numbers.\n\nThis is only used when the -A (autopilot mode) is not enabled.\n" +msgstr "ThreadNum\n\nEspecificar un entero grande múltiplo de 32 (el tamaño de warp) para definir manualmente los números de hilo.\n\nEsto solo se usa cuando el -A (modo piloto automático) no está habilitado.\n" + +#: tfmmcx.edthread.text +msgid "16384" +msgstr "16384" + +#: tfmmcx.edunitinmm.hint +msgid "UnitInMM \n\nThis defines the voxel size. By default, 1x1x1 mm^3 voxels\nare used. Has to be a positive floating point number. For example,\n0.1 defines a 0.1x0.1x0.1 mm^3 voxel.\n\nCurrently, only isotropic voxels are supported.\n" +msgstr "UnitInMM\n\nEsto define el tamaño del vóxel. Por defecto, se usan vóxeles de 1x1x1 mm^3. Debe ser un número de punto flotante positivo. Por ejemplo, 0.1 define un vóxel de 0.1x0.1x0.1 mm^3.\n\nActualmente, solo se soportan vóxeles isotrópicos.\n" + +#: tfmmcx.edunitinmm.text +msgid "1" +msgstr "1" + +#: tfmmcx.edworkload.hint +msgid "Workload \n\nOne can specify a series of comma-separated numbers to specify the\nrelative portion of workload between multiple selected devices. \n\nFor example: 10,10 asks MCX to run 50% of the total photons using the\n1st device and 50% on the 2nd device. On the other hand, 10,100 splits\nthe total photon 1:10 between the 1st and 2nd devices.\n" +msgstr "Workload\n\nSe puede especificar una serie de números separados por coma para especificar la porción relativa de carga de trabajo entre múltiples dispositivos seleccionados.\n\nPor ejemplo: 10,10 le pide a MCX ejecutar 50% del total de fotones usando el primer dispositivo y 50% en el segundo dispositivo. Por otro lado, 10,100 divide el total de fotones 1:10 entre el primer y segundo dispositivos.\n" + +#: tfmmcx.edworkload.text +msgid "100" +msgstr "100" + +#: tfmmcx.edworkload.texthint +msgid "Comma separated numbers" +msgstr "Números separados por coma" + +#: tfmmcx.gradvsettings.caption +msgid "Advanced Settings" +msgstr "Configuración avanzada" + +#: tfmmcx.grarray.hint +msgid "ArrayOrder \n\nSelect MATLAB array order indicates that the input volume has a\ncolumn-major order - i.e. the left-most axis is the fastest index of\nthe array, like in MATLAB or FORTRAN.\n\nSelect C array order indicates that the input volume uses the \nrow-major order - i.e. the right-most index is the fastest index\nof the array, like in C and Python.\n" +msgstr "ArrayOrder\n\nSeleccionar orden de arreglo MATLAB indica que el volumen de entrada tiene un orden de columna principal - es decir, el eje más a la izquierda es el índice más rápido del arreglo, como en MATLAB o FORTRAN.\n\nSeleccionar orden de arreglo C indica que el volumen de entrada usa el orden de fila principal - es decir, el índice más a la derecha es el índice más rápido del arreglo, como en C y Python.\n" + +#: tfmmcx.gratomic.hint +msgid "UseAtomic \n\nUsing atomic operations avoids conflicts between multiple threads when\nwriting to the same voxel, thus is highly recommended.\n\nIn the very old CUDA hardware, using atomic operations has a high \noverhead, but such overhead was signficiantly less since the Fermi GPU.\n" +msgstr "UseAtomic\n\nUsar operaciones atómicas evita conflictos entre múltiples hilos al escribir al mismo vóxel, por lo tanto es altamente recomendado.\n\nEn hardware CUDA muy antiguo, usar operaciones atómicas tiene una alta sobrecarga, pero tal sobrecarga fue significativamente menor desde la GPU Fermi.\n" + +#: tfmmcx.grbasic.caption +msgid "Basic Settings" +msgstr "Configuración básica" + +#: tfmmcx.grbc.caption +msgid "Boundary cond." +msgstr "Cond. de límite" + +#: tfmmcx.grdet.caption +msgid "Save detected photon" +msgstr "Guardar fotón detectado" + +#: tfmmcx.grgpu.caption +msgid "GPU Settings" +msgstr "Configuración de GPU" + +#: tfmmcx.grprogram.caption +msgctxt "tfmmcx.grprogram.caption" +msgid "Run Monte Carlo simulation with" +msgstr "Ejecutar simulación Monte Carlo con" + +#: tfmmcx.grprogram.hint +msgid "MCProgram\n\nIn this panel, you choose which simulator to use. \nCurrently we support 3 simulators, \n\n* MCX: NVIDIA GPU-based simulation using voxelated domain\n* MCX-CL: OpenCL based CPU/GPU simulation using voxelated domain\n* MMC: OpenCL based CPU/GPU simulation using tetrahedral meshes\n\nThe built-in domain designer only supports creating voxelated \ndomains and creating meshes will be supported in the future.\n" +msgstr "MCProgram\n\nEn este panel, elige qué simulador usar.\nActualmente soportamos 3 simuladores:\n\n* MCX: simulación basada en GPU NVIDIA usando dominio voxelado\n* MCX-CL: simulación CPU/GPU basada en OpenCL usando dominio voxelado\n* MMC: simulación CPU/GPU basada en OpenCL usando mallas tetraédricas\n\nEl diseñador de dominio integrado solo soporta crear dominios voxelados y crear mallas será soportado en el futuro.\n" + +#: tfmmcx.grswitches.caption +msgid "Switches" +msgstr "Interruptores" + +#: tfmmcx.image1.hint +msgctxt "tfmmcx.image1.hint" +msgid "About MCX" +msgstr "Acerca de MCX" + +#: tfmmcx.label1.caption +msgid "Thread number (-t)" +msgstr "Número de hilos (-t)" + +#: tfmmcx.label1.hint +msgid "-t (--thread)" +msgstr "-t (--thread)" + +#: tfmmcx.label10.caption +msgctxt "tfmmcx.label10.caption" +msgid "or" +msgstr "o" + +#: tfmmcx.label10.hint +msgctxt "tfmmcx.label10.hint" +msgid "-a (--array)" +msgstr "-a (--array)" + +#: tfmmcx.label11.caption +msgid "Output format" +msgstr "Formato de salida" + +#: tfmmcx.label11.hint +msgctxt "tfmmcx.label11.hint" +msgid "-u (--unitinmm)" +msgstr "-u (--unitinmm)" + +#: tfmmcx.label12.caption +msgid "Run MCX on" +msgstr "Ejecutar MCX en" + +#: tfmmcx.label12.hint +msgid "-G (--gpu)" +msgstr "-G (--gpu)" + +#: tfmmcx.label13.caption +msgid "Seed (-E)" +msgstr "Semilla (-E)" + +#: tfmmcx.label13.hint +msgid "-E (--seed)" +msgstr "-E (--seed)" + +#: tfmmcx.label14.caption +msgid "Output type (-O)" +msgstr "Tipo de salida (-O)" + +#: tfmmcx.label14.hint +msgid "-O (--outputtype)" +msgstr "-O (--outputtype)" + +#: tfmmcx.label15.caption +msgid "Workload split" +msgstr "División de carga de trabajo" + +#: tfmmcx.label15.hint +msgid "-W (--workload)" +msgstr "-W (--workload)" + +#: tfmmcx.label16.caption +msgid "Debug flags" +msgstr "Banderas de depuración" + +#: tfmmcx.label16.hint +msgid "-D (--debuglevel)" +msgstr "-D (--debuglevel)" + +#: tfmmcx.label17.caption +msgid "Replay detector ID (-Y)" +msgstr "ID del detector de repetición (-Y)" + +#: tfmmcx.label17.hint +msgctxt "tfmmcx.label17.hint" +msgid "-Y (--replaydet)" +msgstr "-Y (--replaydet)" + +#: tfmmcx.label18.caption +msgid "Additional parameters" +msgstr "Parámetros adicionales" + +#: tfmmcx.label18.hint +msgctxt "tfmmcx.label18.hint" +msgid "-Y (--replaydet)" +msgstr "-Y (--replaydet)" + +#: tfmmcx.label19.caption +msgctxt "tfmmcx.label19.caption" +msgid "or" +msgstr "o" + +#: tfmmcx.label19.hint +msgctxt "tfmmcx.label19.hint" +msgid "-a (--array)" +msgstr "-a (--array)" + +#: tfmmcx.label2.caption +msgid "Thread block size (-T)" +msgstr "Tamaño de bloque de hilos (-T)" + +#: tfmmcx.label2.hint +msgid "-T (--blocksize)" +msgstr "-T (--blocksize)" + +#: tfmmcx.label3.caption +msgid "Total photon number (-n)" +msgstr "Número total de fotones (-n)" + +#: tfmmcx.label3.hint +msgid "-n (--photon)" +msgstr "-n (--photon)" + +#: tfmmcx.label4.caption +msgid "Session ID (-s)" +msgstr "ID de sesión (-s)" + +#: tfmmcx.label4.hint +msgctxt "tfmmcx.label4.hint" +msgid "-s (--sessionid)" +msgstr "-s (--sessionid)" + +#: tfmmcx.label5.caption +msgid "User Input>" +msgstr "Entrada de usuario>" + +#: tfmmcx.label6.caption +msgid "Array order (-a)" +msgstr "Orden de arreglo (-a)" + +#: tfmmcx.label6.hint +msgctxt "tfmmcx.label6.hint" +msgid "-a (--array)" +msgstr "-a (--array)" + +#: tfmmcx.label7.caption +msgid "Gate group size (-g)" +msgstr "Tamaño de grupo de ventana (-g)" + +#: tfmmcx.label7.hint +msgid "-g (--gategroup)" +msgstr "-g (--gategroup)" + +#: tfmmcx.label8.caption +msgid "Voxel size in mm (-u)" +msgstr "Tamaño de vóxel en mm (-u)" + +#: tfmmcx.label8.hint +msgctxt "tfmmcx.label8.hint" +msgid "-u (--unitinmm)" +msgstr "-u (--unitinmm)" + +#: tfmmcx.label9.caption +msgid "Max detected photons(-H)" +msgstr "Máx. fotones detectados (-H)" + +#: tfmmcx.label9.hint +msgid "-H (--maxdetphoton)" +msgstr "-H (--maxdetphoton)" + +#: tfmmcx.lbatomic.caption +msgid "Atomic operations" +msgstr "Operaciones atómicas" + +#: tfmmcx.lbatomic.hint +msgid "(--atomic)" +msgstr "(--atomic)" + +#: tfmmcx.lbbubble.caption +msgid "Cache radius from src (-R)" +msgstr "Radio de caché desde fuente (-R)" + +#: tfmmcx.lbbubble.hint +msgid "-r (--skipradius)" +msgstr "-r (--skipradius)" + +#: tfmmcx.lbrespin.caption +msgid "Repetition (-r)" +msgstr "Repetición (-r)" + +#: tfmmcx.lbrespin.hint +msgid "-r (--repeat)" +msgstr "-r (--repeat)" + +#: tfmmcx.lvjobs.columns[0].caption +msgctxt "tfmmcx.lvjobs.columns[0].caption" +msgid "Session" +msgstr "Sesión" + +#: tfmmcx.lvjobs.columns[10].caption +msgid "DoSave" +msgstr "DoSave" + +#: tfmmcx.lvjobs.columns[11].caption +msgid "DoNormalize" +msgstr "DoNormalize" + +#: tfmmcx.lvjobs.columns[12].caption +msgid "Autopilot" +msgstr "Autopilot" + +#: tfmmcx.lvjobs.columns[13].caption +msgid "SaveDetector" +msgstr "SaveDetector" + +#: tfmmcx.lvjobs.columns[14].caption +msgid "DetectedNum" +msgstr "DetectedNum" + +#: tfmmcx.lvjobs.columns[15].caption +msgid "GPUID" +msgstr "GPUID" + +#: tfmmcx.lvjobs.columns[16].caption +msgid "UnitInMM" +msgstr "UnitInMM" + +#: tfmmcx.lvjobs.columns[17].caption +msgid "DoSaveRef" +msgstr "DoSaveRef" + +#: tfmmcx.lvjobs.columns[18].caption +msgid "DoSaveSeed" +msgstr "DoSaveSeed" + +#: tfmmcx.lvjobs.columns[19].caption +msgid "DoSkipVoid" +msgstr "DoSkipVoid" + +#: tfmmcx.lvjobs.columns[1].caption +msgid "InputFile" +msgstr "InputFile" + +#: tfmmcx.lvjobs.columns[20].caption +msgid "DoSrcFrom0" +msgstr "DoSrcFrom0" + +#: tfmmcx.lvjobs.columns[21].caption +msgid "MediaCfg" +msgstr "MediaCfg" + +#: tfmmcx.lvjobs.columns[22].caption +msgid "DetectorCfg" +msgstr "DetectorCfg" + +#: tfmmcx.lvjobs.columns[23].caption +msgid "MCXConfig" +msgstr "MCXConfig" + +#: tfmmcx.lvjobs.columns[24].caption +msgid "Workload" +msgstr "Workload" + +#: tfmmcx.lvjobs.columns[25].caption +msgctxt "tfmmcx.lvjobs.columns[25].caption" +msgid "ShapeCfg" +msgstr "ShapeCfg" + +#: tfmmcx.lvjobs.columns[26].caption +msgid "Seed" +msgstr "Seed" + +#: tfmmcx.lvjobs.columns[27].caption +msgid "DoSaveMask" +msgstr "DoSaveMask" + +#: tfmmcx.lvjobs.columns[28].caption +msgctxt "tfmmcx.lvjobs.columns[28].caption" +msgid "DebugFlags" +msgstr "DebugFlags" + +#: tfmmcx.lvjobs.columns[29].caption +msgctxt "tfmmcx.lvjobs.columns[29].caption" +msgid "ReplayDet" +msgstr "ReplayDet" + +#: tfmmcx.lvjobs.columns[2].caption +msgid "ThreadNum" +msgstr "ThreadNum" + +#: tfmmcx.lvjobs.columns[30].caption +msgid "DoReplay" +msgstr "DoReplay" + +#: tfmmcx.lvjobs.columns[31].caption +msgid "MCProgram" +msgstr "MCProgram" + +#: tfmmcx.lvjobs.columns[32].caption +msgid "DoSpecular" +msgstr "DoSpecular" + +#: tfmmcx.lvjobs.columns[33].caption +msgid "UseAtomic" +msgstr "UseAtomic" + +#: tfmmcx.lvjobs.columns[34].caption +msgid "BasicOrder" +msgstr "BasicOrder" + +#: tfmmcx.lvjobs.columns[35].caption +msgid "DebugPhoton" +msgstr "DebugPhoton" + +#: tfmmcx.lvjobs.columns[36].caption +msgid "MoreParam" +msgstr "MoreParam" + +#: tfmmcx.lvjobs.columns[37].caption +msgid "RemoteCmd" +msgstr "RemoteCmd" + +#: tfmmcx.lvjobs.columns[38].caption +msgid "DoRemote" +msgstr "DoRemote" + +#: tfmmcx.lvjobs.columns[39].caption +msgid "DoSharedFS" +msgstr "DoSharedFS" + +#: tfmmcx.lvjobs.columns[3].caption +msgid "ThreadBlock" +msgstr "ThreadBlock" + +#: tfmmcx.lvjobs.columns[40].caption +msgid "OutputFormat" +msgstr "OutputFormat" + +#: tfmmcx.lvjobs.columns[41].caption +msgid "OutputType" +msgstr "OutputType" + +#: tfmmcx.lvjobs.columns[42].caption +msgid "Boundary" +msgstr "Boundary" + +#: tfmmcx.lvjobs.columns[43].caption +msgid "SaveDetFlag" +msgstr "SaveDetFlag" + +#: tfmmcx.lvjobs.columns[44].caption +msgid "Benchmark" +msgstr "Benchmark" + +#: tfmmcx.lvjobs.columns[4].caption +msgid "PhotonNum" +msgstr "PhotonNum" + +#: tfmmcx.lvjobs.columns[5].caption +msgid "RespinNum" +msgstr "RespinNum" + +#: tfmmcx.lvjobs.columns[6].caption +msgid "ArrayOrder" +msgstr "ArrayOrder" + +#: tfmmcx.lvjobs.columns[7].caption +msgctxt "tfmmcx.lvjobs.columns[7].caption" +msgid "BubbleSize" +msgstr "BubbleSize" + +#: tfmmcx.lvjobs.columns[8].caption +msgctxt "tfmmcx.lvjobs.columns[8].caption" +msgid "GateNum" +msgstr "GateNum" + +#: tfmmcx.lvjobs.columns[9].caption +msgid "DoReflect" +msgstr "DoReflect" + +#: tfmmcx.mcxdoabout.caption +msgid "About" +msgstr "Acerca de" + +#: tfmmcx.mcxdoabout.hint +msgid "About the author" +msgstr "Acerca del autor" + +#: tfmmcx.mcxdoadditem.caption +msgid "New" +msgstr "Nuevo" + +#: tfmmcx.mcxdoadditem.hint +msgid "Add a new task" +msgstr "Agregar nueva tarea" + +#: tfmmcx.mcxdoconfig.caption +msgid "Setting" +msgstr "Configuración" + +#: tfmmcx.mcxdoconfig.hint +msgid "Modify default paths" +msgstr "Modificar rutas por defecto" + +#: tfmmcx.mcxdocopy.caption +msgid "Copy session to clipboard" +msgstr "Copiar sesión al portapapeles" + +#: tfmmcx.mcxdodefault.caption +msgid "Default" +msgstr "Por defecto" + +#: tfmmcx.mcxdodefault.hint +msgid "Set default values" +msgstr "Establecer valores por defecto" + +#: tfmmcx.mcxdodeleteitem.caption +msgctxt "tfmmcx.mcxdodeleteitem.caption" +msgid "Delete" +msgstr "Eliminar" + +#: tfmmcx.mcxdodeleteitem.hint +msgid "Delete selected task" +msgstr "Eliminar tarea seleccionada" + +#: tfmmcx.mcxdodownloadmask.caption +msgid "Download volume labels (*_vol.nii)" +msgstr "Descargar etiquetas de volumen (*_vol.nii)" + +#: tfmmcx.mcxdodownloadmask.hint +msgctxt "tfmmcx.mcxdodownloadmask.hint" +msgid "_vol.nii" +msgstr "_vol.nii" + +#: tfmmcx.mcxdodownloadmc2.caption +msgid "Download fluence" +msgstr "Descargar fluencia" + +#: tfmmcx.mcxdodownloadmch.caption +msgid "Download detected photon data (*.mch)" +msgstr "Descargar datos de fotones detectados (*.mch)" + +#: tfmmcx.mcxdodownloadmch.hint +msgid ".mch" +msgstr ".mch" + +#: tfmmcx.mcxdoexit.caption +msgctxt "tfmmcx.mcxdoexit.caption" +msgid "Exit" +msgstr "Salir" + +#: tfmmcx.mcxdoexit.hint +msgid "Exit MCX Studio" +msgstr "Salir de MCX Studio" + +#: tfmmcx.mcxdohelp.caption +msgctxt "tfmmcx.mcxdohelp.caption" +msgid "Help" +msgstr "Ayuda" + +#: tfmmcx.mcxdohelp.hint +msgctxt "tfmmcx.mcxdohelp.hint" +msgid "Browse help information" +msgstr "Explorar información de ayuda" + +#: tfmmcx.mcxdohelpoptions.caption +msgid "Options" +msgstr "Opciones" + +#: tfmmcx.mcxdohelpoptions.hint +msgid "List command line options" +msgstr "Listar opciones de línea de comandos" + +#: tfmmcx.mcxdoopen.caption +msgid "Open" +msgstr "Abrir" + +#: tfmmcx.mcxdoopen.hint +msgid "Open a project or volume file" +msgstr "Abrir un proyecto o archivo de volumen" + +#: tfmmcx.mcxdopaste.caption +msgid "Paste session from clipboard" +msgstr "Pegar sesión del portapapeles" + +#: tfmmcx.mcxdoplotjnifti.caption +msgid "Plot fluence (jnii)" +msgstr "Graficar fluencia (jnii)" + +#: tfmmcx.mcxdoplotjnifti.hint +msgid ".jnii" +msgstr ".jnii" + +#: tfmmcx.mcxdoplotmc2.caption +msgid "Plot fluence (mc2)" +msgstr "Graficar fluencia (mc2)" + +#: tfmmcx.mcxdoplotmc2.hint +msgid ".mc2" +msgstr ".mc2" + +#: tfmmcx.mcxdoplotmesh.caption +msgid "Plot mesh" +msgstr "Graficar malla" + +#: tfmmcx.mcxdoplotnifty.caption +msgid "Plot fluence (nii)" +msgstr "Graficar fluencia (nii)" + +#: tfmmcx.mcxdoplotnifty.hint +msgid ".nii" +msgstr ".nii" + +#: tfmmcx.mcxdoplotvol.caption +msgid "Plot Volume" +msgstr "Graficar volumen" + +#: tfmmcx.mcxdoplotvol.hint +msgctxt "tfmmcx.mcxdoplotvol.hint" +msgid "_vol.nii" +msgstr "_vol.nii" + +#: tfmmcx.mcxdoquery.caption +msgid "GPU" +msgstr "GPU" + +#: tfmmcx.mcxdoquery.hint +msgid "List GPU Info" +msgstr "Listar información GPU" + +#: tfmmcx.mcxdorun.caption +msgctxt "tfmmcx.mcxdorun.caption" +msgid "Run" +msgstr "Ejecutar" + +#: tfmmcx.mcxdorun.hint +msgid "Run selected task" +msgstr "Ejecutar tarea seleccionada" + +#: tfmmcx.mcxdorunall.caption +msgid "Run All" +msgstr "Ejecutar todo" + +#: tfmmcx.mcxdorunall.hint +msgid "Run all tasks" +msgstr "Ejecutar todas las tareas" + +#: tfmmcx.mcxdosave.caption +msgid "Save" +msgstr "Guardar" + +#: tfmmcx.mcxdosave.hint +msgid "Save tasks to a project file" +msgstr "Guardar tareas a archivo de proyecto" + +#: tfmmcx.mcxdostop.caption +msgid "Stop" +msgstr "Detener" + +#: tfmmcx.mcxdostop.hint +msgid "Terminate current task" +msgstr "Terminar tarea actual" + +#: tfmmcx.mcxdotoggleview.caption +msgid "Toggle View" +msgstr "Alternar vista" + +#: tfmmcx.mcxdoverify.caption +msgid "Verify" +msgstr "Verificar" + +#: tfmmcx.mcxdoverify.hint +msgid "Verify parameters" +msgstr "Verificar parámetros" + +#: tfmmcx.mcxdoweb.caption +msgid "Web" +msgstr "Web" + +#: tfmmcx.mcxdoweb.hint +msgid "MCX homepage" +msgstr "Página principal de MCX" + +#: tfmmcx.mcxsetcurrent.caption +msgid "mcxSetCurrent" +msgstr "mcxSetCurrent" + +#: tfmmcx.menuitem1.caption +msgid "File" +msgstr "Archivo" + +#: tfmmcx.menuitem11.caption +msgid "Settings" +msgstr "Configuración" + +#: tfmmcx.menuitem2.caption +msgctxt "tfmmcx.menuitem2.caption" +msgid "Run" +msgstr "Ejecutar" + +#: tfmmcx.menuitem22.caption +msgid "Open output folder" +msgstr "Abrir carpeta de salida" + +#: tfmmcx.menuitem24.caption +msgid "Plot volume (_vol.nii)" +msgstr "Graficar volumen (_vol.nii)" + +#: tfmmcx.menuitem28.caption +msgid "Download fluence (mc2/nii/hdr/img)" +msgstr "Descargar fluencia (mc2/nii/hdr/img)" + +#: tfmmcx.menuitem3.caption +msgid "Tools" +msgstr "Herramientas" + +#: tfmmcx.menuitem31.caption +msgid "Download detected photon data (mch)" +msgstr "Descargar datos de fotones detectados (mch)" + +#: tfmmcx.menuitem32.caption +msgid "Download volume mask (_vol.nii)" +msgstr "Descargar máscara de volumen (_vol.nii)" + +#: tfmmcx.menuitem35.caption +msgid "MCX Documentation" +msgstr "Documentación MCX" + +#: tfmmcx.menuitem35.hint +msgid "https://mcx.space/wiki/?Learn#mcx" +msgstr "https://mcx.space/wiki/?Learn#mcx" + +#: tfmmcx.menuitem36.caption +msgid "MMC Documentation" +msgstr "Documentación MMC" + +#: tfmmcx.menuitem36.hint +msgid "https://mcx.space/wiki/?Learn#mmc" +msgstr "https://mcx.space/wiki/?Learn#mmc" + +#: tfmmcx.menuitem37.caption +msgid "MCX-CL Documentation" +msgstr "Documentación MCX-CL" + +#: tfmmcx.menuitem37.hint +msgid "https://mcx.space/wiki/?Learn#mcxcl" +msgstr "https://mcx.space/wiki/?Learn#mcxcl" + +#: tfmmcx.menuitem39.caption +msgid "MCX/MCXCL User Forum (mcx-users)" +msgstr "Foro de usuarios MCX/MCXCL (mcx-users)" + +#: tfmmcx.menuitem39.hint +msgid "https://groups.google.com/forum/?hl=en#!forum/mcx-users" +msgstr "https://groups.google.com/forum/?hl=en#!forum/mcx-users" + +#: tfmmcx.menuitem4.caption +msgctxt "tfmmcx.menuitem4.caption" +msgid "Help" +msgstr "Ayuda" + +#: tfmmcx.menuitem40.caption +msgid "MMC User Forum (mmc-users)" +msgstr "Foro de usuarios MMC (mmc-users)" + +#: tfmmcx.menuitem40.hint +msgid "https://groups.google.com/forum/?hl=en#!forum/mmc-users" +msgstr "https://groups.google.com/forum/?hl=en#!forum/mmc-users" + +#: tfmmcx.menuitem41.caption +msgid "Iso2Mesh User Forum (iso2mesh-users)" +msgstr "Foro de usuarios Iso2Mesh (iso2mesh-users)" + +#: tfmmcx.menuitem41.hint +msgid "https://groups.google.com/forum/?hl=en#!forum/iso2mesh-users" +msgstr "https://groups.google.com/forum/?hl=en#!forum/iso2mesh-users" + +#: tfmmcx.menuitem43.caption +msgid "Download Nightly-Build" +msgstr "Descargar compilación nocturna" + +#: tfmmcx.menuitem43.hint +msgid "https://mcx.space/nightly/" +msgstr "https://mcx.space/nightly/" + +#: tfmmcx.menuitem45.caption +msgid "MCX Github" +msgstr "MCX Github" + +#: tfmmcx.menuitem45.hint +msgid "https://github.com/fangq/mcx" +msgstr "https://github.com/fangq/mcx" + +#: tfmmcx.menuitem46.caption +msgid "MMC Github" +msgstr "MMC Github" + +#: tfmmcx.menuitem46.hint +msgid "https://github.com/fangq/mmc" +msgstr "https://github.com/fangq/mmc" + +#: tfmmcx.menuitem47.caption +msgid "MCX-CL Github" +msgstr "MCX-CL Github" + +#: tfmmcx.menuitem47.hint +msgid "https://github.com/fangq/mcxcl" +msgstr "https://github.com/fangq/mcxcl" + +#: tfmmcx.menuitem49.caption +msgid "Report MCX Issues" +msgstr "Reportar problemas MCX" + +#: tfmmcx.menuitem49.hint +msgid "https://github.com/fangq/mcx/issues" +msgstr "https://github.com/fangq/mcx/issues" + +#: tfmmcx.menuitem50.caption +msgid "Report MMC Issues" +msgstr "Reportar problemas MMC" + +#: tfmmcx.menuitem50.hint +msgid "https://github.com/fangq/mmc/issues" +msgstr "https://github.com/fangq/mmc/issues" + +#: tfmmcx.menuitem51.caption +msgid "Report MCX-CL Issues" +msgstr "Reportar problemas MCX-CL" + +#: tfmmcx.menuitem51.hint +msgid "https://github.com/fangq/mcxcl/issues" +msgstr "https://github.com/fangq/mcxcl/issues" + +#: tfmmcx.menuitem53.caption +msgid "MCX GPU Speed Benchmark Database" +msgstr "Base de datos de benchmarks de velocidad GPU MCX" + +#: tfmmcx.menuitem53.hint +msgid "https://mcx.space/gpubench/" +msgstr "https://mcx.space/gpubench/" + +#: tfmmcx.menuitem55.caption +msgid "Refereces" +msgstr "Referencias" + +#: tfmmcx.menuitem56.caption +msgid "[Fang2009] Original MCX Paper" +msgstr "[Fang2009] Artículo original MCX" + +#: tfmmcx.menuitem56.hint +msgid "http://www.osapublishing.org/oe/abstract.cfm?uri=oe-17-22-20178" +msgstr "http://www.osapublishing.org/oe/abstract.cfm?uri=oe-17-22-20178" + +#: tfmmcx.menuitem57.caption +msgid "[Fang2010] Original MMC Paper" +msgstr "[Fang2010] Artículo original MMC" + +#: tfmmcx.menuitem57.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-1-1-165" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-1-1-165" + +#: tfmmcx.menuitem58.caption +msgid "[Yu2018] Original MCX-CL Paper" +msgstr "[Yu2018] Artículo original MCX-CL" + +#: tfmmcx.menuitem58.hint +msgid "https://www.spiedigitallibrary.org/journals/journal-of-biomedical-optics/volume-23/issue-01/010504/Scalable-and-massively-parallel-Monte-Carlo-photon-transport-simulations-for/10.1117/1.JBO.23.1.010504.full?SSO=1#ArticleLink" +msgstr "https://www.spiedigitallibrary.org/journals/journal-of-biomedical-optics/volume-23/issue-01/010504/Scalable-and-massively-parallel-Monte-Carlo-photon-transport-simulations-for/10.1117/1.JBO.23.1.010504.full?SSO=1#ArticleLink" + +#: tfmmcx.menuitem59.caption +msgid "[Fang2011] MMC ray-tracing comparison" +msgstr "[Fang2011] Comparación de trazado de rayos MMC" + +#: tfmmcx.menuitem59.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-2-5-1258" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-2-5-1258" + +#: tfmmcx.menuitem60.caption +msgid "[Fang2012] SIMD MMC" +msgstr "[Fang2012] SIMD MMC" + +#: tfmmcx.menuitem60.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-3-12-3223" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-3-12-3223" + +#: tfmmcx.menuitem61.caption +msgid "[Yao2016] Widefield MMC" +msgstr "[Yao2016] MMC de campo amplio" + +#: tfmmcx.menuitem61.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-7-1-171" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-7-1-171" + +#: tfmmcx.menuitem62.caption +msgid "[Yao2018] Jacobians with photon replay" +msgstr "[Yao2018] Jacobianos con repetición de fotones" + +#: tfmmcx.menuitem62.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-9-10-4588" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-9-10-4588" + +#: tfmmcx.menuitem63.caption +msgid "[Yan2019] Dual-grid MMC" +msgstr "[Yan2019] MMC de malla dual" + +#: tfmmcx.menuitem63.hint +msgid "https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fdx.doi.org%2F10.1117%2F1.JBO.24.2.020503&data=02%7C01%7Cq.fang%40northeastern.edu%7Cbb8daa56735543068b9c08d697592492%7Ca8eec281aaa34daeac9b9a398b9215e7%7C0%7C0%7C636862806460866013&sdata=2dWyN3eVPwwymydjXEWIHBfVZI43Fcl5zuZ8wiaJ10k%3D&reserved=0" +msgstr "https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fdx.doi.org%2F10.1117%2F1.JBO.24.2.020503&data=02%7C01%7Cq.fang%40northeastern.edu%7Cbb8daa56735543068b9c08d697592492%7Ca8eec281aaa34daeac9b9a398b9215e7%7C0%7C0%7C636862806460866013&sdata=2dWyN3eVPwwymydjXEWIHBfVZI43Fcl5zuZ8wiaJ10k%3D&reserved=0" + +#: tfmmcx.menuitem64.caption +msgid "MCX Main Web" +msgstr "Sitio web principal MCX" + +#: tfmmcx.menuitem66.caption +msgid "Table of all input flags" +msgstr "Tabla de todas las banderas de entrada" + +#: tfmmcx.menuitem66.hint +msgid "http://bit.ly/2K0rG4R " +msgstr "http://bit.ly/2K0rG4R " + +#: tfmmcx.menuitem69.caption +msgid "[Fang2019] GPU MMC" +msgstr "[Fang2019] GPU MMC" + +#: tfmmcx.menuitem69.hint +msgid "http://dx.doi.org/10.1117/1.JBO.24.11.115002" +msgstr "http://dx.doi.org/10.1117/1.JBO.24.11.115002" + +#: tfmmcx.menuitem70.caption +msgid "[Brain2Mesh2020] Brain2Mesh brain meshing toolbox" +msgstr "[Brain2Mesh2020] Caja de herramientas de mallado cerebral Brain2Mesh" + +#: tfmmcx.menuitem70.hint +msgid "https://doi.org/10.1117/1.NPh.7.1.015008" +msgstr "https://doi.org/10.1117/1.NPh.7.1.015008" + +#: tfmmcx.menuitem71.caption +msgid "[Yuan2020] PBM over lifespan" +msgstr "[Yuan2020] PBM sobre tiempo de vida" + +#: tfmmcx.menuitem71.hint +msgid "https://doi.org/10.1117/1.NPh.7.1.015009" +msgstr "https://doi.org/10.1117/1.NPh.7.1.015009" + +#: tfmmcx.menuitem72.caption +msgid "[Yuan2021] Implicit MMC (iMMC)" +msgstr "[Yuan2021] MMC implícito (iMMC)" + +#: tfmmcx.menuitem72.hint +msgid "https://www.osapublishing.org/boe/fulltext.cfm?uri=boe-12-1-147" +msgstr "https://www.osapublishing.org/boe/fulltext.cfm?uri=boe-12-1-147" + +#: tfmmcx.menuitem73.caption +msgid "[Yan2020] SVMC hybrid method" +msgstr "[Yan2020] Método híbrido SVMC" + +#: tfmmcx.menuitem73.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-11-11-6262" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-11-11-6262" + +#: tfmmcx.menuitem76.caption +msgid "Open Volume Viewer" +msgstr "Abrir visor de volumen" + +#: tfmmcx.menuitem9.caption +msgctxt "tfmmcx.menuitem9.caption" +msgid "Volume Designer" +msgstr "Diseñador de volumen" + +#: tfmmcx.miclearlog.caption +msgid "Clear Log" +msgstr "Limpiar registro" + +#: tfmmcx.micopy.caption +msgid "Copy selected" +msgstr "Copiar seleccionado" + +#: tfmmcx.miexportjson.caption +msgid "Export self-contained JSON input file" +msgstr "Exportar archivo de entrada JSON autónomo" + +#: tfmmcx.miusematlab.caption +msgid "Print MATLAB plotting commands only" +msgstr "Imprimir solo comandos de graficación MATLAB" + +#: tfmmcx.openhistoryfile.title +msgctxt "tfmmcx.openhistoryfile.title" +msgid "Open Photon History File (*.mch)" +msgstr "Abrir archivo de historial de fotones (*.mch)" + +#: tfmmcx.openproject.title +msgid "Open existing project" +msgstr "Abrir proyecto existente" + +#: tfmmcx.openvolume.title +msgctxt "tfmmcx.openvolume.title" +msgid "Open Photon History File (*.mch)" +msgstr "Abrir archivo de historial de fotones (*.mch)" + +#: tfmmcx.rbusebench.caption +msgid "Built-in" +msgstr "Integrado" + +#: tfmmcx.rbusedesigner.caption +msgid "User-defined »" +msgstr "Definido por usuario »" + +#: tfmmcx.rbusefile.caption +msgid "Use Input File (-f)" +msgstr "Usar archivo de entrada (-f)" + +#: tfmmcx.saveproject.title +msgid "Save project as" +msgstr "Guardar proyecto como" + +#: tfmmcx.sbinfo.panels[0].text +msgid "Status: idle" +msgstr "Estado: inactivo" + +#: tfmmcx.sgconfig.columns[0].title.caption +msgctxt "tfmmcx.sgconfig.columns[0].title.caption" +msgid "Value" +msgstr "Valor" + +#: tfmmcx.sgconfig.hint +msgid "MCXConfig \n\nThis defines the remaining key parameters used in an MCX/MMC\nsimulation.\n" +msgstr "MCXConfig\n\nEsto define los parámetros clave restantes usados en una simulación MCX/MMC.\n" + +#: tfmmcx.sgdet.hint +msgid "DetectorCfg \n\nThis table defines all detectors in the domain. \n\nPlease note that currently MCX/MMC only supports spherical detectors,\ndefined by the [x,y,z] center position and radius (radius).\n\nPlease also note that photon detection only happens before a photon is\nterminated, i.e. when it escapes the exterior bounding box or moving from\na non-zero voxel to a zero voxel. Therefore, a detector's aperature is the\nactual bounding box surface or the surface of the non-zero voxels truncated\nby a sphere centered at [x,y,z] with raidus r.\n\nDetector position is sensitive to the \"Origin from [0 0 0] -z\" flag.\n" +msgstr "DetectorCfg\n\nEsta tabla define todos los detectores en el dominio.\n\nTenga en cuenta que actualmente MCX/MMC solo soporta detectores esféricos, definidos por la posición central [x,y,z] y el radio.\n\nTambién note que la detección de fotones solo ocurre antes de que un fotón sea terminado, es decir, cuando escapa de la caja delimitadora exterior o se mueve de un vóxel no cero a un vóxel cero. Por lo tanto, la apertura de un detector es la superficie real de la caja delimitadora o la superficie de los vóxeles no cero truncada por una esfera centrada en [x,y,z] con radio r.\n\nLa posición del detector es sensible a la bandera \"Origen desde [0 0 0] -z\".\n" + +#: tfmmcx.sgmedia.columns[0].title.caption +msgid "μa (1/mm)" +msgstr "μa (1/mm)" + +#: tfmmcx.sgmedia.columns[1].title.caption +msgid "μs (1/mm)" +msgstr "μs (1/mm)" + +#: tfmmcx.sgmedia.columns[2].title.caption +msgid "g (anisotropy)" +msgstr "g (anisotropía)" + +#: tfmmcx.sgmedia.columns[3].title.caption +msgid "n (reflective index)" +msgstr "n (índice de refracción)" + +#: tfmmcx.sgmedia.hint +msgid "MediaCfg \n\nThis table defines the optical properties for all needed tissue labels.\n\nThe first row (label 0) is reserved for the background medium - which includes\nthe space outside the bounding box of the volume, as well as any voxels with\na zero-value.\n\nOne can select a row and copy/paste to other rows.\n\nIf more labels are needed, move to the bottom of the table, and press \"down\"\narrow key to create a new row below.\n" +msgstr "MediaCfg\n\nEsta tabla define las propiedades ópticas para todas las etiquetas de tejido necesarias.\n\nLa primera fila (etiqueta 0) está reservada para el medio de fondo - que incluye el espacio fuera de la caja delimitadora del volumen, así como cualquier vóxel con valor cero.\n\nSe puede seleccionar una fila y copiar/pegar a otras filas.\n\nSi se necesitan más etiquetas, muévase al final de la tabla, y presione la tecla de flecha \"abajo\" para crear una nueva fila debajo.\n" + +#: tfmmcx.shapeaddbox.caption +msgid "Box" +msgstr "Caja" + +#: tfmmcx.shapeaddbox.hint +msgid "Add a 3D box (using the center of the voxels - i.e. add 0.5 in all directions)" +msgstr "Agregar caja 3D (usando el centro de los vóxeles - es decir, agregar 0.5 en todas las direcciones)" + +#: tfmmcx.shapeaddcylinder.caption +msgid "Cylinder" +msgstr "Cilindro" + +#: tfmmcx.shapeaddcylinder.hint +msgid "Add a cylinder" +msgstr "Agregar cilindro" + +#: tfmmcx.shapeaddgrid.caption +msgid "Grid" +msgstr "Malla" + +#: tfmmcx.shapeaddgrid.hint +msgid "Define a uniform grid as the simulation space" +msgstr "Definir malla uniforme como espacio de simulación" + +#: tfmmcx.shapeaddname.caption +msgid "Name" +msgstr "Nombre" + +#: tfmmcx.shapeaddname.hint +msgid "Define a name for the domain" +msgstr "Definir nombre para el dominio" + +#: tfmmcx.shapeaddorigin.caption +msgid "Origin" +msgstr "Origen" + +#: tfmmcx.shapeaddorigin.hint +msgid "Define the origin for subsequent objects" +msgstr "Definir origen para objetos subsecuentes" + +#: tfmmcx.shapeaddsphere.caption +msgid "Sphere" +msgstr "Esfera" + +#: tfmmcx.shapeaddsphere.hint +msgid "Add a 3D sphere" +msgstr "Agregar esfera 3D" + +#: tfmmcx.shapeaddsubgrid.caption +msgid "Subgrid" +msgstr "Submalla" + +#: tfmmcx.shapeaddsubgrid.hint +msgid "Add a 3D box (using the lower-corner of the voxel)" +msgstr "Agregar caja 3D (usando la esquina inferior del vóxel)" + +#: tfmmcx.shapeaddupperspace.caption +msgid "Upper" +msgstr "Superior" + +#: tfmmcx.shapeaddupperspace.hint +msgid "Add an upper-space defined by a linear inequality" +msgstr "Agregar espacio superior definido por desigualdad lineal" + +#: tfmmcx.shapeaddxlayers.caption +msgid "XLayers" +msgstr "CapasX" + +#: tfmmcx.shapeaddxlayers.hint +msgid "Add a layered structure along x-axis" +msgstr "Agregar estructura en capas a lo largo del eje x" + +#: tfmmcx.shapeaddxslabs.caption +msgid "XSlabs" +msgstr "LosasX" + +#: tfmmcx.shapeaddxslabs.hint +msgid "Add a slab along x-axis" +msgstr "Agregar losa a lo largo del eje x" + +#: tfmmcx.shapeaddylayers.caption +msgid "YLayers" +msgstr "CapasY" + +#: tfmmcx.shapeaddylayers.hint +msgid "Add a layered structure along y-axis" +msgstr "Agregar estructura en capas a lo largo del eje y" + +#: tfmmcx.shapeaddyslabs.caption +msgid "YSlabs" +msgstr "LosasY" + +#: tfmmcx.shapeaddyslabs.hint +msgid "Add a slab along y-axis" +msgstr "Agregar losa a lo largo del eje y" + +#: tfmmcx.shapeaddzlayers.caption +msgid "ZLayers" +msgstr "CapasZ" + +#: tfmmcx.shapeaddzlayers.hint +msgid "Add a layered structure along z-axis" +msgstr "Agregar estructura en capas a lo largo del eje z" + +#: tfmmcx.shapeaddzslabs.caption +msgid "ZSlabs" +msgstr "LosasZ" + +#: tfmmcx.shapeaddzslabs.hint +msgid "Add a slab along z-axis" +msgstr "Agregar losa a lo largo del eje z" + +#: tfmmcx.shapedelete.caption +msgctxt "tfmmcx.shapedelete.caption" +msgid "Delete" +msgstr "Eliminar" + +#: tfmmcx.shapedelete.hint +msgid "Delete selected object" +msgstr "Eliminar objeto seleccionado" + +#: tfmmcx.shapeedit.caption +msgid "Edit" +msgstr "Editar" + +#: tfmmcx.shapepreview.caption +msgctxt "tfmmcx.shapepreview.caption" +msgid "Preview" +msgstr "Vista previa" + +#: tfmmcx.shapepreview.hint +msgctxt "tfmmcx.shapepreview.hint" +msgid "Preview" +msgstr "Vista previa" + +#: tfmmcx.shapeprint.caption +msgid "Print" +msgstr "Imprimir" + +#: tfmmcx.shapeprint.hint +msgid "Print selected object" +msgstr "Imprimir objeto seleccionado" + +#: tfmmcx.shapereset.caption +msgctxt "tfmmcx.shapereset.caption" +msgid "Reset" +msgstr "Restablecer" + +#: tfmmcx.shapereset.hint +msgid "Reset to a 60x60x60 homogeneous cubic domain" +msgstr "Restablecer a dominio cúbico homogéneo de 60x60x60" + +#: tfmmcx.statictext1.caption +msgid "Additional Settings" +msgstr "Configuración adicional" + +#: tfmmcx.statictext2.caption +msgid "Media Settings" +msgstr "Configuración de medios" + +#: tfmmcx.statictext3.caption +msgid "Detector Settings (in voxel unit)" +msgstr "Configuración de detector (en unidad de vóxel)" + +#: tfmmcx.tabinputdata.caption +msgid "Simulation Designer" +msgstr "Diseñador de simulación" + +#: tfmmcx.tabvolumedesigner.caption +msgctxt "tfmmcx.tabvolumedesigner.caption" +msgid "Volume Designer" +msgstr "Diseñador de volumen" + +#: tfmmcx.tbtverify.caption +msgid "Validate" +msgstr "Validar" + +#: tfmmcx.toolbar1.caption +msgid "MCX Ribon" +msgstr "Cinta MCX" + +#: tfmmcx.toolbar2.caption +msgid "ToolBar2" +msgstr "ToolBar2" + +#: tfmmcx.toolbar3.caption +msgid "ToolBar3" +msgstr "ToolBar3" + +#: tfmmcx.toolbutton11.caption +msgid "Plot ▾" +msgstr "Graficar ▾" + +#: tfmmcx.toolbutton11.hint +msgid "Plot MCX output data" +msgstr "Graficar datos de salida MCX" + +#: tfmmcx.toolbutton12.caption +msgid "ToolButton12" +msgstr "ToolButton12" + +#: tfmmcx.toolbutton13.caption +msgid "ToolButton13" +msgstr "ToolButton13" + +#: tfmmcx.toolbutton17.caption +msgid "ToolButton17" +msgstr "ToolButton17" + +#: tfmmcx.toolbutton35.caption +msgid "ToolButton35" +msgstr "ToolButton35" + +#: tfmmcx.toolbutton39.hint +msgid "Reset volume and define a different dimension" +msgstr "Restablecer volumen y definir dimensión diferente" + +#: tfmmcx.toolbutton5.caption +msgid "ToolButton5" +msgstr "ToolButton5" + +#: tfmmcx.toolbutton7.caption +msgctxt "tfmmcx.toolbutton7.caption" +msgid "Reset" +msgstr "Restablecer" + +#: tfmmcx.toolbutton8.caption +msgctxt "tfmmcx.toolbutton8.caption" +msgid "ToolButton8" +msgstr "ToolButton8" + +#: tfmmcx.toolbutton9.caption +msgid "Help ▾" +msgstr "Ayuda ▾" + +#: tfmmcx.toolbutton9.hint +msgctxt "tfmmcx.toolbutton9.hint" +msgid "Browse help information" +msgstr "Explorar información de ayuda" + +#: tfmmcx.tvshapes.hint +msgctxt "tfmmcx.tvshapes.hint" +msgid "ShapeCfg" +msgstr "ShapeCfg" + +#: tfmmcx.vlbc.hint +msgid "Boundary \n\nUsing this box to set the boundary condition for each one of the 6\nfacets on the bounding box. A total of 4 boundary conditions are\nsupported:\n\n1. total absorbing BC: photon hiting the boundary are terminated\n2. Fresnel reflection BC: perform Fresnel reflection/transmission\n3. mirror/total reflection BC: photon is 100% reflected (can run a long time)\n4. cylic BC: a photon exiting from a facet will re-enter from the opposite one\n" +msgstr "Boundary\n\nUsar esta caja para establecer la condición de límite para cada una de las 6 facetas en la caja delimitadora. Se soportan un total de 4 condiciones de límite:\n\n1. BC de absorción total: los fotones que golpean el límite son terminados\n2. BC de reflexión de Fresnel: realizar reflexión/transmisión de Fresnel\n3. BC de reflexión de espejo/total: el fotón es 100% reflejado (puede ejecutarse por mucho tiempo)\n4. BC cíclico: un fotón que sale de una faceta volverá a entrar desde la opuesta\n" + +#: tfmnewsession.btcancel.caption +msgctxt "tfmnewsession.btcancel.caption" +msgid "Cancel" +msgstr "Cancelar" + +#: tfmnewsession.btok.caption +msgctxt "tfmnewsession.btok.caption" +msgid "OK" +msgstr "Aceptar" + +#: tfmnewsession.caption +msgid "Create A New Simulation" +msgstr "Crear nueva simulación" + +#: tfmnewsession.edsession.hint +msgctxt "tfmnewsession.edsession.hint" +msgid "Session" +msgstr "Session" + +#: tfmnewsession.grprogram.caption +msgctxt "tfmnewsession.grprogram.caption" +msgid "Run Monte Carlo simulation with" +msgstr "Ejecutar simulación Monte Carlo con" + +#: tfmnewsession.grprogram.hint +msgid "Program" +msgstr "Programa" + +#: tfmnewsession.label4.caption +msgid "Please type in a unique session name" +msgstr "Por favor escriba un nombre de sesión único" + +#: tfmnewsession.label4.hint +msgctxt "tfmnewsession.label4.hint" +msgid "-s (--sessionid)" +msgstr "-s (--sessionid)" + +#: tfmshapeeditor.btcancel.caption +msgctxt "tfmshapeeditor.btcancel.caption" +msgid "Cancel" +msgstr "Cancelar" + +#: tfmshapeeditor.btok.caption +msgctxt "tfmshapeeditor.btok.caption" +msgid "OK" +msgstr "Aceptar" + +#: tfmshapeeditor.caption +msgid "Edit Shapes" +msgstr "Editar formas" + +#: tfmsource.btcancel.caption +msgctxt "tfmsource.btcancel.caption" +msgid "Cancel" +msgstr "Cancelar" + +#: tfmsource.btok.caption +msgctxt "tfmsource.btok.caption" +msgid "OK" +msgstr "Aceptar" + +#: tfmsource.caption +msgid "Light Source Settings" +msgstr "Configuración de fuente de luz" + +#: tfmsource.edsource.text +msgid "pencil" +msgstr "lápiz" + +#: tfmsource.label4.caption +msgid "Please select a light source type:" +msgstr "Por favor seleccione un tipo de fuente de luz:" + +#: tfmsource.label5.caption +msgid "Please define source parameters:" +msgstr "Por favor defina parámetros de fuente:" + +#: tfmstop.caption +msgid "Running ..." +msgstr "Ejecutándose..." + +#: tfmstop.toolbar1.caption +msgid "Running" +msgstr "Ejecutándose" + +#: tfmstop.toolbutton3.caption +msgid "Hide" +msgstr "Ocultar" + +#: tfmstop.toolbutton3.hint +msgid "Hide this window" +msgstr "Ocultar esta ventana" + +#: tfmstop.toolbutton8.caption +msgctxt "tfmstop.toolbutton8.caption" +msgid "ToolButton8" +msgstr "ToolButton8" + +#: tfmviewer.btbackground.hint +msgctxt "tfmviewer.btbackground.hint" +msgid "Change Background Color" +msgstr "Cambiar color de fondo" + +#: tfmviewer.btopaque.caption +msgid "btOpaque" +msgstr "btOpaque" + +#: tfmviewer.btopaque.hint +msgid "Show Opaque Hull" +msgstr "Mostrar casco opaco" + +#: tfmviewer.caption +msgid "MCX Studio Volume Renderer" +msgstr "Renderizador de volumen MCX Studio" + +#: tfmviewer.grdir.caption +msgid "Slicing direction" +msgstr "Dirección de corte" + +#: tfmviewer.label1.caption +msgid "Rendering quality" +msgstr "Calidad de renderizado" + +#: tfmviewer.label2.caption +msgid "Cutting plane position:" +msgstr "Posición del plano de corte:" + +#: tfmviewer.label3.caption +msgid "Invisible threshold" +msgstr "Umbral invisible" + +#: tfmviewer.label4.caption +msgid "Color level" +msgstr "Nivel de color" + +#: tfmviewer.mcxplotexit.caption +msgctxt "tfmviewer.mcxplotexit.caption" +msgid "Exit" +msgstr "Salir" + +#: tfmviewer.mcxplotexit.hint +msgctxt "tfmviewer.mcxplotexit.hint" +msgid "Exit" +msgstr "Salir" + +#: tfmviewer.mcxplotopen.caption +msgid "Open File" +msgstr "Abrir archivo" + +#: tfmviewer.mcxplotopen.hint +msgid "Open Data File" +msgstr "Abrir archivo de datos" + +#: tfmviewer.mcxplotrefresh.caption +msgctxt "tfmviewer.mcxplotrefresh.caption" +msgid "Refresh" +msgstr "Actualizar" + +#: tfmviewer.mcxplotrefresh.hint +msgctxt "tfmviewer.mcxplotrefresh.hint" +msgid "Refresh" +msgstr "Actualizar" + +#: tfmviewer.mcxplotresetcamera.caption +msgctxt "tfmviewer.mcxplotresetcamera.caption" +msgid "Reset" +msgstr "Restablecer" + +#: tfmviewer.mcxplotsavescreen.caption +msgctxt "tfmviewer.mcxplotsavescreen.caption" +msgid "Save Screen" +msgstr "Guardar pantalla" + +#: tfmviewer.mcxplotsavescreen.hint +msgid "Save screenshot" +msgstr "Guardar captura de pantalla" + +#: tfmviewer.mcxplotshowbbx.caption +msgctxt "tfmviewer.mcxplotshowbbx.caption" +msgid "Show Bounding Box" +msgstr "Mostrar caja delimitadora" + +#: tfmviewer.mcxplotshowbbx.hint +msgctxt "tfmviewer.mcxplotshowbbx.hint" +msgid "Show Bounding Box" +msgstr "Mostrar caja delimitadora" + +#: tfmviewer.mcxplotusecolor.caption +msgid "Pseudocolor" +msgstr "Pseudocolor" + +#: tfmviewer.mcxplotusecolor.hint +msgid "Use Pseudocolor" +msgstr "Usar pseudocolor" + +#: tfmviewer.toolbar1.caption +msgctxt "tfmviewer.toolbar1.caption" +msgid "ToolBar1" +msgstr "ToolBar1" + +#: tfmviewer.toolbutton10.caption +msgid "ToolButton10" +msgstr "ToolButton10" + +#: tfmviewer.toolbutton4.hint +msgid "Reset 3D View" +msgstr "Restablecer vista 3D" + +#: tfmviewer.toolbutton9.caption +msgctxt "tfmviewer.toolbutton9.caption" +msgid "ToolButton9" +msgstr "ToolButton9" diff --git a/mcxstudio/i18n/mcxstudio.fr.po b/mcxstudio/i18n/mcxstudio.fr.po new file mode 100644 index 00000000..58e45337 --- /dev/null +++ b/mcxstudio/i18n/mcxstudio.fr.po @@ -0,0 +1,1993 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: ge_DE\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 3.0.1\n" + +#: tfmabout.button1.caption +msgctxt "tfmabout.button1.caption" +msgid "OK" +msgstr "OK" + +#: tfmabout.caption +msgid "About Monte Carlo eXtreme Studio" +msgstr "À propos de Monte Carlo eXtreme Studio" + +#: tfmabout.image3.hint +msgctxt "tfmabout.image3.hint" +msgid "About MCX" +msgstr "À propos de MCX" + +#: tfmconfig.btcancel.caption +msgctxt "tfmconfig.btcancel.caption" +msgid "Cancel" +msgstr "Annuler" + +#: tfmconfig.btok.caption +msgctxt "tfmconfig.btok.caption" +msgid "OK" +msgstr "OK" + +#: tfmconfig.caption +msgid "MCX Studio Config" +msgstr "Configuration MCX Studio" + +#: tfmconfig.ckusemanualpath.caption +msgid "Use Manual Paths" +msgstr "Utiliser les chemins manuels" + +#: tfmconfig.edlocalpath.columns[0].title.caption +msgctxt "tfmconfig.edlocalpath.columns[0].title.caption" +msgid "Value" +msgstr "Valeur" + +#: tfmconfig.edscppath.hint +msgctxt "tfmconfig.edscppath.hint" +msgid "Local SCP Executable Path" +msgstr "Chemin de l'exécutable SCP local" + +#: tfmconfig.edsshpath.hint +msgid "Local SSH Path" +msgstr "Chemin SSH local" + +#: tfmconfig.edworkpath.text +msgid "%MCXSTUDIO%/MCXOutput" +msgstr "%MCXSTUDIO%/MCXOutput" + +#: tfmconfig.groupbox2.caption +msgid "MCXStudio Local Output Root Directory" +msgstr "Répertoire racine de sortie local MCX Studio" + +#: tfmconfig.groupbox3.caption +msgid "Remote MCX/MMC/MCXCl Executable Search Paths" +msgstr "Chemins de recherche des exécutables MCX/MMC/MCXCl distants" + +#: tfmconfig.groupbox4.caption +msgid "Local MCX/MMC/MCXCl Executable Search Paths" +msgstr "Chemins de recherche des exécutables MCX/MMC/MCXCl locaux" + +#: tfmconfig.groupbox5.caption +msgid "Local SSH Executable Path" +msgstr "Chemin de l'exécutable SSH local" + +#: tfmconfig.groupbox6.caption +msgctxt "tfmconfig.groupbox6.caption" +msgid "Local SCP Executable Path" +msgstr "Chemin de l'exécutable SCP local" + +#: tfmconfig.groupbox7.caption +msgid "Remote MCX/MMC/MCXCl Output Directory" +msgstr "Répertoire de sortie MCX/MMC/MCXCl distant" + +#: tfmconfig.groupbox8.caption +msgid "Remote GPU Server" +msgstr "Serveur GPU distant" + +#: tfmconfig.label1.caption +msgid "Hostname or IP" +msgstr "Nom d'hôte ou IP" + +#: tfmconfig.label2.caption +msgid "Port" +msgstr "Port" + +#: tfmconfig.label3.caption +msgid "User name" +msgstr "Nom d'utilisateur" + +#: tfmdatafile.btcancel.caption +msgctxt "tfmdatafile.btcancel.caption" +msgid "Cancel" +msgstr "Annuler" + +#: tfmdatafile.btok.caption +msgctxt "tfmdatafile.btok.caption" +msgid "OK" +msgstr "OK" + +#: tfmdatafile.caption +msgid " Data File Properties" +msgstr "Propriétés du fichier de données" + +#: tfmdatafile.eddataformat.text +msgid "Float (32bit)" +msgstr "Flottant (32 bits)" + +#: tfmdatafile.label10.caption +msgid "Data File" +msgstr "Fichier de données" + +#: tfmdatafile.label4.caption +msgid "Y Dimension" +msgstr "Dimension Y" + +#: tfmdatafile.label5.caption +msgid "X Dimension" +msgstr "Dimension X" + +#: tfmdatafile.label6.caption +msgid "Z Dimension" +msgstr "Dimension Z" + +#: tfmdatafile.label7.caption +msgctxt "tfmdatafile.label7.caption" +msgid "Time Gates" +msgstr "Fenêtres temporelles" + +#: tfmdatafile.label8.caption +msgctxt "tfmdatafile.label8.caption" +msgid "Time Gates" +msgstr "Fenêtres temporelles" + +#: tfmdatafile.label9.caption +msgid "Header Size" +msgstr "Taille de l'en-tête" + +#: tfmdomain.acexit.caption +msgid "acExit" +msgstr "acExit" + +#: tfmdomain.acexit.hint +msgctxt "tfmdomain.acexit.hint" +msgid "Exit" +msgstr "Quitter" + +#: tfmdomain.achidebbx.caption +msgid "acHideBBX" +msgstr "acHideBBX" + +#: tfmdomain.achidebbx.hint +msgid "Hide Domain Box" +msgstr "Masquer la boîte de domaine" + +#: tfmdomain.acloadjson.caption +msgid "acLoadJSON" +msgstr "acLoadJSON" + +#: tfmdomain.acloadjson.hint +msgid "Load JSON" +msgstr "Charger JSON" + +#: tfmdomain.acrender.caption +msgid "acRender" +msgstr "acRender" + +#: tfmdomain.acrender.hint +msgid "Render" +msgstr "Rendu" + +#: tfmdomain.acresetcamera.caption +msgid "acResetCamera" +msgstr "acResetCamera" + +#: tfmdomain.acresetcamera.hint +msgid "Reset Camera" +msgstr "Réinitialiser la caméra" + +#: tfmdomain.acsaveimage.caption +msgid "acSaveImage" +msgstr "acSaveImage" + +#: tfmdomain.acsaveimage.hint +msgctxt "tfmdomain.acsaveimage.hint" +msgid "Save Screen" +msgstr "Sauvegarder l'écran" + +#: tfmdomain.acsavejson.caption +msgid "acSaveJSON" +msgstr "acSaveJSON" + +#: tfmdomain.acsavejson.hint +msgid "Save JSON" +msgstr "Sauvegarder JSON" + +#: tfmdomain.btbackground.hint +msgctxt "tfmdomain.btbackground.hint" +msgid "Change Background Color" +msgstr "Changer la couleur d'arrière-plan" + +#: tfmdomain.btpin.caption +msgid "Pin Editor" +msgstr "Épingler l'éditeur" + +#: tfmdomain.btpin.hint +msgid "Show editor" +msgstr "Afficher l'éditeur" + +#: tfmdomain.caption +msgid "MCX Domain Renderer" +msgstr "Moteur de rendu de domaine MCX" + +#: tfmdomain.toolbar1.caption +msgctxt "tfmdomain.toolbar1.caption" +msgid "ToolBar1" +msgstr "ToolBar1" + +#: tfmdomain.toolbutton11.caption +msgid "ToolButton11" +msgstr "ToolButton11" + +#: tfmdomain.toolbutton7.caption +msgid "ToolButton7" +msgstr "ToolButton7" + +#: tfmdomain.toolbutton9.caption +msgctxt "tfmdomain.toolbutton9.caption" +msgid "ToolButton9" +msgstr "ToolButton9" + +#: tfmmcx.btexpandoutput.caption +msgid "â–µ" +msgstr "â–µ" + +#: tfmmcx.btexpandoutput.hint +msgid "To expand or collapse the command window." +msgstr "Pour développer ou réduire la fenêtre de commande." + +#: tfmmcx.btgbexpand.caption +msgid "▾" +msgstr "▾" + +#: tfmmcx.btloadseed.hint +msgid "Load seed data from previous simulations for replay" +msgstr "Charger les données de graine des simulations précédentes pour relecture" + +#: tfmmcx.btsendcmd.caption +msgid "Send" +msgstr "Envoyer" + +#: tfmmcx.btsendcmd.hint +msgid "Send the user input to the input buffer of the external program \ncurrently being executed.\n" +msgstr "Envoyer l'entrée utilisateur vers le tampon d'entrée du programme externe actuellement en cours d'exécution.\n" + +#: tfmmcx.button2.caption +msgid "Clear Output" +msgstr "Effacer la sortie" + +#: tfmmcx.caption +msgid "MCX Studio" +msgstr "MCX Studio" + +#: tfmmcx.ckautopilot.caption +msgid "Let MCX decide thread/block size (-A)" +msgstr "Laisser MCX décider de la taille thread/bloc (-A)" + +#: tfmmcx.ckautopilot.hint +msgid "Autopilot \n\nChecking this box tells MCX/MMC to automatically determine the \"optimal\"\nthread number and block size by using the hardware information.\n\nIt is recommended to always check this box. The key to maximize simulation\nthroughput is to ensure a large number of threads are launched to keep the\nhardware resources fully utilized.\n" +msgstr "Pilote automatique\n\nCocher cette case demande à MCX/MMC de déterminer automatiquement le nombre \"optimal\" de threads et la taille de bloc en utilisant les informations matérielles.\n\nIl est recommandé de toujours cocher cette case. La clé pour maximiser le débit de simulation est de s'assurer qu'un grand nombre de threads sont lancés pour maintenir les ressources matérielles pleinement utilisées.\n" + +#: tfmmcx.ckbdebug.hint +msgctxt "tfmmcx.ckbdebug.hint" +msgid "DebugFlags" +msgstr "DebugFlags" + +#: tfmmcx.ckbdet.hint +msgid "SaveDetFlag \n\nThis checkbox list allows users to select the detected photon\ndata items that they want to save in the .mch file.\n\nBy default, only the Detector ID and Partial Pathlength are stored.\n" +msgstr "SaveDetFlag\n\nCette liste de cases à cocher permet aux utilisateurs de sélectionner les éléments de données de photons détectés qu'ils souhaitent sauvegarder dans le fichier .mch.\n\nPar défaut, seuls l'ID du détecteur et la longueur de chemin partielle sont stockés.\n" + +#: tfmmcx.ckdoremote.caption +msgid "Run remote command:" +msgstr "Exécuter commande distante :" + +#: tfmmcx.ckdoremote.hint +msgid "DoRemote \n\nCheck this option asks MCXStudio to call the specified ssh command \nand run mcx/mmc simulations on remote servers. \n\nPlease be aware that one must prepare the server and client to enable\nremote execution, this include\n\n1. install mcx/mmc/mcxcl executable on remote server and add path to\n the PATH environment \n2. install ssh client on the local client; for Linux/Mac, ssh/scp command is\n typically built-in; for windows, please install plink.exe and pscp.exe and\n ensure that their paths are on the PATH environment variable\n3. optionally, one can set the SSH key between the client and server to \n avoid typing password, please see http://www.linuxproblem.org/art_9.html\n" +msgstr "DoRemote\n\nCocher cette option demande à MCX Studio d'appeler la commande ssh spécifiée et d'exécuter les simulations mcx/mmc sur des serveurs distants.\n\nVeuillez noter qu'il faut préparer le serveur et le client pour permettre l'exécution distante, ceci inclut :\n\n1. installer l'exécutable mcx/mmc/mcxcl sur le serveur distant et ajouter le chemin à la variable d'environnement PATH\n2. installer le client ssh sur le client local ; pour Linux/Mac, la commande ssh/scp est généralement intégrée ; pour Windows, veuillez installer plink.exe et pscp.exe et vous assurer que leurs chemins sont dans la variable d'environnement PATH\n3. optionnellement, on peut configurer la clé SSH entre le client et le serveur pour éviter de taper le mot de passe, voir http://www.linuxproblem.org/art_9.html\n" + +#: tfmmcx.ckdoreplay.caption +msgid "Replay" +msgstr "Relecture" + +#: tfmmcx.ckdoreplay.hint +msgid "DoReplay \n\nWhen selecting a .mch file as the seed, this checkbox is automatically \nchecked, signifying that MCX/MMC will perform a photon replay by\nreading the RNG seeds from the .mch file and rerun the photons to produce\nthe Jacobians - in such case, one can use the \"Output Type\" to select which\nmetric to output.\n" +msgstr "DoReplay\n\nLors de la sélection d'un fichier .mch comme graine, cette case est automatiquement cochée, signifiant que MCX/MMC effectuera une relecture de photons en lisant les graines RNG du fichier .mch et relancera les photons pour produire les jacobiens - dans ce cas, on peut utiliser le \"Type de sortie\" pour sélectionner quelle métrique générer.\n" + +#: tfmmcx.cklockgpu.caption +msgid "Lock GPU" +msgstr "Verrouiller GPU" + +#: tfmmcx.cklockgpu.hint +msgid "Checking this box prevents MCXStudio from updating the device list\nwhen switching between different simulation sessions.\n\nWhen running simulation on a remote server, it is recommended to\nlock the GPU to avoid resetting of the device list.\n" +msgstr "Cocher cette case empêche MCX Studio de mettre à jour la liste des périphériques lors du basculement entre différentes sessions de simulation.\n\nLors de l'exécution de simulation sur un serveur distant, il est recommandé de verrouiller le GPU pour éviter la réinitialisation de la liste des périphériques.\n" + +#: tfmmcx.cknormalize.caption +msgid "Do normalization (-U)" +msgstr "Faire la normalisation (-U)" + +#: tfmmcx.cknormalize.hint +msgid "DoNormalize \n\nCheck this option allows MCX/MMC to normalize the output by the \nbelow formula\n\nΦ(i,j,k,t)=E(i,j,k,t) / (V*E_total*dT)\n\nwhere E(i,j,k,t) is the raw accummuated energy at each voxel; \nV is the size of the voxel in mm^3; dT is the time-gate width in s.\n\nAfter normalization, the result becomes TPSF or Green's function.\n\nUnchecking this option disables normalization.\n" +msgstr "DoNormalize\n\nCocher cette option permet à MCX/MMC de normaliser la sortie par la formule suivante :\n\nΦ(i,j,k,t)=E(i,j,k,t) / (V*E_total*dT)\n\noù E(i,j,k,t) est l'énergie accumulée brute à chaque voxel ; V est la taille du voxel en mm^3 ; dT est la largeur de la fenêtre temporelle en s.\n\nAprès normalisation, le résultat devient TPSF ou fonction de Green.\n\nDécocher cette option désactive la normalisation.\n" + +#: tfmmcx.ckreflect.caption +msgid "Do reflection all boundaries (-b)" +msgstr "Faire réflexion toutes frontières (-b)" + +#: tfmmcx.ckreflect.hint +msgid "DoReflect \n\nCheck this option (by default) enables reflection/refrection calculations \nwhen refractive index mismatch is detected at tissue boundaries.\n\nIf this option is unchecked, any photon hits the boundary between a \nnon-zero and zero-valued voxel will be terminated (i.e. total\nabsorbtion boundary condition). \n\nThe medium outside of the volume bounding box is assumed to have \nthe optical properties defined as label 0 (the first row in the Media Settings\ntable on the right).\n" +msgstr "DoReflect\n\nCocher cette option (par défaut) active les calculs de réflexion/réfraction lorsqu'une non-concordance d'indice de réfraction est détectée aux frontières tissulaires.\n\nSi cette option est décochée, tout photon frappant la frontière entre un voxel de valeur non nulle et nulle sera terminé (c.-à-d. condition de frontière d'absorption totale).\n\nLe milieu extérieur à la boîte englobante du volume est supposé avoir les propriétés optiques définies comme étiquette 0 (la première rangée dans le tableau Paramètres de milieu à droite).\n" + +#: tfmmcx.cksavedata.caption +msgid "Save fluence (-S)" +msgstr "Sauvegarder fluence (-S)" + +#: tfmmcx.cksavedata.hint +msgid "DoSave \n\nChecking this option makes MCX/MMC outputs the volumetric fluence\ndata: for MCX, it is the .mc2/.nii file; for MMC, it is a .dat file using P/H/B/S \nray-tracers and .mc2/.nii files when using the dual-grid mode (-M G).\n\nUnchecking this option stops MCX/MMC output the .mc2/.nii file.\n" +msgstr "DoSave\n\nCocher cette option fait que MCX/MMC génère les données de fluence volumétrique : pour MCX, c'est le fichier .mc2/.nii ; pour MMC, c'est un fichier .dat utilisant les traceurs de rayons P/H/B/S et les fichiers .mc2/.nii lors de l'utilisation du mode grille duale (-M G).\n\nDécocher cette option arrête la sortie du fichier .mc2/.nii de MCX/MMC.\n" + +#: tfmmcx.cksavedetector.caption +msgid "Save detected photons (-d)" +msgstr "Sauvegarder photons détectés (-d)" + +#: tfmmcx.cksavedetector.hint +msgid "SaveDetector \n\nChecking this option allows one to store detected photon \ninformation. The output data records can be user-defined by\nselecting the check-box list entitled \"Save detected photon\".\nThe output data are stored in a .mch file.\n\nUnchecking this option disables output the .mch file (can be \nslightly faster).\n" +msgstr "SaveDetector\n\nCocher cette option permet de stocker les informations de photons détectés. Les enregistrements de données de sortie peuvent être définis par l'utilisateur en sélectionnant la liste de cases à cocher intitulée \"Sauvegarder photons détectés\". Les données de sortie sont stockées dans un fichier .mch.\n\nDécocher cette option désactive la sortie du fichier .mch (peut être légèrement plus rapide).\n" + +#: tfmmcx.cksavemask.caption +msgid "Save volume mask (-M)" +msgstr "Sauvegarder masque de volume (-M)" + +#: tfmmcx.cksavemask.hint +msgid "DoSaveMask \n\nChecking this option asks MCX to output the pre-processed volume \nmasks. The preprocessed mask contains the voxels that are covered\nunder detectors; these voxels are designated by setting the sign-bit \nas 1. One can visualize this dumped data mask using mcxplotvol.m\n\nUnchecking this option suppresses the output of this mask file.\n" +msgstr "DoSaveMask\n\nCocher cette option demande à MCX de générer les masques de volume prétraités. Le masque prétraité contient les voxels qui sont couverts sous les détecteurs ; ces voxels sont désignés en définissant le bit de signe à 1. On peut visualiser ce masque de données exporté en utilisant mcxplotvol.m\n\nDécocher cette option supprime la sortie de ce fichier de masque.\n" + +#: tfmmcx.cksaveref.caption +msgid "Save diffuse reflectance (-X)" +msgstr "Sauvegarder réflectance diffuse (-X)" + +#: tfmmcx.cksaveref.hint +msgid "DoSaveRef \n\nChecking this option allows MCX/MMC to output the escaped photon\nweights on the exterior surface of the domain. For MCX, to save the \ntotal diffuse reflectance, one must pad a layer of zero voxels in the \nfacet or full bounding box of the domain to store such data. The raw \ntotal diffuse reflectance are normalized and stored as negative values\nin the .mc2/.nii file. When loading such file using loadmc2.m, the diffuse\nreflectance data are extracted and converted to positive output.\n\nUnchecking this option disables saving diffuse reflectance data.\n" +msgstr "DoSaveRef\n\nCocher cette option permet à MCX/MMC de générer les poids des photons échappés sur la surface extérieure du domaine. Pour MCX, pour sauvegarder la réflectance diffuse totale, il faut remplir une couche de voxels zéro dans la facette ou la boîte englobante complète du domaine pour stocker de telles données. La réflectance diffuse totale brute est normalisée et stockée comme valeurs négatives dans le fichier .mc2/.nii. Lors du chargement d'un tel fichier avec loadmc2.m, les données de réflectance diffuse sont extraites et converties en sortie positive.\n\nDécocher cette option désactive la sauvegarde des données de réflectance diffuse.\n" + +#: tfmmcx.cksaveseed.caption +msgid "Save photon seeds (-q)" +msgstr "Sauvegarder graines de photons (-q)" + +#: tfmmcx.cksaveseed.hint +msgid "DoSaveSeed \n\nChecking this option allows one to save the RNG seeds of the detected\nphotons in the .mch file. This makes it possible to perform photon replay\nto compute the Jacobian when feeding this output .mch file as the seed\nfor the replay run.\n\nUnchecking this option disables saving photon seeds.\n" +msgstr "DoSaveSeed\n\nCocher cette option permet de sauvegarder les graines RNG des photons détectés dans le fichier .mch. Cela permet d'effectuer une relecture de photons pour calculer le jacobien lors de l'utilisation de ce fichier .mch de sortie comme graine pour l'exécution de relecture.\n\nDécocher cette option désactive la sauvegarde des graines de photons.\n" + +#: tfmmcx.cksharedfs.caption +msgid "Shared file system" +msgstr "Système de fichiers partagé" + +#: tfmmcx.cksharedfs.hint +msgid "DoSharedFS \n\nChecking this option suggests that both the client and the server\nshare the same file system, thus, no file copying is needed. In other\nword, the folder structure to read/write on both client and server\nare identical. This is the case when one uses nfs/autofs on Linux/Mac.\n" +msgstr "DoSharedFS\n\nCocher cette option suggère que le client et le serveur partagent le même système de fichiers, donc aucune copie de fichier n'est nécessaire. En d'autres termes, la structure de dossiers pour lire/écrire sur le client et le serveur sont identiques. C'est le cas lors de l'utilisation de nfs/autofs sur Linux/Mac.\n" + +#: tfmmcx.ckshowprogress.caption +msgid "Show progress bar" +msgstr "Afficher barre de progression" + +#: tfmmcx.ckshowprogress.hint +msgid "ShowProgress \n\n(This option is highly experimental, use with caution, may cause hanging on some GPUs)\n\nCheck this option to let MCX/MMC to print a progress bar during the\nGPU simulation. In some hardware, this may cause unstable behaviors\nsuch as stalling or never return even the simulation is complete. If such\nbehavior is detected, please uncheck this option.\n" +msgstr "ShowProgress\n\n(Cette option est hautement expérimentale, utiliser avec précaution, peut causer des blocages sur certains GPU)\n\nCocher cette option permet à MCX/MMC d'afficher une barre de progression pendant la simulation GPU. Sur certains matériels, cela peut causer des comportements instables comme des blocages ou ne jamais retourner même lorsque la simulation est terminée. Si un tel comportement est détecté, veuillez décocher cette option.\n" + +#: tfmmcx.ckskipvoid.caption +msgid "Skip void space (-k)" +msgstr "Ignorer espace vide (-k)" + +#: tfmmcx.ckskipvoid.hint +msgid "DoSkipVoid \n\nChecking this option starts photon's ellapse time when it first enters\na non-zero voxel.\n\nUnchecking this option starts photon's ellapse time at launch time,\nregardless it is launched in the background (0-valued) voxel or non-zero\nvoxel.\n" +msgstr "DoSkipVoid\n\nCocher cette option démarre le temps écoulé du photon quand il entre pour la première fois dans un voxel non nul.\n\nDécocher cette option démarre le temps écoulé du photon au moment du lancement, qu'il soit lancé dans le voxel de fond (valeur 0) ou voxel non nul.\n" + +#: tfmmcx.ckspecular.caption +msgid "Do specular reflection (-V)" +msgstr "Faire réflexion spéculaire (-V)" + +#: tfmmcx.ckspecular.hint +msgid "DoSpecular \n\nChecking this option performs a transmission calculation if a photon \nis launched in the background; this results in change of direction angle\nand loss of energy.\n\nUnchecking this option moves a photon into a non-zero voxel without\nconsidering the specular reflection and change of direction.\n" +msgstr "DoSpecular\n\nCocher cette option effectue un calcul de transmission si un photon est lancé dans l'arrière-plan ; cela résulte en un changement d'angle de direction et une perte d'énergie.\n\nDécocher cette option déplace un photon dans un voxel non nul sans considérer la réflexion spéculaire et le changement de direction.\n" + +#: tfmmcx.cksrcfrom0.caption +msgid "Orign from [0,0,0] (-z)" +msgstr "Origine depuis [0,0,0] (-z)" + +#: tfmmcx.cksrcfrom0.hint +msgid "DoSrcFrom0 \n\nChecking this item assumes the lower-bottom corner of the voxelated \ndomain is [0,0,0] mm. The definitions of source and detector positions \nare impacted by this definition.\n\nUnchecking this option assumes the lower-bottom corner of the \ndomain is [1,1,1] mm.\n" +msgstr "DoSrcFrom0\n\nCocher cet élément suppose que le coin inférieur gauche du domaine voxélisé est [0,0,0] mm. Les définitions des positions de source et de détecteur sont impactées par cette définition.\n\nDécocher cette option suppose que le coin inférieur gauche du domaine est [1,1,1] mm.\n" + +#: tfmmcx.edbenchmark.hint +msgid "Benchmark \n\nThis option asks to run the built-in benchmark.\n" +msgstr "Benchmark\n\nCette option demande d'exécuter le test de performance intégré.\n" + +#: tfmmcx.edblocksize.hint +msgid "ThreadBlock \n\nSpecify a small integer, preferably a multiple of 32, to define \nthe block size - for example, 64 means a thread block contains \n64 threads.\n\nThis is only used when the -A (autopilot mode) is not enabled.\n" +msgstr "ThreadBlock\n\nSpécifier un petit entier, de préférence un multiple de 32, pour définir la taille de bloc - par exemple, 64 signifie qu'un bloc de threads contient 64 threads.\n\nCeci n'est utilisé que lorsque le -A (mode pilote automatique) n'est pas activé.\n" + +#: tfmmcx.edblocksize.text +msgid "64" +msgstr "64" + +#: tfmmcx.edbubble.hint +msgctxt "tfmmcx.edbubble.hint" +msgid "BubbleSize" +msgstr "BubbleSize" + +#: tfmmcx.edbubble.text +msgid "-2" +msgstr "-2" + +#: tfmmcx.edcmdinput.hint +msgid "User Input\n\nWhen connecting to a remote server via ssh/scp, one may asked to type\n\"yes\" to save the ssh key or other interactive inputs. If this is the case, one\ncan use this field to type user input, and click \"Send\" to pipe user input to \nthe external program.\n" +msgstr "Entrée utilisateur\n\nLors de la connexion à un serveur distant via ssh/scp, on peut être invité à taper \"yes\" pour sauvegarder la clé ssh ou autres entrées interactives. Si c'est le cas, on peut utiliser ce champ pour taper l'entrée utilisateur, et cliquer \"Envoyer\" pour diriger l'entrée utilisateur vers le programme externe.\n" + +#: tfmmcx.edconfigfile.hint +msgid "InputFile \n\nSpecify the input file in either .inp or .json format.\n" +msgstr "InputFile\n\nSpécifier le fichier d'entrée au format .inp ou .json.\n" + +#: tfmmcx.eddetectednum.hint +msgid "DetectedNum \n\nThis sets the maximum number of detected photons to be stored. If\nthe actual detected photon number is higher than this specified number,\nmcx/mmc will generate an warning and print out the actual detected \nphoton count; one can use that output in this field to allow MCX to store\nall photons.\n" +msgstr "DetectedNum\n\nCeci définit le nombre maximum de photons détectés à stocker. Si le nombre réel de photons détectés est supérieur à ce nombre spécifié, mcx/mmc générera un avertissement et affichera le décompte réel de photons détectés ; on peut utiliser cette sortie dans ce champ pour permettre à MCX de stocker tous les photons.\n" + +#: tfmmcx.eddetectednum.text +msgid "10000000" +msgstr "10000000" + +#: tfmmcx.edgate.hint +msgctxt "tfmmcx.edgate.hint" +msgid "GateNum" +msgstr "GateNum" + +#: tfmmcx.edgpuid.hint +msgid "GPUID \n\nUse this list to select the device or devices (CPU or GPU) used to\nrun the simulation. For MCX, if multiple CUDA GPUs are installed, one\ncan select multiple devices to speed up the calculation; for MCXCL\nand MMC, one can select OpenCL devices that include both CPU and\nGPUs. In such case, only devices of the same platform can be selected.\nFor example, an NVIDIA GPU and a CPU can not be selected together.\n" +msgstr "GPUID\n\nUtiliser cette liste pour sélectionner le périphérique ou les périphériques (CPU ou GPU) utilisés pour exécuter la simulation. Pour MCX, si plusieurs GPU CUDA sont installés, on peut sélectionner plusieurs périphériques pour accélérer le calcul ; pour MCXCL et MMC, on peut sélectionner des périphériques OpenCL qui incluent à la fois CPU et GPU. Dans ce cas, seuls les périphériques de la même plateforme peuvent être sélectionnés. Par exemple, un GPU NVIDIA et un CPU ne peuvent pas être sélectionnés ensemble.\n" + +#: tfmmcx.edmoreparam.hint +msgid "MoreParam \n\nOne can use this field to manually specify additional parameters that\nare not supported by this GUI tool. Any parameter set here will overwrite\nthe previous setting.\n" +msgstr "MoreParam\n\nOn peut utiliser ce champ pour spécifier manuellement des paramètres supplémentaires qui ne sont pas supportés par cet outil GUI. Tout paramètre défini ici écrasera le paramétrage précédent.\n" + +#: tfmmcx.edoutputformat.hint +msgid "OutputFormat \n\nThis specifies the output data file format. The supported formats are\n\n.mc2 - a simple binary format stores the voxel-by-voxel binary data\n in the column-major order\n.nii - the NIfTI-1 format\n.tx3 - a simple 3D texture binary format.\nascii - text-based data file\n" +msgstr "OutputFormat\n\nCeci spécifie le format de fichier de données de sortie. Les formats supportés sont :\n\n.mc2 - un format binaire simple stocke les données binaires voxel par voxel dans l'ordre colonne-majeure\n.nii - le format NIfTI-1\n.tx3 - un format binaire de texture 3D simple\nascii - fichier de données basé sur texte\n" + +#: tfmmcx.edoutputtype.hint +msgid "OutputType \n\nThis option specifies the output data type. \n\n* Fluence rate [J/mm^2/s] - the default output\n* Fluence [J/mm^2] - the integration of the fluence \n rate over each time gate\n* Energy deposition [J] - can be computed by multiplying \n fluence with absorption μa and voxel volume [mm^3]\n* Absorption Jacobian (mua) [1/mm] - in the replay mode, this\n outputs the sensitivity matrix for μa;\n* Average scattering event count - in the replay mode, this\n outputs the number of scattering event per voxel\n* Momentum transfer sensivity (DCS) - in the replay mode, this \n outputs the momentum transfer contribution/sensitivity from \n each voxel.\n" +msgstr "OutputType\n\nCette option spécifie le type de données de sortie.\n\n* Taux de fluence [J/mm^2/s] - la sortie par défaut\n* Fluence [J/mm^2] - l'intégration du taux de fluence sur chaque fenêtre temporelle\n* Dépôt d'énergie [J] - peut être calculé en multipliant la fluence avec l'absorption μa et le volume de voxel [mm^3]\n* Jacobien d'absorption (mua) [1/mm] - en mode relecture, ceci génère la matrice de sensibilité pour μa\n* Décompte moyen d'événements de diffusion - en mode relecture, ceci génère le nombre d'événements de diffusion par voxel\n* Sensibilité de transfert de moment (DCS) - en mode relecture, ceci génère la contribution/sensibilité de transfert de moment de chaque voxel\n" + +#: tfmmcx.edphoton.hint +msgid "PhotonNum \n\nThis defines the total simulated photons.\n\nCan be an integer or number in scientific form. For example\n100000 and 1e5 are both acceptable.\n\nPlease be noted that we highly suggest one to start with a\nsmall photon number to avoid extended run time.\n" +msgstr "PhotonNum\n\nCeci définit le total de photons simulés.\n\nPeut être un entier ou nombre en forme scientifique. Par exemple, 100000 et 1e5 sont tous deux acceptables.\n\nVeuillez noter que nous suggérons fortement de commencer avec un petit nombre de photons pour éviter un temps d'exécution prolongé.\n" + +#: tfmmcx.edphoton.text +msgid "1e6" +msgstr "1e6" + +#: tfmmcx.edphoton.texthint +msgid "Integer" +msgstr "Entier" + +#: tfmmcx.edremote.hint +msgid "RemoteCmd \n\nPlease choose the remote connection command using the dropdown list, or\ntype in this field manually. For windows, it is recommended to choose the \nplink.exe command; for Linux, it is recommended to use the ssh command.\n\nPlease replace the user@server by the actual username and the server IP\nor domain name.\n\nYou are highly recommended to set up key-based ssh access to avoid typing\npassword. Tutorials can be found at http://www.linuxproblem.org/art_9.html\n" +msgstr "RemoteCmd\n\nVeuillez choisir la commande de connexion distante en utilisant la liste déroulante, ou taper dans ce champ manuellement. Pour Windows, il est recommandé de choisir la commande plink.exe ; pour Linux, il est recommandé d'utiliser la commande ssh.\n\nVeuillez remplacer user@server par le nom d'utilisateur réel et l'IP du serveur ou nom de domaine.\n\nIl est fortement recommandé de configurer un accès ssh basé sur clé pour éviter de taper le mot de passe. Des tutoriels peuvent être trouvés sur http://www.linuxproblem.org/art_9.html\n" + +#: tfmmcx.edremote.text +msgid "Built-in ssh" +msgstr "ssh intégré" + +#: tfmmcx.edreplaydet.hint +msgctxt "tfmmcx.edreplaydet.hint" +msgid "ReplayDet" +msgstr "ReplayDet" + +#: tfmmcx.edrespin.hint +msgid "RespinNum \n\nSetting this to a positive number will repeat the simulation by the specified\nrepeition count starting from different random seeds.\n\nA negative integer asks MCX to divide the total photon number by the \nabsolute value of this input and run each subpart at a time. This can \nreduce the per-call run time, but may result in extensive overhead of\nrunning repeated simulations.\n" +msgstr "RespinNum\n\nDéfinir ceci à un nombre positif répétera la simulation par le décompte de répétition spécifié en commençant depuis différentes graines aléatoires.\n\nUn entier négatif demande à MCX de diviser le nombre total de photons par la valeur absolue de cette entrée et d'exécuter chaque sous-partie à la fois. Ceci peut réduire le temps d'exécution par appel, mais peut résulter en une surcharge importante d'exécuter des simulations répétées.\n" + +#: tfmmcx.edseed.hint +msgid "Seed \n\nIf this field is a large integer number, this specifies the RNG seed; \n\nif this is a file name ending with .mch, it loads an .mch file generated \nfrom previous simulation and replays the detected photons.\n" +msgstr "Seed\n\nSi ce champ est un grand nombre entier, ceci spécifie la graine RNG ;\n\nsi c'est un nom de fichier se terminant par .mch, il charge un fichier .mch généré depuis une simulation précédente et relit les photons détectés.\n" + +#: tfmmcx.edseed.text +msgid "1648335518" +msgstr "1648335518" + +#: tfmmcx.edseed.texthint +msgid "A large integer or .mch file name" +msgstr "Un grand entier ou nom de fichier .mch" + +#: tfmmcx.edsession.hint +msgid "Session \n\nThis string will be used in all output files as part of the file names.\n" +msgstr "Session\n\nCette chaîne sera utilisée dans tous les fichiers de sortie comme partie des noms de fichier.\n" + +#: tfmmcx.edthread.hint +msgid "ThreadNum \n\nSpecify a large integer multiple of 32 (the warp size) to manually \ndefine the thread numbers.\n\nThis is only used when the -A (autopilot mode) is not enabled.\n" +msgstr "ThreadNum\n\nSpécifier un grand entier multiple de 32 (la taille de warp) pour définir manuellement les nombres de threads.\n\nCeci n'est utilisé que lorsque le -A (mode pilote automatique) n'est pas activé.\n" + +#: tfmmcx.edthread.text +msgid "16384" +msgstr "16384" + +#: tfmmcx.edunitinmm.hint +msgid "UnitInMM \n\nThis defines the voxel size. By default, 1x1x1 mm^3 voxels\nare used. Has to be a positive floating point number. For example,\n0.1 defines a 0.1x0.1x0.1 mm^3 voxel.\n\nCurrently, only isotropic voxels are supported.\n" +msgstr "UnitInMM\n\nCeci définit la taille du voxel. Par défaut, des voxels de 1x1x1 mm^3 sont utilisés. Doit être un nombre à virgule flottante positif. Par exemple, 0.1 définit un voxel de 0.1x0.1x0.1 mm^3.\n\nActuellement, seuls les voxels isotropes sont supportés.\n" + +#: tfmmcx.edunitinmm.text +msgid "1" +msgstr "1" + +#: tfmmcx.edworkload.hint +msgid "Workload \n\nOne can specify a series of comma-separated numbers to specify the\nrelative portion of workload between multiple selected devices. \n\nFor example: 10,10 asks MCX to run 50% of the total photons using the\n1st device and 50% on the 2nd device. On the other hand, 10,100 splits\nthe total photon 1:10 between the 1st and 2nd devices.\n" +msgstr "Workload\n\nOn peut spécifier une série de nombres séparés par virgule pour spécifier la portion relative de charge de travail entre plusieurs périphériques sélectionnés.\n\nPar exemple : 10,10 demande à MCX d'exécuter 50% du total de photons en utilisant le 1er périphérique et 50% sur le 2ème périphérique. D'autre part, 10,100 divise le total de photons 1:10 entre le 1er et 2ème périphériques.\n" + +#: tfmmcx.edworkload.text +msgid "100" +msgstr "100" + +#: tfmmcx.edworkload.texthint +msgid "Comma separated numbers" +msgstr "Nombres séparés par virgule" + +#: tfmmcx.gradvsettings.caption +msgid "Advanced Settings" +msgstr "Paramètres avancés" + +#: tfmmcx.grarray.hint +msgid "ArrayOrder \n\nSelect MATLAB array order indicates that the input volume has a\ncolumn-major order - i.e. the left-most axis is the fastest index of\nthe array, like in MATLAB or FORTRAN.\n\nSelect C array order indicates that the input volume uses the \nrow-major order - i.e. the right-most index is the fastest index\nof the array, like in C and Python.\n" +msgstr "ArrayOrder\n\nSélectionner l'ordre de tableau MATLAB indique que le volume d'entrée a un ordre colonne-majeure - c.-à-d. l'axe le plus à gauche est l'index le plus rapide du tableau, comme dans MATLAB ou FORTRAN.\n\nSélectionner l'ordre de tableau C indique que le volume d'entrée utilise l'ordre ligne-majeure - c.-à-d. l'index le plus à droite est l'index le plus rapide du tableau, comme en C et Python.\n" + +#: tfmmcx.gratomic.hint +msgid "UseAtomic \n\nUsing atomic operations avoids conflicts between multiple threads when\nwriting to the same voxel, thus is highly recommended.\n\nIn the very old CUDA hardware, using atomic operations has a high \noverhead, but such overhead was signficiantly less since the Fermi GPU.\n" +msgstr "UseAtomic\n\nUtiliser les opérations atomiques évite les conflits entre plusieurs threads lors de l'écriture au même voxel, donc est hautement recommandé.\n\nDans le très ancien matériel CUDA, utiliser les opérations atomiques a une surcharge élevée, mais une telle surcharge était significativement moindre depuis le GPU Fermi.\n" + +#: tfmmcx.grbasic.caption +msgid "Basic Settings" +msgstr "Paramètres de base" + +#: tfmmcx.grbc.caption +msgid "Boundary cond." +msgstr "Cond. frontière" + +#: tfmmcx.grdet.caption +msgid "Save detected photon" +msgstr "Sauvegarder photon détecté" + +#: tfmmcx.grgpu.caption +msgid "GPU Settings" +msgstr "Paramètres GPU" + +#: tfmmcx.grprogram.caption +msgctxt "tfmmcx.grprogram.caption" +msgid "Run Monte Carlo simulation with" +msgstr "Exécuter simulation Monte Carlo avec" + +#: tfmmcx.grprogram.hint +msgid "MCProgram\n\nIn this panel, you choose which simulator to use. \nCurrently we support 3 simulators, \n\n* MCX: NVIDIA GPU-based simulation using voxelated domain\n* MCX-CL: OpenCL based CPU/GPU simulation using voxelated domain\n* MMC: OpenCL based CPU/GPU simulation using tetrahedral meshes\n\nThe built-in domain designer only supports creating voxelated \ndomains and creating meshes will be supported in the future.\n" +msgstr "MCProgram\n\nDans ce panneau, vous choisissez quel simulateur utiliser.\nActuellement nous supportons 3 simulateurs :\n\n* MCX : simulation basée sur GPU NVIDIA utilisant domaine voxélisé\n* MCX-CL : simulation CPU/GPU basée sur OpenCL utilisant domaine voxélisé\n* MMC : simulation CPU/GPU basée sur OpenCL utilisant maillages tétraédriques\n\nLe concepteur de domaine intégré ne supporte que la création de domaines voxélisés et la création de maillages sera supportée dans le futur.\n" + +#: tfmmcx.grswitches.caption +msgid "Switches" +msgstr "Commutateurs" + +#: tfmmcx.image1.hint +msgctxt "tfmmcx.image1.hint" +msgid "About MCX" +msgstr "À propos de MCX" + +#: tfmmcx.label1.caption +msgid "Thread number (-t)" +msgstr "Nombre de threads (-t)" + +#: tfmmcx.label1.hint +msgid "-t (--thread)" +msgstr "-t (--thread)" + +#: tfmmcx.label10.caption +msgctxt "tfmmcx.label10.caption" +msgid "or" +msgstr "ou" + +#: tfmmcx.label10.hint +msgctxt "tfmmcx.label10.hint" +msgid "-a (--array)" +msgstr "-a (--array)" + +#: tfmmcx.label11.caption +msgid "Output format" +msgstr "Format de sortie" + +#: tfmmcx.label11.hint +msgctxt "tfmmcx.label11.hint" +msgid "-u (--unitinmm)" +msgstr "-u (--unitinmm)" + +#: tfmmcx.label12.caption +msgid "Run MCX on" +msgstr "Exécuter MCX sur" + +#: tfmmcx.label12.hint +msgid "-G (--gpu)" +msgstr "-G (--gpu)" + +#: tfmmcx.label13.caption +msgid "Seed (-E)" +msgstr "Graine (-E)" + +#: tfmmcx.label13.hint +msgid "-E (--seed)" +msgstr "-E (--seed)" + +#: tfmmcx.label14.caption +msgid "Output type (-O)" +msgstr "Type de sortie (-O)" + +#: tfmmcx.label14.hint +msgid "-O (--outputtype)" +msgstr "-O (--outputtype)" + +#: tfmmcx.label15.caption +msgid "Workload split" +msgstr "Division de charge" + +#: tfmmcx.label15.hint +msgid "-W (--workload)" +msgstr "-W (--workload)" + +#: tfmmcx.label16.caption +msgid "Debug flags" +msgstr "Drapeaux de débogage" + +#: tfmmcx.label16.hint +msgid "-D (--debuglevel)" +msgstr "-D (--debuglevel)" + +#: tfmmcx.label17.caption +msgid "Replay detector ID (-Y)" +msgstr "ID détecteur relecture (-Y)" + +#: tfmmcx.label17.hint +msgctxt "tfmmcx.label17.hint" +msgid "-Y (--replaydet)" +msgstr "-Y (--replaydet)" + +#: tfmmcx.label18.caption +msgid "Additional parameters" +msgstr "Paramètres supplémentaires" + +#: tfmmcx.label18.hint +msgctxt "tfmmcx.label18.hint" +msgid "-Y (--replaydet)" +msgstr "-Y (--replaydet)" + +#: tfmmcx.label19.caption +msgctxt "tfmmcx.label19.caption" +msgid "or" +msgstr "ou" + +#: tfmmcx.label19.hint +msgctxt "tfmmcx.label19.hint" +msgid "-a (--array)" +msgstr "-a (--array)" + +#: tfmmcx.label2.caption +msgid "Thread block size (-T)" +msgstr "Taille bloc de threads (-T)" + +#: tfmmcx.label2.hint +msgid "-T (--blocksize)" +msgstr "-T (--blocksize)" + +#: tfmmcx.label3.caption +msgid "Total photon number (-n)" +msgstr "Nombre total de photons (-n)" + +#: tfmmcx.label3.hint +msgid "-n (--photon)" +msgstr "-n (--photon)" + +#: tfmmcx.label4.caption +msgid "Session ID (-s)" +msgstr "ID de session (-s)" + +#: tfmmcx.label4.hint +msgctxt "tfmmcx.label4.hint" +msgid "-s (--sessionid)" +msgstr "-s (--sessionid)" + +#: tfmmcx.label5.caption +msgid "User Input>" +msgstr "Entrée utilisateur>" + +#: tfmmcx.label6.caption +msgid "Array order (-a)" +msgstr "Ordre de tableau (-a)" + +#: tfmmcx.label6.hint +msgctxt "tfmmcx.label6.hint" +msgid "-a (--array)" +msgstr "-a (--array)" + +#: tfmmcx.label7.caption +msgid "Gate group size (-g)" +msgstr "Taille groupe de fenêtre (-g)" + +#: tfmmcx.label7.hint +msgid "-g (--gategroup)" +msgstr "-g (--gategroup)" + +#: tfmmcx.label8.caption +msgid "Voxel size in mm (-u)" +msgstr "Taille voxel en mm (-u)" + +#: tfmmcx.label8.hint +msgctxt "tfmmcx.label8.hint" +msgid "-u (--unitinmm)" +msgstr "-u (--unitinmm)" + +#: tfmmcx.label9.caption +msgid "Max detected photons(-H)" +msgstr "Max photons détectés (-H)" + +#: tfmmcx.label9.hint +msgid "-H (--maxdetphoton)" +msgstr "-H (--maxdetphoton)" + +#: tfmmcx.lbatomic.caption +msgid "Atomic operations" +msgstr "Opérations atomiques" + +#: tfmmcx.lbatomic.hint +msgid "(--atomic)" +msgstr "(--atomic)" + +#: tfmmcx.lbbubble.caption +msgid "Cache radius from src (-R)" +msgstr "Rayon cache depuis source (-R)" + +#: tfmmcx.lbbubble.hint +msgid "-r (--skipradius)" +msgstr "-r (--skipradius)" + +#: tfmmcx.lbrespin.caption +msgid "Repetition (-r)" +msgstr "Répétition (-r)" + +#: tfmmcx.lbrespin.hint +msgid "-r (--repeat)" +msgstr "-r (--repeat)" + +#: tfmmcx.lvjobs.columns[0].caption +msgctxt "tfmmcx.lvjobs.columns[0].caption" +msgid "Session" +msgstr "Session" + +#: tfmmcx.lvjobs.columns[10].caption +msgid "DoSave" +msgstr "DoSave" + +#: tfmmcx.lvjobs.columns[11].caption +msgid "DoNormalize" +msgstr "DoNormalize" + +#: tfmmcx.lvjobs.columns[12].caption +msgid "Autopilot" +msgstr "Autopilot" + +#: tfmmcx.lvjobs.columns[13].caption +msgid "SaveDetector" +msgstr "SaveDetector" + +#: tfmmcx.lvjobs.columns[14].caption +msgid "DetectedNum" +msgstr "DetectedNum" + +#: tfmmcx.lvjobs.columns[15].caption +msgid "GPUID" +msgstr "GPUID" + +#: tfmmcx.lvjobs.columns[16].caption +msgid "UnitInMM" +msgstr "UnitInMM" + +#: tfmmcx.lvjobs.columns[17].caption +msgid "DoSaveRef" +msgstr "DoSaveRef" + +#: tfmmcx.lvjobs.columns[18].caption +msgid "DoSaveSeed" +msgstr "DoSaveSeed" + +#: tfmmcx.lvjobs.columns[19].caption +msgid "DoSkipVoid" +msgstr "DoSkipVoid" + +#: tfmmcx.lvjobs.columns[1].caption +msgid "InputFile" +msgstr "InputFile" + +#: tfmmcx.lvjobs.columns[20].caption +msgid "DoSrcFrom0" +msgstr "DoSrcFrom0" + +#: tfmmcx.lvjobs.columns[21].caption +msgid "MediaCfg" +msgstr "MediaCfg" + +#: tfmmcx.lvjobs.columns[22].caption +msgid "DetectorCfg" +msgstr "DetectorCfg" + +#: tfmmcx.lvjobs.columns[23].caption +msgid "MCXConfig" +msgstr "MCXConfig" + +#: tfmmcx.lvjobs.columns[24].caption +msgid "Workload" +msgstr "Workload" + +#: tfmmcx.lvjobs.columns[25].caption +msgctxt "tfmmcx.lvjobs.columns[25].caption" +msgid "ShapeCfg" +msgstr "ShapeCfg" + +#: tfmmcx.lvjobs.columns[26].caption +msgid "Seed" +msgstr "Seed" + +#: tfmmcx.lvjobs.columns[27].caption +msgid "DoSaveMask" +msgstr "DoSaveMask" + +#: tfmmcx.lvjobs.columns[28].caption +msgctxt "tfmmcx.lvjobs.columns[28].caption" +msgid "DebugFlags" +msgstr "DebugFlags" + +#: tfmmcx.lvjobs.columns[29].caption +msgctxt "tfmmcx.lvjobs.columns[29].caption" +msgid "ReplayDet" +msgstr "ReplayDet" + +#: tfmmcx.lvjobs.columns[2].caption +msgid "ThreadNum" +msgstr "ThreadNum" + +#: tfmmcx.lvjobs.columns[30].caption +msgid "DoReplay" +msgstr "DoReplay" + +#: tfmmcx.lvjobs.columns[31].caption +msgid "MCProgram" +msgstr "MCProgram" + +#: tfmmcx.lvjobs.columns[32].caption +msgid "DoSpecular" +msgstr "DoSpecular" + +#: tfmmcx.lvjobs.columns[33].caption +msgid "UseAtomic" +msgstr "UseAtomic" + +#: tfmmcx.lvjobs.columns[34].caption +msgid "BasicOrder" +msgstr "BasicOrder" + +#: tfmmcx.lvjobs.columns[35].caption +msgid "DebugPhoton" +msgstr "DebugPhoton" + +#: tfmmcx.lvjobs.columns[36].caption +msgid "MoreParam" +msgstr "MoreParam" + +#: tfmmcx.lvjobs.columns[37].caption +msgid "RemoteCmd" +msgstr "RemoteCmd" + +#: tfmmcx.lvjobs.columns[38].caption +msgid "DoRemote" +msgstr "DoRemote" + +#: tfmmcx.lvjobs.columns[39].caption +msgid "DoSharedFS" +msgstr "DoSharedFS" + +#: tfmmcx.lvjobs.columns[3].caption +msgid "ThreadBlock" +msgstr "ThreadBlock" + +#: tfmmcx.lvjobs.columns[40].caption +msgid "OutputFormat" +msgstr "OutputFormat" + +#: tfmmcx.lvjobs.columns[41].caption +msgid "OutputType" +msgstr "OutputType" + +#: tfmmcx.lvjobs.columns[42].caption +msgid "Boundary" +msgstr "Boundary" + +#: tfmmcx.lvjobs.columns[43].caption +msgid "SaveDetFlag" +msgstr "SaveDetFlag" + +#: tfmmcx.lvjobs.columns[44].caption +msgid "Benchmark" +msgstr "Benchmark" + +#: tfmmcx.lvjobs.columns[4].caption +msgid "PhotonNum" +msgstr "PhotonNum" + +#: tfmmcx.lvjobs.columns[5].caption +msgid "RespinNum" +msgstr "RespinNum" + +#: tfmmcx.lvjobs.columns[6].caption +msgid "ArrayOrder" +msgstr "ArrayOrder" + +#: tfmmcx.lvjobs.columns[7].caption +msgctxt "tfmmcx.lvjobs.columns[7].caption" +msgid "BubbleSize" +msgstr "BubbleSize" + +#: tfmmcx.lvjobs.columns[8].caption +msgctxt "tfmmcx.lvjobs.columns[8].caption" +msgid "GateNum" +msgstr "GateNum" + +#: tfmmcx.lvjobs.columns[9].caption +msgid "DoReflect" +msgstr "DoReflect" + +#: tfmmcx.mcxdoabout.caption +msgid "About" +msgstr "À propos" + +#: tfmmcx.mcxdoabout.hint +msgid "About the author" +msgstr "À propos de l'auteur" + +#: tfmmcx.mcxdoadditem.caption +msgid "New" +msgstr "Nouveau" + +#: tfmmcx.mcxdoadditem.hint +msgid "Add a new task" +msgstr "Ajouter nouvelle tâche" + +#: tfmmcx.mcxdoconfig.caption +msgid "Setting" +msgstr "Configuration" + +#: tfmmcx.mcxdoconfig.hint +msgid "Modify default paths" +msgstr "Modifier chemins par défaut" + +#: tfmmcx.mcxdocopy.caption +msgid "Copy session to clipboard" +msgstr "Copier session vers presse-papiers" + +#: tfmmcx.mcxdodefault.caption +msgid "Default" +msgstr "Par défaut" + +#: tfmmcx.mcxdodefault.hint +msgid "Set default values" +msgstr "Définir valeurs par défaut" + +#: tfmmcx.mcxdodeleteitem.caption +msgctxt "tfmmcx.mcxdodeleteitem.caption" +msgid "Delete" +msgstr "Supprimer" + +#: tfmmcx.mcxdodeleteitem.hint +msgid "Delete selected task" +msgstr "Supprimer tâche sélectionnée" + +#: tfmmcx.mcxdodownloadmask.caption +msgid "Download volume labels (*_vol.nii)" +msgstr "Télécharger étiquettes de volume (*_vol.nii)" + +#: tfmmcx.mcxdodownloadmask.hint +msgctxt "tfmmcx.mcxdodownloadmask.hint" +msgid "_vol.nii" +msgstr "_vol.nii" + +#: tfmmcx.mcxdodownloadmc2.caption +msgid "Download fluence" +msgstr "Télécharger fluence" + +#: tfmmcx.mcxdodownloadmch.caption +msgid "Download detected photon data (*.mch)" +msgstr "Télécharger données de photons détectés (*.mch)" + +#: tfmmcx.mcxdodownloadmch.hint +msgid ".mch" +msgstr ".mch" + +#: tfmmcx.mcxdoexit.caption +msgctxt "tfmmcx.mcxdoexit.caption" +msgid "Exit" +msgstr "Quitter" + +#: tfmmcx.mcxdoexit.hint +msgid "Exit MCX Studio" +msgstr "Quitter MCX Studio" + +#: tfmmcx.mcxdohelp.caption +msgctxt "tfmmcx.mcxdohelp.caption" +msgid "Help" +msgstr "Aide" + +#: tfmmcx.mcxdohelp.hint +msgctxt "tfmmcx.mcxdohelp.hint" +msgid "Browse help information" +msgstr "Parcourir informations d'aide" + +#: tfmmcx.mcxdohelpoptions.caption +msgid "Options" +msgstr "Options" + +#: tfmmcx.mcxdohelpoptions.hint +msgid "List command line options" +msgstr "Lister options de ligne de commande" + +#: tfmmcx.mcxdoopen.caption +msgid "Open" +msgstr "Ouvrir" + +#: tfmmcx.mcxdoopen.hint +msgid "Open a project or volume file" +msgstr "Ouvrir un projet ou fichier de volume" + +#: tfmmcx.mcxdopaste.caption +msgid "Paste session from clipboard" +msgstr "Coller session depuis presse-papiers" + +#: tfmmcx.mcxdoplotjnifti.caption +msgid "Plot fluence (jnii)" +msgstr "Tracer fluence (jnii)" + +#: tfmmcx.mcxdoplotjnifti.hint +msgid ".jnii" +msgstr ".jnii" + +#: tfmmcx.mcxdoplotmc2.caption +msgid "Plot fluence (mc2)" +msgstr "Tracer fluence (mc2)" + +#: tfmmcx.mcxdoplotmc2.hint +msgid ".mc2" +msgstr ".mc2" + +#: tfmmcx.mcxdoplotmesh.caption +msgid "Plot mesh" +msgstr "Tracer maillage" + +#: tfmmcx.mcxdoplotnifty.caption +msgid "Plot fluence (nii)" +msgstr "Tracer fluence (nii)" + +#: tfmmcx.mcxdoplotnifty.hint +msgid ".nii" +msgstr ".nii" + +#: tfmmcx.mcxdoplotvol.caption +msgid "Plot Volume" +msgstr "Tracer volume" + +#: tfmmcx.mcxdoplotvol.hint +msgctxt "tfmmcx.mcxdoplotvol.hint" +msgid "_vol.nii" +msgstr "_vol.nii" + +#: tfmmcx.mcxdoquery.caption +msgid "GPU" +msgstr "GPU" + +#: tfmmcx.mcxdoquery.hint +msgid "List GPU Info" +msgstr "Lister infos GPU" + +#: tfmmcx.mcxdorun.caption +msgctxt "tfmmcx.mcxdorun.caption" +msgid "Run" +msgstr "Exécuter" + +#: tfmmcx.mcxdorun.hint +msgid "Run selected task" +msgstr "Exécuter tâche sélectionnée" + +#: tfmmcx.mcxdorunall.caption +msgid "Run All" +msgstr "Tout exécuter" + +#: tfmmcx.mcxdorunall.hint +msgid "Run all tasks" +msgstr "Exécuter toutes les tâches" + +#: tfmmcx.mcxdosave.caption +msgid "Save" +msgstr "Sauvegarder" + +#: tfmmcx.mcxdosave.hint +msgid "Save tasks to a project file" +msgstr "Sauvegarder tâches vers fichier projet" + +#: tfmmcx.mcxdostop.caption +msgid "Stop" +msgstr "Arrêter" + +#: tfmmcx.mcxdostop.hint +msgid "Terminate current task" +msgstr "Terminer tâche actuelle" + +#: tfmmcx.mcxdotoggleview.caption +msgid "Toggle View" +msgstr "Basculer vue" + +#: tfmmcx.mcxdoverify.caption +msgid "Verify" +msgstr "Vérifier" + +#: tfmmcx.mcxdoverify.hint +msgid "Verify parameters" +msgstr "Vérifier paramètres" + +#: tfmmcx.mcxdoweb.caption +msgid "Web" +msgstr "Web" + +#: tfmmcx.mcxdoweb.hint +msgid "MCX homepage" +msgstr "Page d'accueil MCX" + +#: tfmmcx.mcxsetcurrent.caption +msgid "mcxSetCurrent" +msgstr "mcxSetCurrent" + +#: tfmmcx.menuitem1.caption +msgid "File" +msgstr "Fichier" + +#: tfmmcx.menuitem11.caption +msgid "Settings" +msgstr "Paramètres" + +#: tfmmcx.menuitem2.caption +msgctxt "tfmmcx.menuitem2.caption" +msgid "Run" +msgstr "Exécuter" + +#: tfmmcx.menuitem22.caption +msgid "Open output folder" +msgstr "Ouvrir dossier de sortie" + +#: tfmmcx.menuitem24.caption +msgid "Plot volume (_vol.nii)" +msgstr "Tracer volume (_vol.nii)" + +#: tfmmcx.menuitem28.caption +msgid "Download fluence (mc2/nii/hdr/img)" +msgstr "Télécharger fluence (mc2/nii/hdr/img)" + +#: tfmmcx.menuitem3.caption +msgid "Tools" +msgstr "Outils" + +#: tfmmcx.menuitem31.caption +msgid "Download detected photon data (mch)" +msgstr "Télécharger données de photons détectés (mch)" + +#: tfmmcx.menuitem32.caption +msgid "Download volume mask (_vol.nii)" +msgstr "Télécharger masque de volume (_vol.nii)" + +#: tfmmcx.menuitem35.caption +msgid "MCX Documentation" +msgstr "Documentation MCX" + +#: tfmmcx.menuitem35.hint +msgid "https://mcx.space/wiki/?Learn#mcx" +msgstr "https://mcx.space/wiki/?Learn#mcx" + +#: tfmmcx.menuitem36.caption +msgid "MMC Documentation" +msgstr "Documentation MMC" + +#: tfmmcx.menuitem36.hint +msgid "https://mcx.space/wiki/?Learn#mmc" +msgstr "https://mcx.space/wiki/?Learn#mmc" + +#: tfmmcx.menuitem37.caption +msgid "MCX-CL Documentation" +msgstr "Documentation MCX-CL" + +#: tfmmcx.menuitem37.hint +msgid "https://mcx.space/wiki/?Learn#mcxcl" +msgstr "https://mcx.space/wiki/?Learn#mcxcl" + +#: tfmmcx.menuitem39.caption +msgid "MCX/MCXCL User Forum (mcx-users)" +msgstr "Forum utilisateurs MCX/MCXCL (mcx-users)" + +#: tfmmcx.menuitem39.hint +msgid "https://groups.google.com/forum/?hl=en#!forum/mcx-users" +msgstr "https://groups.google.com/forum/?hl=en#!forum/mcx-users" + +#: tfmmcx.menuitem4.caption +msgctxt "tfmmcx.menuitem4.caption" +msgid "Help" +msgstr "Aide" + +#: tfmmcx.menuitem40.caption +msgid "MMC User Forum (mmc-users)" +msgstr "Forum utilisateurs MMC (mmc-users)" + +#: tfmmcx.menuitem40.hint +msgid "https://groups.google.com/forum/?hl=en#!forum/mmc-users" +msgstr "https://groups.google.com/forum/?hl=en#!forum/mmc-users" + +#: tfmmcx.menuitem41.caption +msgid "Iso2Mesh User Forum (iso2mesh-users)" +msgstr "Forum utilisateurs Iso2Mesh (iso2mesh-users)" + +#: tfmmcx.menuitem41.hint +msgid "https://groups.google.com/forum/?hl=en#!forum/iso2mesh-users" +msgstr "https://groups.google.com/forum/?hl=en#!forum/iso2mesh-users" + +#: tfmmcx.menuitem43.caption +msgid "Download Nightly-Build" +msgstr "Télécharger version nocturne" + +#: tfmmcx.menuitem43.hint +msgid "https://mcx.space/nightly/" +msgstr "https://mcx.space/nightly/" + +#: tfmmcx.menuitem45.caption +msgid "MCX Github" +msgstr "MCX Github" + +#: tfmmcx.menuitem45.hint +msgid "https://github.com/fangq/mcx" +msgstr "https://github.com/fangq/mcx" + +#: tfmmcx.menuitem46.caption +msgid "MMC Github" +msgstr "MMC Github" + +#: tfmmcx.menuitem46.hint +msgid "https://github.com/fangq/mmc" +msgstr "https://github.com/fangq/mmc" + +#: tfmmcx.menuitem47.caption +msgid "MCX-CL Github" +msgstr "MCX-CL Github" + +#: tfmmcx.menuitem47.hint +msgid "https://github.com/fangq/mcxcl" +msgstr "https://github.com/fangq/mcxcl" + +#: tfmmcx.menuitem49.caption +msgid "Report MCX Issues" +msgstr "Signaler problèmes MCX" + +#: tfmmcx.menuitem49.hint +msgid "https://github.com/fangq/mcx/issues" +msgstr "https://github.com/fangq/mcx/issues" + +#: tfmmcx.menuitem50.caption +msgid "Report MMC Issues" +msgstr "Signaler problèmes MMC" + +#: tfmmcx.menuitem50.hint +msgid "https://github.com/fangq/mmc/issues" +msgstr "https://github.com/fangq/mmc/issues" + +#: tfmmcx.menuitem51.caption +msgid "Report MCX-CL Issues" +msgstr "Signaler problèmes MCX-CL" + +#: tfmmcx.menuitem51.hint +msgid "https://github.com/fangq/mcxcl/issues" +msgstr "https://github.com/fangq/mcxcl/issues" + +#: tfmmcx.menuitem53.caption +msgid "MCX GPU Speed Benchmark Database" +msgstr "Base de données benchmark vitesse GPU MCX" + +#: tfmmcx.menuitem53.hint +msgid "https://mcx.space/gpubench/" +msgstr "https://mcx.space/gpubench/" + +#: tfmmcx.menuitem55.caption +msgid "Refereces" +msgstr "Références" + +#: tfmmcx.menuitem56.caption +msgid "[Fang2009] Original MCX Paper" +msgstr "[Fang2009] Article MCX original" + +#: tfmmcx.menuitem56.hint +msgid "http://www.osapublishing.org/oe/abstract.cfm?uri=oe-17-22-20178" +msgstr "http://www.osapublishing.org/oe/abstract.cfm?uri=oe-17-22-20178" + +#: tfmmcx.menuitem57.caption +msgid "[Fang2010] Original MMC Paper" +msgstr "[Fang2010] Article MMC original" + +#: tfmmcx.menuitem57.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-1-1-165" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-1-1-165" + +#: tfmmcx.menuitem58.caption +msgid "[Yu2018] Original MCX-CL Paper" +msgstr "[Yu2018] Article MCX-CL original" + +#: tfmmcx.menuitem58.hint +msgid "https://www.spiedigitallibrary.org/journals/journal-of-biomedical-optics/volume-23/issue-01/010504/Scalable-and-massively-parallel-Monte-Carlo-photon-transport-simulations-for/10.1117/1.JBO.23.1.010504.full?SSO=1#ArticleLink" +msgstr "https://www.spiedigitallibrary.org/journals/journal-of-biomedical-optics/volume-23/issue-01/010504/Scalable-and-massively-parallel-Monte-Carlo-photon-transport-simulations-for/10.1117/1.JBO.23.1.010504.full?SSO=1#ArticleLink" + +#: tfmmcx.menuitem59.caption +msgid "[Fang2011] MMC ray-tracing comparison" +msgstr "[Fang2011] Comparaison ray-tracing MMC" + +#: tfmmcx.menuitem59.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-2-5-1258" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-2-5-1258" + +#: tfmmcx.menuitem60.caption +msgid "[Fang2012] SIMD MMC" +msgstr "[Fang2012] SIMD MMC" + +#: tfmmcx.menuitem60.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-3-12-3223" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-3-12-3223" + +#: tfmmcx.menuitem61.caption +msgid "[Yao2016] Widefield MMC" +msgstr "[Yao2016] MMC champ large" + +#: tfmmcx.menuitem61.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-7-1-171" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-7-1-171" + +#: tfmmcx.menuitem62.caption +msgid "[Yao2018] Jacobians with photon replay" +msgstr "[Yao2018] Jacobiens avec relecture de photons" + +#: tfmmcx.menuitem62.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-9-10-4588" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-9-10-4588" + +#: tfmmcx.menuitem63.caption +msgid "[Yan2019] Dual-grid MMC" +msgstr "[Yan2019] MMC grille duale" + +#: tfmmcx.menuitem63.hint +msgid "https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fdx.doi.org%2F10.1117%2F1.JBO.24.2.020503&data=02%7C01%7Cq.fang%40northeastern.edu%7Cbb8daa56735543068b9c08d697592492%7Ca8eec281aaa34daeac9b9a398b9215e7%7C0%7C0%7C636862806460866013&sdata=2dWyN3eVPwwymydjXEWIHBfVZI43Fcl5zuZ8wiaJ10k%3D&reserved=0" +msgstr "https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fdx.doi.org%2F10.1117%2F1.JBO.24.2.020503&data=02%7C01%7Cq.fang%40northeastern.edu%7Cbb8daa56735543068b9c08d697592492%7Ca8eec281aaa34daeac9b9a398b9215e7%7C0%7C0%7C636862806460866013&sdata=2dWyN3eVPwwymydjXEWIHBfVZI43Fcl5zuZ8wiaJ10k%3D&reserved=0" + +#: tfmmcx.menuitem64.caption +msgid "MCX Main Web" +msgstr "Site web principal MCX" + +#: tfmmcx.menuitem66.caption +msgid "Table of all input flags" +msgstr "Tableau de tous les drapeaux d'entrée" + +#: tfmmcx.menuitem66.hint +msgid "http://bit.ly/2K0rG4R " +msgstr "http://bit.ly/2K0rG4R " + +#: tfmmcx.menuitem69.caption +msgid "[Fang2019] GPU MMC" +msgstr "[Fang2019] GPU MMC" + +#: tfmmcx.menuitem69.hint +msgid "http://dx.doi.org/10.1117/1.JBO.24.11.115002" +msgstr "http://dx.doi.org/10.1117/1.JBO.24.11.115002" + +#: tfmmcx.menuitem70.caption +msgid "[Brain2Mesh2020] Brain2Mesh brain meshing toolbox" +msgstr "[Brain2Mesh2020] Boîte à outils de maillage cérébral Brain2Mesh" + +#: tfmmcx.menuitem70.hint +msgid "https://doi.org/10.1117/1.NPh.7.1.015008" +msgstr "https://doi.org/10.1117/1.NPh.7.1.015008" + +#: tfmmcx.menuitem71.caption +msgid "[Yuan2020] PBM over lifespan" +msgstr "[Yuan2020] PBM sur durée de vie" + +#: tfmmcx.menuitem71.hint +msgid "https://doi.org/10.1117/1.NPh.7.1.015009" +msgstr "https://doi.org/10.1117/1.NPh.7.1.015009" + +#: tfmmcx.menuitem72.caption +msgid "[Yuan2021] Implicit MMC (iMMC)" +msgstr "[Yuan2021] MMC implicite (iMMC)" + +#: tfmmcx.menuitem72.hint +msgid "https://www.osapublishing.org/boe/fulltext.cfm?uri=boe-12-1-147" +msgstr "https://www.osapublishing.org/boe/fulltext.cfm?uri=boe-12-1-147" + +#: tfmmcx.menuitem73.caption +msgid "[Yan2020] SVMC hybrid method" +msgstr "[Yan2020] Méthode hybride SVMC" + +#: tfmmcx.menuitem73.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-11-11-6262" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-11-11-6262" + +#: tfmmcx.menuitem76.caption +msgid "Open Volume Viewer" +msgstr "Ouvrir visualiseur de volume" + +#: tfmmcx.menuitem9.caption +msgctxt "tfmmcx.menuitem9.caption" +msgid "Volume Designer" +msgstr "Concepteur de volume" + +#: tfmmcx.miclearlog.caption +msgid "Clear Log" +msgstr "Effacer journal" + +#: tfmmcx.micopy.caption +msgid "Copy selected" +msgstr "Copier sélection" + +#: tfmmcx.miexportjson.caption +msgid "Export self-contained JSON input file" +msgstr "Exporter fichier d'entrée JSON autonome" + +#: tfmmcx.miusematlab.caption +msgid "Print MATLAB plotting commands only" +msgstr "Imprimer seulement commandes de tracé MATLAB" + +#: tfmmcx.openhistoryfile.title +msgctxt "tfmmcx.openhistoryfile.title" +msgid "Open Photon History File (*.mch)" +msgstr "Ouvrir fichier d'historique de photons (*.mch)" + +#: tfmmcx.openproject.title +msgid "Open existing project" +msgstr "Ouvrir projet existant" + +#: tfmmcx.openvolume.title +msgctxt "tfmmcx.openvolume.title" +msgid "Open Photon History File (*.mch)" +msgstr "Ouvrir fichier d'historique de photons (*.mch)" + +#: tfmmcx.rbusebench.caption +msgid "Built-in" +msgstr "Intégré" + +#: tfmmcx.rbusedesigner.caption +msgid "User-defined »" +msgstr "Défini par utilisateur »" + +#: tfmmcx.rbusefile.caption +msgid "Use Input File (-f)" +msgstr "Utiliser fichier d'entrée (-f)" + +#: tfmmcx.saveproject.title +msgid "Save project as" +msgstr "Sauvegarder projet sous" + +#: tfmmcx.sbinfo.panels[0].text +msgid "Status: idle" +msgstr "Statut : inactif" + +#: tfmmcx.sgconfig.columns[0].title.caption +msgctxt "tfmmcx.sgconfig.columns[0].title.caption" +msgid "Value" +msgstr "Valeur" + +#: tfmmcx.sgconfig.hint +msgid "MCXConfig \n\nThis defines the remaining key parameters used in an MCX/MMC\nsimulation.\n" +msgstr "MCXConfig\n\nCeci définit les paramètres clés restants utilisés dans une simulation MCX/MMC.\n" + +#: tfmmcx.sgdet.hint +msgid "DetectorCfg \n\nThis table defines all detectors in the domain. \n\nPlease note that currently MCX/MMC only supports spherical detectors,\ndefined by the [x,y,z] center position and radius (radius).\n\nPlease also note that photon detection only happens before a photon is\nterminated, i.e. when it escapes the exterior bounding box or moving from\na non-zero voxel to a zero voxel. Therefore, a detector's aperature is the\nactual bounding box surface or the surface of the non-zero voxels truncated\nby a sphere centered at [x,y,z] with raidus r.\n\nDetector position is sensitive to the \"Origin from [0 0 0] -z\" flag.\n" +msgstr "DetectorCfg\n\nCe tableau définit tous les détecteurs dans le domaine.\n\nVeuillez noter que actuellement MCX/MMC ne supporte que les détecteurs sphériques, définis par la position centrale [x,y,z] et le rayon.\n\nVeuillez aussi noter que la détection de photons n'arrive qu'avant qu'un photon soit terminé, c.-à-d. quand il échappe à la boîte englobante extérieure ou se déplace d'un voxel non nul vers un voxel nul. Par conséquent, l'ouverture d'un détecteur est la surface réelle de la boîte englobante ou la surface des voxels non nuls tronquée par une sphère centrée en [x,y,z] avec rayon r.\n\nLa position du détecteur est sensible au drapeau \"Origine depuis [0 0 0] -z\".\n" + +#: tfmmcx.sgmedia.columns[0].title.caption +msgid "μa (1/mm)" +msgstr "μa (1/mm)" + +#: tfmmcx.sgmedia.columns[1].title.caption +msgid "μs (1/mm)" +msgstr "μs (1/mm)" + +#: tfmmcx.sgmedia.columns[2].title.caption +msgid "g (anisotropy)" +msgstr "g (anisotropie)" + +#: tfmmcx.sgmedia.columns[3].title.caption +msgid "n (reflective index)" +msgstr "n (indice de réfraction)" + +#: tfmmcx.sgmedia.hint +msgid "MediaCfg \n\nThis table defines the optical properties for all needed tissue labels.\n\nThe first row (label 0) is reserved for the background medium - which includes\nthe space outside the bounding box of the volume, as well as any voxels with\na zero-value.\n\nOne can select a row and copy/paste to other rows.\n\nIf more labels are needed, move to the bottom of the table, and press \"down\"\narrow key to create a new row below.\n" +msgstr "MediaCfg\n\nCe tableau définit les propriétés optiques pour toutes les étiquettes de tissu nécessaires.\n\nLa première rangée (étiquette 0) est réservée pour le milieu de fond - qui inclut l'espace extérieur à la boîte englobante du volume, ainsi que tous voxels avec une valeur zéro.\n\nOn peut sélectionner une rangée et copier/coller vers d'autres rangées.\n\nSi plus d'étiquettes sont nécessaires, se déplacer vers le bas du tableau, et appuyer sur la touche flèche \"bas\" pour créer une nouvelle rangée en dessous.\n" + +#: tfmmcx.shapeaddbox.caption +msgid "Box" +msgstr "Boîte" + +#: tfmmcx.shapeaddbox.hint +msgid "Add a 3D box (using the center of the voxels - i.e. add 0.5 in all directions)" +msgstr "Ajouter une boîte 3D (utilisant le centre des voxels - c.-à-d. ajouter 0.5 dans toutes les directions)" + +#: tfmmcx.shapeaddcylinder.caption +msgid "Cylinder" +msgstr "Cylindre" + +#: tfmmcx.shapeaddcylinder.hint +msgid "Add a cylinder" +msgstr "Ajouter un cylindre" + +#: tfmmcx.shapeaddgrid.caption +msgid "Grid" +msgstr "Grille" + +#: tfmmcx.shapeaddgrid.hint +msgid "Define a uniform grid as the simulation space" +msgstr "Définir une grille uniforme comme espace de simulation" + +#: tfmmcx.shapeaddname.caption +msgid "Name" +msgstr "Nom" + +#: tfmmcx.shapeaddname.hint +msgid "Define a name for the domain" +msgstr "Définir un nom pour le domaine" + +#: tfmmcx.shapeaddorigin.caption +msgid "Origin" +msgstr "Origine" + +#: tfmmcx.shapeaddorigin.hint +msgid "Define the origin for subsequent objects" +msgstr "Définir l'origine pour les objets suivants" + +#: tfmmcx.shapeaddsphere.caption +msgid "Sphere" +msgstr "Sphère" + +#: tfmmcx.shapeaddsphere.hint +msgid "Add a 3D sphere" +msgstr "Ajouter une sphère 3D" + +#: tfmmcx.shapeaddsubgrid.caption +msgid "Subgrid" +msgstr "Sous-grille" + +#: tfmmcx.shapeaddsubgrid.hint +msgid "Add a 3D box (using the lower-corner of the voxel)" +msgstr "Ajouter une boîte 3D (utilisant le coin inférieur du voxel)" + +#: tfmmcx.shapeaddupperspace.caption +msgid "Upper" +msgstr "Supérieur" + +#: tfmmcx.shapeaddupperspace.hint +msgid "Add an upper-space defined by a linear inequality" +msgstr "Ajouter un espace supérieur défini par une inégalité linéaire" + +#: tfmmcx.shapeaddxlayers.caption +msgid "XLayers" +msgstr "Couches X" + +#: tfmmcx.shapeaddxlayers.hint +msgid "Add a layered structure along x-axis" +msgstr "Ajouter une structure en couches le long de l'axe x" + +#: tfmmcx.shapeaddxslabs.caption +msgid "XSlabs" +msgstr "Dalles X" + +#: tfmmcx.shapeaddxslabs.hint +msgid "Add a slab along x-axis" +msgstr "Ajouter une dalle le long de l'axe x" + +#: tfmmcx.shapeaddylayers.caption +msgid "YLayers" +msgstr "Couches Y" + +#: tfmmcx.shapeaddylayers.hint +msgid "Add a layered structure along y-axis" +msgstr "Ajouter une structure en couches le long de l'axe y" + +#: tfmmcx.shapeaddyslabs.caption +msgid "YSlabs" +msgstr "Dalles Y" + +#: tfmmcx.shapeaddyslabs.hint +msgid "Add a slab along y-axis" +msgstr "Ajouter une dalle le long de l'axe y" + +#: tfmmcx.shapeaddzlayers.caption +msgid "ZLayers" +msgstr "Couches Z" + +#: tfmmcx.shapeaddzlayers.hint +msgid "Add a layered structure along z-axis" +msgstr "Ajouter une structure en couches le long de l'axe z" + +#: tfmmcx.shapeaddzslabs.caption +msgid "ZSlabs" +msgstr "Dalles Z" + +#: tfmmcx.shapeaddzslabs.hint +msgid "Add a slab along z-axis" +msgstr "Ajouter une dalle le long de l'axe z" + +#: tfmmcx.shapedelete.caption +msgctxt "tfmmcx.shapedelete.caption" +msgid "Delete" +msgstr "Supprimer" + +#: tfmmcx.shapedelete.hint +msgid "Delete selected object" +msgstr "Supprimer objet sélectionné" + +#: tfmmcx.shapeedit.caption +msgid "Edit" +msgstr "Modifier" + +#: tfmmcx.shapepreview.caption +msgctxt "tfmmcx.shapepreview.caption" +msgid "Preview" +msgstr "Aperçu" + +#: tfmmcx.shapepreview.hint +msgctxt "tfmmcx.shapepreview.hint" +msgid "Preview" +msgstr "Aperçu" + +#: tfmmcx.shapeprint.caption +msgid "Print" +msgstr "Imprimer" + +#: tfmmcx.shapeprint.hint +msgid "Print selected object" +msgstr "Imprimer objet sélectionné" + +#: tfmmcx.shapereset.caption +msgctxt "tfmmcx.shapereset.caption" +msgid "Reset" +msgstr "Réinitialiser" + +#: tfmmcx.shapereset.hint +msgid "Reset to a 60x60x60 homogeneous cubic domain" +msgstr "Réinitialiser vers un domaine cubique homogène 60x60x60" + +#: tfmmcx.statictext1.caption +msgid "Additional Settings" +msgstr "Paramètres supplémentaires" + +#: tfmmcx.statictext2.caption +msgid "Media Settings" +msgstr "Paramètres de milieu" + +#: tfmmcx.statictext3.caption +msgid "Detector Settings (in voxel unit)" +msgstr "Paramètres de détecteur (en unités de voxel)" + +#: tfmmcx.tabinputdata.caption +msgid "Simulation Designer" +msgstr "Concepteur de simulation" + +#: tfmmcx.tabvolumedesigner.caption +msgctxt "tfmmcx.tabvolumedesigner.caption" +msgid "Volume Designer" +msgstr "Concepteur de volume" + +#: tfmmcx.tbtverify.caption +msgid "Validate" +msgstr "Valider" + +#: tfmmcx.toolbar1.caption +msgid "MCX Ribon" +msgstr "Ruban MCX" + +#: tfmmcx.toolbar2.caption +msgid "ToolBar2" +msgstr "ToolBar2" + +#: tfmmcx.toolbar3.caption +msgid "ToolBar3" +msgstr "ToolBar3" + +#: tfmmcx.toolbutton11.caption +msgid "Plot ▾" +msgstr "Tracer ▾" + +#: tfmmcx.toolbutton11.hint +msgid "Plot MCX output data" +msgstr "Tracer données de sortie MCX" + +#: tfmmcx.toolbutton12.caption +msgid "ToolButton12" +msgstr "ToolButton12" + +#: tfmmcx.toolbutton13.caption +msgid "ToolButton13" +msgstr "ToolButton13" + +#: tfmmcx.toolbutton17.caption +msgid "ToolButton17" +msgstr "ToolButton17" + +#: tfmmcx.toolbutton35.caption +msgid "ToolButton35" +msgstr "ToolButton35" + +#: tfmmcx.toolbutton39.hint +msgid "Reset volume and define a different dimension" +msgstr "Réinitialiser volume et définir une dimension différente" + +#: tfmmcx.toolbutton5.caption +msgid "ToolButton5" +msgstr "ToolButton5" + +#: tfmmcx.toolbutton7.caption +msgctxt "tfmmcx.toolbutton7.caption" +msgid "Reset" +msgstr "Réinitialiser" + +#: tfmmcx.toolbutton8.caption +msgctxt "tfmmcx.toolbutton8.caption" +msgid "ToolButton8" +msgstr "ToolButton8" + +#: tfmmcx.toolbutton9.caption +msgid "Help ▾" +msgstr "Aide ▾" + +#: tfmmcx.toolbutton9.hint +msgctxt "tfmmcx.toolbutton9.hint" +msgid "Browse help information" +msgstr "Parcourir informations d'aide" + +#: tfmmcx.tvshapes.hint +msgctxt "tfmmcx.tvshapes.hint" +msgid "ShapeCfg" +msgstr "ShapeCfg" + +#: tfmmcx.vlbc.hint +msgid "Boundary \n\nUsing this box to set the boundary condition for each one of the 6\nfacets on the bounding box. A total of 4 boundary conditions are\nsupported:\n\n1. total absorbing BC: photon hiting the boundary are terminated\n2. Fresnel reflection BC: perform Fresnel reflection/transmission\n3. mirror/total reflection BC: photon is 100% reflected (can run a long time)\n4. cylic BC: a photon exiting from a facet will re-enter from the opposite one\n" +msgstr "Boundary\n\nUtiliser cette boîte pour définir la condition de frontière pour chacune des 6 facettes sur la boîte englobante. Un total de 4 conditions de frontière sont supportées :\n\n1. BC d'absorption totale : les photons frappant la frontière sont terminés\n2. BC de réflexion de Fresnel : effectuer réflexion/transmission de Fresnel\n3. BC de réflexion miroir/totale : le photon est 100% réfléchi (peut fonctionner longtemps)\n4. BC cyclique : un photon sortant d'une facette rentrera par l'opposée\n" + +#: tfmnewsession.btcancel.caption +msgctxt "tfmnewsession.btcancel.caption" +msgid "Cancel" +msgstr "Annuler" + +#: tfmnewsession.btok.caption +msgctxt "tfmnewsession.btok.caption" +msgid "OK" +msgstr "OK" + +#: tfmnewsession.caption +msgid "Create A New Simulation" +msgstr "Créer une nouvelle simulation" + +#: tfmnewsession.edsession.hint +msgctxt "tfmnewsession.edsession.hint" +msgid "Session" +msgstr "Session" + +#: tfmnewsession.grprogram.caption +msgctxt "tfmnewsession.grprogram.caption" +msgid "Run Monte Carlo simulation with" +msgstr "Exécuter simulation Monte Carlo avec" + +#: tfmnewsession.grprogram.hint +msgid "Program" +msgstr "Programme" + +#: tfmnewsession.label4.caption +msgid "Please type in a unique session name" +msgstr "Veuillez taper un nom de session unique" + +#: tfmnewsession.label4.hint +msgctxt "tfmnewsession.label4.hint" +msgid "-s (--sessionid)" +msgstr "-s (--sessionid)" + +#: tfmshapeeditor.btcancel.caption +msgctxt "tfmshapeeditor.btcancel.caption" +msgid "Cancel" +msgstr "Annuler" + +#: tfmshapeeditor.btok.caption +msgctxt "tfmshapeeditor.btok.caption" +msgid "OK" +msgstr "OK" + +#: tfmshapeeditor.caption +msgid "Edit Shapes" +msgstr "Modifier formes" + +#: tfmsource.btcancel.caption +msgctxt "tfmsource.btcancel.caption" +msgid "Cancel" +msgstr "Annuler" + +#: tfmsource.btok.caption +msgctxt "tfmsource.btok.caption" +msgid "OK" +msgstr "OK" + +#: tfmsource.caption +msgid "Light Source Settings" +msgstr "Paramètres de source lumineuse" + +#: tfmsource.edsource.text +msgid "pencil" +msgstr "crayon" + +#: tfmsource.label4.caption +msgid "Please select a light source type:" +msgstr "Veuillez sélectionner un type de source lumineuse :" + +#: tfmsource.label5.caption +msgid "Please define source parameters:" +msgstr "Veuillez définir les paramètres de source :" + +#: tfmstop.caption +msgid "Running ..." +msgstr "En cours d'exécution..." + +#: tfmstop.toolbar1.caption +msgid "Running" +msgstr "En cours" + +#: tfmstop.toolbutton3.caption +msgid "Hide" +msgstr "Masquer" + +#: tfmstop.toolbutton3.hint +msgid "Hide this window" +msgstr "Masquer cette fenêtre" + +#: tfmstop.toolbutton8.caption +msgctxt "tfmstop.toolbutton8.caption" +msgid "ToolButton8" +msgstr "ToolButton8" + +#: tfmviewer.btbackground.hint +msgctxt "tfmviewer.btbackground.hint" +msgid "Change Background Color" +msgstr "Changer couleur d'arrière-plan" + +#: tfmviewer.btopaque.caption +msgid "btOpaque" +msgstr "btOpaque" + +#: tfmviewer.btopaque.hint +msgid "Show Opaque Hull" +msgstr "Afficher coque opaque" + +#: tfmviewer.caption +msgid "MCX Studio Volume Renderer" +msgstr "Moteur de rendu de volume MCX Studio" + +#: tfmviewer.grdir.caption +msgid "Slicing direction" +msgstr "Direction de coupe" + +#: tfmviewer.label1.caption +msgid "Rendering quality" +msgstr "Qualité de rendu" + +#: tfmviewer.label2.caption +msgid "Cutting plane position:" +msgstr "Position du plan de coupe :" + +#: tfmviewer.label3.caption +msgid "Invisible threshold" +msgstr "Seuil invisible" + +#: tfmviewer.label4.caption +msgid "Color level" +msgstr "Niveau de couleur" + +#: tfmviewer.mcxplotexit.caption +msgctxt "tfmviewer.mcxplotexit.caption" +msgid "Exit" +msgstr "Quitter" + +#: tfmviewer.mcxplotexit.hint +msgctxt "tfmviewer.mcxplotexit.hint" +msgid "Exit" +msgstr "Quitter" + +#: tfmviewer.mcxplotopen.caption +msgid "Open File" +msgstr "Ouvrir fichier" + +#: tfmviewer.mcxplotopen.hint +msgid "Open Data File" +msgstr "Ouvrir fichier de données" + +#: tfmviewer.mcxplotrefresh.caption +msgctxt "tfmviewer.mcxplotrefresh.caption" +msgid "Refresh" +msgstr "Actualiser" + +#: tfmviewer.mcxplotrefresh.hint +msgctxt "tfmviewer.mcxplotrefresh.hint" +msgid "Refresh" +msgstr "Actualiser" + +#: tfmviewer.mcxplotresetcamera.caption +msgctxt "tfmviewer.mcxplotresetcamera.caption" +msgid "Reset" +msgstr "Réinitialiser" + +#: tfmviewer.mcxplotsavescreen.caption +msgctxt "tfmviewer.mcxplotsavescreen.caption" +msgid "Save Screen" +msgstr "Sauvegarder écran" + +#: tfmviewer.mcxplotsavescreen.hint +msgid "Save screenshot" +msgstr "Sauvegarder capture d'écran" + +#: tfmviewer.mcxplotshowbbx.caption +msgctxt "tfmviewer.mcxplotshowbbx.caption" +msgid "Show Bounding Box" +msgstr "Afficher boîte englobante" + +#: tfmviewer.mcxplotshowbbx.hint +msgctxt "tfmviewer.mcxplotshowbbx.hint" +msgid "Show Bounding Box" +msgstr "Afficher boîte englobante" + +#: tfmviewer.mcxplotusecolor.caption +msgid "Pseudocolor" +msgstr "Pseudocouleur" + +#: tfmviewer.mcxplotusecolor.hint +msgid "Use Pseudocolor" +msgstr "Utiliser pseudocouleur" + +#: tfmviewer.toolbar1.caption +msgctxt "tfmviewer.toolbar1.caption" +msgid "ToolBar1" +msgstr "ToolBar1" + +#: tfmviewer.toolbutton10.caption +msgid "ToolButton10" +msgstr "ToolButton10" + +#: tfmviewer.toolbutton4.hint +msgid "Reset 3D View" +msgstr "Réinitialiser vue 3D" + +#: tfmviewer.toolbutton9.caption +msgctxt "tfmviewer.toolbutton9.caption" +msgid "ToolButton9" +msgstr "ToolButton9" \ No newline at end of file diff --git a/mcxstudio/i18n/mcxstudio.it.po b/mcxstudio/i18n/mcxstudio.it.po new file mode 100644 index 00000000..5de7d4d3 --- /dev/null +++ b/mcxstudio/i18n/mcxstudio.it.po @@ -0,0 +1,1993 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: it_IT\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 3.0.1\n" + +#: tfmabout.button1.caption +msgctxt "tfmabout.button1.caption" +msgid "OK" +msgstr "OK" + +#: tfmabout.caption +msgid "About Monte Carlo eXtreme Studio" +msgstr "Informazioni su Monte Carlo eXtreme Studio" + +#: tfmabout.image3.hint +msgctxt "tfmabout.image3.hint" +msgid "About MCX" +msgstr "Informazioni su MCX" + +#: tfmconfig.btcancel.caption +msgctxt "tfmconfig.btcancel.caption" +msgid "Cancel" +msgstr "Annulla" + +#: tfmconfig.btok.caption +msgctxt "tfmconfig.btok.caption" +msgid "OK" +msgstr "OK" + +#: tfmconfig.caption +msgid "MCX Studio Config" +msgstr "Configurazione MCX Studio" + +#: tfmconfig.ckusemanualpath.caption +msgid "Use Manual Paths" +msgstr "Usa Percorsi Manuali" + +#: tfmconfig.edlocalpath.columns[0].title.caption +msgctxt "tfmconfig.edlocalpath.columns[0].title.caption" +msgid "Value" +msgstr "Valore" + +#: tfmconfig.edscppath.hint +msgctxt "tfmconfig.edscppath.hint" +msgid "Local SCP Executable Path" +msgstr "Percorso Eseguibile SCP Locale" + +#: tfmconfig.edsshpath.hint +msgid "Local SSH Path" +msgstr "Percorso SSH Locale" + +#: tfmconfig.edworkpath.text +msgid "%MCXSTUDIO%/MCXOutput" +msgstr "%MCXSTUDIO%/MCXOutput" + +#: tfmconfig.groupbox2.caption +msgid "MCXStudio Local Output Root Directory" +msgstr "Directory Radice Output Locale MCX Studio" + +#: tfmconfig.groupbox3.caption +msgid "Remote MCX/MMC/MCXCl Executable Search Paths" +msgstr "Percorsi di Ricerca Eseguibili MCX/MMC/MCXCl Remoti" + +#: tfmconfig.groupbox4.caption +msgid "Local MCX/MMC/MCXCl Executable Search Paths" +msgstr "Percorsi di Ricerca Eseguibili MCX/MMC/MCXCl Locali" + +#: tfmconfig.groupbox5.caption +msgid "Local SSH Executable Path" +msgstr "Percorso Eseguibile SSH Locale" + +#: tfmconfig.groupbox6.caption +msgctxt "tfmconfig.groupbox6.caption" +msgid "Local SCP Executable Path" +msgstr "Percorso Eseguibile SCP Locale" + +#: tfmconfig.groupbox7.caption +msgid "Remote MCX/MMC/MCXCl Output Directory" +msgstr "Directory Output MCX/MMC/MCXCl Remoto" + +#: tfmconfig.groupbox8.caption +msgid "Remote GPU Server" +msgstr "Server GPU Remoto" + +#: tfmconfig.label1.caption +msgid "Hostname or IP" +msgstr "Nome host o IP" + +#: tfmconfig.label2.caption +msgid "Port" +msgstr "Porta" + +#: tfmconfig.label3.caption +msgid "User name" +msgstr "Nome utente" + +#: tfmdatafile.btcancel.caption +msgctxt "tfmdatafile.btcancel.caption" +msgid "Cancel" +msgstr "Annulla" + +#: tfmdatafile.btok.caption +msgctxt "tfmdatafile.btok.caption" +msgid "OK" +msgstr "OK" + +#: tfmdatafile.caption +msgid " Data File Properties" +msgstr "Proprietà File Dati" + +#: tfmdatafile.eddataformat.text +msgid "Float (32bit)" +msgstr "Float (32bit)" + +#: tfmdatafile.label10.caption +msgid "Data File" +msgstr "File Dati" + +#: tfmdatafile.label4.caption +msgid "Y Dimension" +msgstr "Dimensione Y" + +#: tfmdatafile.label5.caption +msgid "X Dimension" +msgstr "Dimensione X" + +#: tfmdatafile.label6.caption +msgid "Z Dimension" +msgstr "Dimensione Z" + +#: tfmdatafile.label7.caption +msgctxt "tfmdatafile.label7.caption" +msgid "Time Gates" +msgstr "Gate Temporali" + +#: tfmdatafile.label8.caption +msgctxt "tfmdatafile.label8.caption" +msgid "Time Gates" +msgstr "Gate Temporali" + +#: tfmdatafile.label9.caption +msgid "Header Size" +msgstr "Dimensione Intestazione" + +#: tfmdomain.acexit.caption +msgid "acExit" +msgstr "acExit" + +#: tfmdomain.acexit.hint +msgctxt "tfmdomain.acexit.hint" +msgid "Exit" +msgstr "Esci" + +#: tfmdomain.achidebbx.caption +msgid "acHideBBX" +msgstr "acHideBBX" + +#: tfmdomain.achidebbx.hint +msgid "Hide Domain Box" +msgstr "Nascondi Riquadro Dominio" + +#: tfmdomain.acloadjson.caption +msgid "acLoadJSON" +msgstr "acLoadJSON" + +#: tfmdomain.acloadjson.hint +msgid "Load JSON" +msgstr "Carica JSON" + +#: tfmdomain.acrender.caption +msgid "acRender" +msgstr "acRender" + +#: tfmdomain.acrender.hint +msgid "Render" +msgstr "Renderizza" + +#: tfmdomain.acresetcamera.caption +msgid "acResetCamera" +msgstr "acResetCamera" + +#: tfmdomain.acresetcamera.hint +msgid "Reset Camera" +msgstr "Reimposta Fotocamera" + +#: tfmdomain.acsaveimage.caption +msgid "acSaveImage" +msgstr "acSaveImage" + +#: tfmdomain.acsaveimage.hint +msgctxt "tfmdomain.acsaveimage.hint" +msgid "Save Screen" +msgstr "Salva Schermata" + +#: tfmdomain.acsavejson.caption +msgid "acSaveJSON" +msgstr "acSaveJSON" + +#: tfmdomain.acsavejson.hint +msgid "Save JSON" +msgstr "Salva JSON" + +#: tfmdomain.btbackground.hint +msgctxt "tfmdomain.btbackground.hint" +msgid "Change Background Color" +msgstr "Cambia Colore di Sfondo" + +#: tfmdomain.btpin.caption +msgid "Pin Editor" +msgstr "Fissa Editor" + +#: tfmdomain.btpin.hint +msgid "Show editor" +msgstr "Mostra editor" + +#: tfmdomain.caption +msgid "MCX Domain Renderer" +msgstr "Renderer Dominio MCX" + +#: tfmdomain.toolbar1.caption +msgctxt "tfmdomain.toolbar1.caption" +msgid "ToolBar1" +msgstr "ToolBar1" + +#: tfmdomain.toolbutton11.caption +msgid "ToolButton11" +msgstr "ToolButton11" + +#: tfmdomain.toolbutton7.caption +msgid "ToolButton7" +msgstr "ToolButton7" + +#: tfmdomain.toolbutton9.caption +msgctxt "tfmdomain.toolbutton9.caption" +msgid "ToolButton9" +msgstr "ToolButton9" + +#: tfmmcx.btexpandoutput.caption +msgid "▵" +msgstr "▵" + +#: tfmmcx.btexpandoutput.hint +msgid "To expand or collapse the command window." +msgstr "Per espandere o collassare la finestra dei comandi." + +#: tfmmcx.btgbexpand.caption +msgid "▾" +msgstr "▾" + +#: tfmmcx.btloadseed.hint +msgid "Load seed data from previous simulations for replay" +msgstr "Carica dati seme da simulazioni precedenti per ripetizione" + +#: tfmmcx.btsendcmd.caption +msgid "Send" +msgstr "Invia" + +#: tfmmcx.btsendcmd.hint +msgid "Send the user input to the input buffer of the external program \ncurrently being executed.\n" +msgstr "Invia l'input utente al buffer di input del programma esterno attualmente in esecuzione.\n" + +#: tfmmcx.button2.caption +msgid "Clear Output" +msgstr "Pulisci Output" + +#: tfmmcx.caption +msgid "MCX Studio" +msgstr "MCX Studio" + +#: tfmmcx.ckautopilot.caption +msgid "Let MCX decide thread/block size (-A)" +msgstr "Lascia che MCX decida dimensione thread/blocco (-A)" + +#: tfmmcx.ckautopilot.hint +msgid "Autopilot \n\nChecking this box tells MCX/MMC to automatically determine the \"optimal\"\nthread number and block size by using the hardware information.\n\nIt is recommended to always check this box. The key to maximize simulation\nthroughput is to ensure a large number of threads are launched to keep the\nhardware resources fully utilized.\n" +msgstr "Pilota Automatico\n\nSelezionare questa casella dice a MCX/MMC di determinare automaticamente il numero \"ottimale\" di thread e la dimensione del blocco utilizzando le informazioni hardware.\n\nSi raccomanda di selezionare sempre questa casella. La chiave per massimizzare il throughput della simulazione è assicurarsi che un gran numero di thread vengano lanciati per mantenere le risorse hardware completamente utilizzate.\n" + +#: tfmmcx.ckbdebug.hint +msgctxt "tfmmcx.ckbdebug.hint" +msgid "DebugFlags" +msgstr "DebugFlags" + +#: tfmmcx.ckbdet.hint +msgid "SaveDetFlag \n\nThis checkbox list allows users to select the detected photon\ndata items that they want to save in the .mch file.\n\nBy default, only the Detector ID and Partial Pathlength are stored.\n" +msgstr "SaveDetFlag\n\nQuesta lista di caselle di controllo consente agli utenti di selezionare gli elementi di dati dei fotoni rilevati che vogliono salvare nel file .mch.\n\nPer impostazione predefinita, vengono memorizzati solo l'ID Rivelatore e la Lunghezza Percorso Parziale.\n" + +#: tfmmcx.ckdoremote.caption +msgid "Run remote command:" +msgstr "Esegui comando remoto:" + +#: tfmmcx.ckdoremote.hint +msgid "DoRemote \n\nCheck this option asks MCXStudio to call the specified ssh command \nand run mcx/mmc simulations on remote servers. \n\nPlease be aware that one must prepare the server and client to enable\nremote execution, this include\n\n1. install mcx/mmc/mcxcl executable on remote server and add path to\n the PATH environment \n2. install ssh client on the local client; for Linux/Mac, ssh/scp command is\n typically built-in; for windows, please install plink.exe and pscp.exe and\n ensure that their paths are on the PATH environment variable\n3. optionally, one can set the SSH key between the client and server to \n avoid typing password, please see http://www.linuxproblem.org/art_9.html\n" +msgstr "DoRemote\n\nSelezionare questa opzione chiede a MCX Studio di chiamare il comando ssh specificato ed eseguire simulazioni mcx/mmc su server remoti.\n\nSi prega di essere consapevoli che bisogna preparare il server e il client per abilitare l'esecuzione remota, questo include:\n\n1. installare l'eseguibile mcx/mmc/mcxcl sul server remoto e aggiungere il percorso alla variabile d'ambiente PATH\n2. installare client ssh sul client locale; per Linux/Mac, il comando ssh/scp è tipicamente integrato; per Windows, si prega di installare plink.exe e pscp.exe e assicurarsi che i loro percorsi siano nella variabile d'ambiente PATH\n3. opzionalmente, si può impostare la chiave SSH tra client e server per evitare di digitare la password, vedere http://www.linuxproblem.org/art_9.html\n" + +#: tfmmcx.ckdoreplay.caption +msgid "Replay" +msgstr "Ripeti" + +#: tfmmcx.ckdoreplay.hint +msgid "DoReplay \n\nWhen selecting a .mch file as the seed, this checkbox is automatically \nchecked, signifying that MCX/MMC will perform a photon replay by\nreading the RNG seeds from the .mch file and rerun the photons to produce\nthe Jacobians - in such case, one can use the \"Output Type\" to select which\nmetric to output.\n" +msgstr "DoReplay\n\nQuando si seleziona un file .mch come seme, questa casella di controllo viene automaticamente selezionata, indicando che MCX/MMC eseguirà una ripetizione dei fotoni leggendo i semi RNG dal file .mch e rieseguendo i fotoni per produrre i Jacobiani - in tal caso, si può usare il \"Tipo di Output\" per selezionare quale metrica produrre.\n" + +#: tfmmcx.cklockgpu.caption +msgid "Lock GPU" +msgstr "Blocca GPU" + +#: tfmmcx.cklockgpu.hint +msgid "Checking this box prevents MCXStudio from updating the device list\nwhen switching between different simulation sessions.\n\nWhen running simulation on a remote server, it is recommended to\nlock the GPU to avoid resetting of the device list.\n" +msgstr "Selezionare questa casella impedisce a MCX Studio di aggiornare l'elenco dispositivi quando si cambia tra sessioni di simulazione diverse.\n\nQuando si esegue una simulazione su un server remoto, si raccomanda di bloccare la GPU per evitare il reset dell'elenco dispositivi.\n" + +#: tfmmcx.cknormalize.caption +msgid "Do normalization (-U)" +msgstr "Esegui normalizzazione (-U)" + +#: tfmmcx.cknormalize.hint +msgid "DoNormalize \n\nCheck this option allows MCX/MMC to normalize the output by the \nbelow formula\n\nΦ(i,j,k,t)=E(i,j,k,t) / (V*E_total*dT)\n\nwhere E(i,j,k,t) is the raw accummuated energy at each voxel; \nV is the size of the voxel in mm^3; dT is the time-gate width in s.\n\nAfter normalization, the result becomes TPSF or Green's function.\n\nUnchecking this option disables normalization.\n" +msgstr "DoNormalize\n\nSelezionare questa opzione consente a MCX/MMC di normalizzare l'output con la formula seguente:\n\nΦ(i,j,k,t)=E(i,j,k,t) / (V*E_total*dT)\n\ndove E(i,j,k,t) è l'energia grezza accumulata in ogni voxel; V è la dimensione del voxel in mm^3; dT è la larghezza del gate temporale in s.\n\nDopo la normalizzazione, il risultato diventa TPSF o funzione di Green.\n\nDeselezionare questa opzione disabilita la normalizzazione.\n" + +#: tfmmcx.ckreflect.caption +msgid "Do reflection all boundaries (-b)" +msgstr "Esegui riflessione tutti i confini (-b)" + +#: tfmmcx.ckreflect.hint +msgid "DoReflect \n\nCheck this option (by default) enables reflection/refrection calculations \nwhen refractive index mismatch is detected at tissue boundaries.\n\nIf this option is unchecked, any photon hits the boundary between a \nnon-zero and zero-valued voxel will be terminated (i.e. total\nabsorbtion boundary condition). \n\nThe medium outside of the volume bounding box is assumed to have \nthe optical properties defined as label 0 (the first row in the Media Settings\ntable on the right).\n" +msgstr "DoReflect\n\nSelezionare questa opzione (per impostazione predefinita) abilita i calcoli di riflessione/rifrazione quando viene rilevata una discordanza dell'indice di rifrazione ai confini del tessuto.\n\nSe questa opzione è deselezionata, qualsiasi fotone che colpisce il confine tra un voxel di valore non-zero e zero verrà terminato (cioè condizione di confine ad assorbimento totale).\n\nIl mezzo esterno alla bounding box del volume si assume abbia le proprietà ottiche definite come etichetta 0 (la prima riga nella tabella Impostazioni Media a destra).\n" + +#: tfmmcx.cksavedata.caption +msgid "Save fluence (-S)" +msgstr "Salva fluenza (-S)" + +#: tfmmcx.cksavedata.hint +msgid "DoSave \n\nChecking this option makes MCX/MMC outputs the volumetric fluence\ndata: for MCX, it is the .mc2/.nii file; for MMC, it is a .dat file using P/H/B/S \nray-tracers and .mc2/.nii files when using the dual-grid mode (-M G).\n\nUnchecking this option stops MCX/MMC output the .mc2/.nii file.\n" +msgstr "DoSave\n\nSelezionare questa opzione fa sì che MCX/MMC produca i dati di fluenza volumetrica: per MCX, è il file .mc2/.nii; per MMC, è un file .dat usando ray-tracer P/H/B/S e file .mc2/.nii quando si usa la modalità griglia duale (-M G).\n\nDeselezionare questa opzione ferma l'output del file .mc2/.nii di MCX/MMC.\n" + +#: tfmmcx.cksavedetector.caption +msgid "Save detected photons (-d)" +msgstr "Salva fotoni rilevati (-d)" + +#: tfmmcx.cksavedetector.hint +msgid "SaveDetector \n\nChecking this option allows one to store detected photon \ninformation. The output data records can be user-defined by\nselecting the check-box list entitled \"Save detected photon\".\nThe output data are stored in a .mch file.\n\nUnchecking this option disables output the .mch file (can be \nslightly faster).\n" +msgstr "SaveDetector\n\nSelezionare questa opzione consente di memorizzare informazioni sui fotoni rilevati. I record di dati di output possono essere definiti dall'utente selezionando l'elenco di caselle di controllo intitolato \"Salva fotone rilevato\". I dati di output sono memorizzati in un file .mch.\n\nDeselezionare questa opzione disabilita l'output del file .mch (può essere leggermente più veloce).\n" + +#: tfmmcx.cksavemask.caption +msgid "Save volume mask (-M)" +msgstr "Salva maschera volume (-M)" + +#: tfmmcx.cksavemask.hint +msgid "DoSaveMask \n\nChecking this option asks MCX to output the pre-processed volume \nmasks. The preprocessed mask contains the voxels that are covered\nunder detectors; these voxels are designated by setting the sign-bit \nas 1. One can visualize this dumped data mask using mcxplotvol.m\n\nUnchecking this option suppresses the output of this mask file.\n" +msgstr "DoSaveMask\n\nSelezionare questa opzione chiede a MCX di produrre le maschere di volume pre-processate. La maschera pre-processata contiene i voxel che sono coperti sotto i rivelatori; questi voxel sono designati impostando il bit di segno a 1. Si può visualizzare questa maschera di dati scaricata usando mcxplotvol.m\n\nDeselezionare questa opzione sopprime l'output di questo file maschera.\n" + +#: tfmmcx.cksaveref.caption +msgid "Save diffuse reflectance (-X)" +msgstr "Salva riflettanza diffusa (-X)" + +#: tfmmcx.cksaveref.hint +msgid "DoSaveRef \n\nChecking this option allows MCX/MMC to output the escaped photon\nweights on the exterior surface of the domain. For MCX, to save the \ntotal diffuse reflectance, one must pad a layer of zero voxels in the \nfacet or full bounding box of the domain to store such data. The raw \ntotal diffuse reflectance are normalized and stored as negative values\nin the .mc2/.nii file. When loading such file using loadmc2.m, the diffuse\nreflectance data are extracted and converted to positive output.\n\nUnchecking this option disables saving diffuse reflectance data.\n" +msgstr "DoSaveRef\n\nSelezionare questa opzione consente a MCX/MMC di produrre i pesi dei fotoni fuggiti sulla superficie esterna del dominio. Per MCX, per salvare la riflettanza diffusa totale, bisogna riempire uno strato di voxel zero nella faccia o bounding box completa del dominio per memorizzare tali dati. La riflettanza diffusa totale grezza viene normalizzata e memorizzata come valori negativi nel file .mc2/.nii. Quando si carica tale file usando loadmc2.m, i dati di riflettanza diffusa vengono estratti e convertiti in output positivo.\n\nDeselezionare questa opzione disabilita il salvataggio dei dati di riflettanza diffusa.\n" + +#: tfmmcx.cksaveseed.caption +msgid "Save photon seeds (-q)" +msgstr "Salva semi fotoni (-q)" + +#: tfmmcx.cksaveseed.hint +msgid "DoSaveSeed \n\nChecking this option allows one to save the RNG seeds of the detected\nphotons in the .mch file. This makes it possible to perform photon replay\nto compute the Jacobian when feeding this output .mch file as the seed\nfor the replay run.\n\nUnchecking this option disables saving photon seeds.\n" +msgstr "DoSaveSeed\n\nSelezionare questa opzione consente di salvare i semi RNG dei fotoni rilevati nel file .mch. Questo rende possibile eseguire la ripetizione dei fotoni per calcolare il Jacobiano quando si alimenta questo file .mch di output come seme per l'esecuzione di ripetizione.\n\nDeselezionare questa opzione disabilita il salvataggio dei semi fotoni.\n" + +#: tfmmcx.cksharedfs.caption +msgid "Shared file system" +msgstr "File system condiviso" + +#: tfmmcx.cksharedfs.hint +msgid "DoSharedFS \n\nChecking this option suggests that both the client and the server\nshare the same file system, thus, no file copying is needed. In other\nword, the folder structure to read/write on both client and server\nare identical. This is the case when one uses nfs/autofs on Linux/Mac.\n" +msgstr "DoSharedFS\n\nSelezionare questa opzione suggerisce che sia il client che il server condividono lo stesso file system, pertanto, non è necessaria alcuna copia di file. In altre parole, la struttura delle cartelle per leggere/scrivere sia sul client che sul server sono identiche. Questo è il caso quando si usa nfs/autofs su Linux/Mac.\n" + +#: tfmmcx.ckshowprogress.caption +msgid "Show progress bar" +msgstr "Mostra barra di progresso" + +#: tfmmcx.ckshowprogress.hint +msgid "ShowProgress \n\n(This option is highly experimental, use with caution, may cause hanging on some GPUs)\n\nCheck this option to let MCX/MMC to print a progress bar during the\nGPU simulation. In some hardware, this may cause unstable behaviors\nsuch as stalling or never return even the simulation is complete. If such\nbehavior is detected, please uncheck this option.\n" +msgstr "ShowProgress\n\n(Questa opzione è altamente sperimentale, usare con cautela, può causare blocchi su alcune GPU)\n\nSelezionare questa opzione per far stampare a MCX/MMC una barra di progresso durante la simulazione GPU. In alcuni hardware, questo può causare comportamenti instabili come stallo o non tornare mai anche se la simulazione è completa. Se tale comportamento viene rilevato, si prega di deselezionare questa opzione.\n" + +#: tfmmcx.ckskipvoid.caption +msgid "Skip void space (-k)" +msgstr "Salta spazio vuoto (-k)" + +#: tfmmcx.ckskipvoid.hint +msgid "DoSkipVoid \n\nChecking this option starts photon's ellapse time when it first enters\na non-zero voxel.\n\nUnchecking this option starts photon's ellapse time at launch time,\nregardless it is launched in the background (0-valued) voxel or non-zero\nvoxel.\n" +msgstr "DoSkipVoid\n\nSelezionare questa opzione avvia il tempo trascorso del fotone quando entra per la prima volta in un voxel non-zero.\n\nDeselezionare questa opzione avvia il tempo trascorso del fotone al momento del lancio, indipendentemente dal fatto che venga lanciato nel voxel di sfondo (valore 0) o voxel non-zero.\n" + +#: tfmmcx.ckspecular.caption +msgid "Do specular reflection (-V)" +msgstr "Esegui riflessione speculare (-V)" + +#: tfmmcx.ckspecular.hint +msgid "DoSpecular \n\nChecking this option performs a transmission calculation if a photon \nis launched in the background; this results in change of direction angle\nand loss of energy.\n\nUnchecking this option moves a photon into a non-zero voxel without\nconsidering the specular reflection and change of direction.\n" +msgstr "DoSpecular\n\nSelezionare questa opzione esegue un calcolo di trasmissione se un fotone viene lanciato nello sfondo; questo risulta in un cambio di angolo di direzione e perdita di energia.\n\nDeselezionare questa opzione sposta un fotone in un voxel non-zero senza considerare la riflessione speculare e il cambio di direzione.\n" + +#: tfmmcx.cksrcfrom0.caption +msgid "Orign from [0,0,0] (-z)" +msgstr "Origine da [0,0,0] (-z)" + +#: tfmmcx.cksrcfrom0.hint +msgid "DoSrcFrom0 \n\nChecking this item assumes the lower-bottom corner of the voxelated \ndomain is [0,0,0] mm. The definitions of source and detector positions \nare impacted by this definition.\n\nUnchecking this option assumes the lower-bottom corner of the \ndomain is [1,1,1] mm.\n" +msgstr "DoSrcFrom0\n\nSelezionare questo elemento assume che l'angolo inferiore-basso del dominio voxelizzato sia [0,0,0] mm. Le definizioni delle posizioni sorgente e rivelatore sono influenzate da questa definizione.\n\nDeselezionare questa opzione assume che l'angolo inferiore-basso del dominio sia [1,1,1] mm.\n" + +#: tfmmcx.edbenchmark.hint +msgid "Benchmark \n\nThis option asks to run the built-in benchmark.\n" +msgstr "Benchmark\n\nQuesta opzione chiede di eseguire il benchmark integrato.\n" + +#: tfmmcx.edblocksize.hint +msgid "ThreadBlock \n\nSpecify a small integer, preferably a multiple of 32, to define \nthe block size - for example, 64 means a thread block contains \n64 threads.\n\nThis is only used when the -A (autopilot mode) is not enabled.\n" +msgstr "ThreadBlock\n\nSpecificare un intero piccolo, preferibilmente un multiplo di 32, per definire la dimensione del blocco - per esempio, 64 significa che un blocco di thread contiene 64 thread.\n\nQuesto viene usato solo quando il -A (modalità pilota automatico) non è abilitato.\n" + +#: tfmmcx.edblocksize.text +msgid "64" +msgstr "64" + +#: tfmmcx.edbubble.hint +msgctxt "tfmmcx.edbubble.hint" +msgid "BubbleSize" +msgstr "BubbleSize" + +#: tfmmcx.edbubble.text +msgid "-2" +msgstr "-2" + +#: tfmmcx.edcmdinput.hint +msgid "User Input\n\nWhen connecting to a remote server via ssh/scp, one may asked to type\n\"yes\" to save the ssh key or other interactive inputs. If this is the case, one\ncan use this field to type user input, and click \"Send\" to pipe user input to \nthe external program.\n" +msgstr "Input Utente\n\nQuando ci si connette a un server remoto via ssh/scp, potrebbe essere richiesto di digitare \"yes\" per salvare la chiave ssh o altri input interattivi. Se questo è il caso, si può usare questo campo per digitare l'input utente, e cliccare \"Invia\" per inviare l'input utente al programma esterno.\n" + +#: tfmmcx.edconfigfile.hint +msgid "InputFile \n\nSpecify the input file in either .inp or .json format.\n" +msgstr "InputFile\n\nSpecificare il file di input in formato .inp o .json.\n" + +#: tfmmcx.eddetectednum.hint +msgid "DetectedNum \n\nThis sets the maximum number of detected photons to be stored. If\nthe actual detected photon number is higher than this specified number,\nmcx/mmc will generate an warning and print out the actual detected \nphoton count; one can use that output in this field to allow MCX to store\nall photons.\n" +msgstr "DetectedNum\n\nQuesto imposta il numero massimo di fotoni rilevati da memorizzare. Se il numero effettivo di fotoni rilevati è superiore a questo numero specificato, mcx/mmc genererà un avviso e stamperà il conteggio effettivo di fotoni rilevati; si può usare quell'output in questo campo per consentire a MCX di memorizzare tutti i fotoni.\n" + +#: tfmmcx.eddetectednum.text +msgid "10000000" +msgstr "10000000" + +#: tfmmcx.edgate.hint +msgctxt "tfmmcx.edgate.hint" +msgid "GateNum" +msgstr "GateNum" + +#: tfmmcx.edgpuid.hint +msgid "GPUID \n\nUse this list to select the device or devices (CPU or GPU) used to\nrun the simulation. For MCX, if multiple CUDA GPUs are installed, one\ncan select multiple devices to speed up the calculation; for MCXCL\nand MMC, one can select OpenCL devices that include both CPU and\nGPUs. In such case, only devices of the same platform can be selected.\nFor example, an NVIDIA GPU and a CPU can not be selected together.\n" +msgstr "GPUID\n\nUsare questo elenco per selezionare il dispositivo o i dispositivi (CPU o GPU) usati per eseguire la simulazione. Per MCX, se sono installate più GPU CUDA, si possono selezionare più dispositivi per velocizzare il calcolo; per MCXCL e MMC, si possono selezionare dispositivi OpenCL che includono sia CPU che GPU. In tal caso, possono essere selezionati solo dispositivi della stessa piattaforma. Per esempio, una GPU NVIDIA e una CPU non possono essere selezionate insieme.\n" + +#: tfmmcx.edmoreparam.hint +msgid "MoreParam \n\nOne can use this field to manually specify additional parameters that\nare not supported by this GUI tool. Any parameter set here will overwrite\nthe previous setting.\n" +msgstr "MoreParam\n\nSi può usare questo campo per specificare manualmente parametri aggiuntivi che non sono supportati da questo strumento GUI. Qualsiasi parametro impostato qui sovrascriverà l'impostazione precedente.\n" + +#: tfmmcx.edoutputformat.hint +msgid "OutputFormat \n\nThis specifies the output data file format. The supported formats are\n\n.mc2 - a simple binary format stores the voxel-by-voxel binary data\n in the column-major order\n.nii - the NIfTI-1 format\n.tx3 - a simple 3D texture binary format.\nascii - text-based data file\n" +msgstr "OutputFormat\n\nQuesto specifica il formato del file di dati di output. I formati supportati sono:\n\n.mc2 - un formato binario semplice che memorizza i dati binari voxel-per-voxel nell'ordine colonna-maggiore\n.nii - il formato NIfTI-1\n.tx3 - un formato binario di texture 3D semplice\nascii - file di dati basato su testo\n" + +#: tfmmcx.edoutputtype.hint +msgid "OutputType \n\nThis option specifies the output data type. \n\n* Fluence rate [J/mm^2/s] - the default output\n* Fluence [J/mm^2] - the integration of the fluence \n rate over each time gate\n* Energy deposition [J] - can be computed by multiplying \n fluence with absorption μa and voxel volume [mm^3]\n* Absorption Jacobian (mua) [1/mm] - in the replay mode, this\n outputs the sensitivity matrix for μa;\n* Average scattering event count - in the replay mode, this\n outputs the number of scattering event per voxel\n* Momentum transfer sensivity (DCS) - in the replay mode, this \n outputs the momentum transfer contribution/sensitivity from \n each voxel.\n" +msgstr "OutputType\n\nQuesta opzione specifica il tipo di dati di output.\n\n* Tasso di fluenza [J/mm^2/s] - l'output predefinito\n* Fluenza [J/mm^2] - l'integrazione del tasso di fluenza su ogni gate temporale\n* Deposizione di energia [J] - può essere calcolata moltiplicando la fluenza con l'assorbimento μa e il volume del voxel [mm^3]\n* Jacobiano di assorbimento (mua) [1/mm] - nella modalità ripetizione, questo produce la matrice di sensibilità per μa\n* Conteggio medio eventi di scattering - nella modalità ripetizione, questo produce il numero di eventi di scattering per voxel\n* Sensibilità trasferimento di momento (DCS) - nella modalità ripetizione, questo produce il contributo/sensibilità di trasferimento di momento da ogni voxel\n" + +#: tfmmcx.edphoton.hint +msgid "PhotonNum \n\nThis defines the total simulated photons.\n\nCan be an integer or number in scientific form. For example\n100000 and 1e5 are both acceptable.\n\nPlease be noted that we highly suggest one to start with a\nsmall photon number to avoid extended run time.\n" +msgstr "PhotonNum\n\nQuesto definisce il totale dei fotoni simulati.\n\nPuò essere un intero o numero in forma scientifica. Per esempio 100000 e 1e5 sono entrambi accettabili.\n\nSi prega di notare che consigliamo vivamente di iniziare con un piccolo numero di fotoni per evitare tempi di esecuzione estesi.\n" + +#: tfmmcx.edphoton.text +msgid "1e6" +msgstr "1e6" + +#: tfmmcx.edphoton.texthint +msgid "Integer" +msgstr "Intero" + +#: tfmmcx.edremote.hint +msgid "RemoteCmd \n\nPlease choose the remote connection command using the dropdown list, or\ntype in this field manually. For windows, it is recommended to choose the \nplink.exe command; for Linux, it is recommended to use the ssh command.\n\nPlease replace the user@server by the actual username and the server IP\nor domain name.\n\nYou are highly recommended to set up key-based ssh access to avoid typing\npassword. Tutorials can be found at http://www.linuxproblem.org/art_9.html\n" +msgstr "RemoteCmd\n\nSi prega di scegliere il comando di connessione remota usando l'elenco a discesa, o digitare in questo campo manualmente. Per Windows, si raccomanda di scegliere il comando plink.exe; per Linux, si raccomanda di usare il comando ssh.\n\nSi prega di sostituire user@server con il nome utente effettivo e l'IP del server o nome di dominio.\n\nSi raccomanda vivamente di impostare l'accesso ssh basato su chiave per evitare di digitare la password. I tutorial si possono trovare su http://www.linuxproblem.org/art_9.html\n" + +#: tfmmcx.edremote.text +msgid "Built-in ssh" +msgstr "ssh integrato" + +#: tfmmcx.edreplaydet.hint +msgctxt "tfmmcx.edreplaydet.hint" +msgid "ReplayDet" +msgstr "ReplayDet" + +#: tfmmcx.edrespin.hint +msgid "RespinNum \n\nSetting this to a positive number will repeat the simulation by the specified\nrepeition count starting from different random seeds.\n\nA negative integer asks MCX to divide the total photon number by the \nabsolute value of this input and run each subpart at a time. This can \nreduce the per-call run time, but may result in extensive overhead of\nrunning repeated simulations.\n" +msgstr "RespinNum\n\nImpostare questo a un numero positivo ripeterà la simulazione per il conteggio di ripetizione specificato partendo da semi casuali diversi.\n\nUn intero negativo chiede a MCX di dividere il numero totale di fotoni per il valore assoluto di questo input ed eseguire ogni sottoparte alla volta. Questo può ridurre il tempo di esecuzione per chiamata, ma può risultare in un sovraccarico estensivo dell'eseguire simulazioni ripetute.\n" + +#: tfmmcx.edseed.hint +msgid "Seed \n\nIf this field is a large integer number, this specifies the RNG seed; \n\nif this is a file name ending with .mch, it loads an .mch file generated \nfrom previous simulation and replays the detected photons.\n" +msgstr "Seed\n\nSe questo campo è un numero intero grande, questo specifica il seme RNG;\n\nse questo è un nome file che termina con .mch, carica un file .mch generato da una simulazione precedente e ripete i fotoni rilevati.\n" + +#: tfmmcx.edseed.text +msgid "1648335518" +msgstr "1648335518" + +#: tfmmcx.edseed.texthint +msgid "A large integer or .mch file name" +msgstr "Un intero grande o nome file .mch" + +#: tfmmcx.edsession.hint +msgid "Session \n\nThis string will be used in all output files as part of the file names.\n" +msgstr "Session\n\nQuesta stringa verrà usata in tutti i file di output come parte dei nomi file.\n" + +#: tfmmcx.edthread.hint +msgid "ThreadNum \n\nSpecify a large integer multiple of 32 (the warp size) to manually \ndefine the thread numbers.\n\nThis is only used when the -A (autopilot mode) is not enabled.\n" +msgstr "ThreadNum\n\nSpecificare un intero grande multiplo di 32 (la dimensione del warp) per definire manualmente i numeri di thread.\n\nQuesto viene usato solo quando il -A (modalità pilota automatico) non è abilitato.\n" + +#: tfmmcx.edthread.text +msgid "16384" +msgstr "16384" + +#: tfmmcx.edunitinmm.hint +msgid "UnitInMM \n\nThis defines the voxel size. By default, 1x1x1 mm^3 voxels\nare used. Has to be a positive floating point number. For example,\n0.1 defines a 0.1x0.1x0.1 mm^3 voxel.\n\nCurrently, only isotropic voxels are supported.\n" +msgstr "UnitInMM\n\nQuesto definisce la dimensione del voxel. Per impostazione predefinita, vengono usati voxel di 1x1x1 mm^3. Deve essere un numero in virgola mobile positivo. Per esempio, 0.1 definisce un voxel di 0.1x0.1x0.1 mm^3.\n\nAttualmente, sono supportati solo voxel isotropici.\n" + +#: tfmmcx.edunitinmm.text +msgid "1" +msgstr "1" + +#: tfmmcx.edworkload.hint +msgid "Workload \n\nOne can specify a series of comma-separated numbers to specify the\nrelative portion of workload between multiple selected devices. \n\nFor example: 10,10 asks MCX to run 50% of the total photons using the\n1st device and 50% on the 2nd device. On the other hand, 10,100 splits\nthe total photon 1:10 between the 1st and 2nd devices.\n" +msgstr "Workload\n\nSi può specificare una serie di numeri separati da virgole per specificare la porzione relativa di carico di lavoro tra più dispositivi selezionati.\n\nPer esempio: 10,10 chiede a MCX di eseguire il 50% del totale dei fotoni usando il 1° dispositivo e il 50% sul 2° dispositivo. D'altra parte, 10,100 divide il totale dei fotoni 1:10 tra il 1° e 2° dispositivo.\n" + +#: tfmmcx.edworkload.text +msgid "100" +msgstr "100" + +#: tfmmcx.edworkload.texthint +msgid "Comma separated numbers" +msgstr "Numeri separati da virgola" + +#: tfmmcx.gradvsettings.caption +msgid "Advanced Settings" +msgstr "Impostazioni Avanzate" + +#: tfmmcx.grarray.hint +msgid "ArrayOrder \n\nSelect MATLAB array order indicates that the input volume has a\ncolumn-major order - i.e. the left-most axis is the fastest index of\nthe array, like in MATLAB or FORTRAN.\n\nSelect C array order indicates that the input volume uses the \nrow-major order - i.e. the right-most index is the fastest index\nof the array, like in C and Python.\n" +msgstr "ArrayOrder\n\nSelezionare ordine array MATLAB indica che il volume di input ha un ordine colonna-maggiore - cioè l'asse più a sinistra è l'indice più veloce dell'array, come in MATLAB o FORTRAN.\n\nSelezionare ordine array C indica che il volume di input usa l'ordine riga-maggiore - cioè l'indice più a destra è l'indice più veloce dell'array, come in C e Python.\n" + +#: tfmmcx.gratomic.hint +msgid "UseAtomic \n\nUsing atomic operations avoids conflicts between multiple threads when\nwriting to the same voxel, thus is highly recommended.\n\nIn the very old CUDA hardware, using atomic operations has a high \noverhead, but such overhead was signficiantly less since the Fermi GPU.\n" +msgstr "UseAtomic\n\nUsare operazioni atomiche evita conflitti tra thread multipli quando si scrive sullo stesso voxel, quindi è altamente raccomandato.\n\nNell'hardware CUDA molto vecchio, usare operazioni atomiche ha un alto sovraccarico, ma tale sovraccarico è stato significativamente minore dalla GPU Fermi.\n" + +#: tfmmcx.grbasic.caption +msgid "Basic Settings" +msgstr "Impostazioni Base" + +#: tfmmcx.grbc.caption +msgid "Boundary cond." +msgstr "Cond. contorno" + +#: tfmmcx.grdet.caption +msgid "Save detected photon" +msgstr "Salva fotone rilevato" + +#: tfmmcx.grgpu.caption +msgid "GPU Settings" +msgstr "Impostazioni GPU" + +#: tfmmcx.grprogram.caption +msgctxt "tfmmcx.grprogram.caption" +msgid "Run Monte Carlo simulation with" +msgstr "Esegui simulazione Monte Carlo con" + +#: tfmmcx.grprogram.hint +msgid "MCProgram\n\nIn this panel, you choose which simulator to use. \nCurrently we support 3 simulators, \n\n* MCX: NVIDIA GPU-based simulation using voxelated domain\n* MCX-CL: OpenCL based CPU/GPU simulation using voxelated domain\n* MMC: OpenCL based CPU/GPU simulation using tetrahedral meshes\n\nThe built-in domain designer only supports creating voxelated \ndomains and creating meshes will be supported in the future.\n" +msgstr "MCProgram\n\nIn questo pannello, scegli quale simulatore usare.\nAttualmente supportiamo 3 simulatori:\n\n* MCX: simulazione basata su GPU NVIDIA usando dominio voxelizzato\n* MCX-CL: simulazione CPU/GPU basata su OpenCL usando dominio voxelizzato\n* MMC: simulazione CPU/GPU basata su OpenCL usando mesh tetraedriche\n\nIl designer di dominio integrato supporta solo la creazione di domini voxelizzati e la creazione di mesh sarà supportata in futuro.\n" + +#: tfmmcx.grswitches.caption +msgid "Switches" +msgstr "Interruttori" + +#: tfmmcx.image1.hint +msgctxt "tfmmcx.image1.hint" +msgid "About MCX" +msgstr "Informazioni su MCX" + +#: tfmmcx.label1.caption +msgid "Thread number (-t)" +msgstr "Numero thread (-t)" + +#: tfmmcx.label1.hint +msgid "-t (--thread)" +msgstr "-t (--thread)" + +#: tfmmcx.label10.caption +msgctxt "tfmmcx.label10.caption" +msgid "or" +msgstr "o" + +#: tfmmcx.label10.hint +msgctxt "tfmmcx.label10.hint" +msgid "-a (--array)" +msgstr "-a (--array)" + +#: tfmmcx.label11.caption +msgid "Output format" +msgstr "Formato output" + +#: tfmmcx.label11.hint +msgctxt "tfmmcx.label11.hint" +msgid "-u (--unitinmm)" +msgstr "-u (--unitinmm)" + +#: tfmmcx.label12.caption +msgid "Run MCX on" +msgstr "Esegui MCX su" + +#: tfmmcx.label12.hint +msgid "-G (--gpu)" +msgstr "-G (--gpu)" + +#: tfmmcx.label13.caption +msgid "Seed (-E)" +msgstr "Seme (-E)" + +#: tfmmcx.label13.hint +msgid "-E (--seed)" +msgstr "-E (--seed)" + +#: tfmmcx.label14.caption +msgid "Output type (-O)" +msgstr "Tipo output (-O)" + +#: tfmmcx.label14.hint +msgid "-O (--outputtype)" +msgstr "-O (--outputtype)" + +#: tfmmcx.label15.caption +msgid "Workload split" +msgstr "Divisione carico lavoro" + +#: tfmmcx.label15.hint +msgid "-W (--workload)" +msgstr "-W (--workload)" + +#: tfmmcx.label16.caption +msgid "Debug flags" +msgstr "Flag debug" + +#: tfmmcx.label16.hint +msgid "-D (--debuglevel)" +msgstr "-D (--debuglevel)" + +#: tfmmcx.label17.caption +msgid "Replay detector ID (-Y)" +msgstr "ID rivelatore ripetizione (-Y)" + +#: tfmmcx.label17.hint +msgctxt "tfmmcx.label17.hint" +msgid "-Y (--replaydet)" +msgstr "-Y (--replaydet)" + +#: tfmmcx.label18.caption +msgid "Additional parameters" +msgstr "Parametri aggiuntivi" + +#: tfmmcx.label18.hint +msgctxt "tfmmcx.label18.hint" +msgid "-Y (--replaydet)" +msgstr "-Y (--replaydet)" + +#: tfmmcx.label19.caption +msgctxt "tfmmcx.label19.caption" +msgid "or" +msgstr "o" + +#: tfmmcx.label19.hint +msgctxt "tfmmcx.label19.hint" +msgid "-a (--array)" +msgstr "-a (--array)" + +#: tfmmcx.label2.caption +msgid "Thread block size (-T)" +msgstr "Dimensione blocco thread (-T)" + +#: tfmmcx.label2.hint +msgid "-T (--blocksize)" +msgstr "-T (--blocksize)" + +#: tfmmcx.label3.caption +msgid "Total photon number (-n)" +msgstr "Numero totale fotoni (-n)" + +#: tfmmcx.label3.hint +msgid "-n (--photon)" +msgstr "-n (--photon)" + +#: tfmmcx.label4.caption +msgid "Session ID (-s)" +msgstr "ID sessione (-s)" + +#: tfmmcx.label4.hint +msgctxt "tfmmcx.label4.hint" +msgid "-s (--sessionid)" +msgstr "-s (--sessionid)" + +#: tfmmcx.label5.caption +msgid "User Input>" +msgstr "Input Utente>" + +#: tfmmcx.label6.caption +msgid "Array order (-a)" +msgstr "Ordine array (-a)" + +#: tfmmcx.label6.hint +msgctxt "tfmmcx.label6.hint" +msgid "-a (--array)" +msgstr "-a (--array)" + +#: tfmmcx.label7.caption +msgid "Gate group size (-g)" +msgstr "Dimensione gruppo gate (-g)" + +#: tfmmcx.label7.hint +msgid "-g (--gategroup)" +msgstr "-g (--gategroup)" + +#: tfmmcx.label8.caption +msgid "Voxel size in mm (-u)" +msgstr "Dimensione voxel in mm (-u)" + +#: tfmmcx.label8.hint +msgctxt "tfmmcx.label8.hint" +msgid "-u (--unitinmm)" +msgstr "-u (--unitinmm)" + +#: tfmmcx.label9.caption +msgid "Max detected photons(-H)" +msgstr "Max fotoni rilevati (-H)" + +#: tfmmcx.label9.hint +msgid "-H (--maxdetphoton)" +msgstr "-H (--maxdetphoton)" + +#: tfmmcx.lbatomic.caption +msgid "Atomic operations" +msgstr "Operazioni atomiche" + +#: tfmmcx.lbatomic.hint +msgid "(--atomic)" +msgstr "(--atomic)" + +#: tfmmcx.lbbubble.caption +msgid "Cache radius from src (-R)" +msgstr "Raggio cache da src (-R)" + +#: tfmmcx.lbbubble.hint +msgid "-r (--skipradius)" +msgstr "-r (--skipradius)" + +#: tfmmcx.lbrespin.caption +msgid "Repetition (-r)" +msgstr "Ripetizione (-r)" + +#: tfmmcx.lbrespin.hint +msgid "-r (--repeat)" +msgstr "-r (--repeat)" + +#: tfmmcx.lvjobs.columns[0].caption +msgctxt "tfmmcx.lvjobs.columns[0].caption" +msgid "Session" +msgstr "Sessione" + +#: tfmmcx.lvjobs.columns[10].caption +msgid "DoSave" +msgstr "DoSave" + +#: tfmmcx.lvjobs.columns[11].caption +msgid "DoNormalize" +msgstr "DoNormalize" + +#: tfmmcx.lvjobs.columns[12].caption +msgid "Autopilot" +msgstr "Autopilot" + +#: tfmmcx.lvjobs.columns[13].caption +msgid "SaveDetector" +msgstr "SaveDetector" + +#: tfmmcx.lvjobs.columns[14].caption +msgid "DetectedNum" +msgstr "DetectedNum" + +#: tfmmcx.lvjobs.columns[15].caption +msgid "GPUID" +msgstr "GPUID" + +#: tfmmcx.lvjobs.columns[16].caption +msgid "UnitInMM" +msgstr "UnitInMM" + +#: tfmmcx.lvjobs.columns[17].caption +msgid "DoSaveRef" +msgstr "DoSaveRef" + +#: tfmmcx.lvjobs.columns[18].caption +msgid "DoSaveSeed" +msgstr "DoSaveSeed" + +#: tfmmcx.lvjobs.columns[19].caption +msgid "DoSkipVoid" +msgstr "DoSkipVoid" + +#: tfmmcx.lvjobs.columns[1].caption +msgid "InputFile" +msgstr "InputFile" + +#: tfmmcx.lvjobs.columns[20].caption +msgid "DoSrcFrom0" +msgstr "DoSrcFrom0" + +#: tfmmcx.lvjobs.columns[21].caption +msgid "MediaCfg" +msgstr "MediaCfg" + +#: tfmmcx.lvjobs.columns[22].caption +msgid "DetectorCfg" +msgstr "DetectorCfg" + +#: tfmmcx.lvjobs.columns[23].caption +msgid "MCXConfig" +msgstr "MCXConfig" + +#: tfmmcx.lvjobs.columns[24].caption +msgid "Workload" +msgstr "Workload" + +#: tfmmcx.lvjobs.columns[25].caption +msgctxt "tfmmcx.lvjobs.columns[25].caption" +msgid "ShapeCfg" +msgstr "ShapeCfg" + +#: tfmmcx.lvjobs.columns[26].caption +msgid "Seed" +msgstr "Seed" + +#: tfmmcx.lvjobs.columns[27].caption +msgid "DoSaveMask" +msgstr "DoSaveMask" + +#: tfmmcx.lvjobs.columns[28].caption +msgctxt "tfmmcx.lvjobs.columns[28].caption" +msgid "DebugFlags" +msgstr "DebugFlags" + +#: tfmmcx.lvjobs.columns[29].caption +msgctxt "tfmmcx.lvjobs.columns[29].caption" +msgid "ReplayDet" +msgstr "ReplayDet" + +#: tfmmcx.lvjobs.columns[2].caption +msgid "ThreadNum" +msgstr "ThreadNum" + +#: tfmmcx.lvjobs.columns[30].caption +msgid "DoReplay" +msgstr "DoReplay" + +#: tfmmcx.lvjobs.columns[31].caption +msgid "MCProgram" +msgstr "MCProgram" + +#: tfmmcx.lvjobs.columns[32].caption +msgid "DoSpecular" +msgstr "DoSpecular" + +#: tfmmcx.lvjobs.columns[33].caption +msgid "UseAtomic" +msgstr "UseAtomic" + +#: tfmmcx.lvjobs.columns[34].caption +msgid "BasicOrder" +msgstr "BasicOrder" + +#: tfmmcx.lvjobs.columns[35].caption +msgid "DebugPhoton" +msgstr "DebugPhoton" + +#: tfmmcx.lvjobs.columns[36].caption +msgid "MoreParam" +msgstr "MoreParam" + +#: tfmmcx.lvjobs.columns[37].caption +msgid "RemoteCmd" +msgstr "RemoteCmd" + +#: tfmmcx.lvjobs.columns[38].caption +msgid "DoRemote" +msgstr "DoRemote" + +#: tfmmcx.lvjobs.columns[39].caption +msgid "DoSharedFS" +msgstr "DoSharedFS" + +#: tfmmcx.lvjobs.columns[3].caption +msgid "ThreadBlock" +msgstr "ThreadBlock" + +#: tfmmcx.lvjobs.columns[40].caption +msgid "OutputFormat" +msgstr "OutputFormat" + +#: tfmmcx.lvjobs.columns[41].caption +msgid "OutputType" +msgstr "OutputType" + +#: tfmmcx.lvjobs.columns[42].caption +msgid "Boundary" +msgstr "Boundary" + +#: tfmmcx.lvjobs.columns[43].caption +msgid "SaveDetFlag" +msgstr "SaveDetFlag" + +#: tfmmcx.lvjobs.columns[44].caption +msgid "Benchmark" +msgstr "Benchmark" + +#: tfmmcx.lvjobs.columns[4].caption +msgid "PhotonNum" +msgstr "PhotonNum" + +#: tfmmcx.lvjobs.columns[5].caption +msgid "RespinNum" +msgstr "RespinNum" + +#: tfmmcx.lvjobs.columns[6].caption +msgid "ArrayOrder" +msgstr "ArrayOrder" + +#: tfmmcx.lvjobs.columns[7].caption +msgctxt "tfmmcx.lvjobs.columns[7].caption" +msgid "BubbleSize" +msgstr "BubbleSize" + +#: tfmmcx.lvjobs.columns[8].caption +msgctxt "tfmmcx.lvjobs.columns[8].caption" +msgid "GateNum" +msgstr "GateNum" + +#: tfmmcx.lvjobs.columns[9].caption +msgid "DoReflect" +msgstr "DoReflect" + +#: tfmmcx.mcxdoabout.caption +msgid "About" +msgstr "Informazioni" + +#: tfmmcx.mcxdoabout.hint +msgid "About the author" +msgstr "Informazioni sull'autore" + +#: tfmmcx.mcxdoadditem.caption +msgid "New" +msgstr "Nuovo" + +#: tfmmcx.mcxdoadditem.hint +msgid "Add a new task" +msgstr "Aggiungi nuova attività" + +#: tfmmcx.mcxdoconfig.caption +msgid "Setting" +msgstr "Impostazione" + +#: tfmmcx.mcxdoconfig.hint +msgid "Modify default paths" +msgstr "Modifica percorsi predefiniti" + +#: tfmmcx.mcxdocopy.caption +msgid "Copy session to clipboard" +msgstr "Copia sessione negli appunti" + +#: tfmmcx.mcxdodefault.caption +msgid "Default" +msgstr "Predefinito" + +#: tfmmcx.mcxdodefault.hint +msgid "Set default values" +msgstr "Imposta valori predefiniti" + +#: tfmmcx.mcxdodeleteitem.caption +msgctxt "tfmmcx.mcxdodeleteitem.caption" +msgid "Delete" +msgstr "Elimina" + +#: tfmmcx.mcxdodeleteitem.hint +msgid "Delete selected task" +msgstr "Elimina attività selezionata" + +#: tfmmcx.mcxdodownloadmask.caption +msgid "Download volume labels (*_vol.nii)" +msgstr "Scarica etichette volume (*_vol.nii)" + +#: tfmmcx.mcxdodownloadmask.hint +msgctxt "tfmmcx.mcxdodownloadmask.hint" +msgid "_vol.nii" +msgstr "_vol.nii" + +#: tfmmcx.mcxdodownloadmc2.caption +msgid "Download fluence" +msgstr "Scarica fluenza" + +#: tfmmcx.mcxdodownloadmch.caption +msgid "Download detected photon data (*.mch)" +msgstr "Scarica dati fotoni rilevati (*.mch)" + +#: tfmmcx.mcxdodownloadmch.hint +msgid ".mch" +msgstr ".mch" + +#: tfmmcx.mcxdoexit.caption +msgctxt "tfmmcx.mcxdoexit.caption" +msgid "Exit" +msgstr "Esci" + +#: tfmmcx.mcxdoexit.hint +msgid "Exit MCX Studio" +msgstr "Esci da MCX Studio" + +#: tfmmcx.mcxdohelp.caption +msgctxt "tfmmcx.mcxdohelp.caption" +msgid "Help" +msgstr "Aiuto" + +#: tfmmcx.mcxdohelp.hint +msgctxt "tfmmcx.mcxdohelp.hint" +msgid "Browse help information" +msgstr "Sfoglia informazioni di aiuto" + +#: tfmmcx.mcxdohelpoptions.caption +msgid "Options" +msgstr "Opzioni" + +#: tfmmcx.mcxdohelpoptions.hint +msgid "List command line options" +msgstr "Elenca opzioni riga di comando" + +#: tfmmcx.mcxdoopen.caption +msgid "Open" +msgstr "Apri" + +#: tfmmcx.mcxdoopen.hint +msgid "Open a project or volume file" +msgstr "Apri un progetto o file di volume" + +#: tfmmcx.mcxdopaste.caption +msgid "Paste session from clipboard" +msgstr "Incolla sessione dagli appunti" + +#: tfmmcx.mcxdoplotjnifti.caption +msgid "Plot fluence (jnii)" +msgstr "Plotta fluenza (jnii)" + +#: tfmmcx.mcxdoplotjnifti.hint +msgid ".jnii" +msgstr ".jnii" + +#: tfmmcx.mcxdoplotmc2.caption +msgid "Plot fluence (mc2)" +msgstr "Plotta fluenza (mc2)" + +#: tfmmcx.mcxdoplotmc2.hint +msgid ".mc2" +msgstr ".mc2" + +#: tfmmcx.mcxdoplotmesh.caption +msgid "Plot mesh" +msgstr "Plotta mesh" + +#: tfmmcx.mcxdoplotnifty.caption +msgid "Plot fluence (nii)" +msgstr "Plotta fluenza (nii)" + +#: tfmmcx.mcxdoplotnifty.hint +msgid ".nii" +msgstr ".nii" + +#: tfmmcx.mcxdoplotvol.caption +msgid "Plot Volume" +msgstr "Plotta Volume" + +#: tfmmcx.mcxdoplotvol.hint +msgctxt "tfmmcx.mcxdoplotvol.hint" +msgid "_vol.nii" +msgstr "_vol.nii" + +#: tfmmcx.mcxdoquery.caption +msgid "GPU" +msgstr "GPU" + +#: tfmmcx.mcxdoquery.hint +msgid "List GPU Info" +msgstr "Elenca Info GPU" + +#: tfmmcx.mcxdorun.caption +msgctxt "tfmmcx.mcxdorun.caption" +msgid "Run" +msgstr "Esegui" + +#: tfmmcx.mcxdorun.hint +msgid "Run selected task" +msgstr "Esegui attività selezionata" + +#: tfmmcx.mcxdorunall.caption +msgid "Run All" +msgstr "Esegui Tutto" + +#: tfmmcx.mcxdorunall.hint +msgid "Run all tasks" +msgstr "Esegui tutte le attività" + +#: tfmmcx.mcxdosave.caption +msgid "Save" +msgstr "Salva" + +#: tfmmcx.mcxdosave.hint +msgid "Save tasks to a project file" +msgstr "Salva attività in un file progetto" + +#: tfmmcx.mcxdostop.caption +msgid "Stop" +msgstr "Ferma" + +#: tfmmcx.mcxdostop.hint +msgid "Terminate current task" +msgstr "Termina attività corrente" + +#: tfmmcx.mcxdotoggleview.caption +msgid "Toggle View" +msgstr "Commuta Vista" + +#: tfmmcx.mcxdoverify.caption +msgid "Verify" +msgstr "Verifica" + +#: tfmmcx.mcxdoverify.hint +msgid "Verify parameters" +msgstr "Verifica parametri" + +#: tfmmcx.mcxdoweb.caption +msgid "Web" +msgstr "Web" + +#: tfmmcx.mcxdoweb.hint +msgid "MCX homepage" +msgstr "Homepage MCX" + +#: tfmmcx.mcxsetcurrent.caption +msgid "mcxSetCurrent" +msgstr "mcxSetCurrent" + +#: tfmmcx.menuitem1.caption +msgid "File" +msgstr "File" + +#: tfmmcx.menuitem11.caption +msgid "Settings" +msgstr "Impostazioni" + +#: tfmmcx.menuitem2.caption +msgctxt "tfmmcx.menuitem2.caption" +msgid "Run" +msgstr "Esegui" + +#: tfmmcx.menuitem22.caption +msgid "Open output folder" +msgstr "Apri cartella output" + +#: tfmmcx.menuitem24.caption +msgid "Plot volume (_vol.nii)" +msgstr "Plotta volume (_vol.nii)" + +#: tfmmcx.menuitem28.caption +msgid "Download fluence (mc2/nii/hdr/img)" +msgstr "Scarica fluenza (mc2/nii/hdr/img)" + +#: tfmmcx.menuitem3.caption +msgid "Tools" +msgstr "Strumenti" + +#: tfmmcx.menuitem31.caption +msgid "Download detected photon data (mch)" +msgstr "Scarica dati fotoni rilevati (mch)" + +#: tfmmcx.menuitem32.caption +msgid "Download volume mask (_vol.nii)" +msgstr "Scarica maschera volume (_vol.nii)" + +#: tfmmcx.menuitem35.caption +msgid "MCX Documentation" +msgstr "Documentazione MCX" + +#: tfmmcx.menuitem35.hint +msgid "https://mcx.space/wiki/?Learn#mcx" +msgstr "https://mcx.space/wiki/?Learn#mcx" + +#: tfmmcx.menuitem36.caption +msgid "MMC Documentation" +msgstr "Documentazione MMC" + +#: tfmmcx.menuitem36.hint +msgid "https://mcx.space/wiki/?Learn#mmc" +msgstr "https://mcx.space/wiki/?Learn#mmc" + +#: tfmmcx.menuitem37.caption +msgid "MCX-CL Documentation" +msgstr "Documentazione MCX-CL" + +#: tfmmcx.menuitem37.hint +msgid "https://mcx.space/wiki/?Learn#mcxcl" +msgstr "https://mcx.space/wiki/?Learn#mcxcl" + +#: tfmmcx.menuitem39.caption +msgid "MCX/MCXCL User Forum (mcx-users)" +msgstr "Forum Utenti MCX/MCXCL (mcx-users)" + +#: tfmmcx.menuitem39.hint +msgid "https://groups.google.com/forum/?hl=en#!forum/mcx-users" +msgstr "https://groups.google.com/forum/?hl=en#!forum/mcx-users" + +#: tfmmcx.menuitem4.caption +msgctxt "tfmmcx.menuitem4.caption" +msgid "Help" +msgstr "Aiuto" + +#: tfmmcx.menuitem40.caption +msgid "MMC User Forum (mmc-users)" +msgstr "Forum Utenti MMC (mmc-users)" + +#: tfmmcx.menuitem40.hint +msgid "https://groups.google.com/forum/?hl=en#!forum/mmc-users" +msgstr "https://groups.google.com/forum/?hl=en#!forum/mmc-users" + +#: tfmmcx.menuitem41.caption +msgid "Iso2Mesh User Forum (iso2mesh-users)" +msgstr "Forum Utenti Iso2Mesh (iso2mesh-users)" + +#: tfmmcx.menuitem41.hint +msgid "https://groups.google.com/forum/?hl=en#!forum/iso2mesh-users" +msgstr "https://groups.google.com/forum/?hl=en#!forum/iso2mesh-users" + +#: tfmmcx.menuitem43.caption +msgid "Download Nightly-Build" +msgstr "Scarica Build Notturna" + +#: tfmmcx.menuitem43.hint +msgid "https://mcx.space/nightly/" +msgstr "https://mcx.space/nightly/" + +#: tfmmcx.menuitem45.caption +msgid "MCX Github" +msgstr "MCX Github" + +#: tfmmcx.menuitem45.hint +msgid "https://github.com/fangq/mcx" +msgstr "https://github.com/fangq/mcx" + +#: tfmmcx.menuitem46.caption +msgid "MMC Github" +msgstr "MMC Github" + +#: tfmmcx.menuitem46.hint +msgid "https://github.com/fangq/mmc" +msgstr "https://github.com/fangq/mmc" + +#: tfmmcx.menuitem47.caption +msgid "MCX-CL Github" +msgstr "MCX-CL Github" + +#: tfmmcx.menuitem47.hint +msgid "https://github.com/fangq/mcxcl" +msgstr "https://github.com/fangq/mcxcl" + +#: tfmmcx.menuitem49.caption +msgid "Report MCX Issues" +msgstr "Segnala Problemi MCX" + +#: tfmmcx.menuitem49.hint +msgid "https://github.com/fangq/mcx/issues" +msgstr "https://github.com/fangq/mcx/issues" + +#: tfmmcx.menuitem50.caption +msgid "Report MMC Issues" +msgstr "Segnala Problemi MMC" + +#: tfmmcx.menuitem50.hint +msgid "https://github.com/fangq/mmc/issues" +msgstr "https://github.com/fangq/mmc/issues" + +#: tfmmcx.menuitem51.caption +msgid "Report MCX-CL Issues" +msgstr "Segnala Problemi MCX-CL" + +#: tfmmcx.menuitem51.hint +msgid "https://github.com/fangq/mcxcl/issues" +msgstr "https://github.com/fangq/mcxcl/issues" + +#: tfmmcx.menuitem53.caption +msgid "MCX GPU Speed Benchmark Database" +msgstr "Database Benchmark Velocità GPU MCX" + +#: tfmmcx.menuitem53.hint +msgid "https://mcx.space/gpubench/" +msgstr "https://mcx.space/gpubench/" + +#: tfmmcx.menuitem55.caption +msgid "Refereces" +msgstr "Riferimenti" + +#: tfmmcx.menuitem56.caption +msgid "[Fang2009] Original MCX Paper" +msgstr "[Fang2009] Articolo MCX Originale" + +#: tfmmcx.menuitem56.hint +msgid "http://www.osapublishing.org/oe/abstract.cfm?uri=oe-17-22-20178" +msgstr "http://www.osapublishing.org/oe/abstract.cfm?uri=oe-17-22-20178" + +#: tfmmcx.menuitem57.caption +msgid "[Fang2010] Original MMC Paper" +msgstr "[Fang2010] Articolo MMC Originale" + +#: tfmmcx.menuitem57.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-1-1-165" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-1-1-165" + +#: tfmmcx.menuitem58.caption +msgid "[Yu2018] Original MCX-CL Paper" +msgstr "[Yu2018] Articolo MCX-CL Originale" + +#: tfmmcx.menuitem58.hint +msgid "https://www.spiedigitallibrary.org/journals/journal-of-biomedical-optics/volume-23/issue-01/010504/Scalable-and-massively-parallel-Monte-Carlo-photon-transport-simulations-for/10.1117/1.JBO.23.1.010504.full?SSO=1#ArticleLink" +msgstr "https://www.spiedigitallibrary.org/journals/journal-of-biomedical-optics/volume-23/issue-01/010504/Scalable-and-massively-parallel-Monte-Carlo-photon-transport-simulations-for/10.1117/1.JBO.23.1.010504.full?SSO=1#ArticleLink" + +#: tfmmcx.menuitem59.caption +msgid "[Fang2011] MMC ray-tracing comparison" +msgstr "[Fang2011] Confronto ray-tracing MMC" + +#: tfmmcx.menuitem59.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-2-5-1258" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-2-5-1258" + +#: tfmmcx.menuitem60.caption +msgid "[Fang2012] SIMD MMC" +msgstr "[Fang2012] SIMD MMC" + +#: tfmmcx.menuitem60.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-3-12-3223" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-3-12-3223" + +#: tfmmcx.menuitem61.caption +msgid "[Yao2016] Widefield MMC" +msgstr "[Yao2016] MMC Campo Ampio" + +#: tfmmcx.menuitem61.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-7-1-171" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-7-1-171" + +#: tfmmcx.menuitem62.caption +msgid "[Yao2018] Jacobians with photon replay" +msgstr "[Yao2018] Jacobiani con ripetizione fotoni" + +#: tfmmcx.menuitem62.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-9-10-4588" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-9-10-4588" + +#: tfmmcx.menuitem63.caption +msgid "[Yan2019] Dual-grid MMC" +msgstr "[Yan2019] MMC Griglia Doppia" + +#: tfmmcx.menuitem63.hint +msgid "https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fdx.doi.org%2F10.1117%2F1.JBO.24.2.020503&data=02%7C01%7Cq.fang%40northeastern.edu%7Cbb8daa56735543068b9c08d697592492%7Ca8eec281aaa34daeac9b9a398b9215e7%7C0%7C0%7C636862806460866013&sdata=2dWyN3eVPwwymydjXEWIHBfVZI43Fcl5zuZ8wiaJ10k%3D&reserved=0" +msgstr "https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fdx.doi.org%2F10.1117%2F1.JBO.24.2.020503&data=02%7C01%7Cq.fang%40northeastern.edu%7Cbb8daa56735543068b9c08d697592492%7Ca8eec281aaa34daeac9b9a398b9215e7%7C0%7C0%7C636862806460866013&sdata=2dWyN3eVPwwymydjXEWIHBfVZI43Fcl5zuZ8wiaJ10k%3D&reserved=0" + +#: tfmmcx.menuitem64.caption +msgid "MCX Main Web" +msgstr "Sito Web Principale MCX" + +#: tfmmcx.menuitem66.caption +msgid "Table of all input flags" +msgstr "Tabella di tutti i flag di input" + +#: tfmmcx.menuitem66.hint +msgid "http://bit.ly/2K0rG4R " +msgstr "http://bit.ly/2K0rG4R " + +#: tfmmcx.menuitem69.caption +msgid "[Fang2019] GPU MMC" +msgstr "[Fang2019] GPU MMC" + +#: tfmmcx.menuitem69.hint +msgid "http://dx.doi.org/10.1117/1.JBO.24.11.115002" +msgstr "http://dx.doi.org/10.1117/1.JBO.24.11.115002" + +#: tfmmcx.menuitem70.caption +msgid "[Brain2Mesh2020] Brain2Mesh brain meshing toolbox" +msgstr "[Brain2Mesh2020] Toolbox meshing cerebrale Brain2Mesh" + +#: tfmmcx.menuitem70.hint +msgid "https://doi.org/10.1117/1.NPh.7.1.015008" +msgstr "https://doi.org/10.1117/1.NPh.7.1.015008" + +#: tfmmcx.menuitem71.caption +msgid "[Yuan2020] PBM over lifespan" +msgstr "[Yuan2020] PBM nel corso della vita" + +#: tfmmcx.menuitem71.hint +msgid "https://doi.org/10.1117/1.NPh.7.1.015009" +msgstr "https://doi.org/10.1117/1.NPh.7.1.015009" + +#: tfmmcx.menuitem72.caption +msgid "[Yuan2021] Implicit MMC (iMMC)" +msgstr "[Yuan2021] MMC Implicito (iMMC)" + +#: tfmmcx.menuitem72.hint +msgid "https://www.osapublishing.org/boe/fulltext.cfm?uri=boe-12-1-147" +msgstr "https://www.osapublishing.org/boe/fulltext.cfm?uri=boe-12-1-147" + +#: tfmmcx.menuitem73.caption +msgid "[Yan2020] SVMC hybrid method" +msgstr "[Yan2020] Metodo ibrido SVMC" + +#: tfmmcx.menuitem73.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-11-11-6262" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-11-11-6262" + +#: tfmmcx.menuitem76.caption +msgid "Open Volume Viewer" +msgstr "Apri Visualizzatore Volume" + +#: tfmmcx.menuitem9.caption +msgctxt "tfmmcx.menuitem9.caption" +msgid "Volume Designer" +msgstr "Designer Volume" + +#: tfmmcx.miclearlog.caption +msgid "Clear Log" +msgstr "Pulisci Log" + +#: tfmmcx.micopy.caption +msgid "Copy selected" +msgstr "Copia selezionato" + +#: tfmmcx.miexportjson.caption +msgid "Export self-contained JSON input file" +msgstr "Esporta file input JSON autonomo" + +#: tfmmcx.miusematlab.caption +msgid "Print MATLAB plotting commands only" +msgstr "Stampa solo comandi plottaggio MATLAB" + +#: tfmmcx.openhistoryfile.title +msgctxt "tfmmcx.openhistoryfile.title" +msgid "Open Photon History File (*.mch)" +msgstr "Apri File Cronologia Fotoni (*.mch)" + +#: tfmmcx.openproject.title +msgid "Open existing project" +msgstr "Apri progetto esistente" + +#: tfmmcx.openvolume.title +msgctxt "tfmmcx.openvolume.title" +msgid "Open Photon History File (*.mch)" +msgstr "Apri File Cronologia Fotoni (*.mch)" + +#: tfmmcx.rbusebench.caption +msgid "Built-in" +msgstr "Integrato" + +#: tfmmcx.rbusedesigner.caption +msgid "User-defined »" +msgstr "Definito dall'utente »" + +#: tfmmcx.rbusefile.caption +msgid "Use Input File (-f)" +msgstr "Usa File di Input (-f)" + +#: tfmmcx.saveproject.title +msgid "Save project as" +msgstr "Salva progetto come" + +#: tfmmcx.sbinfo.panels[0].text +msgid "Status: idle" +msgstr "Stato: inattivo" + +#: tfmmcx.sgconfig.columns[0].title.caption +msgctxt "tfmmcx.sgconfig.columns[0].title.caption" +msgid "Value" +msgstr "Valore" + +#: tfmmcx.sgconfig.hint +msgid "MCXConfig \n\nThis defines the remaining key parameters used in an MCX/MMC\nsimulation.\n" +msgstr "MCXConfig\n\nQuesto definisce i parametri chiave rimanenti usati in una simulazione MCX/MMC.\n" + +#: tfmmcx.sgdet.hint +msgid "DetectorCfg \n\nThis table defines all detectors in the domain. \n\nPlease note that currently MCX/MMC only supports spherical detectors,\ndefined by the [x,y,z] center position and radius (radius).\n\nPlease also note that photon detection only happens before a photon is\nterminated, i.e. when it escapes the exterior bounding box or moving from\na non-zero voxel to a zero voxel. Therefore, a detector's aperature is the\nactual bounding box surface or the surface of the non-zero voxels truncated\nby a sphere centered at [x,y,z] with raidus r.\n\nDetector position is sensitive to the \"Origin from [0 0 0] -z\" flag.\n" +msgstr "DetectorCfg\n\nQuesta tabella definisce tutti i rivelatori nel dominio.\n\nSi prega di notare che attualmente MCX/MMC supporta solo rivelatori sferici, definiti dalla posizione centrale [x,y,z] e raggio.\n\nSi prega anche di notare che la rilevazione di fotoni avviene solo prima che un fotone venga terminato, cioè quando esce dalla bounding box esterna o si sposta da un voxel non-zero a un voxel zero. Pertanto, l'apertura di un rivelatore è la superficie effettiva della bounding box o la superficie dei voxel non-zero troncata da una sfera centrata in [x,y,z] con raggio r.\n\nLa posizione del rivelatore è sensibile al flag \"Origine da [0 0 0] -z\".\n" + +#: tfmmcx.sgmedia.columns[0].title.caption +msgid "μa (1/mm)" +msgstr "μa (1/mm)" + +#: tfmmcx.sgmedia.columns[1].title.caption +msgid "μs (1/mm)" +msgstr "μs (1/mm)" + +#: tfmmcx.sgmedia.columns[2].title.caption +msgid "g (anisotropy)" +msgstr "g (anisotropia)" + +#: tfmmcx.sgmedia.columns[3].title.caption +msgid "n (reflective index)" +msgstr "n (indice rifrattivo)" + +#: tfmmcx.sgmedia.hint +msgid "MediaCfg \n\nThis table defines the optical properties for all needed tissue labels.\n\nThe first row (label 0) is reserved for the background medium - which includes\nthe space outside the bounding box of the volume, as well as any voxels with\na zero-value.\n\nOne can select a row and copy/paste to other rows.\n\nIf more labels are needed, move to the bottom of the table, and press \"down\"\narrow key to create a new row below.\n" +msgstr "MediaCfg\n\nQuesta tabella definisce le proprietà ottiche per tutte le etichette di tessuto necessarie.\n\nLa prima riga (etichetta 0) è riservata per il mezzo di sfondo - che include lo spazio fuori dalla bounding box del volume, così come qualsiasi voxel con valore zero.\n\nSi può selezionare una riga e copiare/incollare su altre righe.\n\nSe servono più etichette, spostarsi in fondo alla tabella, e premere il tasto freccia \"giù\" per creare una nuova riga sotto.\n" + +#: tfmmcx.shapeaddbox.caption +msgid "Box" +msgstr "Scatola" + +#: tfmmcx.shapeaddbox.hint +msgid "Add a 3D box (using the center of the voxels - i.e. add 0.5 in all directions)" +msgstr "Aggiungi una scatola 3D (usando il centro dei voxel - cioè aggiungi 0.5 in tutte le direzioni)" + +#: tfmmcx.shapeaddcylinder.caption +msgid "Cylinder" +msgstr "Cilindro" + +#: tfmmcx.shapeaddcylinder.hint +msgid "Add a cylinder" +msgstr "Aggiungi un cilindro" + +#: tfmmcx.shapeaddgrid.caption +msgid "Grid" +msgstr "Griglia" + +#: tfmmcx.shapeaddgrid.hint +msgid "Define a uniform grid as the simulation space" +msgstr "Definisci una griglia uniforme come spazio di simulazione" + +#: tfmmcx.shapeaddname.caption +msgid "Name" +msgstr "Nome" + +#: tfmmcx.shapeaddname.hint +msgid "Define a name for the domain" +msgstr "Definisci un nome per il dominio" + +#: tfmmcx.shapeaddorigin.caption +msgid "Origin" +msgstr "Origine" + +#: tfmmcx.shapeaddorigin.hint +msgid "Define the origin for subsequent objects" +msgstr "Definisci l'origine per oggetti successivi" + +#: tfmmcx.shapeaddsphere.caption +msgid "Sphere" +msgstr "Sfera" + +#: tfmmcx.shapeaddsphere.hint +msgid "Add a 3D sphere" +msgstr "Aggiungi una sfera 3D" + +#: tfmmcx.shapeaddsubgrid.caption +msgid "Subgrid" +msgstr "Sottogiglia" + +#: tfmmcx.shapeaddsubgrid.hint +msgid "Add a 3D box (using the lower-corner of the voxel)" +msgstr "Aggiungi una scatola 3D (usando l'angolo inferiore del voxel)" + +#: tfmmcx.shapeaddupperspace.caption +msgid "Upper" +msgstr "Superiore" + +#: tfmmcx.shapeaddupperspace.hint +msgid "Add an upper-space defined by a linear inequality" +msgstr "Aggiungi uno spazio superiore definito da una disuguaglianza lineare" + +#: tfmmcx.shapeaddxlayers.caption +msgid "XLayers" +msgstr "StratiX" + +#: tfmmcx.shapeaddxlayers.hint +msgid "Add a layered structure along x-axis" +msgstr "Aggiungi una struttura stratificata lungo l'asse x" + +#: tfmmcx.shapeaddxslabs.caption +msgid "XSlabs" +msgstr "LastreX" + +#: tfmmcx.shapeaddxslabs.hint +msgid "Add a slab along x-axis" +msgstr "Aggiungi una lastra lungo l'asse x" + +#: tfmmcx.shapeaddylayers.caption +msgid "YLayers" +msgstr "StratiY" + +#: tfmmcx.shapeaddylayers.hint +msgid "Add a layered structure along y-axis" +msgstr "Aggiungi una struttura stratificata lungo l'asse y" + +#: tfmmcx.shapeaddyslabs.caption +msgid "YSlabs" +msgstr "LastreY" + +#: tfmmcx.shapeaddyslabs.hint +msgid "Add a slab along y-axis" +msgstr "Aggiungi una lastra lungo l'asse y" + +#: tfmmcx.shapeaddzlayers.caption +msgid "ZLayers" +msgstr "StratiZ" + +#: tfmmcx.shapeaddzlayers.hint +msgid "Add a layered structure along z-axis" +msgstr "Aggiungi una struttura stratificata lungo l'asse z" + +#: tfmmcx.shapeaddzslabs.caption +msgid "ZSlabs" +msgstr "LastreZ" + +#: tfmmcx.shapeaddzslabs.hint +msgid "Add a slab along z-axis" +msgstr "Aggiungi una lastra lungo l'asse z" + +#: tfmmcx.shapedelete.caption +msgctxt "tfmmcx.shapedelete.caption" +msgid "Delete" +msgstr "Elimina" + +#: tfmmcx.shapedelete.hint +msgid "Delete selected object" +msgstr "Elimina oggetto selezionato" + +#: tfmmcx.shapeedit.caption +msgid "Edit" +msgstr "Modifica" + +#: tfmmcx.shapepreview.caption +msgctxt "tfmmcx.shapepreview.caption" +msgid "Preview" +msgstr "Anteprima" + +#: tfmmcx.shapepreview.hint +msgctxt "tfmmcx.shapepreview.hint" +msgid "Preview" +msgstr "Anteprima" + +#: tfmmcx.shapeprint.caption +msgid "Print" +msgstr "Stampa" + +#: tfmmcx.shapeprint.hint +msgid "Print selected object" +msgstr "Stampa oggetto selezionato" + +#: tfmmcx.shapereset.caption +msgctxt "tfmmcx.shapereset.caption" +msgid "Reset" +msgstr "Reimposta" + +#: tfmmcx.shapereset.hint +msgid "Reset to a 60x60x60 homogeneous cubic domain" +msgstr "Reimposta a un dominio cubico omogeneo 60x60x60" + +#: tfmmcx.statictext1.caption +msgid "Additional Settings" +msgstr "Impostazioni Aggiuntive" + +#: tfmmcx.statictext2.caption +msgid "Media Settings" +msgstr "Impostazioni Media" + +#: tfmmcx.statictext3.caption +msgid "Detector Settings (in voxel unit)" +msgstr "Impostazioni Rivelatore (in unità voxel)" + +#: tfmmcx.tabinputdata.caption +msgid "Simulation Designer" +msgstr "Designer Simulazione" + +#: tfmmcx.tabvolumedesigner.caption +msgctxt "tfmmcx.tabvolumedesigner.caption" +msgid "Volume Designer" +msgstr "Designer Volume" + +#: tfmmcx.tbtverify.caption +msgid "Validate" +msgstr "Valida" + +#: tfmmcx.toolbar1.caption +msgid "MCX Ribon" +msgstr "Barra Multifunzione MCX" + +#: tfmmcx.toolbar2.caption +msgid "ToolBar2" +msgstr "ToolBar2" + +#: tfmmcx.toolbar3.caption +msgid "ToolBar3" +msgstr "ToolBar3" + +#: tfmmcx.toolbutton11.caption +msgid "Plot ▾" +msgstr "Plotta ▾" + +#: tfmmcx.toolbutton11.hint +msgid "Plot MCX output data" +msgstr "Plotta dati output MCX" + +#: tfmmcx.toolbutton12.caption +msgid "ToolButton12" +msgstr "ToolButton12" + +#: tfmmcx.toolbutton13.caption +msgid "ToolButton13" +msgstr "ToolButton13" + +#: tfmmcx.toolbutton17.caption +msgid "ToolButton17" +msgstr "ToolButton17" + +#: tfmmcx.toolbutton35.caption +msgid "ToolButton35" +msgstr "ToolButton35" + +#: tfmmcx.toolbutton39.hint +msgid "Reset volume and define a different dimension" +msgstr "Reimposta volume e definisci una dimensione diversa" + +#: tfmmcx.toolbutton5.caption +msgid "ToolButton5" +msgstr "ToolButton5" + +#: tfmmcx.toolbutton7.caption +msgctxt "tfmmcx.toolbutton7.caption" +msgid "Reset" +msgstr "Reimposta" + +#: tfmmcx.toolbutton8.caption +msgctxt "tfmmcx.toolbutton8.caption" +msgid "ToolButton8" +msgstr "ToolButton8" + +#: tfmmcx.toolbutton9.caption +msgid "Help ▾" +msgstr "Aiuto ▾" + +#: tfmmcx.toolbutton9.hint +msgctxt "tfmmcx.toolbutton9.hint" +msgid "Browse help information" +msgstr "Sfoglia informazioni di aiuto" + +#: tfmmcx.tvshapes.hint +msgctxt "tfmmcx.tvshapes.hint" +msgid "ShapeCfg" +msgstr "ShapeCfg" + +#: tfmmcx.vlbc.hint +msgid "Boundary \n\nUsing this box to set the boundary condition for each one of the 6\nfacets on the bounding box. A total of 4 boundary conditions are\nsupported:\n\n1. total absorbing BC: photon hiting the boundary are terminated\n2. Fresnel reflection BC: perform Fresnel reflection/transmission\n3. mirror/total reflection BC: photon is 100% reflected (can run a long time)\n4. cylic BC: a photon exiting from a facet will re-enter from the opposite one\n" +msgstr "Confine\n\nUsare questa casella per impostare la condizione di confine per ognuna delle 6 facce sulla bounding box. Un totale di 4 condizioni di confine sono supportate:\n\n1. BC ad assorbimento totale: i fotoni che colpiscono il confine vengono terminati\n2. BC di riflessione di Fresnel: eseguire riflessione/trasmissione di Fresnel\n3. BC di riflessione speculare/totale: il fotone è riflesso al 100% (può eseguire per molto tempo)\n4. BC ciclico: un fotone che esce da una faccia rientrerà da quella opposta\n" + +#: tfmnewsession.btcancel.caption +msgctxt "tfmnewsession.btcancel.caption" +msgid "Cancel" +msgstr "Annulla" + +#: tfmnewsession.btok.caption +msgctxt "tfmnewsession.btok.caption" +msgid "OK" +msgstr "OK" + +#: tfmnewsession.caption +msgid "Create A New Simulation" +msgstr "Crea Una Nuova Simulazione" + +#: tfmnewsession.edsession.hint +msgctxt "tfmnewsession.edsession.hint" +msgid "Session" +msgstr "Sessione" + +#: tfmnewsession.grprogram.caption +msgctxt "tfmnewsession.grprogram.caption" +msgid "Run Monte Carlo simulation with" +msgstr "Esegui simulazione Monte Carlo con" + +#: tfmnewsession.grprogram.hint +msgid "Program" +msgstr "Programma" + +#: tfmnewsession.label4.caption +msgid "Please type in a unique session name" +msgstr "Si prega di digitare un nome sessione unico" + +#: tfmnewsession.label4.hint +msgctxt "tfmnewsession.label4.hint" +msgid "-s (--sessionid)" +msgstr "-s (--sessionid)" + +#: tfmshapeeditor.btcancel.caption +msgctxt "tfmshapeeditor.btcancel.caption" +msgid "Cancel" +msgstr "Annulla" + +#: tfmshapeeditor.btok.caption +msgctxt "tfmshapeeditor.btok.caption" +msgid "OK" +msgstr "OK" + +#: tfmshapeeditor.caption +msgid "Edit Shapes" +msgstr "Modifica Forme" + +#: tfmsource.btcancel.caption +msgctxt "tfmsource.btcancel.caption" +msgid "Cancel" +msgstr "Annulla" + +#: tfmsource.btok.caption +msgctxt "tfmsource.btok.caption" +msgid "OK" +msgstr "OK" + +#: tfmsource.caption +msgid "Light Source Settings" +msgstr "Impostazioni Sorgente Luminosa" + +#: tfmsource.edsource.text +msgid "pencil" +msgstr "matita" + +#: tfmsource.label4.caption +msgid "Please select a light source type:" +msgstr "Si prega di selezionare un tipo di sorgente luminosa:" + +#: tfmsource.label5.caption +msgid "Please define source parameters:" +msgstr "Si prega di definire parametri sorgente:" + +#: tfmstop.caption +msgid "Running ..." +msgstr "In esecuzione ..." + +#: tfmstop.toolbar1.caption +msgid "Running" +msgstr "In esecuzione" + +#: tfmstop.toolbutton3.caption +msgid "Hide" +msgstr "Nascondi" + +#: tfmstop.toolbutton3.hint +msgid "Hide this window" +msgstr "Nascondi questa finestra" + +#: tfmstop.toolbutton8.caption +msgctxt "tfmstop.toolbutton8.caption" +msgid "ToolButton8" +msgstr "ToolButton8" + +#: tfmviewer.btbackground.hint +msgctxt "tfmviewer.btbackground.hint" +msgid "Change Background Color" +msgstr "Cambia Colore di Sfondo" + +#: tfmviewer.btopaque.caption +msgid "btOpaque" +msgstr "btOpaque" + +#: tfmviewer.btopaque.hint +msgid "Show Opaque Hull" +msgstr "Mostra Scafo Opaco" + +#: tfmviewer.caption +msgid "MCX Studio Volume Renderer" +msgstr "Renderer Volume MCX Studio" + +#: tfmviewer.grdir.caption +msgid "Slicing direction" +msgstr "Direzione taglio" + +#: tfmviewer.label1.caption +msgid "Rendering quality" +msgstr "Qualità rendering" + +#: tfmviewer.label2.caption +msgid "Cutting plane position:" +msgstr "Posizione piano taglio:" + +#: tfmviewer.label3.caption +msgid "Invisible threshold" +msgstr "Soglia invisibile" + +#: tfmviewer.label4.caption +msgid "Color level" +msgstr "Livello colore" + +#: tfmviewer.mcxplotexit.caption +msgctxt "tfmviewer.mcxplotexit.caption" +msgid "Exit" +msgstr "Esci" + +#: tfmviewer.mcxplotexit.hint +msgctxt "tfmviewer.mcxplotexit.hint" +msgid "Exit" +msgstr "Esci" + +#: tfmviewer.mcxplotopen.caption +msgid "Open File" +msgstr "Apri File" + +#: tfmviewer.mcxplotopen.hint +msgid "Open Data File" +msgstr "Apri File Dati" + +#: tfmviewer.mcxplotrefresh.caption +msgctxt "tfmviewer.mcxplotrefresh.caption" +msgid "Refresh" +msgstr "Aggiorna" + +#: tfmviewer.mcxplotrefresh.hint +msgctxt "tfmviewer.mcxplotrefresh.hint" +msgid "Refresh" +msgstr "Aggiorna" + +#: tfmviewer.mcxplotresetcamera.caption +msgctxt "tfmviewer.mcxplotresetcamera.caption" +msgid "Reset" +msgstr "Reimposta" + +#: tfmviewer.mcxplotsavescreen.caption +msgctxt "tfmviewer.mcxplotsavescreen.caption" +msgid "Save Screen" +msgstr "Salva Schermata" + +#: tfmviewer.mcxplotsavescreen.hint +msgid "Save screenshot" +msgstr "Salva screenshot" + +#: tfmviewer.mcxplotshowbbx.caption +msgctxt "tfmviewer.mcxplotshowbbx.caption" +msgid "Show Bounding Box" +msgstr "Mostra Riquadro Delimitatore" + +#: tfmviewer.mcxplotshowbbx.hint +msgctxt "tfmviewer.mcxplotshowbbx.hint" +msgid "Show Bounding Box" +msgstr "Mostra Riquadro Delimitatore" + +#: tfmviewer.mcxplotusecolor.caption +msgid "Pseudocolor" +msgstr "Pseudocolore" + +#: tfmviewer.mcxplotusecolor.hint +msgid "Use Pseudocolor" +msgstr "Usa Pseudocolore" + +#: tfmviewer.toolbar1.caption +msgctxt "tfmviewer.toolbar1.caption" +msgid "ToolBar1" +msgstr "ToolBar1" + +#: tfmviewer.toolbutton10.caption +msgid "ToolButton10" +msgstr "ToolButton10" + +#: tfmviewer.toolbutton4.hint +msgid "Reset 3D View" +msgstr "Reimposta Vista 3D" + +#: tfmviewer.toolbutton9.caption +msgctxt "tfmviewer.toolbutton9.caption" +msgid "ToolButton9" +msgstr "ToolButton9" diff --git a/mcxstudio/i18n/mcxstudio.ja.po b/mcxstudio/i18n/mcxstudio.ja.po new file mode 100644 index 00000000..b0321b61 --- /dev/null +++ b/mcxstudio/i18n/mcxstudio.ja.po @@ -0,0 +1,1994 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: 2025-09-27\n" +"PO-Revision-Date: 2025-09-27\n" +"Last-Translator: Qianqian Fang\n" +"Language-Team: MCX Developers\n" +"Language: ja_JP\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 3.0.1\n" + + +#: tfmabout.button1.caption +msgctxt "tfmabout.button1.caption" +msgid "OK" +msgstr "OK" + +#: tfmabout.caption +msgid "About Monte Carlo eXtreme Studio" +msgstr "モンテカルロエクストリームスタジオについて" + +#: tfmabout.image3.hint +msgctxt "tfmabout.image3.hint" +msgid "About MCX" +msgstr "MCXについて" + +#: tfmconfig.btcancel.caption +msgctxt "tfmconfig.btcancel.caption" +msgid "Cancel" +msgstr "キャンセル" + +#: tfmconfig.btok.caption +msgctxt "tfmconfig.btok.caption" +msgid "OK" +msgstr "OK" + +#: tfmconfig.caption +msgid "MCX Studio Config" +msgstr "MCXスタジオ設定" + +#: tfmconfig.ckusemanualpath.caption +msgid "Use Manual Paths" +msgstr "手動パスを使用" + +#: tfmconfig.edlocalpath.columns[0].title.caption +msgctxt "tfmconfig.edlocalpath.columns[0].title.caption" +msgid "Value" +msgstr "値" + +#: tfmconfig.edscppath.hint +msgctxt "tfmconfig.edscppath.hint" +msgid "Local SCP Executable Path" +msgstr "ローカルSCP実行ファイルパス" + +#: tfmconfig.edsshpath.hint +msgid "Local SSH Path" +msgstr "ローカルSSHパス" + +#: tfmconfig.edworkpath.text +msgid "%MCXSTUDIO%/MCXOutput" +msgstr "%MCXSTUDIO%/MCXOutput" + +#: tfmconfig.groupbox2.caption +msgid "MCXStudio Local Output Root Directory" +msgstr "MCXスタジオローカル出力ルートディレクトリ" + +#: tfmconfig.groupbox3.caption +msgid "Remote MCX/MMC/MCXCl Executable Search Paths" +msgstr "リモートMCX/MMC/MCXCl実行ファイル検索パス" + +#: tfmconfig.groupbox4.caption +msgid "Local MCX/MMC/MCXCl Executable Search Paths" +msgstr "ローカルMCX/MMC/MCXCl実行ファイル検索パス" + +#: tfmconfig.groupbox5.caption +msgid "Local SSH Executable Path" +msgstr "ローカルSSH実行ファイルパス" + +#: tfmconfig.groupbox6.caption +msgctxt "tfmconfig.groupbox6.caption" +msgid "Local SCP Executable Path" +msgstr "ローカルSCP実行ファイルパス" + +#: tfmconfig.groupbox7.caption +msgid "Remote MCX/MMC/MCXCl Output Directory" +msgstr "リモートMCX/MMC/MCXCl出力ディレクトリ" + +#: tfmconfig.groupbox8.caption +msgid "Remote GPU Server" +msgstr "リモートGPUサーバー" + +#: tfmconfig.label1.caption +msgid "Hostname or IP" +msgstr "ホスト名またはIP" + +#: tfmconfig.label2.caption +msgid "Port" +msgstr "ポート" + +#: tfmconfig.label3.caption +msgid "User name" +msgstr "ユーザー名" + +#: tfmdatafile.btcancel.caption +msgctxt "tfmdatafile.btcancel.caption" +msgid "Cancel" +msgstr "キャンセル" + +#: tfmdatafile.btok.caption +msgctxt "tfmdatafile.btok.caption" +msgid "OK" +msgstr "OK" + +#: tfmdatafile.caption +msgid " Data File Properties" +msgstr "データファイルプロパティ" + +#: tfmdatafile.eddataformat.text +msgid "Float (32bit)" +msgstr "浮動小数点 (32ビット)" + +#: tfmdatafile.label10.caption +msgid "Data File" +msgstr "データファイル" + +#: tfmdatafile.label4.caption +msgid "Y Dimension" +msgstr "Y次元" + +#: tfmdatafile.label5.caption +msgid "X Dimension" +msgstr "X次元" + +#: tfmdatafile.label6.caption +msgid "Z Dimension" +msgstr "Z次元" + +#: tfmdatafile.label7.caption +msgctxt "tfmdatafile.label7.caption" +msgid "Time Gates" +msgstr "タイムゲート" + +#: tfmdatafile.label8.caption +msgctxt "tfmdatafile.label8.caption" +msgid "Time Gates" +msgstr "タイムゲート" + +#: tfmdatafile.label9.caption +msgid "Header Size" +msgstr "ヘッダーサイズ" + +#: tfmdomain.acexit.caption +msgid "acExit" +msgstr "acExit" + +#: tfmdomain.acexit.hint +msgctxt "tfmdomain.acexit.hint" +msgid "Exit" +msgstr "終了" + +#: tfmdomain.achidebbx.caption +msgid "acHideBBX" +msgstr "acHideBBX" + +#: tfmdomain.achidebbx.hint +msgid "Hide Domain Box" +msgstr "ドメインボックスを非表示" + +#: tfmdomain.acloadjson.caption +msgid "acLoadJSON" +msgstr "acLoadJSON" + +#: tfmdomain.acloadjson.hint +msgid "Load JSON" +msgstr "JSON読み込み" + +#: tfmdomain.acrender.caption +msgid "acRender" +msgstr "acRender" + +#: tfmdomain.acrender.hint +msgid "Render" +msgstr "レンダリング" + +#: tfmdomain.acresetcamera.caption +msgid "acResetCamera" +msgstr "acResetCamera" + +#: tfmdomain.acresetcamera.hint +msgid "Reset Camera" +msgstr "カメラリセット" + +#: tfmdomain.acsaveimage.caption +msgid "acSaveImage" +msgstr "acSaveImage" + +#: tfmdomain.acsaveimage.hint +msgctxt "tfmdomain.acsaveimage.hint" +msgid "Save Screen" +msgstr "画面保存" + +#: tfmdomain.acsavejson.caption +msgid "acSaveJSON" +msgstr "acSaveJSON" + +#: tfmdomain.acsavejson.hint +msgid "Save JSON" +msgstr "JSON保存" + +#: tfmdomain.btbackground.hint +msgctxt "tfmdomain.btbackground.hint" +msgid "Change Background Color" +msgstr "背景色変更" + +#: tfmdomain.btpin.caption +msgid "Pin Editor" +msgstr "エディター固定" + +#: tfmdomain.btpin.hint +msgid "Show editor" +msgstr "エディター表示" + +#: tfmdomain.caption +msgid "MCX Domain Renderer" +msgstr "MCXドメインレンダラー" + +#: tfmdomain.toolbar1.caption +msgctxt "tfmdomain.toolbar1.caption" +msgid "ToolBar1" +msgstr "ToolBar1" + +#: tfmdomain.toolbutton11.caption +msgid "ToolButton11" +msgstr "ToolButton11" + +#: tfmdomain.toolbutton7.caption +msgid "ToolButton7" +msgstr "ToolButton7" + +#: tfmdomain.toolbutton9.caption +msgctxt "tfmdomain.toolbutton9.caption" +msgid "ToolButton9" +msgstr "ToolButton9" + +#: tfmmcx.btexpandoutput.caption +msgid "â–µ" +msgstr "â–µ" + +#: tfmmcx.btexpandoutput.hint +msgid "To expand or collapse the command window." +msgstr "コマンドウィンドウを展開または縮小します。" + +#: tfmmcx.btgbexpand.caption +msgid "▾" +msgstr "▾" + +#: tfmmcx.btloadseed.hint +msgid "Load seed data from previous simulations for replay" +msgstr "再現のため以前のシミュレーションからシードデータを読み込み" + +#: tfmmcx.btsendcmd.caption +msgid "Send" +msgstr "送信" + +#: tfmmcx.btsendcmd.hint +msgid "Send the user input to the input buffer of the external program \ncurrently being executed.\n" +msgstr "現在実行中の外部プログラムの入力バッファにユーザー入力を送信します。\n" + +#: tfmmcx.button2.caption +msgid "Clear Output" +msgstr "出力クリア" + +#: tfmmcx.caption +msgid "MCX Studio" +msgstr "MCXスタジオ" + +#: tfmmcx.ckautopilot.caption +msgid "Let MCX decide thread/block size (-A)" +msgstr "MCXにスレッド/ブロックサイズを決定させる (-A)" + +#: tfmmcx.ckautopilot.hint +msgid "Autopilot \n\nChecking this box tells MCX/MMC to automatically determine the \"optimal\"\nthread number and block size by using the hardware information.\n\nIt is recommended to always check this box. The key to maximize simulation\nthroughput is to ensure a large number of threads are launched to keep the\nhardware resources fully utilized.\n" +msgstr "オートパイロット\n\nこのボックスをチェックすると、MCX/MMCにハードウェア情報を使用して「最適な」スレッド数とブロックサイズを自動的に決定するよう指示します。\n\n常にこのボックスをチェックすることが推奨されます。シミュレーションスループットを最大化する鍵は、ハードウェアリソースを完全に活用するために大量のスレッドが起動されることを確実にすることです。\n" + +#: tfmmcx.ckbdebug.hint +msgctxt "tfmmcx.ckbdebug.hint" +msgid "DebugFlags" +msgstr "DebugFlags" + +#: tfmmcx.ckbdet.hint +msgid "SaveDetFlag \n\nThis checkbox list allows users to select the detected photon\ndata items that they want to save in the .mch file.\n\nBy default, only the Detector ID and Partial Pathlength are stored.\n" +msgstr "SaveDetFlag\n\nこのチェックボックスリストは、ユーザーが.mchファイルに保存したい検出光子データ項目を選択できます。\n\nデフォルトでは、検出器IDと部分パス長のみが保存されます。\n" + +#: tfmmcx.ckdoremote.caption +msgid "Run remote command:" +msgstr "リモートコマンド実行:" + +#: tfmmcx.ckdoremote.hint +msgid "DoRemote \n\nCheck this option asks MCXStudio to call the specified ssh command \nand run mcx/mmc simulations on remote servers. \n\nPlease be aware that one must prepare the server and client to enable\nremote execution, this include\n\n1. install mcx/mmc/mcxcl executable on remote server and add path to\n the PATH environment \n2. install ssh client on the local client; for Linux/Mac, ssh/scp command is\n typically built-in; for windows, please install plink.exe and pscp.exe and\n ensure that their paths are on the PATH environment variable\n3. optionally, one can set the SSH key between the client and server to \n avoid typing password, please see http://www.linuxproblem.org/art_9.html\n" +msgstr "DoRemote\n\nこのオプションをチェックすると、MCXスタジオに指定されたsshコマンドを呼び出し、リモートサーバーでmcx/mmcシミュレーションを実行するよう要求します。\n\nリモート実行を有効にするには、サーバーとクライアントを準備する必要があることにご注意ください。これには以下が含まれます:\n\n1. リモートサーバーにmcx/mmc/mcxcl実行ファイルをインストールし、PATH環境変数にパスを追加\n2. ローカルクライアントにsshクライアントをインストール;Linux/Macの場合、ssh/scpコマンドは通常組み込まれています;Windowsの場合、plink.exeとpscp.exeをインストールし、それらのパスがPATH環境変数にあることを確認してください\n3. オプションで、パスワード入力を避けるためにクライアントとサーバー間でSSHキーを設定できます。http://www.linuxproblem.org/art_9.html を参照してください\n" + +#: tfmmcx.ckdoreplay.caption +msgid "Replay" +msgstr "リプレイ" + +#: tfmmcx.ckdoreplay.hint +msgid "DoReplay \n\nWhen selecting a .mch file as the seed, this checkbox is automatically \nchecked, signifying that MCX/MMC will perform a photon replay by\nreading the RNG seeds from the .mch file and rerun the photons to produce\nthe Jacobians - in such case, one can use the \"Output Type\" to select which\nmetric to output.\n" +msgstr "DoReplay\n\nシードとして.mchファイルを選択すると、このチェックボックスが自動的にチェックされ、MCX/MMCが.mchファイルからRNGシードを読み取り、光子を再実行してヤコビアンを生成する光子リプレイを実行することを示します - この場合、「出力タイプ」を使用してどのメトリックを出力するかを選択できます。\n" + +#: tfmmcx.cklockgpu.caption +msgid "Lock GPU" +msgstr "GPUロック" + +#: tfmmcx.cklockgpu.hint +msgid "Checking this box prevents MCXStudio from updating the device list\nwhen switching between different simulation sessions.\n\nWhen running simulation on a remote server, it is recommended to\nlock the GPU to avoid resetting of the device list.\n" +msgstr "このボックスをチェックすると、異なるシミュレーションセッション間を切り替える際にMCXスタジオがデバイスリストを更新するのを防ぎます。\n\nリモートサーバーでシミュレーションを実行する場合、デバイスリストのリセットを避けるためにGPUをロックすることが推奨されます。\n" + +#: tfmmcx.cknormalize.caption +msgid "Do normalization (-U)" +msgstr "正規化実行 (-U)" + +#: tfmmcx.cknormalize.hint +msgid "DoNormalize \n\nCheck this option allows MCX/MMC to normalize the output by the \nbelow formula\n\nΦ(i,j,k,t)=E(i,j,k,t) / (V*E_total*dT)\n\nwhere E(i,j,k,t) is the raw accummuated energy at each voxel; \nV is the size of the voxel in mm^3; dT is the time-gate width in s.\n\nAfter normalization, the result becomes TPSF or Green's function.\n\nUnchecking this option disables normalization.\n" +msgstr "DoNormalize\n\nこのオプションをチェックすると、MCX/MMCが以下の式で出力を正規化できます:\n\nΦ(i,j,k,t)=E(i,j,k,t) / (V*E_total*dT)\n\nここで E(i,j,k,t) は各ボクセルでの生の蓄積エネルギー;V はボクセルのサイズ(mm^3);dT はタイムゲート幅(s)です。\n\n正規化後、結果はTPSFまたはグリーン関数になります。\n\nこのオプションのチェックを外すと正規化が無効になります。\n" + +#: tfmmcx.ckreflect.caption +msgid "Do reflection all boundaries (-b)" +msgstr "すべての境界で反射実行 (-b)" + +#: tfmmcx.ckreflect.hint +msgid "DoReflect \n\nCheck this option (by default) enables reflection/refrection calculations \nwhen refractive index mismatch is detected at tissue boundaries.\n\nIf this option is unchecked, any photon hits the boundary between a \nnon-zero and zero-valued voxel will be terminated (i.e. total\nabsorbtion boundary condition). \n\nThe medium outside of the volume bounding box is assumed to have \nthe optical properties defined as label 0 (the first row in the Media Settings\ntable on the right).\n" +msgstr "DoReflect\n\nこのオプション(デフォルト)をチェックすると、組織境界で屈折率の不一致が検出されたときに反射/屈折計算が有効になります。\n\nこのオプションがチェックされていない場合、非ゼロとゼロ値ボクセル間の境界に当たる光子は終了されます(つまり、全吸収境界条件)。\n\nボリューム境界ボックス外の媒質は、ラベル0として定義された光学特性を持つと仮定されます(右側の媒質設定テーブルの最初の行)。\n" + +#: tfmmcx.cksavedata.caption +msgid "Save fluence (-S)" +msgstr "フルエンス保存 (-S)" + +#: tfmmcx.cksavedata.hint +msgid "DoSave \n\nChecking this option makes MCX/MMC outputs the volumetric fluence\ndata: for MCX, it is the .mc2/.nii file; for MMC, it is a .dat file using P/H/B/S \nray-tracers and .mc2/.nii files when using the dual-grid mode (-M G).\n\nUnchecking this option stops MCX/MMC output the .mc2/.nii file.\n" +msgstr "DoSave\n\nこのオプションをチェックすると、MCX/MMCが体積フルエンスデータを出力します:MCXの場合は.mc2/.niiファイル;MMCの場合、P/H/B/Sレイトレーサーを使用する場合は.datファイル、デュアルグリッドモード(-M G)を使用する場合は.mc2/.niiファイルです。\n\nこのオプションのチェックを外すと、MCX/MMCの.mc2/.niiファイル出力が停止します。\n" + +#: tfmmcx.cksavedetector.caption +msgid "Save detected photons (-d)" +msgstr "検出光子保存 (-d)" + +#: tfmmcx.cksavedetector.hint +msgid "SaveDetector \n\nChecking this option allows one to store detected photon \ninformation. The output data records can be user-defined by\nselecting the check-box list entitled \"Save detected photon\".\nThe output data are stored in a .mch file.\n\nUnchecking this option disables output the .mch file (can be \nslightly faster).\n" +msgstr "SaveDetector\n\nこのオプションをチェックすると、検出光子情報を保存できます。出力データレコードは、「検出光子保存」というタイトルのチェックボックスリストを選択することでユーザー定義できます。出力データは.mchファイルに保存されます。\n\nこのオプションのチェックを外すと.mchファイルの出力が無効になります(わずかに高速になる可能性があります)。\n" + +#: tfmmcx.cksavemask.caption +msgid "Save volume mask (-M)" +msgstr "ボリュームマスク保存 (-M)" + +#: tfmmcx.cksavemask.hint +msgid "DoSaveMask \n\nChecking this option asks MCX to output the pre-processed volume \nmasks. The preprocessed mask contains the voxels that are covered\nunder detectors; these voxels are designated by setting the sign-bit \nas 1. One can visualize this dumped data mask using mcxplotvol.m\n\nUnchecking this option suppresses the output of this mask file.\n" +msgstr "DoSaveMask\n\nこのオプションをチェックすると、MCXに前処理されたボリュームマスクを出力するよう要求します。前処理マスクには検出器の下でカバーされるボクセルが含まれており;これらのボクセルは符号ビットを1に設定することで指定されます。mcxplotvol.mを使用してこのダンプされたデータマスクを可視化できます。\n\nこのオプションのチェックを外すと、このマスクファイルの出力が抑制されます。\n" + +#: tfmmcx.cksaveref.caption +msgid "Save diffuse reflectance (-X)" +msgstr "拡散反射率保存 (-X)" + +#: tfmmcx.cksaveref.hint +msgid "DoSaveRef \n\nChecking this option allows MCX/MMC to output the escaped photon\nweights on the exterior surface of the domain. For MCX, to save the \ntotal diffuse reflectance, one must pad a layer of zero voxels in the \nfacet or full bounding box of the domain to store such data. The raw \ntotal diffuse reflectance are normalized and stored as negative values\nin the .mc2/.nii file. When loading such file using loadmc2.m, the diffuse\nreflectance data are extracted and converted to positive output.\n\nUnchecking this option disables saving diffuse reflectance data.\n" +msgstr "DoSaveRef\n\nこのオプションをチェックすると、MCX/MMCがドメインの外表面で逃げた光子の重みを出力できます。MCXでは、総拡散反射率を保存するために、そのようなデータを保存するためにドメインの面または完全な境界ボックスにゼロボクセルの層をパッドする必要があります。生の総拡散反射率は正規化され、.mc2/.niiファイルに負の値として保存されます。loadmc2.mを使用してそのようなファイルを読み込むと、拡散反射率データが抽出され、正の出力に変換されます。\n\nこのオプションのチェックを外すと、拡散反射率データの保存が無効になります。\n" + +#: tfmmcx.cksaveseed.caption +msgid "Save photon seeds (-q)" +msgstr "光子シード保存 (-q)" + +#: tfmmcx.cksaveseed.hint +msgid "DoSaveSeed \n\nChecking this option allows one to save the RNG seeds of the detected\nphotons in the .mch file. This makes it possible to perform photon replay\nto compute the Jacobian when feeding this output .mch file as the seed\nfor the replay run.\n\nUnchecking this option disables saving photon seeds.\n" +msgstr "DoSaveSeed\n\nこのオプションをチェックすると、検出光子のRNGシードを.mchファイルに保存できます。これにより、この出力.mchファイルをリプレイ実行のシードとして供給する際に、ヤコビアンを計算するための光子リプレイを実行できます。\n\nこのオプションのチェックを外すと、光子シードの保存が無効になります。\n" + +#: tfmmcx.cksharedfs.caption +msgid "Shared file system" +msgstr "共有ファイルシステム" + +#: tfmmcx.cksharedfs.hint +msgid "DoSharedFS \n\nChecking this option suggests that both the client and the server\nshare the same file system, thus, no file copying is needed. In other\nword, the folder structure to read/write on both client and server\nare identical. This is the case when one uses nfs/autofs on Linux/Mac.\n" +msgstr "DoSharedFS\n\nこのオプションをチェックすると、クライアントとサーバーが同じファイルシステムを共有しているため、ファイルコピーが不要であることを示します。つまり、クライアントとサーバー両方での読み書きのフォルダー構造が同一です。これはLinux/Macでnfs/autofsを使用する場合です。\n" + +#: tfmmcx.ckshowprogress.caption +msgid "Show progress bar" +msgstr "プログレスバー表示" + +#: tfmmcx.ckshowprogress.hint +msgid "ShowProgress \n\n(This option is highly experimental, use with caution, may cause hanging on some GPUs)\n\nCheck this option to let MCX/MMC to print a progress bar during the\nGPU simulation. In some hardware, this may cause unstable behaviors\nsuch as stalling or never return even the simulation is complete. If such\nbehavior is detected, please uncheck this option.\n" +msgstr "ShowProgress\n\n(このオプションは高度に実験的であり、注意して使用してください。一部のGPUでハングを引き起こす可能性があります)\n\nこのオプションをチェックして、MCX/MMCがGPUシミュレーション中にプログレスバーを印刷できるようにします。一部のハードウェアでは、シミュレーションが完了しても停止したり戻らないなどの不安定な動作を引き起こす可能性があります。そのような動作が検出された場合は、このオプションのチェックを外してください。\n" + +#: tfmmcx.ckskipvoid.caption +msgid "Skip void space (-k)" +msgstr "空隙スペーススキップ (-k)" + +#: tfmmcx.ckskipvoid.hint +msgid "DoSkipVoid \n\nChecking this option starts photon's ellapse time when it first enters\na non-zero voxel.\n\nUnchecking this option starts photon's ellapse time at launch time,\nregardless it is launched in the background (0-valued) voxel or non-zero\nvoxel.\n" +msgstr "DoSkipVoid\n\nこのオプションをチェックすると、光子が最初に非ゼロボクセルに入ったときに光子の経過時間が開始されます。\n\nこのオプションのチェックを外すと、背景(0値)ボクセルまたは非ゼロボクセルのどちらで起動されるかに関係なく、起動時に光子の経過時間が開始されます。\n" + +#: tfmmcx.ckspecular.caption +msgid "Do specular reflection (-V)" +msgstr "鏡面反射実行 (-V)" + +#: tfmmcx.ckspecular.hint +msgid "DoSpecular \n\nChecking this option performs a transmission calculation if a photon \nis launched in the background; this results in change of direction angle\nand loss of energy.\n\nUnchecking this option moves a photon into a non-zero voxel without\nconsidering the specular reflection and change of direction.\n" +msgstr "DoSpecular\n\nこのオプションをチェックすると、光子が背景で起動された場合に透過計算を実行します;これにより方向角の変化とエネルギーの損失が発生します。\n\nこのオプションのチェックを外すと、鏡面反射と方向変化を考慮せずに光子を非ゼロボクセルに移動させます。\n" + +#: tfmmcx.cksrcfrom0.caption +msgid "Orign from [0,0,0] (-z)" +msgstr "[0,0,0]からの原点 (-z)" + +#: tfmmcx.cksrcfrom0.hint +msgid "DoSrcFrom0 \n\nChecking this item assumes the lower-bottom corner of the voxelated \ndomain is [0,0,0] mm. The definitions of source and detector positions \nare impacted by this definition.\n\nUnchecking this option assumes the lower-bottom corner of the \ndomain is [1,1,1] mm.\n" +msgstr "DoSrcFrom0\n\nこの項目をチェックすると、ボクセル化ドメインの左下角が[0,0,0] mmであると仮定します。ソースと検出器位置の定義がこの定義に影響されます。\n\nこのオプションのチェックを外すと、ドメインの左下角が[1,1,1] mmであると仮定します。\n" + +#: tfmmcx.edbenchmark.hint +msgid "Benchmark \n\nThis option asks to run the built-in benchmark.\n" +msgstr "Benchmark\n\nこのオプションは内蔵ベンチマークの実行を要求します。\n" + +#: tfmmcx.edblocksize.hint +msgid "ThreadBlock \n\nSpecify a small integer, preferably a multiple of 32, to define \nthe block size - for example, 64 means a thread block contains \n64 threads.\n\nThis is only used when the -A (autopilot mode) is not enabled.\n" +msgstr "ThreadBlock\n\nブロックサイズを定義するために小さな整数、できれば32の倍数を指定します - 例えば、64はスレッドブロックが64個のスレッドを含むことを意味します。\n\nこれは-A(オートパイロットモード)が有効でない場合のみ使用されます。\n" + +#: tfmmcx.edblocksize.text +msgid "64" +msgstr "64" + +#: tfmmcx.edbubble.hint +msgctxt "tfmmcx.edbubble.hint" +msgid "BubbleSize" +msgstr "BubbleSize" + +#: tfmmcx.edbubble.text +msgid "-2" +msgstr "-2" + +#: tfmmcx.edcmdinput.hint +msgid "User Input\n\nWhen connecting to a remote server via ssh/scp, one may asked to type\n\"yes\" to save the ssh key or other interactive inputs. If this is the case, one\ncan use this field to type user input, and click \"Send\" to pipe user input to \nthe external program.\n" +msgstr "ユーザー入力\n\nssh/scpを介してリモートサーバーに接続する際、sshキーを保存するために「yes」を入力するか、その他のインタラクティブ入力を求められる場合があります。その場合、このフィールドを使用してユーザー入力を入力し、「送信」をクリックしてユーザー入力を外部プログラムにパイプできます。\n" + +#: tfmmcx.edconfigfile.hint +msgid "InputFile \n\nSpecify the input file in either .inp or .json format.\n" +msgstr "InputFile\n\n.inpまたは.json形式の入力ファイルを指定します。\n" + +#: tfmmcx.eddetectednum.hint +msgid "DetectedNum \n\nThis sets the maximum number of detected photons to be stored. If\nthe actual detected photon number is higher than this specified number,\nmcx/mmc will generate an warning and print out the actual detected \nphoton count; one can use that output in this field to allow MCX to store\nall photons.\n" +msgstr "DetectedNum\n\nこれは保存される検出光子の最大数を設定します。実際の検出光子数がこの指定数より高い場合、mcx/mmcは警告を生成し、実際の検出光子数を出力します;MCXがすべての光子を保存できるようにするために、このフィールドでその出力を使用できます。\n" + +#: tfmmcx.eddetectednum.text +msgid "10000000" +msgstr "10000000" + +#: tfmmcx.edgate.hint +msgctxt "tfmmcx.edgate.hint" +msgid "GateNum" +msgstr "GateNum" + +#: tfmmcx.edgpuid.hint +msgid "GPUID \n\nUse this list to select the device or devices (CPU or GPU) used to\nrun the simulation. For MCX, if multiple CUDA GPUs are installed, one\ncan select multiple devices to speed up the calculation; for MCXCL\nand MMC, one can select OpenCL devices that include both CPU and\nGPUs. In such case, only devices of the same platform can be selected.\nFor example, an NVIDIA GPU and a CPU can not be selected together.\n" +msgstr "GPUID\n\nこのリストを使用して、シミュレーション実行に使用するデバイス(CPUまたはGPU)を選択します。MCXでは、複数のCUDA GPUがインストールされている場合、計算を高速化するために複数のデバイスを選択できます;MCXCLとMMCでは、CPUとGPUの両方を含むOpenCLデバイスを選択できます。この場合、同じプラットフォームのデバイスのみを選択できます。例えば、NVIDIA GPUとCPUを一緒に選択することはできません。\n" + +#: tfmmcx.edmoreparam.hint +msgid "MoreParam \n\nOne can use this field to manually specify additional parameters that\nare not supported by this GUI tool. Any parameter set here will overwrite\nthe previous setting.\n" +msgstr "MoreParam\n\nこのフィールドを使用して、このGUIツールでサポートされていない追加パラメータを手動で指定できます。ここで設定されたパラメータは以前の設定を上書きします。\n" + +#: tfmmcx.edoutputformat.hint +msgid "OutputFormat \n\nThis specifies the output data file format. The supported formats are\n\n.mc2 - a simple binary format stores the voxel-by-voxel binary data\n in the column-major order\n.nii - the NIfTI-1 format\n.tx3 - a simple 3D texture binary format.\nascii - text-based data file\n" +msgstr "OutputFormat\n\nこれは出力データファイル形式を指定します。サポートされる形式は:\n\n.mc2 - ボクセル単位のバイナリデータを列主順序で格納するシンプルなバイナリ形式\n.nii - NIfTI-1形式\n.tx3 - シンプルな3Dテクスチャバイナリ形式\nascii - テキストベースのデータファイル\n" + +#: tfmmcx.edoutputtype.hint +msgid "OutputType \n\nThis option specifies the output data type. \n\n* Fluence rate [J/mm^2/s] - the default output\n* Fluence [J/mm^2] - the integration of the fluence \n rate over each time gate\n* Energy deposition [J] - can be computed by multiplying \n fluence with absorption μa and voxel volume [mm^3]\n* Absorption Jacobian (mua) [1/mm] - in the replay mode, this\n outputs the sensitivity matrix for μa;\n* Average scattering event count - in the replay mode, this\n outputs the number of scattering event per voxel\n* Momentum transfer sensivity (DCS) - in the replay mode, this \n outputs the momentum transfer contribution/sensitivity from \n each voxel.\n" +msgstr "OutputType\n\nこのオプションは出力データタイプを指定します。\n\n* フルエンス率 [J/mm^2/s] - デフォルト出力\n* フルエンス [J/mm^2] - 各タイムゲートでのフルエンス率の積分\n* エネルギー沈着 [J] - フルエンスに吸収μaとボクセル体積 [mm^3] を掛けて計算可能\n* 吸収ヤコビアン (mua) [1/mm] - リプレイモードで、μaの感度行列を出力\n* 平均散乱イベント数 - リプレイモードで、ボクセル当たりの散乱イベント数を出力\n* 運動量転送感度 (DCS) - リプレイモードで、各ボクセルからの運動量転送寄与/感度を出力\n" + +#: tfmmcx.edphoton.hint +msgid "PhotonNum \n\nThis defines the total simulated photons.\n\nCan be an integer or number in scientific form. For example\n100000 and 1e5 are both acceptable.\n\nPlease be noted that we highly suggest one to start with a\nsmall photon number to avoid extended run time.\n" +msgstr "PhotonNum\n\nこれは総シミュレーション光子数を定義します。\n\n整数または科学記法の数値が可能です。例えば、100000と1e5の両方が受け入れられます。\n\n実行時間の延長を避けるため、小さな光子数から始めることを強くお勧めします。\n" + +#: tfmmcx.edphoton.text +msgid "1e6" +msgstr "1e6" + +#: tfmmcx.edphoton.texthint +msgid "Integer" +msgstr "整数" + +#: tfmmcx.edremote.hint +msgid "RemoteCmd \n\nPlease choose the remote connection command using the dropdown list, or\ntype in this field manually. For windows, it is recommended to choose the \nplink.exe command; for Linux, it is recommended to use the ssh command.\n\nPlease replace the user@server by the actual username and the server IP\nor domain name.\n\nYou are highly recommended to set up key-based ssh access to avoid typing\npassword. Tutorials can be found at http://www.linuxproblem.org/art_9.html\n" +msgstr "RemoteCmd\n\nドロップダウンリストを使用してリモート接続コマンドを選択するか、このフィールドに手動で入力してください。Windowsの場合、plink.exeコマンドを選択することが推奨されます;Linuxの場合、sshコマンドを使用することが推奨されます。\n\nuser@serverを実際のユーザー名とサーバーIPまたはドメイン名に置き換えてください。\n\nパスワード入力を避けるために、キーベースのsshアクセスを設定することを強くお勧めします。チュートリアルは http://www.linuxproblem.org/art_9.html で見つけることができます。\n" + +#: tfmmcx.edremote.text +msgid "Built-in ssh" +msgstr "内蔵ssh" + +#: tfmmcx.edreplaydet.hint +msgctxt "tfmmcx.edreplaydet.hint" +msgid "ReplayDet" +msgstr "ReplayDet" + +#: tfmmcx.edrespin.hint +msgid "RespinNum \n\nSetting this to a positive number will repeat the simulation by the specified\nrepeition count starting from different random seeds.\n\nA negative integer asks MCX to divide the total photon number by the \nabsolute value of this input and run each subpart at a time. This can \nreduce the per-call run time, but may result in extensive overhead of\nrunning repeated simulations.\n" +msgstr "RespinNum\n\nこれを正の数に設定すると、異なるランダムシードから開始して指定された繰り返し回数だけシミュレーションを繰り返します。\n\n負の整数は、MCXに総光子数をこの入力の絶対値で除算し、各サブパートを一度に実行するよう要求します。これによりコール当たりの実行時間を短縮できますが、繰り返しシミュレーション実行の広範囲なオーバーヘッドが発生する可能性があります。\n" + +#: tfmmcx.edseed.hint +msgid "Seed \n\nIf this field is a large integer number, this specifies the RNG seed; \n\nif this is a file name ending with .mch, it loads an .mch file generated \nfrom previous simulation and replays the detected photons.\n" +msgstr "Seed\n\nこのフィールドが大きな整数の場合、これはRNGシードを指定します;\n\nこれが.mchで終わるファイル名の場合、以前のシミュレーションから生成された.mchファイルを読み込み、検出された光子をリプレイします。\n" + +#: tfmmcx.edseed.text +msgid "1648335518" +msgstr "1648335518" + +#: tfmmcx.edseed.texthint +msgid "A large integer or .mch file name" +msgstr "大きな整数または.mchファイル名" + +#: tfmmcx.edsession.hint +msgid "Session \n\nThis string will be used in all output files as part of the file names.\n" +msgstr "Session\n\nこの文字列はすべての出力ファイルでファイル名の一部として使用されます。\n" + +#: tfmmcx.edthread.hint +msgid "ThreadNum \n\nSpecify a large integer multiple of 32 (the warp size) to manually \ndefine the thread numbers.\n\nThis is only used when the -A (autopilot mode) is not enabled.\n" +msgstr "ThreadNum\n\nスレッド数を手動で定義するために32(ワープサイズ)の大きな整数倍を指定します。\n\nこれは-A(オートパイロットモード)が有効でない場合のみ使用されます。\n" + +#: tfmmcx.edthread.text +msgid "16384" +msgstr "16384" + +#: tfmmcx.edunitinmm.hint +msgid "UnitInMM \n\nThis defines the voxel size. By default, 1x1x1 mm^3 voxels\nare used. Has to be a positive floating point number. For example,\n0.1 defines a 0.1x0.1x0.1 mm^3 voxel.\n\nCurrently, only isotropic voxels are supported.\n" +msgstr "UnitInMM\n\nこれはボクセルサイズを定義します。デフォルトでは1x1x1 mm^3ボクセルが使用されます。正の浮動小数点数である必要があります。例えば、0.1は0.1x0.1x0.1 mm^3ボクセルを定義します。\n\n現在、等方性ボクセルのみサポートされています。\n" + +#: tfmmcx.edunitinmm.text +msgid "1" +msgstr "1" + +#: tfmmcx.edworkload.hint +msgid "Workload \n\nOne can specify a series of comma-separated numbers to specify the\nrelative portion of workload between multiple selected devices. \n\nFor example: 10,10 asks MCX to run 50% of the total photons using the\n1st device and 50% on the 2nd device. On the other hand, 10,100 splits\nthe total photon 1:10 between the 1st and 2nd devices.\n" +msgstr "Workload\n\n複数の選択されたデバイス間のワークロードの相対的な部分を指定するために、カンマ区切りの数値シリーズを指定できます。\n\n例:10,10はMCXに1番目のデバイスを使用して総光子の50%、2番目のデバイスで50%を実行するよう要求します。一方、10,100は1番目と2番目のデバイス間で総光子を1:10に分割します。\n" + +#: tfmmcx.edworkload.text +msgid "100" +msgstr "100" + +#: tfmmcx.edworkload.texthint +msgid "Comma separated numbers" +msgstr "カンマ区切りの数値" + +#: tfmmcx.gradvsettings.caption +msgid "Advanced Settings" +msgstr "詳細設定" + +#: tfmmcx.grarray.hint +msgid "ArrayOrder \n\nSelect MATLAB array order indicates that the input volume has a\ncolumn-major order - i.e. the left-most axis is the fastest index of\nthe array, like in MATLAB or FORTRAN.\n\nSelect C array order indicates that the input volume uses the \nrow-major order - i.e. the right-most index is the fastest index\nof the array, like in C and Python.\n" +msgstr "ArrayOrder\n\nMATLAB配列順序を選択すると、入力ボリュームが列主順序を持つことを示します - つまり、最左軸がMATLABやFORTRANのように配列の最速インデックスです。\n\nC配列順序を選択すると、入力ボリュームがCやPythonのように行主順序を使用することを示します - つまり、最右インデックスが配列の最速インデックスです。\n" + +#: tfmmcx.gratomic.hint +msgid "UseAtomic \n\nUsing atomic operations avoids conflicts between multiple threads when\nwriting to the same voxel, thus is highly recommended.\n\nIn the very old CUDA hardware, using atomic operations has a high \noverhead, but such overhead was signficiantly less since the Fermi GPU.\n" +msgstr "UseAtomic\n\nアトミック操作を使用すると、同じボクセルに書き込む際の複数スレッド間の競合を回避できるため、強く推奨されます。\n\n非常に古いCUDAハードウェアでは、アトミック操作の使用は高いオーバーヘッドがありますが、Fermi GPU以降はそのようなオーバーヘッドは大幅に減少しました。\n" + +#: tfmmcx.grbasic.caption +msgid "Basic Settings" +msgstr "基本設定" + +#: tfmmcx.grbc.caption +msgid "Boundary cond." +msgstr "境界条件" + +#: tfmmcx.grdet.caption +msgid "Save detected photon" +msgstr "検出光子保存" + +#: tfmmcx.grgpu.caption +msgid "GPU Settings" +msgstr "GPU設定" + +#: tfmmcx.grprogram.caption +msgctxt "tfmmcx.grprogram.caption" +msgid "Run Monte Carlo simulation with" +msgstr "モンテカルロシミュレーション実行ツール" + +#: tfmmcx.grprogram.hint +msgid "MCProgram\n\nIn this panel, you choose which simulator to use. \nCurrently we support 3 simulators, \n\n* MCX: NVIDIA GPU-based simulation using voxelated domain\n* MCX-CL: OpenCL based CPU/GPU simulation using voxelated domain\n* MMC: OpenCL based CPU/GPU simulation using tetrahedral meshes\n\nThe built-in domain designer only supports creating voxelated \ndomains and creating meshes will be supported in the future.\n" +msgstr "MCProgram\n\nこのパネルで使用するシミュレーターを選択します。\n現在3つのシミュレーターをサポートしています:\n\n* MCX: ボクセル化ドメインを使用するNVIDIA GPUベースのシミュレーション\n* MCX-CL: ボクセル化ドメインを使用するOpenCLベースのCPU/GPUシミュレーション\n* MMC: 四面体メッシュを使用するOpenCLベースのCPU/GPUシミュレーション\n\n内蔵ドメインデザイナーはボクセル化ドメインの作成のみをサポートし、メッシュ作成は将来サポートされる予定です。\n" + +#: tfmmcx.grswitches.caption +msgid "Switches" +msgstr "スイッチ" + +#: tfmmcx.image1.hint +msgctxt "tfmmcx.image1.hint" +msgid "About MCX" +msgstr "MCXについて" + +#: tfmmcx.label1.caption +msgid "Thread number (-t)" +msgstr "スレッド数 (-t)" + +#: tfmmcx.label1.hint +msgid "-t (--thread)" +msgstr "-t (--thread)" + +#: tfmmcx.label10.caption +msgctxt "tfmmcx.label10.caption" +msgid "or" +msgstr "または" + +#: tfmmcx.label10.hint +msgctxt "tfmmcx.label10.hint" +msgid "-a (--array)" +msgstr "-a (--array)" + +#: tfmmcx.label11.caption +msgid "Output format" +msgstr "出力形式" + +#: tfmmcx.label11.hint +msgctxt "tfmmcx.label11.hint" +msgid "-u (--unitinmm)" +msgstr "-u (--unitinmm)" + +#: tfmmcx.label12.caption +msgid "Run MCX on" +msgstr "MCX実行デバイス" + +#: tfmmcx.label12.hint +msgid "-G (--gpu)" +msgstr "-G (--gpu)" + +#: tfmmcx.label13.caption +msgid "Seed (-E)" +msgstr "シード (-E)" + +#: tfmmcx.label13.hint +msgid "-E (--seed)" +msgstr "-E (--seed)" + +#: tfmmcx.label14.caption +msgid "Output type (-O)" +msgstr "出力タイプ (-O)" + +#: tfmmcx.label14.hint +msgid "-O (--outputtype)" +msgstr "-O (--outputtype)" + +#: tfmmcx.label15.caption +msgid "Workload split" +msgstr "ワークロード分割" + +#: tfmmcx.label15.hint +msgid "-W (--workload)" +msgstr "-W (--workload)" + +#: tfmmcx.label16.caption +msgid "Debug flags" +msgstr "デバッグフラグ" + +#: tfmmcx.label16.hint +msgid "-D (--debuglevel)" +msgstr "-D (--debuglevel)" + +#: tfmmcx.label17.caption +msgid "Replay detector ID (-Y)" +msgstr "リプレイ検出器ID (-Y)" + +#: tfmmcx.label17.hint +msgctxt "tfmmcx.label17.hint" +msgid "-Y (--replaydet)" +msgstr "-Y (--replaydet)" + +#: tfmmcx.label18.caption +msgid "Additional parameters" +msgstr "追加パラメータ" + +#: tfmmcx.label18.hint +msgctxt "tfmmcx.label18.hint" +msgid "-Y (--replaydet)" +msgstr "-Y (--replaydet)" + +#: tfmmcx.label19.caption +msgctxt "tfmmcx.label19.caption" +msgid "or" +msgstr "または" + +#: tfmmcx.label19.hint +msgctxt "tfmmcx.label19.hint" +msgid "-a (--array)" +msgstr "-a (--array)" + +#: tfmmcx.label2.caption +msgid "Thread block size (-T)" +msgstr "スレッドブロックサイズ (-T)" + +#: tfmmcx.label2.hint +msgid "-T (--blocksize)" +msgstr "-T (--blocksize)" + +#: tfmmcx.label3.caption +msgid "Total photon number (-n)" +msgstr "総光子数 (-n)" + +#: tfmmcx.label3.hint +msgid "-n (--photon)" +msgstr "-n (--photon)" + +#: tfmmcx.label4.caption +msgid "Session ID (-s)" +msgstr "セッションID (-s)" + +#: tfmmcx.label4.hint +msgctxt "tfmmcx.label4.hint" +msgid "-s (--sessionid)" +msgstr "-s (--sessionid)" + +#: tfmmcx.label5.caption +msgid "User Input>" +msgstr "ユーザー入力>" + +#: tfmmcx.label6.caption +msgid "Array order (-a)" +msgstr "配列順序 (-a)" + +#: tfmmcx.label6.hint +msgctxt "tfmmcx.label6.hint" +msgid "-a (--array)" +msgstr "-a (--array)" + +#: tfmmcx.label7.caption +msgid "Gate group size (-g)" +msgstr "ゲートグループサイズ (-g)" + +#: tfmmcx.label7.hint +msgid "-g (--gategroup)" +msgstr "-g (--gategroup)" + +#: tfmmcx.label8.caption +msgid "Voxel size in mm (-u)" +msgstr "ボクセルサイズ(mm) (-u)" + +#: tfmmcx.label8.hint +msgctxt "tfmmcx.label8.hint" +msgid "-u (--unitinmm)" +msgstr "-u (--unitinmm)" + +#: tfmmcx.label9.caption +msgid "Max detected photons(-H)" +msgstr "最大検出光子数 (-H)" + +#: tfmmcx.label9.hint +msgid "-H (--maxdetphoton)" +msgstr "-H (--maxdetphoton)" + +#: tfmmcx.lbatomic.caption +msgid "Atomic operations" +msgstr "アトミック操作" + +#: tfmmcx.lbatomic.hint +msgid "(--atomic)" +msgstr "(--atomic)" + +#: tfmmcx.lbbubble.caption +msgid "Cache radius from src (-R)" +msgstr "ソースからのキャッシュ半径 (-R)" + +#: tfmmcx.lbbubble.hint +msgid "-r (--skipradius)" +msgstr "-r (--skipradius)" + +#: tfmmcx.lbrespin.caption +msgid "Repetition (-r)" +msgstr "繰り返し (-r)" + +#: tfmmcx.lbrespin.hint +msgid "-r (--repeat)" +msgstr "-r (--repeat)" + +#: tfmmcx.lvjobs.columns[0].caption +msgctxt "tfmmcx.lvjobs.columns[0].caption" +msgid "Session" +msgstr "セッション" + +#: tfmmcx.lvjobs.columns[10].caption +msgid "DoSave" +msgstr "DoSave" + +#: tfmmcx.lvjobs.columns[11].caption +msgid "DoNormalize" +msgstr "DoNormalize" + +#: tfmmcx.lvjobs.columns[12].caption +msgid "Autopilot" +msgstr "Autopilot" + +#: tfmmcx.lvjobs.columns[13].caption +msgid "SaveDetector" +msgstr "SaveDetector" + +#: tfmmcx.lvjobs.columns[14].caption +msgid "DetectedNum" +msgstr "DetectedNum" + +#: tfmmcx.lvjobs.columns[15].caption +msgid "GPUID" +msgstr "GPUID" + +#: tfmmcx.lvjobs.columns[16].caption +msgid "UnitInMM" +msgstr "UnitInMM" + +#: tfmmcx.lvjobs.columns[17].caption +msgid "DoSaveRef" +msgstr "DoSaveRef" + +#: tfmmcx.lvjobs.columns[18].caption +msgid "DoSaveSeed" +msgstr "DoSaveSeed" + +#: tfmmcx.lvjobs.columns[19].caption +msgid "DoSkipVoid" +msgstr "DoSkipVoid" + +#: tfmmcx.lvjobs.columns[1].caption +msgid "InputFile" +msgstr "InputFile" + +#: tfmmcx.lvjobs.columns[20].caption +msgid "DoSrcFrom0" +msgstr "DoSrcFrom0" + +#: tfmmcx.lvjobs.columns[21].caption +msgid "MediaCfg" +msgstr "MediaCfg" + +#: tfmmcx.lvjobs.columns[22].caption +msgid "DetectorCfg" +msgstr "DetectorCfg" + +#: tfmmcx.lvjobs.columns[23].caption +msgid "MCXConfig" +msgstr "MCXConfig" + +#: tfmmcx.lvjobs.columns[24].caption +msgid "Workload" +msgstr "Workload" + +#: tfmmcx.lvjobs.columns[25].caption +msgctxt "tfmmcx.lvjobs.columns[25].caption" +msgid "ShapeCfg" +msgstr "ShapeCfg" + +#: tfmmcx.lvjobs.columns[26].caption +msgid "Seed" +msgstr "Seed" + +#: tfmmcx.lvjobs.columns[27].caption +msgid "DoSaveMask" +msgstr "DoSaveMask" + +#: tfmmcx.lvjobs.columns[28].caption +msgctxt "tfmmcx.lvjobs.columns[28].caption" +msgid "DebugFlags" +msgstr "DebugFlags" + +#: tfmmcx.lvjobs.columns[29].caption +msgctxt "tfmmcx.lvjobs.columns[29].caption" +msgid "ReplayDet" +msgstr "ReplayDet" + +#: tfmmcx.lvjobs.columns[2].caption +msgid "ThreadNum" +msgstr "ThreadNum" + +#: tfmmcx.lvjobs.columns[30].caption +msgid "DoReplay" +msgstr "DoReplay" + +#: tfmmcx.lvjobs.columns[31].caption +msgid "MCProgram" +msgstr "MCProgram" + +#: tfmmcx.lvjobs.columns[32].caption +msgid "DoSpecular" +msgstr "DoSpecular" + +#: tfmmcx.lvjobs.columns[33].caption +msgid "UseAtomic" +msgstr "UseAtomic" + +#: tfmmcx.lvjobs.columns[34].caption +msgid "BasicOrder" +msgstr "BasicOrder" + +#: tfmmcx.lvjobs.columns[35].caption +msgid "DebugPhoton" +msgstr "DebugPhoton" + +#: tfmmcx.lvjobs.columns[36].caption +msgid "MoreParam" +msgstr "MoreParam" + +#: tfmmcx.lvjobs.columns[37].caption +msgid "RemoteCmd" +msgstr "RemoteCmd" + +#: tfmmcx.lvjobs.columns[38].caption +msgid "DoRemote" +msgstr "DoRemote" + +#: tfmmcx.lvjobs.columns[39].caption +msgid "DoSharedFS" +msgstr "DoSharedFS" + +#: tfmmcx.lvjobs.columns[3].caption +msgid "ThreadBlock" +msgstr "ThreadBlock" + +#: tfmmcx.lvjobs.columns[40].caption +msgid "OutputFormat" +msgstr "OutputFormat" + +#: tfmmcx.lvjobs.columns[41].caption +msgid "OutputType" +msgstr "OutputType" + +#: tfmmcx.lvjobs.columns[42].caption +msgid "Boundary" +msgstr "Boundary" + +#: tfmmcx.lvjobs.columns[43].caption +msgid "SaveDetFlag" +msgstr "SaveDetFlag" + +#: tfmmcx.lvjobs.columns[44].caption +msgid "Benchmark" +msgstr "Benchmark" + +#: tfmmcx.lvjobs.columns[4].caption +msgid "PhotonNum" +msgstr "PhotonNum" + +#: tfmmcx.lvjobs.columns[5].caption +msgid "RespinNum" +msgstr "RespinNum" + +#: tfmmcx.lvjobs.columns[6].caption +msgid "ArrayOrder" +msgstr "ArrayOrder" + +#: tfmmcx.lvjobs.columns[7].caption +msgctxt "tfmmcx.lvjobs.columns[7].caption" +msgid "BubbleSize" +msgstr "BubbleSize" + +#: tfmmcx.lvjobs.columns[8].caption +msgctxt "tfmmcx.lvjobs.columns[8].caption" +msgid "GateNum" +msgstr "GateNum" + +#: tfmmcx.lvjobs.columns[9].caption +msgid "DoReflect" +msgstr "DoReflect" + +#: tfmmcx.mcxdoabout.caption +msgid "About" +msgstr "情報" + +#: tfmmcx.mcxdoabout.hint +msgid "About the author" +msgstr "開発者について" + +#: tfmmcx.mcxdoadditem.caption +msgid "New" +msgstr "新規" + +#: tfmmcx.mcxdoadditem.hint +msgid "Add a new task" +msgstr "新しいタスクを追加" + +#: tfmmcx.mcxdoconfig.caption +msgid "Setting" +msgstr "設定" + +#: tfmmcx.mcxdoconfig.hint +msgid "Modify default paths" +msgstr "デフォルトパスを変更" + +#: tfmmcx.mcxdocopy.caption +msgid "Copy session to clipboard" +msgstr "セッションをクリップボードにコピー" + +#: tfmmcx.mcxdodefault.caption +msgid "Default" +msgstr "デフォルト" + +#: tfmmcx.mcxdodefault.hint +msgid "Set default values" +msgstr "デフォルト値を設定" + +#: tfmmcx.mcxdodeleteitem.caption +msgctxt "tfmmcx.mcxdodeleteitem.caption" +msgid "Delete" +msgstr "削除" + +#: tfmmcx.mcxdodeleteitem.hint +msgid "Delete selected task" +msgstr "選択されたタスクを削除" + +#: tfmmcx.mcxdodownloadmask.caption +msgid "Download volume labels (*_vol.nii)" +msgstr "ボリュームラベルダウンロード (*_vol.nii)" + +#: tfmmcx.mcxdodownloadmask.hint +msgctxt "tfmmcx.mcxdodownloadmask.hint" +msgid "_vol.nii" +msgstr "_vol.nii" + +#: tfmmcx.mcxdodownloadmc2.caption +msgid "Download fluence" +msgstr "フルエンスダウンロード" + +#: tfmmcx.mcxdodownloadmch.caption +msgid "Download detected photon data (*.mch)" +msgstr "検出光子データダウンロード (*.mch)" + +#: tfmmcx.mcxdodownloadmch.hint +msgid ".mch" +msgstr ".mch" + +#: tfmmcx.mcxdoexit.caption +msgctxt "tfmmcx.mcxdoexit.caption" +msgid "Exit" +msgstr "終了" + +#: tfmmcx.mcxdoexit.hint +msgid "Exit MCX Studio" +msgstr "MCXスタジオを終了" + +#: tfmmcx.mcxdohelp.caption +msgctxt "tfmmcx.mcxdohelp.caption" +msgid "Help" +msgstr "ヘルプ" + +#: tfmmcx.mcxdohelp.hint +msgctxt "tfmmcx.mcxdohelp.hint" +msgid "Browse help information" +msgstr "ヘルプ情報を参照" + +#: tfmmcx.mcxdohelpoptions.caption +msgid "Options" +msgstr "オプション" + +#: tfmmcx.mcxdohelpoptions.hint +msgid "List command line options" +msgstr "コマンドラインオプション一覧" + +#: tfmmcx.mcxdoopen.caption +msgid "Open" +msgstr "開く" + +#: tfmmcx.mcxdoopen.hint +msgid "Open a project or volume file" +msgstr "プロジェクトまたはボリュームファイルを開く" + +#: tfmmcx.mcxdopaste.caption +msgid "Paste session from clipboard" +msgstr "クリップボードからセッションを貼り付け" + +#: tfmmcx.mcxdoplotjnifti.caption +msgid "Plot fluence (jnii)" +msgstr "フルエンスプロット (jnii)" + +#: tfmmcx.mcxdoplotjnifti.hint +msgid ".jnii" +msgstr ".jnii" + +#: tfmmcx.mcxdoplotmc2.caption +msgid "Plot fluence (mc2)" +msgstr "フルエンスプロット (mc2)" + +#: tfmmcx.mcxdoplotmc2.hint +msgid ".mc2" +msgstr ".mc2" + +#: tfmmcx.mcxdoplotmesh.caption +msgid "Plot mesh" +msgstr "メッシュプロット" + +#: tfmmcx.mcxdoplotnifty.caption +msgid "Plot fluence (nii)" +msgstr "フルエンスプロット (nii)" + +#: tfmmcx.mcxdoplotnifty.hint +msgid ".nii" +msgstr ".nii" + +#: tfmmcx.mcxdoplotvol.caption +msgid "Plot Volume" +msgstr "ボリュームプロット" + +#: tfmmcx.mcxdoplotvol.hint +msgctxt "tfmmcx.mcxdoplotvol.hint" +msgid "_vol.nii" +msgstr "_vol.nii" + +#: tfmmcx.mcxdoquery.caption +msgid "GPU" +msgstr "GPU" + +#: tfmmcx.mcxdoquery.hint +msgid "List GPU Info" +msgstr "GPU情報一覧" + +#: tfmmcx.mcxdorun.caption +msgctxt "tfmmcx.mcxdorun.caption" +msgid "Run" +msgstr "実行" + +#: tfmmcx.mcxdorun.hint +msgid "Run selected task" +msgstr "選択されたタスクを実行" + +#: tfmmcx.mcxdorunall.caption +msgid "Run All" +msgstr "すべて実行" + +#: tfmmcx.mcxdorunall.hint +msgid "Run all tasks" +msgstr "すべてのタスクを実行" + +#: tfmmcx.mcxdosave.caption +msgid "Save" +msgstr "保存" + +#: tfmmcx.mcxdosave.hint +msgid "Save tasks to a project file" +msgstr "タスクをプロジェクトファイルに保存" + +#: tfmmcx.mcxdostop.caption +msgid "Stop" +msgstr "停止" + +#: tfmmcx.mcxdostop.hint +msgid "Terminate current task" +msgstr "現在のタスクを終了" + +#: tfmmcx.mcxdotoggleview.caption +msgid "Toggle View" +msgstr "ビュー切り替え" + +#: tfmmcx.mcxdoverify.caption +msgid "Verify" +msgstr "検証" + +#: tfmmcx.mcxdoverify.hint +msgid "Verify parameters" +msgstr "パラメータを検証" + +#: tfmmcx.mcxdoweb.caption +msgid "Web" +msgstr "ウェブ" + +#: tfmmcx.mcxdoweb.hint +msgid "MCX homepage" +msgstr "MCXホームページ" + +#: tfmmcx.mcxsetcurrent.caption +msgid "mcxSetCurrent" +msgstr "mcxSetCurrent" + +#: tfmmcx.menuitem1.caption +msgid "File" +msgstr "ファイル" + +#: tfmmcx.menuitem11.caption +msgid "Settings" +msgstr "設定" + +#: tfmmcx.menuitem2.caption +msgctxt "tfmmcx.menuitem2.caption" +msgid "Run" +msgstr "実行" + +#: tfmmcx.menuitem22.caption +msgid "Open output folder" +msgstr "出力フォルダーを開く" + +#: tfmmcx.menuitem24.caption +msgid "Plot volume (_vol.nii)" +msgstr "ボリュームプロット (_vol.nii)" + +#: tfmmcx.menuitem28.caption +msgid "Download fluence (mc2/nii/hdr/img)" +msgstr "フルエンスダウンロード (mc2/nii/hdr/img)" + +#: tfmmcx.menuitem3.caption +msgid "Tools" +msgstr "ツール" + +#: tfmmcx.menuitem31.caption +msgid "Download detected photon data (mch)" +msgstr "検出光子データダウンロード (mch)" + +#: tfmmcx.menuitem32.caption +msgid "Download volume mask (_vol.nii)" +msgstr "ボリュームマスクダウンロード (_vol.nii)" + +#: tfmmcx.menuitem35.caption +msgid "MCX Documentation" +msgstr "MCXドキュメント" + +#: tfmmcx.menuitem35.hint +msgid "https://mcx.space/wiki/?Learn#mcx" +msgstr "https://mcx.space/wiki/?Learn#mcx" + +#: tfmmcx.menuitem36.caption +msgid "MMC Documentation" +msgstr "MMCドキュメント" + +#: tfmmcx.menuitem36.hint +msgid "https://mcx.space/wiki/?Learn#mmc" +msgstr "https://mcx.space/wiki/?Learn#mmc" + +#: tfmmcx.menuitem37.caption +msgid "MCX-CL Documentation" +msgstr "MCX-CLドキュメント" + +#: tfmmcx.menuitem37.hint +msgid "https://mcx.space/wiki/?Learn#mcxcl" +msgstr "https://mcx.space/wiki/?Learn#mcxcl" + +#: tfmmcx.menuitem39.caption +msgid "MCX/MCXCL User Forum (mcx-users)" +msgstr "MCX/MCXCLユーザーフォーラム (mcx-users)" + +#: tfmmcx.menuitem39.hint +msgid "https://groups.google.com/forum/?hl=en#!forum/mcx-users" +msgstr "https://groups.google.com/forum/?hl=en#!forum/mcx-users" + +#: tfmmcx.menuitem4.caption +msgctxt "tfmmcx.menuitem4.caption" +msgid "Help" +msgstr "ヘルプ" + +#: tfmmcx.menuitem40.caption +msgid "MMC User Forum (mmc-users)" +msgstr "MMCユーザーフォーラム (mmc-users)" + +#: tfmmcx.menuitem40.hint +msgid "https://groups.google.com/forum/?hl=en#!forum/mmc-users" +msgstr "https://groups.google.com/forum/?hl=en#!forum/mmc-users" + +#: tfmmcx.menuitem41.caption +msgid "Iso2Mesh User Forum (iso2mesh-users)" +msgstr "Iso2Meshユーザーフォーラム (iso2mesh-users)" + +#: tfmmcx.menuitem41.hint +msgid "https://groups.google.com/forum/?hl=en#!forum/iso2mesh-users" +msgstr "https://groups.google.com/forum/?hl=en#!forum/iso2mesh-users" + +#: tfmmcx.menuitem43.caption +msgid "Download Nightly-Build" +msgstr "ナイトリービルドダウンロード" + +#: tfmmcx.menuitem43.hint +msgid "https://mcx.space/nightly/" +msgstr "https://mcx.space/nightly/" + +#: tfmmcx.menuitem45.caption +msgid "MCX Github" +msgstr "MCX Github" + +#: tfmmcx.menuitem45.hint +msgid "https://github.com/fangq/mcx" +msgstr "https://github.com/fangq/mcx" + +#: tfmmcx.menuitem46.caption +msgid "MMC Github" +msgstr "MMC Github" + +#: tfmmcx.menuitem46.hint +msgid "https://github.com/fangq/mmc" +msgstr "https://github.com/fangq/mmc" + +#: tfmmcx.menuitem47.caption +msgid "MCX-CL Github" +msgstr "MCX-CL Github" + +#: tfmmcx.menuitem47.hint +msgid "https://github.com/fangq/mcxcl" +msgstr "https://github.com/fangq/mcxcl" + +#: tfmmcx.menuitem49.caption +msgid "Report MCX Issues" +msgstr "MCX問題報告" + +#: tfmmcx.menuitem49.hint +msgid "https://github.com/fangq/mcx/issues" +msgstr "https://github.com/fangq/mcx/issues" + +#: tfmmcx.menuitem50.caption +msgid "Report MMC Issues" +msgstr "MMC問題報告" + +#: tfmmcx.menuitem50.hint +msgid "https://github.com/fangq/mmc/issues" +msgstr "https://github.com/fangq/mmc/issues" + +#: tfmmcx.menuitem51.caption +msgid "Report MCX-CL Issues" +msgstr "MCX-CL問題報告" + +#: tfmmcx.menuitem51.hint +msgid "https://github.com/fangq/mcxcl/issues" +msgstr "https://github.com/fangq/mcxcl/issues" + +#: tfmmcx.menuitem53.caption +msgid "MCX GPU Speed Benchmark Database" +msgstr "MCX GPU速度ベンチマークデータベース" + +#: tfmmcx.menuitem53.hint +msgid "https://mcx.space/gpubench/" +msgstr "https://mcx.space/gpubench/" + +#: tfmmcx.menuitem55.caption +msgid "Refereces" +msgstr "参考文献" + +#: tfmmcx.menuitem56.caption +msgid "[Fang2009] Original MCX Paper" +msgstr "[Fang2009] 原典MCX論文" + +#: tfmmcx.menuitem56.hint +msgid "http://www.osapublishing.org/oe/abstract.cfm?uri=oe-17-22-20178" +msgstr "http://www.osapublishing.org/oe/abstract.cfm?uri=oe-17-22-20178" + +#: tfmmcx.menuitem57.caption +msgid "[Fang2010] Original MMC Paper" +msgstr "[Fang2010] 原典MMC論文" + +#: tfmmcx.menuitem57.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-1-1-165" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-1-1-165" + +#: tfmmcx.menuitem58.caption +msgid "[Yu2018] Original MCX-CL Paper" +msgstr "[Yu2018] 原典MCX-CL論文" + +#: tfmmcx.menuitem58.hint +msgid "https://www.spiedigitallibrary.org/journals/journal-of-biomedical-optics/volume-23/issue-01/010504/Scalable-and-massively-parallel-Monte-Carlo-photon-transport-simulations-for/10.1117/1.JBO.23.1.010504.full?SSO=1#ArticleLink" +msgstr "https://www.spiedigitallibrary.org/journals/journal-of-biomedical-optics/volume-23/issue-01/010504/Scalable-and-massively-parallel-Monte-Carlo-photon-transport-simulations-for/10.1117/1.JBO.23.1.010504.full?SSO=1#ArticleLink" + +#: tfmmcx.menuitem59.caption +msgid "[Fang2011] MMC ray-tracing comparison" +msgstr "[Fang2011] MMCレイトレーシング比較" + +#: tfmmcx.menuitem59.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-2-5-1258" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-2-5-1258" + +#: tfmmcx.menuitem60.caption +msgid "[Fang2012] SIMD MMC" +msgstr "[Fang2012] SIMD MMC" + +#: tfmmcx.menuitem60.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-3-12-3223" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-3-12-3223" + +#: tfmmcx.menuitem61.caption +msgid "[Yao2016] Widefield MMC" +msgstr "[Yao2016] 広視野MMC" + +#: tfmmcx.menuitem61.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-7-1-171" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-7-1-171" + +#: tfmmcx.menuitem62.caption +msgid "[Yao2018] Jacobians with photon replay" +msgstr "[Yao2018] 光子リプレイによるヤコビアン" + +#: tfmmcx.menuitem62.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-9-10-4588" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-9-10-4588" + +#: tfmmcx.menuitem63.caption +msgid "[Yan2019] Dual-grid MMC" +msgstr "[Yan2019] デュアルグリッドMMC" + +#: tfmmcx.menuitem63.hint +msgid "https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fdx.doi.org%2F10.1117%2F1.JBO.24.2.020503&data=02%7C01%7Cq.fang%40northeastern.edu%7Cbb8daa56735543068b9c08d697592492%7Ca8eec281aaa34daeac9b9a398b9215e7%7C0%7C0%7C636862806460866013&sdata=2dWyN3eVPwwymydjXEWIHBfVZI43Fcl5zuZ8wiaJ10k%3D&reserved=0" +msgstr "https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fdx.doi.org%2F10.1117%2F1.JBO.24.2.020503&data=02%7C01%7Cq.fang%40northeastern.edu%7Cbb8daa56735543068b9c08d697592492%7Ca8eec281aaa34daeac9b9a398b9215e7%7C0%7C0%7C636862806460866013&sdata=2dWyN3eVPwwymydjXEWIHBfVZI43Fcl5zuZ8wiaJ10k%3D&reserved=0" + +#: tfmmcx.menuitem64.caption +msgid "MCX Main Web" +msgstr "MCXメインウェブサイト" + +#: tfmmcx.menuitem66.caption +msgid "Table of all input flags" +msgstr "すべての入力フラグ一覧表" + +#: tfmmcx.menuitem66.hint +msgid "http://bit.ly/2K0rG4R " +msgstr "http://bit.ly/2K0rG4R " + +#: tfmmcx.menuitem69.caption +msgid "[Fang2019] GPU MMC" +msgstr "[Fang2019] GPU MMC" + +#: tfmmcx.menuitem69.hint +msgid "http://dx.doi.org/10.1117/1.JBO.24.11.115002" +msgstr "http://dx.doi.org/10.1117/1.JBO.24.11.115002" + +#: tfmmcx.menuitem70.caption +msgid "[Brain2Mesh2020] Brain2Mesh brain meshing toolbox" +msgstr "[Brain2Mesh2020] Brain2Mesh脳メッシュ化ツールボックス" + +#: tfmmcx.menuitem70.hint +msgid "https://doi.org/10.1117/1.NPh.7.1.015008" +msgstr "https://doi.org/10.1117/1.NPh.7.1.015008" + +#: tfmmcx.menuitem71.caption +msgid "[Yuan2020] PBM over lifespan" +msgstr "[Yuan2020] 生涯にわたるPBM" + +#: tfmmcx.menuitem71.hint +msgid "https://doi.org/10.1117/1.NPh.7.1.015009" +msgstr "https://doi.org/10.1117/1.NPh.7.1.015009" + +#: tfmmcx.menuitem72.caption +msgid "[Yuan2021] Implicit MMC (iMMC)" +msgstr "[Yuan2021] 暗黙MMC (iMMC)" + +#: tfmmcx.menuitem72.hint +msgid "https://www.osapublishing.org/boe/fulltext.cfm?uri=boe-12-1-147" +msgstr "https://www.osapublishing.org/boe/fulltext.cfm?uri=boe-12-1-147" + +#: tfmmcx.menuitem73.caption +msgid "[Yan2020] SVMC hybrid method" +msgstr "[Yan2020] SVMCハイブリッド方法" + +#: tfmmcx.menuitem73.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-11-11-6262" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-11-11-6262" + +#: tfmmcx.menuitem76.caption +msgid "Open Volume Viewer" +msgstr "ボリュームビューアーを開く" + +#: tfmmcx.menuitem9.caption +msgctxt "tfmmcx.menuitem9.caption" +msgid "Volume Designer" +msgstr "ボリュームデザイナー" + +#: tfmmcx.miclearlog.caption +msgid "Clear Log" +msgstr "ログクリア" + +#: tfmmcx.micopy.caption +msgid "Copy selected" +msgstr "選択項目をコピー" + +#: tfmmcx.miexportjson.caption +msgid "Export self-contained JSON input file" +msgstr "自己完結型JSON入力ファイルをエクスポート" + +#: tfmmcx.miusematlab.caption +msgid "Print MATLAB plotting commands only" +msgstr "MATLABプロットコマンドのみ出力" + +#: tfmmcx.openhistoryfile.title +msgctxt "tfmmcx.openhistoryfile.title" +msgid "Open Photon History File (*.mch)" +msgstr "光子履歴ファイルを開く (*.mch)" + +#: tfmmcx.openproject.title +msgid "Open existing project" +msgstr "既存プロジェクトを開く" + +#: tfmmcx.openvolume.title +msgctxt "tfmmcx.openvolume.title" +msgid "Open Photon History File (*.mch)" +msgstr "光子履歴ファイルを開く (*.mch)" + +#: tfmmcx.rbusebench.caption +msgid "Built-in" +msgstr "内蔵" + +#: tfmmcx.rbusedesigner.caption +msgid "User-defined »" +msgstr "ユーザー定義 »" + +#: tfmmcx.rbusefile.caption +msgid "Use Input File (-f)" +msgstr "入力ファイル使用 (-f)" + +#: tfmmcx.saveproject.title +msgid "Save project as" +msgstr "プロジェクトに名前を付けて保存" + +#: tfmmcx.sbinfo.panels[0].text +msgid "Status: idle" +msgstr "ステータス: アイドル" + +#: tfmmcx.sgconfig.columns[0].title.caption +msgctxt "tfmmcx.sgconfig.columns[0].title.caption" +msgid "Value" +msgstr "値" + +#: tfmmcx.sgconfig.hint +msgid "MCXConfig \n\nThis defines the remaining key parameters used in an MCX/MMC\nsimulation.\n" +msgstr "MCXConfig\n\nこれはMCX/MMCシミュレーションで使用される残りのキーパラメータを定義します。\n" + +#: tfmmcx.sgdet.hint +msgid "DetectorCfg \n\nThis table defines all detectors in the domain. \n\nPlease note that currently MCX/MMC only supports spherical detectors,\ndefined by the [x,y,z] center position and radius (radius).\n\nPlease also note that photon detection only happens before a photon is\nterminated, i.e. when it escapes the exterior bounding box or moving from\na non-zero voxel to a zero voxel. Therefore, a detector's aperature is the\nactual bounding box surface or the surface of the non-zero voxels truncated\nby a sphere centered at [x,y,z] with raidus r.\n\nDetector position is sensitive to the \"Origin from [0 0 0] -z\" flag.\n" +msgstr "DetectorCfg\n\nこのテーブルはドメイン内のすべての検出器を定義します。\n\n現在MCX/MMCは[x,y,z]中心位置と半径で定義される球形検出器のみをサポートしていることにご注意ください。\n\nまた、光子検出は光子が終了する前にのみ発生することにご注意ください。つまり、外部境界ボックスから脱出するか、非ゼロボクセルからゼロボクセルに移動するときです。したがって、検出器の開口は実際の境界ボックス表面、または[x,y,z]を中心とし半径rの球によって切り詰められた非ゼロボクセルの表面です。\n\n検出器位置は「[0 0 0]からの原点 -z」フラグに敏感です。\n" + +#: tfmmcx.sgmedia.columns[0].title.caption +msgid "μa (1/mm)" +msgstr "μa (1/mm)" + +#: tfmmcx.sgmedia.columns[1].title.caption +msgid "μs (1/mm)" +msgstr "μs (1/mm)" + +#: tfmmcx.sgmedia.columns[2].title.caption +msgid "g (anisotropy)" +msgstr "g (異方性)" + +#: tfmmcx.sgmedia.columns[3].title.caption +msgid "n (reflective index)" +msgstr "n (屈折率)" + +#: tfmmcx.sgmedia.hint +msgid "MediaCfg \n\nThis table defines the optical properties for all needed tissue labels.\n\nThe first row (label 0) is reserved for the background medium - which includes\nthe space outside the bounding box of the volume, as well as any voxels with\na zero-value.\n\nOne can select a row and copy/paste to other rows.\n\nIf more labels are needed, move to the bottom of the table, and press \"down\"\narrow key to create a new row below.\n" +msgstr "MediaCfg\n\nこのテーブルは必要なすべての組織ラベルの光学特性を定義します。\n\n最初の行(ラベル0)は背景媒質用に予約されています - これにはボリュームの境界ボックス外の空間と、ゼロ値を持つすべてのボクセルが含まれます。\n\n行を選択して他の行にコピー/ペーストできます。\n\nより多くのラベルが必要な場合は、テーブルの下部に移動し、「下」矢印キーを押して下に新しい行を作成してください。\n" + +#: tfmmcx.shapeaddbox.caption +msgid "Box" +msgstr "ボックス" + +#: tfmmcx.shapeaddbox.hint +msgid "Add a 3D box (using the center of the voxels - i.e. add 0.5 in all directions)" +msgstr "3Dボックスを追加 (ボクセルの中心を使用 - つまり、すべての方向に0.5を追加)" + +#: tfmmcx.shapeaddcylinder.caption +msgid "Cylinder" +msgstr "円柱" + +#: tfmmcx.shapeaddcylinder.hint +msgid "Add a cylinder" +msgstr "円柱を追加" + +#: tfmmcx.shapeaddgrid.caption +msgid "Grid" +msgstr "グリッド" + +#: tfmmcx.shapeaddgrid.hint +msgid "Define a uniform grid as the simulation space" +msgstr "シミュレーション空間として均一グリッドを定義" + +#: tfmmcx.shapeaddname.caption +msgid "Name" +msgstr "名前" + +#: tfmmcx.shapeaddname.hint +msgid "Define a name for the domain" +msgstr "ドメインの名前を定義" + +#: tfmmcx.shapeaddorigin.caption +msgid "Origin" +msgstr "原点" + +#: tfmmcx.shapeaddorigin.hint +msgid "Define the origin for subsequent objects" +msgstr "後続オブジェクトの原点を定義" + +#: tfmmcx.shapeaddsphere.caption +msgid "Sphere" +msgstr "球体" + +#: tfmmcx.shapeaddsphere.hint +msgid "Add a 3D sphere" +msgstr "3D球体を追加" + +#: tfmmcx.shapeaddsubgrid.caption +msgid "Subgrid" +msgstr "サブグリッド" + +#: tfmmcx.shapeaddsubgrid.hint +msgid "Add a 3D box (using the lower-corner of the voxel)" +msgstr "3Dボックスを追加 (ボクセルの下角を使用)" + +#: tfmmcx.shapeaddupperspace.caption +msgid "Upper" +msgstr "上部" + +#: tfmmcx.shapeaddupperspace.hint +msgid "Add an upper-space defined by a linear inequality" +msgstr "線形不等式で定義された上部空間を追加" + +#: tfmmcx.shapeaddxlayers.caption +msgid "XLayers" +msgstr "X層" + +#: tfmmcx.shapeaddxlayers.hint +msgid "Add a layered structure along x-axis" +msgstr "x軸に沿った層状構造を追加" + +#: tfmmcx.shapeaddxslabs.caption +msgid "XSlabs" +msgstr "Xスラブ" + +#: tfmmcx.shapeaddxslabs.hint +msgid "Add a slab along x-axis" +msgstr "x軸に沿ったスラブを追加" + +#: tfmmcx.shapeaddylayers.caption +msgid "YLayers" +msgstr "Y層" + +#: tfmmcx.shapeaddylayers.hint +msgid "Add a layered structure along y-axis" +msgstr "y軸に沿った層状構造を追加" + +#: tfmmcx.shapeaddyslabs.caption +msgid "YSlabs" +msgstr "Yスラブ" + +#: tfmmcx.shapeaddyslabs.hint +msgid "Add a slab along y-axis" +msgstr "y軸に沿ったスラブを追加" + +#: tfmmcx.shapeaddzlayers.caption +msgid "ZLayers" +msgstr "Z層" + +#: tfmmcx.shapeaddzlayers.hint +msgid "Add a layered structure along z-axis" +msgstr "z軸に沿った層状構造を追加" + +#: tfmmcx.shapeaddzslabs.caption +msgid "ZSlabs" +msgstr "Zスラブ" + +#: tfmmcx.shapeaddzslabs.hint +msgid "Add a slab along z-axis" +msgstr "z軸に沿ったスラブを追加" + +#: tfmmcx.shapedelete.caption +msgctxt "tfmmcx.shapedelete.caption" +msgid "Delete" +msgstr "削除" + +#: tfmmcx.shapedelete.hint +msgid "Delete selected object" +msgstr "選択されたオブジェクトを削除" + +#: tfmmcx.shapeedit.caption +msgid "Edit" +msgstr "編集" + +#: tfmmcx.shapepreview.caption +msgctxt "tfmmcx.shapepreview.caption" +msgid "Preview" +msgstr "プレビュー" + +#: tfmmcx.shapepreview.hint +msgctxt "tfmmcx.shapepreview.hint" +msgid "Preview" +msgstr "プレビュー" + +#: tfmmcx.shapeprint.caption +msgid "Print" +msgstr "印刷" + +#: tfmmcx.shapeprint.hint +msgid "Print selected object" +msgstr "選択されたオブジェクトを印刷" + +#: tfmmcx.shapereset.caption +msgctxt "tfmmcx.shapereset.caption" +msgid "Reset" +msgstr "リセット" + +#: tfmmcx.shapereset.hint +msgid "Reset to a 60x60x60 homogeneous cubic domain" +msgstr "60x60x60均質立方ドメインにリセット" + +#: tfmmcx.statictext1.caption +msgid "Additional Settings" +msgstr "追加設定" + +#: tfmmcx.statictext2.caption +msgid "Media Settings" +msgstr "媒質設定" + +#: tfmmcx.statictext3.caption +msgid "Detector Settings (in voxel unit)" +msgstr "検出器設定 (ボクセル単位)" + +#: tfmmcx.tabinputdata.caption +msgid "Simulation Designer" +msgstr "シミュレーションデザイナー" + +#: tfmmcx.tabvolumedesigner.caption +msgctxt "tfmmcx.tabvolumedesigner.caption" +msgid "Volume Designer" +msgstr "ボリュームデザイナー" + +#: tfmmcx.tbtverify.caption +msgid "Validate" +msgstr "検証" + +#: tfmmcx.toolbar1.caption +msgid "MCX Ribon" +msgstr "MCXリボン" + +#: tfmmcx.toolbar2.caption +msgid "ToolBar2" +msgstr "ToolBar2" + +#: tfmmcx.toolbar3.caption +msgid "ToolBar3" +msgstr "ToolBar3" + +#: tfmmcx.toolbutton11.caption +msgid "Plot ▾" +msgstr "プロット ▾" + +#: tfmmcx.toolbutton11.hint +msgid "Plot MCX output data" +msgstr "MCX出力データをプロット" + +#: tfmmcx.toolbutton12.caption +msgid "ToolButton12" +msgstr "ToolButton12" + +#: tfmmcx.toolbutton13.caption +msgid "ToolButton13" +msgstr "ToolButton13" + +#: tfmmcx.toolbutton17.caption +msgid "ToolButton17" +msgstr "ToolButton17" + +#: tfmmcx.toolbutton35.caption +msgid "ToolButton35" +msgstr "ToolButton35" + +#: tfmmcx.toolbutton39.hint +msgid "Reset volume and define a different dimension" +msgstr "ボリュームをリセットして異なる次元を定義" + +#: tfmmcx.toolbutton5.caption +msgid "ToolButton5" +msgstr "ToolButton5" + +#: tfmmcx.toolbutton7.caption +msgctxt "tfmmcx.toolbutton7.caption" +msgid "Reset" +msgstr "リセット" + +#: tfmmcx.toolbutton8.caption +msgctxt "tfmmcx.toolbutton8.caption" +msgid "ToolButton8" +msgstr "ToolButton8" + +#: tfmmcx.toolbutton9.caption +msgid "Help ▾" +msgstr "ヘルプ ▾" + +#: tfmmcx.toolbutton9.hint +msgctxt "tfmmcx.toolbutton9.hint" +msgid "Browse help information" +msgstr "ヘルプ情報を参照" + +#: tfmmcx.tvshapes.hint +msgctxt "tfmmcx.tvshapes.hint" +msgid "ShapeCfg" +msgstr "ShapeCfg" + +#: tfmmcx.vlbc.hint +msgid "Boundary \n\nUsing this box to set the boundary condition for each one of the 6\nfacets on the bounding box. A total of 4 boundary conditions are\nsupported:\n\n1. total absorbing BC: photon hiting the boundary are terminated\n2. Fresnel reflection BC: perform Fresnel reflection/transmission\n3. mirror/total reflection BC: photon is 100% reflected (can run a long time)\n4. cylic BC: a photon exiting from a facet will re-enter from the opposite one\n" +msgstr "Boundary\n\nこのボックスを使用して、境界ボックスの6つの面それぞれに対する境界条件を設定します。合計4つの境界条件がサポートされています:\n\n1. 全吸収BC: 境界に当たる光子が終了される\n2. フレネル反射BC: フレネル反射/透過を実行\n3. ミラー/全反射BC: 光子が100%反射される(長時間実行される可能性)\n4. 循環BC: ある面から出る光子が反対側から再入する\n" + +#: tfmnewsession.btcancel.caption +msgctxt "tfmnewsession.btcancel.caption" +msgid "Cancel" +msgstr "キャンセル" + +#: tfmnewsession.btok.caption +msgctxt "tfmnewsession.btok.caption" +msgid "OK" +msgstr "OK" + +#: tfmnewsession.caption +msgid "Create A New Simulation" +msgstr "新しいシミュレーションを作成" + +#: tfmnewsession.edsession.hint +msgctxt "tfmnewsession.edsession.hint" +msgid "Session" +msgstr "Session" + +#: tfmnewsession.grprogram.caption +msgctxt "tfmnewsession.grprogram.caption" +msgid "Run Monte Carlo simulation with" +msgstr "モンテカルロシミュレーション実行ツール" + +#: tfmnewsession.grprogram.hint +msgid "Program" +msgstr "プログラム" + +#: tfmnewsession.label4.caption +msgid "Please type in a unique session name" +msgstr "一意のセッション名を入力してください" + +#: tfmnewsession.label4.hint +msgctxt "tfmnewsession.label4.hint" +msgid "-s (--sessionid)" +msgstr "-s (--sessionid)" + +#: tfmshapeeditor.btcancel.caption +msgctxt "tfmshapeeditor.btcancel.caption" +msgid "Cancel" +msgstr "キャンセル" + +#: tfmshapeeditor.btok.caption +msgctxt "tfmshapeeditor.btok.caption" +msgid "OK" +msgstr "OK" + +#: tfmshapeeditor.caption +msgid "Edit Shapes" +msgstr "形状編集" + +#: tfmsource.btcancel.caption +msgctxt "tfmsource.btcancel.caption" +msgid "Cancel" +msgstr "キャンセル" + +#: tfmsource.btok.caption +msgctxt "tfmsource.btok.caption" +msgid "OK" +msgstr "OK" + +#: tfmsource.caption +msgid "Light Source Settings" +msgstr "光源設定" + +#: tfmsource.edsource.text +msgid "pencil" +msgstr "鉛筆" + +#: tfmsource.label4.caption +msgid "Please select a light source type:" +msgstr "光源タイプを選択してください:" + +#: tfmsource.label5.caption +msgid "Please define source parameters:" +msgstr "ソースパラメータを定義してください:" + +#: tfmstop.caption +msgid "Running ..." +msgstr "実行中..." + +#: tfmstop.toolbar1.caption +msgid "Running" +msgstr "実行中" + +#: tfmstop.toolbutton3.caption +msgid "Hide" +msgstr "非表示" + +#: tfmstop.toolbutton3.hint +msgid "Hide this window" +msgstr "このウィンドウを非表示" + +#: tfmstop.toolbutton8.caption +msgctxt "tfmstop.toolbutton8.caption" +msgid "ToolButton8" +msgstr "ToolButton8" + +#: tfmviewer.btbackground.hint +msgctxt "tfmviewer.btbackground.hint" +msgid "Change Background Color" +msgstr "背景色変更" + +#: tfmviewer.btopaque.caption +msgid "btOpaque" +msgstr "btOpaque" + +#: tfmviewer.btopaque.hint +msgid "Show Opaque Hull" +msgstr "不透明ハル表示" + +#: tfmviewer.caption +msgid "MCX Studio Volume Renderer" +msgstr "MCXスタジオボリュームレンダラー" + +#: tfmviewer.grdir.caption +msgid "Slicing direction" +msgstr "スライス方向" + +#: tfmviewer.label1.caption +msgid "Rendering quality" +msgstr "レンダリング品質" + +#: tfmviewer.label2.caption +msgid "Cutting plane position:" +msgstr "切断面位置:" + +#: tfmviewer.label3.caption +msgid "Invisible threshold" +msgstr "非表示閾値" + +#: tfmviewer.label4.caption +msgid "Color level" +msgstr "カラーレベル" + +#: tfmviewer.mcxplotexit.caption +msgctxt "tfmviewer.mcxplotexit.caption" +msgid "Exit" +msgstr "終了" + +#: tfmviewer.mcxplotexit.hint +msgctxt "tfmviewer.mcxplotexit.hint" +msgid "Exit" +msgstr "終了" + +#: tfmviewer.mcxplotopen.caption +msgid "Open File" +msgstr "ファイルを開く" + +#: tfmviewer.mcxplotopen.hint +msgid "Open Data File" +msgstr "データファイルを開く" + +#: tfmviewer.mcxplotrefresh.caption +msgctxt "tfmviewer.mcxplotrefresh.caption" +msgid "Refresh" +msgstr "更新" + +#: tfmviewer.mcxplotrefresh.hint +msgctxt "tfmviewer.mcxplotrefresh.hint" +msgid "Refresh" +msgstr "更新" + +#: tfmviewer.mcxplotresetcamera.caption +msgctxt "tfmviewer.mcxplotresetcamera.caption" +msgid "Reset" +msgstr "リセット" + +#: tfmviewer.mcxplotsavescreen.caption +msgctxt "tfmviewer.mcxplotsavescreen.caption" +msgid "Save Screen" +msgstr "画面保存" + +#: tfmviewer.mcxplotsavescreen.hint +msgid "Save screenshot" +msgstr "スクリーンショット保存" + +#: tfmviewer.mcxplotshowbbx.caption +msgctxt "tfmviewer.mcxplotshowbbx.caption" +msgid "Show Bounding Box" +msgstr "境界ボックス表示" + +#: tfmviewer.mcxplotshowbbx.hint +msgctxt "tfmviewer.mcxplotshowbbx.hint" +msgid "Show Bounding Box" +msgstr "境界ボックス表示" + +#: tfmviewer.mcxplotusecolor.caption +msgid "Pseudocolor" +msgstr "疑似カラー" + +#: tfmviewer.mcxplotusecolor.hint +msgid "Use Pseudocolor" +msgstr "疑似カラー使用" + +#: tfmviewer.toolbar1.caption +msgctxt "tfmviewer.toolbar1.caption" +msgid "ToolBar1" +msgstr "ToolBar1" + +#: tfmviewer.toolbutton10.caption +msgid "ToolButton10" +msgstr "ToolButton10" + +#: tfmviewer.toolbutton4.hint +msgid "Reset 3D View" +msgstr "3Dビューリセット" + +#: tfmviewer.toolbutton9.caption +msgctxt "tfmviewer.toolbutton9.caption" +msgid "ToolButton9" +msgstr "ToolButton9" \ No newline at end of file diff --git a/mcxstudio/i18n/mcxstudio.ko.po b/mcxstudio/i18n/mcxstudio.ko.po new file mode 100644 index 00000000..3fd7a4b2 --- /dev/null +++ b/mcxstudio/i18n/mcxstudio.ko.po @@ -0,0 +1,1994 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: 2025-09-27\n" +"PO-Revision-Date: 2025-09-27\n" +"Last-Translator: Qianqian Fang\n" +"Language-Team: MCX Developers\n" +"Language: ko_KR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 3.0.1\n" + + +#: tfmabout.button1.caption +msgctxt "tfmabout.button1.caption" +msgid "OK" +msgstr "확인" + +#: tfmabout.caption +msgid "About Monte Carlo eXtreme Studio" +msgstr "몬테카를로 익스트림 스튜디오 정보" + +#: tfmabout.image3.hint +msgctxt "tfmabout.image3.hint" +msgid "About MCX" +msgstr "MCX 정보" + +#: tfmconfig.btcancel.caption +msgctxt "tfmconfig.btcancel.caption" +msgid "Cancel" +msgstr "취소" + +#: tfmconfig.btok.caption +msgctxt "tfmconfig.btok.caption" +msgid "OK" +msgstr "확인" + +#: tfmconfig.caption +msgid "MCX Studio Config" +msgstr "MCX 스튜디오 설정" + +#: tfmconfig.ckusemanualpath.caption +msgid "Use Manual Paths" +msgstr "수동 경로 사용" + +#: tfmconfig.edlocalpath.columns[0].title.caption +msgctxt "tfmconfig.edlocalpath.columns[0].title.caption" +msgid "Value" +msgstr "값" + +#: tfmconfig.edscppath.hint +msgctxt "tfmconfig.edscppath.hint" +msgid "Local SCP Executable Path" +msgstr "로컬 SCP 실행파일 경로" + +#: tfmconfig.edsshpath.hint +msgid "Local SSH Path" +msgstr "로컬 SSH 경로" + +#: tfmconfig.edworkpath.text +msgid "%MCXSTUDIO%/MCXOutput" +msgstr "%MCXSTUDIO%/MCXOutput" + +#: tfmconfig.groupbox2.caption +msgid "MCXStudio Local Output Root Directory" +msgstr "MCX 스튜디오 로컬 출력 루트 디렉터리" + +#: tfmconfig.groupbox3.caption +msgid "Remote MCX/MMC/MCXCl Executable Search Paths" +msgstr "원격 MCX/MMC/MCXCl 실행파일 검색 경로" + +#: tfmconfig.groupbox4.caption +msgid "Local MCX/MMC/MCXCl Executable Search Paths" +msgstr "로컬 MCX/MMC/MCXCl 실행파일 검색 경로" + +#: tfmconfig.groupbox5.caption +msgid "Local SSH Executable Path" +msgstr "로컬 SSH 실행파일 경로" + +#: tfmconfig.groupbox6.caption +msgctxt "tfmconfig.groupbox6.caption" +msgid "Local SCP Executable Path" +msgstr "로컬 SCP 실행파일 경로" + +#: tfmconfig.groupbox7.caption +msgid "Remote MCX/MMC/MCXCl Output Directory" +msgstr "원격 MCX/MMC/MCXCl 출력 디렉터리" + +#: tfmconfig.groupbox8.caption +msgid "Remote GPU Server" +msgstr "원격 GPU 서버" + +#: tfmconfig.label1.caption +msgid "Hostname or IP" +msgstr "호스트명 또는 IP" + +#: tfmconfig.label2.caption +msgid "Port" +msgstr "포트" + +#: tfmconfig.label3.caption +msgid "User name" +msgstr "사용자명" + +#: tfmdatafile.btcancel.caption +msgctxt "tfmdatafile.btcancel.caption" +msgid "Cancel" +msgstr "취소" + +#: tfmdatafile.btok.caption +msgctxt "tfmdatafile.btok.caption" +msgid "OK" +msgstr "확인" + +#: tfmdatafile.caption +msgid " Data File Properties" +msgstr "데이터 파일 속성" + +#: tfmdatafile.eddataformat.text +msgid "Float (32bit)" +msgstr "부동소수점 (32비트)" + +#: tfmdatafile.label10.caption +msgid "Data File" +msgstr "데이터 파일" + +#: tfmdatafile.label4.caption +msgid "Y Dimension" +msgstr "Y 차원" + +#: tfmdatafile.label5.caption +msgid "X Dimension" +msgstr "X 차원" + +#: tfmdatafile.label6.caption +msgid "Z Dimension" +msgstr "Z 차원" + +#: tfmdatafile.label7.caption +msgctxt "tfmdatafile.label7.caption" +msgid "Time Gates" +msgstr "시간 게이트" + +#: tfmdatafile.label8.caption +msgctxt "tfmdatafile.label8.caption" +msgid "Time Gates" +msgstr "시간 게이트" + +#: tfmdatafile.label9.caption +msgid "Header Size" +msgstr "헤더 크기" + +#: tfmdomain.acexit.caption +msgid "acExit" +msgstr "acExit" + +#: tfmdomain.acexit.hint +msgctxt "tfmdomain.acexit.hint" +msgid "Exit" +msgstr "종료" + +#: tfmdomain.achidebbx.caption +msgid "acHideBBX" +msgstr "acHideBBX" + +#: tfmdomain.achidebbx.hint +msgid "Hide Domain Box" +msgstr "도메인 박스 숨기기" + +#: tfmdomain.acloadjson.caption +msgid "acLoadJSON" +msgstr "acLoadJSON" + +#: tfmdomain.acloadjson.hint +msgid "Load JSON" +msgstr "JSON 로드" + +#: tfmdomain.acrender.caption +msgid "acRender" +msgstr "acRender" + +#: tfmdomain.acrender.hint +msgid "Render" +msgstr "렌더링" + +#: tfmdomain.acresetcamera.caption +msgid "acResetCamera" +msgstr "acResetCamera" + +#: tfmdomain.acresetcamera.hint +msgid "Reset Camera" +msgstr "카메라 리셋" + +#: tfmdomain.acsaveimage.caption +msgid "acSaveImage" +msgstr "acSaveImage" + +#: tfmdomain.acsaveimage.hint +msgctxt "tfmdomain.acsaveimage.hint" +msgid "Save Screen" +msgstr "화면 저장" + +#: tfmdomain.acsavejson.caption +msgid "acSaveJSON" +msgstr "acSaveJSON" + +#: tfmdomain.acsavejson.hint +msgid "Save JSON" +msgstr "JSON 저장" + +#: tfmdomain.btbackground.hint +msgctxt "tfmdomain.btbackground.hint" +msgid "Change Background Color" +msgstr "배경색 변경" + +#: tfmdomain.btpin.caption +msgid "Pin Editor" +msgstr "에디터 고정" + +#: tfmdomain.btpin.hint +msgid "Show editor" +msgstr "에디터 표시" + +#: tfmdomain.caption +msgid "MCX Domain Renderer" +msgstr "MCX 도메인 렌더러" + +#: tfmdomain.toolbar1.caption +msgctxt "tfmdomain.toolbar1.caption" +msgid "ToolBar1" +msgstr "ToolBar1" + +#: tfmdomain.toolbutton11.caption +msgid "ToolButton11" +msgstr "ToolButton11" + +#: tfmdomain.toolbutton7.caption +msgid "ToolButton7" +msgstr "ToolButton7" + +#: tfmdomain.toolbutton9.caption +msgctxt "tfmdomain.toolbutton9.caption" +msgid "ToolButton9" +msgstr "ToolButton9" + +#: tfmmcx.btexpandoutput.caption +msgid "â–µ" +msgstr "â–µ" + +#: tfmmcx.btexpandoutput.hint +msgid "To expand or collapse the command window." +msgstr "명령 창을 확장하거나 축소합니다." + +#: tfmmcx.btgbexpand.caption +msgid "▾" +msgstr "▾" + +#: tfmmcx.btloadseed.hint +msgid "Load seed data from previous simulations for replay" +msgstr "재현을 위해 이전 시뮬레이션의 시드 데이터 로드" + +#: tfmmcx.btsendcmd.caption +msgid "Send" +msgstr "전송" + +#: tfmmcx.btsendcmd.hint +msgid "Send the user input to the input buffer of the external program \ncurrently being executed.\n" +msgstr "현재 실행 중인 외부 프로그램의 입력 버퍼로 사용자 입력을 전송합니다.\n" + +#: tfmmcx.button2.caption +msgid "Clear Output" +msgstr "출력 지우기" + +#: tfmmcx.caption +msgid "MCX Studio" +msgstr "MCX 스튜디오" + +#: tfmmcx.ckautopilot.caption +msgid "Let MCX decide thread/block size (-A)" +msgstr "MCX가 스레드/블록 크기를 결정하도록 함 (-A)" + +#: tfmmcx.ckautopilot.hint +msgid "Autopilot \n\nChecking this box tells MCX/MMC to automatically determine the \"optimal\"\nthread number and block size by using the hardware information.\n\nIt is recommended to always check this box. The key to maximize simulation\nthroughput is to ensure a large number of threads are launched to keep the\nhardware resources fully utilized.\n" +msgstr "자동조종\n\n이 박스를 체크하면 MCX/MMC가 하드웨어 정보를 사용하여 \"최적의\" 스레드 수와 블록 크기를 자동으로 결정합니다.\n\n항상 이 박스를 체크하는 것이 권장됩니다. 시뮬레이션 처리량을 최대화하는 핵심은 하드웨어 리소스를 완전히 활용하기 위해 많은 수의 스레드가 실행되도록 하는 것입니다.\n" + +#: tfmmcx.ckbdebug.hint +msgctxt "tfmmcx.ckbdebug.hint" +msgid "DebugFlags" +msgstr "DebugFlags" + +#: tfmmcx.ckbdet.hint +msgid "SaveDetFlag \n\nThis checkbox list allows users to select the detected photon\ndata items that they want to save in the .mch file.\n\nBy default, only the Detector ID and Partial Pathlength are stored.\n" +msgstr "SaveDetFlag\n\n이 체크박스 목록을 통해 사용자는 .mch 파일에 저장하고자 하는 탐지된 광자 데이터 항목을 선택할 수 있습니다.\n\n기본적으로 검출기 ID와 부분 경로 길이만 저장됩니다.\n" + +#: tfmmcx.ckdoremote.caption +msgid "Run remote command:" +msgstr "원격 명령 실행:" + +#: tfmmcx.ckdoremote.hint +msgid "DoRemote \n\nCheck this option asks MCXStudio to call the specified ssh command \nand run mcx/mmc simulations on remote servers. \n\nPlease be aware that one must prepare the server and client to enable\nremote execution, this include\n\n1. install mcx/mmc/mcxcl executable on remote server and add path to\n the PATH environment \n2. install ssh client on the local client; for Linux/Mac, ssh/scp command is\n typically built-in; for windows, please install plink.exe and pscp.exe and\n ensure that their paths are on the PATH environment variable\n3. optionally, one can set the SSH key between the client and server to \n avoid typing password, please see http://www.linuxproblem.org/art_9.html\n" +msgstr "DoRemote\n\n이 옵션을 체크하면 MCX 스튜디오가 지정된 ssh 명령을 호출하고 원격 서버에서 mcx/mmc 시뮬레이션을 실행합니다.\n\n원격 실행을 가능하게 하려면 서버와 클라이언트를 준비해야 하며, 이는 다음을 포함합니다:\n\n1. 원격 서버에 mcx/mmc/mcxcl 실행파일을 설치하고 PATH 환경변수에 경로 추가\n2. 로컬 클라이언트에 ssh 클라이언트 설치; Linux/Mac의 경우 ssh/scp 명령이 일반적으로 내장되어 있음; Windows의 경우 plink.exe와 pscp.exe를 설치하고 해당 경로가 PATH 환경변수에 있는지 확인\n3. 선택적으로, 암호 입력을 피하기 위해 클라이언트와 서버 간에 SSH 키를 설정할 수 있음, http://www.linuxproblem.org/art_9.html 참조\n" + +#: tfmmcx.ckdoreplay.caption +msgid "Replay" +msgstr "재현" + +#: tfmmcx.ckdoreplay.hint +msgid "DoReplay \n\nWhen selecting a .mch file as the seed, this checkbox is automatically \nchecked, signifying that MCX/MMC will perform a photon replay by\nreading the RNG seeds from the .mch file and rerun the photons to produce\nthe Jacobians - in such case, one can use the \"Output Type\" to select which\nmetric to output.\n" +msgstr "DoReplay\n\n시드로 .mch 파일을 선택할 때, 이 체크박스가 자동으로 체크되며, 이는 MCX/MMC가 .mch 파일에서 RNG 시드를 읽고 광자를 다시 실행하여 야코비안을 생성하는 광자 재현을 수행함을 의미합니다 - 이 경우 \"출력 유형\"을 사용하여 출력할 메트릭을 선택할 수 있습니다.\n" + +#: tfmmcx.cklockgpu.caption +msgid "Lock GPU" +msgstr "GPU 잠금" + +#: tfmmcx.cklockgpu.hint +msgid "Checking this box prevents MCXStudio from updating the device list\nwhen switching between different simulation sessions.\n\nWhen running simulation on a remote server, it is recommended to\nlock the GPU to avoid resetting of the device list.\n" +msgstr "이 박스를 체크하면 다른 시뮬레이션 세션 간 전환 시 MCX 스튜디오가 장치 목록을 업데이트하는 것을 방지합니다.\n\n원격 서버에서 시뮬레이션을 실행할 때, 장치 목록 리셋을 피하기 위해 GPU를 잠그는 것이 권장됩니다.\n" + +#: tfmmcx.cknormalize.caption +msgid "Do normalization (-U)" +msgstr "정규화 수행 (-U)" + +#: tfmmcx.cknormalize.hint +msgid "DoNormalize \n\nCheck this option allows MCX/MMC to normalize the output by the \nbelow formula\n\nΦ(i,j,k,t)=E(i,j,k,t) / (V*E_total*dT)\n\nwhere E(i,j,k,t) is the raw accummuated energy at each voxel; \nV is the size of the voxel in mm^3; dT is the time-gate width in s.\n\nAfter normalization, the result becomes TPSF or Green's function.\n\nUnchecking this option disables normalization.\n" +msgstr "DoNormalize\n\n이 옵션을 체크하면 MCX/MMC가 다음 공식으로 출력을 정규화할 수 있습니다:\n\nΦ(i,j,k,t)=E(i,j,k,t) / (V*E_total*dT)\n\n여기서 E(i,j,k,t)는 각 복셀에서의 원시 축적 에너지; V는 복셀의 크기(mm^3); dT는 시간 게이트 폭(s)입니다.\n\n정규화 후, 결과는 TPSF 또는 그린 함수가 됩니다.\n\n이 옵션을 체크해제하면 정규화가 비활성화됩니다.\n" + +#: tfmmcx.ckreflect.caption +msgid "Do reflection all boundaries (-b)" +msgstr "모든 경계에서 반사 수행 (-b)" + +#: tfmmcx.ckreflect.hint +msgid "DoReflect \n\nCheck this option (by default) enables reflection/refrection calculations \nwhen refractive index mismatch is detected at tissue boundaries.\n\nIf this option is unchecked, any photon hits the boundary between a \nnon-zero and zero-valued voxel will be terminated (i.e. total\nabsorbtion boundary condition). \n\nThe medium outside of the volume bounding box is assumed to have \nthe optical properties defined as label 0 (the first row in the Media Settings\ntable on the right).\n" +msgstr "DoReflect\n\n이 옵션을 체크하면 (기본값) 조직 경계에서 굴절률 불일치가 감지될 때 반사/굴절 계산을 활성화합니다.\n\n이 옵션이 체크되지 않으면, 비영 값과 영 값 복셀 사이의 경계를 맞는 모든 광자가 종료됩니다 (즉, 완전 흡수 경계 조건).\n\n볼륨 경계 박스 외부의 매질은 라벨 0으로 정의된 광학 특성을 갖는 것으로 가정됩니다 (오른쪽 매체 설정 테이블의 첫 번째 행).\n" + +#: tfmmcx.cksavedata.caption +msgid "Save fluence (-S)" +msgstr "플루언스 저장 (-S)" + +#: tfmmcx.cksavedata.hint +msgid "DoSave \n\nChecking this option makes MCX/MMC outputs the volumetric fluence\ndata: for MCX, it is the .mc2/.nii file; for MMC, it is a .dat file using P/H/B/S \nray-tracers and .mc2/.nii files when using the dual-grid mode (-M G).\n\nUnchecking this option stops MCX/MMC output the .mc2/.nii file.\n" +msgstr "DoSave\n\n이 옵션을 체크하면 MCX/MMC가 체적 플루언스 데이터를 출력합니다: MCX의 경우 .mc2/.nii 파일; MMC의 경우 P/H/B/S 광선 추적기를 사용하는 .dat 파일이며 이중 격자 모드(-M G) 사용 시 .mc2/.nii 파일입니다.\n\n이 옵션을 체크해제하면 MCX/MMC의 .mc2/.nii 파일 출력이 중단됩니다.\n" + +#: tfmmcx.cksavedetector.caption +msgid "Save detected photons (-d)" +msgstr "탐지된 광자 저장 (-d)" + +#: tfmmcx.cksavedetector.hint +msgid "SaveDetector \n\nChecking this option allows one to store detected photon \ninformation. The output data records can be user-defined by\nselecting the check-box list entitled \"Save detected photon\".\nThe output data are stored in a .mch file.\n\nUnchecking this option disables output the .mch file (can be \nslightly faster).\n" +msgstr "SaveDetector\n\n이 옵션을 체크하면 탐지된 광자 정보를 저장할 수 있습니다. 출력 데이터 레코드는 \"탐지된 광자 저장\"이라는 제목의 체크박스 목록을 선택하여 사용자가 정의할 수 있습니다. 출력 데이터는 .mch 파일에 저장됩니다.\n\n이 옵션을 체크해제하면 .mch 파일 출력이 비활성화됩니다 (약간 더 빠를 수 있음).\n" + +#: tfmmcx.cksavemask.caption +msgid "Save volume mask (-M)" +msgstr "볼륨 마스크 저장 (-M)" + +#: tfmmcx.cksavemask.hint +msgid "DoSaveMask \n\nChecking this option asks MCX to output the pre-processed volume \nmasks. The preprocessed mask contains the voxels that are covered\nunder detectors; these voxels are designated by setting the sign-bit \nas 1. One can visualize this dumped data mask using mcxplotvol.m\n\nUnchecking this option suppresses the output of this mask file.\n" +msgstr "DoSaveMask\n\n이 옵션을 체크하면 MCX가 전처리된 볼륨 마스크를 출력합니다. 전처리된 마스크는 검출기 아래 커버되는 복셀들을 포함하며; 이 복셀들은 부호 비트를 1로 설정하여 지정됩니다. mcxplotvol.m을 사용하여 이 덤프된 데이터 마스크를 시각화할 수 있습니다.\n\n이 옵션을 체크해제하면 이 마스크 파일의 출력이 억제됩니다.\n" + +#: tfmmcx.cksaveref.caption +msgid "Save diffuse reflectance (-X)" +msgstr "확산 반사도 저장 (-X)" + +#: tfmmcx.cksaveref.hint +msgid "DoSaveRef \n\nChecking this option allows MCX/MMC to output the escaped photon\nweights on the exterior surface of the domain. For MCX, to save the \ntotal diffuse reflectance, one must pad a layer of zero voxels in the \nfacet or full bounding box of the domain to store such data. The raw \ntotal diffuse reflectance are normalized and stored as negative values\nin the .mc2/.nii file. When loading such file using loadmc2.m, the diffuse\nreflectance data are extracted and converted to positive output.\n\nUnchecking this option disables saving diffuse reflectance data.\n" +msgstr "DoSaveRef\n\n이 옵션을 체크하면 MCX/MMC가 도메인의 외부 표면에서 탈출한 광자 가중치를 출력할 수 있습니다. MCX의 경우, 총 확산 반사도를 저장하려면 이러한 데이터를 저장하기 위해 도메인의 면 또는 전체 경계 박스에 영 복셀 층을 패딩해야 합니다. 원시 총 확산 반사도는 정규화되어 .mc2/.nii 파일에 음수 값으로 저장됩니다. loadmc2.m을 사용하여 이러한 파일을 로드할 때, 확산 반사도 데이터가 추출되어 양수 출력으로 변환됩니다.\n\n이 옵션을 체크해제하면 확산 반사도 데이터 저장이 비활성화됩니다.\n" + +#: tfmmcx.cksaveseed.caption +msgid "Save photon seeds (-q)" +msgstr "광자 시드 저장 (-q)" + +#: tfmmcx.cksaveseed.hint +msgid "DoSaveSeed \n\nChecking this option allows one to save the RNG seeds of the detected\nphotons in the .mch file. This makes it possible to perform photon replay\nto compute the Jacobian when feeding this output .mch file as the seed\nfor the replay run.\n\nUnchecking this option disables saving photon seeds.\n" +msgstr "DoSaveSeed\n\n이 옵션을 체크하면 탐지된 광자의 RNG 시드를 .mch 파일에 저장할 수 있습니다. 이는 이 출력 .mch 파일을 재현 실행의 시드로 사용할 때 야코비안을 계산하기 위한 광자 재현을 수행할 수 있게 합니다.\n\n이 옵션을 체크해제하면 광자 시드 저장이 비활성화됩니다.\n" + +#: tfmmcx.cksharedfs.caption +msgid "Shared file system" +msgstr "공유 파일 시스템" + +#: tfmmcx.cksharedfs.hint +msgid "DoSharedFS \n\nChecking this option suggests that both the client and the server\nshare the same file system, thus, no file copying is needed. In other\nword, the folder structure to read/write on both client and server\nare identical. This is the case when one uses nfs/autofs on Linux/Mac.\n" +msgstr "DoSharedFS\n\n이 옵션을 체크하면 클라이언트와 서버가 동일한 파일 시스템을 공유하므로 파일 복사가 필요하지 않음을 의미합니다. 즉, 클라이언트와 서버 모두에서 읽기/쓰기를 위한 폴더 구조가 동일합니다. 이는 Linux/Mac에서 nfs/autofs를 사용할 때의 경우입니다.\n" + +#: tfmmcx.ckshowprogress.caption +msgid "Show progress bar" +msgstr "진행 표시줄 표시" + +#: tfmmcx.ckshowprogress.hint +msgid "ShowProgress \n\n(This option is highly experimental, use with caution, may cause hanging on some GPUs)\n\nCheck this option to let MCX/MMC to print a progress bar during the\nGPU simulation. In some hardware, this may cause unstable behaviors\nsuch as stalling or never return even the simulation is complete. If such\nbehavior is detected, please uncheck this option.\n" +msgstr "ShowProgress\n\n(이 옵션은 매우 실험적이므로 주의해서 사용하세요, 일부 GPU에서 행이 될 수 있음)\n\n이 옵션을 체크하여 MCX/MMC가 GPU 시뮬레이션 중에 진행 표시줄을 출력하도록 합니다. 일부 하드웨어에서는 시뮬레이션이 완료되어도 정지하거나 절대 돌아오지 않는 등의 불안정한 동작을 일으킬 수 있습니다. 이러한 동작이 감지되면 이 옵션을 체크해제하세요.\n" + +#: tfmmcx.ckskipvoid.caption +msgid "Skip void space (-k)" +msgstr "빈 공간 건너뛰기 (-k)" + +#: tfmmcx.ckskipvoid.hint +msgid "DoSkipVoid \n\nChecking this option starts photon's ellapse time when it first enters\na non-zero voxel.\n\nUnchecking this option starts photon's ellapse time at launch time,\nregardless it is launched in the background (0-valued) voxel or non-zero\nvoxel.\n" +msgstr "DoSkipVoid\n\n이 옵션을 체크하면 광자가 처음으로 비영 복셀에 들어갈 때 광자의 경과 시간이 시작됩니다.\n\n이 옵션을 체크해제하면 배경(0값) 복셀이나 비영 복셀에서 시작되는지에 관계없이 시작 시간에 광자의 경과 시간이 시작됩니다.\n" + +#: tfmmcx.ckspecular.caption +msgid "Do specular reflection (-V)" +msgstr "정반사 수행 (-V)" + +#: tfmmcx.ckspecular.hint +msgid "DoSpecular \n\nChecking this option performs a transmission calculation if a photon \nis launched in the background; this results in change of direction angle\nand loss of energy.\n\nUnchecking this option moves a photon into a non-zero voxel without\nconsidering the specular reflection and change of direction.\n" +msgstr "DoSpecular\n\n이 옵션을 체크하면 광자가 배경에서 시작될 때 투과 계산을 수행합니다; 이는 방향 각도의 변화와 에너지 손실을 초래합니다.\n\n이 옵션을 체크해제하면 정반사와 방향 변화를 고려하지 않고 광자를 비영 복셀로 이동시킵니다.\n" + +#: tfmmcx.cksrcfrom0.caption +msgid "Orign from [0,0,0] (-z)" +msgstr "[0,0,0]에서 시작하는 원점 (-z)" + +#: tfmmcx.cksrcfrom0.hint +msgid "DoSrcFrom0 \n\nChecking this item assumes the lower-bottom corner of the voxelated \ndomain is [0,0,0] mm. The definitions of source and detector positions \nare impacted by this definition.\n\nUnchecking this option assumes the lower-bottom corner of the \ndomain is [1,1,1] mm.\n" +msgstr "DoSrcFrom0\n\n이 항목을 체크하면 복셀화된 도메인의 좌하단 모서리가 [0,0,0] mm라고 가정합니다. 소스와 검출기 위치의 정의가 이 정의에 영향을 받습니다.\n\n이 옵션을 체크해제하면 도메인의 좌하단 모서리가 [1,1,1] mm라고 가정합니다.\n" + +#: tfmmcx.edbenchmark.hint +msgid "Benchmark \n\nThis option asks to run the built-in benchmark.\n" +msgstr "Benchmark\n\n이 옵션은 내장 벤치마크를 실행하도록 요청합니다.\n" + +#: tfmmcx.edblocksize.hint +msgid "ThreadBlock \n\nSpecify a small integer, preferably a multiple of 32, to define \nthe block size - for example, 64 means a thread block contains \n64 threads.\n\nThis is only used when the -A (autopilot mode) is not enabled.\n" +msgstr "ThreadBlock\n\n블록 크기를 정의하기 위해 작은 정수, 가급적 32의 배수를 지정합니다 - 예를 들어, 64는 스레드 블록이 64개의 스레드를 포함함을 의미합니다.\n\n이는 -A (자동조종 모드)가 활성화되지 않았을 때만 사용됩니다.\n" + +#: tfmmcx.edblocksize.text +msgid "64" +msgstr "64" + +#: tfmmcx.edbubble.hint +msgctxt "tfmmcx.edbubble.hint" +msgid "BubbleSize" +msgstr "BubbleSize" + +#: tfmmcx.edbubble.text +msgid "-2" +msgstr "-2" + +#: tfmmcx.edcmdinput.hint +msgid "User Input\n\nWhen connecting to a remote server via ssh/scp, one may asked to type\n\"yes\" to save the ssh key or other interactive inputs. If this is the case, one\ncan use this field to type user input, and click \"Send\" to pipe user input to \nthe external program.\n" +msgstr "사용자 입력\n\nssh/scp를 통해 원격 서버에 연결할 때, ssh 키를 저장하거나 다른 대화형 입력을 위해 \"yes\"를 입력하도록 요청받을 수 있습니다. 이런 경우, 이 필드를 사용하여 사용자 입력을 타이핑하고 \"전송\"을 클릭하여 사용자 입력을 외부 프로그램으로 파이프할 수 있습니다.\n" + +#: tfmmcx.edconfigfile.hint +msgid "InputFile \n\nSpecify the input file in either .inp or .json format.\n" +msgstr "InputFile\n\n.inp 또는 .json 형식의 입력 파일을 지정합니다.\n" + +#: tfmmcx.eddetectednum.hint +msgid "DetectedNum \n\nThis sets the maximum number of detected photons to be stored. If\nthe actual detected photon number is higher than this specified number,\nmcx/mmc will generate an warning and print out the actual detected \nphoton count; one can use that output in this field to allow MCX to store\nall photons.\n" +msgstr "DetectedNum\n\n이는 저장될 탐지된 광자의 최대 수를 설정합니다. 실제 탐지된 광자 수가 이 지정된 수보다 높으면, mcx/mmc는 경고를 생성하고 실제 탐지된 광자 개수를 출력합니다; MCX가 모든 광자를 저장하도록 허용하기 위해 이 필드에서 그 출력을 사용할 수 있습니다.\n" + +#: tfmmcx.eddetectednum.text +msgid "10000000" +msgstr "10000000" + +#: tfmmcx.edgate.hint +msgctxt "tfmmcx.edgate.hint" +msgid "GateNum" +msgstr "GateNum" + +#: tfmmcx.edgpuid.hint +msgid "GPUID \n\nUse this list to select the device or devices (CPU or GPU) used to\nrun the simulation. For MCX, if multiple CUDA GPUs are installed, one\ncan select multiple devices to speed up the calculation; for MCXCL\nand MMC, one can select OpenCL devices that include both CPU and\nGPUs. In such case, only devices of the same platform can be selected.\nFor example, an NVIDIA GPU and a CPU can not be selected together.\n" +msgstr "GPUID\n\n이 목록을 사용하여 시뮬레이션을 실행하는 데 사용할 장치 또는 장치들(CPU 또는 GPU)을 선택합니다. MCX의 경우, 여러 CUDA GPU가 설치되어 있으면 계산을 가속화하기 위해 여러 장치를 선택할 수 있습니다; MCXCL과 MMC의 경우, CPU와 GPU를 모두 포함하는 OpenCL 장치를 선택할 수 있습니다. 이 경우, 동일한 플랫폼의 장치만 선택할 수 있습니다. 예를 들어, NVIDIA GPU와 CPU는 함께 선택할 수 없습니다.\n" + +#: tfmmcx.edmoreparam.hint +msgid "MoreParam \n\nOne can use this field to manually specify additional parameters that\nare not supported by this GUI tool. Any parameter set here will overwrite\nthe previous setting.\n" +msgstr "MoreParam\n\n이 필드를 사용하여 이 GUI 도구에서 지원하지 않는 추가 매개변수를 수동으로 지정할 수 있습니다. 여기서 설정된 모든 매개변수는 이전 설정을 덮어씁니다.\n" + +#: tfmmcx.edoutputformat.hint +msgid "OutputFormat \n\nThis specifies the output data file format. The supported formats are\n\n.mc2 - a simple binary format stores the voxel-by-voxel binary data\n in the column-major order\n.nii - the NIfTI-1 format\n.tx3 - a simple 3D texture binary format.\nascii - text-based data file\n" +msgstr "OutputFormat\n\n이는 출력 데이터 파일 형식을 지정합니다. 지원되는 형식들:\n\n.mc2 - 복셀별 이진 데이터를 열-주요 순서로 저장하는 간단한 이진 형식\n.nii - NIfTI-1 형식\n.tx3 - 간단한 3D 텍스처 이진 형식\nascii - 텍스트 기반 데이터 파일\n" + +#: tfmmcx.edoutputtype.hint +msgid "OutputType \n\nThis option specifies the output data type. \n\n* Fluence rate [J/mm^2/s] - the default output\n* Fluence [J/mm^2] - the integration of the fluence \n rate over each time gate\n* Energy deposition [J] - can be computed by multiplying \n fluence with absorption μa and voxel volume [mm^3]\n* Absorption Jacobian (mua) [1/mm] - in the replay mode, this\n outputs the sensitivity matrix for μa;\n* Average scattering event count - in the replay mode, this\n outputs the number of scattering event per voxel\n* Momentum transfer sensivity (DCS) - in the replay mode, this \n outputs the momentum transfer contribution/sensitivity from \n each voxel.\n" +msgstr "OutputType\n\n이 옵션은 출력 데이터 타입을 지정합니다.\n\n* 플루언스 비율 [J/mm^2/s] - 기본 출력\n* 플루언스 [J/mm^2] - 각 시간 게이트에 대한 플루언스 비율의 적분\n* 에너지 침착 [J] - 플루언스에 흡수 μa와 복셀 부피 [mm^3]를 곱하여 계산 가능\n* 흡수 야코비안 (mua) [1/mm] - 재현 모드에서, μa에 대한 민감도 행렬을 출력\n* 평균 산란 이벤트 개수 - 재현 모드에서, 복셀당 산란 이벤트 수를 출력\n* 운동량 전달 민감도 (DCS) - 재현 모드에서, 각 복셀의 운동량 전달 기여도/민감도를 출력\n" + +#: tfmmcx.edphoton.hint +msgid "PhotonNum \n\nThis defines the total simulated photons.\n\nCan be an integer or number in scientific form. For example\n100000 and 1e5 are both acceptable.\n\nPlease be noted that we highly suggest one to start with a\nsmall photon number to avoid extended run time.\n" +msgstr "PhotonNum\n\n이는 총 시뮬레이션된 광자 수를 정의합니다.\n\n정수 또는 과학적 형태의 수가 될 수 있습니다. 예를 들어 100000과 1e5 모두 허용됩니다.\n\n연장된 실행 시간을 피하기 위해 작은 광자 수로 시작하는 것을 강력히 권장합니다.\n" + +#: tfmmcx.edphoton.text +msgid "1e6" +msgstr "1e6" + +#: tfmmcx.edphoton.texthint +msgid "Integer" +msgstr "정수" + +#: tfmmcx.edremote.hint +msgid "RemoteCmd \n\nPlease choose the remote connection command using the dropdown list, or\ntype in this field manually. For windows, it is recommended to choose the \nplink.exe command; for Linux, it is recommended to use the ssh command.\n\nPlease replace the user@server by the actual username and the server IP\nor domain name.\n\nYou are highly recommended to set up key-based ssh access to avoid typing\npassword. Tutorials can be found at http://www.linuxproblem.org/art_9.html\n" +msgstr "RemoteCmd\n\n드롭다운 목록을 사용하여 원격 연결 명령을 선택하거나, 이 필드에 수동으로 입력하세요. Windows의 경우 plink.exe 명령을 선택하는 것이 권장됩니다; Linux의 경우 ssh 명령을 사용하는 것이 권장됩니다.\n\nuser@server를 실제 사용자명과 서버 IP 또는 도메인 이름으로 바꾸세요.\n\n암호 입력을 피하기 위해 키 기반 ssh 액세스를 설정하는 것을 강력히 권장합니다. 튜토리얼은 http://www.linuxproblem.org/art_9.html에서 찾을 수 있습니다.\n" + +#: tfmmcx.edremote.text +msgid "Built-in ssh" +msgstr "내장 ssh" + +#: tfmmcx.edreplaydet.hint +msgctxt "tfmmcx.edreplaydet.hint" +msgid "ReplayDet" +msgstr "ReplayDet" + +#: tfmmcx.edrespin.hint +msgid "RespinNum \n\nSetting this to a positive number will repeat the simulation by the specified\nrepeition count starting from different random seeds.\n\nA negative integer asks MCX to divide the total photon number by the \nabsolute value of this input and run each subpart at a time. This can \nreduce the per-call run time, but may result in extensive overhead of\nrunning repeated simulations.\n" +msgstr "RespinNum\n\n이를 양수로 설정하면 다른 무작위 시드에서 시작하여 지정된 반복 횟수만큼 시뮬레이션을 반복합니다.\n\n음의 정수는 MCX가 총 광자 수를 이 입력의 절댓값으로 나누고 각 하위 부분을 한 번에 실행하도록 요청합니다. 이는 호출당 실행 시간을 줄일 수 있지만 반복 시뮬레이션 실행의 광범위한 오버헤드를 초래할 수 있습니다.\n" + +#: tfmmcx.edseed.hint +msgid "Seed \n\nIf this field is a large integer number, this specifies the RNG seed; \n\nif this is a file name ending with .mch, it loads an .mch file generated \nfrom previous simulation and replays the detected photons.\n" +msgstr "Seed\n\n이 필드가 큰 정수라면, 이는 RNG 시드를 지정합니다;\n\n이것이 .mch로 끝나는 파일명이라면, 이전 시뮬레이션에서 생성된 .mch 파일을 로드하고 탐지된 광자를 재현합니다.\n" + +#: tfmmcx.edseed.text +msgid "1648335518" +msgstr "1648335518" + +#: tfmmcx.edseed.texthint +msgid "A large integer or .mch file name" +msgstr "큰 정수 또는 .mch 파일명" + +#: tfmmcx.edsession.hint +msgid "Session \n\nThis string will be used in all output files as part of the file names.\n" +msgstr "Session\n\n이 문자열은 모든 출력 파일에서 파일명의 일부로 사용됩니다.\n" + +#: tfmmcx.edthread.hint +msgid "ThreadNum \n\nSpecify a large integer multiple of 32 (the warp size) to manually \ndefine the thread numbers.\n\nThis is only used when the -A (autopilot mode) is not enabled.\n" +msgstr "ThreadNum\n\n스레드 수를 수동으로 정의하기 위해 32(워프 크기)의 큰 정수 배수를 지정합니다.\n\n이는 -A (자동조종 모드)가 활성화되지 않았을 때만 사용됩니다.\n" + +#: tfmmcx.edthread.text +msgid "16384" +msgstr "16384" + +#: tfmmcx.edunitinmm.hint +msgid "UnitInMM \n\nThis defines the voxel size. By default, 1x1x1 mm^3 voxels\nare used. Has to be a positive floating point number. For example,\n0.1 defines a 0.1x0.1x0.1 mm^3 voxel.\n\nCurrently, only isotropic voxels are supported.\n" +msgstr "UnitInMM\n\n이는 복셀 크기를 정의합니다. 기본적으로 1x1x1 mm^3 복셀이 사용됩니다. 양의 부동소수점 수여야 합니다. 예를 들어, 0.1은 0.1x0.1x0.1 mm^3 복셀을 정의합니다.\n\n현재는 등방성 복셀만 지원됩니다.\n" + +#: tfmmcx.edunitinmm.text +msgid "1" +msgstr "1" + +#: tfmmcx.edworkload.hint +msgid "Workload \n\nOne can specify a series of comma-separated numbers to specify the\nrelative portion of workload between multiple selected devices. \n\nFor example: 10,10 asks MCX to run 50% of the total photons using the\n1st device and 50% on the 2nd device. On the other hand, 10,100 splits\nthe total photon 1:10 between the 1st and 2nd devices.\n" +msgstr "Workload\n\n여러 선택된 장치 간의 작업 부하의 상대적 비율을 지정하기 위해 쉼표로 구분된 일련의 숫자를 지정할 수 있습니다.\n\n예를 들어: 10,10은 MCX가 첫 번째 장치를 사용하여 총 광자의 50%를, 두 번째 장치에서 50%를 실행하도록 요청합니다. 반면에, 10,100은 첫 번째와 두 번째 장치 간에 총 광자를 1:10으로 분할합니다.\n" + +#: tfmmcx.edworkload.text +msgid "100" +msgstr "100" + +#: tfmmcx.edworkload.texthint +msgid "Comma separated numbers" +msgstr "쉼표로 구분된 숫자" + +#: tfmmcx.gradvsettings.caption +msgid "Advanced Settings" +msgstr "고급 설정" + +#: tfmmcx.grarray.hint +msgid "ArrayOrder \n\nSelect MATLAB array order indicates that the input volume has a\ncolumn-major order - i.e. the left-most axis is the fastest index of\nthe array, like in MATLAB or FORTRAN.\n\nSelect C array order indicates that the input volume uses the \nrow-major order - i.e. the right-most index is the fastest index\nof the array, like in C and Python.\n" +msgstr "ArrayOrder\n\nMATLAB 배열 순서를 선택하면 입력 볼륨이 열-주요 순서를 갖는다는 것을 나타냅니다 - 즉, 가장 왼쪽 축이 배열의 가장 빠른 인덱스입니다, MATLAB이나 FORTRAN에서처럼.\n\nC 배열 순서를 선택하면 입력 볼륨이 행-주요 순서를 사용한다는 것을 나타냅니다 - 즉, 가장 오른쪽 인덱스가 배열의 가장 빠른 인덱스입니다, C와 Python에서처럼.\n" + +#: tfmmcx.gratomic.hint +msgid "UseAtomic \n\nUsing atomic operations avoids conflicts between multiple threads when\nwriting to the same voxel, thus is highly recommended.\n\nIn the very old CUDA hardware, using atomic operations has a high \noverhead, but such overhead was signficiantly less since the Fermi GPU.\n" +msgstr "UseAtomic\n\n원자 연산을 사용하면 동일한 복셀에 쓸 때 여러 스레드 간의 충돌을 피할 수 있으므로 강력히 권장됩니다.\n\n매우 오래된 CUDA 하드웨어에서는 원자 연산 사용이 높은 오버헤드를 가지지만, 그러한 오버헤드는 Fermi GPU 이후로 현저히 줄어들었습니다.\n" + +#: tfmmcx.grbasic.caption +msgid "Basic Settings" +msgstr "기본 설정" + +#: tfmmcx.grbc.caption +msgid "Boundary cond." +msgstr "경계 조건" + +#: tfmmcx.grdet.caption +msgid "Save detected photon" +msgstr "탐지된 광자 저장" + +#: tfmmcx.grgpu.caption +msgid "GPU Settings" +msgstr "GPU 설정" + +#: tfmmcx.grprogram.caption +msgctxt "tfmmcx.grprogram.caption" +msgid "Run Monte Carlo simulation with" +msgstr "몬테카를로 시뮬레이션 실행 도구" + +#: tfmmcx.grprogram.hint +msgid "MCProgram\n\nIn this panel, you choose which simulator to use. \nCurrently we support 3 simulators, \n\n* MCX: NVIDIA GPU-based simulation using voxelated domain\n* MCX-CL: OpenCL based CPU/GPU simulation using voxelated domain\n* MMC: OpenCL based CPU/GPU simulation using tetrahedral meshes\n\nThe built-in domain designer only supports creating voxelated \ndomains and creating meshes will be supported in the future.\n" +msgstr "MCProgram\n\n이 패널에서 사용할 시뮬레이터를 선택합니다.\n현재 3개의 시뮬레이터를 지원합니다:\n\n* MCX: 복셀화된 도메인을 사용하는 NVIDIA GPU 기반 시뮬레이션\n* MCX-CL: 복셀화된 도메인을 사용하는 OpenCL 기반 CPU/GPU 시뮬레이션\n* MMC: 사면체 메시를 사용하는 OpenCL 기반 CPU/GPU 시뮬레이션\n\n내장 도메인 디자이너는 복셀화된 도메인 생성만 지원하며 메시 생성은 향후 지원될 예정입니다.\n" + +#: tfmmcx.grswitches.caption +msgid "Switches" +msgstr "스위치" + +#: tfmmcx.image1.hint +msgctxt "tfmmcx.image1.hint" +msgid "About MCX" +msgstr "MCX 정보" + +#: tfmmcx.label1.caption +msgid "Thread number (-t)" +msgstr "스레드 수 (-t)" + +#: tfmmcx.label1.hint +msgid "-t (--thread)" +msgstr "-t (--thread)" + +#: tfmmcx.label10.caption +msgctxt "tfmmcx.label10.caption" +msgid "or" +msgstr "또는" + +#: tfmmcx.label10.hint +msgctxt "tfmmcx.label10.hint" +msgid "-a (--array)" +msgstr "-a (--array)" + +#: tfmmcx.label11.caption +msgid "Output format" +msgstr "출력 형식" + +#: tfmmcx.label11.hint +msgctxt "tfmmcx.label11.hint" +msgid "-u (--unitinmm)" +msgstr "-u (--unitinmm)" + +#: tfmmcx.label12.caption +msgid "Run MCX on" +msgstr "MCX 실행 장치" + +#: tfmmcx.label12.hint +msgid "-G (--gpu)" +msgstr "-G (--gpu)" + +#: tfmmcx.label13.caption +msgid "Seed (-E)" +msgstr "시드 (-E)" + +#: tfmmcx.label13.hint +msgid "-E (--seed)" +msgstr "-E (--seed)" + +#: tfmmcx.label14.caption +msgid "Output type (-O)" +msgstr "출력 유형 (-O)" + +#: tfmmcx.label14.hint +msgid "-O (--outputtype)" +msgstr "-O (--outputtype)" + +#: tfmmcx.label15.caption +msgid "Workload split" +msgstr "작업 부하 분할" + +#: tfmmcx.label15.hint +msgid "-W (--workload)" +msgstr "-W (--workload)" + +#: tfmmcx.label16.caption +msgid "Debug flags" +msgstr "디버그 플래그" + +#: tfmmcx.label16.hint +msgid "-D (--debuglevel)" +msgstr "-D (--debuglevel)" + +#: tfmmcx.label17.caption +msgid "Replay detector ID (-Y)" +msgstr "재현 검출기 ID (-Y)" + +#: tfmmcx.label17.hint +msgctxt "tfmmcx.label17.hint" +msgid "-Y (--replaydet)" +msgstr "-Y (--replaydet)" + +#: tfmmcx.label18.caption +msgid "Additional parameters" +msgstr "추가 매개변수" + +#: tfmmcx.label18.hint +msgctxt "tfmmcx.label18.hint" +msgid "-Y (--replaydet)" +msgstr "-Y (--replaydet)" + +#: tfmmcx.label19.caption +msgctxt "tfmmcx.label19.caption" +msgid "or" +msgstr "또는" + +#: tfmmcx.label19.hint +msgctxt "tfmmcx.label19.hint" +msgid "-a (--array)" +msgstr "-a (--array)" + +#: tfmmcx.label2.caption +msgid "Thread block size (-T)" +msgstr "스레드 블록 크기 (-T)" + +#: tfmmcx.label2.hint +msgid "-T (--blocksize)" +msgstr "-T (--blocksize)" + +#: tfmmcx.label3.caption +msgid "Total photon number (-n)" +msgstr "총 광자 수 (-n)" + +#: tfmmcx.label3.hint +msgid "-n (--photon)" +msgstr "-n (--photon)" + +#: tfmmcx.label4.caption +msgid "Session ID (-s)" +msgstr "세션 ID (-s)" + +#: tfmmcx.label4.hint +msgctxt "tfmmcx.label4.hint" +msgid "-s (--sessionid)" +msgstr "-s (--sessionid)" + +#: tfmmcx.label5.caption +msgid "User Input>" +msgstr "사용자 입력>" + +#: tfmmcx.label6.caption +msgid "Array order (-a)" +msgstr "배열 순서 (-a)" + +#: tfmmcx.label6.hint +msgctxt "tfmmcx.label6.hint" +msgid "-a (--array)" +msgstr "-a (--array)" + +#: tfmmcx.label7.caption +msgid "Gate group size (-g)" +msgstr "게이트 그룹 크기 (-g)" + +#: tfmmcx.label7.hint +msgid "-g (--gategroup)" +msgstr "-g (--gategroup)" + +#: tfmmcx.label8.caption +msgid "Voxel size in mm (-u)" +msgstr "복셀 크기(mm) (-u)" + +#: tfmmcx.label8.hint +msgctxt "tfmmcx.label8.hint" +msgid "-u (--unitinmm)" +msgstr "-u (--unitinmm)" + +#: tfmmcx.label9.caption +msgid "Max detected photons(-H)" +msgstr "최대 탐지 광자수 (-H)" + +#: tfmmcx.label9.hint +msgid "-H (--maxdetphoton)" +msgstr "-H (--maxdetphoton)" + +#: tfmmcx.lbatomic.caption +msgid "Atomic operations" +msgstr "원자 연산" + +#: tfmmcx.lbatomic.hint +msgid "(--atomic)" +msgstr "(--atomic)" + +#: tfmmcx.lbbubble.caption +msgid "Cache radius from src (-R)" +msgstr "소스로부터 캐시 반경 (-R)" + +#: tfmmcx.lbbubble.hint +msgid "-r (--skipradius)" +msgstr "-r (--skipradius)" + +#: tfmmcx.lbrespin.caption +msgid "Repetition (-r)" +msgstr "반복 (-r)" + +#: tfmmcx.lbrespin.hint +msgid "-r (--repeat)" +msgstr "-r (--repeat)" + +#: tfmmcx.lvjobs.columns[0].caption +msgctxt "tfmmcx.lvjobs.columns[0].caption" +msgid "Session" +msgstr "세션" + +#: tfmmcx.lvjobs.columns[10].caption +msgid "DoSave" +msgstr "DoSave" + +#: tfmmcx.lvjobs.columns[11].caption +msgid "DoNormalize" +msgstr "DoNormalize" + +#: tfmmcx.lvjobs.columns[12].caption +msgid "Autopilot" +msgstr "Autopilot" + +#: tfmmcx.lvjobs.columns[13].caption +msgid "SaveDetector" +msgstr "SaveDetector" + +#: tfmmcx.lvjobs.columns[14].caption +msgid "DetectedNum" +msgstr "DetectedNum" + +#: tfmmcx.lvjobs.columns[15].caption +msgid "GPUID" +msgstr "GPUID" + +#: tfmmcx.lvjobs.columns[16].caption +msgid "UnitInMM" +msgstr "UnitInMM" + +#: tfmmcx.lvjobs.columns[17].caption +msgid "DoSaveRef" +msgstr "DoSaveRef" + +#: tfmmcx.lvjobs.columns[18].caption +msgid "DoSaveSeed" +msgstr "DoSaveSeed" + +#: tfmmcx.lvjobs.columns[19].caption +msgid "DoSkipVoid" +msgstr "DoSkipVoid" + +#: tfmmcx.lvjobs.columns[1].caption +msgid "InputFile" +msgstr "InputFile" + +#: tfmmcx.lvjobs.columns[20].caption +msgid "DoSrcFrom0" +msgstr "DoSrcFrom0" + +#: tfmmcx.lvjobs.columns[21].caption +msgid "MediaCfg" +msgstr "MediaCfg" + +#: tfmmcx.lvjobs.columns[22].caption +msgid "DetectorCfg" +msgstr "DetectorCfg" + +#: tfmmcx.lvjobs.columns[23].caption +msgid "MCXConfig" +msgstr "MCXConfig" + +#: tfmmcx.lvjobs.columns[24].caption +msgid "Workload" +msgstr "Workload" + +#: tfmmcx.lvjobs.columns[25].caption +msgctxt "tfmmcx.lvjobs.columns[25].caption" +msgid "ShapeCfg" +msgstr "ShapeCfg" + +#: tfmmcx.lvjobs.columns[26].caption +msgid "Seed" +msgstr "Seed" + +#: tfmmcx.lvjobs.columns[27].caption +msgid "DoSaveMask" +msgstr "DoSaveMask" + +#: tfmmcx.lvjobs.columns[28].caption +msgctxt "tfmmcx.lvjobs.columns[28].caption" +msgid "DebugFlags" +msgstr "DebugFlags" + +#: tfmmcx.lvjobs.columns[29].caption +msgctxt "tfmmcx.lvjobs.columns[29].caption" +msgid "ReplayDet" +msgstr "ReplayDet" + +#: tfmmcx.lvjobs.columns[2].caption +msgid "ThreadNum" +msgstr "ThreadNum" + +#: tfmmcx.lvjobs.columns[30].caption +msgid "DoReplay" +msgstr "DoReplay" + +#: tfmmcx.lvjobs.columns[31].caption +msgid "MCProgram" +msgstr "MCProgram" + +#: tfmmcx.lvjobs.columns[32].caption +msgid "DoSpecular" +msgstr "DoSpecular" + +#: tfmmcx.lvjobs.columns[33].caption +msgid "UseAtomic" +msgstr "UseAtomic" + +#: tfmmcx.lvjobs.columns[34].caption +msgid "BasicOrder" +msgstr "BasicOrder" + +#: tfmmcx.lvjobs.columns[35].caption +msgid "DebugPhoton" +msgstr "DebugPhoton" + +#: tfmmcx.lvjobs.columns[36].caption +msgid "MoreParam" +msgstr "MoreParam" + +#: tfmmcx.lvjobs.columns[37].caption +msgid "RemoteCmd" +msgstr "RemoteCmd" + +#: tfmmcx.lvjobs.columns[38].caption +msgid "DoRemote" +msgstr "DoRemote" + +#: tfmmcx.lvjobs.columns[39].caption +msgid "DoSharedFS" +msgstr "DoSharedFS" + +#: tfmmcx.lvjobs.columns[3].caption +msgid "ThreadBlock" +msgstr "ThreadBlock" + +#: tfmmcx.lvjobs.columns[40].caption +msgid "OutputFormat" +msgstr "OutputFormat" + +#: tfmmcx.lvjobs.columns[41].caption +msgid "OutputType" +msgstr "OutputType" + +#: tfmmcx.lvjobs.columns[42].caption +msgid "Boundary" +msgstr "Boundary" + +#: tfmmcx.lvjobs.columns[43].caption +msgid "SaveDetFlag" +msgstr "SaveDetFlag" + +#: tfmmcx.lvjobs.columns[44].caption +msgid "Benchmark" +msgstr "Benchmark" + +#: tfmmcx.lvjobs.columns[4].caption +msgid "PhotonNum" +msgstr "PhotonNum" + +#: tfmmcx.lvjobs.columns[5].caption +msgid "RespinNum" +msgstr "RespinNum" + +#: tfmmcx.lvjobs.columns[6].caption +msgid "ArrayOrder" +msgstr "ArrayOrder" + +#: tfmmcx.lvjobs.columns[7].caption +msgctxt "tfmmcx.lvjobs.columns[7].caption" +msgid "BubbleSize" +msgstr "BubbleSize" + +#: tfmmcx.lvjobs.columns[8].caption +msgctxt "tfmmcx.lvjobs.columns[8].caption" +msgid "GateNum" +msgstr "GateNum" + +#: tfmmcx.lvjobs.columns[9].caption +msgid "DoReflect" +msgstr "DoReflect" + +#: tfmmcx.mcxdoabout.caption +msgid "About" +msgstr "정보" + +#: tfmmcx.mcxdoabout.hint +msgid "About the author" +msgstr "개발자 정보" + +#: tfmmcx.mcxdoadditem.caption +msgid "New" +msgstr "새로 만들기" + +#: tfmmcx.mcxdoadditem.hint +msgid "Add a new task" +msgstr "새 작업 추가" + +#: tfmmcx.mcxdoconfig.caption +msgid "Setting" +msgstr "설정" + +#: tfmmcx.mcxdoconfig.hint +msgid "Modify default paths" +msgstr "기본 경로 수정" + +#: tfmmcx.mcxdocopy.caption +msgid "Copy session to clipboard" +msgstr "세션을 클립보드에 복사" + +#: tfmmcx.mcxdodefault.caption +msgid "Default" +msgstr "기본값" + +#: tfmmcx.mcxdodefault.hint +msgid "Set default values" +msgstr "기본값 설정" + +#: tfmmcx.mcxdodeleteitem.caption +msgctxt "tfmmcx.mcxdodeleteitem.caption" +msgid "Delete" +msgstr "삭제" + +#: tfmmcx.mcxdodeleteitem.hint +msgid "Delete selected task" +msgstr "선택된 작업 삭제" + +#: tfmmcx.mcxdodownloadmask.caption +msgid "Download volume labels (*_vol.nii)" +msgstr "볼륨 라벨 다운로드 (*_vol.nii)" + +#: tfmmcx.mcxdodownloadmask.hint +msgctxt "tfmmcx.mcxdodownloadmask.hint" +msgid "_vol.nii" +msgstr "_vol.nii" + +#: tfmmcx.mcxdodownloadmc2.caption +msgid "Download fluence" +msgstr "플루언스 다운로드" + +#: tfmmcx.mcxdodownloadmch.caption +msgid "Download detected photon data (*.mch)" +msgstr "탐지된 광자 데이터 다운로드 (*.mch)" + +#: tfmmcx.mcxdodownloadmch.hint +msgid ".mch" +msgstr ".mch" + +#: tfmmcx.mcxdoexit.caption +msgctxt "tfmmcx.mcxdoexit.caption" +msgid "Exit" +msgstr "종료" + +#: tfmmcx.mcxdoexit.hint +msgid "Exit MCX Studio" +msgstr "MCX 스튜디오 종료" + +#: tfmmcx.mcxdohelp.caption +msgctxt "tfmmcx.mcxdohelp.caption" +msgid "Help" +msgstr "도움말" + +#: tfmmcx.mcxdohelp.hint +msgctxt "tfmmcx.mcxdohelp.hint" +msgid "Browse help information" +msgstr "도움말 정보 탐색" + +#: tfmmcx.mcxdohelpoptions.caption +msgid "Options" +msgstr "옵션" + +#: tfmmcx.mcxdohelpoptions.hint +msgid "List command line options" +msgstr "명령줄 옵션 목록" + +#: tfmmcx.mcxdoopen.caption +msgid "Open" +msgstr "열기" + +#: tfmmcx.mcxdoopen.hint +msgid "Open a project or volume file" +msgstr "프로젝트 또는 볼륨 파일 열기" + +#: tfmmcx.mcxdopaste.caption +msgid "Paste session from clipboard" +msgstr "클립보드에서 세션 붙여넣기" + +#: tfmmcx.mcxdoplotjnifti.caption +msgid "Plot fluence (jnii)" +msgstr "플루언스 그래프 (jnii)" + +#: tfmmcx.mcxdoplotjnifti.hint +msgid ".jnii" +msgstr ".jnii" + +#: tfmmcx.mcxdoplotmc2.caption +msgid "Plot fluence (mc2)" +msgstr "플루언스 그래프 (mc2)" + +#: tfmmcx.mcxdoplotmc2.hint +msgid ".mc2" +msgstr ".mc2" + +#: tfmmcx.mcxdoplotmesh.caption +msgid "Plot mesh" +msgstr "메시 그래프" + +#: tfmmcx.mcxdoplotnifty.caption +msgid "Plot fluence (nii)" +msgstr "플루언스 그래프 (nii)" + +#: tfmmcx.mcxdoplotnifty.hint +msgid ".nii" +msgstr ".nii" + +#: tfmmcx.mcxdoplotvol.caption +msgid "Plot Volume" +msgstr "볼륨 그래프" + +#: tfmmcx.mcxdoplotvol.hint +msgctxt "tfmmcx.mcxdoplotvol.hint" +msgid "_vol.nii" +msgstr "_vol.nii" + +#: tfmmcx.mcxdoquery.caption +msgid "GPU" +msgstr "GPU" + +#: tfmmcx.mcxdoquery.hint +msgid "List GPU Info" +msgstr "GPU 정보 목록" + +#: tfmmcx.mcxdorun.caption +msgctxt "tfmmcx.mcxdorun.caption" +msgid "Run" +msgstr "실행" + +#: tfmmcx.mcxdorun.hint +msgid "Run selected task" +msgstr "선택된 작업 실행" + +#: tfmmcx.mcxdorunall.caption +msgid "Run All" +msgstr "모두 실행" + +#: tfmmcx.mcxdorunall.hint +msgid "Run all tasks" +msgstr "모든 작업 실행" + +#: tfmmcx.mcxdosave.caption +msgid "Save" +msgstr "저장" + +#: tfmmcx.mcxdosave.hint +msgid "Save tasks to a project file" +msgstr "작업을 프로젝트 파일에 저장" + +#: tfmmcx.mcxdostop.caption +msgid "Stop" +msgstr "중지" + +#: tfmmcx.mcxdostop.hint +msgid "Terminate current task" +msgstr "현재 작업 종료" + +#: tfmmcx.mcxdotoggleview.caption +msgid "Toggle View" +msgstr "보기 전환" + +#: tfmmcx.mcxdoverify.caption +msgid "Verify" +msgstr "검증" + +#: tfmmcx.mcxdoverify.hint +msgid "Verify parameters" +msgstr "매개변수 검증" + +#: tfmmcx.mcxdoweb.caption +msgid "Web" +msgstr "웹" + +#: tfmmcx.mcxdoweb.hint +msgid "MCX homepage" +msgstr "MCX 홈페이지" + +#: tfmmcx.mcxsetcurrent.caption +msgid "mcxSetCurrent" +msgstr "mcxSetCurrent" + +#: tfmmcx.menuitem1.caption +msgid "File" +msgstr "파일" + +#: tfmmcx.menuitem11.caption +msgid "Settings" +msgstr "설정" + +#: tfmmcx.menuitem2.caption +msgctxt "tfmmcx.menuitem2.caption" +msgid "Run" +msgstr "실행" + +#: tfmmcx.menuitem22.caption +msgid "Open output folder" +msgstr "출력 폴더 열기" + +#: tfmmcx.menuitem24.caption +msgid "Plot volume (_vol.nii)" +msgstr "볼륨 그래프 (_vol.nii)" + +#: tfmmcx.menuitem28.caption +msgid "Download fluence (mc2/nii/hdr/img)" +msgstr "플루언스 다운로드 (mc2/nii/hdr/img)" + +#: tfmmcx.menuitem3.caption +msgid "Tools" +msgstr "도구" + +#: tfmmcx.menuitem31.caption +msgid "Download detected photon data (mch)" +msgstr "탐지된 광자 데이터 다운로드 (mch)" + +#: tfmmcx.menuitem32.caption +msgid "Download volume mask (_vol.nii)" +msgstr "볼륨 마스크 다운로드 (_vol.nii)" + +#: tfmmcx.menuitem35.caption +msgid "MCX Documentation" +msgstr "MCX 문서" + +#: tfmmcx.menuitem35.hint +msgid "https://mcx.space/wiki/?Learn#mcx" +msgstr "https://mcx.space/wiki/?Learn#mcx" + +#: tfmmcx.menuitem36.caption +msgid "MMC Documentation" +msgstr "MMC 문서" + +#: tfmmcx.menuitem36.hint +msgid "https://mcx.space/wiki/?Learn#mmc" +msgstr "https://mcx.space/wiki/?Learn#mmc" + +#: tfmmcx.menuitem37.caption +msgid "MCX-CL Documentation" +msgstr "MCX-CL 문서" + +#: tfmmcx.menuitem37.hint +msgid "https://mcx.space/wiki/?Learn#mcxcl" +msgstr "https://mcx.space/wiki/?Learn#mcxcl" + +#: tfmmcx.menuitem39.caption +msgid "MCX/MCXCL User Forum (mcx-users)" +msgstr "MCX/MCXCL 사용자 포럼 (mcx-users)" + +#: tfmmcx.menuitem39.hint +msgid "https://groups.google.com/forum/?hl=en#!forum/mcx-users" +msgstr "https://groups.google.com/forum/?hl=en#!forum/mcx-users" + +#: tfmmcx.menuitem4.caption +msgctxt "tfmmcx.menuitem4.caption" +msgid "Help" +msgstr "도움말" + +#: tfmmcx.menuitem40.caption +msgid "MMC User Forum (mmc-users)" +msgstr "MMC 사용자 포럼 (mmc-users)" + +#: tfmmcx.menuitem40.hint +msgid "https://groups.google.com/forum/?hl=en#!forum/mmc-users" +msgstr "https://groups.google.com/forum/?hl=en#!forum/mmc-users" + +#: tfmmcx.menuitem41.caption +msgid "Iso2Mesh User Forum (iso2mesh-users)" +msgstr "Iso2Mesh 사용자 포럼 (iso2mesh-users)" + +#: tfmmcx.menuitem41.hint +msgid "https://groups.google.com/forum/?hl=en#!forum/iso2mesh-users" +msgstr "https://groups.google.com/forum/?hl=en#!forum/iso2mesh-users" + +#: tfmmcx.menuitem43.caption +msgid "Download Nightly-Build" +msgstr "야간 빌드 다운로드" + +#: tfmmcx.menuitem43.hint +msgid "https://mcx.space/nightly/" +msgstr "https://mcx.space/nightly/" + +#: tfmmcx.menuitem45.caption +msgid "MCX Github" +msgstr "MCX Github" + +#: tfmmcx.menuitem45.hint +msgid "https://github.com/fangq/mcx" +msgstr "https://github.com/fangq/mcx" + +#: tfmmcx.menuitem46.caption +msgid "MMC Github" +msgstr "MMC Github" + +#: tfmmcx.menuitem46.hint +msgid "https://github.com/fangq/mmc" +msgstr "https://github.com/fangq/mmc" + +#: tfmmcx.menuitem47.caption +msgid "MCX-CL Github" +msgstr "MCX-CL Github" + +#: tfmmcx.menuitem47.hint +msgid "https://github.com/fangq/mcxcl" +msgstr "https://github.com/fangq/mcxcl" + +#: tfmmcx.menuitem49.caption +msgid "Report MCX Issues" +msgstr "MCX 문제 보고" + +#: tfmmcx.menuitem49.hint +msgid "https://github.com/fangq/mcx/issues" +msgstr "https://github.com/fangq/mcx/issues" + +#: tfmmcx.menuitem50.caption +msgid "Report MMC Issues" +msgstr "MMC 문제 보고" + +#: tfmmcx.menuitem50.hint +msgid "https://github.com/fangq/mmc/issues" +msgstr "https://github.com/fangq/mmc/issues" + +#: tfmmcx.menuitem51.caption +msgid "Report MCX-CL Issues" +msgstr "MCX-CL 문제 보고" + +#: tfmmcx.menuitem51.hint +msgid "https://github.com/fangq/mcxcl/issues" +msgstr "https://github.com/fangq/mcxcl/issues" + +#: tfmmcx.menuitem53.caption +msgid "MCX GPU Speed Benchmark Database" +msgstr "MCX GPU 속도 벤치마크 데이터베이스" + +#: tfmmcx.menuitem53.hint +msgid "https://mcx.space/gpubench/" +msgstr "https://mcx.space/gpubench/" + +#: tfmmcx.menuitem55.caption +msgid "Refereces" +msgstr "참고문헌" + +#: tfmmcx.menuitem56.caption +msgid "[Fang2009] Original MCX Paper" +msgstr "[Fang2009] 원본 MCX 논문" + +#: tfmmcx.menuitem56.hint +msgid "http://www.osapublishing.org/oe/abstract.cfm?uri=oe-17-22-20178" +msgstr "http://www.osapublishing.org/oe/abstract.cfm?uri=oe-17-22-20178" + +#: tfmmcx.menuitem57.caption +msgid "[Fang2010] Original MMC Paper" +msgstr "[Fang2010] 원본 MMC 논문" + +#: tfmmcx.menuitem57.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-1-1-165" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-1-1-165" + +#: tfmmcx.menuitem58.caption +msgid "[Yu2018] Original MCX-CL Paper" +msgstr "[Yu2018] 원본 MCX-CL 논문" + +#: tfmmcx.menuitem58.hint +msgid "https://www.spiedigitallibrary.org/journals/journal-of-biomedical-optics/volume-23/issue-01/010504/Scalable-and-massively-parallel-Monte-Carlo-photon-transport-simulations-for/10.1117/1.JBO.23.1.010504.full?SSO=1#ArticleLink" +msgstr "https://www.spiedigitallibrary.org/journals/journal-of-biomedical-optics/volume-23/issue-01/010504/Scalable-and-massively-parallel-Monte-Carlo-photon-transport-simulations-for/10.1117/1.JBO.23.1.010504.full?SSO=1#ArticleLink" + +#: tfmmcx.menuitem59.caption +msgid "[Fang2011] MMC ray-tracing comparison" +msgstr "[Fang2011] MMC 광선 추적 비교" + +#: tfmmcx.menuitem59.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-2-5-1258" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-2-5-1258" + +#: tfmmcx.menuitem60.caption +msgid "[Fang2012] SIMD MMC" +msgstr "[Fang2012] SIMD MMC" + +#: tfmmcx.menuitem60.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-3-12-3223" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-3-12-3223" + +#: tfmmcx.menuitem61.caption +msgid "[Yao2016] Widefield MMC" +msgstr "[Yao2016] 광시야 MMC" + +#: tfmmcx.menuitem61.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-7-1-171" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-7-1-171" + +#: tfmmcx.menuitem62.caption +msgid "[Yao2018] Jacobians with photon replay" +msgstr "[Yao2018] 광자 재현을 통한 야코비안" + +#: tfmmcx.menuitem62.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-9-10-4588" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-9-10-4588" + +#: tfmmcx.menuitem63.caption +msgid "[Yan2019] Dual-grid MMC" +msgstr "[Yan2019] 이중 격자 MMC" + +#: tfmmcx.menuitem63.hint +msgid "https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fdx.doi.org%2F10.1117%2F1.JBO.24.2.020503&data=02%7C01%7Cq.fang%40northeastern.edu%7Cbb8daa56735543068b9c08d697592492%7Ca8eec281aaa34daeac9b9a398b9215e7%7C0%7C0%7C636862806460866013&sdata=2dWyN3eVPwwymydjXEWIHBfVZI43Fcl5zuZ8wiaJ10k%3D&reserved=0" +msgstr "https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fdx.doi.org%2F10.1117%2F1.JBO.24.2.020503&data=02%7C01%7Cq.fang%40northeastern.edu%7Cbb8daa56735543068b9c08d697592492%7Ca8eec281aaa34daeac9b9a398b9215e7%7C0%7C0%7C636862806460866013&sdata=2dWyN3eVPwwymydjXEWIHBfVZI43Fcl5zuZ8wiaJ10k%3D&reserved=0" + +#: tfmmcx.menuitem64.caption +msgid "MCX Main Web" +msgstr "MCX 메인 웹사이트" + +#: tfmmcx.menuitem66.caption +msgid "Table of all input flags" +msgstr "모든 입력 플래그 표" + +#: tfmmcx.menuitem66.hint +msgid "http://bit.ly/2K0rG4R " +msgstr "http://bit.ly/2K0rG4R " + +#: tfmmcx.menuitem69.caption +msgid "[Fang2019] GPU MMC" +msgstr "[Fang2019] GPU MMC" + +#: tfmmcx.menuitem69.hint +msgid "http://dx.doi.org/10.1117/1.JBO.24.11.115002" +msgstr "http://dx.doi.org/10.1117/1.JBO.24.11.115002" + +#: tfmmcx.menuitem70.caption +msgid "[Brain2Mesh2020] Brain2Mesh brain meshing toolbox" +msgstr "[Brain2Mesh2020] Brain2Mesh 뇌 메시 생성 툴박스" + +#: tfmmcx.menuitem70.hint +msgid "https://doi.org/10.1117/1.NPh.7.1.015008" +msgstr "https://doi.org/10.1117/1.NPh.7.1.015008" + +#: tfmmcx.menuitem71.caption +msgid "[Yuan2020] PBM over lifespan" +msgstr "[Yuan2020] 생애주기 PBM" + +#: tfmmcx.menuitem71.hint +msgid "https://doi.org/10.1117/1.NPh.7.1.015009" +msgstr "https://doi.org/10.1117/1.NPh.7.1.015009" + +#: tfmmcx.menuitem72.caption +msgid "[Yuan2021] Implicit MMC (iMMC)" +msgstr "[Yuan2021] 암시적 MMC (iMMC)" + +#: tfmmcx.menuitem72.hint +msgid "https://www.osapublishing.org/boe/fulltext.cfm?uri=boe-12-1-147" +msgstr "https://www.osapublishing.org/boe/fulltext.cfm?uri=boe-12-1-147" + +#: tfmmcx.menuitem73.caption +msgid "[Yan2020] SVMC hybrid method" +msgstr "[Yan2020] SVMC 하이브리드 방법" + +#: tfmmcx.menuitem73.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-11-11-6262" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-11-11-6262" + +#: tfmmcx.menuitem76.caption +msgid "Open Volume Viewer" +msgstr "볼륨 뷰어 열기" + +#: tfmmcx.menuitem9.caption +msgctxt "tfmmcx.menuitem9.caption" +msgid "Volume Designer" +msgstr "볼륨 디자이너" + +#: tfmmcx.miclearlog.caption +msgid "Clear Log" +msgstr "로그 지우기" + +#: tfmmcx.micopy.caption +msgid "Copy selected" +msgstr "선택 항목 복사" + +#: tfmmcx.miexportjson.caption +msgid "Export self-contained JSON input file" +msgstr "독립적인 JSON 입력 파일 내보내기" + +#: tfmmcx.miusematlab.caption +msgid "Print MATLAB plotting commands only" +msgstr "MATLAB 그래프 명령만 출력" + +#: tfmmcx.openhistoryfile.title +msgctxt "tfmmcx.openhistoryfile.title" +msgid "Open Photon History File (*.mch)" +msgstr "광자 이력 파일 열기 (*.mch)" + +#: tfmmcx.openproject.title +msgid "Open existing project" +msgstr "기존 프로젝트 열기" + +#: tfmmcx.openvolume.title +msgctxt "tfmmcx.openvolume.title" +msgid "Open Photon History File (*.mch)" +msgstr "광자 이력 파일 열기 (*.mch)" + +#: tfmmcx.rbusebench.caption +msgid "Built-in" +msgstr "내장" + +#: tfmmcx.rbusedesigner.caption +msgid "User-defined »" +msgstr "사용자 정의 »" + +#: tfmmcx.rbusefile.caption +msgid "Use Input File (-f)" +msgstr "입력 파일 사용 (-f)" + +#: tfmmcx.saveproject.title +msgid "Save project as" +msgstr "다른 이름으로 프로젝트 저장" + +#: tfmmcx.sbinfo.panels[0].text +msgid "Status: idle" +msgstr "상태: 대기 중" + +#: tfmmcx.sgconfig.columns[0].title.caption +msgctxt "tfmmcx.sgconfig.columns[0].title.caption" +msgid "Value" +msgstr "값" + +#: tfmmcx.sgconfig.hint +msgid "MCXConfig \n\nThis defines the remaining key parameters used in an MCX/MMC\nsimulation.\n" +msgstr "MCXConfig\n\n이는 MCX/MMC 시뮬레이션에서 사용되는 나머지 핵심 매개변수를 정의합니다.\n" + +#: tfmmcx.sgdet.hint +msgid "DetectorCfg \n\nThis table defines all detectors in the domain. \n\nPlease note that currently MCX/MMC only supports spherical detectors,\ndefined by the [x,y,z] center position and radius (radius).\n\nPlease also note that photon detection only happens before a photon is\nterminated, i.e. when it escapes the exterior bounding box or moving from\na non-zero voxel to a zero voxel. Therefore, a detector's aperature is the\nactual bounding box surface or the surface of the non-zero voxels truncated\nby a sphere centered at [x,y,z] with raidus r.\n\nDetector position is sensitive to the \"Origin from [0 0 0] -z\" flag.\n" +msgstr "DetectorCfg\n\n이 표는 도메인의 모든 검출기를 정의합니다.\n\n현재 MCX/MMC는 [x,y,z] 중심 위치와 반지름으로 정의되는 구형 검출기만 지원한다는 점에 유의하세요.\n\n또한 광자 탐지는 광자가 종료되기 전에만 발생한다는 점에 유의하세요, 즉 외부 경계 박스를 벗어나거나 비영 복셀에서 영 복셀로 이동할 때입니다. 따라서 검출기의 조리개는 실제 경계 박스 표면이거나 [x,y,z]를 중심으로 하고 반지름이 r인 구에 의해 잘린 비영 복셀의 표면입니다.\n\n검출기 위치는 \"[0 0 0]에서 시작하는 원점 -z\" 플래그에 민감합니다.\n" + +#: tfmmcx.sgmedia.columns[0].title.caption +msgid "μa (1/mm)" +msgstr "μa (1/mm)" + +#: tfmmcx.sgmedia.columns[1].title.caption +msgid "μs (1/mm)" +msgstr "μs (1/mm)" + +#: tfmmcx.sgmedia.columns[2].title.caption +msgid "g (anisotropy)" +msgstr "g (이방성)" + +#: tfmmcx.sgmedia.columns[3].title.caption +msgid "n (reflective index)" +msgstr "n (굴절률)" + +#: tfmmcx.sgmedia.hint +msgid "MediaCfg \n\nThis table defines the optical properties for all needed tissue labels.\n\nThe first row (label 0) is reserved for the background medium - which includes\nthe space outside the bounding box of the volume, as well as any voxels with\na zero-value.\n\nOne can select a row and copy/paste to other rows.\n\nIf more labels are needed, move to the bottom of the table, and press \"down\"\narrow key to create a new row below.\n" +msgstr "MediaCfg\n\n이 표는 필요한 모든 조직 라벨의 광학 특성을 정의합니다.\n\n첫 번째 행(라벨 0)은 배경 매질을 위해 예약되어 있습니다 - 여기에는 볼륨의 경계 박스 외부 공간과 영값을 가진 모든 복셀이 포함됩니다.\n\n행을 선택하고 다른 행에 복사/붙여넣기할 수 있습니다.\n\n더 많은 라벨이 필요하면, 표의 맨 아래로 이동하여 \"아래\" 화살표 키를 눌러 아래에 새 행을 만드세요.\n" + +#: tfmmcx.shapeaddbox.caption +msgid "Box" +msgstr "박스" + +#: tfmmcx.shapeaddbox.hint +msgid "Add a 3D box (using the center of the voxels - i.e. add 0.5 in all directions)" +msgstr "3D 박스 추가 (복셀의 중심 사용 - 즉, 모든 방향에 0.5 추가)" + +#: tfmmcx.shapeaddcylinder.caption +msgid "Cylinder" +msgstr "원통" + +#: tfmmcx.shapeaddcylinder.hint +msgid "Add a cylinder" +msgstr "원통 추가" + +#: tfmmcx.shapeaddgrid.caption +msgid "Grid" +msgstr "격자" + +#: tfmmcx.shapeaddgrid.hint +msgid "Define a uniform grid as the simulation space" +msgstr "시뮬레이션 공간으로 균일한 격자 정의" + +#: tfmmcx.shapeaddname.caption +msgid "Name" +msgstr "이름" + +#: tfmmcx.shapeaddname.hint +msgid "Define a name for the domain" +msgstr "도메인의 이름 정의" + +#: tfmmcx.shapeaddorigin.caption +msgid "Origin" +msgstr "원점" + +#: tfmmcx.shapeaddorigin.hint +msgid "Define the origin for subsequent objects" +msgstr "후속 객체들의 원점 정의" + +#: tfmmcx.shapeaddsphere.caption +msgid "Sphere" +msgstr "구체" + +#: tfmmcx.shapeaddsphere.hint +msgid "Add a 3D sphere" +msgstr "3D 구체 추가" + +#: tfmmcx.shapeaddsubgrid.caption +msgid "Subgrid" +msgstr "하위격자" + +#: tfmmcx.shapeaddsubgrid.hint +msgid "Add a 3D box (using the lower-corner of the voxel)" +msgstr "3D 박스 추가 (복셀의 하단 모서리 사용)" + +#: tfmmcx.shapeaddupperspace.caption +msgid "Upper" +msgstr "상부" + +#: tfmmcx.shapeaddupperspace.hint +msgid "Add an upper-space defined by a linear inequality" +msgstr "선형 부등식으로 정의된 상부 공간 추가" + +#: tfmmcx.shapeaddxlayers.caption +msgid "XLayers" +msgstr "X층" + +#: tfmmcx.shapeaddxlayers.hint +msgid "Add a layered structure along x-axis" +msgstr "x축을 따라 층상 구조 추가" + +#: tfmmcx.shapeaddxslabs.caption +msgid "XSlabs" +msgstr "X슬래브" + +#: tfmmcx.shapeaddxslabs.hint +msgid "Add a slab along x-axis" +msgstr "x축을 따라 슬래브 추가" + +#: tfmmcx.shapeaddylayers.caption +msgid "YLayers" +msgstr "Y층" + +#: tfmmcx.shapeaddylayers.hint +msgid "Add a layered structure along y-axis" +msgstr "y축을 따라 층상 구조 추가" + +#: tfmmcx.shapeaddyslabs.caption +msgid "YSlabs" +msgstr "Y슬래브" + +#: tfmmcx.shapeaddyslabs.hint +msgid "Add a slab along y-axis" +msgstr "y축을 따라 슬래브 추가" + +#: tfmmcx.shapeaddzlayers.caption +msgid "ZLayers" +msgstr "Z층" + +#: tfmmcx.shapeaddzlayers.hint +msgid "Add a layered structure along z-axis" +msgstr "z축을 따라 층상 구조 추가" + +#: tfmmcx.shapeaddzslabs.caption +msgid "ZSlabs" +msgstr "Z슬래브" + +#: tfmmcx.shapeaddzslabs.hint +msgid "Add a slab along z-axis" +msgstr "z축을 따라 슬래브 추가" + +#: tfmmcx.shapedelete.caption +msgctxt "tfmmcx.shapedelete.caption" +msgid "Delete" +msgstr "삭제" + +#: tfmmcx.shapedelete.hint +msgid "Delete selected object" +msgstr "선택된 객체 삭제" + +#: tfmmcx.shapeedit.caption +msgid "Edit" +msgstr "편집" + +#: tfmmcx.shapepreview.caption +msgctxt "tfmmcx.shapepreview.caption" +msgid "Preview" +msgstr "미리보기" + +#: tfmmcx.shapepreview.hint +msgctxt "tfmmcx.shapepreview.hint" +msgid "Preview" +msgstr "미리보기" + +#: tfmmcx.shapeprint.caption +msgid "Print" +msgstr "출력" + +#: tfmmcx.shapeprint.hint +msgid "Print selected object" +msgstr "선택된 객체 출력" + +#: tfmmcx.shapereset.caption +msgctxt "tfmmcx.shapereset.caption" +msgid "Reset" +msgstr "리셋" + +#: tfmmcx.shapereset.hint +msgid "Reset to a 60x60x60 homogeneous cubic domain" +msgstr "60x60x60 균질 입방체 도메인으로 리셋" + +#: tfmmcx.statictext1.caption +msgid "Additional Settings" +msgstr "추가 설정" + +#: tfmmcx.statictext2.caption +msgid "Media Settings" +msgstr "매체 설정" + +#: tfmmcx.statictext3.caption +msgid "Detector Settings (in voxel unit)" +msgstr "검출기 설정 (복셀 단위)" + +#: tfmmcx.tabinputdata.caption +msgid "Simulation Designer" +msgstr "시뮬레이션 디자이너" + +#: tfmmcx.tabvolumedesigner.caption +msgctxt "tfmmcx.tabvolumedesigner.caption" +msgid "Volume Designer" +msgstr "볼륨 디자이너" + +#: tfmmcx.tbtverify.caption +msgid "Validate" +msgstr "검증" + +#: tfmmcx.toolbar1.caption +msgid "MCX Ribon" +msgstr "MCX 리본" + +#: tfmmcx.toolbar2.caption +msgid "ToolBar2" +msgstr "ToolBar2" + +#: tfmmcx.toolbar3.caption +msgid "ToolBar3" +msgstr "ToolBar3" + +#: tfmmcx.toolbutton11.caption +msgid "Plot ▾" +msgstr "그래프 ▾" + +#: tfmmcx.toolbutton11.hint +msgid "Plot MCX output data" +msgstr "MCX 출력 데이터 그래프" + +#: tfmmcx.toolbutton12.caption +msgid "ToolButton12" +msgstr "ToolButton12" + +#: tfmmcx.toolbutton13.caption +msgid "ToolButton13" +msgstr "ToolButton13" + +#: tfmmcx.toolbutton17.caption +msgid "ToolButton17" +msgstr "ToolButton17" + +#: tfmmcx.toolbutton35.caption +msgid "ToolButton35" +msgstr "ToolButton35" + +#: tfmmcx.toolbutton39.hint +msgid "Reset volume and define a different dimension" +msgstr "볼륨 리셋하고 다른 차원 정의" + +#: tfmmcx.toolbutton5.caption +msgid "ToolButton5" +msgstr "ToolButton5" + +#: tfmmcx.toolbutton7.caption +msgctxt "tfmmcx.toolbutton7.caption" +msgid "Reset" +msgstr "리셋" + +#: tfmmcx.toolbutton8.caption +msgctxt "tfmmcx.toolbutton8.caption" +msgid "ToolButton8" +msgstr "ToolButton8" + +#: tfmmcx.toolbutton9.caption +msgid "Help ▾" +msgstr "도움말 ▾" + +#: tfmmcx.toolbutton9.hint +msgctxt "tfmmcx.toolbutton9.hint" +msgid "Browse help information" +msgstr "도움말 정보 탐색" + +#: tfmmcx.tvshapes.hint +msgctxt "tfmmcx.tvshapes.hint" +msgid "ShapeCfg" +msgstr "ShapeCfg" + +#: tfmmcx.vlbc.hint +msgid "Boundary \n\nUsing this box to set the boundary condition for each one of the 6\nfacets on the bounding box. A total of 4 boundary conditions are\nsupported:\n\n1. total absorbing BC: photon hiting the boundary are terminated\n2. Fresnel reflection BC: perform Fresnel reflection/transmission\n3. mirror/total reflection BC: photon is 100% reflected (can run a long time)\n4. cylic BC: a photon exiting from a facet will re-enter from the opposite one\n" +msgstr "Boundary\n\n이 박스를 사용하여 경계 박스의 6개 면 각각에 대한 경계 조건을 설정합니다. 총 4가지 경계 조건이 지원됩니다:\n\n1. 전체 흡수 BC: 경계에 맞는 광자가 종료됨\n2. 프레넬 반사 BC: 프레넬 반사/투과 수행\n3. 거울/전체 반사 BC: 광자가 100% 반사됨 (오랫동안 실행될 수 있음)\n4. 순환 BC: 한 면에서 나가는 광자가 반대편 면에서 다시 들어옴\n" + +#: tfmnewsession.btcancel.caption +msgctxt "tfmnewsession.btcancel.caption" +msgid "Cancel" +msgstr "취소" + +#: tfmnewsession.btok.caption +msgctxt "tfmnewsession.btok.caption" +msgid "OK" +msgstr "확인" + +#: tfmnewsession.caption +msgid "Create A New Simulation" +msgstr "새 시뮬레이션 생성" + +#: tfmnewsession.edsession.hint +msgctxt "tfmnewsession.edsession.hint" +msgid "Session" +msgstr "Session" + +#: tfmnewsession.grprogram.caption +msgctxt "tfmnewsession.grprogram.caption" +msgid "Run Monte Carlo simulation with" +msgstr "몬테카를로 시뮬레이션 실행 도구" + +#: tfmnewsession.grprogram.hint +msgid "Program" +msgstr "프로그램" + +#: tfmnewsession.label4.caption +msgid "Please type in a unique session name" +msgstr "고유한 세션 이름을 입력하세요" + +#: tfmnewsession.label4.hint +msgctxt "tfmnewsession.label4.hint" +msgid "-s (--sessionid)" +msgstr "-s (--sessionid)" + +#: tfmshapeeditor.btcancel.caption +msgctxt "tfmshapeeditor.btcancel.caption" +msgid "Cancel" +msgstr "취소" + +#: tfmshapeeditor.btok.caption +msgctxt "tfmshapeeditor.btok.caption" +msgid "OK" +msgstr "확인" + +#: tfmshapeeditor.caption +msgid "Edit Shapes" +msgstr "형태 편집" + +#: tfmsource.btcancel.caption +msgctxt "tfmsource.btcancel.caption" +msgid "Cancel" +msgstr "취소" + +#: tfmsource.btok.caption +msgctxt "tfmsource.btok.caption" +msgid "OK" +msgstr "확인" + +#: tfmsource.caption +msgid "Light Source Settings" +msgstr "광원 설정" + +#: tfmsource.edsource.text +msgid "pencil" +msgstr "연필" + +#: tfmsource.label4.caption +msgid "Please select a light source type:" +msgstr "광원 유형을 선택하세요:" + +#: tfmsource.label5.caption +msgid "Please define source parameters:" +msgstr "소스 매개변수를 정의하세요:" + +#: tfmstop.caption +msgid "Running ..." +msgstr "실행 중..." + +#: tfmstop.toolbar1.caption +msgid "Running" +msgstr "실행 중" + +#: tfmstop.toolbutton3.caption +msgid "Hide" +msgstr "숨기기" + +#: tfmstop.toolbutton3.hint +msgid "Hide this window" +msgstr "이 창 숨기기" + +#: tfmstop.toolbutton8.caption +msgctxt "tfmstop.toolbutton8.caption" +msgid "ToolButton8" +msgstr "ToolButton8" + +#: tfmviewer.btbackground.hint +msgctxt "tfmviewer.btbackground.hint" +msgid "Change Background Color" +msgstr "배경색 변경" + +#: tfmviewer.btopaque.caption +msgid "btOpaque" +msgstr "btOpaque" + +#: tfmviewer.btopaque.hint +msgid "Show Opaque Hull" +msgstr "불투명 외곽 표시" + +#: tfmviewer.caption +msgid "MCX Studio Volume Renderer" +msgstr "MCX 스튜디오 볼륨 렌더러" + +#: tfmviewer.grdir.caption +msgid "Slicing direction" +msgstr "슬라이싱 방향" + +#: tfmviewer.label1.caption +msgid "Rendering quality" +msgstr "렌더링 품질" + +#: tfmviewer.label2.caption +msgid "Cutting plane position:" +msgstr "절단면 위치:" + +#: tfmviewer.label3.caption +msgid "Invisible threshold" +msgstr "비가시 임계값" + +#: tfmviewer.label4.caption +msgid "Color level" +msgstr "색상 레벨" + +#: tfmviewer.mcxplotexit.caption +msgctxt "tfmviewer.mcxplotexit.caption" +msgid "Exit" +msgstr "종료" + +#: tfmviewer.mcxplotexit.hint +msgctxt "tfmviewer.mcxplotexit.hint" +msgid "Exit" +msgstr "종료" + +#: tfmviewer.mcxplotopen.caption +msgid "Open File" +msgstr "파일 열기" + +#: tfmviewer.mcxplotopen.hint +msgid "Open Data File" +msgstr "데이터 파일 열기" + +#: tfmviewer.mcxplotrefresh.caption +msgctxt "tfmviewer.mcxplotrefresh.caption" +msgid "Refresh" +msgstr "새로고침" + +#: tfmviewer.mcxplotrefresh.hint +msgctxt "tfmviewer.mcxplotrefresh.hint" +msgid "Refresh" +msgstr "새로고침" + +#: tfmviewer.mcxplotresetcamera.caption +msgctxt "tfmviewer.mcxplotresetcamera.caption" +msgid "Reset" +msgstr "리셋" + +#: tfmviewer.mcxplotsavescreen.caption +msgctxt "tfmviewer.mcxplotsavescreen.caption" +msgid "Save Screen" +msgstr "화면 저장" + +#: tfmviewer.mcxplotsavescreen.hint +msgid "Save screenshot" +msgstr "스크린샷 저장" + +#: tfmviewer.mcxplotshowbbx.caption +msgctxt "tfmviewer.mcxplotshowbbx.caption" +msgid "Show Bounding Box" +msgstr "경계 박스 표시" + +#: tfmviewer.mcxplotshowbbx.hint +msgctxt "tfmviewer.mcxplotshowbbx.hint" +msgid "Show Bounding Box" +msgstr "경계 박스 표시" + +#: tfmviewer.mcxplotusecolor.caption +msgid "Pseudocolor" +msgstr "의사색상" + +#: tfmviewer.mcxplotusecolor.hint +msgid "Use Pseudocolor" +msgstr "의사색상 사용" + +#: tfmviewer.toolbar1.caption +msgctxt "tfmviewer.toolbar1.caption" +msgid "ToolBar1" +msgstr "ToolBar1" + +#: tfmviewer.toolbutton10.caption +msgid "ToolButton10" +msgstr "ToolButton10" + +#: tfmviewer.toolbutton4.hint +msgid "Reset 3D View" +msgstr "3D 보기 리셋" + +#: tfmviewer.toolbutton9.caption +msgctxt "tfmviewer.toolbutton9.caption" +msgid "ToolButton9" +msgstr "ToolButton9" \ No newline at end of file diff --git a/mcxstudio/i18n/mcxstudio.po b/mcxstudio/i18n/mcxstudio.po index f0d318f1..e6e1275c 100644 --- a/mcxstudio/i18n/mcxstudio.po +++ b/mcxstudio/i18n/mcxstudio.po @@ -662,8 +662,8 @@ msgid "" "* Fluence rate [J/mm^2/s] - the default output\n" "* Fluence [J/mm^2] - the integration of the fluence \n" " rate over each time gate\n" -"* Energy density [J/mm^3] - can be computed by multiplying \n" -" fluence with absorption μa\n" +"* Energy deposition [J] - can be computed by multiplying \n" +" fluence with absorption μa and voxel volume [mm^3]\n" "* Absorption Jacobian (mua) [1/mm] - in the replay mode, this\n" " outputs the sensitivity matrix for μa;\n" "* Average scattering event count - in the replay mode, this\n" diff --git a/mcxstudio/i18n/mcxstudio.pt.po b/mcxstudio/i18n/mcxstudio.pt.po new file mode 100644 index 00000000..091f4b23 --- /dev/null +++ b/mcxstudio/i18n/mcxstudio.pt.po @@ -0,0 +1,1993 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 3.0.1\n" + +#: tfmabout.button1.caption +msgctxt "tfmabout.button1.caption" +msgid "OK" +msgstr "OK" + +#: tfmabout.caption +msgid "About Monte Carlo eXtreme Studio" +msgstr "Sobre o Monte Carlo eXtreme Studio" + +#: tfmabout.image3.hint +msgctxt "tfmabout.image3.hint" +msgid "About MCX" +msgstr "Sobre MCX" + +#: tfmconfig.btcancel.caption +msgctxt "tfmconfig.btcancel.caption" +msgid "Cancel" +msgstr "Cancelar" + +#: tfmconfig.btok.caption +msgctxt "tfmconfig.btok.caption" +msgid "OK" +msgstr "OK" + +#: tfmconfig.caption +msgid "MCX Studio Config" +msgstr "Configuração do MCX Studio" + +#: tfmconfig.ckusemanualpath.caption +msgid "Use Manual Paths" +msgstr "Usar Caminhos Manuais" + +#: tfmconfig.edlocalpath.columns[0].title.caption +msgctxt "tfmconfig.edlocalpath.columns[0].title.caption" +msgid "Value" +msgstr "Valor" + +#: tfmconfig.edscppath.hint +msgctxt "tfmconfig.edscppath.hint" +msgid "Local SCP Executable Path" +msgstr "Caminho do Executável SCP Local" + +#: tfmconfig.edsshpath.hint +msgid "Local SSH Path" +msgstr "Caminho SSH Local" + +#: tfmconfig.edworkpath.text +msgid "%MCXSTUDIO%/MCXOutput" +msgstr "%MCXSTUDIO%/MCXOutput" + +#: tfmconfig.groupbox2.caption +msgid "MCXStudio Local Output Root Directory" +msgstr "Diretório Raiz de Saída Local do MCX Studio" + +#: tfmconfig.groupbox3.caption +msgid "Remote MCX/MMC/MCXCl Executable Search Paths" +msgstr "Caminhos de Busca de Executáveis MCX/MMC/MCXCl Remotos" + +#: tfmconfig.groupbox4.caption +msgid "Local MCX/MMC/MCXCl Executable Search Paths" +msgstr "Caminhos de Busca de Executáveis MCX/MMC/MCXCl Locais" + +#: tfmconfig.groupbox5.caption +msgid "Local SSH Executable Path" +msgstr "Caminho do Executável SSH Local" + +#: tfmconfig.groupbox6.caption +msgctxt "tfmconfig.groupbox6.caption" +msgid "Local SCP Executable Path" +msgstr "Caminho do Executável SCP Local" + +#: tfmconfig.groupbox7.caption +msgid "Remote MCX/MMC/MCXCl Output Directory" +msgstr "Diretório de Saída MCX/MMC/MCXCl Remoto" + +#: tfmconfig.groupbox8.caption +msgid "Remote GPU Server" +msgstr "Servidor GPU Remoto" + +#: tfmconfig.label1.caption +msgid "Hostname or IP" +msgstr "Nome do host ou IP" + +#: tfmconfig.label2.caption +msgid "Port" +msgstr "Porta" + +#: tfmconfig.label3.caption +msgid "User name" +msgstr "Nome de usuário" + +#: tfmdatafile.btcancel.caption +msgctxt "tfmdatafile.btcancel.caption" +msgid "Cancel" +msgstr "Cancelar" + +#: tfmdatafile.btok.caption +msgctxt "tfmdatafile.btok.caption" +msgid "OK" +msgstr "OK" + +#: tfmdatafile.caption +msgid " Data File Properties" +msgstr "Propriedades do Arquivo de Dados" + +#: tfmdatafile.eddataformat.text +msgid "Float (32bit)" +msgstr "Float (32bits)" + +#: tfmdatafile.label10.caption +msgid "Data File" +msgstr "Arquivo de Dados" + +#: tfmdatafile.label4.caption +msgid "Y Dimension" +msgstr "Dimensão Y" + +#: tfmdatafile.label5.caption +msgid "X Dimension" +msgstr "Dimensão X" + +#: tfmdatafile.label6.caption +msgid "Z Dimension" +msgstr "Dimensão Z" + +#: tfmdatafile.label7.caption +msgctxt "tfmdatafile.label7.caption" +msgid "Time Gates" +msgstr "Janelas Temporais" + +#: tfmdatafile.label8.caption +msgctxt "tfmdatafile.label8.caption" +msgid "Time Gates" +msgstr "Janelas Temporais" + +#: tfmdatafile.label9.caption +msgid "Header Size" +msgstr "Tamanho do Cabeçalho" + +#: tfmdomain.acexit.caption +msgid "acExit" +msgstr "acExit" + +#: tfmdomain.acexit.hint +msgctxt "tfmdomain.acexit.hint" +msgid "Exit" +msgstr "Sair" + +#: tfmdomain.achidebbx.caption +msgid "acHideBBX" +msgstr "acHideBBX" + +#: tfmdomain.achidebbx.hint +msgid "Hide Domain Box" +msgstr "Ocultar Caixa de Domínio" + +#: tfmdomain.acloadjson.caption +msgid "acLoadJSON" +msgstr "acLoadJSON" + +#: tfmdomain.acloadjson.hint +msgid "Load JSON" +msgstr "Carregar JSON" + +#: tfmdomain.acrender.caption +msgid "acRender" +msgstr "acRender" + +#: tfmdomain.acrender.hint +msgid "Render" +msgstr "Renderizar" + +#: tfmdomain.acresetcamera.caption +msgid "acResetCamera" +msgstr "acResetCamera" + +#: tfmdomain.acresetcamera.hint +msgid "Reset Camera" +msgstr "Reiniciar Câmera" + +#: tfmdomain.acsaveimage.caption +msgid "acSaveImage" +msgstr "acSaveImage" + +#: tfmdomain.acsaveimage.hint +msgctxt "tfmdomain.acsaveimage.hint" +msgid "Save Screen" +msgstr "Salvar Tela" + +#: tfmdomain.acsavejson.caption +msgid "acSaveJSON" +msgstr "acSaveJSON" + +#: tfmdomain.acsavejson.hint +msgid "Save JSON" +msgstr "Salvar JSON" + +#: tfmdomain.btbackground.hint +msgctxt "tfmdomain.btbackground.hint" +msgid "Change Background Color" +msgstr "Alterar Cor de Fundo" + +#: tfmdomain.btpin.caption +msgid "Pin Editor" +msgstr "Fixar Editor" + +#: tfmdomain.btpin.hint +msgid "Show editor" +msgstr "Mostrar editor" + +#: tfmdomain.caption +msgid "MCX Domain Renderer" +msgstr "Renderizador de Domínio MCX" + +#: tfmdomain.toolbar1.caption +msgctxt "tfmdomain.toolbar1.caption" +msgid "ToolBar1" +msgstr "ToolBar1" + +#: tfmdomain.toolbutton11.caption +msgid "ToolButton11" +msgstr "ToolButton11" + +#: tfmdomain.toolbutton7.caption +msgid "ToolButton7" +msgstr "ToolButton7" + +#: tfmdomain.toolbutton9.caption +msgctxt "tfmdomain.toolbutton9.caption" +msgid "ToolButton9" +msgstr "ToolButton9" + +#: tfmmcx.btexpandoutput.caption +msgid "▵" +msgstr "▵" + +#: tfmmcx.btexpandoutput.hint +msgid "To expand or collapse the command window." +msgstr "Para expandir ou recolher a janela de comandos." + +#: tfmmcx.btgbexpand.caption +msgid "▾" +msgstr "▾" + +#: tfmmcx.btloadseed.hint +msgid "Load seed data from previous simulations for replay" +msgstr "Carregar dados de semente de simulações anteriores para repetição" + +#: tfmmcx.btsendcmd.caption +msgid "Send" +msgstr "Enviar" + +#: tfmmcx.btsendcmd.hint +msgid "Send the user input to the input buffer of the external program \ncurrently being executed.\n" +msgstr "Enviar a entrada do usuário para o buffer de entrada do programa externo atualmente sendo executado.\n" + +#: tfmmcx.button2.caption +msgid "Clear Output" +msgstr "Limpar Saída" + +#: tfmmcx.caption +msgid "MCX Studio" +msgstr "MCX Studio" + +#: tfmmcx.ckautopilot.caption +msgid "Let MCX decide thread/block size (-A)" +msgstr "Deixar MCX decidir tamanho de thread/bloco (-A)" + +#: tfmmcx.ckautopilot.hint +msgid "Autopilot \n\nChecking this box tells MCX/MMC to automatically determine the \"optimal\"\nthread number and block size by using the hardware information.\n\nIt is recommended to always check this box. The key to maximize simulation\nthroughput is to ensure a large number of threads are launched to keep the\nhardware resources fully utilized.\n" +msgstr "Piloto Automático\n\nMarcar esta caixa diz ao MCX/MMC para determinar automaticamente o número \"ótimo\" de threads e tamanho de bloco usando as informações do hardware.\n\nÉ recomendado sempre marcar esta caixa. A chave para maximizar o throughput da simulação é garantir que um grande número de threads sejam lançadas para manter os recursos de hardware completamente utilizados.\n" + +#: tfmmcx.ckbdebug.hint +msgctxt "tfmmcx.ckbdebug.hint" +msgid "DebugFlags" +msgstr "DebugFlags" + +#: tfmmcx.ckbdet.hint +msgid "SaveDetFlag \n\nThis checkbox list allows users to select the detected photon\ndata items that they want to save in the .mch file.\n\nBy default, only the Detector ID and Partial Pathlength are stored.\n" +msgstr "SaveDetFlag\n\nEsta lista de caixas de seleção permite aos usuários selecionar os itens de dados de fótons detectados que desejam salvar no arquivo .mch.\n\nPor padrão, apenas o ID do Detector e o Comprimento Parcial do Caminho são armazenados.\n" + +#: tfmmcx.ckdoremote.caption +msgid "Run remote command:" +msgstr "Executar comando remoto:" + +#: tfmmcx.ckdoremote.hint +msgid "DoRemote \n\nCheck this option asks MCXStudio to call the specified ssh command \nand run mcx/mmc simulations on remote servers. \n\nPlease be aware that one must prepare the server and client to enable\nremote execution, this include\n\n1. install mcx/mmc/mcxcl executable on remote server and add path to\n the PATH environment \n2. install ssh client on the local client; for Linux/Mac, ssh/scp command is\n typically built-in; for windows, please install plink.exe and pscp.exe and\n ensure that their paths are on the PATH environment variable\n3. optionally, one can set the SSH key between the client and server to \n avoid typing password, please see http://www.linuxproblem.org/art_9.html\n" +msgstr "DoRemote\n\nMarcar esta opção pede ao MCX Studio para chamar o comando ssh especificado e executar simulações mcx/mmc em servidores remotos.\n\nPor favor, esteja ciente de que é preciso preparar o servidor e cliente para habilitar a execução remota, isso inclui:\n\n1. instalar o executável mcx/mmc/mcxcl no servidor remoto e adicionar o caminho à variável de ambiente PATH\n2. instalar cliente ssh no cliente local; para Linux/Mac, o comando ssh/scp é normalmente integrado; para Windows, por favor instale plink.exe e pscp.exe e certifique-se de que seus caminhos estão na variável de ambiente PATH\n3. opcionalmente, pode-se configurar a chave SSH entre o cliente e servidor para evitar digitar senha, veja http://www.linuxproblem.org/art_9.html\n" + +#: tfmmcx.ckdoreplay.caption +msgid "Replay" +msgstr "Repetir" + +#: tfmmcx.ckdoreplay.hint +msgid "DoReplay \n\nWhen selecting a .mch file as the seed, this checkbox is automatically \nchecked, signifying that MCX/MMC will perform a photon replay by\nreading the RNG seeds from the .mch file and rerun the photons to produce\nthe Jacobians - in such case, one can use the \"Output Type\" to select which\nmetric to output.\n" +msgstr "DoReplay\n\nAo selecionar um arquivo .mch como semente, esta caixa de seleção é automaticamente marcada, indicando que MCX/MMC irá realizar uma repetição de fótons lendo as sementes RNG do arquivo .mch e executar novamente os fótons para produzir os Jacobianos - neste caso, pode-se usar o \"Tipo de Saída\" para selecionar qual métrica será gerada.\n" + +#: tfmmcx.cklockgpu.caption +msgid "Lock GPU" +msgstr "Bloquear GPU" + +#: tfmmcx.cklockgpu.hint +msgid "Checking this box prevents MCXStudio from updating the device list\nwhen switching between different simulation sessions.\n\nWhen running simulation on a remote server, it is recommended to\nlock the GPU to avoid resetting of the device list.\n" +msgstr "Marcar esta caixa impede que o MCX Studio atualize a lista de dispositivos ao alternar entre diferentes sessões de simulação.\n\nAo executar simulação em um servidor remoto, é recomendado bloquear a GPU para evitar a reinicialização da lista de dispositivos.\n" + +#: tfmmcx.cknormalize.caption +msgid "Do normalization (-U)" +msgstr "Fazer normalização (-U)" + +#: tfmmcx.cknormalize.hint +msgid "DoNormalize \n\nCheck this option allows MCX/MMC to normalize the output by the \nbelow formula\n\nΦ(i,j,k,t)=E(i,j,k,t) / (V*E_total*dT)\n\nwhere E(i,j,k,t) is the raw accummuated energy at each voxel; \nV is the size of the voxel in mm^3; dT is the time-gate width in s.\n\nAfter normalization, the result becomes TPSF or Green's function.\n\nUnchecking this option disables normalization.\n" +msgstr "DoNormalize\n\nMarcar esta opção permite ao MCX/MMC normalizar a saída pela fórmula abaixo:\n\nΦ(i,j,k,t)=E(i,j,k,t) / (V*E_total*dT)\n\nonde E(i,j,k,t) é a energia bruta acumulada em cada voxel; V é o tamanho do voxel em mm^3; dT é a largura da janela temporal em s.\n\nApós a normalização, o resultado torna-se TPSF ou função de Green.\n\nDesmarcar esta opção desabilita a normalização.\n" + +#: tfmmcx.ckreflect.caption +msgid "Do reflection all boundaries (-b)" +msgstr "Fazer reflexão em todos os limites (-b)" + +#: tfmmcx.ckreflect.hint +msgid "DoReflect \n\nCheck this option (by default) enables reflection/refrection calculations \nwhen refractive index mismatch is detected at tissue boundaries.\n\nIf this option is unchecked, any photon hits the boundary between a \nnon-zero and zero-valued voxel will be terminated (i.e. total\nabsorbtion boundary condition). \n\nThe medium outside of the volume bounding box is assumed to have \nthe optical properties defined as label 0 (the first row in the Media Settings\ntable on the right).\n" +msgstr "DoReflect\n\nMarcar esta opção (por padrão) habilita cálculos de reflexão/refração quando incompatibilidade de índice refrativo é detectada nos limites do tecido.\n\nSe esta opção estiver desmarcada, qualquer fóton que atingir o limite entre um voxel de valor não-zero e zero será terminado (ou seja, condição de limite de absorção total).\n\nO meio fora da caixa delimitadora do volume é assumido como tendo as propriedades ópticas definidas como rótulo 0 (a primeira linha na tabela de Configurações de Mídia à direita).\n" + +#: tfmmcx.cksavedata.caption +msgid "Save fluence (-S)" +msgstr "Salvar fluência (-S)" + +#: tfmmcx.cksavedata.hint +msgid "DoSave \n\nChecking this option makes MCX/MMC outputs the volumetric fluence\ndata: for MCX, it is the .mc2/.nii file; for MMC, it is a .dat file using P/H/B/S \nray-tracers and .mc2/.nii files when using the dual-grid mode (-M G).\n\nUnchecking this option stops MCX/MMC output the .mc2/.nii file.\n" +msgstr "DoSave\n\nMarcar esta opção faz com que MCX/MMC gere os dados de fluência volumétrica: para MCX, é o arquivo .mc2/.nii; para MMC, é um arquivo .dat usando rastreadores de raios P/H/B/S e arquivos .mc2/.nii quando usando o modo de grade dupla (-M G).\n\nDesmarcar esta opção impede a saída do arquivo .mc2/.nii do MCX/MMC.\n" + +#: tfmmcx.cksavedetector.caption +msgid "Save detected photons (-d)" +msgstr "Salvar fótons detectados (-d)" + +#: tfmmcx.cksavedetector.hint +msgid "SaveDetector \n\nChecking this option allows one to store detected photon \ninformation. The output data records can be user-defined by\nselecting the check-box list entitled \"Save detected photon\".\nThe output data are stored in a .mch file.\n\nUnchecking this option disables output the .mch file (can be \nslightly faster).\n" +msgstr "SaveDetector\n\nMarcar esta opção permite armazenar informações de fótons detectados. Os registros de dados de saída podem ser definidos pelo usuário selecionando a lista de caixas de seleção intitulada \"Salvar fóton detectado\". Os dados de saída são armazenados em um arquivo .mch.\n\nDesmarcar esta opção desabilita a saída do arquivo .mch (pode ser ligeiramente mais rápido).\n" + +#: tfmmcx.cksavemask.caption +msgid "Save volume mask (-M)" +msgstr "Salvar máscara de volume (-M)" + +#: tfmmcx.cksavemask.hint +msgid "DoSaveMask \n\nChecking this option asks MCX to output the pre-processed volume \nmasks. The preprocessed mask contains the voxels that are covered\nunder detectors; these voxels are designated by setting the sign-bit \nas 1. One can visualize this dumped data mask using mcxplotvol.m\n\nUnchecking this option suppresses the output of this mask file.\n" +msgstr "DoSaveMask\n\nMarcar esta opção pede ao MCX para gerar as máscaras de volume pré-processadas. A máscara pré-processada contém os voxels que estão cobertos sob detectores; estes voxels são designados configurando o bit de sinal como 1. Pode-se visualizar esta máscara de dados despejada usando mcxplotvol.m\n\nDesmarcar esta opção suprime a saída deste arquivo de máscara.\n" + +#: tfmmcx.cksaveref.caption +msgid "Save diffuse reflectance (-X)" +msgstr "Salvar reflectância difusa (-X)" + +#: tfmmcx.cksaveref.hint +msgid "DoSaveRef \n\nChecking this option allows MCX/MMC to output the escaped photon\nweights on the exterior surface of the domain. For MCX, to save the \ntotal diffuse reflectance, one must pad a layer of zero voxels in the \nfacet or full bounding box of the domain to store such data. The raw \ntotal diffuse reflectance are normalized and stored as negative values\nin the .mc2/.nii file. When loading such file using loadmc2.m, the diffuse\nreflectance data are extracted and converted to positive output.\n\nUnchecking this option disables saving diffuse reflectance data.\n" +msgstr "DoSaveRef\n\nMarcar esta opção permite ao MCX/MMC gerar os pesos de fótons escapados na superfície exterior do domínio. Para MCX, para salvar a reflectância difusa total, deve-se preencher uma camada de voxels zero na faceta ou caixa delimitadora completa do domínio para armazenar tais dados. A reflectância difusa total bruta é normalizada e armazenada como valores negativos no arquivo .mc2/.nii. Ao carregar tal arquivo usando loadmc2.m, os dados de reflectância difusa são extraídos e convertidos para saída positiva.\n\nDesmarcar esta opção desabilita o salvamento de dados de reflectância difusa.\n" + +#: tfmmcx.cksaveseed.caption +msgid "Save photon seeds (-q)" +msgstr "Salvar sementes de fótons (-q)" + +#: tfmmcx.cksaveseed.hint +msgid "DoSaveSeed \n\nChecking this option allows one to save the RNG seeds of the detected\nphotons in the .mch file. This makes it possible to perform photon replay\nto compute the Jacobian when feeding this output .mch file as the seed\nfor the replay run.\n\nUnchecking this option disables saving photon seeds.\n" +msgstr "DoSaveSeed\n\nMarcar esta opção permite salvar as sementes RNG dos fótons detectados no arquivo .mch. Isso torna possível realizar repetição de fótons para calcular o Jacobiano ao alimentar este arquivo .mch de saída como a semente para a execução de repetição.\n\nDesmarcar esta opção desabilita o salvamento de sementes de fótons.\n" + +#: tfmmcx.cksharedfs.caption +msgid "Shared file system" +msgstr "Sistema de arquivos compartilhado" + +#: tfmmcx.cksharedfs.hint +msgid "DoSharedFS \n\nChecking this option suggests that both the client and the server\nshare the same file system, thus, no file copying is needed. In other\nword, the folder structure to read/write on both client and server\nare identical. This is the case when one uses nfs/autofs on Linux/Mac.\n" +msgstr "DoSharedFS\n\nMarcar esta opção sugere que tanto o cliente quanto o servidor compartilham o mesmo sistema de arquivos, portanto, nenhuma cópia de arquivo é necessária. Em outras palavras, a estrutura de pastas para ler/escrever tanto no cliente quanto no servidor são idênticas. Este é o caso quando se usa nfs/autofs no Linux/Mac.\n" + +#: tfmmcx.ckshowprogress.caption +msgid "Show progress bar" +msgstr "Mostrar barra de progresso" + +#: tfmmcx.ckshowprogress.hint +msgid "ShowProgress \n\n(This option is highly experimental, use with caution, may cause hanging on some GPUs)\n\nCheck this option to let MCX/MMC to print a progress bar during the\nGPU simulation. In some hardware, this may cause unstable behaviors\nsuch as stalling or never return even the simulation is complete. If such\nbehavior is detected, please uncheck this option.\n" +msgstr "ShowProgress\n\n(Esta opção é altamente experimental, use com cautela, pode causar travamento em algumas GPUs)\n\nMarque esta opção para permitir ao MCX/MMC imprimir uma barra de progresso durante a simulação GPU. Em alguns hardwares, isso pode causar comportamentos instáveis como travamento ou nunca retornar mesmo quando a simulação está completa. Se tal comportamento for detectado, por favor desmarque esta opção.\n" + +#: tfmmcx.ckskipvoid.caption +msgid "Skip void space (-k)" +msgstr "Pular espaço vazio (-k)" + +#: tfmmcx.ckskipvoid.hint +msgid "DoSkipVoid \n\nChecking this option starts photon's ellapse time when it first enters\na non-zero voxel.\n\nUnchecking this option starts photon's ellapse time at launch time,\nregardless it is launched in the background (0-valued) voxel or non-zero\nvoxel.\n" +msgstr "DoSkipVoid\n\nMarcar esta opção inicia o tempo decorrido do fóton quando ele primeiro entra em um voxel não-zero.\n\nDesmarcar esta opção inicia o tempo decorrido do fóton no momento do lançamento, independentemente de ser lançado no voxel de fundo (valor 0) ou voxel não-zero.\n" + +#: tfmmcx.ckspecular.caption +msgid "Do specular reflection (-V)" +msgstr "Fazer reflexão especular (-V)" + +#: tfmmcx.ckspecular.hint +msgid "DoSpecular \n\nChecking this option performs a transmission calculation if a photon \nis launched in the background; this results in change of direction angle\nand loss of energy.\n\nUnchecking this option moves a photon into a non-zero voxel without\nconsidering the specular reflection and change of direction.\n" +msgstr "DoSpecular\n\nMarcar esta opção realiza um cálculo de transmissão se um fóton é lançado no fundo; isso resulta em mudança do ângulo de direção e perda de energia.\n\nDesmarcar esta opção move um fóton para um voxel não-zero sem considerar a reflexão especular e mudança de direção.\n" + +#: tfmmcx.cksrcfrom0.caption +msgid "Orign from [0,0,0] (-z)" +msgstr "Origem de [0,0,0] (-z)" + +#: tfmmcx.cksrcfrom0.hint +msgid "DoSrcFrom0 \n\nChecking this item assumes the lower-bottom corner of the voxelated \ndomain is [0,0,0] mm. The definitions of source and detector positions \nare impacted by this definition.\n\nUnchecking this option assumes the lower-bottom corner of the \ndomain is [1,1,1] mm.\n" +msgstr "DoSrcFrom0\n\nMarcar este item assume que o canto inferior esquerdo do domínio voxelizado é [0,0,0] mm. As definições das posições de fonte e detector são impactadas por esta definição.\n\nDesmarcar esta opção assume que o canto inferior esquerdo do domínio é [1,1,1] mm.\n" + +#: tfmmcx.edbenchmark.hint +msgid "Benchmark \n\nThis option asks to run the built-in benchmark.\n" +msgstr "Benchmark\n\nEsta opção solicita executar o benchmark integrado.\n" + +#: tfmmcx.edblocksize.hint +msgid "ThreadBlock \n\nSpecify a small integer, preferably a multiple of 32, to define \nthe block size - for example, 64 means a thread block contains \n64 threads.\n\nThis is only used when the -A (autopilot mode) is not enabled.\n" +msgstr "ThreadBlock\n\nEspecificar um inteiro pequeno, preferencialmente um múltiplo de 32, para definir o tamanho do bloco - por exemplo, 64 significa que um bloco de thread contém 64 threads.\n\nIsto é usado apenas quando o -A (modo piloto automático) não está habilitado.\n" + +#: tfmmcx.edblocksize.text +msgid "64" +msgstr "64" + +#: tfmmcx.edbubble.hint +msgctxt "tfmmcx.edbubble.hint" +msgid "BubbleSize" +msgstr "BubbleSize" + +#: tfmmcx.edbubble.text +msgid "-2" +msgstr "-2" + +#: tfmmcx.edcmdinput.hint +msgid "User Input\n\nWhen connecting to a remote server via ssh/scp, one may asked to type\n\"yes\" to save the ssh key or other interactive inputs. If this is the case, one\ncan use this field to type user input, and click \"Send\" to pipe user input to \nthe external program.\n" +msgstr "Entrada do Usuário\n\nAo conectar a um servidor remoto via ssh/scp, pode-se ser solicitado a digitar \"yes\" para salvar a chave ssh ou outras entradas interativas. Se este for o caso, pode-se usar este campo para digitar a entrada do usuário, e clicar \"Enviar\" para canalizar a entrada do usuário para o programa externo.\n" + +#: tfmmcx.edconfigfile.hint +msgid "InputFile \n\nSpecify the input file in either .inp or .json format.\n" +msgstr "InputFile\n\nEspecificar o arquivo de entrada em formato .inp ou .json.\n" + +#: tfmmcx.eddetectednum.hint +msgid "DetectedNum \n\nThis sets the maximum number of detected photons to be stored. If\nthe actual detected photon number is higher than this specified number,\nmcx/mmc will generate an warning and print out the actual detected \nphoton count; one can use that output in this field to allow MCX to store\nall photons.\n" +msgstr "DetectedNum\n\nIsto define o número máximo de fótons detectados a serem armazenados. Se o número real de fótons detectados for maior que este número especificado, mcx/mmc gerará um aviso e imprimirá a contagem real de fótons detectados; pode-se usar essa saída neste campo para permitir ao MCX armazenar todos os fótons.\n" + +#: tfmmcx.eddetectednum.text +msgid "10000000" +msgstr "10000000" + +#: tfmmcx.edgate.hint +msgctxt "tfmmcx.edgate.hint" +msgid "GateNum" +msgstr "GateNum" + +#: tfmmcx.edgpuid.hint +msgid "GPUID \n\nUse this list to select the device or devices (CPU or GPU) used to\nrun the simulation. For MCX, if multiple CUDA GPUs are installed, one\ncan select multiple devices to speed up the calculation; for MCXCL\nand MMC, one can select OpenCL devices that include both CPU and\nGPUs. In such case, only devices of the same platform can be selected.\nFor example, an NVIDIA GPU and a CPU can not be selected together.\n" +msgstr "GPUID\n\nUse esta lista para selecionar o dispositivo ou dispositivos (CPU ou GPU) usados para executar a simulação. Para MCX, se múltiplas GPUs CUDA estiverem instaladas, pode-se selecionar múltiplos dispositivos para acelerar o cálculo; para MCXCL e MMC, pode-se selecionar dispositivos OpenCL que incluem tanto CPU quanto GPUs. Neste caso, apenas dispositivos da mesma plataforma podem ser selecionados. Por exemplo, uma GPU NVIDIA e uma CPU não podem ser selecionadas juntas.\n" + +#: tfmmcx.edmoreparam.hint +msgid "MoreParam \n\nOne can use this field to manually specify additional parameters that\nare not supported by this GUI tool. Any parameter set here will overwrite\nthe previous setting.\n" +msgstr "MoreParam\n\nPode-se usar este campo para especificar manualmente parâmetros adicionais que não são suportados por esta ferramenta GUI. Qualquer parâmetro definido aqui sobrescreverá a configuração anterior.\n" + +#: tfmmcx.edoutputformat.hint +msgid "OutputFormat \n\nThis specifies the output data file format. The supported formats are\n\n.mc2 - a simple binary format stores the voxel-by-voxel binary data\n in the column-major order\n.nii - the NIfTI-1 format\n.tx3 - a simple 3D texture binary format.\nascii - text-based data file\n" +msgstr "OutputFormat\n\nIsto especifica o formato do arquivo de dados de saída. Os formatos suportados são:\n\n.mc2 - um formato binário simples que armazena os dados binários voxel por voxel na ordem de coluna principal\n.nii - o formato NIfTI-1\n.tx3 - um formato binário de textura 3D simples\nascii - arquivo de dados baseado em texto\n" + +#: tfmmcx.edoutputtype.hint +msgid "OutputType \n\nThis option specifies the output data type. \n\n* Fluence rate [J/mm^2/s] - the default output\n* Fluence [J/mm^2] - the integration of the fluence \n rate over each time gate\n* Energy deposition [J] - can be computed by multiplying \n fluence with absorption μa and voxel volume [mm^3]\n* Absorption Jacobian (mua) [1/mm] - in the replay mode, this\n outputs the sensitivity matrix for μa;\n* Average scattering event count - in the replay mode, this\n outputs the number of scattering event per voxel\n* Momentum transfer sensivity (DCS) - in the replay mode, this \n outputs the momentum transfer contribution/sensitivity from \n each voxel.\n" +msgstr "OutputType\n\nEsta opção especifica o tipo de dados de saída.\n\n* Taxa de fluência [J/mm^2/s] - a saída padrão\n* Fluência [J/mm^2] - a integração da taxa de fluência sobre cada janela temporal\n* Deposição de energia [J] - pode ser calculada multiplicando a fluência com a absorção μa e volume do voxel [mm^3]\n* Jacobiano de absorção (mua) [1/mm] - no modo de repetição, isso gera a matriz de sensibilidade para μa\n* Contagem média de eventos de espalhamento - no modo de repetição, isso gera o número de eventos de espalhamento por voxel\n* Sensibilidade de transferência de momento (DCS) - no modo de repetição, isso gera a contribuição/sensibilidade de transferência de momento de cada voxel\n" + +#: tfmmcx.edphoton.hint +msgid "PhotonNum \n\nThis defines the total simulated photons.\n\nCan be an integer or number in scientific form. For example\n100000 and 1e5 are both acceptable.\n\nPlease be noted that we highly suggest one to start with a\nsmall photon number to avoid extended run time.\n" +msgstr "PhotonNum\n\nIsto define o total de fótons simulados.\n\nPode ser um inteiro ou número em forma científica. Por exemplo, 100000 e 1e5 são ambos aceitáveis.\n\nPor favor note que recomendamos altamente começar com um número pequeno de fótons para evitar tempo de execução estendido.\n" + +#: tfmmcx.edphoton.text +msgid "1e6" +msgstr "1e6" + +#: tfmmcx.edphoton.texthint +msgid "Integer" +msgstr "Inteiro" + +#: tfmmcx.edremote.hint +msgid "RemoteCmd \n\nPlease choose the remote connection command using the dropdown list, or\ntype in this field manually. For windows, it is recommended to choose the \nplink.exe command; for Linux, it is recommended to use the ssh command.\n\nPlease replace the user@server by the actual username and the server IP\nor domain name.\n\nYou are highly recommended to set up key-based ssh access to avoid typing\npassword. Tutorials can be found at http://www.linuxproblem.org/art_9.html\n" +msgstr "RemoteCmd\n\nPor favor escolha o comando de conexão remota usando a lista suspensa, ou digite neste campo manualmente. Para Windows, é recomendado escolher o comando plink.exe; para Linux, é recomendado usar o comando ssh.\n\nPor favor substitua user@server pelo nome de usuário real e o IP do servidor ou nome de domínio.\n\nÉ altamente recomendado configurar acesso ssh baseado em chave para evitar digitar senha. Tutoriais podem ser encontrados em http://www.linuxproblem.org/art_9.html\n" + +#: tfmmcx.edremote.text +msgid "Built-in ssh" +msgstr "ssh integrado" + +#: tfmmcx.edreplaydet.hint +msgctxt "tfmmcx.edreplaydet.hint" +msgid "ReplayDet" +msgstr "ReplayDet" + +#: tfmmcx.edrespin.hint +msgid "RespinNum \n\nSetting this to a positive number will repeat the simulation by the specified\nrepeition count starting from different random seeds.\n\nA negative integer asks MCX to divide the total photon number by the \nabsolute value of this input and run each subpart at a time. This can \nreduce the per-call run time, but may result in extensive overhead of\nrunning repeated simulations.\n" +msgstr "RespinNum\n\nDefinir isto para um número positivo irá repetir a simulação pela contagem de repetição especificada começando de diferentes sementes aleatórias.\n\nUm inteiro negativo pede ao MCX para dividir o número total de fótons pelo valor absoluto desta entrada e executar cada subparte de cada vez. Isso pode reduzir o tempo de execução por chamada, mas pode resultar em sobrecarga extensiva de executar simulações repetidas.\n" + +#: tfmmcx.edseed.hint +msgid "Seed \n\nIf this field is a large integer number, this specifies the RNG seed; \n\nif this is a file name ending with .mch, it loads an .mch file generated \nfrom previous simulation and replays the detected photons.\n" +msgstr "Seed\n\nSe este campo é um número inteiro grande, isso especifica a semente RNG;\n\nse isso é um nome de arquivo terminando com .mch, ele carrega um arquivo .mch gerado de simulação anterior e repete os fótons detectados.\n" + +#: tfmmcx.edseed.text +msgid "1648335518" +msgstr "1648335518" + +#: tfmmcx.edseed.texthint +msgid "A large integer or .mch file name" +msgstr "Um inteiro grande ou nome de arquivo .mch" + +#: tfmmcx.edsession.hint +msgid "Session \n\nThis string will be used in all output files as part of the file names.\n" +msgstr "Session\n\nEsta string será usada em todos os arquivos de saída como parte dos nomes de arquivo.\n" + +#: tfmmcx.edthread.hint +msgid "ThreadNum \n\nSpecify a large integer multiple of 32 (the warp size) to manually \ndefine the thread numbers.\n\nThis is only used when the -A (autopilot mode) is not enabled.\n" +msgstr "ThreadNum\n\nEspecificar um inteiro grande múltiplo de 32 (o tamanho do warp) para definir manualmente os números de thread.\n\nIsto é usado apenas quando o -A (modo piloto automático) não está habilitado.\n" + +#: tfmmcx.edthread.text +msgid "16384" +msgstr "16384" + +#: tfmmcx.edunitinmm.hint +msgid "UnitInMM \n\nThis defines the voxel size. By default, 1x1x1 mm^3 voxels\nare used. Has to be a positive floating point number. For example,\n0.1 defines a 0.1x0.1x0.1 mm^3 voxel.\n\nCurrently, only isotropic voxels are supported.\n" +msgstr "UnitInMM\n\nIsto define o tamanho do voxel. Por padrão, voxels de 1x1x1 mm^3 são usados. Deve ser um número de ponto flutuante positivo. Por exemplo, 0.1 define um voxel de 0.1x0.1x0.1 mm^3.\n\nAtualmente, apenas voxels isotrópicos são suportados.\n" + +#: tfmmcx.edunitinmm.text +msgid "1" +msgstr "1" + +#: tfmmcx.edworkload.hint +msgid "Workload \n\nOne can specify a series of comma-separated numbers to specify the\nrelative portion of workload between multiple selected devices. \n\nFor example: 10,10 asks MCX to run 50% of the total photons using the\n1st device and 50% on the 2nd device. On the other hand, 10,100 splits\nthe total photon 1:10 between the 1st and 2nd devices.\n" +msgstr "Workload\n\nPode-se especificar uma série de números separados por vírgula para especificar a porção relativa de carga de trabalho entre múltiplos dispositivos selecionados.\n\nPor exemplo: 10,10 pede ao MCX para executar 50% do total de fótons usando o 1º dispositivo e 50% no 2º dispositivo. Por outro lado, 10,100 divide o total de fótons 1:10 entre o 1º e 2º dispositivos.\n" + +#: tfmmcx.edworkload.text +msgid "100" +msgstr "100" + +#: tfmmcx.edworkload.texthint +msgid "Comma separated numbers" +msgstr "Números separados por vírgula" + +#: tfmmcx.gradvsettings.caption +msgid "Advanced Settings" +msgstr "Configurações Avançadas" + +#: tfmmcx.grarray.hint +msgid "ArrayOrder \n\nSelect MATLAB array order indicates that the input volume has a\ncolumn-major order - i.e. the left-most axis is the fastest index of\nthe array, like in MATLAB or FORTRAN.\n\nSelect C array order indicates that the input volume uses the \nrow-major order - i.e. the right-most index is the fastest index\nof the array, like in C and Python.\n" +msgstr "ArrayOrder\n\nSelecionar ordem de array MATLAB indica que o volume de entrada tem uma ordem de coluna principal - ou seja, o eixo mais à esquerda é o índice mais rápido do array, como em MATLAB ou FORTRAN.\n\nSelecionar ordem de array C indica que o volume de entrada usa a ordem de linha principal - ou seja, o índice mais à direita é o índice mais rápido do array, como em C e Python.\n" + +#: tfmmcx.gratomic.hint +msgid "UseAtomic \n\nUsing atomic operations avoids conflicts between multiple threads when\nwriting to the same voxel, thus is highly recommended.\n\nIn the very old CUDA hardware, using atomic operations has a high \noverhead, but such overhead was signficiantly less since the Fermi GPU.\n" +msgstr "UseAtomic\n\nUsar operações atômicas evita conflitos entre múltiplas threads ao escrever no mesmo voxel, portanto é altamente recomendado.\n\nEm hardware CUDA muito antigo, usar operações atômicas tem uma alta sobrecarga, mas tal sobrecarga foi significativamente menor desde a GPU Fermi.\n" + +#: tfmmcx.grbasic.caption +msgid "Basic Settings" +msgstr "Configurações Básicas" + +#: tfmmcx.grbc.caption +msgid "Boundary cond." +msgstr "Cond. de contorno" + +#: tfmmcx.grdet.caption +msgid "Save detected photon" +msgstr "Salvar fóton detectado" + +#: tfmmcx.grgpu.caption +msgid "GPU Settings" +msgstr "Configurações de GPU" + +#: tfmmcx.grprogram.caption +msgctxt "tfmmcx.grprogram.caption" +msgid "Run Monte Carlo simulation with" +msgstr "Executar simulação Monte Carlo com" + +#: tfmmcx.grprogram.hint +msgid "MCProgram\n\nIn this panel, you choose which simulator to use. \nCurrently we support 3 simulators, \n\n* MCX: NVIDIA GPU-based simulation using voxelated domain\n* MCX-CL: OpenCL based CPU/GPU simulation using voxelated domain\n* MMC: OpenCL based CPU/GPU simulation using tetrahedral meshes\n\nThe built-in domain designer only supports creating voxelated \ndomains and creating meshes will be supported in the future.\n" +msgstr "MCProgram\n\nNeste painel, você escolhe qual simulador usar.\nAtualmente suportamos 3 simuladores:\n\n* MCX: simulação baseada em GPU NVIDIA usando domínio voxelizado\n* MCX-CL: simulação CPU/GPU baseada em OpenCL usando domínio voxelizado\n* MMC: simulação CPU/GPU baseada em OpenCL usando malhas tetraédricas\n\nO designer de domínio integrado apenas suporta criar domínios voxelizados e criar malhas será suportado no futuro.\n" + +#: tfmmcx.grswitches.caption +msgid "Switches" +msgstr "Chaves" + +#: tfmmcx.image1.hint +msgctxt "tfmmcx.image1.hint" +msgid "About MCX" +msgstr "Sobre MCX" + +#: tfmmcx.label1.caption +msgid "Thread number (-t)" +msgstr "Número de threads (-t)" + +#: tfmmcx.label1.hint +msgid "-t (--thread)" +msgstr "-t (--thread)" + +#: tfmmcx.label10.caption +msgctxt "tfmmcx.label10.caption" +msgid "or" +msgstr "ou" + +#: tfmmcx.label10.hint +msgctxt "tfmmcx.label10.hint" +msgid "-a (--array)" +msgstr "-a (--array)" + +#: tfmmcx.label11.caption +msgid "Output format" +msgstr "Formato de saída" + +#: tfmmcx.label11.hint +msgctxt "tfmmcx.label11.hint" +msgid "-u (--unitinmm)" +msgstr "-u (--unitinmm)" + +#: tfmmcx.label12.caption +msgid "Run MCX on" +msgstr "Executar MCX em" + +#: tfmmcx.label12.hint +msgid "-G (--gpu)" +msgstr "-G (--gpu)" + +#: tfmmcx.label13.caption +msgid "Seed (-E)" +msgstr "Semente (-E)" + +#: tfmmcx.label13.hint +msgid "-E (--seed)" +msgstr "-E (--seed)" + +#: tfmmcx.label14.caption +msgid "Output type (-O)" +msgstr "Tipo de saída (-O)" + +#: tfmmcx.label14.hint +msgid "-O (--outputtype)" +msgstr "-O (--outputtype)" + +#: tfmmcx.label15.caption +msgid "Workload split" +msgstr "Divisão de carga de trabalho" + +#: tfmmcx.label15.hint +msgid "-W (--workload)" +msgstr "-W (--workload)" + +#: tfmmcx.label16.caption +msgid "Debug flags" +msgstr "Flags de debug" + +#: tfmmcx.label16.hint +msgid "-D (--debuglevel)" +msgstr "-D (--debuglevel)" + +#: tfmmcx.label17.caption +msgid "Replay detector ID (-Y)" +msgstr "ID do detector de repetição (-Y)" + +#: tfmmcx.label17.hint +msgctxt "tfmmcx.label17.hint" +msgid "-Y (--replaydet)" +msgstr "-Y (--replaydet)" + +#: tfmmcx.label18.caption +msgid "Additional parameters" +msgstr "Parâmetros adicionais" + +#: tfmmcx.label18.hint +msgctxt "tfmmcx.label18.hint" +msgid "-Y (--replaydet)" +msgstr "-Y (--replaydet)" + +#: tfmmcx.label19.caption +msgctxt "tfmmcx.label19.caption" +msgid "or" +msgstr "ou" + +#: tfmmcx.label19.hint +msgctxt "tfmmcx.label19.hint" +msgid "-a (--array)" +msgstr "-a (--array)" + +#: tfmmcx.label2.caption +msgid "Thread block size (-T)" +msgstr "Tamanho do bloco de threads (-T)" + +#: tfmmcx.label2.hint +msgid "-T (--blocksize)" +msgstr "-T (--blocksize)" + +#: tfmmcx.label3.caption +msgid "Total photon number (-n)" +msgstr "Número total de fótons (-n)" + +#: tfmmcx.label3.hint +msgid "-n (--photon)" +msgstr "-n (--photon)" + +#: tfmmcx.label4.caption +msgid "Session ID (-s)" +msgstr "ID da sessão (-s)" + +#: tfmmcx.label4.hint +msgctxt "tfmmcx.label4.hint" +msgid "-s (--sessionid)" +msgstr "-s (--sessionid)" + +#: tfmmcx.label5.caption +msgid "User Input>" +msgstr "Entrada do Usuário>" + +#: tfmmcx.label6.caption +msgid "Array order (-a)" +msgstr "Ordem do array (-a)" + +#: tfmmcx.label6.hint +msgctxt "tfmmcx.label6.hint" +msgid "-a (--array)" +msgstr "-a (--array)" + +#: tfmmcx.label7.caption +msgid "Gate group size (-g)" +msgstr "Tamanho do grupo de porta (-g)" + +#: tfmmcx.label7.hint +msgid "-g (--gategroup)" +msgstr "-g (--gategroup)" + +#: tfmmcx.label8.caption +msgid "Voxel size in mm (-u)" +msgstr "Tamanho do voxel em mm (-u)" + +#: tfmmcx.label8.hint +msgctxt "tfmmcx.label8.hint" +msgid "-u (--unitinmm)" +msgstr "-u (--unitinmm)" + +#: tfmmcx.label9.caption +msgid "Max detected photons(-H)" +msgstr "Máx. fótons detectados (-H)" + +#: tfmmcx.label9.hint +msgid "-H (--maxdetphoton)" +msgstr "-H (--maxdetphoton)" + +#: tfmmcx.lbatomic.caption +msgid "Atomic operations" +msgstr "Operações atômicas" + +#: tfmmcx.lbatomic.hint +msgid "(--atomic)" +msgstr "(--atomic)" + +#: tfmmcx.lbbubble.caption +msgid "Cache radius from src (-R)" +msgstr "Raio de cache da fonte (-R)" + +#: tfmmcx.lbbubble.hint +msgid "-r (--skipradius)" +msgstr "-r (--skipradius)" + +#: tfmmcx.lbrespin.caption +msgid "Repetition (-r)" +msgstr "Repetição (-r)" + +#: tfmmcx.lbrespin.hint +msgid "-r (--repeat)" +msgstr "-r (--repeat)" + +#: tfmmcx.lvjobs.columns[0].caption +msgctxt "tfmmcx.lvjobs.columns[0].caption" +msgid "Session" +msgstr "Sessão" + +#: tfmmcx.lvjobs.columns[10].caption +msgid "DoSave" +msgstr "DoSave" + +#: tfmmcx.lvjobs.columns[11].caption +msgid "DoNormalize" +msgstr "DoNormalize" + +#: tfmmcx.lvjobs.columns[12].caption +msgid "Autopilot" +msgstr "Autopilot" + +#: tfmmcx.lvjobs.columns[13].caption +msgid "SaveDetector" +msgstr "SaveDetector" + +#: tfmmcx.lvjobs.columns[14].caption +msgid "DetectedNum" +msgstr "DetectedNum" + +#: tfmmcx.lvjobs.columns[15].caption +msgid "GPUID" +msgstr "GPUID" + +#: tfmmcx.lvjobs.columns[16].caption +msgid "UnitInMM" +msgstr "UnitInMM" + +#: tfmmcx.lvjobs.columns[17].caption +msgid "DoSaveRef" +msgstr "DoSaveRef" + +#: tfmmcx.lvjobs.columns[18].caption +msgid "DoSaveSeed" +msgstr "DoSaveSeed" + +#: tfmmcx.lvjobs.columns[19].caption +msgid "DoSkipVoid" +msgstr "DoSkipVoid" + +#: tfmmcx.lvjobs.columns[1].caption +msgid "InputFile" +msgstr "InputFile" + +#: tfmmcx.lvjobs.columns[20].caption +msgid "DoSrcFrom0" +msgstr "DoSrcFrom0" + +#: tfmmcx.lvjobs.columns[21].caption +msgid "MediaCfg" +msgstr "MediaCfg" + +#: tfmmcx.lvjobs.columns[22].caption +msgid "DetectorCfg" +msgstr "DetectorCfg" + +#: tfmmcx.lvjobs.columns[23].caption +msgid "MCXConfig" +msgstr "MCXConfig" + +#: tfmmcx.lvjobs.columns[24].caption +msgid "Workload" +msgstr "Workload" + +#: tfmmcx.lvjobs.columns[25].caption +msgctxt "tfmmcx.lvjobs.columns[25].caption" +msgid "ShapeCfg" +msgstr "ShapeCfg" + +#: tfmmcx.lvjobs.columns[26].caption +msgid "Seed" +msgstr "Seed" + +#: tfmmcx.lvjobs.columns[27].caption +msgid "DoSaveMask" +msgstr "DoSaveMask" + +#: tfmmcx.lvjobs.columns[28].caption +msgctxt "tfmmcx.lvjobs.columns[28].caption" +msgid "DebugFlags" +msgstr "DebugFlags" + +#: tfmmcx.lvjobs.columns[29].caption +msgctxt "tfmmcx.lvjobs.columns[29].caption" +msgid "ReplayDet" +msgstr "ReplayDet" + +#: tfmmcx.lvjobs.columns[2].caption +msgid "ThreadNum" +msgstr "ThreadNum" + +#: tfmmcx.lvjobs.columns[30].caption +msgid "DoReplay" +msgstr "DoReplay" + +#: tfmmcx.lvjobs.columns[31].caption +msgid "MCProgram" +msgstr "MCProgram" + +#: tfmmcx.lvjobs.columns[32].caption +msgid "DoSpecular" +msgstr "DoSpecular" + +#: tfmmcx.lvjobs.columns[33].caption +msgid "UseAtomic" +msgstr "UseAtomic" + +#: tfmmcx.lvjobs.columns[34].caption +msgid "BasicOrder" +msgstr "BasicOrder" + +#: tfmmcx.lvjobs.columns[35].caption +msgid "DebugPhoton" +msgstr "DebugPhoton" + +#: tfmmcx.lvjobs.columns[36].caption +msgid "MoreParam" +msgstr "MoreParam" + +#: tfmmcx.lvjobs.columns[37].caption +msgid "RemoteCmd" +msgstr "RemoteCmd" + +#: tfmmcx.lvjobs.columns[38].caption +msgid "DoRemote" +msgstr "DoRemote" + +#: tfmmcx.lvjobs.columns[39].caption +msgid "DoSharedFS" +msgstr "DoSharedFS" + +#: tfmmcx.lvjobs.columns[3].caption +msgid "ThreadBlock" +msgstr "ThreadBlock" + +#: tfmmcx.lvjobs.columns[40].caption +msgid "OutputFormat" +msgstr "OutputFormat" + +#: tfmmcx.lvjobs.columns[41].caption +msgid "OutputType" +msgstr "OutputType" + +#: tfmmcx.lvjobs.columns[42].caption +msgid "Boundary" +msgstr "Boundary" + +#: tfmmcx.lvjobs.columns[43].caption +msgid "SaveDetFlag" +msgstr "SaveDetFlag" + +#: tfmmcx.lvjobs.columns[44].caption +msgid "Benchmark" +msgstr "Benchmark" + +#: tfmmcx.lvjobs.columns[4].caption +msgid "PhotonNum" +msgstr "PhotonNum" + +#: tfmmcx.lvjobs.columns[5].caption +msgid "RespinNum" +msgstr "RespinNum" + +#: tfmmcx.lvjobs.columns[6].caption +msgid "ArrayOrder" +msgstr "ArrayOrder" + +#: tfmmcx.lvjobs.columns[7].caption +msgctxt "tfmmcx.lvjobs.columns[7].caption" +msgid "BubbleSize" +msgstr "BubbleSize" + +#: tfmmcx.lvjobs.columns[8].caption +msgctxt "tfmmcx.lvjobs.columns[8].caption" +msgid "GateNum" +msgstr "GateNum" + +#: tfmmcx.lvjobs.columns[9].caption +msgid "DoReflect" +msgstr "DoReflect" + +#: tfmmcx.mcxdoabout.caption +msgid "About" +msgstr "Sobre" + +#: tfmmcx.mcxdoabout.hint +msgid "About the author" +msgstr "Sobre o autor" + +#: tfmmcx.mcxdoadditem.caption +msgid "New" +msgstr "Novo" + +#: tfmmcx.mcxdoadditem.hint +msgid "Add a new task" +msgstr "Adicionar nova tarefa" + +#: tfmmcx.mcxdoconfig.caption +msgid "Setting" +msgstr "Configuração" + +#: tfmmcx.mcxdoconfig.hint +msgid "Modify default paths" +msgstr "Modificar caminhos padrão" + +#: tfmmcx.mcxdocopy.caption +msgid "Copy session to clipboard" +msgstr "Copiar sessão para área de transferência" + +#: tfmmcx.mcxdodefault.caption +msgid "Default" +msgstr "Padrão" + +#: tfmmcx.mcxdodefault.hint +msgid "Set default values" +msgstr "Definir valores padrão" + +#: tfmmcx.mcxdodeleteitem.caption +msgctxt "tfmmcx.mcxdodeleteitem.caption" +msgid "Delete" +msgstr "Deletar" + +#: tfmmcx.mcxdodeleteitem.hint +msgid "Delete selected task" +msgstr "Deletar tarefa selecionada" + +#: tfmmcx.mcxdodownloadmask.caption +msgid "Download volume labels (*_vol.nii)" +msgstr "Baixar rótulos de volume (*_vol.nii)" + +#: tfmmcx.mcxdodownloadmask.hint +msgctxt "tfmmcx.mcxdodownloadmask.hint" +msgid "_vol.nii" +msgstr "_vol.nii" + +#: tfmmcx.mcxdodownloadmc2.caption +msgid "Download fluence" +msgstr "Baixar fluência" + +#: tfmmcx.mcxdodownloadmch.caption +msgid "Download detected photon data (*.mch)" +msgstr "Baixar dados de fótons detectados (*.mch)" + +#: tfmmcx.mcxdodownloadmch.hint +msgid ".mch" +msgstr ".mch" + +#: tfmmcx.mcxdoexit.caption +msgctxt "tfmmcx.mcxdoexit.caption" +msgid "Exit" +msgstr "Sair" + +#: tfmmcx.mcxdoexit.hint +msgid "Exit MCX Studio" +msgstr "Sair do MCX Studio" + +#: tfmmcx.mcxdohelp.caption +msgctxt "tfmmcx.mcxdohelp.caption" +msgid "Help" +msgstr "Ajuda" + +#: tfmmcx.mcxdohelp.hint +msgctxt "tfmmcx.mcxdohelp.hint" +msgid "Browse help information" +msgstr "Navegar informações de ajuda" + +#: tfmmcx.mcxdohelpoptions.caption +msgid "Options" +msgstr "Opções" + +#: tfmmcx.mcxdohelpoptions.hint +msgid "List command line options" +msgstr "Listar opções de linha de comando" + +#: tfmmcx.mcxdoopen.caption +msgid "Open" +msgstr "Abrir" + +#: tfmmcx.mcxdoopen.hint +msgid "Open a project or volume file" +msgstr "Abrir um projeto ou arquivo de volume" + +#: tfmmcx.mcxdopaste.caption +msgid "Paste session from clipboard" +msgstr "Colar sessão da área de transferência" + +#: tfmmcx.mcxdoplotjnifti.caption +msgid "Plot fluence (jnii)" +msgstr "Plotar fluência (jnii)" + +#: tfmmcx.mcxdoplotjnifti.hint +msgid ".jnii" +msgstr ".jnii" + +#: tfmmcx.mcxdoplotmc2.caption +msgid "Plot fluence (mc2)" +msgstr "Plotar fluência (mc2)" + +#: tfmmcx.mcxdoplotmc2.hint +msgid ".mc2" +msgstr ".mc2" + +#: tfmmcx.mcxdoplotmesh.caption +msgid "Plot mesh" +msgstr "Plotar malha" + +#: tfmmcx.mcxdoplotnifty.caption +msgid "Plot fluence (nii)" +msgstr "Plotar fluência (nii)" + +#: tfmmcx.mcxdoplotnifty.hint +msgid ".nii" +msgstr ".nii" + +#: tfmmcx.mcxdoplotvol.caption +msgid "Plot Volume" +msgstr "Plotar Volume" + +#: tfmmcx.mcxdoplotvol.hint +msgctxt "tfmmcx.mcxdoplotvol.hint" +msgid "_vol.nii" +msgstr "_vol.nii" + +#: tfmmcx.mcxdoquery.caption +msgid "GPU" +msgstr "GPU" + +#: tfmmcx.mcxdoquery.hint +msgid "List GPU Info" +msgstr "Listar Informações da GPU" + +#: tfmmcx.mcxdorun.caption +msgctxt "tfmmcx.mcxdorun.caption" +msgid "Run" +msgstr "Executar" + +#: tfmmcx.mcxdorun.hint +msgid "Run selected task" +msgstr "Executar tarefa selecionada" + +#: tfmmcx.mcxdorunall.caption +msgid "Run All" +msgstr "Executar Todos" + +#: tfmmcx.mcxdorunall.hint +msgid "Run all tasks" +msgstr "Executar todas as tarefas" + +#: tfmmcx.mcxdosave.caption +msgid "Save" +msgstr "Salvar" + +#: tfmmcx.mcxdosave.hint +msgid "Save tasks to a project file" +msgstr "Salvar tarefas em um arquivo de projeto" + +#: tfmmcx.mcxdostop.caption +msgid "Stop" +msgstr "Parar" + +#: tfmmcx.mcxdostop.hint +msgid "Terminate current task" +msgstr "Terminar tarefa atual" + +#: tfmmcx.mcxdotoggleview.caption +msgid "Toggle View" +msgstr "Alternar Visualização" + +#: tfmmcx.mcxdoverify.caption +msgid "Verify" +msgstr "Verificar" + +#: tfmmcx.mcxdoverify.hint +msgid "Verify parameters" +msgstr "Verificar parâmetros" + +#: tfmmcx.mcxdoweb.caption +msgid "Web" +msgstr "Web" + +#: tfmmcx.mcxdoweb.hint +msgid "MCX homepage" +msgstr "Página inicial do MCX" + +#: tfmmcx.mcxsetcurrent.caption +msgid "mcxSetCurrent" +msgstr "mcxSetCurrent" + +#: tfmmcx.menuitem1.caption +msgid "File" +msgstr "Arquivo" + +#: tfmmcx.menuitem11.caption +msgid "Settings" +msgstr "Configurações" + +#: tfmmcx.menuitem2.caption +msgctxt "tfmmcx.menuitem2.caption" +msgid "Run" +msgstr "Executar" + +#: tfmmcx.menuitem22.caption +msgid "Open output folder" +msgstr "Abrir pasta de saída" + +#: tfmmcx.menuitem24.caption +msgid "Plot volume (_vol.nii)" +msgstr "Plotar volume (_vol.nii)" + +#: tfmmcx.menuitem28.caption +msgid "Download fluence (mc2/nii/hdr/img)" +msgstr "Baixar fluência (mc2/nii/hdr/img)" + +#: tfmmcx.menuitem3.caption +msgid "Tools" +msgstr "Ferramentas" + +#: tfmmcx.menuitem31.caption +msgid "Download detected photon data (mch)" +msgstr "Baixar dados de fótons detectados (mch)" + +#: tfmmcx.menuitem32.caption +msgid "Download volume mask (_vol.nii)" +msgstr "Baixar máscara de volume (_vol.nii)" + +#: tfmmcx.menuitem35.caption +msgid "MCX Documentation" +msgstr "Documentação MCX" + +#: tfmmcx.menuitem35.hint +msgid "https://mcx.space/wiki/?Learn#mcx" +msgstr "https://mcx.space/wiki/?Learn#mcx" + +#: tfmmcx.menuitem36.caption +msgid "MMC Documentation" +msgstr "Documentação MMC" + +#: tfmmcx.menuitem36.hint +msgid "https://mcx.space/wiki/?Learn#mmc" +msgstr "https://mcx.space/wiki/?Learn#mmc" + +#: tfmmcx.menuitem37.caption +msgid "MCX-CL Documentation" +msgstr "Documentação MCX-CL" + +#: tfmmcx.menuitem37.hint +msgid "https://mcx.space/wiki/?Learn#mcxcl" +msgstr "https://mcx.space/wiki/?Learn#mcxcl" + +#: tfmmcx.menuitem39.caption +msgid "MCX/MCXCL User Forum (mcx-users)" +msgstr "Fórum de Usuários MCX/MCXCL (mcx-users)" + +#: tfmmcx.menuitem39.hint +msgid "https://groups.google.com/forum/?hl=en#!forum/mcx-users" +msgstr "https://groups.google.com/forum/?hl=en#!forum/mcx-users" + +#: tfmmcx.menuitem4.caption +msgctxt "tfmmcx.menuitem4.caption" +msgid "Help" +msgstr "Ajuda" + +#: tfmmcx.menuitem40.caption +msgid "MMC User Forum (mmc-users)" +msgstr "Fórum de Usuários MMC (mmc-users)" + +#: tfmmcx.menuitem40.hint +msgid "https://groups.google.com/forum/?hl=en#!forum/mmc-users" +msgstr "https://groups.google.com/forum/?hl=en#!forum/mmc-users" + +#: tfmmcx.menuitem41.caption +msgid "Iso2Mesh User Forum (iso2mesh-users)" +msgstr "Fórum de Usuários Iso2Mesh (iso2mesh-users)" + +#: tfmmcx.menuitem41.hint +msgid "https://groups.google.com/forum/?hl=en#!forum/iso2mesh-users" +msgstr "https://groups.google.com/forum/?hl=en#!forum/iso2mesh-users" + +#: tfmmcx.menuitem43.caption +msgid "Download Nightly-Build" +msgstr "Baixar Compilação Noturna" + +#: tfmmcx.menuitem43.hint +msgid "https://mcx.space/nightly/" +msgstr "https://mcx.space/nightly/" + +#: tfmmcx.menuitem45.caption +msgid "MCX Github" +msgstr "MCX Github" + +#: tfmmcx.menuitem45.hint +msgid "https://github.com/fangq/mcx" +msgstr "https://github.com/fangq/mcx" + +#: tfmmcx.menuitem46.caption +msgid "MMC Github" +msgstr "MMC Github" + +#: tfmmcx.menuitem46.hint +msgid "https://github.com/fangq/mmc" +msgstr "https://github.com/fangq/mmc" + +#: tfmmcx.menuitem47.caption +msgid "MCX-CL Github" +msgstr "MCX-CL Github" + +#: tfmmcx.menuitem47.hint +msgid "https://github.com/fangq/mcxcl" +msgstr "https://github.com/fangq/mcxcl" + +#: tfmmcx.menuitem49.caption +msgid "Report MCX Issues" +msgstr "Reportar Problemas MCX" + +#: tfmmcx.menuitem49.hint +msgid "https://github.com/fangq/mcx/issues" +msgstr "https://github.com/fangq/mcx/issues" + +#: tfmmcx.menuitem50.caption +msgid "Report MMC Issues" +msgstr "Reportar Problemas MMC" + +#: tfmmcx.menuitem50.hint +msgid "https://github.com/fangq/mmc/issues" +msgstr "https://github.com/fangq/mmc/issues" + +#: tfmmcx.menuitem51.caption +msgid "Report MCX-CL Issues" +msgstr "Reportar Problemas MCX-CL" + +#: tfmmcx.menuitem51.hint +msgid "https://github.com/fangq/mcxcl/issues" +msgstr "https://github.com/fangq/mcxcl/issues" + +#: tfmmcx.menuitem53.caption +msgid "MCX GPU Speed Benchmark Database" +msgstr "Base de Dados de Benchmark de Velocidade GPU MCX" + +#: tfmmcx.menuitem53.hint +msgid "https://mcx.space/gpubench/" +msgstr "https://mcx.space/gpubench/" + +#: tfmmcx.menuitem55.caption +msgid "Refereces" +msgstr "Referências" + +#: tfmmcx.menuitem56.caption +msgid "[Fang2009] Original MCX Paper" +msgstr "[Fang2009] Artigo Original MCX" + +#: tfmmcx.menuitem56.hint +msgid "http://www.osapublishing.org/oe/abstract.cfm?uri=oe-17-22-20178" +msgstr "http://www.osapublishing.org/oe/abstract.cfm?uri=oe-17-22-20178" + +#: tfmmcx.menuitem57.caption +msgid "[Fang2010] Original MMC Paper" +msgstr "[Fang2010] Artigo Original MMC" + +#: tfmmcx.menuitem57.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-1-1-165" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-1-1-165" + +#: tfmmcx.menuitem58.caption +msgid "[Yu2018] Original MCX-CL Paper" +msgstr "[Yu2018] Artigo Original MCX-CL" + +#: tfmmcx.menuitem58.hint +msgid "https://www.spiedigitallibrary.org/journals/journal-of-biomedical-optics/volume-23/issue-01/010504/Scalable-and-massively-parallel-Monte-Carlo-photon-transport-simulations-for/10.1117/1.JBO.23.1.010504.full?SSO=1#ArticleLink" +msgstr "https://www.spiedigitallibrary.org/journals/journal-of-biomedical-optics/volume-23/issue-01/010504/Scalable-and-massively-parallel-Monte-Carlo-photon-transport-simulations-for/10.1117/1.JBO.23.1.010504.full?SSO=1#ArticleLink" + +#: tfmmcx.menuitem59.caption +msgid "[Fang2011] MMC ray-tracing comparison" +msgstr "[Fang2011] Comparação de ray-tracing MMC" + +#: tfmmcx.menuitem59.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-2-5-1258" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-2-5-1258" + +#: tfmmcx.menuitem60.caption +msgid "[Fang2012] SIMD MMC" +msgstr "[Fang2012] SIMD MMC" + +#: tfmmcx.menuitem60.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-3-12-3223" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-3-12-3223" + +#: tfmmcx.menuitem61.caption +msgid "[Yao2016] Widefield MMC" +msgstr "[Yao2016] MMC de Campo Amplo" + +#: tfmmcx.menuitem61.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-7-1-171" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-7-1-171" + +#: tfmmcx.menuitem62.caption +msgid "[Yao2018] Jacobians with photon replay" +msgstr "[Yao2018] Jacobianos com repetição de fótons" + +#: tfmmcx.menuitem62.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-9-10-4588" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-9-10-4588" + +#: tfmmcx.menuitem63.caption +msgid "[Yan2019] Dual-grid MMC" +msgstr "[Yan2019] MMC de Grade Dupla" + +#: tfmmcx.menuitem63.hint +msgid "https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fdx.doi.org%2F10.1117%2F1.JBO.24.2.020503&data=02%7C01%7Cq.fang%40northeastern.edu%7Cbb8daa56735543068b9c08d697592492%7Ca8eec281aaa34daeac9b9a398b9215e7%7C0%7C0%7C636862806460866013&sdata=2dWyN3eVPwwymydjXEWIHBfVZI43Fcl5zuZ8wiaJ10k%3D&reserved=0" +msgstr "https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fdx.doi.org%2F10.1117%2F1.JBO.24.2.020503&data=02%7C01%7Cq.fang%40northeastern.edu%7Cbb8daa56735543068b9c08d697592492%7Ca8eec281aaa34daeac9b9a398b9215e7%7C0%7C0%7C636862806460866013&sdata=2dWyN3eVPwwymydjXEWIHBfVZI43Fcl5zuZ8wiaJ10k%3D&reserved=0" + +#: tfmmcx.menuitem64.caption +msgid "MCX Main Web" +msgstr "Site Principal MCX" + +#: tfmmcx.menuitem66.caption +msgid "Table of all input flags" +msgstr "Tabela de todas as flags de entrada" + +#: tfmmcx.menuitem66.hint +msgid "http://bit.ly/2K0rG4R " +msgstr "http://bit.ly/2K0rG4R " + +#: tfmmcx.menuitem69.caption +msgid "[Fang2019] GPU MMC" +msgstr "[Fang2019] GPU MMC" + +#: tfmmcx.menuitem69.hint +msgid "http://dx.doi.org/10.1117/1.JBO.24.11.115002" +msgstr "http://dx.doi.org/10.1117/1.JBO.24.11.115002" + +#: tfmmcx.menuitem70.caption +msgid "[Brain2Mesh2020] Brain2Mesh brain meshing toolbox" +msgstr "[Brain2Mesh2020] Caixa de ferramentas de malha cerebral Brain2Mesh" + +#: tfmmcx.menuitem70.hint +msgid "https://doi.org/10.1117/1.NPh.7.1.015008" +msgstr "https://doi.org/10.1117/1.NPh.7.1.015008" + +#: tfmmcx.menuitem71.caption +msgid "[Yuan2020] PBM over lifespan" +msgstr "[Yuan2020] PBM ao longo da vida" + +#: tfmmcx.menuitem71.hint +msgid "https://doi.org/10.1117/1.NPh.7.1.015009" +msgstr "https://doi.org/10.1117/1.NPh.7.1.015009" + +#: tfmmcx.menuitem72.caption +msgid "[Yuan2021] Implicit MMC (iMMC)" +msgstr "[Yuan2021] MMC Implícito (iMMC)" + +#: tfmmcx.menuitem72.hint +msgid "https://www.osapublishing.org/boe/fulltext.cfm?uri=boe-12-1-147" +msgstr "https://www.osapublishing.org/boe/fulltext.cfm?uri=boe-12-1-147" + +#: tfmmcx.menuitem73.caption +msgid "[Yan2020] SVMC hybrid method" +msgstr "[Yan2020] Método híbrido SVMC" + +#: tfmmcx.menuitem73.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-11-11-6262" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-11-11-6262" + +#: tfmmcx.menuitem76.caption +msgid "Open Volume Viewer" +msgstr "Abrir Visualizador de Volume" + +#: tfmmcx.menuitem9.caption +msgctxt "tfmmcx.menuitem9.caption" +msgid "Volume Designer" +msgstr "Designer de Volume" + +#: tfmmcx.miclearlog.caption +msgid "Clear Log" +msgstr "Limpar Log" + +#: tfmmcx.micopy.caption +msgid "Copy selected" +msgstr "Copiar selecionado" + +#: tfmmcx.miexportjson.caption +msgid "Export self-contained JSON input file" +msgstr "Exportar arquivo de entrada JSON auto-contido" + +#: tfmmcx.miusematlab.caption +msgid "Print MATLAB plotting commands only" +msgstr "Imprimir apenas comandos de plotagem MATLAB" + +#: tfmmcx.openhistoryfile.title +msgctxt "tfmmcx.openhistoryfile.title" +msgid "Open Photon History File (*.mch)" +msgstr "Abrir Arquivo de Histórico de Fótons (*.mch)" + +#: tfmmcx.openproject.title +msgid "Open existing project" +msgstr "Abrir projeto existente" + +#: tfmmcx.openvolume.title +msgctxt "tfmmcx.openvolume.title" +msgid "Open Photon History File (*.mch)" +msgstr "Abrir Arquivo de Histórico de Fótons (*.mch)" + +#: tfmmcx.rbusebench.caption +msgid "Built-in" +msgstr "Integrado" + +#: tfmmcx.rbusedesigner.caption +msgid "User-defined »" +msgstr "Definido pelo usuário »" + +#: tfmmcx.rbusefile.caption +msgid "Use Input File (-f)" +msgstr "Usar Arquivo de Entrada (-f)" + +#: tfmmcx.saveproject.title +msgid "Save project as" +msgstr "Salvar projeto como" + +#: tfmmcx.sbinfo.panels[0].text +msgid "Status: idle" +msgstr "Status: inativo" + +#: tfmmcx.sgconfig.columns[0].title.caption +msgctxt "tfmmcx.sgconfig.columns[0].title.caption" +msgid "Value" +msgstr "Valor" + +#: tfmmcx.sgconfig.hint +msgid "MCXConfig \n\nThis defines the remaining key parameters used in an MCX/MMC\nsimulation.\n" +msgstr "MCXConfig\n\nIsto define os parâmetros chave restantes usados em uma simulação MCX/MMC.\n" + +#: tfmmcx.sgdet.hint +msgid "DetectorCfg \n\nThis table defines all detectors in the domain. \n\nPlease note that currently MCX/MMC only supports spherical detectors,\ndefined by the [x,y,z] center position and radius (radius).\n\nPlease also note that photon detection only happens before a photon is\nterminated, i.e. when it escapes the exterior bounding box or moving from\na non-zero voxel to a zero voxel. Therefore, a detector's aperature is the\nactual bounding box surface or the surface of the non-zero voxels truncated\nby a sphere centered at [x,y,z] with raidus r.\n\nDetector position is sensitive to the \"Origin from [0 0 0] -z\" flag.\n" +msgstr "DetectorCfg\n\nEsta tabela define todos os detectores no domínio.\n\nPor favor note que atualmente MCX/MMC apenas suporta detectores esféricos, definidos pela posição central [x,y,z] e raio.\n\nTambém note que a detecção de fótons apenas acontece antes de um fóton ser terminado, ou seja, quando ele escapa da caixa delimitadora exterior ou se move de um voxel não-zero para um voxel zero. Portanto, a abertura de um detector é a superfície real da caixa delimitadora ou a superfície dos voxels não-zero truncada por uma esfera centrada em [x,y,z] com raio r.\n\nA posição do detector é sensível à flag \"Origem de [0 0 0] -z\".\n" + +#: tfmmcx.sgmedia.columns[0].title.caption +msgid "μa (1/mm)" +msgstr "μa (1/mm)" + +#: tfmmcx.sgmedia.columns[1].title.caption +msgid "μs (1/mm)" +msgstr "μs (1/mm)" + +#: tfmmcx.sgmedia.columns[2].title.caption +msgid "g (anisotropy)" +msgstr "g (anisotropia)" + +#: tfmmcx.sgmedia.columns[3].title.caption +msgid "n (reflective index)" +msgstr "n (índice refrativo)" + +#: tfmmcx.sgmedia.hint +msgid "MediaCfg \n\nThis table defines the optical properties for all needed tissue labels.\n\nThe first row (label 0) is reserved for the background medium - which includes\nthe space outside the bounding box of the volume, as well as any voxels with\na zero-value.\n\nOne can select a row and copy/paste to other rows.\n\nIf more labels are needed, move to the bottom of the table, and press \"down\"\narrow key to create a new row below.\n" +msgstr "MediaCfg\n\nEsta tabela define as propriedades ópticas para todos os rótulos de tecido necessários.\n\nA primeira linha (rótulo 0) é reservada para o meio de fundo - que inclui o espaço fora da caixa delimitadora do volume, bem como qualquer voxel com valor zero.\n\nPode-se selecionar uma linha e copiar/colar para outras linhas.\n\nSe mais rótulos forem necessários, mova para o final da tabela, e pressione a tecla de seta \"para baixo\" para criar uma nova linha abaixo.\n" + +#: tfmmcx.shapeaddbox.caption +msgid "Box" +msgstr "Caixa" + +#: tfmmcx.shapeaddbox.hint +msgid "Add a 3D box (using the center of the voxels - i.e. add 0.5 in all directions)" +msgstr "Adicionar uma caixa 3D (usando o centro dos voxels - ou seja, adicionar 0.5 em todas as direções)" + +#: tfmmcx.shapeaddcylinder.caption +msgid "Cylinder" +msgstr "Cilindro" + +#: tfmmcx.shapeaddcylinder.hint +msgid "Add a cylinder" +msgstr "Adicionar um cilindro" + +#: tfmmcx.shapeaddgrid.caption +msgid "Grid" +msgstr "Grade" + +#: tfmmcx.shapeaddgrid.hint +msgid "Define a uniform grid as the simulation space" +msgstr "Definir uma grade uniforme como o espaço de simulação" + +#: tfmmcx.shapeaddname.caption +msgid "Name" +msgstr "Nome" + +#: tfmmcx.shapeaddname.hint +msgid "Define a name for the domain" +msgstr "Definir um nome para o domínio" + +#: tfmmcx.shapeaddorigin.caption +msgid "Origin" +msgstr "Origem" + +#: tfmmcx.shapeaddorigin.hint +msgid "Define the origin for subsequent objects" +msgstr "Definir a origem para objetos subsequentes" + +#: tfmmcx.shapeaddsphere.caption +msgid "Sphere" +msgstr "Esfera" + +#: tfmmcx.shapeaddsphere.hint +msgid "Add a 3D sphere" +msgstr "Adicionar uma esfera 3D" + +#: tfmmcx.shapeaddsubgrid.caption +msgid "Subgrid" +msgstr "Subgrade" + +#: tfmmcx.shapeaddsubgrid.hint +msgid "Add a 3D box (using the lower-corner of the voxel)" +msgstr "Adicionar uma caixa 3D (usando o canto inferior do voxel)" + +#: tfmmcx.shapeaddupperspace.caption +msgid "Upper" +msgstr "Superior" + +#: tfmmcx.shapeaddupperspace.hint +msgid "Add an upper-space defined by a linear inequality" +msgstr "Adicionar um espaço superior definido por uma desigualdade linear" + +#: tfmmcx.shapeaddxlayers.caption +msgid "XLayers" +msgstr "CamadasX" + +#: tfmmcx.shapeaddxlayers.hint +msgid "Add a layered structure along x-axis" +msgstr "Adicionar uma estrutura em camadas ao longo do eixo x" + +#: tfmmcx.shapeaddxslabs.caption +msgid "XSlabs" +msgstr "PlacasX" + +#: tfmmcx.shapeaddxslabs.hint +msgid "Add a slab along x-axis" +msgstr "Adicionar uma placa ao longo do eixo x" + +#: tfmmcx.shapeaddylayers.caption +msgid "YLayers" +msgstr "CamadasY" + +#: tfmmcx.shapeaddylayers.hint +msgid "Add a layered structure along y-axis" +msgstr "Adicionar uma estrutura em camadas ao longo do eixo y" + +#: tfmmcx.shapeaddyslabs.caption +msgid "YSlabs" +msgstr "PlacasY" + +#: tfmmcx.shapeaddyslabs.hint +msgid "Add a slab along y-axis" +msgstr "Adicionar uma placa ao longo do eixo y" + +#: tfmmcx.shapeaddzlayers.caption +msgid "ZLayers" +msgstr "CamadasZ" + +#: tfmmcx.shapeaddzlayers.hint +msgid "Add a layered structure along z-axis" +msgstr "Adicionar uma estrutura em camadas ao longo do eixo z" + +#: tfmmcx.shapeaddzslabs.caption +msgid "ZSlabs" +msgstr "PlacasZ" + +#: tfmmcx.shapeaddzslabs.hint +msgid "Add a slab along z-axis" +msgstr "Adicionar uma placa ao longo do eixo z" + +#: tfmmcx.shapedelete.caption +msgctxt "tfmmcx.shapedelete.caption" +msgid "Delete" +msgstr "Deletar" + +#: tfmmcx.shapedelete.hint +msgid "Delete selected object" +msgstr "Deletar objeto selecionado" + +#: tfmmcx.shapeedit.caption +msgid "Edit" +msgstr "Editar" + +#: tfmmcx.shapepreview.caption +msgctxt "tfmmcx.shapepreview.caption" +msgid "Preview" +msgstr "Visualizar" + +#: tfmmcx.shapepreview.hint +msgctxt "tfmmcx.shapepreview.hint" +msgid "Preview" +msgstr "Visualizar" + +#: tfmmcx.shapeprint.caption +msgid "Print" +msgstr "Imprimir" + +#: tfmmcx.shapeprint.hint +msgid "Print selected object" +msgstr "Imprimir objeto selecionado" + +#: tfmmcx.shapereset.caption +msgctxt "tfmmcx.shapereset.caption" +msgid "Reset" +msgstr "Redefinir" + +#: tfmmcx.shapereset.hint +msgid "Reset to a 60x60x60 homogeneous cubic domain" +msgstr "Redefinir para um domínio cúbico homogêneo 60x60x60" + +#: tfmmcx.statictext1.caption +msgid "Additional Settings" +msgstr "Configurações Adicionais" + +#: tfmmcx.statictext2.caption +msgid "Media Settings" +msgstr "Configurações de Mídia" + +#: tfmmcx.statictext3.caption +msgid "Detector Settings (in voxel unit)" +msgstr "Configurações do Detector (em unidade de voxel)" + +#: tfmmcx.tabinputdata.caption +msgid "Simulation Designer" +msgstr "Designer de Simulação" + +#: tfmmcx.tabvolumedesigner.caption +msgctxt "tfmmcx.tabvolumedesigner.caption" +msgid "Volume Designer" +msgstr "Designer de Volume" + +#: tfmmcx.tbtverify.caption +msgid "Validate" +msgstr "Validar" + +#: tfmmcx.toolbar1.caption +msgid "MCX Ribon" +msgstr "Faixa de Opções MCX" + +#: tfmmcx.toolbar2.caption +msgid "ToolBar2" +msgstr "ToolBar2" + +#: tfmmcx.toolbar3.caption +msgid "ToolBar3" +msgstr "ToolBar3" + +#: tfmmcx.toolbutton11.caption +msgid "Plot ▾" +msgstr "Plotar ▾" + +#: tfmmcx.toolbutton11.hint +msgid "Plot MCX output data" +msgstr "Plotar dados de saída MCX" + +#: tfmmcx.toolbutton12.caption +msgid "ToolButton12" +msgstr "ToolButton12" + +#: tfmmcx.toolbutton13.caption +msgid "ToolButton13" +msgstr "ToolButton13" + +#: tfmmcx.toolbutton17.caption +msgid "ToolButton17" +msgstr "ToolButton17" + +#: tfmmcx.toolbutton35.caption +msgid "ToolButton35" +msgstr "ToolButton35" + +#: tfmmcx.toolbutton39.hint +msgid "Reset volume and define a different dimension" +msgstr "Redefinir volume e definir uma dimensão diferente" + +#: tfmmcx.toolbutton5.caption +msgid "ToolButton5" +msgstr "ToolButton5" + +#: tfmmcx.toolbutton7.caption +msgctxt "tfmmcx.toolbutton7.caption" +msgid "Reset" +msgstr "Redefinir" + +#: tfmmcx.toolbutton8.caption +msgctxt "tfmmcx.toolbutton8.caption" +msgid "ToolButton8" +msgstr "ToolButton8" + +#: tfmmcx.toolbutton9.caption +msgid "Help ▾" +msgstr "Ajuda ▾" + +#: tfmmcx.toolbutton9.hint +msgctxt "tfmmcx.toolbutton9.hint" +msgid "Browse help information" +msgstr "Navegar informações de ajuda" + +#: tfmmcx.tvshapes.hint +msgctxt "tfmmcx.tvshapes.hint" +msgid "ShapeCfg" +msgstr "ShapeCfg" + +#: tfmmcx.vlbc.hint +msgid "Boundary \n\nUsing this box to set the boundary condition for each one of the 6\nfacets on the bounding box. A total of 4 boundary conditions are\nsupported:\n\n1. total absorbing BC: photon hiting the boundary are terminated\n2. Fresnel reflection BC: perform Fresnel reflection/transmission\n3. mirror/total reflection BC: photon is 100% reflected (can run a long time)\n4. cylic BC: a photon exiting from a facet will re-enter from the opposite one\n" +msgstr "Contorno\n\nUsando esta caixa para definir a condição de contorno para cada uma das 6 facetas na caixa delimitadora. Um total de 4 condições de contorno são suportadas:\n\n1. BC de absorção total: fótons que atingem o contorno são terminados\n2. BC de reflexão de Fresnel: realizar reflexão/transmissão de Fresnel\n3. BC de reflexão de espelho/total: fóton é 100% refletido (pode executar por muito tempo)\n4. BC cíclico: um fóton saindo de uma faceta irá re-entrar da faceta oposta\n" + +#: tfmnewsession.btcancel.caption +msgctxt "tfmnewsession.btcancel.caption" +msgid "Cancel" +msgstr "Cancelar" + +#: tfmnewsession.btok.caption +msgctxt "tfmnewsession.btok.caption" +msgid "OK" +msgstr "OK" + +#: tfmnewsession.caption +msgid "Create A New Simulation" +msgstr "Criar Uma Nova Simulação" + +#: tfmnewsession.edsession.hint +msgctxt "tfmnewsession.edsession.hint" +msgid "Session" +msgstr "Sessão" + +#: tfmnewsession.grprogram.caption +msgctxt "tfmnewsession.grprogram.caption" +msgid "Run Monte Carlo simulation with" +msgstr "Executar simulação Monte Carlo com" + +#: tfmnewsession.grprogram.hint +msgid "Program" +msgstr "Programa" + +#: tfmnewsession.label4.caption +msgid "Please type in a unique session name" +msgstr "Por favor digite um nome de sessão único" + +#: tfmnewsession.label4.hint +msgctxt "tfmnewsession.label4.hint" +msgid "-s (--sessionid)" +msgstr "-s (--sessionid)" + +#: tfmshapeeditor.btcancel.caption +msgctxt "tfmshapeeditor.btcancel.caption" +msgid "Cancel" +msgstr "Cancelar" + +#: tfmshapeeditor.btok.caption +msgctxt "tfmshapeeditor.btok.caption" +msgid "OK" +msgstr "OK" + +#: tfmshapeeditor.caption +msgid "Edit Shapes" +msgstr "Editar Formas" + +#: tfmsource.btcancel.caption +msgctxt "tfmsource.btcancel.caption" +msgid "Cancel" +msgstr "Cancelar" + +#: tfmsource.btok.caption +msgctxt "tfmsource.btok.caption" +msgid "OK" +msgstr "OK" + +#: tfmsource.caption +msgid "Light Source Settings" +msgstr "Configurações da Fonte de Luz" + +#: tfmsource.edsource.text +msgid "pencil" +msgstr "lápis" + +#: tfmsource.label4.caption +msgid "Please select a light source type:" +msgstr "Por favor selecione um tipo de fonte de luz:" + +#: tfmsource.label5.caption +msgid "Please define source parameters:" +msgstr "Por favor defina parâmetros da fonte:" + +#: tfmstop.caption +msgid "Running ..." +msgstr "Executando ..." + +#: tfmstop.toolbar1.caption +msgid "Running" +msgstr "Executando" + +#: tfmstop.toolbutton3.caption +msgid "Hide" +msgstr "Ocultar" + +#: tfmstop.toolbutton3.hint +msgid "Hide this window" +msgstr "Ocultar esta janela" + +#: tfmstop.toolbutton8.caption +msgctxt "tfmstop.toolbutton8.caption" +msgid "ToolButton8" +msgstr "ToolButton8" + +#: tfmviewer.btbackground.hint +msgctxt "tfmviewer.btbackground.hint" +msgid "Change Background Color" +msgstr "Alterar Cor de Fundo" + +#: tfmviewer.btopaque.caption +msgid "btOpaque" +msgstr "btOpaque" + +#: tfmviewer.btopaque.hint +msgid "Show Opaque Hull" +msgstr "Mostrar Casco Opaco" + +#: tfmviewer.caption +msgid "MCX Studio Volume Renderer" +msgstr "Renderizador de Volume MCX Studio" + +#: tfmviewer.grdir.caption +msgid "Slicing direction" +msgstr "Direção de corte" + +#: tfmviewer.label1.caption +msgid "Rendering quality" +msgstr "Qualidade de renderização" + +#: tfmviewer.label2.caption +msgid "Cutting plane position:" +msgstr "Posição do plano de corte:" + +#: tfmviewer.label3.caption +msgid "Invisible threshold" +msgstr "Limiar invisível" + +#: tfmviewer.label4.caption +msgid "Color level" +msgstr "Nível de cor" + +#: tfmviewer.mcxplotexit.caption +msgctxt "tfmviewer.mcxplotexit.caption" +msgid "Exit" +msgstr "Sair" + +#: tfmviewer.mcxplotexit.hint +msgctxt "tfmviewer.mcxplotexit.hint" +msgid "Exit" +msgstr "Sair" + +#: tfmviewer.mcxplotopen.caption +msgid "Open File" +msgstr "Abrir Arquivo" + +#: tfmviewer.mcxplotopen.hint +msgid "Open Data File" +msgstr "Abrir Arquivo de Dados" + +#: tfmviewer.mcxplotrefresh.caption +msgctxt "tfmviewer.mcxplotrefresh.caption" +msgid "Refresh" +msgstr "Atualizar" + +#: tfmviewer.mcxplotrefresh.hint +msgctxt "tfmviewer.mcxplotrefresh.hint" +msgid "Refresh" +msgstr "Atualizar" + +#: tfmviewer.mcxplotresetcamera.caption +msgctxt "tfmviewer.mcxplotresetcamera.caption" +msgid "Reset" +msgstr "Redefinir" + +#: tfmviewer.mcxplotsavescreen.caption +msgctxt "tfmviewer.mcxplotsavescreen.caption" +msgid "Save Screen" +msgstr "Salvar Tela" + +#: tfmviewer.mcxplotsavescreen.hint +msgid "Save screenshot" +msgstr "Salvar captura de tela" + +#: tfmviewer.mcxplotshowbbx.caption +msgctxt "tfmviewer.mcxplotshowbbx.caption" +msgid "Show Bounding Box" +msgstr "Mostrar Caixa Delimitadora" + +#: tfmviewer.mcxplotshowbbx.hint +msgctxt "tfmviewer.mcxplotshowbbx.hint" +msgid "Show Bounding Box" +msgstr "Mostrar Caixa Delimitadora" + +#: tfmviewer.mcxplotusecolor.caption +msgid "Pseudocolor" +msgstr "Pseudocor" + +#: tfmviewer.mcxplotusecolor.hint +msgid "Use Pseudocolor" +msgstr "Usar Pseudocor" + +#: tfmviewer.toolbar1.caption +msgctxt "tfmviewer.toolbar1.caption" +msgid "ToolBar1" +msgstr "ToolBar1" + +#: tfmviewer.toolbutton10.caption +msgid "ToolButton10" +msgstr "ToolButton10" + +#: tfmviewer.toolbutton4.hint +msgid "Reset 3D View" +msgstr "Redefinir Vista 3D" + +#: tfmviewer.toolbutton9.caption +msgctxt "tfmviewer.toolbutton9.caption" +msgid "ToolButton9" +msgstr "ToolButton9" \ No newline at end of file diff --git a/mcxstudio/i18n/mcxstudio.zh-cn.po b/mcxstudio/i18n/mcxstudio.zh-cn.po index 6509dbf4..acb5fb04 100644 --- a/mcxstudio/i18n/mcxstudio.zh-cn.po +++ b/mcxstudio/i18n/mcxstudio.zh-cn.po @@ -1,10 +1,10 @@ msgid "" msgstr "" "Project-Id-Version: \n" -"POT-Creation-Date: \n" -"PO-Revision-Date: \n" -"Last-Translator: \n" -"Language-Team: \n" +"POT-Creation-Date: 2025-09-27\n" +"PO-Revision-Date: 2025-09-27\n" +"Last-Translator: Qianqian Fang\n" +"Language-Team: MCX Developers\n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -14,7 +14,7 @@ msgstr "" #: tfmabout.button1.caption msgctxt "tfmabout.button1.caption" msgid "OK" -msgstr "确认" +msgstr "确定" #: tfmabout.caption msgid "About Monte Carlo eXtreme Studio" @@ -33,15 +33,15 @@ msgstr "取消" #: tfmconfig.btok.caption msgctxt "tfmconfig.btok.caption" msgid "OK" -msgstr "确认" +msgstr "确定" #: tfmconfig.caption msgid "MCX Studio Config" -msgstr "光子工作室设置" +msgstr "光子工作室配置" #: tfmconfig.ckusemanualpath.caption msgid "Use Manual Paths" -msgstr "使用用户定义路径" +msgstr "使用手动路径" #: tfmconfig.edlocalpath.columns[0].title.caption msgctxt "tfmconfig.edlocalpath.columns[0].title.caption" @@ -51,40 +51,40 @@ msgstr "值" #: tfmconfig.edscppath.hint msgctxt "tfmconfig.edscppath.hint" msgid "Local SCP Executable Path" -msgstr "本地 SCP 程序路径" +msgstr "本地SCP可执行文件路径" #: tfmconfig.edsshpath.hint msgid "Local SSH Path" -msgstr "本地 SSH 程序路径" +msgstr "本地SSH路径" #: tfmconfig.edworkpath.text msgid "%MCXSTUDIO%/MCXOutput" -msgstr "" +msgstr "%MCXSTUDIO%/MCXOutput" #: tfmconfig.groupbox2.caption msgid "MCXStudio Local Output Root Directory" -msgstr "本地输出根目录" +msgstr "光子工作室本地输出根目录" #: tfmconfig.groupbox3.caption msgid "Remote MCX/MMC/MCXCl Executable Search Paths" -msgstr "远程 MCX/MMC/MCXCl 搜索路径" +msgstr "远程MCX/MMC/MCXCl可执行文件搜索路径" #: tfmconfig.groupbox4.caption msgid "Local MCX/MMC/MCXCl Executable Search Paths" -msgstr "本地 MCX/MMC/MCXCl 搜索路径" +msgstr "本地MCX/MMC/MCXCl可执行文件搜索路径" #: tfmconfig.groupbox5.caption msgid "Local SSH Executable Path" -msgstr "本地 SSH 程序路径" +msgstr "本地SSH可执行文件路径" #: tfmconfig.groupbox6.caption msgctxt "tfmconfig.groupbox6.caption" msgid "Local SCP Executable Path" -msgstr "本地 SCP 程序路径" +msgstr "本地SCP可执行文件路径" #: tfmconfig.groupbox7.caption msgid "Remote MCX/MMC/MCXCl Output Directory" -msgstr "远程 MCX/MMC/MCXCl 输出目录" +msgstr "远程MCX/MMC/MCXCl输出目录" #: tfmconfig.groupbox8.caption msgid "Remote GPU Server" @@ -92,7 +92,7 @@ msgstr "远程GPU服务器" #: tfmconfig.label1.caption msgid "Hostname or IP" -msgstr "主机名或 IP 地址" +msgstr "主机名或IP" #: tfmconfig.label2.caption msgid "Port" @@ -110,11 +110,11 @@ msgstr "取消" #: tfmdatafile.btok.caption msgctxt "tfmdatafile.btok.caption" msgid "OK" -msgstr "确认" +msgstr "确定" #: tfmdatafile.caption msgid " Data File Properties" -msgstr " 数据文件属性" +msgstr "数据文件属性" #: tfmdatafile.eddataformat.text msgid "Float (32bit)" @@ -126,15 +126,15 @@ msgstr "数据文件" #: tfmdatafile.label4.caption msgid "Y Dimension" -msgstr "Y 体素" +msgstr "Y维度" #: tfmdatafile.label5.caption msgid "X Dimension" -msgstr "X 体素" +msgstr "X维度" #: tfmdatafile.label6.caption msgid "Z Dimension" -msgstr "Z 体素" +msgstr "Z维度" #: tfmdatafile.label7.caption msgctxt "tfmdatafile.label7.caption" @@ -148,11 +148,11 @@ msgstr "时间窗" #: tfmdatafile.label9.caption msgid "Header Size" -msgstr "标题大小" +msgstr "头部大小" #: tfmdomain.acexit.caption msgid "acExit" -msgstr "" +msgstr "acExit" #: tfmdomain.acexit.hint msgctxt "tfmdomain.acexit.hint" @@ -161,23 +161,23 @@ msgstr "退出" #: tfmdomain.achidebbx.caption msgid "acHideBBX" -msgstr "" +msgstr "acHideBBX" #: tfmdomain.achidebbx.hint msgid "Hide Domain Box" -msgstr "隐藏域框" +msgstr "隐藏域边界框" #: tfmdomain.acloadjson.caption msgid "acLoadJSON" -msgstr "" +msgstr "acLoadJSON" #: tfmdomain.acloadjson.hint msgid "Load JSON" -msgstr "加载 JSON 文件" +msgstr "加载JSON" #: tfmdomain.acrender.caption msgid "acRender" -msgstr "" +msgstr "acRender" #: tfmdomain.acrender.hint msgid "Render" @@ -185,15 +185,15 @@ msgstr "渲染" #: tfmdomain.acresetcamera.caption msgid "acResetCamera" -msgstr "" +msgstr "acResetCamera" #: tfmdomain.acresetcamera.hint msgid "Reset Camera" -msgstr "重置视角" +msgstr "重置相机" #: tfmdomain.acsaveimage.caption msgid "acSaveImage" -msgstr "" +msgstr "acSaveImage" #: tfmdomain.acsaveimage.hint msgctxt "tfmdomain.acsaveimage.hint" @@ -202,20 +202,20 @@ msgstr "保存屏幕" #: tfmdomain.acsavejson.caption msgid "acSaveJSON" -msgstr "" +msgstr "acSaveJSON" #: tfmdomain.acsavejson.hint msgid "Save JSON" -msgstr "保存 JSON" +msgstr "保存JSON" #: tfmdomain.btbackground.hint msgctxt "tfmdomain.btbackground.hint" msgid "Change Background Color" -msgstr "背景颜色" +msgstr "更改背景颜色" #: tfmdomain.btpin.caption msgid "Pin Editor" -msgstr "强制显示编辑器" +msgstr "固定编辑器" #: tfmdomain.btpin.hint msgid "Show editor" @@ -223,51 +223,49 @@ msgstr "显示编辑器" #: tfmdomain.caption msgid "MCX Domain Renderer" -msgstr "MCX仿真预览" +msgstr "MCX域渲染器" #: tfmdomain.toolbar1.caption msgctxt "tfmdomain.toolbar1.caption" msgid "ToolBar1" -msgstr "" +msgstr "ToolBar1" #: tfmdomain.toolbutton11.caption msgid "ToolButton11" -msgstr "" +msgstr "ToolButton11" #: tfmdomain.toolbutton7.caption msgid "ToolButton7" -msgstr "" +msgstr "ToolButton7" #: tfmdomain.toolbutton9.caption msgctxt "tfmdomain.toolbutton9.caption" msgid "ToolButton9" -msgstr "" +msgstr "ToolButton9" #: tfmmcx.btexpandoutput.caption -msgid "▵" -msgstr "" +msgid "â–µ" +msgstr "â–µ" #: tfmmcx.btexpandoutput.hint msgid "To expand or collapse the command window." -msgstr "展开或折回命令窗口。" +msgstr "展开或折叠命令窗口。" #: tfmmcx.btgbexpand.caption msgid "▾" -msgstr "" +msgstr "▾" #: tfmmcx.btloadseed.hint msgid "Load seed data from previous simulations for replay" -msgstr "加载种子文件以进行光子重放" +msgstr "从以前的模拟中加载种子数据进行重放" #: tfmmcx.btsendcmd.caption msgid "Send" msgstr "发送" #: tfmmcx.btsendcmd.hint -msgid "" -"Send the user input to the input buffer of the external program \n" -"currently being executed.\n" -msgstr "将用户输入发送到当前正在执行的外部程序的输入缓冲区\n" +msgid "Send the user input to the input buffer of the external program \ncurrently being executed.\n" +msgstr "将用户输入发送到当前执行的外部程序的输入缓冲区。\n" #: tfmmcx.button2.caption msgid "Clear Output" @@ -279,564 +277,214 @@ msgstr "光子工作室" #: tfmmcx.ckautopilot.caption msgid "Let MCX decide thread/block size (-A)" -msgstr "自动设置线程 (-A)" +msgstr "让MCX决定线程/块大小 (-A)" #: tfmmcx.ckautopilot.hint -msgid "" -"Autopilot \n" -"\n" -"Checking this box tells MCX/MMC to automatically determine the \"optimal\"\n" -"thread number and block size by using the hardware information.\n" -"\n" -"It is recommended to always check this box. The key to maximize simulation\n" -"throughput is to ensure a large number of threads are launched to keep the\n" -"hardware resources fully utilized.\n" -msgstr "" -"Autopilot \n" -"\n" -"选中此框告诉 MCX/MMC 使用硬件信息自动确定“最佳”\n" -"线程数和块大小。\n" -"\n" -"建议始终选中此框。\n" +msgid "Autopilot \n\nChecking this box tells MCX/MMC to automatically determine the \"optimal\"\nthread number and block size by using the hardware information.\n\nIt is recommended to always check this box. The key to maximize simulation\nthroughput is to ensure a large number of threads are launched to keep the\nhardware resources fully utilized.\n" +msgstr "自动驾驶\n\n勾选此框告诉MCX/MMC根据硬件信息自动确定\"最佳\"的线程数和块大小。\n\n建议始终勾选此框。最大化模拟吞吐量的关键是确保启动大量线程以充分利用硬件资源。\n" #: tfmmcx.ckbdebug.hint msgctxt "tfmmcx.ckbdebug.hint" msgid "DebugFlags" -msgstr "调试标志" +msgstr "DebugFlags" #: tfmmcx.ckbdet.hint -msgid "" -"SaveDetFlag \n" -"\n" -"This checkbox list allows users to select the detected photon\n" -"data items that they want to save in the .mch file.\n" -"\n" -"By default, only the Detector ID and Partial Pathlength are stored.\n" -msgstr "" -"SaveDetFlag \n" -"\n" -"此复选框列表允许用户选择要保存在 .mch 文件中的检测到的光子\n" -"数据项。\n" -"\n" -"默认情况下,仅存储探测器 ID 和部分路径长度。\n" +msgid "SaveDetFlag \n\nThis checkbox list allows users to select the detected photon\ndata items that they want to save in the .mch file.\n\nBy default, only the Detector ID and Partial Pathlength are stored.\n" +msgstr "SaveDetFlag\n\n此复选框列表允许用户选择要在.mch文件中保存的检测光子数据项。\n\n默认情况下,只存储检测器ID和部分路径长度。\n" #: tfmmcx.ckdoremote.caption msgid "Run remote command:" msgstr "运行远程命令:" #: tfmmcx.ckdoremote.hint -msgid "" -"DoRemote \n" -"\n" -"Check this option asks MCXStudio to call the specified ssh command \n" -"and run mcx/mmc simulations on remote servers. \n" -"\n" -"Please be aware that one must prepare the server and client to enable\n" -"remote execution, this include\n" -"\n" -"1. install mcx/mmc/mcxcl executable on remote server and add path to\n" -" the PATH environment \n" -"2. install ssh client on the local client; for Linux/Mac, ssh/scp command is\n" -" typically built-in; for windows, please install plink.exe and pscp.exe and\n" -" ensure that their paths are on the PATH environment variable\n" -"3. optionally, one can set the SSH key between the client and server to \n" -" avoid typing password, please see http://www.linuxproblem.org/art_9.html\n" -msgstr "" -"DoRemote \n" -"\n" -"选中此选项会要求 MCXStudio 调用指定的 ssh 命令\n" -"并在远程服务器上运行 mcx/mmc 仿真。 \n" +msgid "DoRemote \n\nCheck this option asks MCXStudio to call the specified ssh command \nand run mcx/mmc simulations on remote servers. \n\nPlease be aware that one must prepare the server and client to enable\nremote execution, this include\n\n1. install mcx/mmc/mcxcl executable on remote server and add path to\n the PATH environment \n2. install ssh client on the local client; for Linux/Mac, ssh/scp command is\n typically built-in; for windows, please install plink.exe and pscp.exe and\n ensure that their paths are on the PATH environment variable\n3. optionally, one can set the SSH key between the client and server to \n avoid typing password, please see http://www.linuxproblem.org/art_9.html\n" +msgstr "DoRemote\n\n选中此选项要求光子工作室调用指定的ssh命令并在远程服务器上运行mcx/mmc模拟。\n\n请注意,必须准备服务器和客户端以启用远程执行,这包括:\n\n1. 在远程服务器上安装mcx/mmc/mcxcl可执行文件并将路径添加到PATH环境变量\n2. 在本地客户端安装ssh客户端;对于Linux/Mac,ssh/scp命令通常内置;对于Windows,请安装plink.exe和pscp.exe并确保它们的路径在PATH环境变量中\n3. 可选地,可以在客户端和服务器之间设置SSH密钥以避免输入密码,请参见http://www.linuxproblem.org/art_9.html\n" #: tfmmcx.ckdoreplay.caption msgid "Replay" -msgstr "光子重放" +msgstr "重放" #: tfmmcx.ckdoreplay.hint -msgid "" -"DoReplay \n" -"\n" -"When selecting a .mch file as the seed, this checkbox is automatically \n" -"checked, signifying that MCX/MMC will perform a photon replay by\n" -"reading the RNG seeds from the .mch file and rerun the photons to produce\n" -"the Jacobians - in such case, one can use the \"Output Type\" to select which\n" -"metric to output.\n" -msgstr "" -"DoReplay \n" -"\n" -"选择 .mch 文件作为种子时,会自动选中此复选框,表示 MCX/MMC 将通过\n" -"从 .mch 文件读取 RNG 种子来执行光子重放,并重新运行光子以产生\n" +msgid "DoReplay \n\nWhen selecting a .mch file as the seed, this checkbox is automatically \nchecked, signifying that MCX/MMC will perform a photon replay by\nreading the RNG seeds from the .mch file and rerun the photons to produce\nthe Jacobians - in such case, one can use the \"Output Type\" to select which\nmetric to output.\n" +msgstr "DoReplay\n\n当选择.mch文件作为种子时,此复选框自动被选中,表示MCX/MMC将通过从.mch文件读取RNG种子并重新运行光子来执行光子重放以产生雅可比矩阵 - 在这种情况下,可以使用\"输出类型\"来选择要输出的度量。\n" #: tfmmcx.cklockgpu.caption msgid "Lock GPU" msgstr "锁定GPU" #: tfmmcx.cklockgpu.hint -msgid "" -"Checking this box prevents MCXStudio from updating the device list\n" -"when switching between different simulation sessions.\n" -"\n" -"When running simulation on a remote server, it is recommended to\n" -"lock the GPU to avoid resetting of the device list.\n" -msgstr "" -"选中此框可防止 MCXStudio 在不同仿真之间切换时\n" -"更新设备列表。\n" -"\n" -"在远程服务器上运行仿真时,建议\n" -"锁定 GPU 以避免重置设备列表。\n" +msgid "Checking this box prevents MCXStudio from updating the device list\nwhen switching between different simulation sessions.\n\nWhen running simulation on a remote server, it is recommended to\nlock the GPU to avoid resetting of the device list.\n" +msgstr "勾选此框可防止光子工作室在不同模拟会话之间切换时更新设备列表。\n\n在远程服务器上运行模拟时,建议锁定GPU以避免重置设备列表。\n" #: tfmmcx.cknormalize.caption msgid "Do normalization (-U)" -msgstr "归一化(-U)" +msgstr "执行归一化 (-U)" #: tfmmcx.cknormalize.hint -msgid "" -"DoNormalize \n" -"\n" -"Check this option allows MCX/MMC to normalize the output by the \n" -"below formula\n" -"\n" -"Φ(i,j,k,t)=E(i,j,k,t) / (V*E_total*dT)\n" -"\n" -"where E(i,j,k,t) is the raw accummuated energy at each voxel; \n" -"V is the size of the voxel in mm^3; dT is the time-gate width in s.\n" -"\n" -"After normalization, the result becomes TPSF or Green's function.\n" -"\n" -"Unchecking this option disables normalization.\n" -msgstr "" -"DoNormalize \n" -"\n" -"选中此选项允许 MCX/MMC 通过下面的公式对输出进行归一化\n" -"\n" -"Φ(i,j,k,t)=E(i,j,k,t) / (V*E_total*dT)\n" +msgid "DoNormalize \n\nCheck this option allows MCX/MMC to normalize the output by the \nbelow formula\n\nΦ(i,j,k,t)=E(i,j,k,t) / (V*E_total*dT)\n\nwhere E(i,j,k,t) is the raw accummuated energy at each voxel; \nV is the size of the voxel in mm^3; dT is the time-gate width in s.\n\nAfter normalization, the result becomes TPSF or Green's function.\n\nUnchecking this option disables normalization.\n" +msgstr "DoNormalize\n\n选中此选项允许MCX/MMC通过以下公式对输出进行归一化:\n\nΦ(i,j,k,t)=E(i,j,k,t) / (V*E_total*dT)\n\n其中E(i,j,k,t)是每个体素的原始累积能量;V是体素的大小(mm^3);dT是时间窗宽度(s)。\n\n归一化后,结果变为TPSF或格林函数。\n\n取消选中此选项将禁用归一化。\n" #: tfmmcx.ckreflect.caption msgid "Do reflection all boundaries (-b)" -msgstr "边界反射 (-b)" +msgstr "在所有边界执行反射 (-b)" #: tfmmcx.ckreflect.hint -msgid "" -"DoReflect \n" -"\n" -"Check this option (by default) enables reflection/refrection calculations \n" -"when refractive index mismatch is detected at tissue boundaries.\n" -"\n" -"If this option is unchecked, any photon hits the boundary between a \n" -"non-zero and zero-valued voxel will be terminated (i.e. total\n" -"absorbtion boundary condition). \n" -"\n" -"The medium outside of the volume bounding box is assumed to have \n" -"the optical properties defined as label 0 (the first row in the Media Settings\n" -"table on the right).\n" -msgstr "" -"DoReflect \n" -"\n" -"选中此选项(默认情况下)在组织边界检测到折射率不匹配时启用反射/反射计算。\n" -"\n" -"如果未选中此选项,则任何光子都会撞击\n" -"非零和之间的边界\n" +msgid "DoReflect \n\nCheck this option (by default) enables reflection/refrection calculations \nwhen refractive index mismatch is detected at tissue boundaries.\n\nIf this option is unchecked, any photon hits the boundary between a \nnon-zero and zero-valued voxel will be terminated (i.e. total\nabsorbtion boundary condition). \n\nThe medium outside of the volume bounding box is assumed to have \nthe optical properties defined as label 0 (the first row in the Media Settings\ntable on the right).\n" +msgstr "DoReflect\n\n选中此选项(默认)在组织边界检测到折射率不匹配时启用反射/折射计算。\n\n如果取消选中此选项,任何撞击非零值和零值体素之间边界的光子将被终止(即全吸收边界条件)。\n\n体积边界框外的介质假定具有标签0定义的光学特性(右侧介质设置表中的第一行)。\n" #: tfmmcx.cksavedata.caption msgid "Save fluence (-S)" -msgstr "保存空间输出(-S)" +msgstr "保存通量 (-S)" #: tfmmcx.cksavedata.hint -msgid "" -"DoSave \n" -"\n" -"Checking this option makes MCX/MMC outputs the volumetric fluence\n" -"data: for MCX, it is the .mc2/.nii file; for MMC, it is a .dat file using P/H/B/S \n" -"ray-tracers and .mc2/.nii files when using the dual-grid mode (-M G).\n" -"\n" -"Unchecking this option stops MCX/MMC output the .mc2/.nii file.\n" -msgstr "" -"DoSave \n" -"\n" -"勾选此选项使MCX/MMC输出体积注量\n" -"数据:对于MCX,保存为.mc2/.nii文件\n" +msgid "DoSave \n\nChecking this option makes MCX/MMC outputs the volumetric fluence\ndata: for MCX, it is the .mc2/.nii file; for MMC, it is a .dat file using P/H/B/S \nray-tracers and .mc2/.nii files when using the dual-grid mode (-M G).\n\nUnchecking this option stops MCX/MMC output the .mc2/.nii file.\n" +msgstr "DoSave\n\n选中此选项使MCX/MMC输出体积通量数据:对于MCX,这是.mc2/.nii文件;对于MMC,使用P/H/B/S射线追踪器时是.dat文件,使用双网格模式(-M G)时是.mc2/.nii文件。\n\n取消选中此选项将阻止MCX/MMC输出.mc2/.nii文件。\n" #: tfmmcx.cksavedetector.caption msgid "Save detected photons (-d)" -msgstr "保存探测光子(-d)" +msgstr "保存检测到的光子 (-d)" #: tfmmcx.cksavedetector.hint -msgid "" -"SaveDetector \n" -"\n" -"Checking this option allows one to store detected photon \n" -"information. The output data records can be user-defined by\n" -"selecting the check-box list entitled \"Save detected photon\".\n" -"The output data are stored in a .mch file.\n" -"\n" -"Unchecking this option disables output the .mch file (can be \n" -"slightly faster).\n" -msgstr "" -"SaveDetector\n" -"\n" -"选中此选项允许存储检测到的光子\n" -"信息。\n" +msgid "SaveDetector \n\nChecking this option allows one to store detected photon \ninformation. The output data records can be user-defined by\nselecting the check-box list entitled \"Save detected photon\".\nThe output data are stored in a .mch file.\n\nUnchecking this option disables output the .mch file (can be \nslightly faster).\n" +msgstr "SaveDetector\n\n选中此选项允许存储检测到的光子信息。输出数据记录可以通过选择名为\"保存检测到的光子\"的复选框列表来用户定义。输出数据存储在.mch文件中。\n\n取消选中此选项将禁用.mch文件的输出(可能稍快一些)。\n" #: tfmmcx.cksavemask.caption msgid "Save volume mask (-M)" -msgstr "保存预处理体数据 (-M)" +msgstr "保存体积掩模 (-M)" #: tfmmcx.cksavemask.hint -msgid "" -"DoSaveMask \n" -"\n" -"Checking this option asks MCX to output the pre-processed volume \n" -"masks. The preprocessed mask contains the voxels that are covered\n" -"under detectors; these voxels are designated by setting the sign-bit \n" -"as 1. One can visualize this dumped data mask using mcxplotvol.m\n" -"\n" -"Unchecking this option suppresses the output of this mask file.\n" -msgstr "" -"DoSaveMask \n" -"\n" -"选中此选项会要求 MCX 输出预处理的卷\n" -"掩码。\n" +msgid "DoSaveMask \n\nChecking this option asks MCX to output the pre-processed volume \nmasks. The preprocessed mask contains the voxels that are covered\nunder detectors; these voxels are designated by setting the sign-bit \nas 1. One can visualize this dumped data mask using mcxplotvol.m\n\nUnchecking this option suppresses the output of this mask file.\n" +msgstr "DoSaveMask\n\n选中此选项要求MCX输出预处理的体积掩模。预处理掩模包含被检测器覆盖的体素;这些体素通过设置符号位为1来指定。可以使用mcxplotvol.m来可视化这些转储的数据掩模。\n\n取消选中此选项将抑制此掩模文件的输出。\n" #: tfmmcx.cksaveref.caption msgid "Save diffuse reflectance (-X)" -msgstr "保存漫反射率 (-X)" +msgstr "保存漫反射 (-X)" #: tfmmcx.cksaveref.hint -msgid "" -"DoSaveRef \n" -"\n" -"Checking this option allows MCX/MMC to output the escaped photon\n" -"weights on the exterior surface of the domain. For MCX, to save the \n" -"total diffuse reflectance, one must pad a layer of zero voxels in the \n" -"facet or full bounding box of the domain to store such data. The raw \n" -"total diffuse reflectance are normalized and stored as negative values\n" -"in the .mc2/.nii file. When loading such file using loadmc2.m, the diffuse\n" -"reflectance data are extracted and converted to positive output.\n" -"\n" -"Unchecking this option disables saving diffuse reflectance data.\n" -msgstr "" -"DoSaveRef \n" -"\n" -"选中此选项允许 MCX/MMC 在域的外表面上输出逃逸的光子\n" -"权重。\n" +msgid "DoSaveRef \n\nChecking this option allows MCX/MMC to output the escaped photon\nweights on the exterior surface of the domain. For MCX, to save the \ntotal diffuse reflectance, one must pad a layer of zero voxels in the \nfacet or full bounding box of the domain to store such data. The raw \ntotal diffuse reflectance are normalized and stored as negative values\nin the .mc2/.nii file. When loading such file using loadmc2.m, the diffuse\nreflectance data are extracted and converted to positive output.\n\nUnchecking this option disables saving diffuse reflectance data.\n" +msgstr "DoSaveRef\n\n选中此选项允许MCX/MMC在域的外表面输出逃逸光子权重。对于MCX,要保存总漫反射,必须在域的面或完整边界框中填充一层零体素来存储此类数据。原始总漫反射被归一化并作为负值存储在.mc2/.nii文件中。使用loadmc2.m加载此类文件时,漫反射数据被提取并转换为正值输出。\n\n取消选中此选项将禁用保存漫反射数据。\n" #: tfmmcx.cksaveseed.caption msgid "Save photon seeds (-q)" -msgstr "保存光子随机数种子 (-q)" +msgstr "保存光子种子 (-q)" #: tfmmcx.cksaveseed.hint -msgid "" -"DoSaveSeed \n" -"\n" -"Checking this option allows one to save the RNG seeds of the detected\n" -"photons in the .mch file. This makes it possible to perform photon replay\n" -"to compute the Jacobian when feeding this output .mch file as the seed\n" -"for the replay run.\n" -"\n" -"Unchecking this option disables saving photon seeds.\n" -msgstr "" -"DoSaveSeed \n" -"\n" -"选中此选项允许将检测到的\n" -"光子的 RNG 种子保存在 .mch 文件中。\n" +msgid "DoSaveSeed \n\nChecking this option allows one to save the RNG seeds of the detected\nphotons in the .mch file. This makes it possible to perform photon replay\nto compute the Jacobian when feeding this output .mch file as the seed\nfor the replay run.\n\nUnchecking this option disables saving photon seeds.\n" +msgstr "DoSaveSeed\n\n选中此选项允许在.mch文件中保存检测到的光子的RNG种子。这使得在将此输出.mch文件作为重放运行的种子时能够执行光子重放以计算雅可比矩阵。\n\n取消选中此选项将禁用保存光子种子。\n" #: tfmmcx.cksharedfs.caption msgid "Shared file system" -msgstr "服务器与客户端共享文件系统" +msgstr "共享文件系统" #: tfmmcx.cksharedfs.hint -msgid "" -"DoSharedFS \n" -"\n" -"Checking this option suggests that both the client and the server\n" -"share the same file system, thus, no file copying is needed. In other\n" -"word, the folder structure to read/write on both client and server\n" -"are identical. This is the case when one uses nfs/autofs on Linux/Mac.\n" -msgstr "" -"DoSharedFS \n" -"\n" -"勾选此选项表明客户端和服务器\n" -"共享同一个文件系统,因此不需要进行文件复制。\n" +msgid "DoSharedFS \n\nChecking this option suggests that both the client and the server\nshare the same file system, thus, no file copying is needed. In other\nword, the folder structure to read/write on both client and server\nare identical. This is the case when one uses nfs/autofs on Linux/Mac.\n" +msgstr "DoSharedFS\n\n选中此选项表明客户端和服务器共享相同的文件系统,因此不需要文件复制。换句话说,客户端和服务器上的读/写文件夹结构是相同的。在Linux/Mac上使用nfs/autofs时就是这种情况。\n" #: tfmmcx.ckshowprogress.caption msgid "Show progress bar" msgstr "显示进度条" #: tfmmcx.ckshowprogress.hint -msgid "" -"ShowProgress \n" -"\n" -"(This option is highly experimental, use with caution, may cause hanging on some GPUs)\n" -"\n" -"Check this option to let MCX/MMC to print a progress bar during the\n" -"GPU simulation. In some hardware, this may cause unstable behaviors\n" -"such as stalling or never return even the simulation is complete. If such\n" -"behavior is detected, please uncheck this option.\n" -msgstr "" -"ShowProgress \n" -"\n" -"(此选项是高度实验性的,谨慎使用,可能会导致某些 GPU 挂起)\n" -"\n" -"选中此选项可以让 MCX/MMC 在 GPU 仿真期间打印进度条。\n" +msgid "ShowProgress \n\n(This option is highly experimental, use with caution, may cause hanging on some GPUs)\n\nCheck this option to let MCX/MMC to print a progress bar during the\nGPU simulation. In some hardware, this may cause unstable behaviors\nsuch as stalling or never return even the simulation is complete. If such\nbehavior is detected, please uncheck this option.\n" +msgstr "ShowProgress\n\n(此选项高度实验性,请谨慎使用,在某些GPU上可能导致挂起)\n\n选中此选项让MCX/MMC在GPU模拟期间打印进度条。在某些硬件上,这可能导致不稳定行为,如停止或即使模拟完成也不返回。如果检测到此类行为,请取消选中此选项。\n" #: tfmmcx.ckskipvoid.caption msgid "Skip void space (-k)" -msgstr "忽略背景飞行时间 (-k)" +msgstr "跳过空隙空间 (-k)" #: tfmmcx.ckskipvoid.hint -msgid "" -"DoSkipVoid \n" -"\n" -"Checking this option starts photon's ellapse time when it first enters\n" -"a non-zero voxel.\n" -"\n" -"Unchecking this option starts photon's ellapse time at launch time,\n" -"regardless it is launched in the background (0-valued) voxel or non-zero\n" -"voxel.\n" -msgstr "" -"DoSkipVoid \n" -"\n" -"选中此选项将在光子首次进入\n" -"a非零体素时启动光子的消逝时间。\n" -"\n" -"取消选中此选项将在启动时启动光子的消逝时间,\n" -"无论它是在后台启动的(0值) \n" +msgid "DoSkipVoid \n\nChecking this option starts photon's ellapse time when it first enters\na non-zero voxel.\n\nUnchecking this option starts photon's ellapse time at launch time,\nregardless it is launched in the background (0-valued) voxel or non-zero\nvoxel.\n" +msgstr "DoSkipVoid\n\n选中此选项在光子首次进入非零体素时开始光子的经过时间。\n\n取消选中此选项在发射时开始光子的经过时间,无论它是在背景(0值)体素还是非零体素中发射。\n" #: tfmmcx.ckspecular.caption msgid "Do specular reflection (-V)" -msgstr "做镜面反射(-V)" +msgstr "执行镜面反射 (-V)" #: tfmmcx.ckspecular.hint -msgid "" -"DoSpecular \n" -"\n" -"Checking this option performs a transmission calculation if a photon \n" -"is launched in the background; this results in change of direction angle\n" -"and loss of energy.\n" -"\n" -"Unchecking this option moves a photon into a non-zero voxel without\n" -"considering the specular reflection and change of direction.\n" -msgstr "" -"DoSpecular \n" -"\n" -"如果光子在后台发射,则选中此选项将执行传输计算;\n" +msgid "DoSpecular \n\nChecking this option performs a transmission calculation if a photon \nis launched in the background; this results in change of direction angle\nand loss of energy.\n\nUnchecking this option moves a photon into a non-zero voxel without\nconsidering the specular reflection and change of direction.\n" +msgstr "DoSpecular\n\n选中此选项在光子在背景中发射时执行透射计算;这会导致方向角的改变和能量损失。\n\n取消选中此选项将光子移动到非零体素中而不考虑镜面反射和方向改变。\n" #: tfmmcx.cksrcfrom0.caption msgid "Orign from [0,0,0] (-z)" -msgstr "设置原点 (-z)" +msgstr "原点从[0,0,0]开始 (-z)" #: tfmmcx.cksrcfrom0.hint -msgid "" -"DoSrcFrom0 \n" -"\n" -"Checking this item assumes the lower-bottom corner of the voxelated \n" -"domain is [0,0,0] mm. The definitions of source and detector positions \n" -"are impacted by this definition.\n" -"\n" -"Unchecking this option assumes the lower-bottom corner of the \n" -"domain is [1,1,1] mm.\n" -msgstr "" -"DoSrcFrom0 \n" -"\n" -"检查此项假定体素域下角为 [0,0,0] mm\n" +msgid "DoSrcFrom0 \n\nChecking this item assumes the lower-bottom corner of the voxelated \ndomain is [0,0,0] mm. The definitions of source and detector positions \nare impacted by this definition.\n\nUnchecking this option assumes the lower-bottom corner of the \ndomain is [1,1,1] mm.\n" +msgstr "DoSrcFrom0\n\n选中此项假定体素化域的左下角为[0,0,0] mm。源和检测器位置的定义受此定义影响。\n\n取消选中此选项假定域的左下角为[1,1,1] mm。\n" #: tfmmcx.edbenchmark.hint -msgid "" -"Benchmark \n" -"\n" -"This option asks to run the built-in benchmark.\n" -msgstr "" -"Benchmark \n" -"\n" -"此选项要求运行内置仿真。\n" +msgid "Benchmark \n\nThis option asks to run the built-in benchmark.\n" +msgstr "Benchmark\n\n此选项要求运行内置基准测试。\n" #: tfmmcx.edblocksize.hint -msgid "" -"ThreadBlock \n" -"\n" -"Specify a small integer, preferably a multiple of 32, to define \n" -"the block size - for example, 64 means a thread block contains \n" -"64 threads.\n" -"\n" -"This is only used when the -A (autopilot mode) is not enabled.\n" -msgstr "" -"ThreadBlock \n" -"\n" -"指定一个小整数,最好是 32 的倍数,以定义\n" -"块大小 - 例如,64 表示一个线程块包含 \n" -"64 个线程。\n" -"\n" -"这仅在 -A (autopilot) 没有激活的情况下才有效\n" +msgid "ThreadBlock \n\nSpecify a small integer, preferably a multiple of 32, to define \nthe block size - for example, 64 means a thread block contains \n64 threads.\n\nThis is only used when the -A (autopilot mode) is not enabled.\n" +msgstr "ThreadBlock\n\n指定一个小整数,最好是32的倍数,以定义块大小 - 例如,64表示一个线程块包含64个线程。\n\n这仅在未启用-A(自动驾驶模式)时使用。\n" #: tfmmcx.edblocksize.text msgid "64" -msgstr "" +msgstr "64" #: tfmmcx.edbubble.hint msgctxt "tfmmcx.edbubble.hint" msgid "BubbleSize" -msgstr "" +msgstr "BubbleSize" #: tfmmcx.edbubble.text msgid "-2" -msgstr "" +msgstr "-2" #: tfmmcx.edcmdinput.hint -msgid "" -"User Input\n" -"\n" -"When connecting to a remote server via ssh/scp, one may asked to type\n" -"\"yes\" to save the ssh key or other interactive inputs. If this is the case, one\n" -"can use this field to type user input, and click \"Send\" to pipe user input to \n" -"the external program.\n" -msgstr "" -"用户输入\n" -"\n" -"通过 ssh/scp 连接到远程服务器时,可能会要求键入\n" -"\\“yes\\”以保存 ssh 密钥或其他交互式输入。\n" +msgid "User Input\n\nWhen connecting to a remote server via ssh/scp, one may asked to type\n\"yes\" to save the ssh key or other interactive inputs. If this is the case, one\ncan use this field to type user input, and click \"Send\" to pipe user input to \nthe external program.\n" +msgstr "用户输入\n\n通过ssh/scp连接到远程服务器时,可能会要求输入\"yes\"来保存ssh密钥或其他交互式输入。如果是这种情况,可以使用此字段输入用户输入,并点击\"发送\"将用户输入传递给外部程序。\n" #: tfmmcx.edconfigfile.hint -msgid "" -"InputFile \n" -"\n" -"Specify the input file in either .inp or .json format.\n" -msgstr "" -"InputFile \n" -"\n" -"指定 .inp 或 .json 格式的输入文件。\n" +msgid "InputFile \n\nSpecify the input file in either .inp or .json format.\n" +msgstr "InputFile\n\n指定.inp或.json格式的输入文件。\n" #: tfmmcx.eddetectednum.hint -msgid "" -"DetectedNum \n" -"\n" -"This sets the maximum number of detected photons to be stored. If\n" -"the actual detected photon number is higher than this specified number,\n" -"mcx/mmc will generate an warning and print out the actual detected \n" -"photon count; one can use that output in this field to allow MCX to store\n" -"all photons.\n" -msgstr "" -"DetectedNum \n" -"\n" -"这设置要存储的检测到的光子的最大数量。\n" +msgid "DetectedNum \n\nThis sets the maximum number of detected photons to be stored. If\nthe actual detected photon number is higher than this specified number,\nmcx/mmc will generate an warning and print out the actual detected \nphoton count; one can use that output in this field to allow MCX to store\nall photons.\n" +msgstr "DetectedNum\n\n这设置要存储的检测光子的最大数量。如果实际检测的光子数量高于此指定数量,mcx/mmc将生成警告并打印出实际检测的光子计数;可以在此字段中使用该输出以允许MCX存储所有光子。\n" #: tfmmcx.eddetectednum.text msgid "10000000" -msgstr "" +msgstr "10000000" #: tfmmcx.edgate.hint msgctxt "tfmmcx.edgate.hint" msgid "GateNum" -msgstr "" +msgstr "GateNum" #: tfmmcx.edgpuid.hint -msgid "" -"GPUID \n" -"\n" -"Use this list to select the device or devices (CPU or GPU) used to\n" -"run the simulation. For MCX, if multiple CUDA GPUs are installed, one\n" -"can select multiple devices to speed up the calculation; for MCXCL\n" -"and MMC, one can select OpenCL devices that include both CPU and\n" -"GPUs. In such case, only devices of the same platform can be selected.\n" -"For example, an NVIDIA GPU and a CPU can not be selected together.\n" -msgstr "" -"GPUID \n" -"\n" -"使用此列表选择用于运行仿真的一个或多个设备(CPU 或 GPU)。\n" +msgid "GPUID \n\nUse this list to select the device or devices (CPU or GPU) used to\nrun the simulation. For MCX, if multiple CUDA GPUs are installed, one\ncan select multiple devices to speed up the calculation; for MCXCL\nand MMC, one can select OpenCL devices that include both CPU and\nGPUs. In such case, only devices of the same platform can be selected.\nFor example, an NVIDIA GPU and a CPU can not be selected together.\n" +msgstr "GPUID\n\n使用此列表选择用于运行模拟的设备(CPU或GPU)。对于MCX,如果安装了多个CUDA GPU,可以选择多个设备来加速计算;对于MCXCL和MMC,可以选择包括CPU和GPU在内的OpenCL设备。在这种情况下,只能选择同一平台的设备。例如,NVIDIA GPU和CPU不能一起选择。\n" #: tfmmcx.edmoreparam.hint -msgid "" -"MoreParam \n" -"\n" -"One can use this field to manually specify additional parameters that\n" -"are not supported by this GUI tool. Any parameter set here will overwrite\n" -"the previous setting.\n" -msgstr "" -"MoreParam \n" -"\n" -"可以使用此字段手动指定此 GUI 工具不支持的其他参数。\n" +msgid "MoreParam \n\nOne can use this field to manually specify additional parameters that\nare not supported by this GUI tool. Any parameter set here will overwrite\nthe previous setting.\n" +msgstr "MoreParam\n\n可以使用此字段手动指定此GUI工具不支持的附加参数。在此处设置的任何参数将覆盖之前的设置。\n" #: tfmmcx.edoutputformat.hint -msgid "" -"OutputFormat \n" -"\n" -"This specifies the output data file format. The supported formats are\n" -"\n" -".mc2 - a simple binary format stores the voxel-by-voxel binary data\n" -" in the column-major order\n" -".nii - the NIfTI-1 format\n" -".tx3 - a simple 3D texture binary format.\n" -"ascii - text-based data file\n" -msgstr "" -"OutputFormat \n" -"\n" -"这指定输出数据文件格式。\n" +msgid "OutputFormat \n\nThis specifies the output data file format. The supported formats are\n\n.mc2 - a simple binary format stores the voxel-by-voxel binary data\n in the column-major order\n.nii - the NIfTI-1 format\n.tx3 - a simple 3D texture binary format.\nascii - text-based data file\n" +msgstr "OutputFormat\n\n这指定输出数据文件格式。支持的格式有:\n\n.mc2 - 一种简单的二进制格式,以列主序存储逐体素二进制数据\n.nii - NIfTI-1格式\n.tx3 - 一种简单的3D纹理二进制格式\nascii - 基于文本的数据文件\n" #: tfmmcx.edoutputtype.hint -msgid "" -"OutputType \n" -"\n" -"This option specifies the output data type. \n" -"\n" -"* Fluence rate [J/mm^2/s] - the default output\n" -"* Fluence [J/mm^2] - the integration of the fluence \n" -" rate over each time gate\n" -"* Energy density [J/mm^3] - can be computed by multiplying \n" -" fluence with absorption μa\n" -"* Absorption Jacobian (mua) [1/mm] - in the replay mode, this\n" -" outputs the sensitivity matrix for μa;\n" -"* Average scattering event count - in the replay mode, this\n" -" outputs the number of scattering event per voxel\n" -"* Momentum transfer sensivity (DCS) - in the replay mode, this \n" -" outputs the momentum transfer contribution/sensitivity from \n" -" each voxel.\n" -msgstr "" -"OutputType \n" -"\n" -"此选项指定输出数据类型。 \n" +msgid "OutputType \n\nThis option specifies the output data type. \n\n* Fluence rate [J/mm^2/s] - the default output\n* Fluence [J/mm^2] - the integration of the fluence \n rate over each time gate\n* Energy deposition [J] - can be computed by multiplying \n fluence with absorption μa and voxel volume [mm^3]\n* Absorption Jacobian (mua) [1/mm] - in the replay mode, this\n outputs the sensitivity matrix for μa;\n* Average scattering event count - in the replay mode, this\n outputs the number of scattering event per voxel\n* Momentum transfer sensivity (DCS) - in the replay mode, this \n outputs the momentum transfer contribution/sensitivity from \n each voxel.\n" +msgstr "OutputType\n\n此选项指定输出数据类型。\n\n* 通量率 [J/mm^2/s] - 默认输出\n* 通量 [J/mm^2] - 每个时间窗内通量率的积分\n* 能量沉积 [J] - 可通过将通量与吸收系数μa和体素体积 [mm^3] 相乘计算得出\n* 吸收雅可比矩阵 (mua) [1/mm] - 在重放模式下,输出μa的敏感性矩阵\n* 平均散射事件计数 - 在重放模式下,输出每个体素的散射事件数\n* 动量传输敏感性 (DCS) - 在重放模式下,输出每个体素的动量传输贡献/敏感性\n" #: tfmmcx.edphoton.hint -msgid "" -"PhotonNum \n" -"\n" -"This defines the total simulated photons.\n" -"\n" -"Can be an integer or number in scientific form. For example\n" -"100000 and 1e5 are both acceptable.\n" -"\n" -"Please be noted that we highly suggest one to start with a\n" -"small photon number to avoid extended run time.\n" -msgstr "" -"PhotonNum \n" -"\n" -"定义仿真光子总数。\n" -"\n" -"可以是整数或科学形式的数字。\n" +msgid "PhotonNum \n\nThis defines the total simulated photons.\n\nCan be an integer or number in scientific form. For example\n100000 and 1e5 are both acceptable.\n\nPlease be noted that we highly suggest one to start with a\nsmall photon number to avoid extended run time.\n" +msgstr "PhotonNum\n\n这定义了总模拟光子数。\n\n可以是整数或科学计数法形式的数字。例如100000和1e5都是可接受的。\n\n请注意,我们强烈建议从较小的光子数开始以避免延长运行时间。\n" #: tfmmcx.edphoton.text msgid "1e6" -msgstr "" +msgstr "1e6" #: tfmmcx.edphoton.texthint msgid "Integer" msgstr "整数" #: tfmmcx.edremote.hint -msgid "" -"RemoteCmd \n" -"\n" -"Please choose the remote connection command using the dropdown list, or\n" -"type in this field manually. For windows, it is recommended to choose the \n" -"plink.exe command; for Linux, it is recommended to use the ssh command.\n" -"\n" -"Please replace the user@server by the actual username and the server IP\n" -"or domain name.\n" -"\n" -"You are highly recommended to set up key-based ssh access to avoid typing\n" -"password. Tutorials can be found at http://www.linuxproblem.org/art_9.html\n" -msgstr "" -"RemoteCmd \n" -"\n" -"请使用下拉列表选择远程连接命令,或\n" -"手动在此键入。\n" +msgid "RemoteCmd \n\nPlease choose the remote connection command using the dropdown list, or\ntype in this field manually. For windows, it is recommended to choose the \nplink.exe command; for Linux, it is recommended to use the ssh command.\n\nPlease replace the user@server by the actual username and the server IP\nor domain name.\n\nYou are highly recommended to set up key-based ssh access to avoid typing\npassword. Tutorials can be found at http://www.linuxproblem.org/art_9.html\n" +msgstr "RemoteCmd\n\n请使用下拉列表选择远程连接命令,或在此字段中手动输入。对于Windows,建议选择plink.exe命令;对于Linux,建议使用ssh命令。\n\n请将user@server替换为实际的用户名和服务器IP或域名。\n\n强烈建议设置基于密钥的ssh访问以避免输入密码。教程可在http://www.linuxproblem.org/art_9.html找到。\n" #: tfmmcx.edremote.text msgid "Built-in ssh" @@ -845,172 +493,79 @@ msgstr "内置ssh" #: tfmmcx.edreplaydet.hint msgctxt "tfmmcx.edreplaydet.hint" msgid "ReplayDet" -msgstr "" +msgstr "ReplayDet" #: tfmmcx.edrespin.hint -msgid "" -"RespinNum \n" -"\n" -"Setting this to a positive number will repeat the simulation by the specified\n" -"repeition count starting from different random seeds.\n" -"\n" -"A negative integer asks MCX to divide the total photon number by the \n" -"absolute value of this input and run each subpart at a time. This can \n" -"reduce the per-call run time, but may result in extensive overhead of\n" -"running repeated simulations.\n" -msgstr "" -"RespinNum \n" -"\n" -"将其设置为正数将从不同的随机种子开始按指定的\n" -"重复计数重复模拟。\n" -"\n" -"负整数要求 MCX 将总光子数除以该输入的\n" -"绝对值\n" +msgid "RespinNum \n\nSetting this to a positive number will repeat the simulation by the specified\nrepeition count starting from different random seeds.\n\nA negative integer asks MCX to divide the total photon number by the \nabsolute value of this input and run each subpart at a time. This can \nreduce the per-call run time, but may result in extensive overhead of\nrunning repeated simulations.\n" +msgstr "RespinNum\n\n将此设置为正数将从不同的随机种子开始重复指定重复次数的模拟。\n\n负整数要求MCX将总光子数除以此输入的绝对值并一次运行每个子部分。这可以减少每次调用的运行时间,但可能导致运行重复模拟的大量开销。\n" #: tfmmcx.edseed.hint -msgid "" -"Seed \n" -"\n" -"If this field is a large integer number, this specifies the RNG seed; \n" -"\n" -"if this is a file name ending with .mch, it loads an .mch file generated \n" -"from previous simulation and replays the detected photons.\n" -msgstr "" -"Seed \n" -"\n" -"如果该字段是一个大整数,则指定 RNG 种子; \n" +msgid "Seed \n\nIf this field is a large integer number, this specifies the RNG seed; \n\nif this is a file name ending with .mch, it loads an .mch file generated \nfrom previous simulation and replays the detected photons.\n" +msgstr "Seed\n\n如果此字段是一个大整数,这指定RNG种子;\n\n如果这是以.mch结尾的文件名,它加载从先前模拟生成的.mch文件并重放检测到的光子。\n" #: tfmmcx.edseed.text msgid "1648335518" -msgstr "" +msgstr "1648335518" #: tfmmcx.edseed.texthint msgid "A large integer or .mch file name" -msgstr "一个大整数或.mch文件名" +msgstr "大整数或.mch文件名" #: tfmmcx.edsession.hint -msgid "" -"Session \n" -"\n" -"This string will be used in all output files as part of the file names.\n" -msgstr "" -"Session \n" -"\n" -"该字符串将作为所有输出文件名的一部分。\n" +msgid "Session \n\nThis string will be used in all output files as part of the file names.\n" +msgstr "Session\n\n此字符串将用作所有输出文件文件名的一部分。\n" #: tfmmcx.edthread.hint -msgid "" -"ThreadNum \n" -"\n" -"Specify a large integer multiple of 32 (the warp size) to manually \n" -"define the thread numbers.\n" -"\n" -"This is only used when the -A (autopilot mode) is not enabled.\n" -msgstr "" -"ThreadNum \n" -"\n" -"必须为 32 的倍数,用于\n" -"定义线程数。\n" -"\n" -"仅在未开启 -A(自动驾驶模式)时使用。\n" +msgid "ThreadNum \n\nSpecify a large integer multiple of 32 (the warp size) to manually \ndefine the thread numbers.\n\nThis is only used when the -A (autopilot mode) is not enabled.\n" +msgstr "ThreadNum\n\n指定32(warp大小)的大整数倍数以手动定义线程数。\n\n这仅在未启用-A(自动驾驶模式)时使用。\n" #: tfmmcx.edthread.text msgid "16384" -msgstr "" +msgstr "16384" #: tfmmcx.edunitinmm.hint -msgid "" -"UnitInMM \n" -"\n" -"This defines the voxel size. By default, 1x1x1 mm^3 voxels\n" -"are used. Has to be a positive floating point number. For example,\n" -"0.1 defines a 0.1x0.1x0.1 mm^3 voxel.\n" -"\n" -"Currently, only isotropic voxels are supported.\n" -msgstr "" -"UnitInMM \n" -"\n" -"以毫米为单位的体素大小。\n" +msgid "UnitInMM \n\nThis defines the voxel size. By default, 1x1x1 mm^3 voxels\nare used. Has to be a positive floating point number. For example,\n0.1 defines a 0.1x0.1x0.1 mm^3 voxel.\n\nCurrently, only isotropic voxels are supported.\n" +msgstr "UnitInMM\n\n这定义体素大小。默认使用1x1x1 mm^3体素。必须是正浮点数。例如,0.1定义一个0.1x0.1x0.1 mm^3的体素。\n\n目前只支持各向同性体素。\n" #: tfmmcx.edunitinmm.text msgid "1" -msgstr "" +msgstr "1" #: tfmmcx.edworkload.hint -msgid "" -"Workload \n" -"\n" -"One can specify a series of comma-separated numbers to specify the\n" -"relative portion of workload between multiple selected devices. \n" -"\n" -"For example: 10,10 asks MCX to run 50% of the total photons using the\n" -"1st device and 50% on the 2nd device. On the other hand, 10,100 splits\n" -"the total photon 1:10 between the 1st and 2nd devices.\n" -msgstr "" -"工作负载\n" -"\n" -"可以指定一系列逗号分隔的数字来指定\n" -"多个选定设备之间工作负载的相对部分。 \n" +msgid "Workload \n\nOne can specify a series of comma-separated numbers to specify the\nrelative portion of workload between multiple selected devices. \n\nFor example: 10,10 asks MCX to run 50% of the total photons using the\n1st device and 50% on the 2nd device. On the other hand, 10,100 splits\nthe total photon 1:10 between the 1st and 2nd devices.\n" +msgstr "Workload\n\n可以指定一系列逗号分隔的数字来指定多个选定设备之间工作负载的相对比例。\n\n例如:10,10要求MCX使用第1个设备运行50%的总光子,在第2个设备上运行50%。另一方面,10,100将总光子在第1和第2设备之间按1:10分割。\n" #: tfmmcx.edworkload.text msgid "100" -msgstr "" +msgstr "100" #: tfmmcx.edworkload.texthint msgid "Comma separated numbers" -msgstr "以逗号分隔的数字" +msgstr "逗号分隔的数字" #: tfmmcx.gradvsettings.caption msgid "Advanced Settings" -msgstr "高级选项" +msgstr "高级设置" #: tfmmcx.grarray.hint -msgid "" -"ArrayOrder \n" -"\n" -"Select MATLAB array order indicates that the input volume has a\n" -"column-major order - i.e. the left-most axis is the fastest index of\n" -"the array, like in MATLAB or FORTRAN.\n" -"\n" -"Select C array order indicates that the input volume uses the \n" -"row-major order - i.e. the right-most index is the fastest index\n" -"of the array, like in C and Python.\n" -msgstr "" -"ArrayOrder \n" -"\n" -"选择 MATLAB 数组顺序表示输入量具有列主序 - 即最左边的轴是数组的最快索引,\n" -"就像在 MATLAB 或 FORTRAN 中一样。\n" -"\n" -"选择 C ​​数组\n" +msgid "ArrayOrder \n\nSelect MATLAB array order indicates that the input volume has a\ncolumn-major order - i.e. the left-most axis is the fastest index of\nthe array, like in MATLAB or FORTRAN.\n\nSelect C array order indicates that the input volume uses the \nrow-major order - i.e. the right-most index is the fastest index\nof the array, like in C and Python.\n" +msgstr "ArrayOrder\n\n选择MATLAB数组顺序表示输入体积具有列主序 - 即最左轴是数组的最快索引,如MATLAB或FORTRAN。\n\n选择C数组顺序表示输入体积使用行主序 - 即最右索引是数组的最快索引,如C和Python。\n" #: tfmmcx.gratomic.hint -msgid "" -"UseAtomic \n" -"\n" -"Using atomic operations avoids conflicts between multiple threads when\n" -"writing to the same voxel, thus is highly recommended.\n" -"\n" -"In the very old CUDA hardware, using atomic operations has a high \n" -"overhead, but such overhead was signficiantly less since the Fermi GPU.\n" -msgstr "" -"UseAtomic \n" -"\n" -"使用原子操作可以避免写入同一体素时多个线程之间的冲突,因此强烈推荐。\n" -"\n" -"在非常旧的 CUDA 硬件中,使用原子操作具有较高的\n" -"开销,但这样的开销是\n" +msgid "UseAtomic \n\nUsing atomic operations avoids conflicts between multiple threads when\nwriting to the same voxel, thus is highly recommended.\n\nIn the very old CUDA hardware, using atomic operations has a high \noverhead, but such overhead was signficiantly less since the Fermi GPU.\n" +msgstr "UseAtomic\n\n使用原子操作避免多个线程写入相同体素时的冲突,因此强烈推荐。\n\n在非常老的CUDA硬件中,使用原子操作有很高的开销,但从Fermi GPU开始这种开销显著减少。\n" #: tfmmcx.grbasic.caption msgid "Basic Settings" -msgstr "基本选项" +msgstr "基本设置" #: tfmmcx.grbc.caption msgid "Boundary cond." -msgstr "边界条件." +msgstr "边界条件" #: tfmmcx.grdet.caption msgid "Save detected photon" -msgstr "保存检测的光子" +msgstr "保存检测到的光子" #: tfmmcx.grgpu.caption msgid "GPU Settings" @@ -1019,25 +574,11 @@ msgstr "GPU设置" #: tfmmcx.grprogram.caption msgctxt "tfmmcx.grprogram.caption" msgid "Run Monte Carlo simulation with" -msgstr "仿真程序" +msgstr "运行蒙特卡罗模拟使用" #: tfmmcx.grprogram.hint -msgid "" -"MCProgram\n" -"\n" -"In this panel, you choose which simulator to use. \n" -"Currently we support 3 simulators, \n" -"\n" -"* MCX: NVIDIA GPU-based simulation using voxelated domain\n" -"* MCX-CL: OpenCL based CPU/GPU simulation using voxelated domain\n" -"* MMC: OpenCL based CPU/GPU simulation using tetrahedral meshes\n" -"\n" -"The built-in domain designer only supports creating voxelated \n" -"domains and creating meshes will be supported in the future.\n" -msgstr "" -"MCProgram\n" -"\n" -"在此面板中,您可以选择要使用的仿真器。 \n" +msgid "MCProgram\n\nIn this panel, you choose which simulator to use. \nCurrently we support 3 simulators, \n\n* MCX: NVIDIA GPU-based simulation using voxelated domain\n* MCX-CL: OpenCL based CPU/GPU simulation using voxelated domain\n* MMC: OpenCL based CPU/GPU simulation using tetrahedral meshes\n\nThe built-in domain designer only supports creating voxelated \ndomains and creating meshes will be supported in the future.\n" +msgstr "MCProgram\n\n在此面板中,选择要使用的模拟器。\n目前我们支持3种模拟器:\n\n* MCX:使用体素化域的NVIDIA GPU模拟\n* MCX-CL:使用体素化域的基于OpenCL的CPU/GPU模拟\n* MMC:使用四面体网格的基于OpenCL的CPU/GPU模拟\n\n内置域设计器只支持创建体素化域,将来会支持创建网格。\n" #: tfmmcx.grswitches.caption msgid "Switches" @@ -1046,15 +587,15 @@ msgstr "开关" #: tfmmcx.image1.hint msgctxt "tfmmcx.image1.hint" msgid "About MCX" -msgstr "关于 MCX" +msgstr "关于MCX" #: tfmmcx.label1.caption msgid "Thread number (-t)" -msgstr "线程数(-t)" +msgstr "线程数 (-t)" #: tfmmcx.label1.hint msgid "-t (--thread)" -msgstr "" +msgstr "-t (--thread)" #: tfmmcx.label10.caption msgctxt "tfmmcx.label10.caption" @@ -1064,7 +605,7 @@ msgstr "或" #: tfmmcx.label10.hint msgctxt "tfmmcx.label10.hint" msgid "-a (--array)" -msgstr "" +msgstr "-a (--array)" #: tfmmcx.label11.caption msgid "Output format" @@ -1073,39 +614,39 @@ msgstr "输出格式" #: tfmmcx.label11.hint msgctxt "tfmmcx.label11.hint" msgid "-u (--unitinmm)" -msgstr "" +msgstr "-u (--unitinmm)" #: tfmmcx.label12.caption msgid "Run MCX on" -msgstr "选择 GPU" +msgstr "在以下设备运行MCX" #: tfmmcx.label12.hint msgid "-G (--gpu)" -msgstr "" +msgstr "-G (--gpu)" #: tfmmcx.label13.caption msgid "Seed (-E)" -msgstr "随机数种子(-E)" +msgstr "种子 (-E)" #: tfmmcx.label13.hint msgid "-E (--seed)" -msgstr "" +msgstr "-E (--seed)" #: tfmmcx.label14.caption msgid "Output type (-O)" -msgstr "输出类型(-O)" +msgstr "输出类型 (-O)" #: tfmmcx.label14.hint msgid "-O (--outputtype)" -msgstr "" +msgstr "-O (--outputtype)" #: tfmmcx.label15.caption msgid "Workload split" -msgstr "光子分配" +msgstr "工作负载分配" #: tfmmcx.label15.hint msgid "-W (--workload)" -msgstr "" +msgstr "-W (--workload)" #: tfmmcx.label16.caption msgid "Debug flags" @@ -1113,16 +654,16 @@ msgstr "调试标志" #: tfmmcx.label16.hint msgid "-D (--debuglevel)" -msgstr "" +msgstr "-D (--debuglevel)" #: tfmmcx.label17.caption msgid "Replay detector ID (-Y)" -msgstr "重播特定探测器ID (-Y)" +msgstr "重放检测器ID (-Y)" #: tfmmcx.label17.hint msgctxt "tfmmcx.label17.hint" msgid "-Y (--replaydet)" -msgstr "" +msgstr "-Y (--replaydet)" #: tfmmcx.label18.caption msgid "Additional parameters" @@ -1131,7 +672,7 @@ msgstr "附加参数" #: tfmmcx.label18.hint msgctxt "tfmmcx.label18.hint" msgid "-Y (--replaydet)" -msgstr "" +msgstr "-Y (--replaydet)" #: tfmmcx.label19.caption msgctxt "tfmmcx.label19.caption" @@ -1141,32 +682,32 @@ msgstr "或" #: tfmmcx.label19.hint msgctxt "tfmmcx.label19.hint" msgid "-a (--array)" -msgstr "" +msgstr "-a (--array)" #: tfmmcx.label2.caption msgid "Thread block size (-T)" -msgstr "线程块大小(-T)" +msgstr "线程块大小 (-T)" #: tfmmcx.label2.hint msgid "-T (--blocksize)" -msgstr "" +msgstr "-T (--blocksize)" #: tfmmcx.label3.caption msgid "Total photon number (-n)" -msgstr "总光子数(-n)" +msgstr "总光子数 (-n)" #: tfmmcx.label3.hint msgid "-n (--photon)" -msgstr "" +msgstr "-n (--photon)" #: tfmmcx.label4.caption msgid "Session ID (-s)" -msgstr "仿真名称 (-s)" +msgstr "会话ID (-s)" #: tfmmcx.label4.hint msgctxt "tfmmcx.label4.hint" msgid "-s (--sessionid)" -msgstr "" +msgstr "-s (--sessionid)" #: tfmmcx.label5.caption msgid "User Input>" @@ -1179,24 +720,24 @@ msgstr "数组顺序 (-a)" #: tfmmcx.label6.hint msgctxt "tfmmcx.label6.hint" msgid "-a (--array)" -msgstr "" +msgstr "-a (--array)" #: tfmmcx.label7.caption msgid "Gate group size (-g)" -msgstr "同时模拟时间窗数量(-g)" +msgstr "门组大小 (-g)" #: tfmmcx.label7.hint msgid "-g (--gategroup)" -msgstr "" +msgstr "-g (--gategroup)" #: tfmmcx.label8.caption msgid "Voxel size in mm (-u)" -msgstr "体素尺寸,毫米 (-u)" +msgstr "体素大小(毫米)(-u)" #: tfmmcx.label8.hint msgctxt "tfmmcx.label8.hint" msgid "-u (--unitinmm)" -msgstr "" +msgstr "-u (--unitinmm)" #: tfmmcx.label9.caption msgid "Max detected photons(-H)" @@ -1204,7 +745,7 @@ msgstr "最大检测光子数(-H)" #: tfmmcx.label9.hint msgid "-H (--maxdetphoton)" -msgstr "" +msgstr "-H (--maxdetphoton)" #: tfmmcx.lbatomic.caption msgid "Atomic operations" @@ -1212,209 +753,209 @@ msgstr "原子操作" #: tfmmcx.lbatomic.hint msgid "(--atomic)" -msgstr "" +msgstr "(--atomic)" #: tfmmcx.lbbubble.caption msgid "Cache radius from src (-R)" -msgstr "源周围缓存半径 (-R)" +msgstr "从源的缓存半径 (-R)" #: tfmmcx.lbbubble.hint msgid "-r (--skipradius)" -msgstr "" +msgstr "-r (--skipradius)" #: tfmmcx.lbrespin.caption msgid "Repetition (-r)" -msgstr "重复模拟数 (-r)" +msgstr "重复 (-r)" #: tfmmcx.lbrespin.hint msgid "-r (--repeat)" -msgstr "" +msgstr "-r (--repeat)" #: tfmmcx.lvjobs.columns[0].caption msgctxt "tfmmcx.lvjobs.columns[0].caption" msgid "Session" -msgstr "仿真名称" +msgstr "会话" #: tfmmcx.lvjobs.columns[10].caption msgid "DoSave" -msgstr "" +msgstr "DoSave" #: tfmmcx.lvjobs.columns[11].caption msgid "DoNormalize" -msgstr "" +msgstr "DoNormalize" #: tfmmcx.lvjobs.columns[12].caption msgid "Autopilot" -msgstr "" +msgstr "Autopilot" #: tfmmcx.lvjobs.columns[13].caption msgid "SaveDetector" -msgstr "" +msgstr "SaveDetector" #: tfmmcx.lvjobs.columns[14].caption msgid "DetectedNum" -msgstr "" +msgstr "DetectedNum" #: tfmmcx.lvjobs.columns[15].caption msgid "GPUID" -msgstr "" +msgstr "GPUID" #: tfmmcx.lvjobs.columns[16].caption msgid "UnitInMM" -msgstr "" +msgstr "UnitInMM" #: tfmmcx.lvjobs.columns[17].caption msgid "DoSaveRef" -msgstr "" +msgstr "DoSaveRef" #: tfmmcx.lvjobs.columns[18].caption msgid "DoSaveSeed" -msgstr "" +msgstr "DoSaveSeed" #: tfmmcx.lvjobs.columns[19].caption msgid "DoSkipVoid" -msgstr "" +msgstr "DoSkipVoid" #: tfmmcx.lvjobs.columns[1].caption msgid "InputFile" -msgstr "" +msgstr "InputFile" #: tfmmcx.lvjobs.columns[20].caption msgid "DoSrcFrom0" -msgstr "" +msgstr "DoSrcFrom0" #: tfmmcx.lvjobs.columns[21].caption msgid "MediaCfg" -msgstr "" +msgstr "MediaCfg" #: tfmmcx.lvjobs.columns[22].caption msgid "DetectorCfg" -msgstr "" +msgstr "DetectorCfg" #: tfmmcx.lvjobs.columns[23].caption msgid "MCXConfig" -msgstr "" +msgstr "MCXConfig" #: tfmmcx.lvjobs.columns[24].caption msgid "Workload" -msgstr "" +msgstr "Workload" #: tfmmcx.lvjobs.columns[25].caption msgctxt "tfmmcx.lvjobs.columns[25].caption" msgid "ShapeCfg" -msgstr "" +msgstr "ShapeCfg" #: tfmmcx.lvjobs.columns[26].caption msgid "Seed" -msgstr "" +msgstr "Seed" #: tfmmcx.lvjobs.columns[27].caption msgid "DoSaveMask" -msgstr "" +msgstr "DoSaveMask" #: tfmmcx.lvjobs.columns[28].caption msgctxt "tfmmcx.lvjobs.columns[28].caption" msgid "DebugFlags" -msgstr "" +msgstr "DebugFlags" #: tfmmcx.lvjobs.columns[29].caption msgctxt "tfmmcx.lvjobs.columns[29].caption" msgid "ReplayDet" -msgstr "" +msgstr "ReplayDet" #: tfmmcx.lvjobs.columns[2].caption msgid "ThreadNum" -msgstr "" +msgstr "ThreadNum" #: tfmmcx.lvjobs.columns[30].caption msgid "DoReplay" -msgstr "" +msgstr "DoReplay" #: tfmmcx.lvjobs.columns[31].caption msgid "MCProgram" -msgstr "" +msgstr "MCProgram" #: tfmmcx.lvjobs.columns[32].caption msgid "DoSpecular" -msgstr "" +msgstr "DoSpecular" #: tfmmcx.lvjobs.columns[33].caption msgid "UseAtomic" -msgstr "" +msgstr "UseAtomic" #: tfmmcx.lvjobs.columns[34].caption msgid "BasicOrder" -msgstr "" +msgstr "BasicOrder" #: tfmmcx.lvjobs.columns[35].caption msgid "DebugPhoton" -msgstr "" +msgstr "DebugPhoton" #: tfmmcx.lvjobs.columns[36].caption msgid "MoreParam" -msgstr "" +msgstr "MoreParam" #: tfmmcx.lvjobs.columns[37].caption msgid "RemoteCmd" -msgstr "" +msgstr "RemoteCmd" #: tfmmcx.lvjobs.columns[38].caption msgid "DoRemote" -msgstr "" +msgstr "DoRemote" #: tfmmcx.lvjobs.columns[39].caption msgid "DoSharedFS" -msgstr "" +msgstr "DoSharedFS" #: tfmmcx.lvjobs.columns[3].caption msgid "ThreadBlock" -msgstr "" +msgstr "ThreadBlock" #: tfmmcx.lvjobs.columns[40].caption msgid "OutputFormat" -msgstr "" +msgstr "OutputFormat" #: tfmmcx.lvjobs.columns[41].caption msgid "OutputType" -msgstr "" +msgstr "OutputType" #: tfmmcx.lvjobs.columns[42].caption msgid "Boundary" -msgstr "" +msgstr "Boundary" #: tfmmcx.lvjobs.columns[43].caption msgid "SaveDetFlag" -msgstr "" +msgstr "SaveDetFlag" #: tfmmcx.lvjobs.columns[44].caption msgid "Benchmark" -msgstr "" +msgstr "Benchmark" #: tfmmcx.lvjobs.columns[4].caption msgid "PhotonNum" -msgstr "" +msgstr "PhotonNum" #: tfmmcx.lvjobs.columns[5].caption msgid "RespinNum" -msgstr "" +msgstr "RespinNum" #: tfmmcx.lvjobs.columns[6].caption msgid "ArrayOrder" -msgstr "" +msgstr "ArrayOrder" #: tfmmcx.lvjobs.columns[7].caption msgctxt "tfmmcx.lvjobs.columns[7].caption" msgid "BubbleSize" -msgstr "" +msgstr "BubbleSize" #: tfmmcx.lvjobs.columns[8].caption msgctxt "tfmmcx.lvjobs.columns[8].caption" msgid "GateNum" -msgstr "" +msgstr "GateNum" #: tfmmcx.lvjobs.columns[9].caption msgid "DoReflect" -msgstr "" +msgstr "DoReflect" #: tfmmcx.mcxdoabout.caption msgid "About" @@ -1434,7 +975,7 @@ msgstr "添加新任务" #: tfmmcx.mcxdoconfig.caption msgid "Setting" -msgstr "设定" +msgstr "设置" #: tfmmcx.mcxdoconfig.hint msgid "Modify default paths" @@ -1442,7 +983,7 @@ msgstr "修改默认路径" #: tfmmcx.mcxdocopy.caption msgid "Copy session to clipboard" -msgstr "将仿真复制到剪贴板" +msgstr "复制会话到剪贴板" #: tfmmcx.mcxdodefault.caption msgid "Default" @@ -1459,28 +1000,28 @@ msgstr "删除" #: tfmmcx.mcxdodeleteitem.hint msgid "Delete selected task" -msgstr "删除选定的任务" +msgstr "删除选定任务" #: tfmmcx.mcxdodownloadmask.caption msgid "Download volume labels (*_vol.nii)" -msgstr "下载体文件 (*_vol.nii)" +msgstr "下载体积标签 (*_vol.nii)" #: tfmmcx.mcxdodownloadmask.hint msgctxt "tfmmcx.mcxdodownloadmask.hint" msgid "_vol.nii" -msgstr "" +msgstr "_vol.nii" #: tfmmcx.mcxdodownloadmc2.caption msgid "Download fluence" -msgstr "下载光分布输出" +msgstr "下载通量" #: tfmmcx.mcxdodownloadmch.caption msgid "Download detected photon data (*.mch)" -msgstr "下载检测光子数据(*.mch)" +msgstr "下载检测光子数据 (*.mch)" #: tfmmcx.mcxdodownloadmch.hint msgid ".mch" -msgstr "" +msgstr ".mch" #: tfmmcx.mcxdoexit.caption msgctxt "tfmmcx.mcxdoexit.caption" @@ -1507,7 +1048,7 @@ msgstr "选项" #: tfmmcx.mcxdohelpoptions.hint msgid "List command line options" -msgstr "打印命令行选项" +msgstr "列出命令行选项" #: tfmmcx.mcxdoopen.caption msgid "Open" @@ -1515,56 +1056,56 @@ msgstr "打开" #: tfmmcx.mcxdoopen.hint msgid "Open a project or volume file" -msgstr "打开项目或体文件" +msgstr "打开项目或体积文件" #: tfmmcx.mcxdopaste.caption msgid "Paste session from clipboard" -msgstr "从剪贴板创建新仿真" +msgstr "从剪贴板粘贴会话" #: tfmmcx.mcxdoplotjnifti.caption msgid "Plot fluence (jnii)" -msgstr "绘制光分布(jnii)" +msgstr "绘制通量 (jnii)" #: tfmmcx.mcxdoplotjnifti.hint msgid ".jnii" -msgstr "" +msgstr ".jnii" #: tfmmcx.mcxdoplotmc2.caption msgid "Plot fluence (mc2)" -msgstr "绘制光分布(mc2)" +msgstr "绘制通量 (mc2)" #: tfmmcx.mcxdoplotmc2.hint msgid ".mc2" -msgstr "" +msgstr ".mc2" #: tfmmcx.mcxdoplotmesh.caption msgid "Plot mesh" -msgstr "绘图网格" +msgstr "绘制网格" #: tfmmcx.mcxdoplotnifty.caption msgid "Plot fluence (nii)" -msgstr "绘制光分布(nii)" +msgstr "绘制通量 (nii)" #: tfmmcx.mcxdoplotnifty.hint msgid ".nii" -msgstr "nii" +msgstr ".nii" #: tfmmcx.mcxdoplotvol.caption msgid "Plot Volume" -msgstr "绘制体数据" +msgstr "绘制体积" #: tfmmcx.mcxdoplotvol.hint msgctxt "tfmmcx.mcxdoplotvol.hint" msgid "_vol.nii" -msgstr "" +msgstr "_vol.nii" #: tfmmcx.mcxdoquery.caption msgid "GPU" -msgstr "" +msgstr "GPU" #: tfmmcx.mcxdoquery.hint msgid "List GPU Info" -msgstr "GPU 信息" +msgstr "列出GPU信息" #: tfmmcx.mcxdorun.caption msgctxt "tfmmcx.mcxdorun.caption" @@ -1573,11 +1114,11 @@ msgstr "运行" #: tfmmcx.mcxdorun.hint msgid "Run selected task" -msgstr "运行选定的任务" +msgstr "运行选定任务" #: tfmmcx.mcxdorunall.caption msgid "Run All" -msgstr "运行全部" +msgstr "全部运行" #: tfmmcx.mcxdorunall.hint msgid "Run all tasks" @@ -1597,7 +1138,7 @@ msgstr "停止" #: tfmmcx.mcxdostop.hint msgid "Terminate current task" -msgstr "终止当前仿真" +msgstr "终止当前任务" #: tfmmcx.mcxdotoggleview.caption msgid "Toggle View" @@ -1613,7 +1154,7 @@ msgstr "验证参数" #: tfmmcx.mcxdoweb.caption msgid "Web" -msgstr "网络资源" +msgstr "网页" #: tfmmcx.mcxdoweb.hint msgid "MCX homepage" @@ -1621,7 +1162,7 @@ msgstr "MCX主页" #: tfmmcx.mcxsetcurrent.caption msgid "mcxSetCurrent" -msgstr "" +msgstr "mcxSetCurrent" #: tfmmcx.menuitem1.caption msgid "File" @@ -1642,11 +1183,11 @@ msgstr "打开输出文件夹" #: tfmmcx.menuitem24.caption msgid "Plot volume (_vol.nii)" -msgstr "绘制体数据(_vol.nii)" +msgstr "绘制体积 (_vol.nii)" #: tfmmcx.menuitem28.caption msgid "Download fluence (mc2/nii/hdr/img)" -msgstr "下载光分布(mc2/nii/hdr/img)" +msgstr "下载通量 (mc2/nii/hdr/img)" #: tfmmcx.menuitem3.caption msgid "Tools" @@ -1654,43 +1195,43 @@ msgstr "工具" #: tfmmcx.menuitem31.caption msgid "Download detected photon data (mch)" -msgstr "下载检测光子数据(mch)" +msgstr "下载检测光子数据 (mch)" #: tfmmcx.menuitem32.caption msgid "Download volume mask (_vol.nii)" -msgstr "下载输入体数据(_vol.nii)" +msgstr "下载体积掩模 (_vol.nii)" #: tfmmcx.menuitem35.caption msgid "MCX Documentation" -msgstr "MCX 文档" +msgstr "MCX文档" #: tfmmcx.menuitem35.hint msgid "https://mcx.space/wiki/?Learn#mcx" -msgstr "" +msgstr "https://mcx.space/wiki/?Learn#mcx" #: tfmmcx.menuitem36.caption msgid "MMC Documentation" -msgstr "MMC 在线文档" +msgstr "MMC文档" #: tfmmcx.menuitem36.hint msgid "https://mcx.space/wiki/?Learn#mmc" -msgstr "" +msgstr "https://mcx.space/wiki/?Learn#mmc" #: tfmmcx.menuitem37.caption msgid "MCX-CL Documentation" -msgstr "MCX-CL 在线文档" +msgstr "MCX-CL文档" #: tfmmcx.menuitem37.hint msgid "https://mcx.space/wiki/?Learn#mcxcl" -msgstr "" +msgstr "https://mcx.space/wiki/?Learn#mcxcl" #: tfmmcx.menuitem39.caption msgid "MCX/MCXCL User Forum (mcx-users)" -msgstr "MCX/MCXCL 用户论坛" +msgstr "MCX/MCXCL用户论坛 (mcx-users)" #: tfmmcx.menuitem39.hint msgid "https://groups.google.com/forum/?hl=en#!forum/mcx-users" -msgstr "" +msgstr "https://groups.google.com/forum/?hl=en#!forum/mcx-users" #: tfmmcx.menuitem4.caption msgctxt "tfmmcx.menuitem4.caption" @@ -1699,212 +1240,212 @@ msgstr "帮助" #: tfmmcx.menuitem40.caption msgid "MMC User Forum (mmc-users)" -msgstr "MMC 用户论坛" +msgstr "MMC用户论坛 (mmc-users)" #: tfmmcx.menuitem40.hint msgid "https://groups.google.com/forum/?hl=en#!forum/mmc-users" -msgstr "" +msgstr "https://groups.google.com/forum/?hl=en#!forum/mmc-users" #: tfmmcx.menuitem41.caption msgid "Iso2Mesh User Forum (iso2mesh-users)" -msgstr "Iso2Mesh 用户论坛" +msgstr "Iso2Mesh用户论坛 (iso2mesh-users)" #: tfmmcx.menuitem41.hint msgid "https://groups.google.com/forum/?hl=en#!forum/iso2mesh-users" -msgstr "" +msgstr "https://groups.google.com/forum/?hl=en#!forum/iso2mesh-users" #: tfmmcx.menuitem43.caption msgid "Download Nightly-Build" -msgstr "下载每日更新版" +msgstr "下载夜间构建" #: tfmmcx.menuitem43.hint msgid "https://mcx.space/nightly/" -msgstr "" +msgstr "https://mcx.space/nightly/" #: tfmmcx.menuitem45.caption msgid "MCX Github" -msgstr "" +msgstr "MCX Github" #: tfmmcx.menuitem45.hint msgid "https://github.com/fangq/mcx" -msgstr "" +msgstr "https://github.com/fangq/mcx" #: tfmmcx.menuitem46.caption msgid "MMC Github" -msgstr "" +msgstr "MMC Github" #: tfmmcx.menuitem46.hint msgid "https://github.com/fangq/mmc" -msgstr "" +msgstr "https://github.com/fangq/mmc" #: tfmmcx.menuitem47.caption msgid "MCX-CL Github" -msgstr "" +msgstr "MCX-CL Github" #: tfmmcx.menuitem47.hint msgid "https://github.com/fangq/mcxcl" -msgstr "" +msgstr "https://github.com/fangq/mcxcl" #: tfmmcx.menuitem49.caption msgid "Report MCX Issues" -msgstr "MCX 问题反馈" +msgstr "报告MCX问题" #: tfmmcx.menuitem49.hint msgid "https://github.com/fangq/mcx/issues" -msgstr "" +msgstr "https://github.com/fangq/mcx/issues" #: tfmmcx.menuitem50.caption msgid "Report MMC Issues" -msgstr "MMC 问题反馈" +msgstr "报告MMC问题" #: tfmmcx.menuitem50.hint msgid "https://github.com/fangq/mmc/issues" -msgstr "" +msgstr "https://github.com/fangq/mmc/issues" #: tfmmcx.menuitem51.caption msgid "Report MCX-CL Issues" -msgstr "MCX-CL 问题反馈" +msgstr "报告MCX-CL问题" #: tfmmcx.menuitem51.hint msgid "https://github.com/fangq/mcxcl/issues" -msgstr "" +msgstr "https://github.com/fangq/mcxcl/issues" #: tfmmcx.menuitem53.caption msgid "MCX GPU Speed Benchmark Database" -msgstr "MCX GPU 数据库" +msgstr "MCX GPU速度基准数据库" #: tfmmcx.menuitem53.hint msgid "https://mcx.space/gpubench/" -msgstr "" +msgstr "https://mcx.space/gpubench/" #: tfmmcx.menuitem55.caption msgid "Refereces" -msgstr "参考文章" +msgstr "参考文献" #: tfmmcx.menuitem56.caption msgid "[Fang2009] Original MCX Paper" -msgstr "" +msgstr "[Fang2009] 原始MCX论文" #: tfmmcx.menuitem56.hint msgid "http://www.osapublishing.org/oe/abstract.cfm?uri=oe-17-22-20178" -msgstr "" +msgstr "http://www.osapublishing.org/oe/abstract.cfm?uri=oe-17-22-20178" #: tfmmcx.menuitem57.caption msgid "[Fang2010] Original MMC Paper" -msgstr "" +msgstr "[Fang2010] 原始MMC论文" #: tfmmcx.menuitem57.hint msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-1-1-165" -msgstr "" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-1-1-165" #: tfmmcx.menuitem58.caption msgid "[Yu2018] Original MCX-CL Paper" -msgstr "" +msgstr "[Yu2018] 原始MCX-CL论文" #: tfmmcx.menuitem58.hint msgid "https://www.spiedigitallibrary.org/journals/journal-of-biomedical-optics/volume-23/issue-01/010504/Scalable-and-massively-parallel-Monte-Carlo-photon-transport-simulations-for/10.1117/1.JBO.23.1.010504.full?SSO=1#ArticleLink" -msgstr "" +msgstr "https://www.spiedigitallibrary.org/journals/journal-of-biomedical-optics/volume-23/issue-01/010504/Scalable-and-massively-parallel-Monte-Carlo-photon-transport-simulations-for/10.1117/1.JBO.23.1.010504.full?SSO=1#ArticleLink" #: tfmmcx.menuitem59.caption msgid "[Fang2011] MMC ray-tracing comparison" -msgstr "" +msgstr "[Fang2011] MMC射线追踪比较" #: tfmmcx.menuitem59.hint msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-2-5-1258" -msgstr "" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-2-5-1258" #: tfmmcx.menuitem60.caption msgid "[Fang2012] SIMD MMC" -msgstr "" +msgstr "[Fang2012] SIMD MMC" #: tfmmcx.menuitem60.hint msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-3-12-3223" -msgstr "" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-3-12-3223" #: tfmmcx.menuitem61.caption msgid "[Yao2016] Widefield MMC" -msgstr "" +msgstr "[Yao2016] 宽场MMC" #: tfmmcx.menuitem61.hint msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-7-1-171" -msgstr "" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-7-1-171" #: tfmmcx.menuitem62.caption msgid "[Yao2018] Jacobians with photon replay" -msgstr "" +msgstr "[Yao2018] 光子重放雅可比矩阵" #: tfmmcx.menuitem62.hint msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-9-10-4588" -msgstr "" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-9-10-4588" #: tfmmcx.menuitem63.caption msgid "[Yan2019] Dual-grid MMC" -msgstr "" +msgstr "[Yan2019] 双网格MMC" #: tfmmcx.menuitem63.hint msgid "https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fdx.doi.org%2F10.1117%2F1.JBO.24.2.020503&data=02%7C01%7Cq.fang%40northeastern.edu%7Cbb8daa56735543068b9c08d697592492%7Ca8eec281aaa34daeac9b9a398b9215e7%7C0%7C0%7C636862806460866013&sdata=2dWyN3eVPwwymydjXEWIHBfVZI43Fcl5zuZ8wiaJ10k%3D&reserved=0" -msgstr "" +msgstr "https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fdx.doi.org%2F10.1117%2F1.JBO.24.2.020503&data=02%7C01%7Cq.fang%40northeastern.edu%7Cbb8daa56735543068b9c08d697592492%7Ca8eec281aaa34daeac9b9a398b9215e7%7C0%7C0%7C636862806460866013&sdata=2dWyN3eVPwwymydjXEWIHBfVZI43Fcl5zuZ8wiaJ10k%3D&reserved=0" #: tfmmcx.menuitem64.caption msgid "MCX Main Web" -msgstr "MCX 主页" +msgstr "MCX主网站" #: tfmmcx.menuitem66.caption msgid "Table of all input flags" -msgstr "程序支持的所有开关列表" +msgstr "所有输入标志表" #: tfmmcx.menuitem66.hint msgid "http://bit.ly/2K0rG4R " -msgstr "" +msgstr "http://bit.ly/2K0rG4R " #: tfmmcx.menuitem69.caption msgid "[Fang2019] GPU MMC" -msgstr "" +msgstr "[Fang2019] GPU MMC" #: tfmmcx.menuitem69.hint msgid "http://dx.doi.org/10.1117/1.JBO.24.11.115002" -msgstr "" +msgstr "http://dx.doi.org/10.1117/1.JBO.24.11.115002" #: tfmmcx.menuitem70.caption msgid "[Brain2Mesh2020] Brain2Mesh brain meshing toolbox" -msgstr "" +msgstr "[Brain2Mesh2020] Brain2Mesh脑网格化工具箱" #: tfmmcx.menuitem70.hint msgid "https://doi.org/10.1117/1.NPh.7.1.015008" -msgstr "" +msgstr "https://doi.org/10.1117/1.NPh.7.1.015008" #: tfmmcx.menuitem71.caption msgid "[Yuan2020] PBM over lifespan" -msgstr "" +msgstr "[Yuan2020] 生命周期PBM" #: tfmmcx.menuitem71.hint msgid "https://doi.org/10.1117/1.NPh.7.1.015009" -msgstr "" +msgstr "https://doi.org/10.1117/1.NPh.7.1.015009" #: tfmmcx.menuitem72.caption msgid "[Yuan2021] Implicit MMC (iMMC)" -msgstr "[Yuan2021] 隐式 MMC (iMMC)" +msgstr "[Yuan2021] 隐式MMC (iMMC)" #: tfmmcx.menuitem72.hint msgid "https://www.osapublishing.org/boe/fulltext.cfm?uri=boe-12-1-147" -msgstr "" +msgstr "https://www.osapublishing.org/boe/fulltext.cfm?uri=boe-12-1-147" #: tfmmcx.menuitem73.caption msgid "[Yan2020] SVMC hybrid method" -msgstr "[Yan2020]SVMC混合仿真" +msgstr "[Yan2020] SVMC混合方法" #: tfmmcx.menuitem73.hint msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-11-11-6262" -msgstr "" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-11-11-6262" #: tfmmcx.menuitem76.caption msgid "Open Volume Viewer" -msgstr "打开三维数据绘图" +msgstr "打开体积查看器" #: tfmmcx.menuitem9.caption msgctxt "tfmmcx.menuitem9.caption" msgid "Volume Designer" -msgstr "仿真空间" +msgstr "体积设计器" #: tfmmcx.miclearlog.caption msgid "Clear Log" @@ -1912,15 +1453,15 @@ msgstr "清除日志" #: tfmmcx.micopy.caption msgid "Copy selected" -msgstr "复制选定的内容" +msgstr "复制选定" #: tfmmcx.miexportjson.caption msgid "Export self-contained JSON input file" -msgstr "导出独立的 JSON 输入文件" +msgstr "导出独立的JSON输入文件" #: tfmmcx.miusematlab.caption msgid "Print MATLAB plotting commands only" -msgstr "仅打印 MATLAB 绘图命令" +msgstr "仅打印MATLAB绘图命令" #: tfmmcx.openhistoryfile.title msgctxt "tfmmcx.openhistoryfile.title" @@ -1938,19 +1479,19 @@ msgstr "打开光子历史文件 (*.mch)" #: tfmmcx.rbusebench.caption msgid "Built-in" -msgstr "内置仿真" +msgstr "内置" #: tfmmcx.rbusedesigner.caption -msgid "User-defined »" +msgid "User-defined »" msgstr "用户定义 »" #: tfmmcx.rbusefile.caption msgid "Use Input File (-f)" -msgstr "使用输入文件(-f)" +msgstr "使用输入文件 (-f)" #: tfmmcx.saveproject.title msgid "Save project as" -msgstr "将项目另存为" +msgstr "另存项目为" #: tfmmcx.sbinfo.panels[0].text msgid "Status: idle" @@ -1962,75 +1503,32 @@ msgid "Value" msgstr "值" #: tfmmcx.sgconfig.hint -msgid "" -"MCXConfig \n" -"\n" -"This defines the remaining key parameters used in an MCX/MMC\n" -"simulation.\n" -msgstr "" -"MCXConfig \n" -"\n" -"这定义了 MCX/MMC\n" -"仿真中使用的其余关键参数。\n" +msgid "MCXConfig \n\nThis defines the remaining key parameters used in an MCX/MMC\nsimulation.\n" +msgstr "MCXConfig\n\n这定义了MCX/MMC模拟中使用的其余关键参数。\n" #: tfmmcx.sgdet.hint -msgid "" -"DetectorCfg \n" -"\n" -"This table defines all detectors in the domain. \n" -"\n" -"Please note that currently MCX/MMC only supports spherical detectors,\n" -"defined by the [x,y,z] center position and radius (radius).\n" -"\n" -"Please also note that photon detection only happens before a photon is\n" -"terminated, i.e. when it escapes the exterior bounding box or moving from\n" -"a non-zero voxel to a zero voxel. Therefore, a detector's aperature is the\n" -"actual bounding box surface or the surface of the non-zero voxels truncated\n" -"by a sphere centered at [x,y,z] with raidus r.\n" -"\n" -"Detector position is sensitive to the \"Origin from [0 0 0] -z\" flag.\n" -msgstr "" -"DetectorCfg \n" -"\n" -"该表定义了域中的所有检测器。\n" +msgid "DetectorCfg \n\nThis table defines all detectors in the domain. \n\nPlease note that currently MCX/MMC only supports spherical detectors,\ndefined by the [x,y,z] center position and radius (radius).\n\nPlease also note that photon detection only happens before a photon is\nterminated, i.e. when it escapes the exterior bounding box or moving from\na non-zero voxel to a zero voxel. Therefore, a detector's aperature is the\nactual bounding box surface or the surface of the non-zero voxels truncated\nby a sphere centered at [x,y,z] with raidus r.\n\nDetector position is sensitive to the \"Origin from [0 0 0] -z\" flag.\n" +msgstr "DetectorCfg\n\n此表定义域中的所有检测器。\n\n请注意,目前MCX/MMC仅支持球形检测器,由[x,y,z]中心位置和半径定义。\n\n还请注意,光子检测仅在光子终止之前发生,即当它逃出外部边界框或从非零体素移动到零体素时。因此,检测器的孔径是实际边界框表面或被以[x,y,z]为中心、半径为r的球体截断的非零体素表面。\n\n检测器位置对\"原点从[0 0 0] -z\"标志敏感。\n" #: tfmmcx.sgmedia.columns[0].title.caption -msgid "μa (1/mm)" -msgstr "μa(1/毫米)" +msgid "μa (1/mm)" +msgstr "μa (1/mm)" #: tfmmcx.sgmedia.columns[1].title.caption -msgid "μs (1/mm)" -msgstr "μs(1/毫米)" +msgid "μs (1/mm)" +msgstr "μs (1/mm)" #: tfmmcx.sgmedia.columns[2].title.caption msgid "g (anisotropy)" -msgstr "g(各向异性)" +msgstr "g (各向异性)" #: tfmmcx.sgmedia.columns[3].title.caption msgid "n (reflective index)" -msgstr "n(反射系数)" +msgstr "n (折射率)" #: tfmmcx.sgmedia.hint -msgid "" -"MediaCfg \n" -"\n" -"This table defines the optical properties for all needed tissue labels.\n" -"\n" -"The first row (label 0) is reserved for the background medium - which includes\n" -"the space outside the bounding box of the volume, as well as any voxels with\n" -"a zero-value.\n" -"\n" -"One can select a row and copy/paste to other rows.\n" -"\n" -"If more labels are needed, move to the bottom of the table, and press \"down\"\n" -"arrow key to create a new row below.\n" -msgstr "" -"MediaCfg \n" -"\n" -"此表定义所有所需组织标签的光学属性。\n" -"\n" -"第一行(标签 0)保留用于背景介质 - 其中包括\n" -"体积边界框外部的空间,以及\n" +msgid "MediaCfg \n\nThis table defines the optical properties for all needed tissue labels.\n\nThe first row (label 0) is reserved for the background medium - which includes\nthe space outside the bounding box of the volume, as well as any voxels with\na zero-value.\n\nOne can select a row and copy/paste to other rows.\n\nIf more labels are needed, move to the bottom of the table, and press \"down\"\narrow key to create a new row below.\n" +msgstr "MediaCfg\n\n此表定义所有所需组织标签的光学特性。\n\n第一行(标签0)保留给背景介质 - 包括体积边界框外的空间,以及任何零值体素。\n\n可以选择一行并复制/粘贴到其他行。\n\n如果需要更多标签,移动到表的底部,按\"向下\"箭头键在下方创建新行。\n" #: tfmmcx.shapeaddbox.caption msgid "Box" @@ -2038,7 +1536,7 @@ msgstr "盒子" #: tfmmcx.shapeaddbox.hint msgid "Add a 3D box (using the center of the voxels - i.e. add 0.5 in all directions)" -msgstr "添加一个 3D 框(使用体素的中心 - 即在所有方向上添加 0.5)" +msgstr "添加3D盒子(使用体素的中心 - 即在所有方向上加0.5)" #: tfmmcx.shapeaddcylinder.caption msgid "Cylinder" @@ -2046,7 +1544,7 @@ msgstr "圆柱" #: tfmmcx.shapeaddcylinder.hint msgid "Add a cylinder" -msgstr "添加一个圆柱" +msgstr "添加圆柱" #: tfmmcx.shapeaddgrid.caption msgid "Grid" @@ -2054,7 +1552,7 @@ msgstr "网格" #: tfmmcx.shapeaddgrid.hint msgid "Define a uniform grid as the simulation space" -msgstr "定义仿真空间" +msgstr "定义均匀网格作为模拟空间" #: tfmmcx.shapeaddname.caption msgid "Name" @@ -2062,7 +1560,7 @@ msgstr "名称" #: tfmmcx.shapeaddname.hint msgid "Define a name for the domain" -msgstr "域的名称" +msgstr "为域定义名称" #: tfmmcx.shapeaddorigin.caption msgid "Origin" @@ -2070,31 +1568,31 @@ msgstr "原点" #: tfmmcx.shapeaddorigin.hint msgid "Define the origin for subsequent objects" -msgstr "定义后续对象的原点" +msgstr "为后续对象定义原点" #: tfmmcx.shapeaddsphere.caption msgid "Sphere" -msgstr "球" +msgstr "球体" #: tfmmcx.shapeaddsphere.hint msgid "Add a 3D sphere" -msgstr "添加球体" +msgstr "添加3D球体" #: tfmmcx.shapeaddsubgrid.caption msgid "Subgrid" -msgstr "次网格" +msgstr "子网格" #: tfmmcx.shapeaddsubgrid.hint msgid "Add a 3D box (using the lower-corner of the voxel)" -msgstr "添加盒子(使用体素的下角)" +msgstr "添加3D盒子(使用体素的下角)" #: tfmmcx.shapeaddupperspace.caption msgid "Upper" -msgstr "上半空间" +msgstr "上部" #: tfmmcx.shapeaddupperspace.hint msgid "Add an upper-space defined by a linear inequality" -msgstr "添加由线性不等式定义的上半空间" +msgstr "添加由线性不等式定义的上部空间" #: tfmmcx.shapeaddxlayers.caption msgid "XLayers" @@ -2102,7 +1600,7 @@ msgstr "X层" #: tfmmcx.shapeaddxlayers.hint msgid "Add a layered structure along x-axis" -msgstr "沿 x 轴添加分层结构" +msgstr "沿x轴添加分层结构" #: tfmmcx.shapeaddxslabs.caption msgid "XSlabs" @@ -2110,7 +1608,7 @@ msgstr "X板" #: tfmmcx.shapeaddxslabs.hint msgid "Add a slab along x-axis" -msgstr "沿 x 轴添加一块板" +msgstr "沿x轴添加板" #: tfmmcx.shapeaddylayers.caption msgid "YLayers" @@ -2118,7 +1616,7 @@ msgstr "Y层" #: tfmmcx.shapeaddylayers.hint msgid "Add a layered structure along y-axis" -msgstr "沿 y 轴添加分层结构" +msgstr "沿y轴添加分层结构" #: tfmmcx.shapeaddyslabs.caption msgid "YSlabs" @@ -2126,7 +1624,7 @@ msgstr "Y板" #: tfmmcx.shapeaddyslabs.hint msgid "Add a slab along y-axis" -msgstr "沿 y 轴添加一块板" +msgstr "沿y轴添加板" #: tfmmcx.shapeaddzlayers.caption msgid "ZLayers" @@ -2134,7 +1632,7 @@ msgstr "Z层" #: tfmmcx.shapeaddzlayers.hint msgid "Add a layered structure along z-axis" -msgstr "沿 z 轴添加分层结构" +msgstr "沿z轴添加分层结构" #: tfmmcx.shapeaddzslabs.caption msgid "ZSlabs" @@ -2142,7 +1640,7 @@ msgstr "Z板" #: tfmmcx.shapeaddzslabs.hint msgid "Add a slab along z-axis" -msgstr "沿 z 轴添加一块板" +msgstr "沿z轴添加板" #: tfmmcx.shapedelete.caption msgctxt "tfmmcx.shapedelete.caption" @@ -2151,7 +1649,7 @@ msgstr "删除" #: tfmmcx.shapedelete.hint msgid "Delete selected object" -msgstr "删除选定的对象" +msgstr "删除选定对象" #: tfmmcx.shapeedit.caption msgid "Edit" @@ -2173,7 +1671,7 @@ msgstr "打印" #: tfmmcx.shapeprint.hint msgid "Print selected object" -msgstr "打印选定的对象" +msgstr "打印选定对象" #: tfmmcx.shapereset.caption msgctxt "tfmmcx.shapereset.caption" @@ -2182,11 +1680,11 @@ msgstr "重置" #: tfmmcx.shapereset.hint msgid "Reset to a 60x60x60 homogeneous cubic domain" -msgstr "重置为 60x60x60 均匀介质" +msgstr "重置为60x60x60均匀立方体域" #: tfmmcx.statictext1.caption msgid "Additional Settings" -msgstr "其他设置" +msgstr "附加设置" #: tfmmcx.statictext2.caption msgid "Media Settings" @@ -2194,16 +1692,16 @@ msgstr "介质设置" #: tfmmcx.statictext3.caption msgid "Detector Settings (in voxel unit)" -msgstr "探测器设置(以体素为单位)" +msgstr "检测器设置(以体素为单位)" #: tfmmcx.tabinputdata.caption msgid "Simulation Designer" -msgstr "仿真参数" +msgstr "模拟设计器" #: tfmmcx.tabvolumedesigner.caption msgctxt "tfmmcx.tabvolumedesigner.caption" msgid "Volume Designer" -msgstr "仿真空间" +msgstr "体积设计器" #: tfmmcx.tbtverify.caption msgid "Validate" @@ -2211,19 +1709,19 @@ msgstr "验证" #: tfmmcx.toolbar1.caption msgid "MCX Ribon" -msgstr "MCX 图标" +msgstr "MCX功能区" #: tfmmcx.toolbar2.caption msgid "ToolBar2" -msgstr "工具​​栏2" +msgstr "ToolBar2" #: tfmmcx.toolbar3.caption msgid "ToolBar3" -msgstr "工具栏3" +msgstr "ToolBar3" #: tfmmcx.toolbutton11.caption msgid "Plot ▾" -msgstr "绘图▾" +msgstr "绘制 ▾" #: tfmmcx.toolbutton11.hint msgid "Plot MCX output data" @@ -2231,27 +1729,27 @@ msgstr "绘制MCX输出数据" #: tfmmcx.toolbutton12.caption msgid "ToolButton12" -msgstr "" +msgstr "ToolButton12" #: tfmmcx.toolbutton13.caption msgid "ToolButton13" -msgstr "" +msgstr "ToolButton13" #: tfmmcx.toolbutton17.caption msgid "ToolButton17" -msgstr "" +msgstr "ToolButton17" #: tfmmcx.toolbutton35.caption msgid "ToolButton35" -msgstr "" +msgstr "ToolButton35" #: tfmmcx.toolbutton39.hint msgid "Reset volume and define a different dimension" -msgstr "重置区域并设置新维度" +msgstr "重置体积并定义不同的维度" #: tfmmcx.toolbutton5.caption msgid "ToolButton5" -msgstr "" +msgstr "ToolButton5" #: tfmmcx.toolbutton7.caption msgctxt "tfmmcx.toolbutton7.caption" @@ -2261,11 +1759,11 @@ msgstr "重置" #: tfmmcx.toolbutton8.caption msgctxt "tfmmcx.toolbutton8.caption" msgid "ToolButton8" -msgstr "" +msgstr "ToolButton8" #: tfmmcx.toolbutton9.caption msgid "Help ▾" -msgstr "帮助▾" +msgstr "帮助 ▾" #: tfmmcx.toolbutton9.hint msgctxt "tfmmcx.toolbutton9.hint" @@ -2275,25 +1773,11 @@ msgstr "浏览帮助信息" #: tfmmcx.tvshapes.hint msgctxt "tfmmcx.tvshapes.hint" msgid "ShapeCfg" -msgstr "" +msgstr "ShapeCfg" #: tfmmcx.vlbc.hint -msgid "" -"Boundary \n" -"\n" -"Using this box to set the boundary condition for each one of the 6\n" -"facets on the bounding box. A total of 4 boundary conditions are\n" -"supported:\n" -"\n" -"1. total absorbing BC: photon hiting the boundary are terminated\n" -"2. Fresnel reflection BC: perform Fresnel reflection/transmission\n" -"3. mirror/total reflection BC: photon is 100% reflected (can run a long time)\n" -"4. cylic BC: a photon exiting from a facet will re-enter from the opposite one\n" -msgstr "" -"边界\n" -"\n" -"使用此框为边界框上的 6 个\n" -"面中的每一个设置边界条件。\n" +msgid "Boundary \n\nUsing this box to set the boundary condition for each one of the 6\nfacets on the bounding box. A total of 4 boundary conditions are\nsupported:\n\n1. total absorbing BC: photon hiting the boundary are terminated\n2. Fresnel reflection BC: perform Fresnel reflection/transmission\n3. mirror/total reflection BC: photon is 100% reflected (can run a long time)\n4. cylic BC: a photon exiting from a facet will re-enter from the opposite one\n" +msgstr "Boundary\n\n使用此框为边界框上6个面中的每一个设置边界条件。总共支持4种边界条件:\n\n1. 全吸收BC:撞击边界的光子被终止\n2. 菲涅尔反射BC:执行菲涅尔反射/透射\n3. 镜面/全反射BC:光子100%反射(可能运行很长时间)\n4. 循环BC:从一个面退出的光子将从相对面重新进入\n" #: tfmnewsession.btcancel.caption msgctxt "tfmnewsession.btcancel.caption" @@ -2303,34 +1787,34 @@ msgstr "取消" #: tfmnewsession.btok.caption msgctxt "tfmnewsession.btok.caption" msgid "OK" -msgstr "确认" +msgstr "确定" #: tfmnewsession.caption msgid "Create A New Simulation" -msgstr "创建新仿真" +msgstr "创建新模拟" #: tfmnewsession.edsession.hint msgctxt "tfmnewsession.edsession.hint" msgid "Session" -msgstr "仿真名称" +msgstr "Session" #: tfmnewsession.grprogram.caption msgctxt "tfmnewsession.grprogram.caption" msgid "Run Monte Carlo simulation with" -msgstr "仿真程序" +msgstr "运行蒙特卡罗模拟使用" #: tfmnewsession.grprogram.hint msgid "Program" -msgstr "仿真程序" +msgstr "程序" #: tfmnewsession.label4.caption msgid "Please type in a unique session name" -msgstr "输入的仿真名不可以有重名" +msgstr "请输入唯一的会话名称" #: tfmnewsession.label4.hint msgctxt "tfmnewsession.label4.hint" msgid "-s (--sessionid)" -msgstr "" +msgstr "-s (--sessionid)" #: tfmshapeeditor.btcancel.caption msgctxt "tfmshapeeditor.btcancel.caption" @@ -2340,7 +1824,7 @@ msgstr "取消" #: tfmshapeeditor.btok.caption msgctxt "tfmshapeeditor.btok.caption" msgid "OK" -msgstr "确认" +msgstr "确定" #: tfmshapeeditor.caption msgid "Edit Shapes" @@ -2354,7 +1838,7 @@ msgstr "取消" #: tfmsource.btok.caption msgctxt "tfmsource.btok.caption" msgid "OK" -msgstr "确认" +msgstr "确定" #: tfmsource.caption msgid "Light Source Settings" @@ -2362,7 +1846,7 @@ msgstr "光源设置" #: tfmsource.edsource.text msgid "pencil" -msgstr "" +msgstr "铅笔" #: tfmsource.label4.caption msgid "Please select a light source type:" @@ -2374,11 +1858,11 @@ msgstr "请定义源参数:" #: tfmstop.caption msgid "Running ..." -msgstr "正在运行……" +msgstr "运行中..." #: tfmstop.toolbar1.caption msgid "Running" -msgstr "正在运行" +msgstr "运行中" #: tfmstop.toolbutton3.caption msgid "Hide" @@ -2386,33 +1870,33 @@ msgstr "隐藏" #: tfmstop.toolbutton3.hint msgid "Hide this window" -msgstr "隐藏窗口" +msgstr "隐藏此窗口" #: tfmstop.toolbutton8.caption msgctxt "tfmstop.toolbutton8.caption" msgid "ToolButton8" -msgstr "" +msgstr "ToolButton8" #: tfmviewer.btbackground.hint msgctxt "tfmviewer.btbackground.hint" msgid "Change Background Color" -msgstr "背景颜色" +msgstr "更改背景颜色" #: tfmviewer.btopaque.caption msgid "btOpaque" -msgstr "" +msgstr "btOpaque" #: tfmviewer.btopaque.hint msgid "Show Opaque Hull" -msgstr "半透明" +msgstr "显示不透明外壳" #: tfmviewer.caption msgid "MCX Studio Volume Renderer" -msgstr "MCX Studio 体积渲染器" +msgstr "光子工作室体积渲染器" #: tfmviewer.grdir.caption msgid "Slicing direction" -msgstr "截面方向" +msgstr "切片方向" #: tfmviewer.label1.caption msgid "Rendering quality" @@ -2424,11 +1908,11 @@ msgstr "切割平面位置:" #: tfmviewer.label3.caption msgid "Invisible threshold" -msgstr "颜色阈值" +msgstr "不可见阈值" #: tfmviewer.label4.caption msgid "Color level" -msgstr "颜色层数" +msgstr "颜色级别" #: tfmviewer.mcxplotexit.caption msgctxt "tfmviewer.mcxplotexit.caption" @@ -2442,7 +1926,7 @@ msgstr "退出" #: tfmviewer.mcxplotopen.caption msgid "Open File" -msgstr "打开" +msgstr "打开文件" #: tfmviewer.mcxplotopen.hint msgid "Open Data File" @@ -2466,11 +1950,11 @@ msgstr "重置" #: tfmviewer.mcxplotsavescreen.caption msgctxt "tfmviewer.mcxplotsavescreen.caption" msgid "Save Screen" -msgstr "保存截图" +msgstr "保存屏幕" #: tfmviewer.mcxplotsavescreen.hint msgid "Save screenshot" -msgstr "保存截图" +msgstr "保存屏幕截图" #: tfmviewer.mcxplotshowbbx.caption msgctxt "tfmviewer.mcxplotshowbbx.caption" @@ -2480,7 +1964,7 @@ msgstr "显示边界框" #: tfmviewer.mcxplotshowbbx.hint msgctxt "tfmviewer.mcxplotshowbbx.hint" msgid "Show Bounding Box" -msgstr "显示外框" +msgstr "显示边界框" #: tfmviewer.mcxplotusecolor.caption msgid "Pseudocolor" @@ -2493,17 +1977,17 @@ msgstr "使用伪彩色" #: tfmviewer.toolbar1.caption msgctxt "tfmviewer.toolbar1.caption" msgid "ToolBar1" -msgstr "" +msgstr "ToolBar1" #: tfmviewer.toolbutton10.caption msgid "ToolButton10" -msgstr "" +msgstr "ToolButton10" #: tfmviewer.toolbutton4.hint msgid "Reset 3D View" -msgstr "重置 3D 视图" +msgstr "重置3D视图" #: tfmviewer.toolbutton9.caption msgctxt "tfmviewer.toolbutton9.caption" msgid "ToolButton9" -msgstr "" +msgstr "ToolButton9" diff --git a/mcxstudio/i18n/mcxstudio.zh-tw.po b/mcxstudio/i18n/mcxstudio.zh-tw.po new file mode 100644 index 00000000..f015fdb3 --- /dev/null +++ b/mcxstudio/i18n/mcxstudio.zh-tw.po @@ -0,0 +1,1993 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: 2025-09-27\n" +"PO-Revision-Date: 2025-09-27\n" +"Last-Translator: Qianqian Fang\n" +"Language-Team: MCX Developers\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 3.0.1\n" + +#: tfmabout.button1.caption +msgctxt "tfmabout.button1.caption" +msgid "OK" +msgstr "確定" + +#: tfmabout.caption +msgid "About Monte Carlo eXtreme Studio" +msgstr "關於蒙地卡羅極限工作室" + +#: tfmabout.image3.hint +msgctxt "tfmabout.image3.hint" +msgid "About MCX" +msgstr "關於MCX" + +#: tfmconfig.btcancel.caption +msgctxt "tfmconfig.btcancel.caption" +msgid "Cancel" +msgstr "取消" + +#: tfmconfig.btok.caption +msgctxt "tfmconfig.btok.caption" +msgid "OK" +msgstr "確定" + +#: tfmconfig.caption +msgid "MCX Studio Config" +msgstr "光子工作室設定" + +#: tfmconfig.ckusemanualpath.caption +msgid "Use Manual Paths" +msgstr "使用手動路徑" + +#: tfmconfig.edlocalpath.columns[0].title.caption +msgctxt "tfmconfig.edlocalpath.columns[0].title.caption" +msgid "Value" +msgstr "值" + +#: tfmconfig.edscppath.hint +msgctxt "tfmconfig.edscppath.hint" +msgid "Local SCP Executable Path" +msgstr "本機SCP可執行檔路徑" + +#: tfmconfig.edsshpath.hint +msgid "Local SSH Path" +msgstr "本機SSH路徑" + +#: tfmconfig.edworkpath.text +msgid "%MCXSTUDIO%/MCXOutput" +msgstr "%MCXSTUDIO%/MCXOutput" + +#: tfmconfig.groupbox2.caption +msgid "MCXStudio Local Output Root Directory" +msgstr "光子工作室本機輸出根目錄" + +#: tfmconfig.groupbox3.caption +msgid "Remote MCX/MMC/MCXCl Executable Search Paths" +msgstr "遠端MCX/MMC/MCXCl可執行檔搜尋路徑" + +#: tfmconfig.groupbox4.caption +msgid "Local MCX/MMC/MCXCl Executable Search Paths" +msgstr "本機MCX/MMC/MCXCl可執行檔搜尋路徑" + +#: tfmconfig.groupbox5.caption +msgid "Local SSH Executable Path" +msgstr "本機SSH可執行檔路徑" + +#: tfmconfig.groupbox6.caption +msgctxt "tfmconfig.groupbox6.caption" +msgid "Local SCP Executable Path" +msgstr "本機SCP可執行檔路徑" + +#: tfmconfig.groupbox7.caption +msgid "Remote MCX/MMC/MCXCl Output Directory" +msgstr "遠端MCX/MMC/MCXCl輸出目錄" + +#: tfmconfig.groupbox8.caption +msgid "Remote GPU Server" +msgstr "遠端GPU伺服器" + +#: tfmconfig.label1.caption +msgid "Hostname or IP" +msgstr "主機名稱或IP" + +#: tfmconfig.label2.caption +msgid "Port" +msgstr "連接埠" + +#: tfmconfig.label3.caption +msgid "User name" +msgstr "使用者名稱" + +#: tfmdatafile.btcancel.caption +msgctxt "tfmdatafile.btcancel.caption" +msgid "Cancel" +msgstr "取消" + +#: tfmdatafile.btok.caption +msgctxt "tfmdatafile.btok.caption" +msgid "OK" +msgstr "確定" + +#: tfmdatafile.caption +msgid " Data File Properties" +msgstr "資料檔案屬性" + +#: tfmdatafile.eddataformat.text +msgid "Float (32bit)" +msgstr "浮點數(32位元)" + +#: tfmdatafile.label10.caption +msgid "Data File" +msgstr "資料檔案" + +#: tfmdatafile.label4.caption +msgid "Y Dimension" +msgstr "Y維度" + +#: tfmdatafile.label5.caption +msgid "X Dimension" +msgstr "X維度" + +#: tfmdatafile.label6.caption +msgid "Z Dimension" +msgstr "Z維度" + +#: tfmdatafile.label7.caption +msgctxt "tfmdatafile.label7.caption" +msgid "Time Gates" +msgstr "時間窗" + +#: tfmdatafile.label8.caption +msgctxt "tfmdatafile.label8.caption" +msgid "Time Gates" +msgstr "時間窗" + +#: tfmdatafile.label9.caption +msgid "Header Size" +msgstr "標頭大小" + +#: tfmdomain.acexit.caption +msgid "acExit" +msgstr "acExit" + +#: tfmdomain.acexit.hint +msgctxt "tfmdomain.acexit.hint" +msgid "Exit" +msgstr "結束" + +#: tfmdomain.achidebbx.caption +msgid "acHideBBX" +msgstr "acHideBBX" + +#: tfmdomain.achidebbx.hint +msgid "Hide Domain Box" +msgstr "隱藏域邊界框" + +#: tfmdomain.acloadjson.caption +msgid "acLoadJSON" +msgstr "acLoadJSON" + +#: tfmdomain.acloadjson.hint +msgid "Load JSON" +msgstr "載入JSON" + +#: tfmdomain.acrender.caption +msgid "acRender" +msgstr "acRender" + +#: tfmdomain.acrender.hint +msgid "Render" +msgstr "算繪" + +#: tfmdomain.acresetcamera.caption +msgid "acResetCamera" +msgstr "acResetCamera" + +#: tfmdomain.acresetcamera.hint +msgid "Reset Camera" +msgstr "重設相機" + +#: tfmdomain.acsaveimage.caption +msgid "acSaveImage" +msgstr "acSaveImage" + +#: tfmdomain.acsaveimage.hint +msgctxt "tfmdomain.acsaveimage.hint" +msgid "Save Screen" +msgstr "儲存螢幕" + +#: tfmdomain.acsavejson.caption +msgid "acSaveJSON" +msgstr "acSaveJSON" + +#: tfmdomain.acsavejson.hint +msgid "Save JSON" +msgstr "儲存JSON" + +#: tfmdomain.btbackground.hint +msgctxt "tfmdomain.btbackground.hint" +msgid "Change Background Color" +msgstr "變更背景顏色" + +#: tfmdomain.btpin.caption +msgid "Pin Editor" +msgstr "固定編輯器" + +#: tfmdomain.btpin.hint +msgid "Show editor" +msgstr "顯示編輯器" + +#: tfmdomain.caption +msgid "MCX Domain Renderer" +msgstr "MCX域算繪器" + +#: tfmdomain.toolbar1.caption +msgctxt "tfmdomain.toolbar1.caption" +msgid "ToolBar1" +msgstr "ToolBar1" + +#: tfmdomain.toolbutton11.caption +msgid "ToolButton11" +msgstr "ToolButton11" + +#: tfmdomain.toolbutton7.caption +msgid "ToolButton7" +msgstr "ToolButton7" + +#: tfmdomain.toolbutton9.caption +msgctxt "tfmdomain.toolbutton9.caption" +msgid "ToolButton9" +msgstr "ToolButton9" + +#: tfmmcx.btexpandoutput.caption +msgid "â–µ" +msgstr "â–µ" + +#: tfmmcx.btexpandoutput.hint +msgid "To expand or collapse the command window." +msgstr "展開或摺疊命令視窗。" + +#: tfmmcx.btgbexpand.caption +msgid "▾" +msgstr "▾" + +#: tfmmcx.btloadseed.hint +msgid "Load seed data from previous simulations for replay" +msgstr "從先前的模擬載入種子資料進行重播" + +#: tfmmcx.btsendcmd.caption +msgid "Send" +msgstr "傳送" + +#: tfmmcx.btsendcmd.hint +msgid "Send the user input to the input buffer of the external program \ncurrently being executed.\n" +msgstr "將使用者輸入傳送到目前執行的外部程式的輸入緩衝區。\n" + +#: tfmmcx.button2.caption +msgid "Clear Output" +msgstr "清除輸出" + +#: tfmmcx.caption +msgid "MCX Studio" +msgstr "光子工作室" + +#: tfmmcx.ckautopilot.caption +msgid "Let MCX decide thread/block size (-A)" +msgstr "讓MCX決定執行緒/區塊大小 (-A)" + +#: tfmmcx.ckautopilot.hint +msgid "Autopilot \n\nChecking this box tells MCX/MMC to automatically determine the \"optimal\"\nthread number and block size by using the hardware information.\n\nIt is recommended to always check this box. The key to maximize simulation\nthroughput is to ensure a large number of threads are launched to keep the\nhardware resources fully utilized.\n" +msgstr "自動駕駛\n\n勾選此框告訴MCX/MMC根據硬體資訊自動決定\"最佳\"的執行緒數和區塊大小。\n\n建議始終勾選此框。最大化模擬輸送量的關鍵是確保啟動大量執行緒以充分利用硬體資源。\n" + +#: tfmmcx.ckbdebug.hint +msgctxt "tfmmcx.ckbdebug.hint" +msgid "DebugFlags" +msgstr "DebugFlags" + +#: tfmmcx.ckbdet.hint +msgid "SaveDetFlag \n\nThis checkbox list allows users to select the detected photon\ndata items that they want to save in the .mch file.\n\nBy default, only the Detector ID and Partial Pathlength are stored.\n" +msgstr "SaveDetFlag\n\n此核取方塊清單允許使用者選擇要在.mch檔案中儲存的檢測光子資料項目。\n\n預設情況下,只儲存檢測器ID和部分路徑長度。\n" + +#: tfmmcx.ckdoremote.caption +msgid "Run remote command:" +msgstr "執行遠端指令:" + +#: tfmmcx.ckdoremote.hint +msgid "DoRemote \n\nCheck this option asks MCXStudio to call the specified ssh command \nand run mcx/mmc simulations on remote servers. \n\nPlease be aware that one must prepare the server and client to enable\nremote execution, this include\n\n1. install mcx/mmc/mcxcl executable on remote server and add path to\n the PATH environment \n2. install ssh client on the local client; for Linux/Mac, ssh/scp command is\n typically built-in; for windows, please install plink.exe and pscp.exe and\n ensure that their paths are on the PATH environment variable\n3. optionally, one can set the SSH key between the client and server to \n avoid typing password, please see http://www.linuxproblem.org/art_9.html\n" +msgstr "DoRemote\n\n選取此選項要求光子工作室呼叫指定的ssh指令並在遠端伺服器上執行mcx/mmc模擬。\n\n請注意,必須準備伺服器和用戶端以啟用遠端執行,這包括:\n\n1. 在遠端伺服器上安裝mcx/mmc/mcxcl可執行檔並將路徑新增到PATH環境變數\n2. 在本機用戶端安裝ssh用戶端;對於Linux/Mac,ssh/scp指令通常內建;對於Windows,請安裝plink.exe和pscp.exe並確保它們的路徑在PATH環境變數中\n3. 可選地,可以在用戶端和伺服器之間設定SSH金鑰以避免輸入密碼,請參見http://www.linuxproblem.org/art_9.html\n" + +#: tfmmcx.ckdoreplay.caption +msgid "Replay" +msgstr "重播" + +#: tfmmcx.ckdoreplay.hint +msgid "DoReplay \n\nWhen selecting a .mch file as the seed, this checkbox is automatically \nchecked, signifying that MCX/MMC will perform a photon replay by\nreading the RNG seeds from the .mch file and rerun the photons to produce\nthe Jacobians - in such case, one can use the \"Output Type\" to select which\nmetric to output.\n" +msgstr "DoReplay\n\n當選擇.mch檔案作為種子時,此核取方塊自動被選取,表示MCX/MMC將通過從.mch檔案讀取RNG種子並重新執行光子來執行光子重播以產生雅可比矩陣 - 在這種情況下,可以使用\"輸出類型\"來選擇要輸出的度量。\n" + +#: tfmmcx.cklockgpu.caption +msgid "Lock GPU" +msgstr "鎖定GPU" + +#: tfmmcx.cklockgpu.hint +msgid "Checking this box prevents MCXStudio from updating the device list\nwhen switching between different simulation sessions.\n\nWhen running simulation on a remote server, it is recommended to\nlock the GPU to avoid resetting of the device list.\n" +msgstr "勾選此框可防止光子工作室在不同模擬工作階段之間切換時更新裝置清單。\n\n在遠端伺服器上執行模擬時,建議鎖定GPU以避免重設裝置清單。\n" + +#: tfmmcx.cknormalize.caption +msgid "Do normalization (-U)" +msgstr "執行正規化 (-U)" + +#: tfmmcx.cknormalize.hint +msgid "DoNormalize \n\nCheck this option allows MCX/MMC to normalize the output by the \nbelow formula\n\nΦ(i,j,k,t)=E(i,j,k,t) / (V*E_total*dT)\n\nwhere E(i,j,k,t) is the raw accummuated energy at each voxel; \nV is the size of the voxel in mm^3; dT is the time-gate width in s.\n\nAfter normalization, the result becomes TPSF or Green's function.\n\nUnchecking this option disables normalization.\n" +msgstr "DoNormalize\n\n選取此選項允許MCX/MMC通過以下公式對輸出進行正規化:\n\nΦ(i,j,k,t)=E(i,j,k,t) / (V*E_total*dT)\n\n其中E(i,j,k,t)是每個體素的原始累積能量;V是體素的大小(mm^3);dT是時間窗寬度(s)。\n\n正規化後,結果變為TPSF或格林函數。\n\n取消選取此選項將停用正規化。\n" + +#: tfmmcx.ckreflect.caption +msgid "Do reflection all boundaries (-b)" +msgstr "在所有邊界執行反射 (-b)" + +#: tfmmcx.ckreflect.hint +msgid "DoReflect \n\nCheck this option (by default) enables reflection/refrection calculations \nwhen refractive index mismatch is detected at tissue boundaries.\n\nIf this option is unchecked, any photon hits the boundary between a \nnon-zero and zero-valued voxel will be terminated (i.e. total\nabsorbtion boundary condition). \n\nThe medium outside of the volume bounding box is assumed to have \nthe optical properties defined as label 0 (the first row in the Media Settings\ntable on the right).\n" +msgstr "DoReflect\n\n選取此選項(預設)在組織邊界檢測到折射率不匹配時啟用反射/折射計算。\n\n如果取消選取此選項,任何撞擊非零值和零值體素之間邊界的光子將被終止(即全吸收邊界條件)。\n\n體積邊界框外的介質假定具有標籤0定義的光學特性(右側介質設定表中的第一列)。\n" + +#: tfmmcx.cksavedata.caption +msgid "Save fluence (-S)" +msgstr "儲存通量 (-S)" + +#: tfmmcx.cksavedata.hint +msgid "DoSave \n\nChecking this option makes MCX/MMC outputs the volumetric fluence\ndata: for MCX, it is the .mc2/.nii file; for MMC, it is a .dat file using P/H/B/S \nray-tracers and .mc2/.nii files when using the dual-grid mode (-M G).\n\nUnchecking this option stops MCX/MMC output the .mc2/.nii file.\n" +msgstr "DoSave\n\n選取此選項使MCX/MMC輸出體積通量資料:對於MCX,這是.mc2/.nii檔案;對於MMC,使用P/H/B/S射線追蹤器時是.dat檔案,使用雙網格模式(-M G)時是.mc2/.nii檔案。\n\n取消選取此選項將阻止MCX/MMC輸出.mc2/.nii檔案。\n" + +#: tfmmcx.cksavedetector.caption +msgid "Save detected photons (-d)" +msgstr "儲存檢測到的光子 (-d)" + +#: tfmmcx.cksavedetector.hint +msgid "SaveDetector \n\nChecking this option allows one to store detected photon \ninformation. The output data records can be user-defined by\nselecting the check-box list entitled \"Save detected photon\".\nThe output data are stored in a .mch file.\n\nUnchecking this option disables output the .mch file (can be \nslightly faster).\n" +msgstr "SaveDetector\n\n選取此選項允許儲存檢測到的光子資訊。輸出資料記錄可以通過選擇名為\"儲存檢測到的光子\"的核取方塊清單來使用者定義。輸出資料儲存在.mch檔案中。\n\n取消選取此選項將停用.mch檔案的輸出(可能稍快一些)。\n" + +#: tfmmcx.cksavemask.caption +msgid "Save volume mask (-M)" +msgstr "儲存體積遮罩 (-M)" + +#: tfmmcx.cksavemask.hint +msgid "DoSaveMask \n\nChecking this option asks MCX to output the pre-processed volume \nmasks. The preprocessed mask contains the voxels that are covered\nunder detectors; these voxels are designated by setting the sign-bit \nas 1. One can visualize this dumped data mask using mcxplotvol.m\n\nUnchecking this option suppresses the output of this mask file.\n" +msgstr "DoSaveMask\n\n選取此選項要求MCX輸出預處理的體積遮罩。預處理遮罩包含被檢測器覆蓋的體素;這些體素通過設定符號位為1來指定。可以使用mcxplotvol.m來視覺化這些匯出的資料遮罩。\n\n取消選取此選項將抑制此遮罩檔案的輸出。\n" + +#: tfmmcx.cksaveref.caption +msgid "Save diffuse reflectance (-X)" +msgstr "儲存漫反射 (-X)" + +#: tfmmcx.cksaveref.hint +msgid "DoSaveRef \n\nChecking this option allows MCX/MMC to output the escaped photon\nweights on the exterior surface of the domain. For MCX, to save the \ntotal diffuse reflectance, one must pad a layer of zero voxels in the \nfacet or full bounding box of the domain to store such data. The raw \ntotal diffuse reflectance are normalized and stored as negative values\nin the .mc2/.nii file. When loading such file using loadmc2.m, the diffuse\nreflectance data are extracted and converted to positive output.\n\nUnchecking this option disables saving diffuse reflectance data.\n" +msgstr "DoSaveRef\n\n選取此選項允許MCX/MMC在域的外表面輸出逸出光子權重。對於MCX,要儲存總漫反射,必須在域的面或完整邊界框中填充一層零體素來儲存此類資料。原始總漫反射被正規化並作為負值儲存在.mc2/.nii檔案中。使用loadmc2.m載入此類檔案時,漫反射資料被萃取並轉換為正值輸出。\n\n取消選取此選項將停用儲存漫反射資料。\n" + +#: tfmmcx.cksaveseed.caption +msgid "Save photon seeds (-q)" +msgstr "儲存光子種子 (-q)" + +#: tfmmcx.cksaveseed.hint +msgid "DoSaveSeed \n\nChecking this option allows one to save the RNG seeds of the detected\nphotons in the .mch file. This makes it possible to perform photon replay\nto compute the Jacobian when feeding this output .mch file as the seed\nfor the replay run.\n\nUnchecking this option disables saving photon seeds.\n" +msgstr "DoSaveSeed\n\n選取此選項允許在.mch檔案中儲存檢測到的光子的RNG種子。這使得在將此輸出.mch檔案作為重播執行的種子時能夠執行光子重播以計算雅可比矩陣。\n\n取消選取此選項將停用儲存光子種子。\n" + +#: tfmmcx.cksharedfs.caption +msgid "Shared file system" +msgstr "共用檔案系統" + +#: tfmmcx.cksharedfs.hint +msgid "DoSharedFS \n\nChecking this option suggests that both the client and the server\nshare the same file system, thus, no file copying is needed. In other\nword, the folder structure to read/write on both client and server\nare identical. This is the case when one uses nfs/autofs on Linux/Mac.\n" +msgstr "DoSharedFS\n\n選取此選項表明用戶端和伺服器共用相同的檔案系統,因此不需要檔案複製。換句話說,用戶端和伺服器上的讀/寫資料夾結構是相同的。在Linux/Mac上使用nfs/autofs時就是這種情況。\n" + +#: tfmmcx.ckshowprogress.caption +msgid "Show progress bar" +msgstr "顯示進度列" + +#: tfmmcx.ckshowprogress.hint +msgid "ShowProgress \n\n(This option is highly experimental, use with caution, may cause hanging on some GPUs)\n\nCheck this option to let MCX/MMC to print a progress bar during the\nGPU simulation. In some hardware, this may cause unstable behaviors\nsuch as stalling or never return even the simulation is complete. If such\nbehavior is detected, please uncheck this option.\n" +msgstr "ShowProgress\n\n(此選項高度實驗性,請謹慎使用,在某些GPU上可能導致當機)\n\n選取此選項讓MCX/MMC在GPU模擬期間列印進度列。在某些硬體上,這可能導致不穩定行為,如停滯或即使模擬完成也不返回。如果檢測到此類行為,請取消選取此選項。\n" + +#: tfmmcx.ckskipvoid.caption +msgid "Skip void space (-k)" +msgstr "跳過空隙空間 (-k)" + +#: tfmmcx.ckskipvoid.hint +msgid "DoSkipVoid \n\nChecking this option starts photon's ellapse time when it first enters\na non-zero voxel.\n\nUnchecking this option starts photon's ellapse time at launch time,\nregardless it is launched in the background (0-valued) voxel or non-zero\nvoxel.\n" +msgstr "DoSkipVoid\n\n選取此選項在光子首次進入非零體素時開始光子的經過時間。\n\n取消選取此選項在發射時開始光子的經過時間,無論它是在背景(0值)體素還是非零體素中發射。\n" + +#: tfmmcx.ckspecular.caption +msgid "Do specular reflection (-V)" +msgstr "執行鏡面反射 (-V)" + +#: tfmmcx.ckspecular.hint +msgid "DoSpecular \n\nChecking this option performs a transmission calculation if a photon \nis launched in the background; this results in change of direction angle\nand loss of energy.\n\nUnchecking this option moves a photon into a non-zero voxel without\nconsidering the specular reflection and change of direction.\n" +msgstr "DoSpecular\n\n選取此選項在光子在背景中發射時執行透射計算;這會導致方向角的改變和能量損失。\n\n取消選取此選項將光子移動到非零體素中而不考慮鏡面反射和方向改變。\n" + +#: tfmmcx.cksrcfrom0.caption +msgid "Orign from [0,0,0] (-z)" +msgstr "原點從[0,0,0]開始 (-z)" + +#: tfmmcx.cksrcfrom0.hint +msgid "DoSrcFrom0 \n\nChecking this item assumes the lower-bottom corner of the voxelated \ndomain is [0,0,0] mm. The definitions of source and detector positions \nare impacted by this definition.\n\nUnchecking this option assumes the lower-bottom corner of the \ndomain is [1,1,1] mm.\n" +msgstr "DoSrcFrom0\n\n選取此項假定體素化域的左下角為[0,0,0] mm。源和檢測器位置的定義受此定義影響。\n\n取消選取此選項假定域的左下角為[1,1,1] mm。\n" + +#: tfmmcx.edbenchmark.hint +msgid "Benchmark \n\nThis option asks to run the built-in benchmark.\n" +msgstr "Benchmark\n\n此選項要求執行內建基準測試。\n" + +#: tfmmcx.edblocksize.hint +msgid "ThreadBlock \n\nSpecify a small integer, preferably a multiple of 32, to define \nthe block size - for example, 64 means a thread block contains \n64 threads.\n\nThis is only used when the -A (autopilot mode) is not enabled.\n" +msgstr "ThreadBlock\n\n指定一個小整數,最好是32的倍數,以定義區塊大小 - 例如,64表示一個執行緒區塊包含64個執行緒。\n\n這僅在未啟用-A(自動駕駛模式)時使用。\n" + +#: tfmmcx.edblocksize.text +msgid "64" +msgstr "64" + +#: tfmmcx.edbubble.hint +msgctxt "tfmmcx.edbubble.hint" +msgid "BubbleSize" +msgstr "BubbleSize" + +#: tfmmcx.edbubble.text +msgid "-2" +msgstr "-2" + +#: tfmmcx.edcmdinput.hint +msgid "User Input\n\nWhen connecting to a remote server via ssh/scp, one may asked to type\n\"yes\" to save the ssh key or other interactive inputs. If this is the case, one\ncan use this field to type user input, and click \"Send\" to pipe user input to \nthe external program.\n" +msgstr "使用者輸入\n\n通過ssh/scp連接到遠端伺服器時,可能會要求輸入\"yes\"來儲存ssh金鑰或其他互動式輸入。如果是這種情況,可以使用此欄位輸入使用者輸入,並點擊\"傳送\"將使用者輸入傳遞給外部程式。\n" + +#: tfmmcx.edconfigfile.hint +msgid "InputFile \n\nSpecify the input file in either .inp or .json format.\n" +msgstr "InputFile\n\n指定.inp或.json格式的輸入檔案。\n" + +#: tfmmcx.eddetectednum.hint +msgid "DetectedNum \n\nThis sets the maximum number of detected photons to be stored. If\nthe actual detected photon number is higher than this specified number,\nmcx/mmc will generate an warning and print out the actual detected \nphoton count; one can use that output in this field to allow MCX to store\nall photons.\n" +msgstr "DetectedNum\n\n這設定要儲存的檢測光子的最大數量。如果實際檢測的光子數量高於此指定數量,mcx/mmc將產生警告並印出實際檢測的光子計數;可以在此欄位中使用該輸出以允許MCX儲存所有光子。\n" + +#: tfmmcx.eddetectednum.text +msgid "10000000" +msgstr "10000000" + +#: tfmmcx.edgate.hint +msgctxt "tfmmcx.edgate.hint" +msgid "GateNum" +msgstr "GateNum" + +#: tfmmcx.edgpuid.hint +msgid "GPUID \n\nUse this list to select the device or devices (CPU or GPU) used to\nrun the simulation. For MCX, if multiple CUDA GPUs are installed, one\ncan select multiple devices to speed up the calculation; for MCXCL\nand MMC, one can select OpenCL devices that include both CPU and\nGPUs. In such case, only devices of the same platform can be selected.\nFor example, an NVIDIA GPU and a CPU can not be selected together.\n" +msgstr "GPUID\n\n使用此清單選擇用於執行模擬的裝置(CPU或GPU)。對於MCX,如果安裝了多個CUDA GPU,可以選擇多個裝置來加速計算;對於MCXCL和MMC,可以選擇包括CPU和GPU在內的OpenCL裝置。在這種情況下,只能選擇同一平台的裝置。例如,NVIDIA GPU和CPU不能一起選擇。\n" + +#: tfmmcx.edmoreparam.hint +msgid "MoreParam \n\nOne can use this field to manually specify additional parameters that\nare not supported by this GUI tool. Any parameter set here will overwrite\nthe previous setting.\n" +msgstr "MoreParam\n\n可以使用此欄位手動指定此GUI工具不支援的附加參數。在此處設定的任何參數將覆寫之前的設定。\n" + +#: tfmmcx.edoutputformat.hint +msgid "OutputFormat \n\nThis specifies the output data file format. The supported formats are\n\n.mc2 - a simple binary format stores the voxel-by-voxel binary data\n in the column-major order\n.nii - the NIfTI-1 format\n.tx3 - a simple 3D texture binary format.\nascii - text-based data file\n" +msgstr "OutputFormat\n\n這指定輸出資料檔案格式。支援的格式有:\n\n.mc2 - 一種簡單的二進位格式,以欄主序儲存逐體素二進位資料\n.nii - NIfTI-1格式\n.tx3 - 一種簡單的3D紋理二進位格式\nascii - 基於文字的資料檔案\n" + +#: tfmmcx.edoutputtype.hint +msgid "OutputType \n\nThis option specifies the output data type. \n\n* Fluence rate [J/mm^2/s] - the default output\n* Fluence [J/mm^2] - the integration of the fluence \n rate over each time gate\n* Energy deposition [J] - can be computed by multiplying \n fluence with absorption μa and voxel volume [mm^3]\n* Absorption Jacobian (mua) [1/mm] - in the replay mode, this\n outputs the sensitivity matrix for μa;\n* Average scattering event count - in the replay mode, this\n outputs the number of scattering event per voxel\n* Momentum transfer sensivity (DCS) - in the replay mode, this \n outputs the momentum transfer contribution/sensitivity from \n each voxel.\n" +msgstr "OutputType\n\n此選項指定輸出資料類型。\n\n* 通量率 [J/mm^2/s] - 預設輸出\n* 通量 [J/mm^2] - 每個時間窗內通量率的積分\n* 能量沉積 [J] - 可通過將通量與吸收係數μa和體素體積 [mm^3] 相乘計算得出\n* 吸收雅可比矩陣 (mua) [1/mm] - 在重播模式下,輸出μa的敏感度矩陣\n* 平均散射事件計數 - 在重播模式下,輸出每個體素的散射事件數\n* 動量傳輸敏感度 (DCS) - 在重播模式下,輸出每個體素的動量傳輸貢獻/敏感度\n" + +#: tfmmcx.edphoton.hint +msgid "PhotonNum \n\nThis defines the total simulated photons.\n\nCan be an integer or number in scientific form. For example\n100000 and 1e5 are both acceptable.\n\nPlease be noted that we highly suggest one to start with a\nsmall photon number to avoid extended run time.\n" +msgstr "PhotonNum\n\n這定義了總模擬光子數。\n\n可以是整數或科學記號形式的數字。例如100000和1e5都是可接受的。\n\n請注意,我們強烈建議從較小的光子數開始以避免延長執行時間。\n" + +#: tfmmcx.edphoton.text +msgid "1e6" +msgstr "1e6" + +#: tfmmcx.edphoton.texthint +msgid "Integer" +msgstr "整數" + +#: tfmmcx.edremote.hint +msgid "RemoteCmd \n\nPlease choose the remote connection command using the dropdown list, or\ntype in this field manually. For windows, it is recommended to choose the \nplink.exe command; for Linux, it is recommended to use the ssh command.\n\nPlease replace the user@server by the actual username and the server IP\nor domain name.\n\nYou are highly recommended to set up key-based ssh access to avoid typing\npassword. Tutorials can be found at http://www.linuxproblem.org/art_9.html\n" +msgstr "RemoteCmd\n\n請使用下拉清單選擇遠端連接指令,或在此欄位中手動輸入。對於Windows,建議選擇plink.exe指令;對於Linux,建議使用ssh指令。\n\n請將user@server替換為實際的使用者名稱和伺服器IP或網域名稱。\n\n強烈建議設定基於金鑰的ssh存取以避免輸入密碼。教學課程可在http://www.linuxproblem.org/art_9.html找到。\n" + +#: tfmmcx.edremote.text +msgid "Built-in ssh" +msgstr "內建ssh" + +#: tfmmcx.edreplaydet.hint +msgctxt "tfmmcx.edreplaydet.hint" +msgid "ReplayDet" +msgstr "ReplayDet" + +#: tfmmcx.edrespin.hint +msgid "RespinNum \n\nSetting this to a positive number will repeat the simulation by the specified\nrepeition count starting from different random seeds.\n\nA negative integer asks MCX to divide the total photon number by the \nabsolute value of this input and run each subpart at a time. This can \nreduce the per-call run time, but may result in extensive overhead of\nrunning repeated simulations.\n" +msgstr "RespinNum\n\n將此設定為正數將從不同的隨機種子開始重複指定重複次數的模擬。\n\n負整數要求MCX將總光子數除以此輸入的絕對值並一次執行每個子部分。這可以減少每次呼叫的執行時間,但可能導致執行重複模擬的大量負荷。\n" + +#: tfmmcx.edseed.hint +msgid "Seed \n\nIf this field is a large integer number, this specifies the RNG seed; \n\nif this is a file name ending with .mch, it loads an .mch file generated \nfrom previous simulation and replays the detected photons.\n" +msgstr "Seed\n\n如果此欄位是一個大整數,這指定RNG種子;\n\n如果這是以.mch結尾的檔案名稱,它載入從先前模擬產生的.mch檔案並重播檢測到的光子。\n" + +#: tfmmcx.edseed.text +msgid "1648335518" +msgstr "1648335518" + +#: tfmmcx.edseed.texthint +msgid "A large integer or .mch file name" +msgstr "大整數或.mch檔案名稱" + +#: tfmmcx.edsession.hint +msgid "Session \n\nThis string will be used in all output files as part of the file names.\n" +msgstr "Session\n\n此字串將用作所有輸出檔案檔案名稱的一部分。\n" + +#: tfmmcx.edthread.hint +msgid "ThreadNum \n\nSpecify a large integer multiple of 32 (the warp size) to manually \ndefine the thread numbers.\n\nThis is only used when the -A (autopilot mode) is not enabled.\n" +msgstr "ThreadNum\n\n指定32(warp大小)的大整數倍數以手動定義執行緒數。\n\n這僅在未啟用-A(自動駕駛模式)時使用。\n" + +#: tfmmcx.edthread.text +msgid "16384" +msgstr "16384" + +#: tfmmcx.edunitinmm.hint +msgid "UnitInMM \n\nThis defines the voxel size. By default, 1x1x1 mm^3 voxels\nare used. Has to be a positive floating point number. For example,\n0.1 defines a 0.1x0.1x0.1 mm^3 voxel.\n\nCurrently, only isotropic voxels are supported.\n" +msgstr "UnitInMM\n\n這定義體素大小。預設使用1x1x1 mm^3體素。必須是正浮點數。例如,0.1定義一個0.1x0.1x0.1 mm^3的體素。\n\n目前只支援各向同性體素。\n" + +#: tfmmcx.edunitinmm.text +msgid "1" +msgstr "1" + +#: tfmmcx.edworkload.hint +msgid "Workload \n\nOne can specify a series of comma-separated numbers to specify the\nrelative portion of workload between multiple selected devices. \n\nFor example: 10,10 asks MCX to run 50% of the total photons using the\n1st device and 50% on the 2nd device. On the other hand, 10,100 splits\nthe total photon 1:10 between the 1st and 2nd devices.\n" +msgstr "Workload\n\n可以指定一系列逗號分隔的數字來指定多個選定裝置之間工作負載的相對比例。\n\n例如:10,10要求MCX使用第1個裝置執行50%的總光子,在第2個裝置上執行50%。另一方面,10,100將總光子在第1和第2裝置之間按1:10分割。\n" + +#: tfmmcx.edworkload.text +msgid "100" +msgstr "100" + +#: tfmmcx.edworkload.texthint +msgid "Comma separated numbers" +msgstr "逗號分隔的數字" + +#: tfmmcx.gradvsettings.caption +msgid "Advanced Settings" +msgstr "進階設定" + +#: tfmmcx.grarray.hint +msgid "ArrayOrder \n\nSelect MATLAB array order indicates that the input volume has a\ncolumn-major order - i.e. the left-most axis is the fastest index of\nthe array, like in MATLAB or FORTRAN.\n\nSelect C array order indicates that the input volume uses the \nrow-major order - i.e. the right-most index is the fastest index\nof the array, like in C and Python.\n" +msgstr "ArrayOrder\n\n選擇MATLAB陣列順序表示輸入體積具有欄主序 - 即最左軸是陣列的最快索引,如MATLAB或FORTRAN。\n\n選擇C陣列順序表示輸入體積使用列主序 - 即最右索引是陣列的最快索引,如C和Python。\n" + +#: tfmmcx.gratomic.hint +msgid "UseAtomic \n\nUsing atomic operations avoids conflicts between multiple threads when\nwriting to the same voxel, thus is highly recommended.\n\nIn the very old CUDA hardware, using atomic operations has a high \noverhead, but such overhead was signficiantly less since the Fermi GPU.\n" +msgstr "UseAtomic\n\n使用原子操作避免多個執行緒寫入相同體素時的衝突,因此強烈推薦。\n\n在非常舊的CUDA硬體中,使用原子操作有很高的負荷,但從Fermi GPU開始這種負荷顯著減少。\n" + +#: tfmmcx.grbasic.caption +msgid "Basic Settings" +msgstr "基本設定" + +#: tfmmcx.grbc.caption +msgid "Boundary cond." +msgstr "邊界條件" + +#: tfmmcx.grdet.caption +msgid "Save detected photon" +msgstr "儲存檢測到的光子" + +#: tfmmcx.grgpu.caption +msgid "GPU Settings" +msgstr "GPU設定" + +#: tfmmcx.grprogram.caption +msgctxt "tfmmcx.grprogram.caption" +msgid "Run Monte Carlo simulation with" +msgstr "執行蒙地卡羅模擬使用" + +#: tfmmcx.grprogram.hint +msgid "MCProgram\n\nIn this panel, you choose which simulator to use. \nCurrently we support 3 simulators, \n\n* MCX: NVIDIA GPU-based simulation using voxelated domain\n* MCX-CL: OpenCL based CPU/GPU simulation using voxelated domain\n* MMC: OpenCL based CPU/GPU simulation using tetrahedral meshes\n\nThe built-in domain designer only supports creating voxelated \ndomains and creating meshes will be supported in the future.\n" +msgstr "MCProgram\n\n在此面板中,選擇要使用的模擬器。\n目前我們支援3種模擬器:\n\n* MCX:使用體素化域的NVIDIA GPU模擬\n* MCX-CL:使用體素化域的基於OpenCL的CPU/GPU模擬\n* MMC:使用四面體網格的基於OpenCL的CPU/GPU模擬\n\n內建域設計器只支援建立體素化域,將來會支援建立網格。\n" + +#: tfmmcx.grswitches.caption +msgid "Switches" +msgstr "開關" + +#: tfmmcx.image1.hint +msgctxt "tfmmcx.image1.hint" +msgid "About MCX" +msgstr "關於MCX" + +#: tfmmcx.label1.caption +msgid "Thread number (-t)" +msgstr "執行緒數 (-t)" + +#: tfmmcx.label1.hint +msgid "-t (--thread)" +msgstr "-t (--thread)" + +#: tfmmcx.label10.caption +msgctxt "tfmmcx.label10.caption" +msgid "or" +msgstr "或" + +#: tfmmcx.label10.hint +msgctxt "tfmmcx.label10.hint" +msgid "-a (--array)" +msgstr "-a (--array)" + +#: tfmmcx.label11.caption +msgid "Output format" +msgstr "輸出格式" + +#: tfmmcx.label11.hint +msgctxt "tfmmcx.label11.hint" +msgid "-u (--unitinmm)" +msgstr "-u (--unitinmm)" + +#: tfmmcx.label12.caption +msgid "Run MCX on" +msgstr "在以下裝置執行MCX" + +#: tfmmcx.label12.hint +msgid "-G (--gpu)" +msgstr "-G (--gpu)" + +#: tfmmcx.label13.caption +msgid "Seed (-E)" +msgstr "種子 (-E)" + +#: tfmmcx.label13.hint +msgid "-E (--seed)" +msgstr "-E (--seed)" + +#: tfmmcx.label14.caption +msgid "Output type (-O)" +msgstr "輸出類型 (-O)" + +#: tfmmcx.label14.hint +msgid "-O (--outputtype)" +msgstr "-O (--outputtype)" + +#: tfmmcx.label15.caption +msgid "Workload split" +msgstr "工作負載分配" + +#: tfmmcx.label15.hint +msgid "-W (--workload)" +msgstr "-W (--workload)" + +#: tfmmcx.label16.caption +msgid "Debug flags" +msgstr "除錯旗標" + +#: tfmmcx.label16.hint +msgid "-D (--debuglevel)" +msgstr "-D (--debuglevel)" + +#: tfmmcx.label17.caption +msgid "Replay detector ID (-Y)" +msgstr "重播檢測器ID (-Y)" + +#: tfmmcx.label17.hint +msgctxt "tfmmcx.label17.hint" +msgid "-Y (--replaydet)" +msgstr "-Y (--replaydet)" + +#: tfmmcx.label18.caption +msgid "Additional parameters" +msgstr "附加參數" + +#: tfmmcx.label18.hint +msgctxt "tfmmcx.label18.hint" +msgid "-Y (--replaydet)" +msgstr "-Y (--replaydet)" + +#: tfmmcx.label19.caption +msgctxt "tfmmcx.label19.caption" +msgid "or" +msgstr "或" + +#: tfmmcx.label19.hint +msgctxt "tfmmcx.label19.hint" +msgid "-a (--array)" +msgstr "-a (--array)" + +#: tfmmcx.label2.caption +msgid "Thread block size (-T)" +msgstr "執行緒區塊大小 (-T)" + +#: tfmmcx.label2.hint +msgid "-T (--blocksize)" +msgstr "-T (--blocksize)" + +#: tfmmcx.label3.caption +msgid "Total photon number (-n)" +msgstr "總光子數 (-n)" + +#: tfmmcx.label3.hint +msgid "-n (--photon)" +msgstr "-n (--photon)" + +#: tfmmcx.label4.caption +msgid "Session ID (-s)" +msgstr "工作階段ID (-s)" + +#: tfmmcx.label4.hint +msgctxt "tfmmcx.label4.hint" +msgid "-s (--sessionid)" +msgstr "-s (--sessionid)" + +#: tfmmcx.label5.caption +msgid "User Input>" +msgstr "使用者輸入>" + +#: tfmmcx.label6.caption +msgid "Array order (-a)" +msgstr "陣列順序 (-a)" + +#: tfmmcx.label6.hint +msgctxt "tfmmcx.label6.hint" +msgid "-a (--array)" +msgstr "-a (--array)" + +#: tfmmcx.label7.caption +msgid "Gate group size (-g)" +msgstr "閘群組大小 (-g)" + +#: tfmmcx.label7.hint +msgid "-g (--gategroup)" +msgstr "-g (--gategroup)" + +#: tfmmcx.label8.caption +msgid "Voxel size in mm (-u)" +msgstr "體素大小(毫米)(-u)" + +#: tfmmcx.label8.hint +msgctxt "tfmmcx.label8.hint" +msgid "-u (--unitinmm)" +msgstr "-u (--unitinmm)" + +#: tfmmcx.label9.caption +msgid "Max detected photons(-H)" +msgstr "最大檢測光子數(-H)" + +#: tfmmcx.label9.hint +msgid "-H (--maxdetphoton)" +msgstr "-H (--maxdetphoton)" + +#: tfmmcx.lbatomic.caption +msgid "Atomic operations" +msgstr "原子操作" + +#: tfmmcx.lbatomic.hint +msgid "(--atomic)" +msgstr "(--atomic)" + +#: tfmmcx.lbbubble.caption +msgid "Cache radius from src (-R)" +msgstr "從源的快取半徑 (-R)" + +#: tfmmcx.lbbubble.hint +msgid "-r (--skipradius)" +msgstr "-r (--skipradius)" + +#: tfmmcx.lbrespin.caption +msgid "Repetition (-r)" +msgstr "重複 (-r)" + +#: tfmmcx.lbrespin.hint +msgid "-r (--repeat)" +msgstr "-r (--repeat)" + +#: tfmmcx.lvjobs.columns[0].caption +msgctxt "tfmmcx.lvjobs.columns[0].caption" +msgid "Session" +msgstr "工作階段" + +#: tfmmcx.lvjobs.columns[10].caption +msgid "DoSave" +msgstr "DoSave" + +#: tfmmcx.lvjobs.columns[11].caption +msgid "DoNormalize" +msgstr "DoNormalize" + +#: tfmmcx.lvjobs.columns[12].caption +msgid "Autopilot" +msgstr "Autopilot" + +#: tfmmcx.lvjobs.columns[13].caption +msgid "SaveDetector" +msgstr "SaveDetector" + +#: tfmmcx.lvjobs.columns[14].caption +msgid "DetectedNum" +msgstr "DetectedNum" + +#: tfmmcx.lvjobs.columns[15].caption +msgid "GPUID" +msgstr "GPUID" + +#: tfmmcx.lvjobs.columns[16].caption +msgid "UnitInMM" +msgstr "UnitInMM" + +#: tfmmcx.lvjobs.columns[17].caption +msgid "DoSaveRef" +msgstr "DoSaveRef" + +#: tfmmcx.lvjobs.columns[18].caption +msgid "DoSaveSeed" +msgstr "DoSaveSeed" + +#: tfmmcx.lvjobs.columns[19].caption +msgid "DoSkipVoid" +msgstr "DoSkipVoid" + +#: tfmmcx.lvjobs.columns[1].caption +msgid "InputFile" +msgstr "InputFile" + +#: tfmmcx.lvjobs.columns[20].caption +msgid "DoSrcFrom0" +msgstr "DoSrcFrom0" + +#: tfmmcx.lvjobs.columns[21].caption +msgid "MediaCfg" +msgstr "MediaCfg" + +#: tfmmcx.lvjobs.columns[22].caption +msgid "DetectorCfg" +msgstr "DetectorCfg" + +#: tfmmcx.lvjobs.columns[23].caption +msgid "MCXConfig" +msgstr "MCXConfig" + +#: tfmmcx.lvjobs.columns[24].caption +msgid "Workload" +msgstr "Workload" + +#: tfmmcx.lvjobs.columns[25].caption +msgctxt "tfmmcx.lvjobs.columns[25].caption" +msgid "ShapeCfg" +msgstr "ShapeCfg" + +#: tfmmcx.lvjobs.columns[26].caption +msgid "Seed" +msgstr "Seed" + +#: tfmmcx.lvjobs.columns[27].caption +msgid "DoSaveMask" +msgstr "DoSaveMask" + +#: tfmmcx.lvjobs.columns[28].caption +msgctxt "tfmmcx.lvjobs.columns[28].caption" +msgid "DebugFlags" +msgstr "DebugFlags" + +#: tfmmcx.lvjobs.columns[29].caption +msgctxt "tfmmcx.lvjobs.columns[29].caption" +msgid "ReplayDet" +msgstr "ReplayDet" + +#: tfmmcx.lvjobs.columns[2].caption +msgid "ThreadNum" +msgstr "ThreadNum" + +#: tfmmcx.lvjobs.columns[30].caption +msgid "DoReplay" +msgstr "DoReplay" + +#: tfmmcx.lvjobs.columns[31].caption +msgid "MCProgram" +msgstr "MCProgram" + +#: tfmmcx.lvjobs.columns[32].caption +msgid "DoSpecular" +msgstr "DoSpecular" + +#: tfmmcx.lvjobs.columns[33].caption +msgid "UseAtomic" +msgstr "UseAtomic" + +#: tfmmcx.lvjobs.columns[34].caption +msgid "BasicOrder" +msgstr "BasicOrder" + +#: tfmmcx.lvjobs.columns[35].caption +msgid "DebugPhoton" +msgstr "DebugPhoton" + +#: tfmmcx.lvjobs.columns[36].caption +msgid "MoreParam" +msgstr "MoreParam" + +#: tfmmcx.lvjobs.columns[37].caption +msgid "RemoteCmd" +msgstr "RemoteCmd" + +#: tfmmcx.lvjobs.columns[38].caption +msgid "DoRemote" +msgstr "DoRemote" + +#: tfmmcx.lvjobs.columns[39].caption +msgid "DoSharedFS" +msgstr "DoSharedFS" + +#: tfmmcx.lvjobs.columns[3].caption +msgid "ThreadBlock" +msgstr "ThreadBlock" + +#: tfmmcx.lvjobs.columns[40].caption +msgid "OutputFormat" +msgstr "OutputFormat" + +#: tfmmcx.lvjobs.columns[41].caption +msgid "OutputType" +msgstr "OutputType" + +#: tfmmcx.lvjobs.columns[42].caption +msgid "Boundary" +msgstr "Boundary" + +#: tfmmcx.lvjobs.columns[43].caption +msgid "SaveDetFlag" +msgstr "SaveDetFlag" + +#: tfmmcx.lvjobs.columns[44].caption +msgid "Benchmark" +msgstr "Benchmark" + +#: tfmmcx.lvjobs.columns[4].caption +msgid "PhotonNum" +msgstr "PhotonNum" + +#: tfmmcx.lvjobs.columns[5].caption +msgid "RespinNum" +msgstr "RespinNum" + +#: tfmmcx.lvjobs.columns[6].caption +msgid "ArrayOrder" +msgstr "ArrayOrder" + +#: tfmmcx.lvjobs.columns[7].caption +msgctxt "tfmmcx.lvjobs.columns[7].caption" +msgid "BubbleSize" +msgstr "BubbleSize" + +#: tfmmcx.lvjobs.columns[8].caption +msgctxt "tfmmcx.lvjobs.columns[8].caption" +msgid "GateNum" +msgstr "GateNum" + +#: tfmmcx.lvjobs.columns[9].caption +msgid "DoReflect" +msgstr "DoReflect" + +#: tfmmcx.mcxdoabout.caption +msgid "About" +msgstr "關於" + +#: tfmmcx.mcxdoabout.hint +msgid "About the author" +msgstr "關於作者" + +#: tfmmcx.mcxdoadditem.caption +msgid "New" +msgstr "新增" + +#: tfmmcx.mcxdoadditem.hint +msgid "Add a new task" +msgstr "新增新任務" + +#: tfmmcx.mcxdoconfig.caption +msgid "Setting" +msgstr "設定" + +#: tfmmcx.mcxdoconfig.hint +msgid "Modify default paths" +msgstr "修改預設路徑" + +#: tfmmcx.mcxdocopy.caption +msgid "Copy session to clipboard" +msgstr "複製工作階段到剪貼簿" + +#: tfmmcx.mcxdodefault.caption +msgid "Default" +msgstr "預設" + +#: tfmmcx.mcxdodefault.hint +msgid "Set default values" +msgstr "設定預設值" + +#: tfmmcx.mcxdodeleteitem.caption +msgctxt "tfmmcx.mcxdodeleteitem.caption" +msgid "Delete" +msgstr "刪除" + +#: tfmmcx.mcxdodeleteitem.hint +msgid "Delete selected task" +msgstr "刪除選定任務" + +#: tfmmcx.mcxdodownloadmask.caption +msgid "Download volume labels (*_vol.nii)" +msgstr "下載體積標籤 (*_vol.nii)" + +#: tfmmcx.mcxdodownloadmask.hint +msgctxt "tfmmcx.mcxdodownloadmask.hint" +msgid "_vol.nii" +msgstr "_vol.nii" + +#: tfmmcx.mcxdodownloadmc2.caption +msgid "Download fluence" +msgstr "下載通量" + +#: tfmmcx.mcxdodownloadmch.caption +msgid "Download detected photon data (*.mch)" +msgstr "下載檢測光子資料 (*.mch)" + +#: tfmmcx.mcxdodownloadmch.hint +msgid ".mch" +msgstr ".mch" + +#: tfmmcx.mcxdoexit.caption +msgctxt "tfmmcx.mcxdoexit.caption" +msgid "Exit" +msgstr "結束" + +#: tfmmcx.mcxdoexit.hint +msgid "Exit MCX Studio" +msgstr "結束光子工作室" + +#: tfmmcx.mcxdohelp.caption +msgctxt "tfmmcx.mcxdohelp.caption" +msgid "Help" +msgstr "說明" + +#: tfmmcx.mcxdohelp.hint +msgctxt "tfmmcx.mcxdohelp.hint" +msgid "Browse help information" +msgstr "瀏覽說明資訊" + +#: tfmmcx.mcxdohelpoptions.caption +msgid "Options" +msgstr "選項" + +#: tfmmcx.mcxdohelpoptions.hint +msgid "List command line options" +msgstr "列出命令列選項" + +#: tfmmcx.mcxdoopen.caption +msgid "Open" +msgstr "開啟" + +#: tfmmcx.mcxdoopen.hint +msgid "Open a project or volume file" +msgstr "開啟專案或體積檔案" + +#: tfmmcx.mcxdopaste.caption +msgid "Paste session from clipboard" +msgstr "從剪貼簿貼上工作階段" + +#: tfmmcx.mcxdoplotjnifti.caption +msgid "Plot fluence (jnii)" +msgstr "繪製通量 (jnii)" + +#: tfmmcx.mcxdoplotjnifti.hint +msgid ".jnii" +msgstr ".jnii" + +#: tfmmcx.mcxdoplotmc2.caption +msgid "Plot fluence (mc2)" +msgstr "繪製通量 (mc2)" + +#: tfmmcx.mcxdoplotmc2.hint +msgid ".mc2" +msgstr ".mc2" + +#: tfmmcx.mcxdoplotmesh.caption +msgid "Plot mesh" +msgstr "繪製網格" + +#: tfmmcx.mcxdoplotnifty.caption +msgid "Plot fluence (nii)" +msgstr "繪製通量 (nii)" + +#: tfmmcx.mcxdoplotnifty.hint +msgid ".nii" +msgstr ".nii" + +#: tfmmcx.mcxdoplotvol.caption +msgid "Plot Volume" +msgstr "繪製體積" + +#: tfmmcx.mcxdoplotvol.hint +msgctxt "tfmmcx.mcxdoplotvol.hint" +msgid "_vol.nii" +msgstr "_vol.nii" + +#: tfmmcx.mcxdoquery.caption +msgid "GPU" +msgstr "GPU" + +#: tfmmcx.mcxdoquery.hint +msgid "List GPU Info" +msgstr "列出GPU資訊" + +#: tfmmcx.mcxdorun.caption +msgctxt "tfmmcx.mcxdorun.caption" +msgid "Run" +msgstr "執行" + +#: tfmmcx.mcxdorun.hint +msgid "Run selected task" +msgstr "執行選定任務" + +#: tfmmcx.mcxdorunall.caption +msgid "Run All" +msgstr "全部執行" + +#: tfmmcx.mcxdorunall.hint +msgid "Run all tasks" +msgstr "執行所有任務" + +#: tfmmcx.mcxdosave.caption +msgid "Save" +msgstr "儲存" + +#: tfmmcx.mcxdosave.hint +msgid "Save tasks to a project file" +msgstr "將任務儲存到專案檔案" + +#: tfmmcx.mcxdostop.caption +msgid "Stop" +msgstr "停止" + +#: tfmmcx.mcxdostop.hint +msgid "Terminate current task" +msgstr "終止目前任務" + +#: tfmmcx.mcxdotoggleview.caption +msgid "Toggle View" +msgstr "切換檢視" + +#: tfmmcx.mcxdoverify.caption +msgid "Verify" +msgstr "驗證" + +#: tfmmcx.mcxdoverify.hint +msgid "Verify parameters" +msgstr "驗證參數" + +#: tfmmcx.mcxdoweb.caption +msgid "Web" +msgstr "網頁" + +#: tfmmcx.mcxdoweb.hint +msgid "MCX homepage" +msgstr "MCX首頁" + +#: tfmmcx.mcxsetcurrent.caption +msgid "mcxSetCurrent" +msgstr "mcxSetCurrent" + +#: tfmmcx.menuitem1.caption +msgid "File" +msgstr "檔案" + +#: tfmmcx.menuitem11.caption +msgid "Settings" +msgstr "設定" + +#: tfmmcx.menuitem2.caption +msgctxt "tfmmcx.menuitem2.caption" +msgid "Run" +msgstr "執行" + +#: tfmmcx.menuitem22.caption +msgid "Open output folder" +msgstr "開啟輸出資料夾" + +#: tfmmcx.menuitem24.caption +msgid "Plot volume (_vol.nii)" +msgstr "繪製體積 (_vol.nii)" + +#: tfmmcx.menuitem28.caption +msgid "Download fluence (mc2/nii/hdr/img)" +msgstr "下載通量 (mc2/nii/hdr/img)" + +#: tfmmcx.menuitem3.caption +msgid "Tools" +msgstr "工具" + +#: tfmmcx.menuitem31.caption +msgid "Download detected photon data (mch)" +msgstr "下載檢測光子資料 (mch)" + +#: tfmmcx.menuitem32.caption +msgid "Download volume mask (_vol.nii)" +msgstr "下載體積遮罩 (_vol.nii)" + +#: tfmmcx.menuitem35.caption +msgid "MCX Documentation" +msgstr "MCX文件" + +#: tfmmcx.menuitem35.hint +msgid "https://mcx.space/wiki/?Learn#mcx" +msgstr "https://mcx.space/wiki/?Learn#mcx" + +#: tfmmcx.menuitem36.caption +msgid "MMC Documentation" +msgstr "MMC文件" + +#: tfmmcx.menuitem36.hint +msgid "https://mcx.space/wiki/?Learn#mmc" +msgstr "https://mcx.space/wiki/?Learn#mmc" + +#: tfmmcx.menuitem37.caption +msgid "MCX-CL Documentation" +msgstr "MCX-CL文件" + +#: tfmmcx.menuitem37.hint +msgid "https://mcx.space/wiki/?Learn#mcxcl" +msgstr "https://mcx.space/wiki/?Learn#mcxcl" + +#: tfmmcx.menuitem39.caption +msgid "MCX/MCXCL User Forum (mcx-users)" +msgstr "MCX/MCXCL使用者論壇 (mcx-users)" + +#: tfmmcx.menuitem39.hint +msgid "https://groups.google.com/forum/?hl=en#!forum/mcx-users" +msgstr "https://groups.google.com/forum/?hl=en#!forum/mcx-users" + +#: tfmmcx.menuitem4.caption +msgctxt "tfmmcx.menuitem4.caption" +msgid "Help" +msgstr "說明" + +#: tfmmcx.menuitem40.caption +msgid "MMC User Forum (mmc-users)" +msgstr "MMC使用者論壇 (mmc-users)" + +#: tfmmcx.menuitem40.hint +msgid "https://groups.google.com/forum/?hl=en#!forum/mmc-users" +msgstr "https://groups.google.com/forum/?hl=en#!forum/mmc-users" + +#: tfmmcx.menuitem41.caption +msgid "Iso2Mesh User Forum (iso2mesh-users)" +msgstr "Iso2Mesh使用者論壇 (iso2mesh-users)" + +#: tfmmcx.menuitem41.hint +msgid "https://groups.google.com/forum/?hl=en#!forum/iso2mesh-users" +msgstr "https://groups.google.com/forum/?hl=en#!forum/iso2mesh-users" + +#: tfmmcx.menuitem43.caption +msgid "Download Nightly-Build" +msgstr "下載夜間建置" + +#: tfmmcx.menuitem43.hint +msgid "https://mcx.space/nightly/" +msgstr "https://mcx.space/nightly/" + +#: tfmmcx.menuitem45.caption +msgid "MCX Github" +msgstr "MCX Github" + +#: tfmmcx.menuitem45.hint +msgid "https://github.com/fangq/mcx" +msgstr "https://github.com/fangq/mcx" + +#: tfmmcx.menuitem46.caption +msgid "MMC Github" +msgstr "MMC Github" + +#: tfmmcx.menuitem46.hint +msgid "https://github.com/fangq/mmc" +msgstr "https://github.com/fangq/mmc" + +#: tfmmcx.menuitem47.caption +msgid "MCX-CL Github" +msgstr "MCX-CL Github" + +#: tfmmcx.menuitem47.hint +msgid "https://github.com/fangq/mcxcl" +msgstr "https://github.com/fangq/mcxcl" + +#: tfmmcx.menuitem49.caption +msgid "Report MCX Issues" +msgstr "回報MCX問題" + +#: tfmmcx.menuitem49.hint +msgid "https://github.com/fangq/mcx/issues" +msgstr "https://github.com/fangq/mcx/issues" + +#: tfmmcx.menuitem50.caption +msgid "Report MMC Issues" +msgstr "回報MMC問題" + +#: tfmmcx.menuitem50.hint +msgid "https://github.com/fangq/mmc/issues" +msgstr "https://github.com/fangq/mmc/issues" + +#: tfmmcx.menuitem51.caption +msgid "Report MCX-CL Issues" +msgstr "回報MCX-CL問題" + +#: tfmmcx.menuitem51.hint +msgid "https://github.com/fangq/mcxcl/issues" +msgstr "https://github.com/fangq/mcxcl/issues" + +#: tfmmcx.menuitem53.caption +msgid "MCX GPU Speed Benchmark Database" +msgstr "MCX GPU速度基準資料庫" + +#: tfmmcx.menuitem53.hint +msgid "https://mcx.space/gpubench/" +msgstr "https://mcx.space/gpubench/" + +#: tfmmcx.menuitem55.caption +msgid "Refereces" +msgstr "參考資料" + +#: tfmmcx.menuitem56.caption +msgid "[Fang2009] Original MCX Paper" +msgstr "[Fang2009] 原始MCX論文" + +#: tfmmcx.menuitem56.hint +msgid "http://www.osapublishing.org/oe/abstract.cfm?uri=oe-17-22-20178" +msgstr "http://www.osapublishing.org/oe/abstract.cfm?uri=oe-17-22-20178" + +#: tfmmcx.menuitem57.caption +msgid "[Fang2010] Original MMC Paper" +msgstr "[Fang2010] 原始MMC論文" + +#: tfmmcx.menuitem57.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-1-1-165" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-1-1-165" + +#: tfmmcx.menuitem58.caption +msgid "[Yu2018] Original MCX-CL Paper" +msgstr "[Yu2018] 原始MCX-CL論文" + +#: tfmmcx.menuitem58.hint +msgid "https://www.spiedigitallibrary.org/journals/journal-of-biomedical-optics/volume-23/issue-01/010504/Scalable-and-massively-parallel-Monte-Carlo-photon-transport-simulations-for/10.1117/1.JBO.23.1.010504.full?SSO=1#ArticleLink" +msgstr "https://www.spiedigitallibrary.org/journals/journal-of-biomedical-optics/volume-23/issue-01/010504/Scalable-and-massively-parallel-Monte-Carlo-photon-transport-simulations-for/10.1117/1.JBO.23.1.010504.full?SSO=1#ArticleLink" + +#: tfmmcx.menuitem59.caption +msgid "[Fang2011] MMC ray-tracing comparison" +msgstr "[Fang2011] MMC射線追蹤比較" + +#: tfmmcx.menuitem59.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-2-5-1258" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-2-5-1258" + +#: tfmmcx.menuitem60.caption +msgid "[Fang2012] SIMD MMC" +msgstr "[Fang2012] SIMD MMC" + +#: tfmmcx.menuitem60.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-3-12-3223" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-3-12-3223" + +#: tfmmcx.menuitem61.caption +msgid "[Yao2016] Widefield MMC" +msgstr "[Yao2016] 寬場MMC" + +#: tfmmcx.menuitem61.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-7-1-171" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-7-1-171" + +#: tfmmcx.menuitem62.caption +msgid "[Yao2018] Jacobians with photon replay" +msgstr "[Yao2018] 光子重播雅可比矩陣" + +#: tfmmcx.menuitem62.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-9-10-4588" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-9-10-4588" + +#: tfmmcx.menuitem63.caption +msgid "[Yan2019] Dual-grid MMC" +msgstr "[Yan2019] 雙網格MMC" + +#: tfmmcx.menuitem63.hint +msgid "https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fdx.doi.org%2F10.1117%2F1.JBO.24.2.020503&data=02%7C01%7Cq.fang%40northeastern.edu%7Cbb8daa56735543068b9c08d697592492%7Ca8eec281aaa34daeac9b9a398b9215e7%7C0%7C0%7C636862806460866013&sdata=2dWyN3eVPwwymydjXEWIHBfVZI43Fcl5zuZ8wiaJ10k%3D&reserved=0" +msgstr "https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fdx.doi.org%2F10.1117%2F1.JBO.24.2.020503&data=02%7C01%7Cq.fang%40northeastern.edu%7Cbb8daa56735543068b9c08d697592492%7Ca8eec281aaa34daeac9b9a398b9215e7%7C0%7C0%7C636862806460866013&sdata=2dWyN3eVPwwymydjXEWIHBfVZI43Fcl5zuZ8wiaJ10k%3D&reserved=0" + +#: tfmmcx.menuitem64.caption +msgid "MCX Main Web" +msgstr "MCX主網站" + +#: tfmmcx.menuitem66.caption +msgid "Table of all input flags" +msgstr "所有輸入旗標表" + +#: tfmmcx.menuitem66.hint +msgid "http://bit.ly/2K0rG4R " +msgstr "http://bit.ly/2K0rG4R " + +#: tfmmcx.menuitem69.caption +msgid "[Fang2019] GPU MMC" +msgstr "[Fang2019] GPU MMC" + +#: tfmmcx.menuitem69.hint +msgid "http://dx.doi.org/10.1117/1.JBO.24.11.115002" +msgstr "http://dx.doi.org/10.1117/1.JBO.24.11.115002" + +#: tfmmcx.menuitem70.caption +msgid "[Brain2Mesh2020] Brain2Mesh brain meshing toolbox" +msgstr "[Brain2Mesh2020] Brain2Mesh腦網格化工具箱" + +#: tfmmcx.menuitem70.hint +msgid "https://doi.org/10.1117/1.NPh.7.1.015008" +msgstr "https://doi.org/10.1117/1.NPh.7.1.015008" + +#: tfmmcx.menuitem71.caption +msgid "[Yuan2020] PBM over lifespan" +msgstr "[Yuan2020] 生命週期PBM" + +#: tfmmcx.menuitem71.hint +msgid "https://doi.org/10.1117/1.NPh.7.1.015009" +msgstr "https://doi.org/10.1117/1.NPh.7.1.015009" + +#: tfmmcx.menuitem72.caption +msgid "[Yuan2021] Implicit MMC (iMMC)" +msgstr "[Yuan2021] 隱式MMC (iMMC)" + +#: tfmmcx.menuitem72.hint +msgid "https://www.osapublishing.org/boe/fulltext.cfm?uri=boe-12-1-147" +msgstr "https://www.osapublishing.org/boe/fulltext.cfm?uri=boe-12-1-147" + +#: tfmmcx.menuitem73.caption +msgid "[Yan2020] SVMC hybrid method" +msgstr "[Yan2020] SVMC混合方法" + +#: tfmmcx.menuitem73.hint +msgid "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-11-11-6262" +msgstr "https://www.osapublishing.org/boe/abstract.cfm?uri=boe-11-11-6262" + +#: tfmmcx.menuitem76.caption +msgid "Open Volume Viewer" +msgstr "開啟體積檢視器" + +#: tfmmcx.menuitem9.caption +msgctxt "tfmmcx.menuitem9.caption" +msgid "Volume Designer" +msgstr "體積設計器" + +#: tfmmcx.miclearlog.caption +msgid "Clear Log" +msgstr "清除記錄" + +#: tfmmcx.micopy.caption +msgid "Copy selected" +msgstr "複製選定" + +#: tfmmcx.miexportjson.caption +msgid "Export self-contained JSON input file" +msgstr "匯出獨立的JSON輸入檔案" + +#: tfmmcx.miusematlab.caption +msgid "Print MATLAB plotting commands only" +msgstr "僅列印MATLAB繪圖指令" + +#: tfmmcx.openhistoryfile.title +msgctxt "tfmmcx.openhistoryfile.title" +msgid "Open Photon History File (*.mch)" +msgstr "開啟光子歷史檔案 (*.mch)" + +#: tfmmcx.openproject.title +msgid "Open existing project" +msgstr "開啟現有專案" + +#: tfmmcx.openvolume.title +msgctxt "tfmmcx.openvolume.title" +msgid "Open Photon History File (*.mch)" +msgstr "開啟光子歷史檔案 (*.mch)" + +#: tfmmcx.rbusebench.caption +msgid "Built-in" +msgstr "內建" + +#: tfmmcx.rbusedesigner.caption +msgid "User-defined »" +msgstr "使用者定義 »" + +#: tfmmcx.rbusefile.caption +msgid "Use Input File (-f)" +msgstr "使用輸入檔案 (-f)" + +#: tfmmcx.saveproject.title +msgid "Save project as" +msgstr "另存專案為" + +#: tfmmcx.sbinfo.panels[0].text +msgid "Status: idle" +msgstr "狀態:閒置" + +#: tfmmcx.sgconfig.columns[0].title.caption +msgctxt "tfmmcx.sgconfig.columns[0].title.caption" +msgid "Value" +msgstr "值" + +#: tfmmcx.sgconfig.hint +msgid "MCXConfig \n\nThis defines the remaining key parameters used in an MCX/MMC\nsimulation.\n" +msgstr "MCXConfig\n\n這定義了MCX/MMC模擬中使用的其餘關鍵參數。\n" + +#: tfmmcx.sgdet.hint +msgid "DetectorCfg \n\nThis table defines all detectors in the domain. \n\nPlease note that currently MCX/MMC only supports spherical detectors,\ndefined by the [x,y,z] center position and radius (radius).\n\nPlease also note that photon detection only happens before a photon is\nterminated, i.e. when it escapes the exterior bounding box or moving from\na non-zero voxel to a zero voxel. Therefore, a detector's aperature is the\nactual bounding box surface or the surface of the non-zero voxels truncated\nby a sphere centered at [x,y,z] with raidus r.\n\nDetector position is sensitive to the \"Origin from [0 0 0] -z\" flag.\n" +msgstr "DetectorCfg\n\n此表定義域中的所有檢測器。\n\n請注意,目前MCX/MMC僅支援球形檢測器,由[x,y,z]中心位置和半徑定義。\n\n還請注意,光子檢測僅在光子終止之前發生,即當它逸出外部邊界框或從非零體素移動到零體素時。因此,檢測器的孔徑是實際邊界框表面或被以[x,y,z]為中心、半徑為r的球體截斷的非零體素表面。\n\n檢測器位置對\"原點從[0 0 0] -z\"旗標敏感。\n" + +#: tfmmcx.sgmedia.columns[0].title.caption +msgid "μa (1/mm)" +msgstr "μa (1/mm)" + +#: tfmmcx.sgmedia.columns[1].title.caption +msgid "μs (1/mm)" +msgstr "μs (1/mm)" + +#: tfmmcx.sgmedia.columns[2].title.caption +msgid "g (anisotropy)" +msgstr "g (各向異性)" + +#: tfmmcx.sgmedia.columns[3].title.caption +msgid "n (reflective index)" +msgstr "n (折射率)" + +#: tfmmcx.sgmedia.hint +msgid "MediaCfg \n\nThis table defines the optical properties for all needed tissue labels.\n\nThe first row (label 0) is reserved for the background medium - which includes\nthe space outside the bounding box of the volume, as well as any voxels with\na zero-value.\n\nOne can select a row and copy/paste to other rows.\n\nIf more labels are needed, move to the bottom of the table, and press \"down\"\narrow key to create a new row below.\n" +msgstr "MediaCfg\n\n此表定義所有所需組織標籤的光學特性。\n\n第一列(標籤0)保留給背景介質 - 包括體積邊界框外的空間,以及任何零值體素。\n\n可以選擇一列並複製/貼上到其他列。\n\n如果需要更多標籤,移動到表格的底部,按\"向下\"箭頭鍵在下方建立新列。\n" + +#: tfmmcx.shapeaddbox.caption +msgid "Box" +msgstr "盒子" + +#: tfmmcx.shapeaddbox.hint +msgid "Add a 3D box (using the center of the voxels - i.e. add 0.5 in all directions)" +msgstr "新增3D盒子(使用體素的中心 - 即在所有方向上加0.5)" + +#: tfmmcx.shapeaddcylinder.caption +msgid "Cylinder" +msgstr "圓柱" + +#: tfmmcx.shapeaddcylinder.hint +msgid "Add a cylinder" +msgstr "新增圓柱" + +#: tfmmcx.shapeaddgrid.caption +msgid "Grid" +msgstr "網格" + +#: tfmmcx.shapeaddgrid.hint +msgid "Define a uniform grid as the simulation space" +msgstr "定義均勻網格作為模擬空間" + +#: tfmmcx.shapeaddname.caption +msgid "Name" +msgstr "名稱" + +#: tfmmcx.shapeaddname.hint +msgid "Define a name for the domain" +msgstr "為域定義名稱" + +#: tfmmcx.shapeaddorigin.caption +msgid "Origin" +msgstr "原點" + +#: tfmmcx.shapeaddorigin.hint +msgid "Define the origin for subsequent objects" +msgstr "為後續物件定義原點" + +#: tfmmcx.shapeaddsphere.caption +msgid "Sphere" +msgstr "球體" + +#: tfmmcx.shapeaddsphere.hint +msgid "Add a 3D sphere" +msgstr "新增3D球體" + +#: tfmmcx.shapeaddsubgrid.caption +msgid "Subgrid" +msgstr "子網格" + +#: tfmmcx.shapeaddsubgrid.hint +msgid "Add a 3D box (using the lower-corner of the voxel)" +msgstr "新增3D盒子(使用體素的下角)" + +#: tfmmcx.shapeaddupperspace.caption +msgid "Upper" +msgstr "上部" + +#: tfmmcx.shapeaddupperspace.hint +msgid "Add an upper-space defined by a linear inequality" +msgstr "新增由線性不等式定義的上部空間" + +#: tfmmcx.shapeaddxlayers.caption +msgid "XLayers" +msgstr "X層" + +#: tfmmcx.shapeaddxlayers.hint +msgid "Add a layered structure along x-axis" +msgstr "沿x軸新增分層結構" + +#: tfmmcx.shapeaddxslabs.caption +msgid "XSlabs" +msgstr "X板" + +#: tfmmcx.shapeaddxslabs.hint +msgid "Add a slab along x-axis" +msgstr "沿x軸新增板" + +#: tfmmcx.shapeaddylayers.caption +msgid "YLayers" +msgstr "Y層" + +#: tfmmcx.shapeaddylayers.hint +msgid "Add a layered structure along y-axis" +msgstr "沿y軸新增分層結構" + +#: tfmmcx.shapeaddyslabs.caption +msgid "YSlabs" +msgstr "Y板" + +#: tfmmcx.shapeaddyslabs.hint +msgid "Add a slab along y-axis" +msgstr "沿y軸新增板" + +#: tfmmcx.shapeaddzlayers.caption +msgid "ZLayers" +msgstr "Z層" + +#: tfmmcx.shapeaddzlayers.hint +msgid "Add a layered structure along z-axis" +msgstr "沿z軸新增分層結構" + +#: tfmmcx.shapeaddzslabs.caption +msgid "ZSlabs" +msgstr "Z板" + +#: tfmmcx.shapeaddzslabs.hint +msgid "Add a slab along z-axis" +msgstr "沿z軸新增板" + +#: tfmmcx.shapedelete.caption +msgctxt "tfmmcx.shapedelete.caption" +msgid "Delete" +msgstr "刪除" + +#: tfmmcx.shapedelete.hint +msgid "Delete selected object" +msgstr "刪除選定物件" + +#: tfmmcx.shapeedit.caption +msgid "Edit" +msgstr "編輯" + +#: tfmmcx.shapepreview.caption +msgctxt "tfmmcx.shapepreview.caption" +msgid "Preview" +msgstr "預覽" + +#: tfmmcx.shapepreview.hint +msgctxt "tfmmcx.shapepreview.hint" +msgid "Preview" +msgstr "預覽" + +#: tfmmcx.shapeprint.caption +msgid "Print" +msgstr "列印" + +#: tfmmcx.shapeprint.hint +msgid "Print selected object" +msgstr "列印選定物件" + +#: tfmmcx.shapereset.caption +msgctxt "tfmmcx.shapereset.caption" +msgid "Reset" +msgstr "重設" + +#: tfmmcx.shapereset.hint +msgid "Reset to a 60x60x60 homogeneous cubic domain" +msgstr "重設為60x60x60均勻立方域" + +#: tfmmcx.statictext1.caption +msgid "Additional Settings" +msgstr "附加設定" + +#: tfmmcx.statictext2.caption +msgid "Media Settings" +msgstr "介質設定" + +#: tfmmcx.statictext3.caption +msgid "Detector Settings (in voxel unit)" +msgstr "檢測器設定(以體素為單位)" + +#: tfmmcx.tabinputdata.caption +msgid "Simulation Designer" +msgstr "模擬設計器" + +#: tfmmcx.tabvolumedesigner.caption +msgctxt "tfmmcx.tabvolumedesigner.caption" +msgid "Volume Designer" +msgstr "體積設計器" + +#: tfmmcx.tbtverify.caption +msgid "Validate" +msgstr "驗證" + +#: tfmmcx.toolbar1.caption +msgid "MCX Ribon" +msgstr "MCX功能區" + +#: tfmmcx.toolbar2.caption +msgid "ToolBar2" +msgstr "ToolBar2" + +#: tfmmcx.toolbar3.caption +msgid "ToolBar3" +msgstr "ToolBar3" + +#: tfmmcx.toolbutton11.caption +msgid "Plot ▾" +msgstr "繪製 ▾" + +#: tfmmcx.toolbutton11.hint +msgid "Plot MCX output data" +msgstr "繪製MCX輸出資料" + +#: tfmmcx.toolbutton12.caption +msgid "ToolButton12" +msgstr "ToolButton12" + +#: tfmmcx.toolbutton13.caption +msgid "ToolButton13" +msgstr "ToolButton13" + +#: tfmmcx.toolbutton17.caption +msgid "ToolButton17" +msgstr "ToolButton17" + +#: tfmmcx.toolbutton35.caption +msgid "ToolButton35" +msgstr "ToolButton35" + +#: tfmmcx.toolbutton39.hint +msgid "Reset volume and define a different dimension" +msgstr "重設體積並定義不同的維度" + +#: tfmmcx.toolbutton5.caption +msgid "ToolButton5" +msgstr "ToolButton5" + +#: tfmmcx.toolbutton7.caption +msgctxt "tfmmcx.toolbutton7.caption" +msgid "Reset" +msgstr "重設" + +#: tfmmcx.toolbutton8.caption +msgctxt "tfmmcx.toolbutton8.caption" +msgid "ToolButton8" +msgstr "ToolButton8" + +#: tfmmcx.toolbutton9.caption +msgid "Help ▾" +msgstr "說明 ▾" + +#: tfmmcx.toolbutton9.hint +msgctxt "tfmmcx.toolbutton9.hint" +msgid "Browse help information" +msgstr "瀏覽說明資訊" + +#: tfmmcx.tvshapes.hint +msgctxt "tfmmcx.tvshapes.hint" +msgid "ShapeCfg" +msgstr "ShapeCfg" + +#: tfmmcx.vlbc.hint +msgid "Boundary \n\nUsing this box to set the boundary condition for each one of the 6\nfacets on the bounding box. A total of 4 boundary conditions are\nsupported:\n\n1. total absorbing BC: photon hiting the boundary are terminated\n2. Fresnel reflection BC: perform Fresnel reflection/transmission\n3. mirror/total reflection BC: photon is 100% reflected (can run a long time)\n4. cylic BC: a photon exiting from a facet will re-enter from the opposite one\n" +msgstr "Boundary\n\n使用此框為邊界框上6個面中的每一個設定邊界條件。總共支援4種邊界條件:\n\n1. 全吸收BC:撞擊邊界的光子被終止\n2. 菲涅爾反射BC:執行菲涅爾反射/透射\n3. 鏡面/全反射BC:光子100%反射(可能執行很長時間)\n4. 循環BC:從一個面退出的光子將從相對面重新進入\n" + +#: tfmnewsession.btcancel.caption +msgctxt "tfmnewsession.btcancel.caption" +msgid "Cancel" +msgstr "取消" + +#: tfmnewsession.btok.caption +msgctxt "tfmnewsession.btok.caption" +msgid "OK" +msgstr "確定" + +#: tfmnewsession.caption +msgid "Create A New Simulation" +msgstr "建立新模擬" + +#: tfmnewsession.edsession.hint +msgctxt "tfmnewsession.edsession.hint" +msgid "Session" +msgstr "Session" + +#: tfmnewsession.grprogram.caption +msgctxt "tfmnewsession.grprogram.caption" +msgid "Run Monte Carlo simulation with" +msgstr "執行蒙地卡羅模擬使用" + +#: tfmnewsession.grprogram.hint +msgid "Program" +msgstr "程式" + +#: tfmnewsession.label4.caption +msgid "Please type in a unique session name" +msgstr "請輸入唯一的工作階段名稱" + +#: tfmnewsession.label4.hint +msgctxt "tfmnewsession.label4.hint" +msgid "-s (--sessionid)" +msgstr "-s (--sessionid)" + +#: tfmshapeeditor.btcancel.caption +msgctxt "tfmshapeeditor.btcancel.caption" +msgid "Cancel" +msgstr "取消" + +#: tfmshapeeditor.btok.caption +msgctxt "tfmshapeeditor.btok.caption" +msgid "OK" +msgstr "確定" + +#: tfmshapeeditor.caption +msgid "Edit Shapes" +msgstr "編輯形狀" + +#: tfmsource.btcancel.caption +msgctxt "tfmsource.btcancel.caption" +msgid "Cancel" +msgstr "取消" + +#: tfmsource.btok.caption +msgctxt "tfmsource.btok.caption" +msgid "OK" +msgstr "確定" + +#: tfmsource.caption +msgid "Light Source Settings" +msgstr "光源設定" + +#: tfmsource.edsource.text +msgid "pencil" +msgstr "鉛筆" + +#: tfmsource.label4.caption +msgid "Please select a light source type:" +msgstr "請選擇光源類型:" + +#: tfmsource.label5.caption +msgid "Please define source parameters:" +msgstr "請定義源參數:" + +#: tfmstop.caption +msgid "Running ..." +msgstr "執行中..." + +#: tfmstop.toolbar1.caption +msgid "Running" +msgstr "執行中" + +#: tfmstop.toolbutton3.caption +msgid "Hide" +msgstr "隱藏" + +#: tfmstop.toolbutton3.hint +msgid "Hide this window" +msgstr "隱藏此視窗" + +#: tfmstop.toolbutton8.caption +msgctxt "tfmstop.toolbutton8.caption" +msgid "ToolButton8" +msgstr "ToolButton8" + +#: tfmviewer.btbackground.hint +msgctxt "tfmviewer.btbackground.hint" +msgid "Change Background Color" +msgstr "變更背景顏色" + +#: tfmviewer.btopaque.caption +msgid "btOpaque" +msgstr "btOpaque" + +#: tfmviewer.btopaque.hint +msgid "Show Opaque Hull" +msgstr "顯示不透明外殼" + +#: tfmviewer.caption +msgid "MCX Studio Volume Renderer" +msgstr "光子工作室體積算繪器" + +#: tfmviewer.grdir.caption +msgid "Slicing direction" +msgstr "切片方向" + +#: tfmviewer.label1.caption +msgid "Rendering quality" +msgstr "算繪品質" + +#: tfmviewer.label2.caption +msgid "Cutting plane position:" +msgstr "切割平面位置:" + +#: tfmviewer.label3.caption +msgid "Invisible threshold" +msgstr "不可見閾值" + +#: tfmviewer.label4.caption +msgid "Color level" +msgstr "顏色層級" + +#: tfmviewer.mcxplotexit.caption +msgctxt "tfmviewer.mcxplotexit.caption" +msgid "Exit" +msgstr "結束" + +#: tfmviewer.mcxplotexit.hint +msgctxt "tfmviewer.mcxplotexit.hint" +msgid "Exit" +msgstr "結束" + +#: tfmviewer.mcxplotopen.caption +msgid "Open File" +msgstr "開啟檔案" + +#: tfmviewer.mcxplotopen.hint +msgid "Open Data File" +msgstr "開啟資料檔案" + +#: tfmviewer.mcxplotrefresh.caption +msgctxt "tfmviewer.mcxplotrefresh.caption" +msgid "Refresh" +msgstr "重新整理" + +#: tfmviewer.mcxplotrefresh.hint +msgctxt "tfmviewer.mcxplotrefresh.hint" +msgid "Refresh" +msgstr "重新整理" + +#: tfmviewer.mcxplotresetcamera.caption +msgctxt "tfmviewer.mcxplotresetcamera.caption" +msgid "Reset" +msgstr "重設" + +#: tfmviewer.mcxplotsavescreen.caption +msgctxt "tfmviewer.mcxplotsavescreen.caption" +msgid "Save Screen" +msgstr "儲存螢幕" + +#: tfmviewer.mcxplotsavescreen.hint +msgid "Save screenshot" +msgstr "儲存螢幕截圖" + +#: tfmviewer.mcxplotshowbbx.caption +msgctxt "tfmviewer.mcxplotshowbbx.caption" +msgid "Show Bounding Box" +msgstr "顯示邊界框" + +#: tfmviewer.mcxplotshowbbx.hint +msgctxt "tfmviewer.mcxplotshowbbx.hint" +msgid "Show Bounding Box" +msgstr "顯示邊界框" + +#: tfmviewer.mcxplotusecolor.caption +msgid "Pseudocolor" +msgstr "偽彩色" + +#: tfmviewer.mcxplotusecolor.hint +msgid "Use Pseudocolor" +msgstr "使用偽彩色" + +#: tfmviewer.toolbar1.caption +msgctxt "tfmviewer.toolbar1.caption" +msgid "ToolBar1" +msgstr "ToolBar1" + +#: tfmviewer.toolbutton10.caption +msgid "ToolButton10" +msgstr "ToolButton10" + +#: tfmviewer.toolbutton4.hint +msgid "Reset 3D View" +msgstr "重設3D檢視" + +#: tfmviewer.toolbutton9.caption +msgctxt "tfmviewer.toolbutton9.caption" +msgid "ToolButton9" +msgstr "ToolButton9" \ No newline at end of file diff --git a/mcxstudio/locale/mcxstudio.de.mo b/mcxstudio/locale/mcxstudio.de.mo new file mode 100644 index 00000000..2804c4df Binary files /dev/null and b/mcxstudio/locale/mcxstudio.de.mo differ diff --git a/mcxstudio/locale/mcxstudio.es.mo b/mcxstudio/locale/mcxstudio.es.mo new file mode 100644 index 00000000..e45ba207 Binary files /dev/null and b/mcxstudio/locale/mcxstudio.es.mo differ diff --git a/mcxstudio/locale/mcxstudio.fr.mo b/mcxstudio/locale/mcxstudio.fr.mo new file mode 100644 index 00000000..7295b208 Binary files /dev/null and b/mcxstudio/locale/mcxstudio.fr.mo differ diff --git a/mcxstudio/locale/mcxstudio.it.mo b/mcxstudio/locale/mcxstudio.it.mo new file mode 100644 index 00000000..de1b865b Binary files /dev/null and b/mcxstudio/locale/mcxstudio.it.mo differ diff --git a/mcxstudio/locale/mcxstudio.ja.mo b/mcxstudio/locale/mcxstudio.ja.mo new file mode 100644 index 00000000..a985bef7 Binary files /dev/null and b/mcxstudio/locale/mcxstudio.ja.mo differ diff --git a/mcxstudio/locale/mcxstudio.ko.mo b/mcxstudio/locale/mcxstudio.ko.mo new file mode 100644 index 00000000..21e92dc4 Binary files /dev/null and b/mcxstudio/locale/mcxstudio.ko.mo differ diff --git a/mcxstudio/locale/mcxstudio.pt.mo b/mcxstudio/locale/mcxstudio.pt.mo new file mode 100644 index 00000000..adfeba39 Binary files /dev/null and b/mcxstudio/locale/mcxstudio.pt.mo differ diff --git a/mcxstudio/locale/mcxstudio.zh-cn.mo b/mcxstudio/locale/mcxstudio.zh-cn.mo index b8816b83..b5187284 100644 Binary files a/mcxstudio/locale/mcxstudio.zh-cn.mo and b/mcxstudio/locale/mcxstudio.zh-cn.mo differ diff --git a/mcxstudio/locale/mcxstudio.zh-tw.mo b/mcxstudio/locale/mcxstudio.zh-tw.mo new file mode 100644 index 00000000..1d6ce01b Binary files /dev/null and b/mcxstudio/locale/mcxstudio.zh-tw.mo differ diff --git a/mcxstudio/locale/mcxstudio.zh.mo b/mcxstudio/locale/mcxstudio.zh.mo new file mode 120000 index 00000000..d70660e9 --- /dev/null +++ b/mcxstudio/locale/mcxstudio.zh.mo @@ -0,0 +1 @@ +mcxstudio.zh-cn.mo \ No newline at end of file diff --git a/mcxstudio/mcxabout.lfm b/mcxstudio/mcxabout.lfm index 391187e7..b447e1f4 100644 --- a/mcxstudio/mcxabout.lfm +++ b/mcxstudio/mcxabout.lfm @@ -45,7 +45,7 @@ object fmAbout: TfmAbout BorderStyle = bsNone Font.Color = clWhite Lines.Strings = ( - 'MCXStudio version: v2025.6.pre' + 'MCXStudio version: v2025.9' '' 'Funding Support:' ' This project is funded by the NIH/NIGMS under ' diff --git a/mcxstudio/mcxgui.lfm b/mcxstudio/mcxgui.lfm index 6e10e4aa..3e3932e9 100755 --- a/mcxstudio/mcxgui.lfm +++ b/mcxstudio/mcxgui.lfm @@ -2981,7 +2981,7 @@ object fmMCX: TfmMCX AnchorSideRight.Side = asrBottom Left = 150 Height = 33 - Hint = 'OutputType '#10#10'This option specifies the output data type. '#10#10'* Fluence rate [J/mm^2/s] - the default output'#10'* Fluence [J/mm^2] - the integration of the fluence '#10' rate over each time gate'#10'* Energy density [J/mm^3] - can be computed by multiplying '#10' fluence with absorption μa'#10'* Absorption Jacobian (mua) [1/mm] - in the replay mode, this'#10' outputs the sensitivity matrix for μa;'#10'* Average scattering event count - in the replay mode, this'#10' outputs the number of scattering event per voxel'#10'* Momentum transfer sensivity (DCS) - in the replay mode, this '#10' outputs the momentum transfer contribution/sensitivity from '#10' each voxel.' + Hint = 'OutputType '#10#10'This option specifies the output data type. '#10#10'* Fluence rate [J/mm^2/s] - the default output'#10'* Fluence [J/mm^2] - the integration of the fluence '#10' rate over each time gate'#10'* Energy deposition [J] - can be computed by multiplying '#10' fluence with absorption μa and voxel volume [mm^3]'#10'* Absorption Jacobian (mua) [1/mm] - in the replay mode, this'#10' outputs the sensitivity matrix for μa;'#10'* Average scattering event count - in the replay mode, this'#10' outputs the number of scattering event per voxel'#10'* Momentum transfer sensivity (DCS) - in the replay mode, this '#10' outputs the momentum transfer contribution/sensitivity from '#10' each voxel.' Top = 79 Width = 117 Anchors = [akTop, akLeft, akRight] @@ -2989,7 +2989,7 @@ object fmMCX: TfmMCX Items.Strings = ( 'X - fluence rate in [J/(mm^2s)]' 'F - fluence [J/mm^2]' - 'E - energy density [J/mm^3]' + 'E - per-voxel energy deposition [J]' 'J - jacobian (mua) [1/mm]' 'P - jacobian (scat) [1/mm]' 'M - jacobian (dcs)' @@ -3961,7 +3961,7 @@ object fmMCX: TfmMCX ShowHint = True end object edWorkload: TEdit - AnchorSideLeft.Control = edGPUID + AnchorSideLeft.Control = ckLockGPU AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = Label15 AnchorSideTop.Side = asrBottom diff --git a/mcxstudio/mcxgui.pas b/mcxstudio/mcxgui.pas index f942c1bd..6605bd99 100755 --- a/mcxstudio/mcxgui.pas +++ b/mcxstudio/mcxgui.pas @@ -496,6 +496,7 @@ TfmMCX = class(TForm) CurrentSession: TListItem; BCItemProp: TItemProp; UseUserFolder: Boolean; + DefaultLang: string; implementation @@ -848,6 +849,10 @@ procedure TfmMCX.mcxdoDefaultExecute(Sender: TObject); ckSpecular.Checked:=false; edWorkLoad.Text:='100'; edMoreParam.Text:=''; + if(Length(DefaultLang) > 0) then begin + edMoreParam.Text:='--lang ' + DefaultLang; + end; + edUnitInMM.Text:='1'; ckSharedFS.Checked:=false; if not (ckLockGPU.Checked) then begin @@ -1803,6 +1808,10 @@ procedure TfmMCX.FormCreate(Sender: TObject); ForceDirectories(workdir); if(not DirectoryExists(workdir)) then UseUserFolder:=true; + + DefaultLang := 'en'; + if(Application.HasOption('l','lang')) then + DefaultLang := Application.GetOptionValue('l', 'lang'); end; procedure TfmMCX.FormDestroy(Sender: TObject); diff --git a/pmcx/README.md b/pmcx/README.md index 9a426d3c..446a5764 100644 --- a/pmcx/README.md +++ b/pmcx/README.md @@ -4,7 +4,7 @@ - Copyright: (C) Matin Raayai Ardakani (2022-2023) , Qianqian Fang (2019-2025) , Fan-Yu Yen (2023-2024) - License: GNU Public License V3 or later -- Version: 0.4.1 +- Version: 0.5.1 - URL: https://pypi.org/project/pmcx/ - Github: https://github.com/fangq/mcx @@ -13,7 +13,7 @@ ![Windows Python Module](https://github.com/fangq/mcx/actions/workflows/build_windows_wheel.yml/badge.svg) This module provides a Python binding for Monte Carlo eXtreme (MCX). -For other binaries, including the standalone executable and the MATLAB bindings, see [our website](http://mcx.space). +For other binaries, including the standalone executable and the MATLAB bindings, see [our website](https://mcx.space). Monte Carlo eXtreme (MCX) is a fast photon transport simulation software for 3D heterogeneous turbid media. By taking advantage of the massively parallel @@ -94,10 +94,10 @@ The NVIDIA GPU driver of the target system must support the selected CUDA toolki This can be queried via ```echo $env:PATH``` on Windows or ```echo $PATH``` on Linux. If not, locate them and add their folder to the ```PATH```. 2. Clone the repository and switch to the ```pmcx/``` folder: - ```bash - git clone --recursive https://github.com/fangq/mcx.git - cd mcx/pmcx - ``` +```bash +git clone --recursive https://github.com/fangq/mcx.git +cd mcx/pmcx +``` 3. One can run `python3 setup.py install` or `python3 -m pip install .` to both locally build and install the module diff --git a/pmcx/pmcx/__init__.py b/pmcx/pmcx/__init__.py index 5fd38315..40fccaba 100644 --- a/pmcx/pmcx/__init__.py +++ b/pmcx/pmcx/__init__.py @@ -1,5 +1,5 @@ # Copyright (c) 2022-2023 Matin Raayai Ardakani . All rights reserved. -# Copyright (c) 2022-2023 Qianqian Fang . All rights reserved. +# Copyright (c) 2022-2025 Qianqian Fang . All rights reserved. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -19,6 +19,7 @@ Example usage: # To list available GPUs +import numpy as np import pmcx pmcx.gpuinfo() @@ -44,12 +45,34 @@ getdistance, detphoton, mcxlab, + cwdiffusion, + cwfluxdiffusion, + cwfluencediffusion, + dcsg1, + mcxcreate, + rfreplay, + rfmusreplay, +) + +from .io import ( + loadmc2, + loadmch, + loadfile, + mcx2json, + json2mcx, + loadnii, +) + +from .plot import ( + preview, + plotshapes, + plotphotons, + plotvol, ) -# from .files import loadmc2, loadmch, load, save from .bench import bench -__version__ = "0.4.1" +__version__ = "0.5.1" __all__ = ( "gpuinfo", @@ -66,4 +89,21 @@ "getdistance", "detphoton", "mcxlab", + "cwdiffusion", + "cwfluxdiffusion", + "cwfluencediffusion", + "dcsg1", + "mcxcreate", + "rfreplay", + "rfmusreplay", + "loadmc2", + "loadmch", + "loadfile", + "mcx2json", + "json2mcx", + "loadnii", + "preview", + "plotshapes", + "plotphotons", + "plotvol", ) diff --git a/pmcx/pmcx/io.py b/pmcx/pmcx/io.py new file mode 100644 index 00000000..5ae3768a --- /dev/null +++ b/pmcx/pmcx/io.py @@ -0,0 +1,969 @@ +# Copyright (c) 2023-2025 Qianqian Fang (q.fang neu.edu) +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +"""MCX data file parsing and conversion functions""" + +__all__ = ( + "loadmc2", + "loadmch", + "loadfile", + "mcx2json", + "json2mcx", + "loadnii", +) + +##==================================================================================== +## dependent libraries +##==================================================================================== + +import struct +import os +import re +import warnings +import json +import numpy as np + +##==================================================================================== +## implementation +##==================================================================================== + + +def loadmc2(fname, dim, dataformat="float", offset=None): + """ + data = loadmc2(fname, dim, format) + or + data, dref = loadmc2(fname, dim, format, offset) + + Author: Qianqian Fang (q.fang neu.edu) + Converted to Python + + Parameters: + ----------- + fname : str + The file name to the output .mc2 file + dim : list or tuple + An array to specify the output data dimension + Normally, dim=[nx, ny, nz, nt] + format : str, optional + A string to indicate the format used to save + the .mc2 file; if omitted, it is set to 'float' (default: 'float') + offset : int, optional + Byte offset to start reading from + + Returns: + -------- + data : ndarray + The output MCX solution data array, in the + same dimension specified by dim + dref : ndarray (when requested) + Diffuse reflectance at the surface of the domain. + If this output is not given while diffuse reflectance + is recorded, dref is shown as the negative values in + the data output. + + This file is part of Monte Carlo eXtreme (MCX) + License: GPLv3, see http://mcx.sf.net for details + """ + + # Map MATLAB format strings to NumPy dtypes + format_map = { + "float": np.float32, + "single": np.float32, + "double": np.float64, + "uchar": np.uint8, + "uint8": np.uint8, + "int8": np.int8, + "uint16": np.uint16, + "int16": np.int16, + "uint32": np.uint32, + "int32": np.int32, + "uint64": np.uint64, + "int64": np.int64, + } + + # Handle MATLAB-style format strings (e.g., 'uchar=>uchar', 'float=>float') + if "=>" in dataformat: + dataformat = dataformat.split("=>")[0] # Use the input format part + + if dataformat not in format_map: + raise ValueError(f"Unsupported format: {dataformat}") + + dtype = format_map[dataformat] + + # Open file and read data + try: + fid = open(fname, "rb") + except IOError: + raise IOError("can not open the specified file") + + if offset is not None: + fid.seek(offset, 0) # 0 corresponds to 'bof' (beginning of file) + + # Read all data from file + file_data = fid.read() + data = np.frombuffer(file_data, dtype=dtype) + fid.close() + + # Reshape data according to specified dimensions + data = data.reshape(dim) + + return data + + +def loadmch(fname, dataformat="float32", endian="little"): + """ + data, header = loadmch(fname, format, endian) + + Author: Qianqian Fang (q.fang neu.edu) + Converted to Python + + Parameters: + ----------- + fname : str + The file name to the output .mch file + format : str, optional + A string to indicate the format used to save + the .mch file; if omitted, it is set to 'float32' (default: 'float32') + endian : str, optional + Specifying the endianness of the binary file + can be either 'big' or 'little' (default: 'little') + + Returns: + -------- + data : ndarray + The output detected photon data array + data has at least M*2+2 columns (M=header.medium), the first column is the + ID of the detector; columns 2 to M+1 store the number of + scattering events for every tissue region; the following M + columns are the partial path lengths (in mm) for each medium type; + the last column is the initial weight at launch time of each detected + photon; when the momentum transfer is recorded, M columns of + momentum transfer for each medium is inserted after the partial path; + when the exit photon position/dir are recorded, 6 additional columns + are inserted before the last column, first 3 columns represent the + exiting position (x/y/z); the next 3 columns are the dir vector (vx/vy/vz). + in polarized photon simulation, the last 4 columns are the exit Stokes vector. + in other words, data is stored in the follow format + [detid(1) nscat(M) ppath(M) mom(M) p(3) v(3) w0(1) s(4)] + headerstruct : dict + File header info, a dict has the following fields + [version,medianum,detnum,recordnum,totalphoton,detectedphoton, + savedphoton,lengthunit,seedbyte,normalizer,respin,srcnum,savedetflag,totalsource] + photonseed : ndarray (optional) + If the mch file contains a seed section, this + returns the seed data for each detected photon. Each row of + photonseed is a byte array, which can be used to initialize a + seeded simulation. Note that the seed is RNG specific. You must use + an identical RNG to utilize these seeds for a new simulation. + + This file is part of Monte Carlo eXtreme (MCX) + License: GPLv3, see http://mcx.sf.net for details + """ + + # Handle format string (remove '=>' part if present) + if "=>" in dataformat: + dataformat = dataformat.split("=>")[0] + + # Map format strings to numpy dtypes + format_map = { + "float32": np.float32, + "float": np.float32, + "single": np.float32, + "double": np.float64, + "uint": np.uint32, + "int": np.int32, + "uchar": np.uint8, + "char": np.int8, + } + + if dataformat not in format_map: + raise ValueError(f"Unsupported format: {dataformat}") + + dtype = format_map[dataformat] + + # Set endian character for struct format + endian_char = "<" if endian == "little" else ">" + + try: + fid = open(fname, "rb") + except IOError: + raise IOError("can not open the specified file") + + data = [] + header = [] + photonseed = [] + seedbyte = 0 + normalizer = 0 + respin = 0 + srcnum = 0 + savedetflag = 0 + totalsource = 0 + + # Read file in chunks looking for MCXH magic headers + while True: + try: + # Try to read magic header + magicheader = fid.read(4) + if len(magicheader) < 4: + break + + if magicheader != b"MCXH": + if len(header) == 0: + fid.close() + raise RuntimeError("can not find a MCX history data block") + break + + # Read header data: version, maxmedia, detnum, colcount, totalphoton, detected, savedphoton + hd_data = fid.read(7 * 4) # 7 uint32 values + if len(hd_data) < 28: + break + hd = list(struct.unpack(endian_char + "7I", hd_data)) + + if hd[0] != 1: + raise ValueError("version higher than 1 is not supported") + + # Read additional header fields + unitmm_data = fid.read(4) + unitmm = struct.unpack(endian_char + "f", unitmm_data)[0] + + seedbyte_data = fid.read(4) + seedbyte = struct.unpack(endian_char + "I", seedbyte_data)[0] + + normalizer_data = fid.read(4) + normalizer = struct.unpack(endian_char + "f", normalizer_data)[0] + + respin_data = fid.read(4) + respin = struct.unpack(endian_char + "i", respin_data)[0] + + srcnum_data = fid.read(4) + srcnum = struct.unpack(endian_char + "I", srcnum_data)[0] + + savedetflag_data = fid.read(4) + savedetflag = struct.unpack(endian_char + "I", savedetflag_data)[0] + + totalsource_data = fid.read(4) + totalsource = struct.unpack(endian_char + "I", totalsource_data)[0] + + # Skip junk field + junk_data = fid.read(4) + + # Convert savedetflag to binary and create detflag array + detflag_int = savedetflag & (2**8 - 1) # bitand operation + detflag = [ + (detflag_int >> i) & 1 for i in range(8) + ] # convert to binary array + + if endian == "little": + detflag = detflag[::-1] # flip for little endian (equivalent to fliplr) + + # Define data length array + datalen = [1, hd[1], hd[1], hd[1], 3, 3, 1, 4] + datlen = [ + detflag[i] * datalen[i] if i < len(detflag) else 0 + for i in range(len(datalen)) + ] + + # Read photon data + total_elements = hd[6] * hd[3] # savedphoton * colcount + dat_bytes = fid.read(total_elements * np.dtype(dtype).itemsize) + + if len(dat_bytes) < total_elements * np.dtype(dtype).itemsize: + break + + dat = np.frombuffer(dat_bytes, dtype=dtype).copy() + dat = dat.reshape((hd[6], hd[3])) # reshape to [savedphoton, colcount] + + # Apply unit conversion for path lengths + if savedetflag and len(detflag) > 2 and detflag[2] > 0: + start_col = sum(datlen[:2]) + end_col = sum(datlen[:3]) + dat[:, start_col:end_col] = dat[:, start_col:end_col] * unitmm + elif savedetflag == 0: + start_col = ( + 1 + hd[1] + ) # 2 + hd[1] - 1 (converting from 1-based to 0-based) + end_col = ( + 1 + 2 * hd[1] + ) # 1 + 2*hd[1] - 1 (converting from 1-based to 0-based) + dat[:, start_col:end_col] = dat[:, start_col:end_col] * unitmm + + # Append data + if len(data) == 0: + data = dat + else: + data = np.vstack([data, dat]) + + # Read photon seeds if present + if seedbyte > 0: + try: + seed_bytes = fid.read(hd[6] * seedbyte) + if len(seed_bytes) == hd[6] * seedbyte: + seeds = np.frombuffer(seed_bytes, dtype=np.uint8) + seeds = seeds.reshape((hd[6], seedbyte)) + if len(photonseed) == 0: + photonseed = seeds + else: + photonseed = np.vstack([photonseed, seeds]) + else: + seedbyte = 0 + warnings.warn("photon seed section is not found") + except: + seedbyte = 0 + warnings.warn("photon seed section is not found") + + # Adjust total photon count for respin + if respin > 1: + hd[4] = hd[4] * respin + + # Handle header accumulation + if len(header) == 0: + header = hd + [unitmm] + else: + current_header = hd + [unitmm] + # Check consistency: version, maxmedia, detnum, colcount, unitmm + if ( + header[0] != current_header[0] + or header[1] != current_header[1] + or header[2] != current_header[2] + or header[3] != current_header[3] + or header[7] != current_header[7] + ): + raise ValueError( + "loadmch can only load data generated from a single session" + ) + else: + # Accumulate totalphoton, detectedphoton, savedphoton + header[4] += current_header[4] # totalphoton + header[5] += current_header[5] # detectedphoton + header[6] += current_header[6] # savedphoton + + except struct.error: + break + except Exception as e: + if len(header) == 0: + fid.close() + raise e + break + + fid.close() + + # Convert data to numpy array if it's a list + if isinstance(data, list) and len(data) == 0: + data = np.array([]) + + # Create header struct + headerstruct = { + "version": header[0], + "medianum": header[1], + "detnum": header[2], + "recordnum": header[3], + "totalphoton": header[4], + "detectedphoton": header[5], + "savedphoton": header[6], + "lengthunit": header[7], + "seedbyte": seedbyte, + "normalizer": normalizer, + "respin": respin, + "srcnum": srcnum, + "savedetflag": savedetflag, + "totalsource": totalsource, + } + + # Return based on what's available + if len(photonseed) > 0: + return data, headerstruct, photonseed + else: + return data, headerstruct + + +def loadfile(fname, *varargin): + """ + data, header = mcxloadfile(fname) + or + data, header = mcxloadfile(fname, dim, format) + + Author: Qianqian Fang (q.fang neu.edu) + Converted to Python + + Parameters: + ----------- + fname : str + The file name to the output .mc2/.nii/binary volume file + *varargin : tuple + Additional arguments: + dim : array_like + An array to specify the output data dimension + normally, dim=[nx, ny, nz, nt] + format : str + A string to indicate the format used to save + the .mc2 file; if omitted, it is set to 'float' + + Returns: + -------- + data : ndarray + The 3-D or 4-D data being loaded + header : dict + A dict recording the metadata of the file + + This file is part of Monte Carlo eXtreme (MCX) + License: GPLv3, see http://mcx.sf.net for details + """ + + # Parse file path and extension + pathstr, name_with_ext = os.path.split(fname) + name, ext = os.path.splitext(name_with_ext) + + # Convert extension to lowercase for case-insensitive comparison + ext_lower = ext.lower() + + if ext_lower == ".nii": + nii = loadnii(fname, *varargin)[0] + data = nii["NIFTIData"] + header = nii["NIFTIHeader"] + + elif ext_lower == ".mc2": + data = loadmc2(fname, *varargin) + data = np.log10(data) + + # Create header structure + header = {} + if len(varargin) >= 1: + header["dim"] = varargin[0] + header["format"] = data.dtype.name + header["scale"] = "log10" + + elif ext_lower == ".mch": + data, header = loadmch(fname) + + else: + data = loadmc2(fname, *varargin) + header = {} + + return data, header + + +def mcx2json(cfg, filestub): + """ + Format: + mcx2json(cfg, filestub) + + Save MCXLAB simulation configuration to a JSON file for MCX binary + + Author: Qianqian Fang + Converted to Python + + Parameters: + ----------- + cfg : dict + A dict defining the parameters associated with a simulation. + Please run 'help mcxlab' or 'help mmclab' to see the details. + mcxpreview supports the cfg input for both mcxlab and mmclab. + filestub : str + The filestub is the name stub for all output files, including: + filestub.json: the JSON input file + filestub_vol.bin: the volume file if cfg.vol is defined + filestub_shapes.json: the domain shape file if cfg.shapes is defined + filestub_pattern.bin: the domain shape file if cfg.pattern is defined + + Dependency: + This function depends on the savejson/saveubjson functions from the + Iso2Mesh toolbox (http://iso2mesh.sf.net) or JSONlab toolbox + (http://iso2mesh.sf.net/jsonlab) + """ + + # Define the optodes: sources and detectors + Optode = {} + Optode["Source"] = {} + Optode["Source"] = copycfg(cfg, "srcpos", Optode["Source"], "Pos") + Optode["Source"] = copycfg(cfg, "srcdir", Optode["Source"], "Dir") + Optode["Source"] = copycfg(cfg, "srciquv", Optode["Source"], "IQUV") + Optode["Source"] = copycfg(cfg, "srcparam1", Optode["Source"], "Param1") + Optode["Source"] = copycfg(cfg, "srcparam2", Optode["Source"], "Param2") + Optode["Source"] = copycfg(cfg, "srctype", Optode["Source"], "Type") + Optode["Source"] = copycfg(cfg, "srcnum", Optode["Source"], "SrcNum") + Optode["Source"] = copycfg(cfg, "lambda", Optode["Source"], "WaveLength") + + if "detpos" in cfg and cfg["detpos"] is not None and len(cfg["detpos"]) > 0: + Optode["Detector"] = [] + detpos = np.array(cfg["detpos"]) + for i in range(detpos.shape[0]): + detector = { + "Pos": detpos[i, :3].tolist(), + "R": detpos[i, 3] if detpos.shape[1] > 3 else 1, + } + Optode["Detector"].append(detector) + + if len(Optode["Detector"]) == 1: + Optode["Detector"] = [Optode["Detector"][0]] + + if "srcpattern" in cfg and cfg["srcpattern"] is not None: + Optode["Source"]["Pattern"] = np.array( + cfg["srcpattern"], dtype=np.float32 + ).tolist() + + # Define the domain and optical properties + Domain = {} + Domain = copycfg(cfg, "issrcfrom0", Domain, "OriginType", 0) + Domain = copycfg(cfg, "unitinmm", Domain, "LengthUnit") + Domain = copycfg(cfg, "invcdf", Domain, "InverseCDF") + Domain = copycfg(cfg, "angleinvcdf", Domain, "AngleInverseCDF") + + # Convert prop matrix to Media list + prop = np.array(cfg["prop"]) + Domain["Media"] = [] + for i in range(prop.shape[0]): + media = { + "mua": float(prop[i, 0]), + "mus": float(prop[i, 1]), + "g": float(prop[i, 2]), + "n": float(prop[i, 3]), + } + Domain["Media"].append(media) + + if "polprop" in cfg and cfg["polprop"] is not None: + polprop = np.array(cfg["polprop"]) + Domain["MieScatter"] = [] + for i in range(polprop.shape[0]): + miescatter = { + "mua": float(polprop[i, 0]), + "radius": float(polprop[i, 1]), + "rho": float(polprop[i, 2]), + "nsph": float(polprop[i, 3]), + "nmed": float(polprop[i, 4]), + } + Domain["MieScatter"].append(miescatter) + + Shapes = None + if "shapes" in cfg and isinstance(cfg["shapes"], str): + Shapes = json.loads(cfg["shapes"]) + Shapes = Shapes["Shapes"] + + if "vol" in cfg and cfg["vol"] is not None and "VolumeFile" not in Domain: + vol = np.array(cfg["vol"]) + vol_dtype = vol.dtype + + # Determine MediaFormat based on volume data type and dimensions + if vol_dtype in [np.uint8, np.int8]: + Domain["MediaFormat"] = "byte" + if vol.ndim == 4 and vol.shape[0] == 4: + Domain["MediaFormat"] = "asgn_byte" + elif vol.ndim == 4 and vol.shape[0] == 8: + # Reshape and convert to uint64 equivalent + vol = vol.reshape(-1).view(np.uint64).reshape(vol.shape[1:]) + cfg["vol"] = vol + Domain["MediaFormat"] = "svmc" + elif vol_dtype in [np.uint16, np.int16]: + Domain["MediaFormat"] = "short" + if vol.ndim == 4 and vol.shape[0] == 2: + Domain["MediaFormat"] = "muamus_short" + elif vol_dtype in [np.uint32, np.int32]: + Domain["MediaFormat"] = "integer" + elif vol_dtype in [np.float32, np.float64]: + if vol_dtype == np.float64: + vol = vol.astype(np.float32) + cfg["vol"] = vol + + if np.all(np.mod(vol.flatten(), 1) == 0): + if np.max(vol) < 256: + Domain["MediaFormat"] = "byte" + cfg["vol"] = vol.astype(np.uint8) + else: + Domain["MediaFormat"] = "integer" + cfg["vol"] = vol.astype(np.uint32) + elif vol.ndim == 4: + if vol.shape[0] == 1: + Domain["MediaFormat"] = "mua_float" + elif vol.shape[0] == 2: + Domain["MediaFormat"] = "muamus_float" + elif vol.shape[0] == 4: + Domain["MediaFormat"] = "asgn_float" + else: + raise ValueError("cfg.vol has format that is not supported") + + Domain["Dim"] = list(vol.shape) + if len(Domain["Dim"]) == 4: + Domain["Dim"] = Domain["Dim"][1:] + + if Shapes is not None: + # Check if Shapes contains "Grid" + shapes_json = json.dumps(Shapes, separators=(",", ":")) + if '"Grid"' not in shapes_json: + Domain["VolumeFile"] = filestub + "_vol.bin" + with open(Domain["VolumeFile"], "wb") as fid: + cfg["vol"].tobytes() + fid.write(cfg["vol"].tobytes()) + else: + Domain["VolumeFile"] = "" + Shapes = cfg["vol"] + if Shapes.ndim == 4 and Shapes.shape[0] > 1: + Shapes = np.transpose(Shapes, (1, 2, 3, 0)) + + # Define the simulation session flags + Session = {} + Session["ID"] = filestub + Session = copycfg(cfg, "isreflect", Session, "DoMismatch") + Session = copycfg(cfg, "issave2pt", Session, "DoSaveVolume") + Session = copycfg(cfg, "issavedet", Session, "DoPartialPath") + Session = copycfg(cfg, "issaveexit", Session, "DoSaveExit") + Session = copycfg(cfg, "issaveseed", Session, "DoSaveSeed") + Session = copycfg(cfg, "isnormalize", Session, "DoNormalize") + Session = copycfg(cfg, "outputformat", Session, "OutputFormat") + Session = copycfg(cfg, "outputtype", Session, "OutputType") + Session = copycfg(cfg, "debuglevel", Session, "Debug") + Session = copycfg(cfg, "autopilot", Session, "DoAutoThread") + Session = copycfg(cfg, "maxdetphoton", Session, "MaxDetPhoton") + Session = copycfg(cfg, "bc", Session, "BCFlags") + + if ( + "savedetflag" in cfg + and cfg["savedetflag"] is not None + and isinstance(cfg["savedetflag"], str) + ): + cfg["savedetflag"] = cfg["savedetflag"].upper() + Session = copycfg(cfg, "savedetflag", Session, "SaveDataMask") + + if "seed" in cfg and np.isscalar(cfg["seed"]): + Session["RNGSeed"] = cfg["seed"] + Session = copycfg(cfg, "nphoton", Session, "Photons") + Session = copycfg(cfg, "minenergy", Session, "MinEnergy") + Session = copycfg(cfg, "rootpath", Session, "RootPath") + + # Define the forward simulation settings + Forward = {} + Forward["T0"] = cfg["tstart"] + Forward["T1"] = cfg["tend"] + Forward["Dt"] = cfg["tstep"] + + # Assemble the complete input, save to a JSON or UBJSON input file + mcxsession = { + "Session": Session, + "Forward": Forward, + "Optode": Optode, + "Domain": Domain, + } + + if Shapes is not None: + if isinstance(Shapes, np.ndarray): + mcxsession["Shapes"] = Shapes.tolist() + else: + mcxsession["Shapes"] = Shapes + + from jdata import savejd + + savejd(mcxsession, filestub + ".json") + + +def copycfg(cfg, name, outroot, outfield, defaultval=None): + """ + Copy configuration field from cfg to outroot with field name mapping + + Parameters: + ----------- + cfg : dict + Source configuration dictionary + name : str + Field name in source dictionary + outroot : dict + Target dictionary + outfield : str + Field name in target dictionary + defaultval : any, optional + Default value if field doesn't exist in cfg + + Returns: + -------- + outroot : dict + Updated target dictionary + """ + if defaultval is not None: + outroot[outfield] = defaultval + if name in cfg: + outroot[outfield] = cfg[name] + return outroot + + +def json2mcx(filename): + """ + Format: + cfg = json2mcx(filename) + + Convert a JSON file for MCX binary to an MCXLAB configuration structure + + Author: Qianqian Fang + Converted to Python + + Parameters: + ----------- + filename : str or dict + The JSON input file path or a dict containing the JSON data + + Returns: + -------- + cfg : dict + A dict defining the parameters associated with a simulation. + Please run 'help mcxlab' or 'help mmclab' to see details. + + Dependency: + This function depends on the jdata module for loading JSON files + (https://pypi.org/project/jdata/) + + """ + from jdata import loadjd, load as jload + + if isinstance(filename, str): + json_data = jload(filename) + elif isinstance(filename, dict): + json_data = filename + else: + raise ValueError("first input is not supported") + + # Define the optodes: sources and detectors + cfg = {} + + if "Optode" in json_data: + if "Source" in json_data["Optode"]: + cfg = icopycfg(cfg, "srcpos", json_data["Optode"]["Source"], "Pos") + cfg = icopycfg(cfg, "srcdir", json_data["Optode"]["Source"], "Dir") + if "srcdir" in cfg: + srcdir = np.array(cfg["srcdir"][:3]) + cfg["srcdir"][:3] = (srcdir / np.linalg.norm(srcdir)).tolist() + cfg = icopycfg(cfg, "srcparam1", json_data["Optode"]["Source"], "Param1") + cfg = icopycfg(cfg, "srcparam2", json_data["Optode"]["Source"], "Param2") + cfg = icopycfg(cfg, "srctype", json_data["Optode"]["Source"], "Type") + cfg = icopycfg(cfg, "srcnum", json_data["Optode"]["Source"], "SrcNum") + + if "Pattern" in json_data["Optode"]["Source"] and isinstance( + json_data["Optode"]["Source"]["Pattern"], dict + ): + pattern = json_data["Optode"]["Source"]["Pattern"] + nz = pattern.get("Nz", 1) + + if isinstance(pattern["Data"], str): + with open(pattern["Data"], "rb") as fid: + pattern_data = np.frombuffer(fid.read(), dtype=np.float32) + else: + pattern_data = np.array(pattern["Data"], dtype=np.float32) + + cfg["srcpattern"] = pattern_data.reshape( + (pattern["Nx"], pattern["Ny"], nz) + ) + + if ( + "Detector" in json_data["Optode"] + and json_data["Optode"]["Detector"] is not None + and len(json_data["Optode"]["Detector"]) > 0 + ): + detectors = json_data["Optode"]["Detector"] + if isinstance(detectors, list): + # Convert list of detector dicts to matrix format + detpos = [] + for det in detectors: + if isinstance(det, dict): + pos = det.get("Pos", [0, 0, 0]) + r = det.get("R", 1) + detpos.append(pos + [r]) + else: + detpos.append(det) + cfg["detpos"] = detpos + else: + # Handle single detector case + if isinstance(detectors, dict): + pos = detectors.get("Pos", [0, 0, 0]) + r = detectors.get("R", 1) + cfg["detpos"] = [pos + [r]] + + # Define the domain and optical properties + if "Domain" in json_data: + cfg = icopycfg(cfg, "issrcfrom0", json_data["Domain"], "OriginType") + cfg = icopycfg(cfg, "unitinmm", json_data["Domain"], "LengthUnit") + + if "Media" in json_data["Domain"]: + media = json_data["Domain"]["Media"] + if isinstance(media, list): + # Convert list of media dicts to matrix format + prop = [] + for m in media: + if isinstance(m, dict): + prop.append( + [ + m.get("mua", 0), + m.get("mus", 0), + m.get("g", 0), + m.get("n", 1), + ] + ) + else: + prop.append(m) + cfg["prop"] = prop + else: + cfg["prop"] = media + + if "Shapes" in json_data: + cfg["shapes"] = json.dumps({"Shapes": json_data["Shapes"]}) + + format_key = None + if "Domain" in json_data and "VolumeFile" in json_data["Domain"]: + volume_file = json_data["Domain"]["VolumeFile"] + fpath, fname = os.path.split(volume_file) + fname, fext = os.path.splitext(fname) + + if fext == ".json": + if "Dim" in json_data["Domain"]: + cfg["vol"] = np.zeros(json_data["Domain"]["Dim"], dtype=np.uint8) + volume_json = jload(volume_file) + cfg["shapes"] = json.dumps(volume_json) + + elif fext == ".bin": + bytelen = 1 + mediaclass = np.uint8 + + if "MediaFormat" in json_data["Domain"]: + format_map = { + "byte": (1, np.uint8), + "short": (2, np.uint16), + "integer": (4, np.uint32), + "muamus_float": (8, np.float32), + "mua_float": (4, np.float32), + "muamus_half": (4, np.uint16), + "asgn_byte": (4, np.uint8), + "muamus_short": (4, np.uint16), + "svmc": (8, np.uint8), + "asgn_float": (16, np.float32), + } + + format_key = json_data["Domain"]["MediaFormat"].lower() + if format_key in format_map: + bytelen, mediaclass = format_map[format_key] + else: + raise ValueError("incorrect Domain.MediaFormat setting") + + # Load binary volume file + with open(volume_file, "rb") as fid: + vol_data = np.frombuffer(fid.read(), dtype=np.uint8) + + # Convert to appropriate data type + vol_data = vol_data.view(mediaclass) + + # Reshape volume + dim = json_data["Domain"]["Dim"] + total_elements = len(vol_data) + vol_shape = [total_elements // np.prod(dim)] + dim + cfg["vol"] = vol_data.reshape(vol_shape) + + if cfg["vol"].shape[0] == 1: + if format_key != "mua_float": + cfg["vol"] = np.squeeze(cfg["vol"], axis=0) + + elif fext in (".nii", ".jnii", ".nii", ".gz", ".img", ".bnii"): + jnii = loadjd(volume_file) + cfg["vol"] = jnii["NIFTIData"] + + elif "shapes" not in cfg: + cfg["vol"] = np.zeros((60, 60, 60), dtype=np.uint8) + + # Define the simulation session flags + if "Session" in json_data: + cfg = icopycfg(cfg, "session", json_data["Session"], "ID") + cfg = icopycfg(cfg, "isreflect", json_data["Session"], "DoMismatch") + cfg = icopycfg(cfg, "issave2pt", json_data["Session"], "DoSaveVolume") + cfg = icopycfg(cfg, "issavedet", json_data["Session"], "DoPartialPath") + cfg = icopycfg(cfg, "issaveexit", json_data["Session"], "DoSaveExit") + cfg = icopycfg(cfg, "issaveseed", json_data["Session"], "DoSaveSeed") + cfg = icopycfg(cfg, "isnormalize", json_data["Session"], "DoNormalize") + cfg = icopycfg(cfg, "outputformat", json_data["Session"], "OutputFormat") + cfg = icopycfg(cfg, "outputtype", json_data["Session"], "OutputType") + + if "outputtype" in cfg and len(str(cfg["outputtype"])) == 1: + otypemap = { + "x": "flux", + "f": "fluence", + "e": "energy", + "j": "jacobian", + "p": "nscat", + "m": "wm", + "r": "rf", + "l": "length", + "s": "rfmus", + "t": "wltof", + "b": "wptof", + } + + if cfg["outputtype"] not in otypemap: + raise ValueError(f"output type {cfg['outputtype']} is not supported") + cfg["outputtype"] = otypemap[cfg["outputtype"]] + + cfg = icopycfg(cfg, "debuglevel", json_data["Session"], "Debug") + cfg = icopycfg(cfg, "autopilot", json_data["Session"], "DoAutoThread") + cfg = icopycfg(cfg, "seed", json_data["Session"], "RNGSeed") + + if ( + "seed" in cfg + and isinstance(cfg["seed"], str) + and re.search(r"\.mch$", cfg["seed"]) + ): + # Would need to implement loadmch function for MCH file support + raise NotImplementedError( + "MCH file format not implemented - requires loadmch function" + ) + + cfg = icopycfg(cfg, "nphoton", json_data["Session"], "Photons") + cfg = icopycfg(cfg, "rootpath", json_data["Session"], "RootPath") + + # Define the forward simulation settings + if "Forward" in json_data: + forward = json_data["Forward"] + if "T0" in forward: + cfg["tstart"] = forward["T0"] + cfg = icopycfg(cfg, "tstart", forward, "T0") + cfg = icopycfg(cfg, "tend", forward, "T1") + cfg = icopycfg(cfg, "tstep", forward, "Dt") + + return cfg + + +def icopycfg(cfg, name, outroot, outfield, defaultval=None): + """ + Copy configuration field from outroot to cfg with field name mapping + + Parameters: + ----------- + cfg : dict + Target configuration dictionary + name : str + Field name in target dictionary + outroot : dict + Source dictionary + outfield : str + Field name in source dictionary + defaultval : any, optional + Default value if field doesn't exist in outroot + + Returns: + -------- + cfg : dict + Updated target configuration dictionary + """ + if defaultval is not None and outfield not in outroot: + outroot[outfield] = defaultval + if outfield in outroot: + cfg[name] = outroot[outfield] + return cfg + + +def loadnii(*args, **kwargs): + from jdata import loadjd + + return loadjd(*args, **kwargs) diff --git a/pmcx/pmcx/plot.py b/pmcx/pmcx/plot.py new file mode 100644 index 00000000..c864b5e6 --- /dev/null +++ b/pmcx/pmcx/plot.py @@ -0,0 +1,783 @@ +# Copyright (c) 2023-2025 Qianqian Fang (q.fang neu.edu) +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +"""Plotting MCX input and output data structures""" + +__all__ = ( + "preview", + "plotshapes", + "plotphotons", + "plotvol", +) + +##==================================================================================== +## dependent libraries +##==================================================================================== + +import warnings +import numpy as np + + +##==================================================================================== +## implementation +##==================================================================================== + + +def plotvol(*args, **kwargs): + from iso2mesh import plotvolume + + return plotvolume(*args, **kwargs) + + +def preview(cfg, **kwargs): + """ + hs = preview(cfg, **kwargs) + + Preview the simulation configuration for both MCXLAB and MMCLAB + + Author: Qianqian Fang + Converted to Python + + Parameters: + ----------- + cfg : dict or list of dict + A dict, or list of dict. Each element of cfg defines + the parameters associated with a simulation. Please run + 'help mcxlab' or 'help mmclab' to see the details. + preview supports the cfg input for both mcxlab and mmclab. + **kwargs : tuple + Additional arguments passed to plotting functions + + Returns: + -------- + hs : list + A list of dict containing handles to the plotted domain elements. + + Dependency: + This function depends on the Iso2Mesh toolbox (http://iso2mesh.sf.net) + + This function is part of Monte Carlo eXtreme (MCX) URL: http://mcx.space + + License: GNU General Public License version 3, please read LICENSE.txt for details + """ + + # Import iso2mesh functions + try: + import matplotlib.pyplot as plt + from iso2mesh import plotmesh, plotsurf, latticegrid, binsurface + from iso2mesh import meshacylinder + except ImportError: + warnings.warn("iso2mesh module not available, some functions may not work") + raise ImportError("you must install the iso2mesh toolbox first") + + if cfg is None: + raise ValueError("input field cfg must be defined") + + if not isinstance(cfg, (dict, list)): + raise ValueError("cfg must be a dict or list of dict") + + # Convert single dict to list for uniform processing + if isinstance(cfg, dict): + cfg = [cfg] + + length = len(cfg) + hs = [None] * length + + # Save random state + rngstate = np.random.get_state() + + # Set random seed for consistent colors + randseed = 0x623F9A9E + np.random.seed(randseed) + surfcolors = np.random.rand(1024, 3) + + # Check if we need to hold plots + isholdplot = plt.isinteractive() + + for i in range(length): + if "vol" not in cfg[i] and "node" not in cfg[i] and "shapes" not in cfg[i]: + raise ValueError("cfg.vol or cfg.node or cfg.shapes is missing") + + if i > 0: + plt.figure() + + voxelsize = 1 + if "unitinmm" in cfg[i]: + voxelsize = cfg[i]["unitinmm"] + + offset = 1 + if ("issrcfrom0" in cfg[i] and cfg[i]["issrcfrom0"] == 1) or "node" in cfg[i]: + offset = 0 + + hseg = [] + hbbx = [] + + if "vol" in cfg[i] and "node" not in cfg[i]: + # Render mcxlab voxelated domain + vol = np.array(cfg[i]["vol"]) + dim = vol.shape + + if vol.ndim == 4: # For spatially varying medium + dim = dim[1:] + cfg[i]["vol"] = np.ones(dim) + vol = np.ones(dim) + + # Create lattice grid for bounding box + bbxno, bbxfc = latticegrid( + np.arange(0, dim[0] + 1, dim[0]), + np.arange(0, dim[1] + 1, dim[1]), + np.arange(0, dim[2] + 1, dim[2]), + ) + hbbx = plotmesh( + (bbxno + offset) * voxelsize, bbxfc, facecolor="none", **kwargs + ) + + # Get unique values (excluding 0) + val = np.unique(vol.flatten()) + val = val[val != 0] + + # Create padded volume for surface extraction + padvol = np.zeros(np.array(dim) + 2) + padvol[1:-1, 1:-1, 1:-1] = vol + + if len(val) > 1: + hseg = [None] * len(val) + + for id_idx, id_val in enumerate(val): + no, fc = binsurface((padvol == id_val).astype(np.int8), 0.5) + + hseg[id_idx] = plotmesh( + (no - 1) * voxelsize, + fc, + facealpha=0.3, + linestyle="none", + facecolor=surfcolors[int(id_val), :], + **kwargs + ) + + elif "node" in cfg[i] and "elem" in cfg[i]: + # Render mmclab mesh domain + elemtype = np.ones(cfg[i]["elem"].shape[0]) + if "elemprop" in cfg[i]: + elemtype = np.array(cfg[i]["elemprop"]) + else: + if cfg[i]["elem"].shape[1] > 4: + elemtype = cfg[i]["elem"][:, 4] + + etypes = np.unique(elemtype) + no = np.array(cfg[i]["node"]) * voxelsize + hseg = [None] * len(etypes) + + for id_idx, id_val in enumerate(etypes): + elem_mask = elemtype == id_val + elem_subset = cfg[i]["elem"][elem_mask, :] + + hseg[id_idx] = plotmesh( + no, + [], + elem_subset, + facealpha=0.3, + linestyle="none", + facecolor=surfcolors[int(id_val), :], + **kwargs + ) + + # Handle shapes if present + if "shapes" in cfg[i]: + if "vol" in cfg[i]: + dim = np.array(cfg[i]["vol"]).shape + else: + dim = [60, 60, 60] + + hseg = plotshapes(cfg[i]["shapes"], dim, offset, hseg, voxelsize, **kwargs) + + # Rendering source position and direction + if "srcpos" not in cfg[i] or "srcdir" not in cfg[i]: + raise ValueError("cfg.srcpos or cfg.srcdir is missing") + + srcpos = np.array(cfg[i]["srcpos"]) * voxelsize + hsrc = plotmesh(srcpos, "r*") + + srcvec = np.array(cfg[i]["srcdir"]) * 10 * voxelsize + headsize = 1e2 + + # Use matplotlib's quiver for 3D arrow + ax = plt.gca(projection="3d") + hdir = ax.quiver( + srcpos[0], + srcpos[1], + srcpos[2], + srcvec[0], + srcvec[1], + srcvec[2], + linewidth=3, + color="r", + arrow_length_ratio=headsize / 100, + **kwargs + ) + + # Rendering area-source aperture + hsrcarea = [] + if "srctype" in cfg[i]: + if cfg[i]["srctype"] in ["disk", "gaussian", "zgaussian", "ring"]: + if "srcparam1" not in cfg[i]: + raise ValueError("cfg.srcparam1 is missing") + + ncyl, fcyl = meshacylinder( + srcpos, + srcpos + np.array(cfg[i]["srcdir"][:3]) * 1e-5, + cfg[i]["srcparam1"][0] * voxelsize, + 0, + 0, + ) + hsrcarea = plotmesh(ncyl, fcyl[-1], facecolor="r", linestyle="none") + + if len(cfg[i]["srcparam1"]) > 1 and cfg[i]["srcparam1"][1] > 0: + ncyl, fcyl = meshacylinder( + srcpos, + srcpos + np.array(cfg[i]["srcdir"][:3]) * 1e-5, + cfg[i]["srcparam1"][1] * voxelsize, + 0, + 0, + ) + hsrcarea = plotmesh(ncyl, fcyl[-1], facecolor="k", linestyle="none") + + elif cfg[i]["srctype"] in [ + "planar", + "pattern", + "fourier", + "fourierx", + "fourierx2d", + "pencilarray", + ]: + if "srcparam1" not in cfg[i] or "srcparam2" not in cfg[i]: + raise ValueError("cfg.srcparam1 or cfg.srcparam2 is missing") + + if cfg[i]["srctype"] in ["fourierx", "fourierx2d"]: + vec2 = np.cross( + cfg[i]["srcdir"], np.array(cfg[i]["srcparam1"][:3]) * voxelsize + ) + else: + vec2 = np.array(cfg[i]["srcparam2"][:3]) * voxelsize + + srcparam1_scaled = np.array(cfg[i]["srcparam1"][:3]) * voxelsize + nrec = np.array( + [[0, 0, 0], srcparam1_scaled, srcparam1_scaled + vec2, vec2] + ) + + # Add source position to all points + nrec = nrec + np.tile(srcpos, (4, 1)) + hsrcarea = plotmesh(nrec, [[0, 1, 2, 3, 0]]) + + elif cfg[i]["srctype"] == "pattern3d": + dim = cfg[i]["srcparam1"][:3] + bbxno, bbxfc = latticegrid( + np.arange(0, dim[0] + 1, dim[0]), + np.arange(0, dim[1] + 1, dim[1]), + np.arange(0, dim[2] + 1, dim[2]), + ) + srcpos_tiled = np.tile(cfg[i]["srcpos"][:3], (bbxno.shape[0], 1)) + hbbx = plotmesh( + ((bbxno + srcpos_tiled) + offset) * voxelsize, + bbxfc, + facecolor="y", + facealpha=0.3, + ) + + elif cfg[i]["srctype"] in ["slit", "line"]: + if "srcparam1" not in cfg[i]: + raise ValueError("cfg.srcparam1 is missing") + + line_points = np.array( + [srcpos[:3], np.array(cfg[i]["srcparam1"][:3]) * voxelsize] + ) + hsrcarea = plotmesh(line_points, [[0, 1]], linewidth=3, color="r") + + # Rendering detectors + hdet = [] + if "detpos" in cfg[i]: + detpos_array = np.array(cfg[i]["detpos"]) + hdet = [None] * detpos_array.shape[0] + detpos = detpos_array[:, :3] * voxelsize + + if detpos_array.shape[1] == 4: + radii = detpos_array[:, 3] * voxelsize + else: + radii = np.ones(detpos.shape[0]) + + for id_det in range(detpos.shape[0]): + # Create sphere using matplotlib + u = np.linspace(0, 2 * np.pi, 20) + v = np.linspace(0, np.pi, 20) + x = radii[id_det] * np.outer(np.cos(u), np.sin(v)) + detpos[id_det, 0] + y = radii[id_det] * np.outer(np.sin(u), np.sin(v)) + detpos[id_det, 1] + z = ( + radii[id_det] * np.outer(np.ones(np.size(u)), np.cos(v)) + + detpos[id_det, 2] + ) + + hdet[id_det] = ax.plot_surface( + x, y, z, alpha=0.3, color="g", linewidth=0 + ) + + # Combining all handles + hs[i] = { + "bbx": hbbx, + "seg": hseg, + "src": hsrc, + "srcarrow": hdir, + "srcarea": hsrcarea, + "det": hdet, + } + + # Restore random state + np.random.set_state(rngstate) + + return hs + + +def plotshapes( + jsonshape, gridsize=None, offset=None, hseg=None, voxelsize=None, **kwargs +): + """ + Format: + mcxplotshapes(jsonshapestr) + handles = mcxplotshapes(jsonshapestr) + handles = mcxplotshapes(jsonshapestr, gridsize, offset, oldhandles, voxelsize, ...) + + Create MCX simulation from built-in benchmarks (similar to "mcx --bench") + + Author: Qianqian Fang + Converted to Python + + Parameters: + ----------- + jsonshape : str + An MCX shape json string with a root object "Shapes" + gridsize : list, optional + This should be set to size(cfg.vol), default is [60, 60, 60] + offset : int, optional + This should be set to 1-cfg.issrcfrom0, default is 1 + hseg : list, optional + Existing plot handles + voxelsize : float, optional + The voxel size of the grid - usually defined as + cfg.unitinmm, default is 1 + **kwargs : tuple + Additional arguments passed to plotting functions + + Returns: + -------- + hseg : list + An array of all plot object handles + + Dependency: + This function depends on the Iso2Mesh toolbox (http://iso2mesh.sf.net) + + Examples: + --------- + mcxplotshapes('{"Shapes":[{"Grid":{"Tag":1,"Size":[60, 60, 200]}},{"ZLayers":[[1,20,1],[21,32,4],[33,200,3]]}]}') + hfig = mcxpreview(mcxcreate('sphshell')) + hfig2 = mcxpreview(mcxcreate('spherebox')) + + This function is part of Monte Carlo eXtreme (MCX) URL: http://mcx.space + + License: GNU General Public License version 3, please read LICENSE.txt for details + """ + + try: + import matplotlib.pyplot as plt + from iso2mesh import plotmesh, latticegrid, loadjson, rotatevec3d + except ImportError: + raise ImportError("iso2mesh module is required") + + if hseg is None: + hseg = [] + + # Parse JSON shapes + shapes = loadjson(jsonshape) + + if offset is None: + offset = 1 + if gridsize is None: + gridsize = [60, 60, 60] + + orig = np.array([0, 0, 0]) + offset + if voxelsize is None: + voxelsize = 1 + + # Save random state + rngstate = np.random.get_state() + randseed = 0x623F9A9E + np.random.seed(randseed) + surfcolors = np.random.rand(1024, 3) + + if "Shapes" in shapes: + shapes_list = shapes["Shapes"] + if not isinstance(shapes_list, list): + shapes_list = [shapes_list] + + for j, shp in enumerate(shapes_list): + sname = list(shp.keys())[0] # Get first key name + tag = 1 + + if sname in ["Grid", "Box", "Subgrid"]: + if sname == "Grid" and hseg: + # Delete existing handles (matplotlib equivalent) + for handle in hseg: + if hasattr(handle, "remove"): + handle.remove() + hseg = [] + + obj = shp[sname] + if "Tag" in obj: + tag = obj["Tag"] + + gridsize = obj["Size"] + + if "O" in obj: + no, fc = latticegrid( + [0, obj["Size"][0]] + obj["O"][0], + [0, obj["Size"][1]] + obj["O"][1], + [0, obj["Size"][2]] + obj["O"][2], + ) + else: + no, fc = latticegrid( + [0, obj["Size"][0]], [0, obj["Size"][1]], [0, obj["Size"][2]] + ) + + handle = plotmesh( + no * voxelsize, + fc, + facealpha=0.3, + linestyle="-", + facecolor="none", + **kwargs + ) + hseg.append(handle) + + elif sname == "Sphere": + obj = shp[sname] + if "Tag" in obj: + tag = obj["Tag"] + + # Create sphere using matplotlib + u = np.linspace(0, 2 * np.pi, 50) + v = np.linspace(0, np.pi, 50) + sx = np.outer(np.cos(u), np.sin(v)) + sy = np.outer(np.sin(u), np.sin(v)) + sz = np.outer(np.ones(np.size(u)), np.cos(v)) + + ax = plt.gca(projection="3d") + handle = ax.plot_surface( + voxelsize * (sx * obj["R"] + (obj["O"][0] + orig[0])), + voxelsize * (sy * obj["R"] + (obj["O"][1] + orig[1])), + voxelsize * (sz * obj["R"] + (obj["O"][2] + orig[2])), + alpha=0.3, + color=surfcolors[tag, :], + linewidth=0, + ) + hseg.append(handle) + + elif sname == "Cylinder": + obj = shp[sname] + if "Tag" in obj: + tag = obj["Tag"] + + c0 = np.array(obj["C0"]) + c1 = np.array(obj["C1"]) + length = np.linalg.norm(c0 - c1) + + # Create cylinder + theta = np.linspace(0, 2 * np.pi, 50) + z = np.array([0, length]) + theta, z = np.meshgrid(theta, z) + sx = obj["R"] * np.cos(theta) + sy = obj["R"] * np.sin(theta) + sz = z + + # Flatten for rotation + points = np.column_stack([sx.flatten(), sy.flatten(), sz.flatten()]) + + # Rotate points + no = rotatevec3d(points, c1 - c0) + + # Reshape back + sx = no[:, 0].reshape(sx.shape) + sy = no[:, 1].reshape(sy.shape) + sz = no[:, 2].reshape(sz.shape) + + ax = plt.gca(projection="3d") + handle = ax.plot_surface( + voxelsize * (sx + (c0[0] + orig[0])), + voxelsize * (sy + (c0[1] + orig[1])), + voxelsize * (sz + (c0[2] + orig[2])), + alpha=0.3, + color=surfcolors[tag, :], + linewidth=0, + ) + hseg.append(handle) + + elif sname == "Origin": + orig = voxelsize * np.array(shp[sname]) + ax = plt.gca(projection="3d") + handle = ax.scatter(orig[0], orig[1], orig[2], c="m", marker="*", s=100) + hseg.append(handle) + + elif sname in ["XSlabs", "YSlabs", "ZSlabs"]: + obj = shp[sname] + if "Tag" in obj: + tag = obj["Tag"] + + bounds = np.array(obj["Bounds"]) + for k in range(bounds.shape[0]): + if sname == "XSlabs": + no, fc = latticegrid( + [bounds[k, 0], bounds[k, 1]] + orig[0], + [0, gridsize[1]], + [0, gridsize[2]], + ) + elif sname == "YSlabs": + no, fc = latticegrid( + [0, gridsize[0]], + [bounds[k, 0], bounds[k, 1]] + orig[1], + [0, gridsize[2]], + ) + elif sname == "ZSlabs": + no, fc = latticegrid( + [0, gridsize[0]], + [0, gridsize[1]], + [bounds[k, 0], bounds[k, 1]] + orig[2], + ) + + handle = plotmesh( + voxelsize * no, + fc, + facealpha=0.3, + linestyle="none", + facecolor=surfcolors[tag, :], + **kwargs + ) + hseg.append(handle) + + elif sname in ["XLayers", "YLayers", "ZLayers"]: + obj = shp[sname] + + # Convert to list of lists if needed + if not isinstance(obj[0], list): + obj = [list(row) for row in obj] + + for k, layer in enumerate(obj): + tag = 1 + if len(layer) >= 3: + tag = layer[2] + + if sname == "XLayers": + no, fc = latticegrid( + [layer[0] - 1, layer[1]] + orig[0] - 1, + [0, gridsize[1]], + [0, gridsize[2]], + ) + elif sname == "YLayers": + no, fc = latticegrid( + [0, gridsize[0]], + [layer[0] - 1, layer[1]] + orig[1] - 1, + [0, gridsize[2]], + ) + elif sname == "ZLayers": + no, fc = latticegrid( + [0, gridsize[0]], + [0, gridsize[1]], + [layer[0] - 1, layer[1]] + orig[2] - 1, + ) + + handle = plotmesh( + voxelsize * no, + fc, + facealpha=0.3, + linestyle="none", + facecolor=surfcolors[tag, :], + **kwargs + ) + hseg.append(handle) + + else: + raise ValueError("unsupported shape constructs") + + # Restore random state + np.random.set_state(rngstate) + + return hseg + + +def plotphotons(traj, *varargin, **kwargs): + """ + plotphotons(traj) + or + plotphotons(traj, 'color', 'r', 'marker', 'o') + sorted, linehandle = plotphotons(traj) + + Plot photon trajectories from MCXLAB's output + + Author: Qianqian Fang (q.fang neu.edu) + Converted to Python + + Parameters: + ----------- + traj : dict or ndarray + The 5th output of mcxlab, storing the photon trajectory info + traj['id']: the photon index being recorded + traj['pos']: the 3D position of the photon; for each photon, the + positions are stored in serial order + traj['data']: the combined output, in the form of + [id, pos, weight, reserved]' + *varargin : tuple + Additional arguments for plotting + **kwargs : dict + Keyword arguments for plotting + + Returns: + -------- + sorted : dict + A dict to store the sorted trajectory info + sorted['id']: the sorted vector of photon id, starting from 0 + sorted['pos']: the sorted position vector of each photon, only + recording the scattering sites. + linehandle : object + Handle to the plotted lines (when plotting is enabled) + + This file is part of Monte Carlo eXtreme (MCX) + License: GPLv3, see http://mcx.sf.net for details + """ + + try: + from iso2mesh import plotmesh + except ImportError: + raise ImportError("iso2mesh module is required") + + # Handle different input formats + if isinstance(traj, dict) and "id" not in traj and "data" in traj: + # Convert from data format + data = np.array(traj["data"]) + traj = { + "id": np.array(data[0, :], dtype=np.uint32), + "pos": data[1:4, :].T, # Transpose to match expected shape + "weight": data[4, :], + "data": data, + } + elif ( + not isinstance(traj, dict) + and isinstance(traj, np.ndarray) + and traj.shape[1] == 6 + ): + # Convert from array format + traj = { + "id": traj[:, 0].astype(np.uint32), + "pos": traj[:, 1:4], + "weight": traj[:, 4], + } + + # Sort trajectories by photon ID + newid, idx = np.unique(traj["id"], return_inverse=True) + sorted_idx = np.argsort(traj["id"]) + newid = traj["id"][sorted_idx] + + # Find line end points (where photon ID changes) + lineend = np.diff(newid) > 0 + newidx = np.cumsum(np.concatenate([[0], lineend]) + 1) + + # Create position array with NaN separators for line breaks + newpos = np.full((len(sorted_idx) + len(lineend), 4), np.nan) + newpos[newidx - 1, :3] = traj["pos"][sorted_idx, :] + + # Add weight information if available + if "data" in traj: + newpos[newidx - 1, 3] = traj["data"][4, sorted_idx] + elif "weight" in traj: + newpos[newidx - 1, 3] = traj["weight"][sorted_idx] + else: + newpos[:, 3] = 1.0 # Default weight + + # Check if plotting is disabled + noplot = ( + len(varargin) == 1 and isinstance(varargin[0], str) and varargin[0] == "noplot" + ) + + if not noplot: + # Determine edge transparency + edgealpha = 0.25 # Reduced opacity for better visualization + + # Create line segments for each photon trajectory + lines = [] + colors = [] + + # Parse additional arguments + color = kwargs.get("color", "b") + marker = kwargs.get("marker", None) + + # Group positions by photon ID for line drawing + current_photon = [] + current_weight = [] + + for i, pos in enumerate(newpos): + if not np.isnan(pos[0]): # Valid position + current_photon.append(pos[:3]) + current_weight.append(pos[3]) + else: # NaN separator - end of photon trajectory + if len(current_photon) > 1: + lines.append(np.array(current_photon)) + # Use weight for coloring if available + if len(current_weight) > 0: + colors.extend(current_weight) + current_photon = [] + current_weight = [] + + # Add the last trajectory if it exists + if len(current_photon) > 1: + lines.append(np.array(current_photon)) + if len(current_weight) > 0: + colors.extend(current_weight) + + # Plot trajectories using Line3DCollection for efficiency + if lines: + # Combine all line segments + all_points = [] + all_lines = [] + point_idx = 0 + + for line in lines: + line_indices = [] + for point in line: + all_points.append(point) + line_indices.append(point_idx) + point_idx += 1 + if len(line_indices) > 1: + # Create line segments + for i in range(len(line_indices) - 1): + all_lines.append([line_indices[i], line_indices[i + 1]]) + + hg = plotmesh(np.array(all_points), all_lines, color=color, **kwargs) + + else: + hg = None + + else: + hg = None + + # Create output structure + output_sorted = {"id": newid, "pos": traj["pos"][sorted_idx, :]} + + return output_sorted, hg diff --git a/pmcx/pmcx/utils.py b/pmcx/pmcx/utils.py index b608b420..b90a7f8e 100644 --- a/pmcx/pmcx/utils.py +++ b/pmcx/pmcx/utils.py @@ -1,6 +1,6 @@ -# Copyright (c) 2023 Kuznetsov Ilya -# Copyright (c) 2023 Qianqian Fang (q.fang neu.edu) +# Copyright (c) 2023-2025 Qianqian Fang (q.fang neu.edu) # Copyright (c) 2023 Fan-Yu (Ivy) Yen (yen.f at northeastern.edu) +# Copyright (c) 2023 Kuznetsov Ilya (for porting cwdref) # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -18,13 +18,42 @@ """Utilities for processing MCX input and output data""" -import numpy as np +__all__ = ( + "detweight", + "cwdref", + "meanpath", + "meanscat", + "dettpsf", + "dettime", + "tddiffusion", + "getdistance", + "detphoton", + "mcxlab", + "cwdiffusion", + "cwfluxdiffusion", + "cwfluencediffusion", + "dcsg1", + "mcxcreate", + "rfreplay", + "rfmusreplay", +) + +##==================================================================================== +## dependent libraries +##==================================================================================== + import re import sys +import os +import copy +import numpy as np -# sys.path.insert(0, '../../src/build/') +from .io import loadmch +from .plot import preview -import pmcx +##==================================================================================== +## implementation +##==================================================================================== def cwdref(detp, cfg): @@ -185,6 +214,8 @@ def dettpsf(detp, detnum, prop, time): detp = detp.copy() # select the photon data of the specified detector + if "w0" in detp: + detp["w0"] = detp["w0"][detp["detid"] == detnum] detp["ppath"] = detp["ppath"][detp["detid"] == detnum, :] detp["detid"] = detp["detid"][detp["detid"] == detnum] @@ -499,17 +530,35 @@ def mcxlab(*args): useopencl = defaultocl + try: + if sys.platform.startswith("win"): + import os, sparse_numba, ctypes + + ctypes.CDLL( + os.path.join( + os.path.dirname(sparse_numba.__file__), + "vendor", + "superlu", + "bin", + "libgomp-1.dll", + ) + ) + + from _pmcx import gpuinfo, run, version + except ImportError: # pragma: no cover + print("the pmcx binary extension (_pmcx) is not compiled! please compile first") + if len(args) == 1 and isinstance(args[0], str): if args[0] == "gpuinfo": - varargout = pmcx.gpuinfo() + varargout = gpuinfo() return varargout elif args[0] == "version": - varargout = pmcx.version() + varargout = version() return varargout if len(args) == 2 and isinstance(args[1], str): if args[1] == "preview": - varargout = mcxpreview(args[0]) + varargout = preview(args[0]) return varargout elif args[1] == "opencl": useopencl = 1 @@ -568,17 +617,17 @@ def mcxlab(*args): val, np.shape(args[0]["detphotons"][fulldetdata[j]]) ) ) - args[0]["detphotons"] = detdata.transpose() + args[0]["detphotons"] = np.vstack(detdata).T args[0]["savedetflag"] = "dspmxvw" args[0]["savedetflag"][detfields == 0] = [] if useopencl == 0: - varargout = pmcx.run(args[0]) + varargout = run(args[0]) else: try: - import pmcxcl + import _pmcxcl - varargout = pmcxcl.run(args[0]) + varargout = _pmcxcl.run(args[0]) except ImportError: raise ImportError( 'To call OpenCL based MCX, one must first run "pip install pmcxcl" to install pmcxcl' @@ -629,7 +678,7 @@ def mcxlab(*args): if np.ndim(cfg["vol"]) == 4 and np.shape(cfg["vol"])[0] != 8: cfg["savedetflag"] = "" if ( - isinstance(cfg["vol"], float) or isinstance(cfg["vol"], double) + isinstance(cfg["vol"], float) or isinstance(cfg["vol"], np.float64) ) and "unitinmm" in cfg: # if((isa(cfg(i).vol,'single') || isa(cfg(i).vol,'double')) && isfield(cfg(i),'unitinmm')) cfg["vol"] = cfg["vol"] * cfg["unitinmm"] @@ -681,3 +730,747 @@ def mcxlab(*args): varargout["traj"] = traj return varargout + + +def mcxcreate(benchname=None, **kwargs): + """ + Format: + list = mcxcreate() + cfg = mcxcreate(benchname) + cfg = mcxcreate(benchname, param1=value1, param2=value2, ...) + + Create MCX simulation from built-in benchmarks (similar to "mcx --bench") + + Author: Qianqian Fang + Converted to Python + + Parameters: + ----------- + benchname : str, optional + A string to specify the name of the benchmark + **kwargs : dict + Parameter-value pairs to override default settings + + Returns: + -------- + cfg : dict or list + A dict defining the parameters associated with a simulation. If + no input, this function returns a list of supported benchmarks. + + Examples: + --------- + list = mcxcreate() + cfg = mcxcreate('cube60b') + cfg = mcxcreate('cube60', srctype='isotropic', srcpos=[30, 30, 30]) + + This function is part of Monte Carlo eXtreme (MCX) URL: http://mcx.space + + License: GNU General Public License version 3, please read LICENSE.txt for details + """ + + # Initialize benchmark dictionary + mcxbench = {} + + mcxbench["cube60"] = { + "nphoton": int(1e6), + "vol": np.ones((60, 60, 60), dtype=np.uint8), + "srctype": "pencil", + "srcpos": [29, 29, 0], + "srcdir": [0, 0, 1], + "prop": [[0, 0, 1, 1], [0.005, 1, 0.01, 1.37]], + "tstart": 0, + "tend": 5e-9, + "tstep": 5e-9, + "isreflect": 0, + "seed": 1648335518, + "issrcfrom0": 1, + "detpos": [[29, 19, 0, 1], [29, 39, 0, 1], [19, 29, 0, 1], [39, 29, 0, 1]], + } + + mcxbench["cube60b"] = mcxbench["cube60"].copy() + mcxbench["cube60b"]["isreflect"] = 1 + + mcxbench["cube60planar"] = mcxbench["cube60b"].copy() + mcxbench["cube60planar"]["srctype"] = "planar" + mcxbench["cube60planar"]["srcpos"] = [10.0, 10.0, -10.0] + mcxbench["cube60planar"]["srcparam1"] = [40.0, 0.0, 0.0, 0.0] + mcxbench["cube60planar"]["srcparam2"] = [0.0, 40.0, 0.0, 0.0] + + mcxbench["skinvessel"] = { + "nphoton": int(1e6), + "vol": np.ones((200, 200, 200), dtype=np.uint8), + "srctype": "disk", + "srcpos": [100, 100, 20], + "srcdir": [0, 0, 1], + "srcparam1": [60, 0, 0, 0], + "unitinmm": 0.005, + "prop": [ + [0, 0, 1, 1], + [3.564e-05, 1, 1, 1.37], + [23.05426549, 9.398496241, 0.9, 1.37], + [0.04584957865, 35.65405549, 0.9, 1.37], + [1.657237447, 37.59398496, 0.9, 1.37], + ], + "tstart": 0, + "tend": 5e-8, + "tstep": 5e-8, + "isreflect": 0, + "seed": 1648335518, + "issrcfrom0": 1, + } + mcxbench["skinvessel"]["shapes"] = ( + '{"Shapes":[{"ZLayers":[[1,20,1],[21,32,4],[33,200,3]]},' + '{"Cylinder": {"Tag":2, "C0": [0,100.5,100.5], "C1": [200,100.5,100.5], "R": 20}}]}' + ) + + mcxbench["sphshell"] = { + "nphoton": int(1e6), + "vol": np.ones((60, 60, 60), dtype=np.uint8), + "srctype": "pencil", + "srcpos": [30, 30.1, 0], + "srcdir": [0, 0, 1], + "prop": [ + [0, 0, 1, 1], + [0.02, 7, 0.89, 1.37], + [0.004, 0.009, 0.89, 1.37], + [0.02, 9.0, 0.89, 1.37], + [0.05, 0.0, 1.00, 1.37], + ], + "tstart": 0, + "tend": 5e-9, + "tstep": 5e-9, + "isreflect": 1, + "seed": 1648335518, + "issrcfrom0": 1, + } + mcxbench["sphshell"]["shapes"] = ( + '{"Shapes":[{"Grid":{"Tag":1,"Size":[60,60,60]}},' + '{"Sphere":{"Tag":2,"O":[30,30,30],"R":25}},' + '{"Sphere":{"Tag":3,"O":[30,30,30],"R":23}},' + '{"Sphere":{"Tag":4,"O":[30,30,30],"R":10}}]}' + ) + mcxbench["sphshell"]["detpos"] = mcxbench["cube60"]["detpos"] + + mcxbench["spherebox"] = { + "nphoton": int(1e6), + "vol": np.ones((60, 60, 60), dtype=np.uint8), + "srcpos": [29.5, 29.5, 0], + "srcdir": [0, 0, 1], + "prop": [[0, 0, 1, 1], [0.002, 1, 0.01, 1.37], [0.05, 5, 0.9, 1.37]], + "tstart": 0, + "tend": 5e-9, + "tstep": 1e-10, + "isreflect": 0, + "seed": 1648335518, + "issrcfrom0": 1, + } + mcxbench["spherebox"]["shapes"] = ( + '{"Shapes":[{"Grid":{"Tag":1,"Size":[60,60,60]}},' + '{"Sphere":{"Tag":2,"O":[30,30,30],"R":10}}]}' + ) + + if benchname is None: + cfg = list(mcxbench.keys()) + return cfg + + if benchname in mcxbench: + cfg = mcxbench[benchname].copy() + if kwargs: + for key, value in kwargs.items(): + if isinstance(key, str): + cfg[key.lower()] = value + else: + raise ValueError("input must be in the form of keyword arguments") + else: + raise ValueError("benchmark name is not supported") + + return cfg + + +def dcsg1( + detps, + tau=None, + disp_model="brownian", + DV=1e-7, + lambda_=785, + format="float", + **varargin, +): + """ + tau, g1 = mcxdcsg1(detps, tau, disp_model, DV, lambda_, format) + + Compute simulated electric-field auto-correlation function using + simulated photon pathlengths and scattering momentum transfer + + Author: Stefan Carp (carp nmr.mgh.harvard.edu) + Converted to Python + + Parameters: + ----------- + detps : str or dict + The file name of the output .mch file or the 2nd output from mcxlab + tau : array_like, optional + Correlation times at which to compute g1 + (default: 1e-7 to 1e-1 seconds, log equidistant) + disp_model : str, optional + Displacement model ('brownian', 'random_flow', ) + (default: 'brownian', see further explanation below) + DV : float, optional + Value of displacement variable using mm as unit of + length and s as unit of time + (default: 1e-7 mm^2/s, see further explanation below) + lambda_ : float, optional + Wavelength of light used in nm + (default: 785) + format : str, optional + The format used to save the .mch file + (default: 'float') + **varargin : dict + Additional parameters for custom displacement models + + Returns: + -------- + tau : ndarray + Correlation times at which g1 was computed provided for + convenience (copied from input if set, otherwise + outputs default) + g1 : ndarray + Field auto-correlation curves, one for each detector + + The displacement model indicates the formula used to compute the root + mean square displacement of scattering particles during a given delay + + brownian: RMS = 6 * DV * tau; + DV(displacement variable) = Db (brownian diffusion coeff) + random_flow: RMS = DV^2 * tau^2; + DV = V (first moment of velocity distribution) + : Any string other than 'brownian' or 'random_flow' will + be evaluated as is using Python eval, make sure it uses + 'DV' as the flow related independent variable, tau is + indexed as tau[J]. Any additional parameters can be + sent via "varargin" + + This file is part of Mesh-Based Monte Carlo + License: GPLv3, see http://mcx.space for details + """ + + # Set default values + if tau is None: + tau = np.logspace(-7, -1, 200) + + # Handle input data + if isinstance(detps, str): + from jdata import load as jload + + mch_data, mch_header = loadmch(detps, format) + fpath, fname = os.path.split(detps) + fname_no_ext = os.path.splitext(fname)[0] + + json_file = os.path.join(fpath, fname_no_ext + ".json") + cfg = jload(json_file) + + # Extract optical properties + media = cfg["Domain"]["Media"] + if isinstance(media, list): + prop = np.array([[m["mua"], m["mus"], m["g"], m["n"]] for m in media]) + else: + prop = media + + mua = prop[1:, 0] # Skip first row (background), take mua column + n = prop[1:, 3] # Skip first row (background), take n column + medianum = len(mua) + + # Create detps structure + detps = {} + detps["detid"] = mch_data[:, 0] # First column is detector ID + detps["ppath"] = mch_data[:, 2 : 2 + medianum] # Path lengths for each medium + + if mch_data.shape[1] >= 2 * medianum + 2: + detps["mom"] = mch_data[ + :, medianum + 2 : 2 * medianum + 2 + ] # Momentum transfer data + else: + # detps is already a dictionary/structure + mua = detps["prop"][1:, 0] # Skip first row (background) + n = detps["prop"][1:, 3] # Skip first row (background) + + if "mom" not in detps: + raise ValueError( + "No momentum transfer data are found, please rerun your simulation and set cfg.ismomentum=1." + ) + + # Set displacement model string + if disp_model == "brownian": + disp_str = "rmsdisp = 6 * DV * tau[J]" + elif disp_model == "random_flow": + disp_str = "rmsdisp = DV**2 * tau[J]**2" + else: + disp_str = f"rmsdisp = {disp_model}" + + # Calculate wave vector + k0 = 2 * np.pi * n / (lambda_ * 1e-6) + + # Get unique detector list + detlist = np.sort(np.unique(detps["detid"])) + g1 = np.zeros((int(np.max(detlist)), len(tau))) + + # Process each detector + for detid_idx, detid in enumerate(detlist): + I = int(detid) + idx = np.where(detps["detid"] == I)[0] + print(f"Processing detector {I}: {len(idx)} photons") + + # Get data for this detector + det_ppath = detps["ppath"][idx, :] + det_mom = detps["mom"][idx, :] + + # Process each correlation time + for J in range(len(tau)): + # Evaluate displacement string to get rmsdisp + # Create local namespace for eval + local_vars = { + "DV": DV, + "tau": tau, + "J": J, + "np": np, + **varargin, # Include any additional variables + } + + exec(disp_str, {"__builtins__": {}}, local_vars) + rmsdisp = local_vars["rmsdisp"] + + # Calculate g1 for this detector and correlation time + # Sum over all photons for this detector + phase_factor = np.exp( + -(k0**2 * rmsdisp / 3) * np.sum(det_mom, axis=1) + - np.dot(mua, det_ppath.T) + ) + g1[I - 1, J] = np.sum(phase_factor) + + # Normalize g1 + g1_norm = np.sum(np.exp(-np.dot(mua, det_ppath.T))) + g1[I - 1, :] = g1[I - 1, :] / g1_norm + + return tau, g1 + + +def cwdiffusion(mua, musp, Reff, srcpos, detpos): + """ + Phi, r = cwdiffusion(mua, musp, Reff, srcpos, detpos) + + Semi-infinite medium analytical solution to diffusion model + + Author: Qianqian Fang (q.fang neu.edu) + Converted to Python + + Parameters: + ----------- + mua : float + The absorption coefficients in 1/mm + musp : float + The reduced scattering coefficients in 1/mm + Reff : float + The effective reflection coefficient + srcpos : array_like + Array for the source positions (x, y, z) + detpos : array_like + Array for the detector positions (x, y, z) + + Returns: + -------- + Phi : ndarray + The output fluence for all source/detector pairs + r : ndarray (optional) + Source detector separations + + This file is part of Monte Carlo eXtreme (MCX) + License: GPLv3, see http://mcx.sf.net for details + See Boas2002, Haskell1994 + """ + + # Convert inputs to numpy arrays + srcpos = np.array(srcpos) + detpos = np.array(detpos) + + # Calculate diffusion coefficient + D = 1 / (3 * (mua + musp)) + + # Calculate extrapolation distance + zb = (1 + Reff) / (1 - Reff) * 2 * D + + # Calculate source depth + z0 = 1 / (musp + mua) + + # Create modified source positions for real and image sources + # Real source: add z0 to z coordinate + src_real = srcpos.copy() + if src_real.ndim == 1: + src_real = src_real.reshape(1, -1) + src_real[:, 2] = src_real[:, 2] + z0 + + # Image source: subtract z0 and 2*zb from z coordinate + src_image = srcpos.copy() + if src_image.ndim == 1: + src_image = src_image.reshape(1, -1) + src_image[:, 2] = src_image[:, 2] - z0 - 2 * zb + + # Calculate distances + r = getdistance(src_real, detpos) + r2 = getdistance(src_image, detpos) + + # Calculate effective attenuation coefficient + b = np.sqrt(3 * mua * musp) + + # Calculate fluence using diffusion equation solution + # Unit of phi: 1/(mm^2) + Phi = 1 / (4 * np.pi * D) * (np.exp(-b * r) / r - np.exp(-b * r2) / r2) + + return Phi, r + + +def cwfluxdiffusion(mua, musp, Reff, srcpos, detpos): + """ + flux = cwfluxdiffusion(mua, musp, Reff, srcpos, detpos) + + Compute surface flux for a semi-infinite medium + + Author: Shijie Yan (yan.shiji northeastern.edu) + Converted to Python + + Parameters: + ----------- + mua : float + The absorption coefficients in 1/mm + musp : float + The reduced scattering coefficients in 1/mm + Reff : float + The effective reflection coefficient + srcpos : array_like + Array for the source positions (x, y, z) + detpos : array_like + Array for the detector positions (x, y, z) + + Returns: + -------- + flux : ndarray + The diffuse reflectance for all source/detector pairs + + This file is part of Monte Carlo eXtreme (MCX) + License: GPLv3, see http://mcx.sf.net for details + See Kienle1997 + """ + + # Convert inputs to numpy arrays + srcpos = np.array(srcpos) + detpos = np.array(detpos) + + # Ensure arrays are 2D + if srcpos.ndim == 1: + srcpos = srcpos.reshape(1, -1) + if detpos.ndim == 1: + detpos = detpos.reshape(1, -1) + + # Calculate diffusion coefficient + D = 1 / (3 * (mua + musp)) + + # Calculate source depth + z0 = 1 / (mua + musp) + + # Calculate extrapolation distance + zb = (1 + Reff) / (1 - Reff) * 2 * D + + # Calculate effective attenuation coefficient + mueff = np.sqrt(3 * mua * (mua + musp)) + + # Create modified source positions for real and image sources + # Real source: z-coordinate shifted by +z0 + src_real = srcpos.copy() + src_real[:, 2] = src_real[:, 2] + z0 + + # Image source: z-coordinate shifted by +z0+2*zb + src_image = srcpos.copy() + src_image[:, 2] = src_image[:, 2] + z0 + 2 * zb + + # Calculate distances using getdistance function + r1 = getdistance(src_real, detpos) + r2 = getdistance(src_image, detpos) + + # Calculate flux using Eq. 6 of Kienle1997 + flux = ( + 1 + / (4 * np.pi) + * ( + z0 * (mueff + 1 / r1) * np.exp(-mueff * r1) / r1**2 + + (z0 + 2 * zb) * (mueff + 1 / r2) * np.exp(-mueff * r2) / r2**2 + ) + ) + + return flux + + +def cwfluencediffusion(*args, **kwargs): + return cwdiffusion(*args, **kwargs) + + +def rfreplay(cfg, f_mod, detp, seeds, detnums): + """ + rfjac_lnA, rfjac_phase = mcxrfreplay(cfg, f_mod, detp, seeds, detnums) + + Compute the frequency domain (FD) log-amplitude and phase shift Jacobians + with respect to voxel-wise absorption coefficients using the radio + frequency (RF) replay algorithm. + + Authors: Pauliina Hirvi (pauliina.hirvi aalto.fi) + Qianqian Fang (q.fang neu.edu) + Converted to Python + + Ref.: Hirvi et al. (2023). Effects of atlas-based anatomy on modelled + light transport in the neonatal head. Phys. Med. Biol. + https://doi.org/10.1088/1361-6560/acd48c + + Parameters: + ----------- + cfg : dict + Dict used in the main forward simulation + f_mod : float + RF modulation frequency in Hz + detp : dict + The 2nd output from mcxlab, must be a dict + seeds : dict + The 4th output from mcxlab + detnums : array_like + Array with the indices of the detectors to replay and obtain Jacobians + + Returns: + -------- + rfjac_lnA : ndarray + A 4D array with dimensions specified by [size(vol) num-of-detectors]; + each 3D array contains the Jacobians for log-amplitude measurements + rfjac_phase : ndarray + A 4D array with dimensions specified by [size(vol) num-of-detectors]; + each 3D array contains the Jacobians for phase shift measurements + + License: GPLv3, see http://mcx.space/ for details + """ + + if cfg is None or f_mod is None or detp is None or seeds is None or detnums is None: + raise ValueError("you must provide all 5 required input parameters") + + if "unitinmm" not in cfg: + cfg["unitinmm"] = 1 + + # Convert detnums to numpy array for consistent indexing + detnums = np.array(detnums) + + # Initialize the 4D arrays for collecting the Jacobians. The 4th dimension + # corresponds to the detector index. + vol_shape = np.array(cfg["vol"]).shape + rfjac_lnA = np.zeros(list(vol_shape) + [len(detnums)]) + rfjac_phase = np.zeros(list(vol_shape) + [len(detnums)]) + + # Collect Jacobians one detector index at a time. + for idx, d in enumerate(detnums): + # MCXLAB REPLAY SETTINGS + cfg_jac = copy.deepcopy(cfg) + cfg_jac["seed"] = seeds["data"] + cfg_jac["detphotons"] = detp["data"] + cfg_jac["replaydet"] = d + cfg_jac["outputtype"] = "rf" + cfg_jac["omega"] = 2 * np.pi * f_mod # RF modulation frequency + cfg_jac["isnormalized"] = 0 # Important! + cfg_jac["issave2pt"] = 1 + + # REPLAY SIMULATION + rfjac_d, detp_d, vol_d, seeds_d = mcxlab(cfg_jac) + + # Array with detected photon weights + detw = detweight(detp_d, cfg_jac["prop"], cfg_jac["unitinmm"]) + + # Array with photon time-of-flights + dett = dettime(detp_d, cfg_jac["prop"], cfg_jac["unitinmm"]) + + # FD MEASUREMENT ESTIMATES + X = np.dot(detw, np.cos((2 * f_mod) * dett * np.pi)) + Y = np.dot(detw, np.sin((2 * f_mod) * dett * np.pi)) + A = np.sqrt(X**2 + Y**2) # amplitude [a.u.] + + # Phase shift in [0, 2*pi] [rad] + phase = np.arctan2(Y, X) + (np.arctan2(Y, X) < 0).astype(float) * 2 * np.pi + + if A == 0: + print(f"MCX WARNING: No detected photons for detector {d}.") + continue + + # FD JACOBIANS + # Compute the Jacobians with the rf replay feature. + rfjac_d_data = rfjac_d["data"] + rfjac_d_sum = np.sum(rfjac_d_data, axis=3) # sum over time instances (axis 3) + + if cfg_jac["isnormalized"] == 0: + rfjac_d_sum = cfg_jac["unitinmm"] * rfjac_d_sum # correct units to [mm] + + # Jacobians for X and Y wrt mua: + rfjac_X = rfjac_d_sum[:, :, :, 0] # First component + rfjac_Y = rfjac_d_sum[:, :, :, 1] # Second component + + # Jacobians for log-amplitude and phase shift wrt mua: + rfjac_lnA[:, :, :, idx] = (1 / (A**2)) * (X * rfjac_X + Y * rfjac_Y) + rfjac_phase[:, :, :, idx] = (1 / (A**2)) * (X * rfjac_Y - Y * rfjac_X) + + return rfjac_lnA, rfjac_phase + + +def rfmusreplay(cfg, f_mod, detp, seeds, detnums): + """ + rfmusjac_lnA, rfmusjac_phase = mcxrfmusreplay(cfg, f_mod, detp, seeds, detnums) + + Compute the frequency domain (FD) log-amplitude and phase shift Jacobians + with respect to voxel-wise scattering coefficients using the radio + frequency mode (RF) replay algorithm. + + Authors: Pauliina Hirvi (pauliina.hirvi aalto.fi) + Qianqian Fang (q.fang neu.edu) + Converted to Python + + Ref.: Hirvi et al. (2025): https://www.overleaf.com/read/qgtqcdyvqfrw#485e8c + Hirvi et al. (2023): https://doi.org/10.1088/1361-6560/acd48c + + Parameters: + ----------- + cfg : dict + Dict used in the main forward simulation + f_mod : float + RF modulation frequency in Hz + detp : dict + The 2nd output from mcxlab, must be a dict + seeds : dict + The 4th output from mcxlab + detnums : array_like + Array with the indices of the detectors to replay and obtain Jacobians + + Returns: + -------- + rfmusjac_lnA : ndarray + A 4D array with dimensions specified by [size(vol) num-of-detectors]; + each 3D array contains the Jacobians for log-amplitude measurements + rfmusjac_phase : ndarray + A 4D array with dimensions specified by [size(vol) num-of-detectors]; + each 3D array contains the Jacobians for phase shift measurements + + License: GPLv3, see http://mcx.space/ for details + """ + + # Control. + if cfg is None or f_mod is None or detp is None or seeds is None or detnums is None: + raise ValueError("you must provide all 5 required input parameters") + + if "unitinmm" not in cfg: + cfg["unitinmm"] = 1 + + # Convert detnums to numpy array for consistent indexing + detnums = np.array(detnums) + + # Initialize the 4D arrays for collecting the Jacobians. The 4th dimension + # corresponds to the detector index. + vol_shape = np.array(cfg["vol"]).shape + rfmusjac_lnA = np.zeros(list(vol_shape) + [len(detnums)]) + rfmusjac_phase = np.zeros(list(vol_shape) + [len(detnums)]) + + # Return if no photons detected. + if not detp or not seeds or len(detp) == 0 or len(seeds) == 0: + print("MCX WARNING: No detected photons for replay.") + return rfmusjac_lnA, rfmusjac_phase + + # Form matrix with mus for each nonzero voxel, and 1 in 0 type or mus=0. + vol_array = np.array(cfg["vol"]) + nonzero_ind = np.where(vol_array.flatten() > 0)[0] + nonzero_prop_row = ( + vol_array.flatten()[nonzero_ind].astype(int) + 1 + ) # +1 for 0-based to 1-based indexing + + mus_matrix = np.ones(vol_shape) + prop_array = np.array(cfg["prop"]) + + # Extract mus values (column 2, which is index 1 in Python) + for i, idx in enumerate(nonzero_ind): + flat_idx = np.unravel_index(idx, vol_shape) + mus_matrix[flat_idx] = prop_array[nonzero_prop_row[i], 1] # Column 2 is index 1 + + # Avoid division by zero if mus=0 + mus_matrix = mus_matrix + (mus_matrix == 0).astype(float) + + # General replay settings. + cfg_jac = copy.deepcopy(cfg) + cfg_jac["seed"] = seeds["data"] + cfg_jac["detphotons"] = detp["data"] + cfg_jac["omega"] = 2 * np.pi * f_mod # RF modulation angular frequency + cfg_jac["isnormalized"] = 0 # Important! + cfg_jac["issave2pt"] = 1 + + # Collect Jacobians one detector index at a time. + for idx, d in enumerate(detnums): + # Check if detector has detected photons + if "detid" in detp and d not in detp["detid"]: + print(f"MCX WARNING: No detected photons for detector {d}.") + continue + + # REPLAY SIMULATION 1 + cfg_jac["replaydet"] = d + cfg_jac["outputtype"] = "rf" # FD absorption Jacobians + rfjac_d = mcxlab(cfg_jac) + + rfjac_d_data = rfjac_d["data"] + rfjac_d_sum = np.sum(rfjac_d_data, axis=3) # sum over time instances (axis 3) + + if cfg_jac["isnormalized"] == 0: + rfjac_d_sum = cfg_jac["unitinmm"] * rfjac_d_sum # correct units to [mm] + + # Jacobians for X and Y wrt mua: + rfjac_X = rfjac_d_sum[:, :, :, 0] # (-1*)cos-weighted paths + rfjac_Y = rfjac_d_sum[:, :, :, 1] # (-1*)sine-weighted paths + del rfjac_d, rfjac_d_data, rfjac_d_sum # Clear memory + + # REPLAY SIMULATION 2 + cfg_jac["outputtype"] = "rfmus" # FD scattering Jacobians + rfmusjac_d, detp_d, vol_d, seeds_d = mcxlab(cfg_jac) + + rfmusjac_d_data = rfmusjac_d["data"] + rfmusjac_d_sum = np.sum(rfmusjac_d_data, axis=3) # sum over time instances + + # Jacobians for X and Y wrt mus: + rfmusjac_X = rfmusjac_d_sum[:, :, :, 0] # cos-weighted nscatt + rfmusjac_X = rfmusjac_X / mus_matrix + rfjac_X + del rfjac_X # Clear memory + + rfmusjac_Y = rfmusjac_d_sum[:, :, :, 1] # sine-weighted nscatt + rfmusjac_Y = rfmusjac_Y / mus_matrix + rfjac_Y + del rfjac_Y, rfmusjac_d, rfmusjac_d_data, rfmusjac_d_sum # Clear memory + + # FD MEASUREMENT ESTIMATES + # Array with detected photon weights + detw = detweight(detp_d, cfg_jac["prop"], cfg_jac["unitinmm"]) + + # Array with photon time-of-flights + dett = dettime(detp_d, cfg_jac["prop"], cfg_jac["unitinmm"]) + + X = np.dot(detw, np.cos(cfg_jac["omega"] * dett)) + Y = np.dot(detw, np.sin(cfg_jac["omega"] * dett)) + A = np.sqrt(X**2 + Y**2) # amplitude [a.u.] + + # Phase shift in [0, 2*pi] [rad] + phase = np.arctan2(Y, X) + (np.arctan2(Y, X) < 0).astype(float) * 2 * np.pi + + # FINAL SCATTERING JACOBIANS + if A != 0: + rfmusjac_lnA[:, :, :, idx] = (1 / (A**2)) * ( + X * rfmusjac_X + Y * rfmusjac_Y + ) + rfmusjac_phase[:, :, :, idx] = (1 / (A**2)) * ( + X * rfmusjac_Y - Y * rfmusjac_X + ) + else: + print(f"MCX WARNING: Zero amplitude for detector {d}.") + rfmusjac_lnA[:, :, :, idx] = 0 + rfmusjac_phase[:, :, :, idx] = 0 + + return rfmusjac_lnA, rfmusjac_phase diff --git a/pmcx/setup.py b/pmcx/setup.py index 64581b3f..2850daa4 100644 --- a/pmcx/setup.py +++ b/pmcx/setup.py @@ -73,7 +73,6 @@ def build_extension(self, ext): pass else: - # Single config generators are handled "normally" single_config = any(x in cmake_generator for x in {"NMake", "Ninja"}) @@ -124,7 +123,7 @@ def build_extension(self, ext): setup( name="pmcx", packages=["pmcx"], - version="0.4.1", + version="0.5.1", requires=["numpy"], license="GPLv3+", author="Matin Raayai Ardakani, Qianqian Fang, Fan-Yu Yen", @@ -165,5 +164,6 @@ def build_extension(self, ext): "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", ], ) diff --git a/pmcx/test/test_all.py b/pmcx/test/test_all.py new file mode 100644 index 00000000..9d0433cd --- /dev/null +++ b/pmcx/test/test_all.py @@ -0,0 +1,650 @@ +# Copyright (c) 2023-2025 Qianqian Fang (q.fang neu.edu) +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import unittest +import tempfile +import os +import sys +import json +import struct +import numpy as np +from unittest.mock import patch + +sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) + + +class TestPMCXUtils(unittest.TestCase): + """Unit tests for pmcx.utils module""" + + def setUp(self): + """Set up test data""" + self.basic_prop = np.array( + [ + [0.0, 0.0, 1.0, 1.0], # background + [0.01, 10.0, 0.9, 1.37], # tissue 1 + [0.02, 8.0, 0.8, 1.4], # tissue 2 + ] + ) + + self.detp_data = { + "detid": np.array([1, 1, 2, 2]), + "ppath": np.array( + [[1.0, 2.0], [1.5, 1.8], [0.8, 2.5], [1.2, 2.2]], dtype=np.float32 + ), + "nscat": np.array([[5, 3], [4, 2], [6, 4], [3, 5]], dtype=np.float32), + "prop": self.basic_prop, + "unitinmm": 0.1, + "w0": np.array([1.0, 0.9, 0.8, 0.7]), + } + + def test_detweight_basic(self): + """Test basic detweight calculation""" + from pmcx.utils import detweight + + # Test with basic parameters + weights = detweight(self.detp_data, self.basic_prop, unitinmm=0.1) + + self.assertEqual(len(weights), 4) + self.assertTrue(all(w > 0 for w in weights)) + self.assertTrue(all(w <= 1 for w in weights)) + + def test_detweight_with_w0(self): + """Test detweight with initial weights""" + from pmcx.utils import detweight + + weights = detweight(self.detp_data, self.basic_prop, unitinmm=0.1) + + # Check that weights are affected by path lengths and optical properties + expected_weight_0 = 1.0 * np.exp(-0.01 * 1.0 * 0.1) * np.exp(-0.02 * 2.0 * 0.1) + self.assertAlmostEqual(weights[0], expected_weight_0, places=6) + + def test_detweight_errors(self): + """Test detweight error conditions""" + from pmcx.utils import detweight + + # Test with empty property list + empty_prop = np.array([[0.0, 0.0, 1.0, 1.0]]) + with self.assertRaises(ValueError): + detweight(self.detp_data, empty_prop) + + # Test with missing prop in detp and no prop provided + detp_no_prop = self.detp_data.copy() + del detp_no_prop["prop"] + with self.assertRaises(ValueError): + detweight(detp_no_prop) + + def test_meanpath(self): + """Test meanpath calculation""" + from pmcx.utils import meanpath + + avg_path = meanpath(self.detp_data, self.basic_prop) + + self.assertEqual(len(avg_path), 2) # Two tissue types + self.assertTrue(all(p > 0 for p in avg_path)) + + def test_meanscat(self): + """Test meanscat calculation""" + from pmcx.utils import meanscat + + avg_nscat = meanscat(self.detp_data, self.basic_prop) + + self.assertTrue(avg_nscat > 0) + self.assertIsInstance(avg_nscat, (float, np.floating)) + + def test_dettime(self): + """Test dettime calculation""" + from pmcx.utils import dettime + + times = dettime(self.detp_data, self.basic_prop, unitinmm=0.1) + + self.assertEqual(times.shape, (1, 4)) + self.assertTrue(all(t > 0 for t in times.flatten())) + + def test_cwdref(self): + """Test cwdref calculation""" + from pmcx.utils import cwdref + + cfg = { + "unitinmm": 0.1, + "prop": self.basic_prop, + "detpos": np.array([[0, 0, 0, 1.0], [5, 5, 0, 1.0]]), + "nphoton": 1000000, + } + + dref = cwdref(self.detp_data, cfg) + + self.assertEqual(len(dref), 2) # Two detectors + self.assertTrue(all(d >= 0 for d in dref)) + + def test_getdistance(self): + """Test getdistance calculation""" + from pmcx.utils import getdistance + + src_pos = np.array([[0, 0, 0], [10, 10, 10]]) + det_pos = np.array([[5, 0, 0], [0, 5, 0]]) + + distances = getdistance(src_pos, det_pos) + + self.assertEqual(distances.shape, (2, 2)) # 2 detectors, 2 sources + + # Test known distance + expected_dist_00 = np.sqrt(25) # distance from (0,0,0) to (5,0,0) + self.assertAlmostEqual(distances[0, 0], expected_dist_00, places=6) + + def test_tddiffusion(self): + """Test tddiffusion analytical solution""" + from pmcx.utils import tddiffusion + + mua = 0.01 + musp = 1.0 + v = 2.998e8 # speed of light in mm/s + Reff = 0.493 + srcpos = np.array([0, 0, 0]) + detpos = np.array([[10, 0, 0]]) + t = np.array([1e-9, 2e-9, 3e-9]) + + phi = tddiffusion(mua, musp, v, Reff, srcpos, detpos, t) + + self.assertEqual(phi.size, 3) # Three time points + self.assertTrue(np.all(phi > 0)) + + def test_detphoton(self): + """Test detphoton data separation""" + from pmcx.utils import detphoton + + # Create test data array + medianum = 2 + nphot = 4 + + # Create combined data array [detid, nscat1, nscat2, ppath1, ppath2, p1, p2, p3, w0] + combined_data = np.array( + [ + [1, 2, 1, 2], # detid + [5, 4, 6, 3], # nscat tissue 1 + [3, 2, 4, 5], # nscat tissue 2 + [1.0, 1.5, 0.8, 1.2], # ppath tissue 1 + [2.0, 1.8, 2.5, 2.2], # ppath tissue 2 + [0, 1, 2, 3], # p x + [0, 1, 2, 3], # p y + [0, 1, 2, 3], # p z + [1.0, 0.9, 0.8, 0.7], # w0 + ] + ) + + savedetflag = "dspxw" + newdetp = detphoton(combined_data, medianum, savedetflag) + + self.assertIn("detid", newdetp) + self.assertIn("nscat", newdetp) + self.assertIn("ppath", newdetp) + self.assertIn("p", newdetp) + self.assertIn("w0", newdetp) + + self.assertEqual(newdetp["detid"].shape, (4,)) + self.assertEqual(newdetp["nscat"].shape, (4, 2)) + self.assertEqual(newdetp["ppath"].shape, (4, 2)) + + def test_cwdiffusion(self): + """Test cwdiffusion analytical solution""" + from pmcx.utils import cwdiffusion + + mua = 0.01 + musp = 1.0 + Reff = 0.493 + srcpos = np.array([0, 0, 0]) + detpos = np.array([[10, 0, 0], [20, 0, 0]]) + + phi, r = cwdiffusion(mua, musp, Reff, srcpos, detpos) + + self.assertEqual(phi.shape, (2, 1)) # 2 detectors, 1 source + self.assertEqual(r.shape, (2, 1)) + self.assertTrue(all(p > 0 for p in phi.flatten())) + self.assertTrue(all(r_val > 0 for r_val in r.flatten())) + + def test_cwfluxdiffusion(self): + """Test cwfluxdiffusion calculation""" + from pmcx.utils import cwfluxdiffusion + + mua = 0.01 + musp = 1.0 + Reff = 0.493 + srcpos = np.array([0, 0, 0]) + detpos = np.array([[10, 0, 0]]) + + flux = cwfluxdiffusion(mua, musp, Reff, srcpos, detpos) + + self.assertGreater(flux[0, 0], 0) + + def test_mcxcreate(self): + """Test mcxcreate benchmark creation""" + from pmcx.utils import mcxcreate + + # Test getting list of benchmarks + bench_list = mcxcreate() + self.assertIsInstance(bench_list, list) + self.assertIn("cube60", bench_list) + self.assertIn("cube60b", bench_list) + + # Test creating a specific benchmark + cfg = mcxcreate("cube60") + self.assertIsInstance(cfg, dict) + self.assertIn("nphoton", cfg) + self.assertIn("vol", cfg) + self.assertIn("prop", cfg) + + # Test with custom parameters + cfg_custom = mcxcreate("cube60", nphoton=2000000, seed=12345) + self.assertEqual(cfg_custom["nphoton"], 2000000) + self.assertEqual(cfg_custom["seed"], 12345) + + # Test error for unsupported benchmark + with self.assertRaises(ValueError): + mcxcreate("nonexistent_benchmark") + + def test_dettpsf(self): + """Test dettpsf calculation""" + from pmcx.utils import dettpsf + + detnum = 1 + time_config = [0, 5e-9, 1e-10] + + tpsf = dettpsf(self.detp_data, detnum, self.basic_prop, time_config) + + self.assertEqual(tpsf.shape[1], 1) # Single column output + self.assertGreater(tpsf.shape[0], 0) # Has time bins + + @patch("pmcx.utils.loadmch") + def test_dcsg1_with_file(self, mock_loadmch): + """Test dcsg1 with file input""" + from pmcx.utils import dcsg1 + + # Mock file loading + mock_mch_data = np.array( + [ + [ + 1, + 0, + 1.0, + 2.0, + 0.1, + 0.2, + ], # detid, reserved, ppath1, ppath2, mom1, mom2 + [1, 0, 1.5, 1.8, 0.15, 0.18], + ] + ) + mock_header = {"medianum": 2} + mock_loadmch.return_value = (mock_mch_data, mock_header) + + # Mock jdata.load for config + with patch("jdata.load") as mock_jload: + mock_cfg = { + "Domain": { + "Media": [ + {"mua": 0.0, "mus": 0.0, "g": 1.0, "n": 1.0}, + {"mua": 0.01, "mus": 10.0, "g": 0.9, "n": 1.37}, + {"mua": 0.02, "mus": 8.0, "g": 0.8, "n": 1.4}, + ] + } + } + mock_jload.return_value = mock_cfg + + tau, g1 = dcsg1("test.mch") + + self.assertEqual(len(tau), 200) # Default tau length + self.assertGreater(g1.shape[0], 0) + + +class TestPMCXIO(unittest.TestCase): + """Unit tests for pmcx.io module""" + + def setUp(self): + """Set up test data""" + self.test_dim = [10, 10, 10, 5] + self.test_data = np.random.rand(*self.test_dim).astype(np.float32) + + def create_temp_mc2_file(self, data, format_type="float"): + """Helper to create temporary MC2 file""" + temp_file = tempfile.NamedTemporaryFile(suffix=".mc2", delete=False) + temp_file.write(data.tobytes()) + temp_file.close() + return temp_file.name + + def test_loadmc2_basic(self): + """Test basic loadmc2 functionality""" + from pmcx.io import loadmc2 + + # Create test file + temp_file = self.create_temp_mc2_file(self.test_data) + + try: + loaded_data = loadmc2(temp_file, self.test_dim, "float") + np.testing.assert_array_equal(loaded_data, self.test_data) + finally: + os.unlink(temp_file) + + def test_loadmc2_different_formats(self): + """Test loadmc2 with different data formats""" + from pmcx.io import loadmc2 + + # Test with uint8 + test_data_uint8 = np.random.randint(0, 256, size=(5, 5, 5), dtype=np.uint8) + temp_file = self.create_temp_mc2_file(test_data_uint8) + + try: + loaded_data = loadmc2(temp_file, [5, 5, 5], "uint8") + np.testing.assert_array_equal(loaded_data, test_data_uint8) + finally: + os.unlink(temp_file) + + def test_loadmc2_with_offset(self): + """Test loadmc2 with byte offset""" + from pmcx.io import loadmc2 + + # Create file with header + data + header = b"HEADER" + b"\x00" * 10 + temp_file = tempfile.NamedTemporaryFile(suffix=".mc2", delete=False) + temp_file.write(header + self.test_data.tobytes()) + temp_file.close() + + try: + loaded_data = loadmc2(temp_file.name, self.test_dim, "float", offset=16) + np.testing.assert_array_equal(loaded_data, self.test_data) + finally: + os.unlink(temp_file.name) + + def test_loadmc2_errors(self): + """Test loadmc2 error conditions""" + from pmcx.io import loadmc2 + + # Test unsupported format + temp_file = self.create_temp_mc2_file(self.test_data) + try: + with self.assertRaises(ValueError): + loadmc2(temp_file, self.test_dim, "unsupported_format") + finally: + os.unlink(temp_file) + + # Test non-existent file + with self.assertRaises(IOError): + loadmc2("nonexistent_file.mc2", self.test_dim) + + def create_temp_mch_file(self): + """Helper to create temporary MCH file with proper format""" + temp_file = tempfile.NamedTemporaryFile(suffix=".mch", delete=False) + + # MCH file format: magic header + header data + photon data + magic = b"MCXH" + + # Header: version, medianum, detnum, recordnum, totalphoton, detectedphoton, savedphoton + header = struct.pack("<7I", 1, 2, 2, 6, 1000, 100, 4) # 7 uint32 values + + # Additional header fields + unitmm = struct.pack(" 0 for w in weights)) + self.assertTrue(all(t > 0 for t in times.flatten())) + + def test_mc2_mch_workflow(self): + """Test workflow from MC2 to MCH file processing""" + from pmcx.io import loadmc2, loadfile + from pmcx.utils import detweight + + # Create MC2 test data + test_data = np.random.rand(5, 5, 5, 2).astype(np.float32) + temp_mc2 = tempfile.NamedTemporaryFile(suffix=".mc2", delete=False) + temp_mc2.write(test_data.tobytes()) + temp_mc2.close() + + try: + # Test direct loading + mc2_data = loadmc2(temp_mc2.name, [5, 5, 5, 2], "float") + np.testing.assert_array_equal(mc2_data, test_data) + + # Test through loadfile + file_data, header = loadfile(temp_mc2.name, [5, 5, 5, 2], "float") + expected_log_data = np.log10(test_data) + np.testing.assert_array_almost_equal(file_data, expected_log_data) + + finally: + os.unlink(temp_mc2.name) + + +if __name__ == "__main__": + unittest.main() diff --git a/pmcx/test/test.py b/pmcx/test/test_utils.py similarity index 91% rename from pmcx/test/test.py rename to pmcx/test/test_utils.py index d9abfeb7..96fa1db3 100644 --- a/pmcx/test/test.py +++ b/pmcx/test/test_utils.py @@ -1,5 +1,19 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- +# Copyright (c) 2023-2025 Qianqian Fang (q.fang neu.edu) +# Copyright (c) 2023 Fan-Yu (Ivy) Yen (yen.f at northeastern.edu) +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + """ Created on Fri Jul 28 15:44:04 2023 @@ -8,10 +22,11 @@ import unittest import sys +import os -sys.path.append("../pmcx/") +sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) -from utils import ( +from pmcx.utils import ( detweight, meanpath, dettpsf, diff --git a/script/photon b/script/photon index b256ff2a..93ce4e88 100755 --- a/script/photon +++ b/script/photon @@ -5,7 +5,7 @@ # # Author: Qianqian Fang # License: GPLv3 -# Version: 0.5 (v2025.6) +# Version: 0.5 (v2025.9) # Github: https://github.com/fangq/mcx/ # ############################################################################### diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 18679f97..a0fd199c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -40,7 +40,7 @@ string(PREPEND OMPFLAG "-Xcompiler ") set( CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS}; - -g -lineinfo -Xcompiler -Wall -Xcompiler -O3 -arch=sm_35 + -g -lineinfo -Xcompiler -Wall -Xcompiler -O3 -arch=sm_50 -DMCX_TARGET_NAME="Fermi MCX" -DUSE_ATOMIC -use_fast_math -DSAVE_DETECTORS -Xcompiler -fPIC ${OMPFLAG} ) @@ -67,6 +67,8 @@ cuda_add_library(mcx STATIC mcx_shapes.h mcx_bench.c mcx_bench.h + mcx_lang.c + mcx_lang.h mcx_mie.cpp mcx_mie.h mcx_tictoc.c @@ -105,6 +107,8 @@ if (BUILD_PYTHON) mcx_shapes.h mcx_bench.c mcx_bench.h + mcx_lang.c + mcx_lang.h mcx_mie.cpp mcx_mie.h mcx_tictoc.c @@ -136,6 +140,8 @@ if(BUILD_MEX AND Matlab_FOUND) mcx_shapes.h mcx_bench.c mcx_bench.h + mcx_lang.c + mcx_lang.h mcx_mie.cpp mcx_mie.h mcx_tictoc.c diff --git a/src/Makefile b/src/Makefile index 1aedffa9..7e366873 100644 --- a/src/Makefile +++ b/src/Makefile @@ -79,7 +79,7 @@ CPPFLAGS+=-g -Wall #-pedantic #-DNO_LZMA # -DUSE_OS_TIMER OBJSUFFIX=.o EXESUFFIX= -FILES=mcx_core mcx_utils mcx_shapes mcx_tictoc mcx mcx_bench mcx_neurojson mcx_mie cjson/cJSON ubj/ubjw +FILES=mcx_core mcx_utils mcx_shapes mcx_tictoc mcx mcx_bench mcx_neurojson mcx_mie mcx_lang cjson/cJSON ubj/ubjw ifeq ($(findstring _NT-,$(PLATFORM)), _NT-) CC=nvcc @@ -100,7 +100,7 @@ ifeq ($(findstring _NT-,$(PLATFORM)), _NT-) ifeq ($(findstring CYGWIN,$(PLATFORM)), CYGWIN) MEX=cmd /c mex COMPFLAGS='-MT' else - MEX=cmd //s //c mex COMPFLAGS='-MT' + MEX=cmd //s //c mex -v COMPFLAGS='-MT' endif NVCCOMP=$(CUOMPLINK) "$(OMP)" CUCCOPT+=$(NVCCOMP) @@ -137,14 +137,14 @@ endif ifneq (,$(filter mex,$(MAKECMDGOALS))) - FILES=mcx_core mcx_utils mcx_shapes mcx_tictoc mcx_bench mcx_mie cjson/cJSON + FILES=mcx_core mcx_utils mcx_shapes mcx_tictoc mcx_bench mcx_mie mcx_lang cjson/cJSON ZMATLIB= USERLINKOPT= ZLIBFLAG= endif ifneq (,$(filter oct,$(MAKECMDGOALS))) - FILES=mcx_core mcx_utils mcx_shapes mcx_tictoc mcx_bench mcx_mie cjson/cJSON + FILES=mcx_core mcx_utils mcx_shapes mcx_tictoc mcx_bench mcx_mie mcx_lang cjson/cJSON ZMATLIB= USERLINKOPT= ZLIBFLAG= @@ -234,7 +234,7 @@ static: CUOMPLINK=-Xcompiler static: LINKOPT=$(CUDA_STATIC) fermimex: AR=$(MEX) -fermimex: LINKOPT+= CXXFLAGS='$$CXXFLAGS -g -DSAVE_DETECTORS -DMCX_CONTAINER -DMATLAB_MEX_FILE $(OMP) $(MEXCCOPT) $(USERCCOPT)' LINKLIBS="$(MEXLINKLIBS) $(MEXLINKOPT)" CXXLIBS='$$CXXLIBS $(MEXLINKOPT)' LDFLAGS='-L$$TMW_ROOT$$MATLABROOT/sys/os/$$ARCH $$LDFLAGS $(OMP) $(USERLINKOPT)' +fermimex: LINKOPT+= CXXFLAGS='$$CXXFLAGS -g -DSAVE_DETECTORS -DMCX_CONTAINER -DMATLAB_MEX_FILE $(OMP) $(MEXCCOPT) $(USERCCOPT)' LINKLIBS="$(MEXLINKLIBS) $(MEXLINKOPT)" CXXLIBS='$$CXXLIBS $(MEXLINKOPT)' LDFLAGS='-L"$$MATLABROOT/sys/os/$$ARCH" $$LDFLAGS $(OMP) $(USERLINKOPT)' oct fermimex fermioct: OUTPUT_DIR=../mcxlab fermimex: BINARY=mcx fermioct: BINARY=mcx.mex @@ -339,6 +339,7 @@ pretty: --formatted \ --break-blocks \ --exclude=mcx_bench.c \ + --exclude=mcx_lang.c \ "*.c" "*.h" "*.cpp" "*.cu" .DEFAULT_GOAL := all diff --git a/src/mcx_const.h b/src/mcx_const.h index d20c6ea5..72a15f3c 100644 --- a/src/mcx_const.h +++ b/src/mcx_const.h @@ -35,7 +35,7 @@ #ifndef _MCEXTREME_CONSTANT_H #define _MCEXTREME_CONSTANT_H -#define MCX_VERSION "v2025.6" +#define MCX_VERSION "v2025.9" #define MCX_VERSION_MAJOR 2 #define MCX_VERSION_MINOR 8 diff --git a/src/mcx_core.cu b/src/mcx_core.cu index 12d642b1..6f51d398 100644 --- a/src/mcx_core.cu +++ b/src/mcx_core.cu @@ -1202,6 +1202,10 @@ __device__ inline int launchnewphoton(MCXpos* p, MCXdir* v, Stokes* s, MCXtime* } } + if (gcfg->seed == SEED_FROM_FILE && gcfg->srcid >= 1) { + rand_uniform01(t); + } + ppath += gcfg->partialdata; /** @@ -1971,10 +1975,10 @@ __global__ void mcx_main_loop(uint media[], OutputType field[], float genergy[], //< photontof[] and replayweight[] should be cached using local mem to avoid global read int tshift = (idx * gcfg->threadphoton + min(idx, gcfg->oddphotons - 1) + (int)f.ndone); tshift = (int)(floorf((photontof[tshift] - gcfg->twin0) * gcfg->Rtstep)) + - ( (gcfg->replaydet == -1) ? ((photondetid[tshift] - 1) * gcfg->maxgate) : 0); + ( (gcfg->replaydet == -1) ? (((photondetid[tshift] & 0xFFFF) - 1) * gcfg->maxgate) : 0); if (gcfg->extrasrclen && gcfg->srcid < 0) { - tshift += ((int)ppath[gcfg->w0offset - 1] - 1) * gcfg->maxgate; + tshift += ((int)ppath[gcfg->w0offset - 1] - 1) * ((gcfg->replaydet == -1) ? gcfg->detnum : 1) * gcfg->maxgate; } tshift = MIN(gcfg->maxgate - 1, tshift); @@ -1988,7 +1992,7 @@ __global__ void mcx_main_loop(uint media[], OutputType field[], float genergy[], sphi = theta * stheta; } else { tmp0 = (gcfg->outputtype == otDCS) ? (1.f - ctheta) : 1.f; - tmp0 = (gcfg->outputtype == otWPTOF) ? photontof[tshift] : tmp0; + tmp0 = (gcfg->outputtype == otWPTOF) ? photontof[(idx * gcfg->threadphoton + min(idx, gcfg->oddphotons - 1) + (int)f.ndone)] : tmp0; tmp0 *= theta; } @@ -2167,15 +2171,14 @@ __global__ void mcx_main_loop(uint media[], OutputType field[], float genergy[], tshift = (idx * gcfg->threadphoton + min(idx, gcfg->oddphotons - 1) + (int)f.ndone); tshift = (int)(floorf((photontof[tshift] - gcfg->twin0) * gcfg->Rtstep)) + - ( (gcfg->replaydet == -1) ? ((photondetid[tshift] - 1) * gcfg->maxgate) : 0); - tshift = MIN(gcfg->maxgate - 1, tshift); + ( (gcfg->replaydet == -1) ? (((photondetid[tshift] & 0xFFFF) - 1) * gcfg->maxgate) : 0); } } else if (gcfg->outputtype == otL) { weight = w0 * f.pathlen; } if (gcfg->extrasrclen && gcfg->srcid < 0) { - tshift += ((int)ppath[gcfg->w0offset - 1] - 1) * gcfg->maxgate; + tshift += ((int)ppath[gcfg->w0offset - 1] - 1) * ((gcfg->replaydet == -1) ? gcfg->detnum : 1) * gcfg->maxgate; } GPUDEBUG(("deposit to [%d] %e, w=%f\n", idx1dold, weight, p.w)); @@ -2582,21 +2585,27 @@ int mcx_list_gpu(Config* cfg, GPUInfo** info) { if (cuerr != cudaSuccess) { if (cuerr == (cudaError_t)30) { - mcx_error(-(int)cuerr, "A CUDA-capable GPU is not found or configured", __FILE__, __LINE__); + mcx_error(-(int)cuerr, T_("A CUDA-capable GPU is not found or configured"), __FILE__, __LINE__); } CUDA_ASSERT(cuerr); } if (deviceCount == 0) { - MCX_FPRINTF(cfg->flog, S_RED "ERROR: No CUDA-capable GPU device found\n" S_RESET); + MCX_FPRINTF(cfg->flog, S_RED "%s\n" S_RESET, T_("ERROR: No CUDA-capable GPU device found")); return 0; } *info = (GPUInfo*)calloc(deviceCount, sizeof(GPUInfo)); if (cfg->gpuid && cfg->gpuid > deviceCount) { - MCX_FPRINTF(cfg->flog, S_RED "ERROR: Specified GPU ID is out of range\n" S_RESET); + MCX_FPRINTF(cfg->flog, S_RED "%s\n" S_RESET, T_("ERROR: Specified GPU ID is out of range")); + + if (*info) { + free(*info); + *info = NULL; + } + return 0; } @@ -2622,7 +2631,11 @@ int mcx_list_gpu(Config* cfg, GPUInfo** info) { (*info)[dev].constmem = dp.totalConstMem; (*info)[dev].sharedmem = dp.sharedMemPerBlock; (*info)[dev].regcount = dp.regsPerBlock; +#if CUDA_VERSION >= 13000 + cudaDeviceGetAttribute(&((*info)[dev].clock), cudaDevAttrClockRate, dev); +#else (*info)[dev].clock = dp.clockRate; +#endif (*info)[dev].sm = dp.multiProcessorCount; (*info)[dev].core = dp.multiProcessorCount * mcx_corecount(dp.major, dp.minor); (*info)[dev].maxmpthread = dp.maxThreadsPerMultiProcessor; @@ -2630,7 +2643,7 @@ int mcx_list_gpu(Config* cfg, GPUInfo** info) { (*info)[dev].autoblock = MAX((*info)[dev].maxmpthread / mcx_smxblock(dp.major, dp.minor), 64); if ((*info)[dev].autoblock == 0) { - MCX_FPRINTF(cfg->flog, S_RED "WARNING: maxThreadsPerMultiProcessor can not be detected\n" S_RESET); + MCX_FPRINTF(cfg->flog, S_RED "%s\n" S_RESET, T_("WARNING: maxThreadsPerMultiProcessor can not be detected")); (*info)[dev].autoblock = 64; } @@ -2638,7 +2651,7 @@ int mcx_list_gpu(Config* cfg, GPUInfo** info) { if (strncmp(dp.name, "Device Emulation", 16)) { if (cfg->isgpuinfo) { - MCX_FPRINTF(stdout, S_BLUE"============================= GPU Information ================================\n" S_RESET); + MCX_FPRINTF(stdout, S_BLUE"============================= %s ================================\n" S_RESET, T_("GPU Information")); MCX_FPRINTF(stdout, "Device %d of %d:\t\t%s\n", (*info)[dev].id, (*info)[dev].devcount, (*info)[dev].name); MCX_FPRINTF(stdout, "Compute Capability:\t%u.%u\n", (*info)[dev].major, (*info)[dev].minor); MCX_FPRINTF(stdout, "Global Memory:\t\t%.0f B\nConstant Memory:\t%.0f B\n" @@ -2830,7 +2843,7 @@ void mcx_run_simulation(Config* cfg, GPUInfo* gpu) { gpuid = cfg->deviceid[threadid] - 1; if (gpuid < 0) { - mcx_error(-1, "GPU ID must be non-zero", __FILE__, __LINE__); + mcx_error(-1, T_("GPU ID must be non-zero"), __FILE__, __LINE__); } /** Activate the corresponding GPU device */ @@ -2878,7 +2891,7 @@ void mcx_run_simulation(Config* cfg, GPUInfo* gpu) { float* vec = &(param.src.dir.x); if (ABS(vec[is2d - 1]) > EPS) { - mcx_error(-1, "input domain is 2D, the initial direction can not have non-zero value in the singular dimension", __FILE__, __LINE__); + mcx_error(-1, T_("input domain is 2D, the initial direction can not have non-zero value in the singular dimension"), __FILE__, __LINE__); } } @@ -2942,7 +2955,7 @@ void mcx_run_simulation(Config* cfg, GPUInfo* gpu) { if (cfg->workload[i] > 0.f) { fullload += cfg->workload[i]; } else { - mcx_error(-1, "workload was unspecified for an active device", __FILE__, __LINE__); + mcx_error(-1, T_("workload was unspecified for an active device"), __FILE__, __LINE__); } /** Now we can determine how many photons to be simualated by multiplying the total photon by the relative ratio of per-device workload divided by the total workload */ @@ -2960,7 +2973,7 @@ void mcx_run_simulation(Config* cfg, GPUInfo* gpu) { param.threadphoton = gpuphoton / gpu[gpuid].autothread / (-cfg->respin); param.oddphotons = gpuphoton / (-cfg->respin) - param.threadphoton * gpu[gpuid].autothread; } else { - mcx_error(-1, "respin number can not be 0, check your -r/--repeat input or cfg.respin value", __FILE__, __LINE__); + mcx_error(-1, T_("respin number can not be 0, check your -r/--repeat input or cfg.respin value"), __FILE__, __LINE__); } /** Total time gate number is computed */ @@ -2969,7 +2982,7 @@ void mcx_run_simulation(Config* cfg, GPUInfo* gpu) { /** Here we determine if the GPU memory of the current device can store all time gates, if not, disabling normalization */ if (totalgates > gpu[gpuid].maxgate && cfg->isnormalized) { - MCX_FPRINTF(cfg->flog, S_RED "WARNING: %d %d %d [%d %d %d] GPU memory can not hold all time gates, disabling normalization to allow multiple runs\n" S_RESET, totalgates, gpu[gpuid].maxgate, cfg->isnormalized, cfg->dim.x, cfg->dim.y, cfg->dim.z); + MCX_FPRINTF(cfg->flog, S_RED "WARNING: %d %d %d [%d %d %d] %s\n" S_RESET, totalgates, gpu[gpuid].maxgate, cfg->isnormalized, cfg->dim.x, cfg->dim.y, cfg->dim.z, T_("GPU memory can not hold all time gates, disabling normalization to allow multiple runs")); cfg->isnormalized = 0; } @@ -3014,15 +3027,15 @@ void mcx_run_simulation(Config* cfg, GPUInfo* gpu) { CUDA_ASSERT(cudaMemcpyToSymbol(gcfg, ¶m, sizeof(MCXParam), 0, cudaMemcpyHostToDevice)); tic = StartTimer(); - MCX_FPRINTF(cfg->flog, "generating %lu random numbers ... \t", fieldlen); + MCX_FPRINTF(cfg->flog, "%s %lu %s ... \t", T_("generating"), fieldlen, T_("random numbers")); fflush(cfg->flog); mcx_test_rng <<< 1, 1>>>(rngfield, gPseed); tic1 = GetTimeMillis(); - MCX_FPRINTF(cfg->flog, "kernel complete: \t%d ms\nretrieving random numbers ... \t", tic1 - tic); + MCX_FPRINTF(cfg->flog, "%s: \t%d ms\n%s ... \t", T_("kernel complete"), tic1 - tic, T_("retrieving random numbers")); CUDA_ASSERT(cudaGetLastError()); CUDA_ASSERT(cudaMemcpy(field, rngfield, sizeof(float)*dimxyz* gpu[gpuid].maxgate, cudaMemcpyDeviceToHost)); - MCX_FPRINTF(cfg->flog, "transfer complete:\t%d ms\n\n", GetTimeMillis() - tic); + MCX_FPRINTF(cfg->flog, "%s:\t%d ms\n\n", T_("transfer complete"), GetTimeMillis() - tic); fflush(cfg->flog); if (cfg->exportfield) { @@ -3032,9 +3045,9 @@ void mcx_run_simulation(Config* cfg, GPUInfo* gpu) { #ifndef MCX_CONTAINER if (cfg->issave2pt && cfg->parentid == mpStandalone) { - MCX_FPRINTF(cfg->flog, "saving data to file ...\t"); + MCX_FPRINTF(cfg->flog, "%s ...\t", T_("saving data to file")); mcx_savedata(field, fieldlen, cfg); - MCX_FPRINTF(cfg->flog, "saving data complete : %d ms\n\n", GetTimeMillis() - tic); + MCX_FPRINTF(cfg->flog, "%s : %d ms\n\n", T_("saving data complete"), GetTimeMillis() - tic); fflush(cfg->flog); } @@ -3166,7 +3179,7 @@ void mcx_run_simulation(Config* cfg, GPUInfo* gpu) { * Saving detected photon is enabled by default, but in case if a user disabled this feature, a warning is printed */ if (cfg->issavedet) { - MCX_FPRINTF(cfg->flog, S_RED "WARNING: this MCX binary can not save partial path, please recompile mcx and make sure -D SAVE_DETECTORS is used by nvcc\n" S_RESET); + MCX_FPRINTF(cfg->flog, S_RED "%s\n" S_RESET, T_("WARNING: this MCX binary can not save partial path, please recompile mcx and make sure -D SAVE_DETECTORS is used by nvcc")); cfg->issavedet = 0; } @@ -3208,13 +3221,19 @@ void mcx_run_simulation(Config* cfg, GPUInfo* gpu) { mcx_printheader(cfg); #ifdef MCX_TARGET_NAME - MCX_FPRINTF(cfg->flog, "- code name: [%s] compiled by nvcc [%d.%d] for CUDA-arch [%d] on [%s]\n", - MCX_TARGET_NAME, __CUDACC_VER_MAJOR__, __CUDACC_VER_MINOR__, __CUDA_ARCH_LIST__, __DATE__); + MCX_FPRINTF(cfg->flog, "- %s: [%s] %s [%d.%d] for CUDA-arch [%d] on [%s]\n", + T_("code name"), MCX_TARGET_NAME, T_("compiled by nvcc"), __CUDACC_VER_MAJOR__, __CUDACC_VER_MINOR__, __CUDA_ARCH_LIST__, __DATE__); #else - MCX_FPRINTF(cfg->flog, "- code name: [Vanilla MCX] compiled by nvcc [%d.%d] for CUDA-arch [%d] on [%s]\n", - __CUDACC_VER_MAJOR__, __CUDACC_VER_MINOR__, __CUDA_ARCH_LIST__, __DATE__); + MCX_FPRINTF(cfg->flog, "- %s: [Vanilla MCX] %s [%d.%d] for CUDA-arch [%d] on [%s]\n", + T_("code name"), T_("compiled by nvcc"), __CUDACC_VER_MAJOR__, __CUDACC_VER_MINOR__, __CUDA_ARCH_LIST__, __DATE__); #endif - MCX_FPRINTF(cfg->flog, "- compiled with: RNG [%s] with Seed Length [%d]\n", MCX_RNG_NAME, (int)((sizeof(RandType)*RAND_BUF_LEN) >> 2)); + + // Validate source type + if (cfg->srctype == -1) { + MCX_ERROR(-1, "the specified source type is not supported"); + } + + MCX_FPRINTF(cfg->flog, "- %s: RNG [%s] %s [%d]\n", T_("compiled with"), MCX_RNG_NAME, T_("seed length"), (int)((sizeof(RandType)*RAND_BUF_LEN) >> 2)); fflush(cfg->flog); } @@ -3225,7 +3244,7 @@ void mcx_run_simulation(Config* cfg, GPUInfo* gpu) { */ MCX_FPRINTF(cfg->flog, "\nGPU=%d (%s) threadph=%d extra=%d np=%.0f nthread=%d maxgate=%d repetition=%d\n", gpuid + 1, gpu[gpuid].name, param.threadphoton, param.oddphotons, (double)gpuphoton, gpu[gpuid].autothread, gpu[gpuid].maxgate, ABS(cfg->respin)); - MCX_FPRINTF(cfg->flog, "initializing streams ...\t"); + MCX_FPRINTF(cfg->flog, "%s ...\t", T_("initializing streams")); fflush(cfg->flog); mcx_flush(cfg); @@ -3256,7 +3275,7 @@ void mcx_run_simulation(Config* cfg, GPUInfo* gpu) { CUDA_ASSERT(cudaMemcpyToSymbol(gproperty, cfg->srcdata, cfg->extrasrclen * 4 * sizeof(float4), cfg->medianum * sizeof(Medium) + cfg->detnum * sizeof(float4), cudaMemcpyHostToDevice)); } - MCX_FPRINTF(cfg->flog, "init complete : %d ms\n", GetTimeMillis() - tic); + MCX_FPRINTF(cfg->flog, "%s : %d ms\n", T_("init complete"), GetTimeMillis() - tic); /** * If one has to simulate a lot of time gates, using the GPU global memory @@ -3272,7 +3291,7 @@ void mcx_run_simulation(Config* cfg, GPUInfo* gpu) { */ sharedbuf = (param.nphaselen + param.nanglelen) * sizeof(float) + gpu[gpuid].autoblock * (cfg->issaveseed * (RAND_BUF_LEN * sizeof(RandType)) + sizeof(float) * (param.w0offset + cfg->srcnum + 2 * (cfg->outputtype == otRF || cfg->outputtype == otRFmus))); - MCX_FPRINTF(cfg->flog, "requesting %d bytes of shared memory\n", sharedbuf); + MCX_FPRINTF(cfg->flog, "%s: %d bytes\n", T_("requesting shared memory"), sharedbuf); /** * Outer loop: loop over each time-gate-group, determined by the capacity of the global memory to hold the output data, in most cases, \c totalgates is 1 @@ -3286,8 +3305,8 @@ void mcx_run_simulation(Config* cfg, GPUInfo* gpu) { /** Copy param to the constant memory variable gcfg */ CUDA_ASSERT(cudaMemcpyToSymbol(gcfg, ¶m, sizeof(MCXParam), 0, cudaMemcpyHostToDevice)); - MCX_FPRINTF(cfg->flog, S_CYAN"launching MCX simulation for time window [%.2ens %.2ens] ...\n" S_RESET - , param.twin0 * 1e9, param.twin1 * 1e9); + MCX_FPRINTF(cfg->flog, S_CYAN"%s [%.2ens %.2ens] ...\n" S_RESET + , T_("launching MCX simulation for time window"), param.twin0 * 1e9, param.twin1 * 1e9); /** * Inner loop: loop over total number of repetitions specified by cfg.respin, results will be accumulated to \c field @@ -3337,7 +3356,7 @@ void mcx_run_simulation(Config* cfg, GPUInfo* gpu) { } } #endif - MCX_FPRINTF(cfg->flog, "simulation run#%2d ... \n", iter + 1); + MCX_FPRINTF(cfg->flog, "%s%2d ... \n", T_("simulation run#"), iter + 1); fflush(cfg->flog); mcx_flush(cfg); @@ -3507,7 +3526,7 @@ void mcx_run_simulation(Config* cfg, GPUInfo* gpu) { /** now we can estimate and print the GPU-kernel-only runtime */ tic1 = GetTimeMillis(); toc += tic1 - tic0; - MCX_FPRINTF(cfg->flog, "kernel complete: \t%d ms\nretrieving fields ... \t", tic1 - tic); + MCX_FPRINTF(cfg->flog, "%s: \t%d ms\n%s ... \t", T_("kernel complete"), tic1 - tic, T_("retrieving fields")); /** * If the GPU kernel crashed or terminated by error during execution, we need @@ -3536,11 +3555,11 @@ void mcx_run_simulation(Config* cfg, GPUInfo* gpu) { { if (debugrec > 0) { if (debugrec > cfg->maxjumpdebug) { - MCX_FPRINTF(cfg->flog, S_RED "WARNING: the saved trajectory positions (%d) \ -are more than what your have specified (%d), please use the --maxjumpdebug option to specify a greater number\n" S_RESET - , debugrec, cfg->maxjumpdebug); + MCX_FPRINTF(cfg->flog, S_RED "%s (%d > %d), %s\n" S_RESET, + T_("WARNING: the saved trajectory positions are more than what your have specified"), debugrec, cfg->maxjumpdebug, + T_("please use the --maxjumpdebug option to specify a greater number")); } else { - MCX_FPRINTF(cfg->flog, "saved %u trajectory positions, total: %d\t", debugrec, cfg->debugdatalen + debugrec); + MCX_FPRINTF(cfg->flog, "%s: %u, total: %d\t", T_("saved trajectory positions"), debugrec, cfg->debugdatalen + debugrec); } debugrec = min(debugrec, cfg->maxjumpdebug); @@ -3568,11 +3587,11 @@ are more than what your have specified (%d), please use the --maxjumpdebug optio } if (detected > cfg->maxdetphoton) { - MCX_FPRINTF(cfg->flog, S_RED "WARNING: the detected photon (%d) \ -is more than what your have specified (%d), please use the -H option to specify a greater number\t" S_RESET - , detected, cfg->maxdetphoton); + MCX_FPRINTF(cfg->flog, S_RED "%s (%d > %d), %s\n" S_RESET, + T_("WARNING: the detected photon number is more than what your have specified"), detected, cfg->maxjumpdebug, + T_("please use the -H option to specify a greater number")); } else { - MCX_FPRINTF(cfg->flog, "detected " S_BOLD "" S_BLUE "%d photons" S_RESET", total: " S_BOLD "" S_BLUE "%.0f" S_RESET"\t", detected, (double)cfg->detectedcount + detected); + MCX_FPRINTF(cfg->flog, "%s " S_BOLD "" S_BLUE "%d %s" S_RESET", total: " S_BOLD "" S_BLUE "%.0f" S_RESET"\t", T_("detected"), detected, T_("photons"), (double)cfg->detectedcount + detected); } /** @@ -3612,7 +3631,7 @@ is more than what your have specified (%d), please use the -H option to specify size_t i; OutputType* rawfield = (OutputType*)malloc(sizeof(OutputType) * fieldlen * SHADOWCOUNT); CUDA_ASSERT(cudaMemcpy(rawfield, gfield, sizeof(OutputType)*fieldlen * SHADOWCOUNT, cudaMemcpyDeviceToHost)); - MCX_FPRINTF(cfg->flog, "transfer complete:\t%d ms\n", GetTimeMillis() - tic); + MCX_FPRINTF(cfg->flog, "%s:\t%d ms\n", T_("transfer complete"), GetTimeMillis() - tic); fflush(cfg->flog); /** @@ -3760,7 +3779,7 @@ is more than what your have specified (%d), please use the -H option to specify float* scale = (float*)calloc(cfg->srcnum, sizeof(float)); scale[0] = 1.f; int isnormalized = 0; - MCX_FPRINTF(cfg->flog, "normalizing raw data ...\t"); + MCX_FPRINTF(cfg->flog, "%s\t", T_("normalizing raw data ...")); cfg->energyabs += cfg->energytot - cfg->energyesc; /** @@ -3784,7 +3803,7 @@ is more than what your have specified (%d), please use the -H option to specify scale[0] = 0.f; // the cfg->normalizer and cfg.his.normalizer are inaccurate in this case, but this is ok for (size_t i = 0; i < cfg->nphoton; i++) - if (cfg->replay.detid[i] == detid) { + if ((cfg->replay.detid[i] & 0xFFFF) == detid) { scale[0] += cfg->replay.weight[i]; } @@ -3799,7 +3818,7 @@ is more than what your have specified (%d), please use the -H option to specify scale[0] = cfg->unitinmm; } - MCX_FPRINTF(cfg->flog, "normalization factor for detector %d alpha=%f\n", detid, scale[0]); + MCX_FPRINTF(cfg->flog, "%s %d alpha=%f\n", T_("normalization factor for detector"), detid, scale[0]); fflush(cfg->flog); mcx_normalize(cfg->exportfield + (detid - 1)*dimxyz * gpu[gpuid].maxgate, scale[0], dimxyz * gpu[gpuid].maxgate, cfg->isnormalized, 0, 1); @@ -3820,7 +3839,7 @@ is more than what your have specified (%d), please use the -H option to specify scale[0] = cfg->unitinmm / scale[0]; } - MCX_FPRINTF(cfg->flog, "normalization factor for detector %d alpha=%f\n", cfg->replaydet, scale[0]); + MCX_FPRINTF(cfg->flog, "%s %d alpha=%f\n", T_("normalization factor for detector"), cfg->replaydet, scale[0]); fflush(cfg->flog); } } @@ -3850,14 +3869,14 @@ is more than what your have specified (%d), please use the -H option to specify if (!isnormalized) { for (i = 0; i < (int)cfg->srcnum; i++) { - MCX_FPRINTF(cfg->flog, "source %d, normalization factor alpha=%f\n", (i + 1), scale[i]); + MCX_FPRINTF(cfg->flog, "%s %d, %s alpha=%f\n", T_("source"), (i + 1), T_("normalization factor"), scale[i]); fflush(cfg->flog); mcx_normalize(cfg->exportfield, scale[i], fieldlen / cfg->srcnum * ((cfg->outputtype == otRF || cfg->outputtype == otRFmus) + 1), cfg->isnormalized, i, cfg->srcnum); } } free(scale); - MCX_FPRINTF(cfg->flog, "data normalization complete : %d ms\n", GetTimeMillis() - tic); + MCX_FPRINTF(cfg->flog, "%s : %d ms\n", T_("data normalization complete"), GetTimeMillis() - tic); } /** @@ -3868,9 +3887,9 @@ is more than what your have specified (%d), please use the -H option to specify #ifndef MCX_CONTAINER if (cfg->issave2pt && cfg->parentid == mpStandalone) { - MCX_FPRINTF(cfg->flog, "saving data to file ...\t"); + MCX_FPRINTF(cfg->flog, "%s ... \t", T_("saving data to file")); mcx_savedata(cfg->exportfield, fieldlen, cfg); - MCX_FPRINTF(cfg->flog, "saving data complete : %d ms\n\n", GetTimeMillis() - tic); + MCX_FPRINTF(cfg->flog, "%s : %d ms\n\n", T_("saving data complete"), GetTimeMillis() - tic); fflush(cfg->flog); } @@ -3942,21 +3961,23 @@ is more than what your have specified (%d), please use the -H option to specify /** * Report simulation summary, total energy here equals total simulated photons+unfinished photons for all threads */ - MCX_FPRINTF(cfg->flog, "simulated %.0f photons (%.0f) with %d threads (repeat x%d)\nMCX simulation speed: " S_BOLD "" S_BLUE "%.2f photon/ms\n" S_RESET, - (double)cfg->nphoton * ((cfg->respin > 1) ? (cfg->respin) : 1), (double)cfg->nphoton * ((cfg->respin > 1) ? (cfg->respin) : 1), - gpu[gpuid].autothread, ABS(cfg->respin), + MCX_FPRINTF(cfg->flog, "%s %.0f %s (%.0f) with %d threads (repeat x%d)\n%s: " S_BOLD "" S_BLUE "%.2f photon/ms\n" S_RESET, + T_("simulated"), (double)cfg->nphoton * ((cfg->respin > 1) ? (cfg->respin) : 1), T_("photons"), (double)cfg->nphoton * ((cfg->respin > 1) ? (cfg->respin) : 1), + gpu[gpuid].autothread, ABS(cfg->respin), T_("MCX simulation speed"), ((cfg->issavedet == FILL_MAXDETPHOTON) ? cfg->energytot : ((double)cfg->nphoton * ((cfg->respin > 1) ? (cfg->respin) : 1))) / max(1, cfg->runtime)); fflush(cfg->flog); if (cfg->issave2pt && (cfg->srctype == MCX_SRC_PATTERN || cfg->srctype == MCX_SRC_PATTERN3D) && cfg->srcnum > 1) { for (i = 0; i < (int)cfg->srcnum; i++) { - MCX_FPRINTF(cfg->flog, "source #%d total simulated energy: %.2f\tabsorbed: " S_BOLD "" S_BLUE "%5.5f%%" S_RESET"\n(loss due to initial specular reflection is excluded in the total)\n", - i + 1, energytot[i], energyabs[i] / energytot[i] * 100.f); + MCX_FPRINTF(cfg->flog, "source #%d %s: %.2f\t%s: " S_BOLD "" S_BLUE "%5.5f%%" S_RESET"\n(%s)\n", + i + 1, T_("total simulated energy"), energytot[i], T_("absorbed"), energyabs[i] / energytot[i] * 100.f, + T_("loss due to initial specular reflection is excluded in the total")); fflush(cfg->flog); } } else { - MCX_FPRINTF(cfg->flog, "total simulated energy: %.2f\tabsorbed: " S_BOLD "" S_BLUE "%5.5f%%" S_RESET"\n(loss due to initial specular reflection is excluded in the total)\n", - cfg->energytot, (cfg->energytot - cfg->energyesc) / cfg->energytot * 100.f); + MCX_FPRINTF(cfg->flog, "%s: %.2f\t%s: " S_BOLD "" S_BLUE "%5.5f%%" S_RESET"\n(%s)\n", + T_("total simulated energy"), cfg->energytot, T_("absorbed"), (cfg->energytot - cfg->energyesc) / cfg->energytot * 100.f, + T_("loss due to initial specular reflection is excluded in the total")); fflush(cfg->flog); fflush(cfg->flog); } diff --git a/src/mcx_lang.c b/src/mcx_lang.c new file mode 100644 index 00000000..68e33d34 --- /dev/null +++ b/src/mcx_lang.c @@ -0,0 +1,906 @@ +/***************************************************************************//** +** \mainpage Monte Carlo eXtreme - GPU accelerated Monte Carlo Photon Migration +** +** \author Qianqian Fang +** \copyright Qianqian Fang, 2009-2025 +** +** \section sref Reference +** \li \c (\b Fang2009) Qianqian Fang and David A. Boas, +** +** "Monte Carlo Simulation of Photon Migration in 3D Turbid Media Accelerated +** by Graphics Processing Units," Optics Express, 17(22) 20178-20190 (2009). +** \li \c (\b Yu2018) Leiming Yu, Fanny Nina-Paravecino, David Kaeli, and Qianqian Fang, +** "Scalable and massively parallel Monte Carlo photon transport +** simulations for heterogeneous computing platforms," J. Biomed. Optics, +** 23(1), 010504, 2018. https://doi.org/10.1117/1.JBO.23.1.010504 +** \li \c (\b Yan2020) Shijie Yan and Qianqian Fang* (2020), "Hybrid mesh and voxel +** based Monte Carlo algorithm for accurate and efficient photon transport +** modeling in complex bio-tissues," Biomed. Opt. Express, 11(11) +** pp. 6262-6270. https://doi.org/10.1364/BOE.409468 +** +** \section sformat Formatting +** Please always run "make pretty" inside the \c src folder before each commit. +** The above command requires \c astyle to perform automatic formatting. +** +** \section slicense License +** GPL v3, see LICENSE.txt for details +*******************************************************************************/ + +/***************************************************************************//** +\file mcx_lang.c + +@brief MCX language support + +How to add a new translation: +First, decide the new language's ID - must be in the format of "aa_bb", where "aa" +must be the two-letter ISO 639 langauge code (https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes), +and "bb" must be the two-letter region code (https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes). +This code should be append to the below string array languagename[], and increase +the value of macro MAX_MCX_LANG defined in mcx_lang.h by 1. + +Next, copy any one of the translation section below, starting from "MSTR(" and +ending with "})" and append to the end of the array translations[], right before +the last line "};" , add comma to separate this new translation JSON string with +its previous translations. The index of the translation strings must match +the location language ID in the languagename array. + +Next, update the translation strings - the second string to the right of ":" on +each line to the desired language. DO NOT modify the English key names on the left, +because it could result in mismatch when performing the look-up. For "_MCX_BANNER_", +the translation is a multi-line string, please only modify the string content, and do not +remove or alter double-quotes/newlines or spaces after the content string in order +for this string to conform to JSON syntax while still be able to embed ASCII color +codes. + +Once completed, plese compile MCX using make/make mex or cmake, and test your new +translation by adding "--lang/-y aa_BB" command line option, or setting cfg.lang in +mcxlab. Please also adjust the white-spaces in the printed _MCX_BANNER_ strings +to equalize the lengths of each line. +*******************************************************************************/ + +#include "mcx_lang.h" +#include "mcx_const.h" + +#define MSTR(...) #__VA_ARGS__ + +const char *languagename[MAX_MCX_LANG] = {"zh_cn", "zh_tw", "ja_jp", "fr_ca", "es_mx", "de_de", "ko_kr", "hi_in", "pt_br", ""}; + +const char* translations[MAX_MCX_LANG] = { +MSTR( +{ + "_LANG_": "简体中文", + "_LOCALE_": "zh_CN", + "_MCX_BANNER_": +) "\"" S_MAGENTA "###############################################################################\n\ +# 极限蒙卡 (MCX) -- CUDA #\n\ +# 作者版权 (c) 2009-2025 Qianqian Fang #\n\ +#" S_BLUE " https://mcx.space/ & https://neurojson.io " S_MAGENTA "#\n\ +# #\n\ +# Computational Optics & Translational Imaging (COTI) Lab- " S_BLUE "http://fanglab.org " S_MAGENTA "#\n\ +# 美国东北大学生物工程系,马萨诸塞州,波士顿 #\n\ +###############################################################################\n\ +# MCX 软件开发是在美国 NIH/NIGMS 经费(R01-GM114365)资助下完成的,特此致谢 #\n\ +###############################################################################\n\ +# 开源的科研代码以及开放的可重用科学数据对现代科学发展至关重要。MCX开发团队致 #\n\ +# 力开放科学,并在 NIH 的资助下特别为此开发基于JSON的输入和输出文件格式。 #\n\ +# #\n\ +# 请访问我们的开放数据门户网站 NeuroJSON.io(" S_BLUE "https://neurojson.io" S_MAGENTA "),并诚挚邀请 #\n\ +# 用户一道使用简单,可重用的 JSON 格式以及我们的免费网站来共享您的科研数据。 #\n" S_RESET "\"," MSTR( + "absorbed": "总吸收率", + "after encoding": "编码后压缩比", + "A CUDA-capable GPU is not found or configured": "找不到支持 CUDA 的 GPU", + "Built-in benchmarks": "内置仿真", + "Built-in languages": "内置语言", + "code name": "版本代号", + "Command option": "命令参数", + "compiled by nvcc": "nvcc 版本", + "compiled with": "编译设置", + "compressing data": "压缩数据", + "compression ratio": "压缩比", + "data normalization complete": "数据归一化完成", + "detected": "探测到", + "Downloading simulations from NeuroJSON.io (https://neurojson.org/db/mcx)": "从 NeuroJSON.io (https://neurojson.org/db/mcx) 下载仿真数据", + "ERROR: No CUDA-capable GPU device found": "错误:找不到支持 CUDA 的 GPU", + "ERROR: Specified GPU ID is out of range": "错误:指定 GPU 编号不在支持范围", + "generating": "生成", + "GPU ID can not be more than 256": "GPU 编号不可以超过256", + "GPU ID must be non-zero": "GPU 编号不可以为0", + "GPU Information": "GPU 信息", + "GPU memory can not hold all time gates, disabling normalization to allow multiple runs": "GPU 内存无法保存所有时间窗数据,关闭归一化设置", + "incomplete input": "输入不完整", + "init complete": "初始化完成", + "initializing streams": "初始化GPU", + "input domain is 2D, the initial direction can not have non-zero value in the singular dimension": "二维仿真中发射角必须在二维平面中", + "invalid json fragment following --json": "--json输入格式错误", + "Jacobian output is only valid in the reply mode. Please give an mch file after '-E'.": "Jacobian 输出只能在重放模式使用。请在-E参数后提供 .mch 文件路径", + "json fragment is expected after --json": "--json参数后必须提供 JSON 格式数据", + "json shape constructs are expected after -P": "-P 参数后必须提供 JSON 格式的形状构件描述", + "kernel complete": "GPU 仿真程序完成", + "launching MCX simulation for time window": "运行 MCX 仿真,起止时间窗", + "loss due to initial specular reflection is excluded in the total": "不包含初始入射时镜面反射的能量损失", + "MCX Revision": "MCX 版本", + "MCX simulation speed": "MCX 仿真速度", + "No GPU device found": "无法找到GPU", + "normalization factor": "归一化系数", + "normalization factor for detector": "探测器归一化系数", + "normalizing raw data ...": "归一化原始输出", + "photons": "光子", + "please use the -H option to specify a greater number": "请使用 -H 参数指定更大的光子数", + "please use the --maxjumpdebug option to specify a greater number": "请使用 --maxjumpdebug 参数指定更大的光子数", + "random numbers": "随机数", + "requesting shared memory": "正在分配高速线程共享显存", + "respin number can not be 0, check your -r/--repeat input or cfg.respin value": "仿真分段数不可以为0; 请检查 -r/--repeat 输入参数或 cfg.respin 数值", + "retrieving fields": "获取仿真三维输出数组", + "retrieving random numbers": "获取生成的随机数", + "saved trajectory positions": "保存的光子路径位置", + "saving data complete": "保存数据完成", + "saving data to file": "保存数据到文件", + "seed length": "随机数种子字(4字节)长", + "seeding file is not supported in this binary": "不支持保存随机数生成器种子", + "simulated": "模拟了", + "simulation run#": "仿真分段#", + "source": "光源", + "the specified output data format is not recognized": "指定的输出文件格式尚未支持", + "the specified output data type is not recognized": "指定的输出数据类型尚未支持", + "total simulated energy": "仿真总能量", + "transfer complete": "获取数据完成", + "unable to save to log file, will print from stdout": "无法保存日志文件,只能从标准输出打印", + "unknown short option": "短参数不存在", + "unknown verbose option": "长参数不存在", + "unnamed": "未命名", + "Unsupported bechmark": "该仿真不存在", + "Unsupported media format": "指定媒质格式尚未支持", + "WARNING: maxThreadsPerMultiProcessor can not be detected": "警告:maxThreadsPerMultiProcessor 参数不支持", + "WARNING: the detected photon number is more than what your have specified": "警告:探测到的光子超过预先指定的数量", + "WARNING: the saved trajectory positions are more than what your have specified": "警告:保存的光子路径超过预先指定的数量", + "WARNING: this MCX binary can not save partial path, please recompile mcx and make sure -D SAVE_DETECTORS is used by nvcc": "警告:这个版本的 MCX 不支持保存 partial path,请添加 -D SAVE_DETECTORS 编译参数并重新编译 MCX", + "workload was unspecified for an active device": "启用的显卡无指定的仿真负载配比", + "you can not specify both interactive mode and config file": "配置文件(-f)和交互模式(-i)不可以同时使用" +}), + +MSTR( +{ + "_LANG_": "繁體中文(台灣)", + "_LOCALE_": "zh_TW", + "_MCX_BANNER_": +) "\"" S_MAGENTA "###############################################################################\n\ +# 極限蒙卡 (MCX) -- CUDA #\n\ +# 作者版權 (c) 2009-2025 Qianqian Fang #\n\ +#" S_BLUE " https://mcx.space/ & https://neurojson.io " S_MAGENTA "#\n\ +# #\n\ +# 計算光學與轉譯影像實驗室 (COTI Lab) - " S_BLUE "http://fanglab.org " S_MAGENTA " #\n\ +# 美國東北大學生物工程系,馬薩諸塞州波士頓 #\n\ +###############################################################################\n\ +# MCX 軟體開發獲得美國 NIH/NIGMS 經費(R01-GM114365)資助,在此致謝 #\n\ +###############################################################################\n\ +# 開源的科研代碼與可重複使用的開放科學數據對現代科學發展至關重要。MCX 開發團隊#\n\ +# 致力於推動開放科學,並在NIH資助下,特別開發了基於JSON 的輸入與輸出檔案格式。#\n\ +# #\n\ +# 請造訪我們的開放數據入口網站 NeuroJSON.io(" S_BLUE "https://neurojson.io" S_MAGENTA "),誠摯邀請您 #\n\ +# 一同使用簡單、可重複使用的 JSON 格式與我們的免費網站來分享您的科研數據。 #\n" S_RESET "\"," MSTR( + "absorbed": "總吸收率", + "after encoding": "編碼後壓縮比", + "A CUDA-capable GPU is not found or configured": "找不到支援 CUDA 的 GPU", + "Built-in benchmarks": "內建模擬", + "Built-in languages": "内置语言", + "code name": "版本代號", + "Command option": "指令參數", + "compiled by nvcc": "nvcc 編譯版本", + "compiled with": "編譯設定", + "compressing data": "壓縮資料", + "compression ratio": "壓縮比", + "data normalization complete": "資料正規化完成", + "detected": "偵測到", + "Downloading simulations from NeuroJSON.io (https://neurojson.org/db/mcx)": "從 NeuroJSON.io (https://neurojson.org/db/mcx) 下載模擬資料", + "ERROR: No CUDA-capable GPU device found": "錯誤:找不到支援 CUDA 的 GPU 裝置", + "ERROR: Specified GPU ID is out of range": "錯誤:指定的 GPU 編號超出範圍", + "generating": "生成中", + "GPU ID can not be more than 256": "GPU 編號不可超過 256", + "GPU ID must be non-zero": "GPU 編號不可為 0", + "GPU Information": "GPU 資訊", + "GPU memory can not hold all time gates, disabling normalization to allow multiple runs": "GPU 記憶體不足以儲存所有時間窗,停用正規化以允許多次執行", + "incomplete input": "輸入不完整", + "init complete": "初始化完成", + "initializing streams": "初始化 GPU", + "input domain is 2D, the initial direction can not have non-zero value in the singular dimension": "在二維模擬中,初始方向不可有非零的單維分量", + "invalid json fragment following --json": "--json 參數後的 JSON 格式錯誤", + "Jacobian output is only valid in the reply mode. Please give an mch file after '-E'.": "Jacobian 輸出僅在回播模式中有效,請在 -E 參數後提供 .mch 檔案", + "json fragment is expected after --json": "--json 參數後應提供 JSON 格式片段", + "json shape constructs are expected after -P": "-P 參數後應提供 JSON 格式的形狀描述", + "kernel complete": "GPU 模擬完成", + "launching MCX simulation for time window": "啟動 MCX 模擬,時間窗:", + "loss due to initial specular reflection is excluded in the total": "總能量不含初始鏡面反射損失", + "MCX Revision": "MCX 版本", + "MCX simulation speed": "MCX 模擬速度", + "No GPU device found": "找不到 GPU 裝置", + "normalization factor": "正規化係數", + "normalization factor for detector": "偵測器正規化係數", + "normalizing raw data ...": "正在正規化原始資料...", + "photons": "光子", + "please use the -H option to specify a greater number": "請使用 -H 參數指定更大的光子數", + "please use the --maxjumpdebug option to specify a greater number": "請使用 --maxjumpdebug 參數指定更大的光子數", + "random numbers": "隨機數", + "requesting shared memory": "請求共用記憶體", + "respin number can not be 0, check your -r/--repeat input or cfg.respin value": "模擬分段數不得為 0,請檢查 -r/--repeat 參數或 cfg.respin 設定值", + "retrieving fields": "讀取模擬三維輸出欄位", + "retrieving random numbers": "讀取隨機數", + "saved trajectory positions": "儲存的軌跡位置", + "saving data complete": "資料儲存完成", + "saving data to file": "將資料儲存至檔案", + "seed length": "隨機數種子長度(4位元組)", + "seeding file is not supported in this binary": "此執行檔不支援種子檔功能", + "simulated": "模擬了", + "simulation run#": "模擬執行次數 #", + "source": "光源", + "the specified output data format is not recognized": "不支援指定的輸出資料格式", + "the specified output data type is not recognized": "不支援指定的輸出資料類型", + "total simulated energy": "模擬總能量", + "transfer complete": "資料傳輸完成", + "unable to save to log file, will print from stdout": "無法寫入日誌檔案,將改為輸出至標準輸出", + "unknown short option": "未知短參數", + "unknown verbose option": "未知長參數", + "unnamed": "未命名", + "Unsupported bechmark": "不支援的模擬項目", + "Unsupported media format": "不支援的媒質格式", + "WARNING: maxThreadsPerMultiProcessor can not be detected": "警告:無法偵測 maxThreadsPerMultiProcessor", + "WARNING: the detected photon number is more than what your have specified": "警告:偵測到的光子數超出指定數量", + "WARNING: the saved trajectory positions are more than what your have specified": "警告:儲存的軌跡數超出指定數量", + "WARNING: this MCX binary can not save partial path, please recompile mcx and make sure -D SAVE_DETECTORS is used by nvcc": "警告:此版本 MCX 不支援儲存 partial path,請使用 -D SAVE_DETECTORS 重新編譯", + "workload was unspecified for an active device": "已啟用的裝置未設定工作負載比例", + "you can not specify both interactive mode and config file": "不能同時指定互動模式(-i)與設定檔(-f)" +}), + +MSTR( +{ + "_LANG_": "日本語", + "_LOCALE_": "ja_JP", + "_MCX_BANNER_": +) "\"" S_MAGENTA "###############################################################################\n\ +# 極限モンテカルロ (MCX) -- CUDA #\n\ +# 著作権 (c) 2009-2025 Qianqian Fang #\n\ +#" S_BLUE " https://mcx.space/ & https://neurojson.io " S_MAGENTA "#\n\ +# #\n\ +# Computational Optics & Translational Imaging (COTI) Lab- " S_BLUE "http://fanglab.org " S_MAGENTA "#\n\ +# 米国マサチューセッツ州ボストン、ノースイースタン大学 生体工学部 #\n\ +###############################################################################\n\ +#MCX ソフトウェアは米国 NIH/NIGMS の助成金(R01-GM114365)によって開発されました#\n\ +###############################################################################\n\ +# オープンソースの科学コードと再利用可能な科学データは、現代科学に不可欠です。#\n\ +# MCX 開発チームはオープンサイエンスを推進し、NIH の支援を受け、JSON を用いた #\n\ +# 入出力形式を特別に開発しました。 #\n\ +# #\n\ +# 私たちのオープンデータポータルサイト NeuroJSON.io(" S_BLUE "https://neurojson.io" S_MAGENTA ") #\n\ +# を訪問し、簡単で再利用可能な JSON 形式と無料のウェブサービスを使って、あなた#\n\ +# の研究データを#ぜひ共有してください。 #\n" S_RESET "\"," MSTR( + "absorbed": "総吸収率", + "after encoding": "エンコード後の圧縮率", + "A CUDA-capable GPU is not found or configured": "CUDA対応のGPUが見つからないか、設定されていません", + "Built-in benchmarks": "内蔵ベンチマーク", + "Built-in languages": "内蔵言語", + "code name": "コードネーム", + "Command option": "コマンドオプション", + "compiled by nvcc": "nvcc でコンパイル", + "compiled with": "コンパイル設定", + "compressing data": "データを圧縮中", + "compression ratio": "圧縮率", + "data normalization complete": "データの正規化が完了しました", + "detected": "検出された", + "Downloading simulations from NeuroJSON.io (https://neurojson.org/db/mcx)": "NeuroJSON.io (https://neurojson.org/db/mcx) からシミュレーションをダウンロード中", + "ERROR: No CUDA-capable GPU device found": "エラー:CUDA対応GPUが見つかりません", + "ERROR: Specified GPU ID is out of range": "エラー:指定されたGPU IDが範囲外です", + "generating": "生成中", + "GPU ID can not be more than 256": "GPU ID は 256 以下でなければなりません", + "GPU ID must be non-zero": "GPU ID は 0 以外である必要があります", + "GPU Information": "GPU 情報", + "GPU memory can not hold all time gates, disabling normalization to allow multiple runs": "GPU メモリに全ての時間ゲートを保持できないため、正規化を無効にして複数回実行可能にします", + "incomplete input": "入力が不完全です", + "init complete": "初期化完了", + "initializing streams": "GPUを初期化中", + "input domain is 2D, the initial direction can not have non-zero value in the singular dimension": "2次元シミュレーションでは、単一次元の方向成分はゼロでなければなりません", + "invalid json fragment following --json": "--json の後に無効な JSON フラグメントがあります", + "Jacobian output is only valid in the reply mode. Please give an mch file after '-E'.": "Jacobian出力はリプレイモードでのみ有効です。'-E' の後に .mch ファイルを指定してください", + "json fragment is expected after --json": "--json の後には JSON データが必要です", + "json shape constructs are expected after -P": "-P の後には JSON 形式の形状データが必要です", + "kernel complete": "GPU シミュレーション完了", + "launching MCX simulation for time window": "指定した時間ウィンドウでMCXシミュレーションを開始中", + "loss due to initial specular reflection is excluded in the total": "初期鏡面反射による損失は合計に含まれていません", + "MCX Revision": "MCX バージョン", + "MCX simulation speed": "MCX シミュレーション速度", + "No GPU device found": "GPU デバイスが見つかりません", + "normalization factor": "正規化係数", + "normalization factor for detector": "検出器の正規化係数", + "normalizing raw data ...": "生データを正規化中...", + "photons": "光子", + "please use the -H option to specify a greater number": "-H オプションを使ってより大きな値を指定してください", + "please use the --maxjumpdebug option to specify a greater number": "--maxjumpdebug オプションでより大きな値を指定してください", + "random numbers": "乱数", + "requesting shared memory": "共有メモリをリクエスト中", + "respin number can not be 0, check your -r/--repeat input or cfg.respin value": "再実行数は0にできません。-r/--repeatオプションかcfg.respinを確認してください", + "retrieving fields": "3次元出力フィールドを取得中", + "retrieving random numbers": "乱数を取得中", + "saved trajectory positions": "保存された軌跡位置", + "saving data complete": "データ保存完了", + "saving data to file": "ファイルへデータを保存中", + "seed length": "乱数種子の長さ(4バイト)", + "seeding file is not supported in this binary": "このバイナリでは乱数種子ファイルはサポートされていません", + "simulated": "シミュレーションされた", + "simulation run#": "シミュレーション実行 #", + "source": "光源", + "the specified output data format is not recognized": "指定された出力データ形式は未対応です", + "the specified output data type is not recognized": "指定された出力データ型は未対応です", + "total simulated energy": "総シミュレーションエネルギー", + "transfer complete": "データ転送完了", + "unable to save to log file, will print from stdout": "ログファイルに保存できないため、標準出力に表示します", + "unknown short option": "不明な短オプション", + "unknown verbose option": "不明な長オプション", + "unnamed": "無名", + "Unsupported bechmark": "このベンチマークはサポートされていません", + "Unsupported media format": "指定されたメディア形式はサポートされていません", + "WARNING: maxThreadsPerMultiProcessor can not be detected": "警告:maxThreadsPerMultiProcessor を検出できません", + "WARNING: the detected photon number is more than what your have specified": "警告:検出された光子数が指定数を超えています", + "WARNING: the saved trajectory positions are more than what your have specified": "警告:保存された軌跡数が指定数を超えています", + "WARNING: this MCX binary can not save partial path, please recompile mcx and make sure -D SAVE_DETECTORS is used by nvcc": "警告:このMCXバイナリでは部分経路の保存ができません。-D SAVE_DETECTORSを使用して再コンパイルしてください", + "workload was unspecified for an active device": "アクティブなデバイスに対して作業負荷が指定されていません", + "you can not specify both interactive mode and config file": "インタラクティブモード(-i)と設定ファイル(-f)は同時に使用できません" +}), + +MSTR( +{ + "_LANG_": "Français canadien", + "_LOCALE_": "fr_CA", + "_MCX_BANNER_": +) "\"" S_MAGENTA "###############################################################################\n\ +# Monte Carlo Extrême (MCX) -- CUDA #\n\ +# Droits d’auteur (c) 2009-2025 Qianqian Fang #\n\ +#" S_BLUE " https://mcx.space/ & https://neurojson.io " S_MAGENTA "#\n\ +# #\n\ +#Optique computationnelle et imagerie translationnelle(COTI)-" S_BLUE "http://fanglab.org" S_MAGENTA "#\n\ +# Département de bio-ingénierie, Université Northeastern, Boston, MA, É.-U. #\n\ +###############################################################################\n\ +#Le développement de MCX est financé par le NIH/NIGMS des É.-U. (R01-GM114365)#\n\ +###############################################################################\n\ +# Le code scientifique libre et les données ouvertes réutilisables sont #\n\ +# essentiels à la science moderne. L’équipe MCX s’engage pour la science #\n\ +# ouverte et a développé un format d’entrée/sortie basé sur JSON grâce au #\n\ +# soutien du NIH. #\n\ +# #\n\ +# Visitez notre portail de données ouvertes NeuroJSON.io(" S_BLUE "https://neurojson.io" S_MAGENTA ")#\n\ +# et partagez vos données scientifiques à l’aide de JSON simple et #\n\ +# réutilisable, ainsi que notre site gratuit. #\n" S_RESET "\"," MSTR( + "absorbed": "taux d’absorption total", + "after encoding": "Taux de compression après encodage", + "A CUDA-capable GPU is not found or configured": "Aucun GPU compatible CUDA n’a été trouvé ou configuré", + "Built-in benchmarks": "Tests de performance intégrés", + "Built-in languages": "Langues intégrées", + "code name": "nom de code", + "Command option": "option de commande", + "compiled by nvcc": "compilé avec nvcc", + "compiled with": "paramètres de compilation", + "compressing data": "compression des données en cours", + "compression ratio": "taux de compression", + "data normalization complete": "normalisation des données terminée", + "detected": "détecté", + "Downloading simulations from NeuroJSON.io (https://neurojson.org/db/mcx)": "Téléchargement des simulations depuis NeuroJSON.io (https://neurojson.org/db/mcx)", + "ERROR: No CUDA-capable GPU device found": "ERREUR : Aucun périphérique GPU compatible CUDA trouvé", + "ERROR: Specified GPU ID is out of range": "ERREUR : L’ID de GPU spécifié est hors plage", + "generating": "génération en cours", + "GPU ID can not be more than 256": "L’ID du GPU ne peut pas dépasser 256", + "GPU ID must be non-zero": "L’ID du GPU ne peut pas être zéro", + "GPU Information": "Informations sur le GPU", + "GPU memory can not hold all time gates, disabling normalization to allow multiple runs": "La mémoire du GPU est insuffisante pour tous les intervalles temporels; normalisation désactivée pour permettre plusieurs exécutions", + "incomplete input": "entrée incomplète", + "init complete": "initialisation terminée", + "initializing streams": "initialisation du GPU en cours", + "input domain is 2D, the initial direction can not have non-zero value in the singular dimension": "Le domaine d’entrée est 2D; la direction initiale ne peut pas avoir de composante non nulle dans la dimension unique", + "invalid json fragment following --json": "fragment JSON invalide après --json", + "Jacobian output is only valid in the reply mode. Please give an mch file after '-E'.": "La sortie Jacobienne est seulement valide en mode de relecture. Veuillez fournir un fichier .mch après ‘-E’.", + "json fragment is expected after --json": "un fragment JSON est attendu après --json", + "json shape constructs are expected after -P": "des objets de forme JSON sont attendus après -P", + "kernel complete": "exécution du noyau GPU terminée", + "launching MCX simulation for time window": "lancement de la simulation MCX pour la fenêtre temporelle", + "loss due to initial specular reflection is excluded in the total": "la perte due à la réflexion spéculaire initiale est exclue du total", + "MCX Revision": "révision de MCX", + "MCX simulation speed": "vitesse de simulation MCX", + "No GPU device found": "aucun GPU détecté", + "normalization factor": "facteur de normalisation", + "normalization factor for detector": "facteur de normalisation du détecteur", + "normalizing raw data ...": "normalisation des données brutes ...", + "photons": "photons", + "please use the -H option to specify a greater number": "veuillez utiliser l’option -H pour spécifier un nombre plus élevé", + "please use the --maxjumpdebug option to specify a greater number": "veuillez utiliser l’option --maxjumpdebug pour spécifier un nombre plus élevé", + "random numbers": "nombres aléatoires", + "requesting shared memory": "allocation de mémoire partagée en cours", + "respin number can not be 0, check your -r/--repeat input or cfg.respin value": "le nombre de répétitions ne peut pas être 0; vérifiez l’entrée -r/--repeat ou cfg.respin", + "retrieving fields": "récupération des champs de sortie 3D", + "retrieving random numbers": "récupération des nombres aléatoires", + "saved trajectory positions": "positions de trajectoires enregistrées", + "saving data complete": "sauvegarde des données terminée", + "saving data to file": "sauvegarde des données dans un fichier", + "seed length": "longueur de la graine (4 octets)", + "seeding file is not supported in this binary": "le fichier de graine aléatoire n’est pas pris en charge dans ce binaire", + "simulated": "simulé", + "simulation run#": "exécution de simulation #", + "source": "source", + "the specified output data format is not recognized": "le format de sortie spécifié n’est pas pris en charge", + "the specified output data type is not recognized": "le type de données de sortie spécifié n’est pas reconnu", + "total simulated energy": "énergie totale simulée", + "transfer complete": "transfert terminé", + "unable to save to log file, will print from stdout": "impossible d’écrire dans le fichier journal; impression via la sortie standard", + "unknown short option": "option abrégée inconnue", + "unknown verbose option": "option complète inconnue", + "unnamed": "sans nom", + "Unsupported bechmark": "test de performance non pris en charge", + "Unsupported media format": "format de média non pris en charge", + "WARNING: maxThreadsPerMultiProcessor can not be detected": "AVERTISSEMENT : maxThreadsPerMultiProcessor n’a pas pu être détecté", + "WARNING: the detected photon number is more than what your have specified": "AVERTISSEMENT : le nombre de photons détectés dépasse le nombre spécifié", + "WARNING: the saved trajectory positions are more than what your have specified": "AVERTISSEMENT : le nombre de trajectoires enregistrées dépasse celui spécifié", + "WARNING: this MCX binary can not save partial path, please recompile mcx and make sure -D SAVE_DETECTORS is used by nvcc": "AVERTISSEMENT : ce binaire de MCX ne peut pas enregistrer de chemin partiel; veuillez recompiler avec -D SAVE_DETECTORS", + "workload was unspecified for an active device": "aucune charge de travail spécifiée pour un appareil actif", + "you can not specify both interactive mode and config file": "vous ne pouvez pas spécifier à la fois le mode interactif (-i) et un fichier de configuration (-f)" +}), + +MSTR( +{ + "_LANG_": "Español mexicano", + "_LOCALE_": "es_MX", + "_MCX_BANNER_": +) "\"" S_MAGENTA "###############################################################################\n\ +# Monte Carlo Extremo (MCX) -- CUDA #\n\ +# Derechos de autor (c) 2009-2025 Qianqian Fang #\n\ +#" S_BLUE " https://mcx.space/ & https://neurojson.io " S_MAGENTA "#\n\ +# #\n\ +# Laboratorio de Óptica Computacional e Imagenología Traslacional (COTI)-" S_BLUE "http://fanglab.org " S_MAGENTA "#\n\ +# Departamento de Bioingeniería, Universidad de Northeastern, Boston, MA, EE. UU. #\n\ +###############################################################################\n\ +# El desarrollo del software MCX fue financiado por el NIH/NIGMS de EE. UU. (R01-GM114365) #\n\ +###############################################################################\n\ +# El código científico de código abierto y los datos científicos reutilizables son esenciales para el avance de la ciencia moderna. El equipo de desarrollo de MCX está comprometido con la ciencia abierta y, con el apoyo del NIH, ha desarrollado un formato de entrada y salida basado en JSON. #\n\ +# #\n\ +# Visita nuestro portal de datos abiertos NeuroJSON.io (" S_BLUE "https://neurojson.io" S_MAGENTA ") e invita a otros a compartir tus datos científicos utilizando el formato JSON simple y reutilizable, así como nuestro sitio web gratuito. #\n" S_RESET "\"," MSTR( + "absorbed": "proporción total absorbida", + "after encoding": "Tasa de compresión después de la codificación", + "A CUDA-capable GPU is not found or configured": "No se encontró ni se configuró una GPU compatible con CUDA", + "Built-in benchmarks": "Pruebas integradas", + "Built-in languages": "Idiomas integrados", + "code name": "nombre de código", + "Command option": "opción de comando", + "compiled by nvcc": "compilado por nvcc", + "compiled with": "compilado con", + "compressing data": "comprimiendo datos", + "compression ratio": "tasa de compresión", + "data normalization complete": "normalización de datos completada", + "detected": "detectado", + "Downloading simulations from NeuroJSON.io (https://neurojson.org/db/mcx)": "Descargando simulaciones desde NeuroJSON.io (https://neurojson.org/db/mcx)", + "ERROR: No CUDA-capable GPU device found": "ERROR: No se encontró un dispositivo GPU compatible con CUDA", + "ERROR: Specified GPU ID is out of range": "ERROR: El ID de GPU especificado está fuera de rango", + "generating": "generando", + "GPU ID can not be more than 256": "El ID de GPU no puede ser mayor que 256", + "GPU ID must be non-zero": "El ID de GPU debe ser diferente de cero", + "GPU Information": "Información de la GPU", + "GPU memory can not hold all time gates, disabling normalization to allow multiple runs": "La memoria de la GPU no puede contener todas las ventanas de tiempo, desactivando la normalización para permitir múltiples ejecuciones", + "incomplete input": "entrada incompleta", + "init complete": "inicialización completada", + "initializing streams": "inicializando flujos", + "input domain is 2D, the initial direction can not have non-zero value in the singular dimension": "el dominio de entrada es 2D, la dirección inicial no puede tener un valor distinto de cero en la dimensión singular", + "invalid json fragment following --json": "fragmento JSON inválido después de --json", + "Jacobian output is only valid in the reply mode. Please give an mch file after '-E'.": "El Jacobiano de salida solo es válido en el modo de respuesta. Por favor, proporciona un archivo .mch después de '-E'.", + "json fragment is expected after --json": "se espera un fragmento JSON después de --json", + "json shape constructs are expected after -P": "se esperan construcciones de forma JSON después de -P", + "kernel complete": "núcleo completado", + "launching MCX simulation for time window": "iniciando simulación MCX para la ventana de tiempo", + "loss due to initial specular reflection is excluded in the total": "la pérdida debido a la reflexión especular inicial se excluye del total", + "MCX Revision": "Revisión de MCX", + "MCX simulation speed": "velocidad de simulación MCX", + "No GPU device found": "No se encontró ningún dispositivo GPU", + "normalization factor": "factor de normalización", + "normalization factor for detector": "factor de normalización para el detector", + "normalizing raw data ...": "normalizando datos sin procesar ...", + "photons": "fotones", + "please use the -H option to specify a greater number": "por favor, usa la opción -H para especificar un número mayor", + "please use the --maxjumpdebug option to specify a greater number": "por favor, usa la opción --maxjumpdebug para especificar un número mayor", + "random numbers": "números aleatorios", + "requesting shared memory": "solicitando memoria compartida", + "respin number can not be 0, check your -r/--repeat input or cfg.respin value": "el número de repeticiones no puede ser 0, verifica tu entrada -r/--repeat o el valor de cfg.respin", + "retrieving fields": "recuperando campos", + "retrieving random numbers": "recuperando números aleatorios", + "saved trajectory positions": "posiciones de trayectoria guardadas", + "saving data complete": "guardado de datos completado", + "saving data to file": "guardando datos en archivo", + "seed length": "longitud de la semilla", + "seeding file is not supported in this binary": "el archivo de semilla no es compatible en este binario", + "simulated": "simulado", + "simulation run#": "ejecución de simulación #", + "source": "fuente", + "the specified output data format is not recognized": "el formato de datos de salida especificado no es reconocido", + "the specified output data type is not recognized": "el tipo de datos de salida especificado no es reconocido", + "total simulated energy": "energía total simulada", + "transfer complete": "transferencia completada", + "unable to save to log file, will print from stdout": "no se puede guardar en el archivo de registro, se imprimirá desde stdout", + "unknown short option": "opción corta desconocida", + "unknown verbose option": "opción detallada desconocida", + "unnamed": "sin nombre", + "Unsupported bechmark": "prueba no compatible", + "Unsupported media format": "formato de medio no compatible", + "WARNING: maxThreadsPerMultiProcessor can not be detected": "ADVERTENCIA: maxThreadsPerMultiProcessor no se puede detectar", + "WARNING: the detected photon number is more than what your have specified": "ADVERTENCIA: el número de fotones detectado es mayor que el especificado", + "WARNING: the saved trajectory positions are more than what your have specified": "ADVERTENCIA: las posiciones de trayectoria guardadas son más que las especificadas", + "WARNING: this MCX binary can not save partial path, please recompile mcx and make sure -D SAVE_DETECTORS is used by nvcc": "ADVERTENCIA: este binario de MCX no puede guardar rutas parciales, por favor recompila mcx y asegúrate de que -D SAVE_DETECTORS sea usado por nvcc", + "workload was unspecified for an active device": "la carga de trabajo no fue especificada para un dispositivo activo", + "you can not specify both interactive mode and config file": "no puedes especificar tanto el modo interactivo como el archivo de configuración" +}), + +MSTR( +{ + "_LANG_": "Deutsch", + "_LOCALE_": "de_DE", + "_MCX_BANNER_": +) "\"" S_MAGENTA "###############################################################################\n\ +# MCX – Monte Carlo eXtreme -- CUDA #\n\ +# Urheberrecht (c) 2009–2025 Qianqian Fang #\n\ +#" S_BLUE " https://mcx.space/ & https://neurojson.io " S_MAGENTA "#\n\ +# #\n\ +# Computational Optics & Translational Imaging (COTI) Lab – " S_BLUE "http://fanglab.org" S_MAGENTA "#\n\ +# Department für Bioengineering, Northeastern University, Boston, MA, USA #\n\ +###############################################################################\n\ +# Die Entwicklung der MCX-Software wurde vom US-amerikanischen NIH/NIGMS #\n\ +# (R01-GM114365) gefördert – vielen Dank für die Unterstützung. #\n\ +###############################################################################\n\ +# Offener wissenschaftlicher Code und wiederverwendbare wissenschaftliche #\n\ +# Daten sind entscheidend für den Fortschritt moderner Wissenschaft. Das MCX- #\n\ +# Team fördert Open Science aktiv und hat mit Unterstützung des NIH ein JSON- #\n\ +# basiertes Datenformat für Ein- und Ausgaben entwickelt. #\n\ +# #\n\ +# Besuchen Sie unser offenes Datenportal NeuroJSON.io (" S_BLUE "https://neurojson.io" S_MAGENTA ") #\n\ +# und teilen Sie Ihre wissenschaftlichen Daten im wiederverwendbaren JSON- #\n\ +# Format über unsere kostenlose Webseite. #\n" S_RESET "\"," MSTR( + "absorbed": "Gesamte Absorptionsrate", + "after encoding": "Komprimierungsrate nach der Kodierung", + "A CUDA-capable GPU is not found or configured": "Keine CUDA-fähige GPU gefunden oder konfiguriert", + "Built-in benchmarks": "Integrierte Benchmarks", + "Built-in languages": "Integrierte Sprachen", + "code name": "Codename", + "Command option": "Kommandooption", + "compiled by nvcc": "Kompiliert mit nvcc", + "compiled with": "Kompiliert mit", + "compressing data": "Daten werden komprimiert", + "compression ratio": "Kompressionsverhältnis", + "data normalization complete": "Daten-Normalisierung abgeschlossen", + "detected": "Erkannt", + "Downloading simulations from NeuroJSON.io (https://neurojson.org/db/mcx)": "Simulationen werden von NeuroJSON.io heruntergeladen (https://neurojson.org/db/mcx)", + "ERROR: No CUDA-capable GPU device found": "FEHLER: Keine CUDA-fähige GPU gefunden", + "ERROR: Specified GPU ID is out of range": "FEHLER: Angegebene GPU-ID liegt außerhalb des gültigen Bereichs", + "generating": "wird generiert", + "GPU ID can not be more than 256": "GPU-ID darf 256 nicht überschreiten", + "GPU ID must be non-zero": "GPU-ID darf nicht null sein", + "GPU Information": "GPU-Informationen", + "GPU memory can not hold all time gates, disabling normalization to allow multiple runs": "GPU-Speicher reicht nicht für alle Zeitfenster, Normalisierung wird deaktiviert für mehrere Durchläufe", + "incomplete input": "Unvollständige Eingabe", + "init complete": "Initialisierung abgeschlossen", + "initializing streams": "Initialisiere Streams", + "input domain is 2D, the initial direction can not have non-zero value in the singular dimension": "Bei 2D-Simulationen darf die Anfangsrichtung in der dritten Dimension keinen Wert ungleich null haben", + "invalid json fragment following --json": "Ungültiges JSON-Fragment nach --json", + "Jacobian output is only valid in the reply mode. Please give an mch file after '-E'.": "Jacobi-Ausgabe ist nur im Replay-Modus gültig. Bitte geben Sie eine .mch-Datei nach '-E' an.", + "json fragment is expected after --json": "JSON-Fragment wird nach --json erwartet", + "json shape constructs are expected after -P": "JSON-Formbeschreibung wird nach -P erwartet", + "kernel complete": "Kernel-Ausführung abgeschlossen", + "launching MCX simulation for time window": "Starte MCX-Simulation für Zeitfenster", + "loss due to initial specular reflection is excluded in the total": "Verlust durch anfängliche Spiegelreflexion nicht in der Gesamtenergie enthalten", + "MCX Revision": "MCX-Version", + "MCX simulation speed": "MCX-Simulationsgeschwindigkeit", + "No GPU device found": "Kein GPU-Gerät gefunden", + "normalization factor": "Normalisierungsfaktor", + "normalization factor for detector": "Normalisierungsfaktor für Detektor", + "normalizing raw data ...": "Rohdaten werden normalisiert ...", + "photons": "photonen", + "please use the -H option to specify a greater number": "Bitte verwenden Sie die Option -H, um eine höhere Zahl anzugeben", + "please use the --maxjumpdebug option to specify a greater number": "Bitte verwenden Sie --maxjumpdebug, um eine höhere Zahl anzugeben", + "random numbers": "Zufallszahlen", + "requesting shared memory": "Fordere Shared Memory an", + "respin number can not be 0, check your -r/--repeat input or cfg.respin value": "Wiederholungsanzahl darf nicht 0 sein; prüfen Sie -r/--repeat oder cfg.respin", + "retrieving fields": "Felder werden abgerufen", + "retrieving random numbers": "Zufallszahlen werden abgerufen", + "saved trajectory positions": "Gespeicherte Trajektorienpositionen", + "saving data complete": "Daten erfolgreich gespeichert", + "saving data to file": "Speichere Daten in Datei", + "seed length": "Länge des Seeds (4 Bytes)", + "seeding file is not supported in this binary": "Seed-Datei wird in dieser Version nicht unterstützt", + "simulated": "simuliert", + "simulation run#": "Simulationslauf #", + "source": "Quelle", + "the specified output data format is not recognized": "Das angegebene Ausgabedatenformat wird nicht erkannt", + "the specified output data type is not recognized": "Der angegebene Datentyp wird nicht erkannt", + "total simulated energy": "Gesamtsimulierte Energie", + "transfer complete": "Übertragung abgeschlossen", + "unable to save to log file, will print from stdout": "Protokoll kann nicht gespeichert werden, Ausgabe erfolgt über stdout", + "unknown short option": "Unbekannte Kurzoption", + "unknown verbose option": "Unbekannte Langoption", + "unnamed": "Unbenannt", + "Unsupported bechmark": "Nicht unterstützter Benchmark", + "Unsupported media format": "Nicht unterstütztes Medienformat", + "WARNING: maxThreadsPerMultiProcessor can not be detected": "WARNUNG: maxThreadsPerMultiProcessor konnte nicht erkannt werden", + "WARNING: the detected photon number is more than what your have specified": "WARNUNG: Detektierte Photonenzahl überschreitet den angegebenen Wert", + "WARNING: the saved trajectory positions are more than what your have specified": "WARNUNG: Gespeicherte Trajektorien überschreiten den angegebenen Wert", + "WARNING: this MCX binary can not save partial path, please recompile mcx and make sure -D SAVE_DETECTORS is used by nvcc": "WARNUNG: Diese MCX-Version kann keine Teilpfade speichern. Bitte kompilieren Sie MCX neu mit der Option -D SAVE_DETECTORS", + "workload was unspecified for an active device": "Keine Arbeitslast für aktives Gerät angegeben", + "you can not specify both interactive mode and config file": "Interaktiver Modus (-i) und Konfigurationsdatei (-f) dürfen nicht gleichzeitig verwendet werden" +}), + +MSTR( +{ + "_LANG_": "한국어", + "_LOCALE_": "ko_KR", + "_MCX_BANNER_": +) "\"" S_MAGENTA "###############################################################################\n\ +# MCX – 몬테카를로 익스트림 (CUDA) #\n\ +# 저작권 (c) 2009–2025 Qianqian Fang #\n\ +#" S_BLUE " https://mcx.space/ & https://neurojson.io " S_MAGENTA "#\n\ +# #\n\ +# 계산 광학 및 변환 영상 연구실(COTI Lab) – " S_BLUE "http://fanglab.org " S_MAGENTA "#\n\ +# 미국 매사추세츠주 보스턴, 노스이스턴 대학교 생명공학과 #\n\ +###############################################################################\n\ +#MCX 소프트웨어 개발은 미국 NIH/NIGMS의 지원(R01-GM114365)으로 이루어졌습니다.#\n\ +###############################################################################\n\ +# 오픈 소스 연구 코드와 재사용 가능한 과학 데이터는 현대 과학 발전에 필수적입니다. #\n\ +# MCX 개발팀은 NIH의 지원을 받아 JSON 기반의 입출력 파일 형식을 개발하였습니다. #\n\ +# #\n\ +# 우리의 오픈 데이터 포털인 NeuroJSON.io(" S_BLUE "https://neurojson.io" S_MAGENTA ")를 방문하시고, #\n\ +# 간단하고 재사용 가능한JSON형식과 무료 웹사이트를 통해연구데이터를 공유해 주세요. #\n" S_RESET "\"," MSTR( + "absorbed": "총 흡수 비율", + "after encoding": "인코딩 후 압축 비율", + "A CUDA-capable GPU is not found or configured": "CUDA를 지원하는 GPU를 찾을 수 없거나 구성되지 않았습니다", + "Built-in benchmarks": "내장 벤치마크", + "Built-in languages": "내장 언어", + "code name": "코드 이름", + "Command option": "명령 옵션", + "compiled by nvcc": "nvcc로 컴파일됨", + "compiled with": "다음으로 컴파일됨", + "compressing data": "데이터 압축 중", + "compression ratio": "압축 비율", + "data normalization complete": "데이터 정규화 완료", + "detected": "감지됨", + "Downloading simulations from NeuroJSON.io (https://neurojson.org/db/mcx)": "NeuroJSON.io에서 시뮬레이션 다운로드 중 (https://neurojson.org/db/mcx)", + "ERROR: No CUDA-capable GPU device found": "오류: CUDA를 지원하는 GPU 장치를 찾을 수 없습니다", + "ERROR: Specified GPU ID is out of range": "오류: 지정된 GPU ID가 범위를 벗어났습니다", + "generating": "생성 중", + "GPU ID can not be more than 256": "GPU ID는 256을 초과할 수 없습니다", + "GPU ID must be non-zero": "GPU ID는 0이 될 수 없습니다", + "GPU Information": "GPU 정보", + "GPU memory can not hold all time gates, disabling normalization to allow multiple runs": "GPU 메모리에 모든 시간 게이트를 저장할 수 없어 정규화를 비활성화하고 여러 실행을 허용합니다", + "incomplete input": "입력이 불완전합니다", + "init complete": "초기화 완료", + "initializing streams": "스트림 초기화 중", + "input domain is 2D, the initial direction can not have non-zero value in the singular dimension": "입력 도메인이 2D이므로 초기 방향은 단일 차원에서 0이 아닌 값을 가질 수 없습니다", + "invalid json fragment following --json": "--json 뒤에 잘못된 JSON 조각이 있습니다", + "Jacobian output is only valid in the reply mode. Please give an mch file after '-E'.": "Jacobian 출력은 재생 모드에서만 유효합니다. '-E' 뒤에 mch 파일을 제공해 주세요.", + "json fragment is expected after --json": "--json 뒤에 JSON 조각이 필요합니다", + "json shape constructs are expected after -P": "-P 뒤에 JSON 형태 구성이 필요합니다", + "kernel complete": "커널 완료", + "launching MCX simulation for time window": "시간 창에 대한 MCX 시뮬레이션 시작", + "loss due to initial specular reflection is excluded in the total": "초기 거울 반사로 인한 손실은 총합에서 제외됩니다", + "MCX Revision": "MCX 개정판", + "MCX simulation speed": "MCX 시뮬레이션 속도", + "No GPU device found": "GPU 장치를 찾을 수 없습니다", + "normalization factor": "정규화 계수", + "normalization factor for detector": "검출기 정규화 계수", + "normalizing raw data ...": "원시 데이터 정규화 중 ...", + "photons": "광자들", + "please use the -H option to specify a greater number": "더 큰 수를 지정하려면 -H 옵션을 사용하세요", + "please use the --maxjumpdebug option to specify a greater number": "더 큰 수를 지정하려면 --maxjumpdebug 옵션을 사용하세요", + "random numbers": "난수", + "requesting shared memory": "공유 메모리 요청 중", + "respin number can not be 0, check your -r/--repeat input or cfg.respin value": "respin 수는 0이 될 수 없습니다. -r/--repeat 입력 또는 cfg.respin 값을 확인하세요", + "retrieving fields": "필드 검색 중", + "retrieving random numbers": "난수 검색 중", + "saved trajectory positions": "저장된 궤적 위치", + "saving data complete": "데이터 저장 완료", + "saving data to file": "파일에 데이터 저장 중", + "seed length": "시드 길이", + "seeding file is not supported in this binary": "이 바이너리에서는 시드 파일이 지원되지 않습니다", + "simulated": "시뮬레이션됨", + "simulation run#": "시뮬레이션 실행#", + "source": "소스", + "the specified output data format is not recognized": "지정된 출력 데이터 형식을 인식할 수 없습니다", + "the specified output data type is not recognized": "지정된 출력 데이터 유형을 인식할 수 없습니다", + "total simulated energy": "총 시뮬레이션 에너지", + "transfer complete": "전송 완료", + "unable to save to log file, will print from stdout": "로그 파일에 저장할 수 없어 stdout에 출력합니다", + "unknown short option": "알 수 없는 짧은 옵션", + "unknown verbose option": "알 수 없는 자세한 옵션", + "unnamed": "이름 없음", + "Unsupported bechmark": "지원되지 않는 벤치마크", + "Unsupported media format": "지원되지 않는 미디어 형식", + "WARNING: maxThreadsPerMultiProcessor can not be detected": "경고: maxThreadsPerMultiProcessor를 감지할 수 없습니다", + "WARNING: the detected photon number is more than what your have specified": "경고: 감지된 광자 수가 지정한 수를 초과합니다", + "WARNING: the saved trajectory positions are more than what your have specified": "경고: 저장된 궤적 위치 수가 지정한 수를 초과합니다", + "WARNING: this MCX binary can not save partial path, please recompile mcx and make sure -D SAVE_DETECTORS is used by nvcc": "경고: 이 MCX 바이너리는 부분 경로를 저장할 수 없습니다. mcx를 다시 컴파일하고 nvcc에 -D SAVE_DETECTORS를 사용했는지 확인하세요", + "workload was unspecified for an active device": "활성 장치에 대한 작업 부하가 지정되지 않았습니다", + "you can not specify both interactive mode and config file": "대화형 모드와 구성 파일을 동시에 지정할 수 없습니다" +}), + +MSTR( +{ + "_LANG_": "हिन्दी", + "_LOCALE_": "hi_IN", + "_MCX_BANNER_": +) "\"" S_MAGENTA "###############################################################################\n\ +# MCX – मोंटे कार्लो एक्सट्रीम -- CUDA #\n\ +# कॉपीराइट (c) 2009–2025 कियानकियान फांग #\n\ +#" S_BLUE " https://mcx.space/ & https://neurojson.io " S_MAGENTA "#\n\ +# #\n\ +# कम्प्यूटेशनल ऑप्टिक्स और ट्रांसलेशनल इमेजिंग (COTI) लैब – " S_BLUE "http://fanglab.org " S_MAGENTA "#\n\ +# बायोइंजीनियरिंग विभाग, नॉर्थईस्टर्न यूनिवर्सिटी, बोस्टन, MA, USA #\n\ +###############################################################################\n\ +# MCX सॉफ़्टवेयर का विकास अमेरिकी NIH/NIGMS (R01-GM114365) द्वारा समर्थित है – #\n\ +# समर्थन के लिए धन्यवाद। #\n\ +###############################################################################\n\ +# ओपन-सोर्स वैज्ञानिक कोड और पुन: प्रयोज्य वैज्ञानिक डेटा आधुनिक विज्ञान की प्रगति के लिए आवश्यक हैं। #\n\ +# MCX टीम ओपन साइंस को सक्रिय रूप से बढ़ावा देती है और NIH के समर्थन से एक JSON-आधारित इनपुट/आउटपुट डेटा प्रारूप विकसित किया है। #\n\ +# #\n\ +# हमारे ओपन डेटा पोर्टल NeuroJSON.io (" S_BLUE "https://neurojson.io" S_MAGENTA ") पर जाएं और हमारे मुफ्त वेबसाइट के माध्यम से #\n\ +# पुन: प्रयोज्य JSON प्रारूप में अपने वैज्ञानिक डेटा साझा करें। #\n" S_RESET "\"," MSTR( + "absorbed": "कुल अवशोषण दर", + "after encoding": "एन्कोडिंग के बाद संपीड़न अनुपात", + "A CUDA-capable GPU is not found or configured": "CUDA-सक्षम GPU नहीं मिला या कॉन्फ़िगर नहीं किया गया है", + "Built-in benchmarks": "इनबिल्ट बेंचमार्क", + "Built-in languages": "अंतर्निर्मित भाषाएँ", + "code name": "कोड नाम", + "Command option": "कमांड विकल्प", + "compiled by nvcc": "nvcc द्वारा संकलित", + "compiled with": "के साथ संकलित", + "compressing data": "डेटा संपीड़न हो रहा है", + "compression ratio": "संपीड़न अनुपात", + "data normalization complete": "डेटा सामान्यीकरण पूर्ण", + "detected": "पता चला", + "Downloading simulations from NeuroJSON.io (https://neurojson.org/db/mcx)": "NeuroJSON.io से सिमुलेशन डाउनलोड हो रहा है (https://neurojson.org/db/mcx)", + "ERROR: No CUDA-capable GPU device found": "त्रुटि: कोई CUDA-सक्षम GPU डिवाइस नहीं मिला", + "ERROR: Specified GPU ID is out of range": "त्रुटि: निर्दिष्ट GPU ID सीमा से बाहर है", + "generating": "उत्पन्न किया जा रहा है", + "GPU ID can not be more than 256": "GPU ID 256 से अधिक नहीं हो सकता", + "GPU ID must be non-zero": "GPU ID शून्य नहीं हो सकता", + "GPU Information": "GPU जानकारी", + "GPU memory can not hold all time gates, disabling normalization to allow multiple runs": "GPU मेमोरी सभी समय गेट्स को समाहित नहीं कर सकती, कई रन की अनुमति देने के लिए सामान्यीकरण अक्षम किया जा रहा है", + "incomplete input": "अपूर्ण इनपुट", + "init complete": "प्रारंभ पूर्ण", + "initializing streams": "स्ट्रीम्स प्रारंभ हो रही हैं", + "input domain is 2D, the initial direction can not have non-zero value in the singular dimension": "इनपुट डोमेन 2D है, प्रारंभिक दिशा में एकल आयाम में शून्य से भिन्न मान नहीं हो सकता", + "invalid json fragment following --json": "--json के बाद अमान्य JSON खंड", + "Jacobian output is only valid in the reply mode. Please give an mch file after '-E'.": "जैकॉबियन आउटपुट केवल रिप्लाई मोड में मान्य है। कृपया '-E' के बाद एक mch फ़ाइल दें।", + "json fragment is expected after --json": "--json के बाद JSON खंड अपेक्षित है", + "json shape constructs are expected after -P": "-P के बाद JSON आकार संरचनाएं अपेक्षित हैं", + "kernel complete": "कर्नेल पूर्ण", + "launching MCX simulation for time window": "समय विंडो के लिए MCX सिमुलेशन प्रारंभ हो रहा है", + "loss due to initial specular reflection is excluded in the total": "प्रारंभिक परावर्तक परावर्तन के कारण होने वाला नुकसान कुल में शामिल नहीं है", + "MCX Revision": "MCX संस्करण", + "MCX simulation speed": "MCX सिमुलेशन गति", + "No GPU device found": "कोई GPU डिवाइस नहीं मिला", + "normalization factor": "सामान्यीकरण गुणांक", + "normalization factor for detector": "डिटेक्टर के लिए सामान्यीकरण गुणांक", + "normalizing raw data ...": "कच्चे डेटा का सामान्यीकरण हो रहा है ...", + "photons": "फोटॉन्स", + "please use the -H option to specify a greater number": "कृपया अधिक संख्या निर्दिष्ट करने के लिए -H विकल्प का उपयोग करें", + "please use the --maxjumpdebug option to specify a greater number": "कृपया अधिक संख्या निर्दिष्ट करने के लिए --maxjumpdebug विकल्प का उपयोग करें", + "random numbers": "यादृच्छिक संख्याएँ", + "requesting shared memory": "साझा मेमोरी का अनुरोध किया जा रहा है", + "respin number can not be 0, check your -r/--repeat input or cfg.respin value": "respin संख्या 0 नहीं हो सकती, कृपया अपने -r/--repeat इनपुट या cfg.respin मान की जांच करें", + "retrieving fields": "फ़ील्ड्स प्राप्त किए जा रहे हैं", + "retrieving random numbers": "यादृच्छिक संख्याएँ प्राप्त की जा रही हैं", + "saved trajectory positions": "सहेजे गए प्रक्षेपवक्र स्थितियाँ", + "saving data complete": "डेटा सहेजना पूर्ण", + "saving data to file": "डेटा फ़ाइल में सहेजा जा रहा है", + "seed length": "सीड लंबाई", + "seeding file is not supported in this binary": "इस बाइनरी में सीड फ़ाइल समर्थित नहीं है", + "simulated": "अनुकरण किया गया", + "simulation run#": "सिमुलेशन रन#", + "source": "स्रोत", + "the specified output data format is not recognized": "निर्दिष्ट आउटपुट डेटा प्रारूप मान्यता प्राप्त नहीं है", + "the specified output data type is not recognized": "निर्दिष्ट आउटपुट डेटा प्रकार मान्यता प्राप्त नहीं है", + "total simulated energy": "कुल सिमुलेटेड ऊर्जा", + "transfer complete": "स्थानांतरण पूर्ण", + "unable to save to log file, will print from stdout": "लॉग फ़ाइल में सहेजने में असमर्थ, stdout से प्रिंट किया जाएगा", + "unknown short option": "अज्ञात शॉर्ट विकल्प", + "unknown verbose option": "अज्ञात विस्तृत विकल्प", + "unnamed": "बेनाम", + "Unsupported bechmark": "असमर्थित बेंचमार्क", + "Unsupported media format": "असमर्थित मीडिया प्रारूप", + "WARNING: maxThreadsPerMultiProcessor can not be detected": "चेतावनी: maxThreadsPerMultiProcessor का पता नहीं लगाया जा सकता", + "WARNING: the detected photon number is more than what your have specified": "चेतावनी: पता चला फोटॉन संख्या आपके द्वारा निर्दिष्ट से अधिक है", + "WARNING: the saved trajectory positions are more than what your have specified": "चेतावनी: सहेजी गई प्रक्षेपवक्र स्थितियाँ आपके द्वारा निर्दिष्ट से अधिक हैं", + "WARNING: this MCX binary can not save partial path, please recompile mcx and make sure -D SAVE_DETECTORS is used by nvcc": "चेतावनी: यह MCX बाइनरी आंशिक पथ सहेज नहीं सकती, कृपया mcx को पुनः संकलित करें और सुनिश्चित करें कि nvcc द्वारा -D SAVE_DETECTORS का उपयोग किया गया है", + "workload was unspecified for an active device": "सक्रिय डिवाइस के लिए कार्यभार निर्दिष्ट नहीं किया गया था", + "you can not specify both interactive mode and config file": "आप इंटरैक्टिव मोड और कॉन्फ़िग फ़ाइल दोनों को एक साथ निर्दिष्ट नहीं कर सकते" +}), + +MSTR( +{ + "_LANG_": "Português", + "_LOCALE_": "pt_BR", + "_MCX_BANNER_": +) "\"" S_MAGENTA "###############################################################################\n\ +# Monte Carlo Extremo (MCX) -- CUDA #\n\ +# Direitos autorais (c) 2009-2025 Qianqian Fang #\n\ +#" S_BLUE " https://mcx.space/ & https://neurojson.io " S_MAGENTA "#\n\ +# #\n\ +# Laboratório de Óptica Computacional e Imagem Translacional (COTI) - " S_BLUE "http://fanglab.org " S_MAGENTA "#\n\ +# Departamento de Bioengenharia, Northeastern University, Boston, MA, EUA #\n\ +###############################################################################\n\ +# O desenvolvimento do MCX foi financiado pelo NIH/NIGMS dos EUA (R01-GM114365), agradecemos o apoio\n\ +###############################################################################\n\ +# Código aberto para pesquisa científica e dados reutilizáveis são essenciais para a ciência moderna.\n\ +# A equipe MCX apoia ciência aberta e, com financiamento do NIH, desenvolveu formato JSON para entrada e saída.\n\ +# #\n\ +# Visite nosso portal de dados abertos NeuroJSON.io (" S_BLUE "https://neurojson.io" S_MAGENTA ") #\n\ +# e convidamos você a compartilhar seus dados científicos usando o formato JSON #\n\ +# simples e reutilizável e nosso site gratuito. #\n" S_RESET "\"," MSTR( + "absorbed": "proporção total absorvida", + "after encoding": "Taxa de compressão após codificação", + "A CUDA-capable GPU is not found or configured": "GPU compatível com CUDA não encontrada ou configurada", + "Built-in benchmarks": "Testes internos", + "Built-in languages": "Idiomas integrados", + "code name": "nome da versão", + "Command option": "opção de comando", + "compiled by nvcc": "compilado com nvcc", + "compiled with": "configuração da compilação", + "compressing data": "compactando dados", + "compression ratio": "taxa de compressão", + "data normalization complete": "normalização dos dados concluída", + "detected": "detectado", + "Downloading simulations from NeuroJSON.io (https://neurojson.org/db/mcx)": "Baixando simulações de NeuroJSON.io (https://neurojson.org/db/mcx)", + "ERROR: No CUDA-capable GPU device found": "ERRO: Nenhum dispositivo GPU compatível com CUDA encontrado", + "ERROR: Specified GPU ID is out of range": "ERRO: ID de GPU especificado está fora do intervalo", + "generating": "gerando", + "GPU ID can not be more than 256": "ID da GPU não pode ser maior que 256", + "GPU ID must be non-zero": "ID da GPU não pode ser zero", + "GPU Information": "Informações da GPU", + "GPU memory can not hold all time gates, disabling normalization to allow multiple runs": "Memória da GPU não suporta todas as janelas de tempo, desabilitando normalização para permitir múltiplas execuções", + "incomplete input": "entrada incompleta", + "init complete": "inicialização concluída", + "initializing streams": "inicializando GPU", + "input domain is 2D, the initial direction can not have non-zero value in the singular dimension": "domínio de entrada é 2D, a direção inicial não pode ter valor diferente de zero na dimensão singular", + "invalid json fragment following --json": "fragmento JSON inválido após --json", + "Jacobian output is only valid in the reply mode. Please give an mch file after '-E'.": "Saída Jacobiana válida somente no modo replay. Por favor, forneça arquivo .mch após '-E'.", + "json fragment is expected after --json": "esperado fragmento JSON após --json", + "json shape constructs are expected after -P": "esperadas construções de forma JSON após -P", + "kernel complete": "execução do kernel GPU concluída", + "launching MCX simulation for time window": "iniciando simulação MCX para janela temporal", + "loss due to initial specular reflection is excluded in the total": "perda por reflexão especular inicial excluída do total", + "MCX Revision": "Revisão MCX", + "MCX simulation speed": "velocidade da simulação MCX", + "No GPU device found": "Nenhum dispositivo GPU encontrado", + "normalization factor": "fator de normalização", + "normalization factor for detector": "fator de normalização para detector", + "normalizing raw data ...": "normalizando dados brutos...", + "photons": "fótons", + "please use the -H option to specify a greater number": "por favor, use a opção -H para especificar um número maior", + "please use the --maxjumpdebug option to specify a greater number": "por favor, use a opção --maxjumpdebug para especificar um número maior", + "random numbers": "números aleatórios", + "requesting shared memory": "solicitando memória compartilhada", + "respin number can not be 0, check your -r/--repeat input or cfg.respin value": "número de repetições não pode ser 0; verifique entrada -r/--repeat ou valor cfg.respin", + "retrieving fields": "recuperando matrizes 3D de saída", + "retrieving random numbers": "recuperando números aleatórios gerados", + "saved trajectory positions": "posições da trajetória salvas", + "saving data complete": "salvamento de dados concluído", + "saving data to file": "salvando dados em arquivo", + "seed length": "tamanho da semente (4 bytes)", + "seeding file is not supported in this binary": "arquivo de semente não suportado neste binário", + "simulated": "simulado", + "simulation run#": "execução da simulação #", + "source": "fonte", + "the specified output data format is not recognized": "formato de dados de saída especificado não reconhecido", + "the specified output data type is not recognized": "tipo de dados de saída especificado não reconhecido", + "total simulated energy": "energia total simulada", + "transfer complete": "transferência concluída", + "unable to save to log file, will print from stdout": "não foi possível salvar arquivo de log, será impresso na saída padrão", + "unknown short option": "opção curta desconhecida", + "unknown verbose option": "opção longa desconhecida", + "unnamed": "sem nome", + "Unsupported bechmark": "benchmark não suportado", + "Unsupported media format": "formato de mídia não suportado", + "WARNING: maxThreadsPerMultiProcessor can not be detected": "AVISO: maxThreadsPerMultiProcessor não pode ser detectado", + "WARNING: the detected photon number is more than what your have specified": "AVISO: número de fótons detectados é maior que o especificado", + "WARNING: the saved trajectory positions are more than what your have specified": "AVISO: posições da trajetória salvas são maiores que o especificado", + "WARNING: this MCX binary can not save partial path, please recompile mcx and make sure -D SAVE_DETECTORS is used by nvcc": "AVISO: este binário MCX não pode salvar caminho parcial, recompile MCX e certifique-se de usar -D SAVE_DETECTORS com nvcc", + "workload was unspecified for an active device": "carga de trabalho não especificada para dispositivo ativo", + "you can not specify both interactive mode and config file": "não é possível especificar modo interativo e arquivo de configuração simultaneamente" +}) + +}; diff --git a/src/mcx_lang.h b/src/mcx_lang.h new file mode 100644 index 00000000..64a06bff --- /dev/null +++ b/src/mcx_lang.h @@ -0,0 +1,51 @@ +/***************************************************************************//** +** \mainpage Monte Carlo eXtreme - GPU accelerated Monte Carlo Photon Migration +** +** \author Qianqian Fang +** \copyright Qianqian Fang, 2009-2025 +** +** \section sref Reference +** \li \c (\b Fang2009) Qianqian Fang and David A. Boas, +** +** "Monte Carlo Simulation of Photon Migration in 3D Turbid Media Accelerated +** by Graphics Processing Units," Optics Express, 17(22) 20178-20190 (2009). +** \li \c (\b Yu2018) Leiming Yu, Fanny Nina-Paravecino, David Kaeli, and Qianqian Fang, +** "Scalable and massively parallel Monte Carlo photon transport +** simulations for heterogeneous computing platforms," J. Biomed. Optics, +** 23(1), 010504, 2018. https://doi.org/10.1117/1.JBO.23.1.010504 +** \li \c (\b Yan2020) Shijie Yan and Qianqian Fang* (2020), "Hybrid mesh and voxel +** based Monte Carlo algorithm for accurate and efficient photon transport +** modeling in complex bio-tissues," Biomed. Opt. Express, 11(11) +** pp. 6262-6270. https://doi.org/10.1364/BOE.409468 +** +** \section sformat Formatting +** Please always run "make pretty" inside the \c src folder before each commit. +** The above command requires \c astyle to perform automatic formatting. +** +** \section slicense License +** GPL v3, see LICENSE.txt for details +*******************************************************************************/ + +/***************************************************************************//** +\file mcx_lang.h + +@brief MCX language support header +*******************************************************************************/ + +#ifndef _MCEXTREME_I18N_H +#define _MCEXTREME_I18N_H + +#define MAX_MCX_LANG 11 /**< Total number of translations */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern const char* languagename[MAX_MCX_LANG]; /**< translation langauge names */ +extern const char* translations[MAX_MCX_LANG]; /**< JSON-formatted input configuration for each built-in benchmark */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/mcx_utils.c b/src/mcx_utils.c index f1d1cde1..575edf2b 100644 --- a/src/mcx_utils.c +++ b/src/mcx_utils.c @@ -52,6 +52,7 @@ #include "mcx_bench.h" #include "mcx_mie.h" #include "mcx_neurojson.h" +#include "mcx_lang.h" #if defined(_WIN32) && defined(USE_OS_TIMER) && !defined(MCX_CONTAINER) #include "mmc_tictoc.h" @@ -67,7 +68,7 @@ */ #define FIND_JSON_KEY(id,idfull,parent,fallback,val) \ ((tmp=cJSON_GetObjectItem(parent,id))==0 ? \ - ((tmp=cJSON_GetObjectItem(root,idfull))==0 ? fallback : tmp->val) \ + ((idfull==NULL || (tmp=cJSON_GetObjectItem(root,idfull))==0) ? fallback : tmp->val) \ : tmp->val) /** @@ -103,20 +104,19 @@ * Short command line options * If a short command line option is '-' that means it only has long/verbose option. * Array terminates with '\0'. - * Currently un-used options: cCJNoQy0-9 + * Currently un-used options: cCJoy0-9 */ const char shortopt[] = {'h', 'i', 'f', 'n', 't', 'T', 's', 'a', 'g', 'b', '-', 'z', 'u', 'H', 'P', 'd', 'r', 'S', 'p', 'e', 'U', 'R', 'l', 'L', '-', 'I', '-', 'G', 'M', 'A', 'E', 'v', 'D', 'k', 'q', 'Y', 'O', 'F', '-', '-', 'x', 'X', '-', 'K', 'm', 'V', 'B', 'W', 'w', '-', - 'Q', '-', 'Z', 'j', '-', '-', '-', 'N', '\0' + 'Q', '-', 'Z', 'j', '-', '-', '-', 'N', 'y', '\0' }; /** * Long command line options * The length of this array must match the length of shortopt[], terminates with "" */ - const char* fullopt[] = {"--help", "--interactive", "--input", "--photon", "--thread", "--blocksize", "--session", "--array", "--gategroup", "--reflect", "--reflectin", "--srcfrom0", @@ -129,7 +129,7 @@ const char* fullopt[] = {"--help", "--interactive", "--input", "--photon", "--maxvoidstep", "--saveexit", "--saveref", "--gscatter", "--mediabyte", "--momentum", "--specular", "--bc", "--workload", "--savedetflag", "--internalsrc", "--bench", "--dumpjson", "--zip", "--json", "--atomic", - "--srcid", "--trajstokes", "--net", "" + "--srcid", "--trajstokes", "--net", "--lang", "" }; /** @@ -190,7 +190,7 @@ const char* outputformat[] = {"mc2", "nii", "hdr", "ubj", "tx3", "jnii", "bnii", * r: Fresnel boundary * a: total absorption BC * m: total reflection (mirror) BC - * c: cylic BC + * c: cyclic BC */ const char boundarycond[] = {'_', 'r', 'a', 'm', 'c', '\0'}; @@ -232,6 +232,13 @@ char flagset[256] = {'\0'}; const char* zipformat[] = {"zlib", "gzip", "base64", "lzip", "lzma", "lz4", "lz4hc", ""}; + +/** + * JSON object to store translations for suppored languages + */ + +cJSON* mcx_lang = NULL; + /** * @brief Initializing the simulation configuration with default values * @@ -347,6 +354,7 @@ void mcx_initcfg(Config* cfg) { cfg->his.totalsource = cfg->extrasrclen + 1; cfg->srcdata = NULL; memset(cfg->jsonfile, 0, MAX_PATH_LENGTH); + memset(cfg->langid, 0, MAX_LANG_ID); memset(cfg->bc, 0, 13); memset(&(cfg->srcparam1), 0, sizeof(float4)); memset(&(cfg->srcparam2), 0, sizeof(float4)); @@ -362,6 +370,23 @@ void mcx_initcfg(Config* cfg) { #else cfg->parentid = mpStandalone; #endif + + if (!mcx_lang) { + char* envlocale = getenv( "MCX_LANG" ); + + if (envlocale) { + int idx; + char langid[6] = {'\0'}; + strncpy(langid, envlocale, 5); + idx = mcx_keylookup(langid, languagename); + + if (idx == -1) { + MCX_FPRINTF(cfg->flog, "Unsupported language ID (%s), fallback to default\n", langid); + } else { + mcx_lang = mcx_parsejson(translations[idx]); + } + } + } } /** @@ -472,6 +497,11 @@ void mcx_clearcfg(Config* cfg) { free(cfg->srcdata); } + if (mcx_lang) { + cJSON_Delete(mcx_lang); + mcx_lang = NULL; + } + mcx_initcfg(cfg); } @@ -1058,12 +1088,12 @@ void mcx_savejdet(float* ppath, void* seeds, uint count, int doappend, Config* c col += dims[1]; } } else { - char colnum[] = {1, cfg->his.maxmedia, cfg->his.maxmedia, cfg->his.maxmedia, 3, 3, 1, 4}; + int colnum[] = {1, cfg->his.maxmedia, cfg->his.maxmedia, cfg->his.maxmedia, 3, 3, 1, 4}; char* dtype[] = {"uint32", "uint32", "single", "single", "single", "single", "single", "single"}; char* dname[] = {"detid", "nscat", "ppath", "mom", "p", "v", "w0", "s"}; cJSON_AddItemToObject(obj, "PhotonData", dat = cJSON_CreateObject()); - for (int id = 0; id < sizeof(colnum); id++) { + for (int id = 0; id < sizeof(colnum) / sizeof(int); id++) { if ((cfg->savedetflag >> id) & 0x1) { uint dims[2] = {count, colnum[id]}; void* val = NULL; @@ -1342,6 +1372,40 @@ void mcx_assert(int ret) { } } + +/** + * @brief Function to parse a JSON string using cJSON and print errors if detected + * + * @param[in] jbuf: a JSON string + * @param[out] output: the parsed cJSON* object; if error is detected, it returns NULL + */ + +cJSON* mcx_parsejson(const char* jbuf) { + cJSON* jroot = cJSON_Parse(jbuf); + + if (!jroot) { + char* ptrold, *ptr = (char*)cJSON_GetErrorPtr(); + + if (ptr) { + ptrold = strstr(jbuf, ptr); + } + + if (ptr && ptrold) { + char* offs = (ptrold - jbuf >= 50) ? ptrold - 50 : (char*)jbuf; + + while (offs < ptrold) { + MCX_FPRINTF(stderr, "%c", *offs); + offs++; + } + + MCX_FPRINTF(stderr, "%.50s\n", ptrold); + } + } + + return jroot; +} + + #ifndef MCX_CONTAINER /** @@ -1383,34 +1447,14 @@ void mcx_readconfig(char* fname, Config* cfg) { jbuf = fname; } - jroot = cJSON_Parse(jbuf); + jroot = mcx_parsejson(jbuf); if (jroot) { mcx_loadjson(jroot, cfg); cJSON_Delete(jroot); } else { - char* ptrold, *ptr = (char*)cJSON_GetErrorPtr(); - - if (ptr) { - ptrold = strstr(jbuf, ptr); - } - if (fp != NULL) { fclose(fp); - } - - if (ptr && ptrold) { - char* offs = (ptrold - jbuf >= 50) ? ptrold - 50 : jbuf; - - while (offs < ptrold) { - MCX_FPRINTF(stderr, "%c", *offs); - offs++; - } - - MCX_FPRINTF(stderr, "%.50s\n", ptrold); - } - - if (fp != NULL) { free(jbuf); } @@ -1429,7 +1473,7 @@ void mcx_readconfig(char* fname, Config* cfg) { } if (cfg->session[0] == '\0') { - strncpy(cfg->session, fname, MAX_SESSION_LENGTH); + strncpy(cfg->session, fname, MAX_SESSION_LENGTH - 1); } } @@ -1638,7 +1682,6 @@ void mcx_preprocess(Config* cfg) { } if (cfg->srcid > (int)cfg->extrasrclen + 1) { - printf("cfg->srcid=%d\n", cfg->srcid); MCX_ERROR(-4, "srcid exceeds total defined source count"); } @@ -1989,7 +2032,7 @@ void mcx_loadconfig(FILE* in, Config* cfg) { #else sprintf(comment, "%s/%s", cfg->rootpath, filename); #endif - strncpy(filename, comment, MAX_FULL_PATH); + strncpy(filename, comment, MAX_FULL_PATH - 1); } comm = fgets(comment, MAX_PATH_LENGTH, in); @@ -2227,7 +2270,7 @@ int mcx_loadjson(cJSON* root, Config* cfg) { val = FIND_JSON_OBJ("VolumeFile", "Domain.VolumeFile", Domain); if (val) { - strncpy(volfile, val->valuestring, MAX_PATH_LENGTH); + strncpy(volfile, val->valuestring, MAX_PATH_LENGTH - 1); if (cfg->rootpath[0]) { #ifdef WIN32 @@ -2236,7 +2279,7 @@ int mcx_loadjson(cJSON* root, Config* cfg) { sprintf(filename, "%s/%s", cfg->rootpath, volfile); #endif } else { - strncpy(filename, volfile, MAX_PATH_LENGTH); + strncpy(filename, volfile, MAX_PATH_LENGTH - 1); } } @@ -2548,9 +2591,9 @@ int mcx_loadjson(cJSON* root, Config* cfg) { memset(&(cfg->crop0), 0, sizeof(uint3)); memset(&(cfg->crop1), 0, sizeof(uint3)); } else { - /* - if -R is followed by a negative radius, mcx uses crop0/crop1 to set the cachebox - */ + /** + * if -R is followed by a negative radius, mcx uses crop0/crop1 to set the cachebox + */ if (!cfg->issrcfrom0) { cfg->crop0.x--; cfg->crop0.y--; @@ -2995,11 +3038,11 @@ int mcx_loadjson(cJSON* root, Config* cfg) { } if (cfg->session[0] == '\0') { - strncpy(cfg->session, FIND_JSON_KEY("ID", "Session.ID", Session, "default", valuestring), MAX_SESSION_LENGTH); + strncpy(cfg->session, FIND_JSON_KEY("ID", "Session.ID", Session, "default", valuestring), MAX_SESSION_LENGTH - 1); } if (cfg->rootpath[0] == '\0') { - strncpy(cfg->rootpath, FIND_JSON_KEY("RootPath", "Session.RootPath", Session, "", valuestring), MAX_PATH_LENGTH); + strncpy(cfg->rootpath, FIND_JSON_KEY("RootPath", "Session.RootPath", Session, "", valuestring), MAX_PATH_LENGTH - 1); } if (!flagset['B']) { @@ -3328,7 +3371,7 @@ void mcx_savejdata(char* filename, Config* cfg) { /* save "Shapes" constructs, prioritize over saving volume for smaller size */ if (cfg->shapedata) { - cJSON* shape = cJSON_Parse(cfg->shapedata), *sp; + cJSON* shape = mcx_parsejson(cfg->shapedata), *sp; if (shape == NULL) { MCX_ERROR(-1, "the input shape construct is not a valid JSON object"); @@ -3612,30 +3655,32 @@ void mcx_replayinit(Config* cfg, float* detps, int dimdetps[2], int seedbyte) { cfg->nphoton = 0; for (i = 0; i < dimdetps[1]; i++) { - if (cfg->replaydet <= 0 || cfg->replaydet == (int) (detps[i * dimdetps[0]])) { - if (i != cfg->nphoton) { - memcpy((char*) (cfg->replay.seed) + cfg->nphoton * seedbyte, - (char*) (cfg->replay.seed) + i * seedbyte, - seedbyte); - } + if (cfg->replaydet <= 0 || cfg->replaydet == ((int) (detps[i * dimdetps[0]]) & 0xFFFF)) { + if (cfg->srcid <= 0 || (((int) (detps[i * dimdetps[0]]) & 0xFFFF0000) && cfg->srcid == (((int) (detps[i * dimdetps[0]]) & 0xFFFF0000) >> 16))) { + if (i != cfg->nphoton) { + memcpy((char*) (cfg->replay.seed) + cfg->nphoton * seedbyte, + (char*) (cfg->replay.seed) + i * seedbyte, + seedbyte); + } - cfg->replay.weight[cfg->nphoton] = 1.f; - cfg->replay.tof[cfg->nphoton] = 0.f; - cfg->replay.detid[cfg->nphoton] = (hasdetid) ? (int) (detps[i * dimdetps[0]]) : 1; + cfg->replay.weight[cfg->nphoton] = 1.f; + cfg->replay.tof[cfg->nphoton] = 0.f; + cfg->replay.detid[cfg->nphoton] = (hasdetid) ? (int) (detps[i * dimdetps[0]]) : 1; - for (j = hasdetid; j < cfg->medianum - 1 + hasdetid; j++) { - plen = detps[i * dimdetps[0] + offset + j]; - cfg->replay.weight[cfg->nphoton] *= expf(-cfg->prop[j - hasdetid + 1].mua * plen); - plen *= cfg->unitinmm; - cfg->replay.tof[cfg->nphoton] += plen * R_C0 * cfg->prop[j - hasdetid + 1].n; - } + for (j = hasdetid; j < cfg->medianum - 1 + hasdetid; j++) { + plen = detps[i * dimdetps[0] + offset + j]; + cfg->replay.weight[cfg->nphoton] *= expf(-cfg->prop[j - hasdetid + 1].mua * plen); + plen *= cfg->unitinmm; + cfg->replay.tof[cfg->nphoton] += plen * R_C0 * cfg->prop[j - hasdetid + 1].n; + } - if (cfg->replay.tof[cfg->nphoton] < cfg->tstart - || cfg->replay.tof[cfg->nphoton] > cfg->tend) { /*need to consider -g*/ - continue; - } + if (cfg->replay.tof[cfg->nphoton] < cfg->tstart + || cfg->replay.tof[cfg->nphoton] > cfg->tend) { /*need to consider -g*/ + continue; + } - cfg->nphoton++; + cfg->nphoton++; + } } } @@ -3659,7 +3704,7 @@ void mcx_replayprep(int* detid, float* ppath, History* his, Config* cfg) { cfg->nphoton = 0; for (i = 0; i < his->savedphoton; i++) { - if (cfg->replaydet <= 0 || (detid && cfg->replaydet == detid[i])) { + if (cfg->replaydet <= 0 || (detid && cfg->replaydet == (detid[i] & 0xFFFF))) { if (i != cfg->nphoton) { memcpy((char*)(cfg->replay.seed) + cfg->nphoton * his->seedbyte, (char*)(cfg->replay.seed) + i * his->seedbyte, his->seedbyte); } @@ -3844,7 +3889,7 @@ void mcx_loadseedjdat(char* filename, Config* cfg) { jbuf[len - 1] = '\0'; fclose(fp); - cJSON* root = cJSON_Parse(jbuf); + cJSON* root = mcx_parsejson(jbuf); free(jbuf); if (root) { @@ -4503,7 +4548,7 @@ int mcx_jdataencode(void* vol, int ndim, uint* dims, char* type, int byte, int totalbytes = datalen * byte; if (!cfg->isdumpjson) { - MCX_FPRINTF(cfg->flog, "compressing data [%s] ...", zipformat[zipid]); + MCX_FPRINTF(cfg->flog, "%s [%s] ...", T_("compressing data"), zipformat[zipid]); } /*compress data using zlib*/ @@ -4516,7 +4561,7 @@ int mcx_jdataencode(void* vol, int ndim, uint* dims, char* type, int byte, int if (!ret) { if (!cfg->isdumpjson) { - MCX_FPRINTF(cfg->flog, "compression ratio: %.1f%%\t", compressedbytes * 100.f / totalbytes); + MCX_FPRINTF(cfg->flog, "%s: %.1f%%\t", T_("compression ratio"), compressedbytes * 100.f / totalbytes); } if (isubj) { @@ -4539,7 +4584,7 @@ int mcx_jdataencode(void* vol, int ndim, uint* dims, char* type, int byte, int ret = zmat_encode(compressedbytes, compressed, &totalbytes, (uchar**)&buf, zmBase64, &status); if (!cfg->isdumpjson) { - MCX_FPRINTF(cfg->flog, "after encoding: %.1f%%\n", totalbytes * 100.f / (datalen * byte)); + MCX_FPRINTF(cfg->flog, "%s: %.1f%%\n", T_("after encoding"), totalbytes * 100.f / (datalen * byte)); } if (!ret) { @@ -4752,12 +4797,12 @@ void mcx_parsecmd(int argc, char* argv[], Config* cfg) { if (argv[i][0] == '-') { if (argv[i][1] == '-') { if (mcx_remap(argv[i])) { - MCX_FPRINTF(cfg->flog, "Command option: %s", argv[i]); - MCX_ERROR(-2, "unknown verbose option"); + MCX_FPRINTF(cfg->flog, "%s: %s", T_("Command option"), argv[i]); + MCX_ERROR(-2, T_("unknown verbose option")); } } else if (strlen(argv[i]) > 2) { - MCX_FPRINTF(cfg->flog, "Command option: %s", argv[i]); - MCX_ERROR(-2, "unknown short option"); + MCX_FPRINTF(cfg->flog, "%s: %s", T_("Command option"), argv[i]); + MCX_ERROR(-2, T_("unknown short option")); } if (argv[i][1] <= 'z' && argv[i][1] >= 'A') { @@ -4771,7 +4816,7 @@ void mcx_parsecmd(int argc, char* argv[], Config* cfg) { case 'i': if (filename[0]) { - MCX_ERROR(-2, "you can not specify both interactive mode and config file"); + MCX_ERROR(-2, T_("you can not specify both interactive mode and config file")); } isinteractive = 1; @@ -4899,7 +4944,7 @@ void mcx_parsecmd(int argc, char* argv[], Config* cfg) { if (cfg->gpuid > 0 && cfg->gpuid < MAX_DEVICE) { cfg->deviceid[cfg->gpuid - 1] = '1'; } else { - MCX_ERROR(-2, "GPU id can not be more than 256"); + MCX_ERROR(-2, T_("GPU ID can not be more than 256")); } break; @@ -4936,7 +4981,7 @@ void mcx_parsecmd(int argc, char* argv[], Config* cfg) { cfg->shapedata = (char*)malloc(len); memcpy(cfg->shapedata, argv[++i], len); } else { - MCX_ERROR(-1, "json shape constructs are expected after -P"); + MCX_ERROR(-1, T_("json shape constructs are expected after -P")); } break; @@ -4952,7 +4997,7 @@ void mcx_parsecmd(int argc, char* argv[], Config* cfg) { cfg->extrajson = (char*)calloc(1, len + 1); memcpy(cfg->extrajson, argv[++i], len); } else { - MCX_ERROR(-1, "json fragment is expected after --json"); + MCX_ERROR(-1, T_("json fragment is expected after --json")); } break; @@ -4964,7 +5009,7 @@ void mcx_parsecmd(int argc, char* argv[], Config* cfg) { case 'E': if (i < argc - 1 && (strstr(argv[i + 1], ".mch") != NULL || strstr(argv[i + 1], ".jdat") != NULL) ) { /*give an mch file to initialize the seed*/ #if defined(USE_LL5_RAND) - MCX_ERROR(-1, "seeding file is not supported in this binary"); + MCX_ERROR(-1, T_("seeding file is not supported in this binary")); #else i = mcx_readarg(argc, argv, i, cfg->seedfile, "string"); cfg->seed = SEED_FROM_FILE; @@ -4979,7 +5024,7 @@ void mcx_parsecmd(int argc, char* argv[], Config* cfg) { i = mcx_readarg(argc, argv, i, &(cfg->outputtype), "string"); if (mcx_lookupindex(&(cfg->outputtype), outputtype)) { - MCX_ERROR(-2, "the specified output data type is not recognized"); + MCX_ERROR(-2, T_("the specified output data type is not recognized")); } break; @@ -5010,7 +5055,7 @@ void mcx_parsecmd(int argc, char* argv[], Config* cfg) { cfg->mediabyte = mcx_keylookup(argv[++i], mediaformat); if (cfg->mediabyte == -1) { - MCX_ERROR(-1, "Unsupported media format."); + MCX_ERROR(-1, T_("Unsupported media format")); } cfg->mediabyte = mediaformatid[cfg->mediabyte]; @@ -5022,11 +5067,11 @@ void mcx_parsecmd(int argc, char* argv[], Config* cfg) { case 'F': if (i >= argc) { - MCX_ERROR(-1, "incomplete input"); + MCX_ERROR(-1, T_("incomplete input")); } if ((cfg->outputformat = mcx_keylookup(argv[++i], outputformat)) < 0) { - MCX_ERROR(-2, "the specified output data type is not recognized"); + MCX_ERROR(-2, T_("the specified output data type is not recognized")); } break; @@ -5067,18 +5112,43 @@ void mcx_parsecmd(int argc, char* argv[], Config* cfg) { break; + case 'y': + if (i + 1 < argc && isalpha((int)argv[i + 1][0]) ) { + int idx = mcx_keystartwith(argv[++i], languagename); + + if (idx == -1) { + MCX_FPRINTF(cfg->flog, "Unsupported language ID (%s), fallback to default\n", argv[i]); + } else { + mcx_lang = mcx_parsejson(translations[idx]); + } + + } else { + MCX_FPRINTF(cfg->flog, "%s: \n", T_("Built-in languages")); + + for (int i = 0; i < sizeof(benchname) / sizeof(char*) - 1; i++) { + cJSON* tmp = NULL, *root = NULL; + mcx_lang = mcx_parsejson(translations[i]); + MCX_FPRINTF(cfg->flog, "\t%s\t%s\n", languagename[i], FIND_JSON_KEY("_LANG_", NULL, mcx_lang, "(Invalid JSON, see error above)", valuestring)); + cJSON_Delete(mcx_lang); + } + + exit(0); + } + + break; + case 'Q': if (i + 1 < argc && isalpha((int)argv[i + 1][0]) ) { int idx = mcx_keylookup(argv[++i], benchname); if (idx == -1) { - MCX_ERROR(-1, "Unsupported bechmark."); + MCX_ERROR(-1, T_("Unsupported bechmark.")); } isinteractive = 0; jsoninput = (char*)benchjson[idx]; } else { - MCX_FPRINTF(cfg->flog, "Built-in benchmarks:\n"); + MCX_FPRINTF(cfg->flog, "%s: \n", T_("Built-in benchmarks")); for (int i = 0; i < sizeof(benchname) / sizeof(char*) - 1; i++) { MCX_FPRINTF(cfg->flog, "\t%s\n", benchname[i]); @@ -5106,7 +5176,7 @@ void mcx_parsecmd(int argc, char* argv[], Config* cfg) { runcommand("curl -s -X POST -H 'Content-Type: application/json' -d '{\"selector\": {\"Session\": {\"$gt\": null}},\"fields\": [\"_id\"],\"limit\":50}' \"https://neurojson.io:7777/mcx/_find\"", "", &jbuf); } - cJSON* root = cJSON_Parse(jbuf), *docs = cJSON_GetObjectItem(root, "docs"), *subitem, *tmp; + cJSON* root = mcx_parsejson(jbuf), *docs = cJSON_GetObjectItem(root, "docs"), *subitem, *tmp; if (!docs) { docs = cJSON_GetObjectItem(root, "rows"); @@ -5118,7 +5188,7 @@ void mcx_parsecmd(int argc, char* argv[], Config* cfg) { doclen = cJSON_GetArraySize(docs); subitem = docs->child; - printf("Downloading %d simulations from NeuroJSON.io (https://neurojson.org/db/mcx)\n", doclen - 1); + MCX_FPRINTF(cfg->flog, "%s (%d)\n", T_("Downloading simulations from NeuroJSON.io (https://neurojson.org/db/mcx)"), doclen - 1); for (j = 0; j < doclen; j++) { char* docid = (cJSON_GetObjectItem(subitem, "_id") ? FIND_JSON_KEY("_id", "id", subitem, "", valuestring) : FIND_JSON_KEY("id", "id", subitem, "", valuestring)); @@ -5184,14 +5254,14 @@ void mcx_parsecmd(int argc, char* argv[], Config* cfg) { } else if (strcmp(argv[i] + 2, "internalsrc") == 0) { i = mcx_readarg(argc, argv, i, &(cfg->internalsrc), "int"); } else { - MCX_FPRINTF(cfg->flog, "unknown verbose option: --%s\n", argv[i] + 2); + MCX_FPRINTF(cfg->flog, "%s: --%s\n", T_("unknown verbose option"), argv[i] + 2); } break; default: - MCX_FPRINTF(cfg->flog, "Command option: %s", argv[i]); - MCX_ERROR(-2, "unknown short option"); + MCX_FPRINTF(cfg->flog, "%s: %s", T_("Command option"), argv[i]); + MCX_ERROR(-2, T_("unknown short option")); break; } } @@ -5204,17 +5274,17 @@ void mcx_parsecmd(int argc, char* argv[], Config* cfg) { } if (issavelog > 0) { - sprintf(logfile, "%s.log", (strlen(cfg->session) ? cfg->session : "unnamed")); + sprintf(logfile, "%s.log", (strlen(cfg->session) ? cfg->session : T_("unnamed"))); cfg->flog = fopen(logfile, "wt"); if (cfg->flog == NULL) { cfg->flog = stdout; - MCX_FPRINTF(cfg->flog, "unable to save to log file, will print from stdout\n"); + MCX_FPRINTF(cfg->flog, "%s\n", T_("unable to save to log file, will print from stdout")); } } if ((cfg->outputtype == otJacobian || cfg->outputtype == otWP || cfg->outputtype == otDCS || cfg->outputtype == otRF || cfg->outputtype == otRFmus || cfg->outputtype == otWLTOF || cfg->outputtype == otWPTOF) && cfg->seed != SEED_FROM_FILE) { - MCX_ERROR(-1, "Jacobian output is only valid in the reply mode. Please give an mch file after '-E'."); + MCX_ERROR(-1, T_("Jacobian output is only valid in the reply mode. Please give an mch file after '-E'.")); } if (cfg->isgpuinfo != 2) { /*print gpu info only*/ @@ -5230,14 +5300,14 @@ void mcx_parsecmd(int argc, char* argv[], Config* cfg) { } if (cfg->extrajson) { - cJSON* jroot = cJSON_Parse(cfg->extrajson); + cJSON* jroot = mcx_parsejson(cfg->extrajson); if (jroot) { cfg->extrajson[0] = '_'; mcx_loadjson(jroot, cfg); cJSON_Delete(jroot); } else { - MCX_ERROR(-1, "invalid json fragment following --json"); + MCX_ERROR(-1, T_("invalid json fragment following --json")); } } } @@ -5310,6 +5380,43 @@ int mcx_keylookup(char* origkey, const char* table[]) { return -1; } +/** + * @brief Look up a string in a string list and return the index + * + * @param[in] origkey: string to be looked up + * @param[out] table: the dictionary where the string is searched + * @return if found, return the index of the string in the dictionary, otherwise -1. + */ + +int mcx_keystartwith(char* origkey, const char* table[]) { + int i = 0; + char* key = malloc(strlen(origkey) + 1); + memcpy(key, origkey, strlen(origkey) + 1); + + if (strlen(origkey) > 2 && key[2] == '-') { + key[2] = '_'; + } + + while (key[i]) { + key[i] = tolower(key[i]); + i++; + } + + i = 0; + + while (table[i] && table[i][0] != '\0') { + if (strstr(table[i], key)) { + free(key); + return i; + } + + i++; + } + + free(key); + return -1; +} + /** * @brief Look up a single character in a string * @@ -5343,7 +5450,7 @@ void mcx_version(Config* cfg) { const char ver[] = "$Rev:: $ " MCX_VERSION; uint v = 0; sscanf(ver, "$Rev::%x", &v); - MCX_FPRINTF(cfg->flog, "MCX Revision:\t%x\nVersion:\t%s\nMajor:\t\t%d\nMinor:\t\t%d\n", v, MCX_VERSION, MCX_VERSION_MAJOR, MCX_VERSION_MINOR); + MCX_FPRINTF(cfg->flog, "%s:\t%x\nVersion:\t%s\nMajor:\t\t%d\nMinor:\t\t%d\n", T_("MCX Revision"), v, MCX_VERSION, MCX_VERSION_MAJOR, MCX_VERSION_MINOR); exit(0); } @@ -5439,6 +5546,27 @@ int mcx_float2half2(float input[2]) { return f2h.i[0]; } +/** + * @brief Lookup and return translations for specified language + * + * @param[in] cfg: simulation configuration + */ + +char* T_(const char* key) { + cJSON* tmp = NULL, *root = NULL; + + if (mcx_lang) { + if (cJSON_IsObject(mcx_lang->child)) { + mcx_lang = mcx_lang->child; + } + + return (char*)FIND_JSON_KEY(key, NULL, mcx_lang, key, valuestring); + } + + return (char*)key; +} + + #ifndef MCX_CONTAINER /** @@ -5456,7 +5584,7 @@ int mcx_run_from_json(char* jsonstr) { mcx_readconfig(jsonstr, &mcxconfig); if (!(activedev = mcx_list_gpu(&mcxconfig, &gpuinfo))) { - MCX_ERROR(-1, "No GPU device found\n"); + MCX_ERROR(-1, T_("No GPU device found")); } #ifdef _OPENMP @@ -5484,7 +5612,10 @@ int mcx_run_from_json(char* jsonstr) { void mcx_printheader(Config* cfg) { if (cfg->printnum >= 0 ) { - MCX_FPRINTF(cfg->flog, S_MAGENTA"\ + if (strcmp(T_("_MCX_BANNER_"), "_MCX_BANNER_")) { + MCX_FPRINTF(cfg->flog, "%s", T_("_MCX_BANNER_")); + } else { + MCX_FPRINTF(cfg->flog, S_MAGENTA"\ ###############################################################################\n\ # Monte Carlo eXtreme (MCX) -- CUDA #\n\ # Copyright (c) 2009-2025 Qianqian Fang #\n\ @@ -5499,7 +5630,10 @@ void mcx_printheader(Config* cfg) { # MCX proudly developed human-readable JSON-based data formats for easy reuse.#\n\ # #\n\ #Please visit our free scientific data sharing portal at " S_BLUE "https://neurojson.io " S_MAGENTA "#\n\ -# and consider sharing your public datasets in standardized JSON/JData format #\n\ +# and consider sharing your public datasets in standardized JSON/JData format #\n" S_RESET); + } + + MCX_FPRINTF(cfg->flog, S_MAGENTA"\ ###############################################################################\n\ $Rev:: $" S_GREEN MCX_VERSION S_MAGENTA " $Date:: $ by $Author:: $\n\ ###############################################################################\n" S_RESET); @@ -5687,6 +5821,7 @@ where possible parameters include (the first value in [*|*] is the default)\n\ \n"S_BOLD S_CYAN"\ == User IO options ==\n" S_RESET"\ -h (--help) print this message\n\ + -y [zh_CN,..] (--lang) select language, followed by nothing to print\n\ -v (--version) print MCX revision number\n\ -l (--log) print messages to a log file instead\n\ -i (--interactive) interactive mode\n\ @@ -5733,9 +5868,11 @@ or (use -N/--net to browse community-contributed mcx simulations at https://neur %s -N\n" S_RESET"\ or (run user-shared mcx simulations, see full list at https://neurojson.org/db/mcx)\n"S_MAGENTA"\ %s -N aircube60\n" S_RESET"\ +or (print in simplified Chinese using -y/--lang)\n"S_MAGENTA"\ + %s -y zh_CN -Q cube60\n" S_RESET"\ or (use -f - to read piped input file modified by shell text processing utilities)\n"S_MAGENTA"\ %s -Q cube60 --dumpjson | sed -e 's/pencil/cone/g' | %s -f -\n" S_RESET"\ or (download/modify simulations from NeuroJSON.io and run with mcx -f)\n"S_MAGENTA"\ curl -s -X GET https://neurojson.io:7777/mcx/aircube60 | jq '.Forward.Dt = 1e-9' | %s -f" S_RESET"\n", - exename, exename, exename, exename, exename, exename, exename, exename, exename, exename, exename, exename); + exename, exename, exename, exename, exename, exename, exename, exename, exename, exename, exename, exename, exename); } diff --git a/src/mcx_utils.h b/src/mcx_utils.h index 2e516805..4be67ffd 100644 --- a/src/mcx_utils.h +++ b/src/mcx_utils.h @@ -52,6 +52,7 @@ #define MAX_PATH_LENGTH 1024 /**< max characters in a full file name string */ #define MAX_SESSION_LENGTH 256 /**< max session name length */ #define MAX_DEVICE 256 /**< max number of GPUs to be used */ +#define MAX_LANG_ID 32 /**< max number of characters in the language code */ #define MCX_CUDA_ERROR_LAUNCH_FAILED 719 /**< CUDA kernel launch error code */ @@ -259,6 +260,7 @@ typedef struct MCXConfig { float workload[MAX_DEVICE]; /** @@ -78,6 +79,8 @@ typedef mwSize dimtype; +extern cJSON* mcx_lang; + void mcx_set_field(const mxArray* root, const mxArray* item, int idx, Config* cfg); void mcxlab_usage(); @@ -1172,7 +1175,7 @@ void mcx_set_field(const mxArray* root, const mxArray* item, int idx, Config* cf cfg->invcdf[0] = -1.f; cfg->invcdf[cfg->nphase - 1] = 1.f; - printf("mcx.invcdf=[%ld];\n", cfg->nphase); + printf("mcx.invcdf=[%d];\n", cfg->nphase); } else if (strcmp(name, "angleinvcdf") == 0) { dimtype nangle = mxGetNumberOfElements(item); double* val = mxGetPr(item); @@ -1192,7 +1195,7 @@ void mcx_set_field(const mxArray* root, const mxArray* item, int idx, Config* cf } } - printf("mcx.angleinvcdf=[%ld];\n", cfg->nangle); + printf("mcx.angleinvcdf=[%d];\n", cfg->nangle); } else if (strcmp(name, "shapes") == 0) { int len = mxGetNumberOfElements(item); @@ -1323,6 +1326,32 @@ void mcx_set_field(const mxArray* root, const mxArray* item, int idx, Config* cf } printf("mcx.flog=%d;\n", cfg->flog); + } else if (strcmp(name, "lang") == 0) { + int len = mxGetNumberOfElements(item); + char langid[32] = {'\0'}; + + if (!mxIsChar(item) || len == 0) { + mexErrMsgTxt("the 'lang' field must be a non-empty string"); + } + + if (len > 5) { + mexErrMsgTxt("the 'lang' field is too long"); + } + + int status = mxGetString(item, langid, 32); + + if (status != 0) { + mexWarnMsgTxt("not enough space. string is truncated."); + } + + int idx = mcx_keylookup(langid, languagename); + + if (idx == -1) { + mexErrMsgTxt(T_("Unsupported language")); + } + + mcx_lang = cJSON_Parse(translations[idx]); + printf("mcx.lang='%s';\n", langid); } else { printf(S_RED "WARNING: redundant field '%s'\n" S_RESET, name); } diff --git a/src/pmcx.cpp b/src/pmcx.cpp index c2e55590..8498debd 100644 --- a/src/pmcx.cpp +++ b/src/pmcx.cpp @@ -40,6 +40,7 @@ #include "mcx_core.h" #include "mcx_const.h" #include "mcx_shapes.h" +#include "mcx_lang.h" #include // Python binding for runtime_error exception in Python. @@ -1024,6 +1025,22 @@ void parse_config(const py::dict& user_cfg, Config& mcx_config) { } } + if (user_cfg.contains("lang")) { + std::string langid = py::str(user_cfg["lang"]); + + if (langid.empty()) { + throw py::value_error("the 'lang' field must be a non-empty string"); + } + + int idx = mcx_keylookup((char*)langid.c_str(), languagename); + + if (idx == -1) { + throw py::value_error("Unsupported language"); + } + + mcx_lang = cJSON_Parse(translations[idx]); + } + // Output arguments parsing GET_SCALAR_FIELD(user_cfg, mcx_config, issave2pt, py::bool_); GET_SCALAR_FIELD(user_cfg, mcx_config, issavedet, py::int_); diff --git a/src/pybind11 b/src/pybind11 index 5891867e..5b0a6fc2 160000 --- a/src/pybind11 +++ b/src/pybind11 @@ -1 +1 @@ -Subproject commit 5891867ee4ad1d671e0f54c5fb30f62d1322d8d0 +Subproject commit 5b0a6fc2017fcc176545afe3e09c9f9885283242 diff --git a/test/testmcx.sh b/test/testmcx.sh index 0e237847..1b12f410 100755 --- a/test/testmcx.sh +++ b/test/testmcx.sh @@ -101,6 +101,13 @@ echo "test pencil array source ... " temp=`"$MCX" --bench cube60planar --json '{"Optode":{"Source":{"Type":"pencilarray","Param1":[40,0,0,4],"Param2":[0,20,0,2]}}}' -d 0 -S 0 $PARAM | grep -o -E 'absorbed:.*23\.[0-9]+%'` if [ -z "$temp" ]; then echo "fail to run pencil array source"; fail=$((fail+1)); else echo "ok"; fi +temp=`"$MCX" -Q cube60b -n 1e7 -W 10,10,10 -j '{"Optode":{"Source":{"Type":"unknown"}}}' $PARAM 2>&1` +if [ ! -z "$temp" ]; then + echo "test unknown source type error handling ... " + haserror=`echo $temp | grep -o -E 'MCX[A-Z]* ERROR.-.*the specified source type is not supported'` + if [ -z "$haserror" ]; then echo "fail to catch unknown source type - should return error"; fail=$((fail+1)); else echo "ok"; fi +fi + echo "test boundary detector flags ... " temp=`"$MCX" --bench cube60 --bc '______111111' $PARAM -n 1e4 | grep -o -E 'detected.*[0-9.]+ photons' | grep -o -E '[0-9.]+ photon' | grep -o -E '9[7-9][0-9.]+'` if [ -z "$temp" ]; then echo "fail to detect photons in the cube60b benchmark"; fail=$((fail+1)); else echo "ok"; fi @@ -149,7 +156,7 @@ temp=`("$MCX" --bench cube60 -d 0 -s testrng222 --json '{"Shapes":[{"Grid":{"Tag if [ -z "$temp" ] || [ ! -f testrng222.jnii ] ; then echo "fail to create random numbers"; fail=$((fail+1)); else echo "ok"; fi echo "test saving trajectory feature -D M ... " -temp=`"$MCX" --bench cube60 -D M -S 0 -d 0 $PARAM -n 1e2 | grep -o -E 'saved [6-9][0-9]+ trajectory'` +temp=`"$MCX" --bench cube60 -D M -S 0 -d 0 $PARAM -n 1e2 | grep -o -E 'saved trajectory positions: [6-9][0-9]+'` if [ -z "$temp" ]; then echo "fail to save trajectory data via -D M"; fail=$((fail+1)); else echo "ok"; fi temp=`which valgrind 2> /dev/null` diff --git a/utils/NEWS b/utils/NEWS index 90901fc3..328f7827 100644 --- a/utils/NEWS +++ b/utils/NEWS @@ -2,7 +2,7 @@ Major updates are marked with a "*" -== MCX v2025.6.pre (Kilo-Kelvin - 2.8), FangQ == +== MCX v2025.9 (Kilo-Kelvin - 2.8), FangQ == == MCX v2025 (Jumbo Jolt - 2.6), FangQ == diff --git a/winget/coti.mcxstudio.installer.yaml b/winget/coti.mcxstudio.installer.yaml index f23b1fe4..2b9773ea 100644 --- a/winget/coti.mcxstudio.installer.yaml +++ b/winget/coti.mcxstudio.installer.yaml @@ -2,13 +2,13 @@ # yaml-language-server: $schema=https://aka.ms/winget-manifest.installer.1.1.0.schema.json PackageIdentifier: coti.mcxstudio -PackageVersion: v2025.6 +PackageVersion: v2025.9 MinimumOSVersion: 10.0.0.0 InstallerType: inno Scope: machine Installers: - Architecture: x64 - InstallerUrl: https://mcx.space/nightly/release/v2025.6/MCXStudio-v2025.6-installer.exe + InstallerUrl: https://mcx.space/nightly/release/v2025.9/MCXStudio-v2025.9-installer.exe InstallerSha256: 2e48cf40473c5601fff8f6fdc22734f83d5e4b935298a6c184468bb96b23fc2b ManifestType: installer ManifestVersion: 1.9.0 diff --git a/winget/coti.mcxstudio.locale.en-US.yaml b/winget/coti.mcxstudio.locale.en-US.yaml index a752e13c..bff74afa 100644 --- a/winget/coti.mcxstudio.locale.en-US.yaml +++ b/winget/coti.mcxstudio.locale.en-US.yaml @@ -2,7 +2,7 @@ # yaml-language-server: $schema=https://aka.ms/winget-manifest.defaultLocale.1.1.0.schema.json PackageIdentifier: coti.mcxstudio -PackageVersion: v2025.6 +PackageVersion: v2025.9 PackageLocale: en-US Publisher: COTILab PublisherUrl: https://mcx.space @@ -12,9 +12,9 @@ Author: Qianqian Fang PackageName: MCX Studio PackageUrl: https://sourceforge.net/projects/mcx/ License: GNU General Public License v3.0 (GPL-3.0) -LicenseUrl: https://github.com/fangq/mcx/blob/v2025.6/LICENSE.txt +LicenseUrl: https://github.com/fangq/mcx/blob/v2025.9/LICENSE.txt Copyright: Copyright (c) 2010-2025 Qianqian Fang -CopyrightUrl: https://github.com/fangq/mcx/blob/v2025.6/LICENSE.txt +CopyrightUrl: https://github.com/fangq/mcx/blob/v2025.9/LICENSE.txt ShortDescription: Monte Carlo eXtreme (MCX) - Physically accurate and validated GPU ray-tracer Description: Monte Carlo eXtreme, or MCX, is a Monte Carlo photon simulator for modeling light transport in 3D turbid media. It uses NVIDIA graphics processing units (GPUs) to simulate thousands of photons simultaneously, making it one of the fastest and most accurate photon modeling tools. Moniker: mcxstudio @@ -36,6 +36,6 @@ ReleaseNotes: |- - [Critical Bug fix] Fix incorrect partial path lengths for long-path photons, (fangq/mcx\#222) - [Bug fix] Further updates to the handling of low absorption medium (fangq/mcx\#164) - [Bug fix] A bug fix related to multi-source simulation to properly return the source ID (fangq/mcx\#217) -ReleaseNotesUrl: https://mcx.space/wiki/index.cgi?Doc/ReleaseNotes/v2025.6 +ReleaseNotesUrl: https://mcx.space/wiki/index.cgi?Doc/ReleaseNotes/v2025.9 ManifestType: defaultLocale ManifestVersion: 1.9.0 diff --git a/winget/coti.mcxstudio.yaml b/winget/coti.mcxstudio.yaml index 86a537f8..c5eeea61 100644 --- a/winget/coti.mcxstudio.yaml +++ b/winget/coti.mcxstudio.yaml @@ -2,7 +2,7 @@ # yaml-language-server: $schema=https://aka.ms/winget-manifest.version.1.1.0.schema.json PackageIdentifier: coti.mcxstudio -PackageVersion: v2025.6 +PackageVersion: v2025.9 DefaultLocale: en-US ManifestType: version ManifestVersion: 1.9.0