
Security News
Browserslist-rs Gets Major Refactor, Cutting Binary Size by Over 1MB
Browserslist-rs now uses static data to reduce binary size by over 1MB, improving memory use and performance for Rust-based frontend tools.
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.
Monte Carlo eXtreme (MCX) is a fast photon transport simulation software for 3D heterogeneous turbid media. By taking advantage of the massively parallel threads and extremely low memory latency in a modern graphics processing unit (GPU), MCX is capable of performing Monte Carlo (MC) photon simulations at a blazing speed, typically hundreds to a thousand times faster than a fully optimized CPU-based MC implementation.
pip install pmcx
see https://pypi.org/project/pmcx/pip install numpy
or conda install numpy
pip install jdata
on all operating systems; For Debian-based Linux distributions, you can also install to the system interpreter
using apt-get: sudo apt-get install python3-jdata
. See https://pypi.org/project/jdata/ for more details.pip install bjdata
on all operating systems; For Debian-based Linux distributions, you can also install to the system interpreter
using apt-get: sudo apt-get install python3-bjdata
. See https://pypi.org/project/bjdata/ for more details.pip install matplotlib
or
conda install matplotlib
Operating System: Windows and Linux are fully supported; For building MCX on macOS, OSX 10.13 (High Sierra) and
older are highly recommended since 10.13 was the last version of macOS with NVIDIA CUDA support, and matching the CUDA
compiler version with the C/C++ compiler shipped with Xcode is easier. Newer macOS versions can be used for building MCX,
but need to have System Integrity Protection disabled prior to installing the CUDA toolkit due to the NVIDIA installer copying
its payload under the /Developer
directory under root.
NVIDIA CUDA Toolkit: CUDA 7.5 or newer is required. On macOS, 10.2 is the last available CUDA version. For details on how to install CUDA, see the CUDA Download Page. The NVIDIA GPU driver of the target system must support the selected CUDA toolkit.
Python Interpreter: Python 3.6 or above. The pip
Python package manager and the wheel
package (available
via pip
) are not required but recommended.
C/C++ Compiler: CUDA Toolkit supports only the following compilers:
SDKROOT
environment variable:
sudo xcode-select -s /Applications/Xcode_10.3.app/Contents/Developer/
export SDKROOT=/Applications/Xcode_10.3.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk
Refer to each OS's online documentations for more in-depth information on how to install these compilers. Note that the version of the C/C++ compiler used must be supported by the CUDA toolkit version. If not, compilation will fail with an error notifying you of this problem. See the CUDA Installation Guides for more details.
OpenMP: The installed C/C++ Compiler should have support for OpenMP. GCC and Microsoft Visual Studio compiler support OpenMP out of the box. Apple Clang, however, requires manual installation of OpenMP libraries for Apple Clang. The easiest way to do this is via the Brew package manager, preferably after selecting the correct Xcode version:
brew install libomp
brew link --force libomp
CMake: CMake version 3.15 and later is required. Refer to the CMake website for more information on how to download. CMake is also widely available on package managers across all operating systems. Additionally, on Windows, make sure Visual Studio's C++ CMake tools for Windows is also installed by selecting its option during installation.
Ensure that cmake
, nvcc
(NVIDIA CUDA Compiler) and the C/C++ compiler are all located over your PATH
.
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
.
Clone the repository and switch to the pmcx/
folder:
git clone --recursive https://github.com/fangq/mcx.git
cd mcx/pmcx
One can run python3 setup.py install
or python3 -m pip install .
to both locally build and install the module
If one only wants to locally build the module, one should run python3 -m pip wheel .
If the binary module is successfully built locally, you should see a binary wheel file pmcx-X.X.X-cpXX-cpXX-*.whl
stored inside the mcx/pmcx
folder. You can install this wheel package using python3 -m pip install --force-reinstall pmcx-*.whl
to force installing this locally compiled pmcx
module and overwrite any previously installed versions.
The PMCX module is easy to use. You can use the pmcx.gpuinfo()
function to first verify
if you have NVIDIA/CUDA compatible GPUs installed; if there are NVIDIA GPUs detected,
you can then call the run()
function to launch a photon simulation.
A simulation can be defined conveniently in two approaches - a one-liner and a two-liner:
import pmcx
import numpy as np
import matplotlib.pyplot as plt
res = pmcx.run(nphoton=1000000, vol=np.ones([60, 60, 60], dtype='uint8'), tstart=0, tend=5e-9,
tstep=5e-9, srcpos=[30,30,0], srcdir=[0,0,1], prop=np.array([[0, 0, 1, 1], [0.005, 1, 0.01, 1.37]]))
res['flux'].shape
plt.imshow(np.log10(res['flux'][30,:, :]))
plt.show()
pmcx.run()
, or preferably, pmcx.mcxlab()
import pmcx
import numpy as np
cfg = {'nphoton': 1000000, 'vol':np.ones([60,60,60],dtype='uint8'), 'tstart':0, 'tend':5e-9, 'tstep':5e-9,
'srcpos': [30,30,0], 'srcdir':[0,0,1], 'prop':[[0,0,1,1],[0.005,1,0.01,1.37]]}
res = pmcx.run(cfg) # pmcx.run returns detected photon data as a concatenated 2D array res['detp'], same for res['traj']
# or alternatively/preferably
res = pmcx.mcxlab(cfg) # pmcx.mcxlab calls pmcx.run, and postprocess res['detp'] and res['traj'] raw data into dict form
FAQs
Python bindings for Monte Carlo eXtreme photon transport simulator
We found that pmcx demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Browserslist-rs now uses static data to reduce binary size by over 1MB, improving memory use and performance for Rust-based frontend tools.
Research
Security News
Eight new malicious Firefox extensions impersonate games, steal OAuth tokens, hijack sessions, and exploit browser permissions to spy on users.
Security News
The official Go SDK for the Model Context Protocol is in development, with a stable, production-ready release expected by August 2025.