Skip to content

Releases: fangq/mmc

MMC v2024.2 (Nougat)

15 Mar 22:27
Compare
Choose a tag to compare

Mesh-based Monte Carlo (MMC) - SSE4 and OpenCL

v2024.2

  • Author: Qianqian Fang (q.fang at neu.edu)
  • License: GNU General Public License version 3 (GPLv3)
  • Version: 2.2.0 (v2024.2, Nougat)
  • Website: https://mcx.space/mmc

Download

What's New

MMC v2024.2 (2.2.0) adds the below key features

  • support saving photon trajectories (-D M or cfg.debuglevel='M')
  • allow to use a single JSON input file to store mesh node, element and iMMC ROI data, along with other simulation settings
  • compute element face-neighbours (facenb) and volumes (evol) in C code, avoid needing preprocessing
  • support built-in benchmarks, use --bench to list and --bench name to run
  • accept pattern data in the JSON input file
  • store pattern pixel index for each photon in photon sharing
  • provide native Apple M1 binaries

Aside from these added new features, we have also fixed a number of bugs. All
MATLAB scripts have been automatically formatted using miss_hit. The binary JSON
library was also updated to the latest version.

MMC v2023 (Mochi)

29 Sep 19:45
Compare
Choose a tag to compare

Mesh-based Monte Carlo (MMC) - SSE4 and OpenCL

v2023

  • Author: Qianqian Fang (q.fang at neu.edu)
  • License: GNU General Public License version 3 (GPLv3)
  • Version: 2.0.0 (v2023, Mochi)
  • Website: https://mcx.space/mmc

Download

What's New

MMC v2023 (2.0.0) includes a major feature upgrade - implicit MMC (iMMC) - to
enable simulations of highly complex anatomical structures. The details of the
iMMC algorithm, developed by Yaoshen Yuan, are described in his recent paper
[Yuan2021]. Briefly, iMMC permits one to associate cylindrical inclusions,
spherical inclusions, and thin-membrane with the edges, vertices and faces,
respectively, in a tetrahedral mesh. Currently, this feature is only supported
on the CPU (must be used with -G -1 or cfg.gpuid=-1).

In 2020, we have also merged the mmc-trinity branch to the main code tree.
The "trinity" version of MMC simultaneously supports CPU/SSE4, OpenCL and CUDA
as the compute-backend, and can be selected using -c/--compute opencl|sse|cuda
command line flag. By default, we do not compile the CUDA version in the binary.
However, users can compile the "trinity" binary by make cuda or cmake -DBUILD_CUDA=on.

Finally, in the release, we upgraded the normalization formula for nodal-based
MMC simulation on the mesh surface nodes to correct for an observed deviation
from MCX and DMMC outputs. This update only affects outputs on the exterior
surface nodes, and does not impact DMMC (-M G, default for GPU based MMC)
or element based (-M S) MMC.

To highlight a few most important updates:

  • Support iMMC (edge-, node- and face-based implicit structures), CPU only (by Yaoshen Yuan)
  • Added MMCLAB examples for iMMC, including a large dense vessel network (by Yaoshen Yuan)
  • About 30%-40% faster OpenCL based simulations on NVIDIA GPUs using PTX-based atomic operations
  • More accurate normalization of nodal-based MMC simulation on the exterior surface
  • Provide mmc-trinity binaries with simultaneous SSE/OpenCL/CUDA backend support
  • CMake based portable compilation system
  • Added GNU Octave mex file for MMCLAB on Linux/MacOS/Windows
  • Several critical bug fixes (by Shijie Yan)
  • Github Action based continuous integration (CI) system for automated building/packaging/testing

Please file bug reports to https://github.com/fangq/mmc/issues

A detailed list of updates can be found below.

MMC 2.0.0 (v2023, Mochi), Qianqian Fang <q.fang at neu.edu>

  • 2023-09-17 [6569f48] add comments to nightly build script for deployment
  • 2023-09-16 [c242cf7] update deploy script after reformat
  • 2023-09-13 [d3f25c6] avoid error on old windows sdk
  • 2023-09-13 [8a59cf0] support ASCII escape code in Windows terminals
  • 2023-09-12 [29480d5] only build main function in mmclab for apple
  • 2023-09-12 [86d5658] get around macos make oct error
  • 2023-09-12 [2bada1e] remove some warnings
  • 2023-09-12 [130570b] remove all file IO functions from mex and oct files
  • 2023-09-11 [4ca899f] remove liboctinterp-11, the output is only compatible to octave 8
  • 2023-09-10 [eb14b10] add fopenmp back for mex
  • 2023-09-10 [e20d718] leave out libgomp
  • 2023-09-10 [ee11269] try to statically link libpthread
  • 2023-09-10 [a42553b] fix build error
  • 2023-09-10 [75240d5] use upx compression
  • 2023-09-10 [7264068] clean make oct output before make mex
  • 2023-09-10 [06bcb39] test win matlab mex build
  • 2023-09-10 [dc5ad09] debug windows matlab mex
  • 2023-09-10 [fe21a6b] fix typo, add dll to package
  • 2023-09-10 [a902077] test windows matlab build
  • 2023-09-10 [c25420d] use octave 8 bundled gcc
  • 2023-09-10 [a5203e5] try octave 8.3 for windows build
  • 2023-09-10 [bb1aada] remove matlab gui waitbar, update README and docs
  • 2023-09-09 [13f3760] compute Reff for every medium for normalization
  • 2023-09-09 [1758504] fix gcc error on gcc 4.8
  • 2023-09-09 [7426c8d] guard CMP0074 cmake policy with version
  • 2023-09-08 [1455fbb] enable static linking with gcc with cmake
  • 2023-09-08 [4829e35] fix mex file missing symbol error, thanks to @ShijieYan
  • 2023-09-08 [03e36cd] support building cuda/trinity mex file
  • 2023-09-08 [d38e7e5] add missing zmat cmake file, add mmc-trinity cuda support in cmake
  • 2023-09-08 [74a3035] add the cmake file that was forgot to add
  • 2023-09-08 [1f2ef63] fix incorrect unit in the figure title
  • 2023-09-04 [6e41cfe] fix normalization bug on the exterior surface, close #82
  • 2023-09-03 [20e4dd8] reformat comments in mmc.c with doxygen
  • 2023-09-03 [260e6c0] update documentation
  • 2023-09-01 [a453381] -ffile-prefix-map is only supported in gcc-8 see pandas-dev/pandas#40997
  • 2023-09-01 [b80e801] add apt source to install gcc-7
  • 2023-09-01 [397b7d6] use gcc-7 to build mmc on Linux
  • 2023-09-01 [fe125ad] renormalize dir vector after each scattering, suggested by @ShijieYan
  • 2023-08-31 [f4fc140] update v2023 code name
  • 2023-08-31 [1da18ff] comparing r.eid with signed integer constant, fix #77
  • 2023-08-31 [bfcde02] add the missing maxdetphoton input field in the help info
  • 2023-08-30 [ce80a04] update mmc2json
  • 2023-08-30 [e6f6075] fix progress bar printing issue after makefile update
  • 2023-08-30 [289781f] update documentation
  • 2023-08-30 [bb187a4] allow nightly build on macos
  • 2023-08-29 [7949825] fix ci error again
  • 2023-08-29 [11b1c33] update zmatlib, replace zlib by miniz, update cmake, update version
  • 2023-05-19 [01ed20b] remove ubuntu-18.04 from github action
  • 2023-05-18 [aac1f65] remove macos-10.15 as github retires it, upgrade gcc on the mac
  • 2023-03-27 [c84a303] make mmcraytrace able to handle surface input
  • 2023-03-14 [4162880] fix macos error
  • 2023-03-14 [cc126b6] try static as much as possible to link oct mex
  • 2023-03-14 [0472818] add -static to oct mex
  • 2023-03-14 [07438c6] try -static on octave based mmclab
  • 2023-03-14 [64f8503] add path to libz
  • 2023-03-14 [9d6509e] add libz.a path
  • 2023-03-14 [b1b1e6e] use LDFLAGS
  • 2023-03-14 [4c6f392] link libzmat
  • 2023-03-14 [2e3894b] finally found the culprit in the Makefile, matlab-actions/setup-matlab#60
  • 2023-03-14 [1394602] put env at the end, tlab-actions/setup-matlab#60
  • 2023-03-14 [8ef68b2] use env to set MW_MINGW64_LOC, matlab-actions/setup-matlab#60
  • 2023-03-14 [03274d7] add more include paths
  • 2023-03-14 [d760692] revert back to the link mingw gcc to msys
  • 2023-03-13 [0890cea] change msys2 package name
  • 2023-03-13 [e55ab10] use ucrt gcc
  • 2023-03-13 [2e961cf] install msys2 gcc
  • 2023-03-13 [ee7b8ef] add library link
  • 2023-03-13 [db99b15] create links
  • 2023-03-13 [70acd74] hacking msys2 env variable not inherient issue
  • 2023-03-13 [7780543] forcing MW_MINGW64_LOC
  • 2023-03-13 [9248b65] try another way to define MW_MINGW64_LOC,matlab-actions/setup-matlab#60
  • 2023-03-13 [9122715] define MW_MINGW64_LOC with pwsh syntax, matlab-actions/setup-matlab#60
  • 2023-03-13 [0ae6352] define MW_MINGW64_LOC to make mexopts work, matlab-actions/setup-matlab#60
  • 2023-03-13 [60d5331] debug mex compilation issue on windows, matlab-actions/setup-matlab#60
  • 2023-03-13 [afa6f89] debug mex file on windows
  • 2023-03-13 [b76de50] build matlab mex on windows
  • 2023-03-13 [5458312] revert to setup-matlab@v1
  • 2023-03-12 [aedc145] use objdump for windows to list dlls
  • 2023-03-12 [8d6fb98] try ldd on windows again
  • 2023-03-12 [18ad85f] disable windows setup-matlab again, matlab-actions/setup-matlab#60
  • 2023-03-12 [c23aecc] make macos octave path more robust
  • 2023-03-12 [a9c7cdd] use mexopt for gcc on mac
  • 2023-03-12 [13119d5] test gcc on mac again
  • 2023-03-12 [f1cc618] remove gcc library
  • 2023-03-12 [f91638e] fix yaml error
  • 2023-03-12 [0f49ccb] exclude windows for matlab build
  • 2023-03-12 [9026ac6] add libomp header path
  • 2023-03-12 [654ab24] set CC to clang
  • 2023-03-11 [aaa10d7] print PATH on mac
  • 2023-03-11 [41c58c3] let's locate and link gcc to cc
  • 2023-03-11 [37ad5e4] add libomp for mac
  • 2023-03-11 [b7a60b7] use gcc-10 on macOS for matlab mex
  • 2023-03-11 [22dcb61] force mac mex to use gcc
  • 2023-03-11 [f1bca2c] setup matlab R2020a is too slow
  • 2023-03-11 [6eb2c1d] use setup-matlab@v2-beta
  • 2023-03-11 [3a6719a] debug mmclab merging
  • 2023-03-11 [780f84f] build matlab mex
  • 2023-03-11 [9502ce1] test matlab setup
  • 2023-03-11 [4afd98e] try links
  • 2023-03-11 [073184c] avoid unzipping warning
  • 2023-03-11 [1faa998] use computer arch tag for octave
  • 2023-03-11 [4d04f44] add mmc.mex to arch specific folder
  • 2023-03-11 [7afb2c3] move PKG_ADD to the mmclab folder
  • 2023-03-11 [1df52df] try another way to zip mmc package
  • 2023-03-11 [4cded48] create all-in-one octave package
  • 2023-03-11 [1674054] remove tabs
  • 2023-03-11 [c8ddacd] merge all actions
  • 2023-03-11 [6c8573f] prepare to merge all
  • 2023-03-11 [d27776c] fix windows zip missing error
  • 2023-03-11 [ed784d5] remove tab
  • 2023-03-11 [720b781] use switch to Linux runner to upload to server
  • 2023-03-04 [465ef20] implement github ci
  • 2023-01-03 [3ddff2b] force flushing in terminal and matlab
  • 2023-01-02 [849d09a] bump up version number
  • 2023-01-02 [423047b] fix travis error after adding cuda related targets
  • 2022-11-02 [9809be0] add cudamex and cudaoct makefile targets
  • 2022-10-25 [f455d1e] reduce photon leakage for edge-immc, still leaks, need more work

MMC 1.9.6 (v2022.10, Moon Cake), Qianqian Fang <q.fang at neu.edu>

  • 2022-10-08 [4c8bdae] mmc v2022.10
  • 2022-10-01 [77411c4] using nvidia native atomicadd for float add 40% speedup
  • 2022-09-21 [e661011] add double-buffer to solve fangq/mcx#41
  • ...
Read more

MMC v2020 (Moon Cake beta)

09 Sep 23:46
382557f
Compare
Choose a tag to compare

Download

What's New

MMC v2020 (1.9) is a major update to MMC. For the first time, MMC adds GPU
support via the newly implemented OpenCL version. The released package
simultaneously supports CPU-only multi-threading with SSE4 (standard MMC) and
OpenCL-based MMC on a wide variety of CPU/GPU devices across vendors. Using
up-to-date GPU hardware, the MMC simulation speed was increased by 100x to 400x
compared to single-threaded SSE4-based MMC simulation. The detailed description
of the GPU accelerated MMC can be found in the below paper [Fang2019].

One can choose between the SSE4 and OpenCL based simulation modes using the -G
or cfg.gpuid input options. A device ID of -1 enables SSE4 CPU based MMC, and a
number 1 or above chooses the supported OpenCL device (using mmc -L or
mmclab('gpuinfo') to list).

A detailed (long) list of updates can be found in the ChangeLog.txt or the
Github commit history: https://github.com/fangq/mmc/commits/master

To highlight a few most important updates:

  • Supported GPU using OpenCL in both binary and mmclab
  • Supported using multiple NVIDIA GPUs
  • GPU MMC (or MMCL) had been rigirously validated across a range of benchmarks
  • Supported photon sharing for multiple patterns
  • Charactrized the speed improvement of MMCL simulations over standard MMC
  • Created mmc and octave-mmclab official Fedora packages and disseminate via Fedora repositories
  • Implemented xorshift128+ RNG unit and used as default for both CPU/GPU MMC
  • Fixed a list of bugs in both SSE4/OpenCL MMC
  • Created 6 standard benchmarks (B1:cube60, B1D:d-cube60, B2:sphshells,
    B2D:d-sphshells, B3:colin27, B4:skin-vessel) for comparisons

Please file bug reports to https://github.com/fangq/mmc/issues

Moreover, over the past year, we have also published a high-quality brain
3D mesh generation pipeline and rigirously compared mmc with voxel based
MCX, and showed improvement in modeling accuracy. The detail of the mesh
generation software (Brain2mesh: http://mcx.space/brian2mesh) and the
benchmarks can be found in the below [Brain2Mesh2020] paper.

Lastly, we also implemented the photon sharing algorithm to simultaneously
simulate multiple pattern sources. This paper is detailed in the recently
published OL paper, see [Yan2020].

Reference:

[Fang2019] Qianqian Fang and Shijie Yan, “GPU-accelerated mesh-based
Monte Carlo photon transport simulations,” J. of Biomedical Optics, 24(11),
115002 (2019) URL: http://dx.doi.org/10.1117/1.JBO.24.11.115002

[Brain2Mesh2020] Anh Phong Tran† , Shijie Yan† , Qianqian Fang*, (2020) "Improving
model-based fNIRS analysis using mesh-based anatomical and light-transport models,"
Neurophotonics, 7(1), 015008, URL: https://doi.org/10.1117/1.NPh.7.1.015008

[Yan2020] Yan S, Yao R, Intes X, and Fang Q*, "Accelerating Monte Carlo modeling
of structured-light-based diffuse optical imaging via 'photon sharing'," Opt. Lett. 45, 2842-2845 (2020)
URL: https://www.biorxiv.org/content/10.1101/2020.02.16.951590v2

Full Change Log

MMC 1.9 (v2020, Moon Cake - beta), Qianqian Fang <q.fang at neu.edu>

  • 2020-08-09*[874c5bf] support multiple NVIDIA GPUs, patch from fangq/mcxcl@c1e3ebb
  • 2020-07-25 [41d4aef] Update README.md
  • 2020-07-24 [f9dd4dd] add markdown version of README, add travis badge
  • 2020-07-24 [3cbccd1] fix oct for travis linux
  • 2020-07-24 [b532d76] use MSYS for travis windows
  • 2020-07-22*[214fc47] add travis ci script
  • 2020-06-28 [a3c98c5] use the new gitfilter format
  • 2020-04-18 [867b2b9] test gpu pointer to avoid error
  • 2020-04-11 [46e1fbe] wrapping opencl api with return value tests, fix a few small memory leaks
  • 2020-04-08 [cb30b31] fix beam focusing issue reported by Luka Rogelj
  • 2020-04-06 [123dc0d] remove mingw64 compilation warnings
  • 2020-04-06 [e65c3a3] define function pointer to update progressbar
  • 2020-04-06 [f3c3b56] fix error when cfg.gpuid is a string
  • 2020-04-05 [e9e04a7] update function name in help info
  • 2020-04-05 [1abe23d] make creating octave mex file work again
  • 2020-04-04 [c6c5d55] prevent ioctl linking with mingw64 gcc compiler
  • 2020-04-03 [c986ab7] use more portable output handle
  • 2020-04-03 [66b8f4f] flush octave compilation command
  • 2020-04-03 [5d3df36] replace %I64u by %zu
  • 2020-04-03 [c20ed88] compile on windows
  • 2020-04-03 [50fbcc7] remove all matlab mex compilation warnings on windows, add installation instruction
  • 2020-04-02 [c8884a4] remove all warnings raised by gcc 8 and 9.3
  • 2020-04-02 [d7becea] add mingw64 mexopts xml file for matlab r2014 or newer
  • 2020-04-02 [085420c] need to select both c and c++ compiler
  • 2020-04-02 [9e8918d] add CL header for better portability
  • 2020-04-02 [8f90d58] add missing header files from mingw64 compiler on windows
  • 2020-04-02 [72f6ded] test buildmmc script on linux
  • 2020-04-02*[387e3ba] add matlab script to build mmclab mex file
  • 2020-03-31 [c01b6ae] test on msys2 gcc compiler
  • 2020-03-30 [92b19e3] switch windows building environment to msys2
  • 2020-03-29 [48e397f] make byte alignment compatible with MS VS
  • 2020-03-25 [a2948be] force updating elemprop if elem contains more than 4 columns
  • 2020-03-25 [18fb6fc] prevent mmclab from crashing if the source is not enclosed
  • 2020-03-25 [d6de33e] use cfg.steps to specify voxel size in DMMC mode, instead of unitinmm
  • 2020-03-25 [7e04588] allow users to set cfg.maxdetphoton in mmclab
  • 2020-03-03*[99312c3] fix wrong ray-tracer problem when compile with omp, finish fedora packaging
  • 2020-02-26 [d4608f4] fix gpuid=-1 does not work bug in mmclab
  • 2020-02-25 [acef8db] update onecube filtering command, fix #51
  • 2020-02-20 [36c4f5f] remove mexsse and octsse, add mexomp and octomp targets
  • 2020-02-20 [8527d82] allow make omp to work again, but currently results are not correct, do not use
  • 2020-02-05 [dbea367] fix all warnings for gcc 7
  • 2020-02-05 [a5ac4a9] update cjson to the latest git version
  • 2019-11-19 [75a4844] use detp.prop and detp.unitinmm if present, similar to mcx #83
  • 2019-11-19 [a89457a] fix time/weight scaling, see mcx bug #83
  • 2019-11-05 [a10b743] revert the previous change, use a more robust condition to find ppath
  • 2019-11-05 [3c3ab43] remove the unneeded condition when converting ppath in loadmch.m, fix mcx bug #82
  • 2019-10-29 [4d7d94f] partially update documentation
  • 2019-10-29 [a9c4732] rename mmcl executable to mmc
  • 2019-10-29*[0c3f19f] Merge branch 'mmcl' to 'master', now mmcl is official!
  • 2019-10-27 [206bedf] fix skinvessel example
  • 2019-10-18 [a3823b8] add the missing -d 1 flag
  • 2019-10-14 [4940761] fix end-of-line markers
  • 2019-10-14 [2139721] fix example file permissions and end-of-line markers
  • 2019-10-12 [373459a] remove commented lines
  • 2019-10-12 [e321340] add initial element search for wide-field sources; update mmcl examples
  • 2019-10-11 [8e6f561] bug fixing; update mmclab examples
  • 2019-10-11*[1a8e81f] bug fixing; add support of surface diffuse reflectance for mmcl
  • 2019-10-07 [3262326] resolve some compiling issues,e.g. missing argument in functions; missing fields in data struct
  • 2019-10-07 [261fe69] manually resolve merge conflicts
  • 2019-09-09 [9a2ad2a] download colin27 mesh from github instead
  • 2019-08-31 [7e8ad7a] fix .mch file header due to wrong history data structure
  • 2019-08-24 [4dc1228] fix memory crash due to wrong output data length for plucker, havel & badouel ray-tracer when basisorder is 0
  • 2019-08-20 [ca4d675] allow photons that exit into 0-label elements to be detected
  • 2019-08-20 [26477c7] add gpu parameter specifier to make RGA happy
  • 2019-07-26*[9e800e0] fix output detected photon information for SSE-MMCL and GPU-MMCL
  • 2019-07-25 [a3b7714] fix maximum time gate rounding bug
  • 2019-07-24 [eb109e0] return detected photon info in mmclabcl,print progress bar
  • 2019-07-18 [7995941] compile on new mac
  • 2019-07-18 [9f50a7f] hacky workaround to avoid convert_float error for -1 returned by vectorized isgreater on Intel GPU
  • 2019-07-16 [ef0ef3f] use mmclab('gpuinfo') to query gpu devices
  • 2019-07-16 [a45f5a1] undo the revert
  • 2019-07-16 [cfe52b4] fix rng bug on mac
  • 2019-07-16 [72ce3a2] fix RNG error for SSE MMC on windows - long is 32bit on windows
  • 2019-07-16 [c242112] long is only 32bit on windows, fix incorrect mmc results
  • 2019-07-15 [c8c1cb9] Merge branch 'master' into mmcx
  • 2019-07-12 [04565c2] compile for mac with static gcc and gomp
  • 2019-07-12 [afcfda1] mac opencl does not accept more than 8 constant inputs
  • 2019-07-12 [57880f1] allow to compile on windows
  • 2019-07-12 [1e5455d] changes to compile on mac
  • 2019-07-12 [3621fc9] make mmcl compile on mac
  • 2019-07-12 [167ec74] output oct file with correct name
  • 2019-07-12 [95f65bf] disable dref demo as mmcl has not fully merged with master
  • 2019-07-08 [9e622d5] fix index issue for branchless ray-tracer 0-basisorder
  • 2019-07-05 [23f1159] merge with master
  • 2019-07-04 [a78760b] fix normalization indexing bug
  • 2019-07-03 [522e21b] add matlab scripts to create plots for the paper, paper ready to submit
  • 2019-07-02 [7779235] change line color
  • 2019-07-02 [9fc9d0a] revert the mua change made yesterday for dmmc, thanks to Shijie
  • 2019-07-01 [5f58a5f] update benchmark 4, correct alignment in benchmark 1
  • 2019-07-01 [d3ebb41] change prefix in mmclab printing
  • 2019-07-01 [a36c408] update run benchmark script
  • 2019-07-01 [e1e567f] update mmcl bench mmclab script
  • 2019-07-01 [f5aeac9] add benchmark scripts for mmcl
  • 2019-07-01 [c1ec5f1] group 1/mua to normalization
  • 2019-06-30 [5a29aa0] fix double summation and oldidx bug in method=elem
    ...
Read more

MMC v1.7.9 - Alpha release of MMCL for packaging

03 Mar 17:55
Compare
Choose a tag to compare
fix wrong ray-tracer problem when compile with omp, finish fedora pac…

MMC 1.0 Final (v2018 - Sachima)

26 Aug 16:10
Compare
Choose a tag to compare

Release Notes for Mesh-based Monte Carlo 1.0 Final (v2018)

code name: Sachima, released on August 20, 2018

Click this link to download MMC/MMCLAB v2018

Acknowledgement: This software release is made possible with the funding support from the NIH/NIGMS under grant R01-GM114365.

Opening Remarks

After over 8 years continuous development, it is our great pleasure to announce that MMC 1.0 (v2018) has finally arrived! This release represents an important milestone for the MCX/MMC project, and signifies that MMC has grown from a unique research idea to become a mature, robust, full-featured, and general purpose Monte Carlo simulation platform that empowers thousands of biophotonics researchers around the globe to explore, to teach and to create. This also marks the start of a wonderful new journey where many exciting new ideas, methods, features await ahead.

As of today, our combined registered MCX and MMC user number (with unique emails) has exceeded 1,500, with people coming from every corner of the world. The total download number in the past 7 years has exceeded 22,500 from our Sourceforge site alone. There are over 780 academic publications cited our works, and more than 1,200 questions/replies were received in our mailing lists, subscribed by over 250 active users. We are proud of these achievements and feel deeply honored to contribute, even in a small way, to many ongoing exciting new research, and are committed to continue dedicating our efforts in maintaining and improving our software. We will continue working with every one of you, addressing your concerns and new feature requests, bringing the latest and fastest software to you with complete transparency and openness.

Today, we celebrate MMC 1.0, we thank all the hard-works from the developers' team, particularly those PhD students who had made MMC a fast and better software - particularly Ruoyang Yao, Shijie Yan, and Anh Phong Tran, as well as the close collaboration with Dr. Xavier Intes from RPI. We also thank all the valuable feedback received from our users, your bug reports and constructive discussions are crucial for us to improve our software. Last, but not the least, we thank NIH/NIGMS for funding this endeavor. It is not possible for us to get where we are today without this support.

Today, we also kickoff the new development cycle for MMC 2.0! We will complete our works to port MMC to the GPU, finalize our dual-grid MMC (DMMC) algorithm, and in the meantime, focusing on usability and broader dissemination.

Introduction

Mesh-based Monte Carlo, or MMC, is a Monte Carlo light transport simulator designed for high accuracy for modeling tissues or domains with complex and smooth boundaries. Unlikely other existing MC software designed for layered (such as MCML) or voxel-based media (tMCimg, MCxyz and MCX), MMC can use a tetrahedral mesh to represent a complex domain, making it computationally and memory efficient.

MMC supports multi-threading based parallel computing. You can obtain a nearly linear speed-up when using more CPU cores in your simulation. Starting from version 0.8, MMC also supports the Single-Instruction Multiple-Data (SIMD) parallelism on modern CPUs, allowing MMC to take further advantage in parallel computing.

MMCLAB is the MATLAB mex version of the MMC software. It can be directly called inside MATLAB. This makes it easy to use with streamlined pre-processing (mesh generation using the Iso2Mesh toolbox) and post processing (visualization and data analysis).

About this release

MMC/MMCLAB 1.0 contains a [MMC/ChangeLog list of important new features as well as bug fixes].

The most important featured added/mature in this release is the "photon replay" approach for conveniently build Jacobian matrices for solving inverse problems. While this method was initially implemented a few years ago, over the past year, we were able to systematically validate and improve this algorithm and applied it for solving real-world tomography problems. Our paper, first authored by Ruoyang Yao, on this method is recently accepted by Biomed. Optics Express, and is expected to be published online soon. A preview of the accepted manuscript can be found at

https://groups.google.com/forum/?hl=en#!topic/mmc-users/3ZDxrhhD3DQ

Also, a single-replay to create Jacobians for all detection-patterns is implemented by Ruoyang Yao. This is particularly valuable for wide-field illumination/detection imaging systems.

Moreover, an important new variation of MMC, called dual-grid MMC or DMMC, was implemented and systematically tested over the past year. In this method, we combined the ideas of both mesh-based and voxel-based MC algorithms, by using a coarsely tessellated mesh for ray-tracing and a coincident voxelated grid for storing the output fluence. The decoupling between the forward mesh and the storage grid not only result in 2x or more speed acceleration, but also simultaneously results in higher output accuracy. Our paper, first-authored by Shijie Yan, is currently under review.

What's new compared to previous release

The v2018 release was improved upon the previous version, v2017.7 by fixing a list of bugs. They are:

# new features

  1. !!key!! implemented dual-grid MMC or DMMC (paper in review)
  2. !!key!! systematically validated and accelerated photon replay (paper in press)
  3. !!key!! simultaneous replay for all pattern-based detectors
  4. !!key!! output accumulated photon weight as time-resolved 2D images
  5. !!key!! add detailed http://mcx.space/doc/mmc/html/ doxygen documentation
  6. !!key!! force matlab to use multi-threading with mmc
  7. !!key!! make mesh elem and facenb flexible to support non-tetrahedron elements
  8. fix a crash in branchless_badouel_raytet ray-tracer: bary.x of -Inf value
  9. fix atomic condition for havel element basis

# other improvement

  1. make mmclab compatible with older version of MATLAB
  2. fix mmclab for octave crash due to an octave bug #48678
  3. fix normalization, validation of dmmc
  4. for windows MMCLAB packages, we included the necessary DLLs in the package

Pre-compiled MMC binaries are provided for Windows, Linux and Mac OS. In all cases, a binary compiled with SSE4-accelerated ray-tracing algorithms is provided for each platform.

The best simulation speed can be typically achieved by using

 mmc -M S -C 0 ....

One can recompile all binaries using an Intel C++ Compiler. It can generate binaries up to 25% faster than the equivalent binaries compiled with GCC.

The detailed change logs can be found in the ChangeLog and Git commit history pages.

System requirements

Although MMC/MMCLAB can be executed independently once all input data (including mesh data) are provided, most pre- and post-processing scripts in both packages require the installation of Iso2Mesh Toolbox - a MATLAB based 3D mesh generator. Please browse http://iso2mesh.sf.net for download and installation information.

The default ray-tracer in the released binaries require your computer to support SSE4 instructions. This can be determined by using the following command on Linux/MacOS

 grep 'sse4' /proc/cpuinfo 

or using a freeware "CPU-Z" on windows. If you attempt to run the SSE4 on an unsupported computer, you will get an error when executing the binary. In that case, you should recompile MMC using "make omp" command.

Known issues

  • One must use savemmcmesh.m to generate all mesh input files for MMC; otherwise, the \

element orientation is not guaranteed.

  • Currently, this code only supports element-based optical properties; nodal-based optical properties (for continuously varying media) will be added in a future release`

  • The maximum photon number per MMC session is 2^32-1=4,294,967,295, if you need to run a large number of photons, we suggest you splitting the job into \ smaller jobs with each one running a smaller chunk of photons (for example 1E8). \ Each job should initialized with a different seed (-E).

Reference

MMC 2016.1 Release (v1.0-beta-1, Cotton Candy)

05 Jan 18:24
Compare
Choose a tag to compare

Release Notes for Mesh-based Monte Carlo 1.0-beta (2016.1)

code name: Cotton Candy, released on Jan. 05, 2016


Acknowledgement: This software release is made possible with the funding support from NIH/NIGMS under the grant number R01-GM114365. It is also a result of a collaboration with Dr. Xavier Intes's group at Rensselaer Polytechnic Institute (RPI), particularly the contributions from Ruoyang Yao.

Publication: Yao R, Intes X, Fang Q, "Generalized mesh-based Monte Carlo for wide-field illumination and detection via mesh retessellation," Biomed. Optics Express, 7(1), 171-184 (2016)

Introduction

Mesh-based Monte Carlo, or MMC, is a Monte Carlo simulation package
designed for simulating photon transport in 3D heterogeneous media.
MMC can use a volumetric mesh to represent a complex domain, making
it computationally and memory efficient.

MMC supports multi-threading based parallel computing. You can obtain
a nearly linear speed-up when using more CPU cores in your simulation.
Starting from version 0.8, MMC also supports the Single-Instruction
Multiple-Data (SIMD) parallelism on modern CPUs, allowing MMC to take
further advantage in parallel computing.

Starting from this release, a generalized MMC algorithm that can
efficiently model complex wide-field sources and detectors is included
in the software. Over 10 different commonly used source forms are
supported, similarly to our previously released wide-field MCX software.

This is the first release through our new time-based release strategy.
We plan to announce 4 releases each year - one release per 3 months.

The download link to this release can be accessed from here.

About this release

MMC 1.0-beta is a stable preview to the upcoming milestone, version 1.0,
of MMC. It contains significantly improved capability to model complex
widefield sources and detectors, as well as a number of fixes to several
high priority bugs. Thanks to the contributions from Ruoyang Yao from
Dr. Xavier Intes's Lab at RPI, the complex widefield source forms
previously supported in MCX have now been successfully ported
to Mesh-based MC simulations through an efficient mesh-retessellation
algorithm. This collaborative work is reported in
our paper appearing on Biomed. Optics Express today [2]

https://www.osapublishing.org/boe/abstract.cfm?uri=boe-7-1-171

What's new compared to 0.9.5

The new release of 1.0-beta was significantly improved upon the
previous version, v0.9.5, published nearly two years ago.
The key changes include:

new features

  • !!key!! a dozen of wide-field complex source forms are supported, including SFDI sources,
    Gaussian beams, cone beams, planar beam, arbitrary 2D pattern, and more.
  • !!key!! all area beams support convergence and divergence via focal length setting
    (the optional 4th element of srcdir vector).
  • !!key!! complex-shaped wide-field detectors are now supported in MMC; the detector
    can have arbitrary aperture shapes and can be outside of the target mesh.
  • !!key!! MMCLAB for 64bit windows is now supported.
  • change drand48_r random number generator to erand48 for portability in Windows and Mac;

bug fixes

  • !!critical!! fix direction vector normalization bug when reflection is enabled;
  • !!critical!! fix crashes caused by round-off near the end of the simulation time-window;
  • !!critical!! fix floating-point round-off limit bug that influences the scattering calculations;
  • !!critical!! fix crashed caused by inaccurate ray-tracing in Havel SSE4 ray-tracer
  • fix matlab crashes when running mmclab with -nojvm in matlab 2013a or newer
  • avoid crash when writing to a string literal in processing the input file
  • fix bug to calculate scattering length at launch time

other improvement

  • add Colin27 brain atlas example
  • add mmclab script to systematically compare mcx and mmc
  • add examples and mmclab demo script for SFDI and planar sources
  • allow to specify endianness when loading mch files
  • report wide-field overhead in all ray-tracers
  • report absorption/total energy ratio
  • allow reseeding from the input file
  • add git filters to automatically update file versions when checking out
  • automatically download Digimouse and Colin27 atlas mesh when missing;
  • more tests for the replay feature
  • synchronize cJSON to the latest version

Pre-compiled MMC binaries are provided for Windows, Linux and Mac OS.
In all cases, a binary compiled with SSE4-accelerated ray-tracing
algorithms is provided for each platform.

The best simulation speed can be typically achieved by using

  mmc -M S -C 0 ....

One can recompile all binaries using an Intel C++ Compiler. It can generate
binaries up to 25% faster than the equivalent binaries compiled with GCC.

The detailed change logs can be found in the [[MMC/ChangeLog|ChangeLog]]
and Git commit history pages.

System requirements

The default "SSE4" binaries require your computer to support SSE4
instructions. This can be determined by using the following command
on Linux/MacOS

  grep 'sse4' /proc/cpuinfo 

or using a freeware "CPU-Z" on windows.
If you attempt to run the SSE4 on an unsupported computer, you will get an
error when executing the binary. In that case, you should switch to the
"multicore" binaries.

Known issues

  • One must use savemmcmesh.m to generate all mesh input files for MMC; otherwise, the
    element orientation is not guaranteed.
  • Currently, this code only supports element-based optical properties;
    nodal-based optical properties (for continuously varying media) will be
    added in a future release
  • The maximum photon number per MMC session is 2^32-1=4,294,967,295, if you
    need to run a large number of photons, we suggest you splitting the job into
    smaller jobs with each one running a smaller chunk of photons (for example 1E8).
    Each job should initialized with a different seed (-E).

Reference

MMC 2016.1 Release (v1.0-beta, Cotton Candy)

01 Jan 16:36
Compare
Choose a tag to compare

Release Notes for Mesh-based Monte Carlo 1.0-beta (2016.1)

code name: Cotton Candy, released on Jan. 01, 2016


Acknowledgement: This software release is made possible with the funding support from NIH/NIGMS under the grant number R01-GM114365. It is also a result of a collaboration with Dr. Xavier Intes's group at Rensselaer Polytechnic Institute (RPI), particularly the contributions from Ruoyang Yao.

Publication: Yao R, Intes X, Fang Q, "Generalized mesh-based Monte Carlo for wide-field illumination and detection via mesh retessellation," Biomed. Optics Express, 7(1), 171-184 (2016)

Introduction

Mesh-based Monte Carlo, or MMC, is a Monte Carlo simulation package
designed for simulating photon transport in 3D heterogeneous media.
MMC can use a volumetric mesh to represent a complex domain, making
it computationally and memory efficient.

MMC supports multi-threading based parallel computing. You can obtain
a nearly linear speed-up when using more CPU cores in your simulation.
Starting from version 0.8, MMC also supports the Single-Instruction
Multiple-Data (SIMD) parallelism on modern CPUs, allowing MMC to take
further advantage in parallel computing.

Starting from this release, a generalized MMC algorithm that can
efficiently model complex wide-field sources and detectors is included
in the software. Over 10 different commonly used source forms are
supported, similarly to our previously released wide-field MCX software.

This is the first release through our new time-based release strategy.
We plan to announce 4 releases each year - one release per 3 months.

The download link to this release can be accessed from here.

About this release

MMC 1.0-beta is a stable preview to the upcoming milestone, version 1.0,
of MMC. It contains significantly improved capability to model complex
widefield sources and detectors, as well as a number of fixes to several
high priority bugs. Thanks to the contributions from Ruoyang Yao from
Dr. Xavier Intes's Lab at RPI, the complex widefield source forms
previously supported in MCX have now been successfully ported
to Mesh-based MC simulations through an efficient mesh-retessellation
algorithm. This collaborative work is reported in
our paper appearing on Biomed. Optics Express today [2]

https://www.osapublishing.org/boe/abstract.cfm?uri=boe-7-1-171

What's new compared to 0.9.5

The new release of 1.0-beta was significantly improved upon the
previous version, v0.9.5, published nearly two years ago.
The key changes include:

new features

  • !!key!! a dozen of wide-field complex source forms are supported, including SFDI sources,
    Gaussian beams, cone beams, planar beam, arbitrary 2D pattern, and more.
  • !!key!! all area beams support convergence and divergence via focal length setting
    (the optional 4th element of srcdir vector).
  • !!key!! complex-shaped wide-field detectors are now supported in MMC; the detector
    can have arbitrary aperture shapes and can be outside of the target mesh.
  • change drand48_r random number generator to erand48 for portability in Windows and Mac;

bug fixes

  • !!critical!! fix direction vector normalization bug when reflection is enabled;
  • !!critical!! fix crashes caused by round-off near the end of the simulation time-window;
  • !!critical!! fix floating-point round-off limit bug that influences the scattering calculations;
  • !!critical!! fix crashed caused by inaccurate ray-tracing in Havel SSE4 ray-tracer
  • fix matlab crashes when running mmclab with -nojvm in matlab 2013a or newer
  • avoid crash when writing to a string literal in processing the input file
  • fix bug to calculate scattering length at launch time

other improvement

  • add Colin27 brain atlas example
  • add mmclab script to systematically compare mcx and mmc
  • add examples and mmclab demo script for SFDI and planar sources
  • allow to specify endianness when loading mch files
  • report wide-field overhead in all ray-tracers
  • report absorption/total energy ratio
  • allow reseeding from the input file
  • add git filters to automatically update file versions when checking out
  • automatically download Digimouse and Colin27 atlas mesh when missing;
  • more tests for the replay feature
  • synchronize cJSON to the latest version

Pre-compiled MMC binaries are provided for Windows, Linux and Mac OS.
In all cases, a binary compiled with SSE4-accelerated ray-tracing
algorithms is provided for each platform.

The best simulation speed can be typically achieved by using

  mmc -M S -C 0 ....

One can recompile all binaries using an Intel C++ Compiler. It can generate
binaries up to 25% faster than the equivalent binaries compiled with GCC.

The detailed change logs can be found in the [[MMC/ChangeLog|ChangeLog]]
and Git commit history pages.

System requirements

The default "SSE4" binaries require your computer to support SSE4
instructions. This can be determined by using the following command
on Linux/MacOS

  grep 'sse4' /proc/cpuinfo 

or using a freeware "CPU-Z" on windows.
If you attempt to run the SSE4 on an unsupported computer, you will get an
error when executing the binary. In that case, you should switch to the
"multicore" binaries.

Known issues

  • One must use savemmcmesh.m to generate all mesh input files for MMC; otherwise, the
    element orientation is not guaranteed.
  • Currently, this code only supports element-based optical properties;
    nodal-based optical properties (for continuously varying media) will be
    added in a future release
  • The maximum photon number per MMC session is 2^32-1=4,294,967,295, if you
    need to run a large number of photons, we suggest you splitting the job into
    smaller jobs with each one running a smaller chunk of photons (for example 1E8).
    Each job should initialized with a different seed (-E).

Reference