Change Log

== MMC 2.2.0 (v2024.2, Nougat), Qianqian Fang <q.fang at neu.edu> ==

 2024-03-14 [58aa18c] [ci] fix macos-14 test under make omp
 2024-03-14 [739dbbe] [bug] only enable Plucker ray tracer if gpuid=-1
 2024-03-13 [a751e79] [bug] still report total energy when issave2pt is 0
 2024-03-13 [2166cc9] [ci] make mexopts file compatible with arm64 mac
 2024-03-13 [ef6891c] [ci] use omp only on macos-14 as M1 does not have SSE
 2024-03-13 [da6d04e] [feat] store pattern pixel index for each photon in photon sharing
 2024-03-10 [237713b] [test] further testing of buit-in immc benchmarks
 2024-03-09 [c4a7c91] [format] complete reformat all matlab scripts with miss_hit
 2024-03-09 [674044f] [feat] add edgeimmc, nodeimmc, faceimmc benchmarks, update mmc2json
 2024-03-09 [e86cd34] [feat] upgrade ubj library to the latest version
 2024-03-09 [0dce38e] [bug] remove errors and warnings on Intel and AMD GPUs
 2024-03-09 [efc4101] [feat] test zipped mesh in json, migrate from float3 to FLOAT3, add benchmark
 2024-03-09 [cc3f362] [feat] accept MeshROI for immc in the JSON input
 2024-03-08 [dd9b4d5] [bug] fix CPU host fails to save trajectory, fix GPU traj duplicate use omp atomic instead of critical in savedebugdata
 2024-03-08 [b0f9cfe] [ci] fix ci error on macos
 2024-03-08 [242ce05] [feat] use self-contained json input including mesh data
 2024-03-07 [10edc27] [bug] fix incorrect condition to postprocess traj data
 2024-03-07 [2d4e355] [doc] update documentation for v2024.2
 2024-03-07 [ebefe98] [feat] return trajectories data if -D M or cfg.debuglevel contains M
 2024-03-05 [10ea5ea] [bug] search 1st and 2nd nearest neighbors for edge-immc to reduce artifact

== 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 https://github.com/pandas-dev/pandas/issues/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
 2022-05-30 [c3b15b2] print detected photon number in matlab
 2022-05-21 [2ea4414] disable astyle close-templates to allow gcc 4.9 to compile
 2022-05-20 [d4eb92d] complete reformat of source code using astyle with 'make pretty'
 2022-03-09 [f1df4bd] fix make omp linker error
 2022-02-24 [658943b] move bc flags to opencl only
 2021-10-24 [869c58e] fix #73, port mirror BC and absorption bc on exterior surface to GPU
 2021-08-22 [2ed3213] update r->inroi only when doinit is false
 2021-08-22 [33eb98a] manually patching PR #68 by Yaoshen because immc was broken
 2021-06-18 [a31a85b] force output data format for both GPU and CPU
 2021-06-07 [f15d137] explicitly casting variable to allow JIT compiler to work on certain drivers
 2021-03-26 [929775e] update vessel demo script by Yaoshen to use the latest interface
 2021-03-26 [c6ae4d7] fix vessel example photon leaking bug
 2021-03-14 [c0537cc] support immc in the command line mode
 2021-03-14 [c92be73] slightly optimize doinit flow
 2021-03-14 [0b58920] remove init_face_inout, perform initial roi inclusion test for all roi types
 2021-03-14 [c710105] search for all first-level neighbor faceroi, no need to manually set
 2021-03-14 [fd3de3a] wrap implicit mmc to a reusable function,cut register use by 75%
 2021-03-14 [d6b9966] fix f-immc stray voxel bug, remove fast_exp9, in DMMC, Lmove can be big
 2021-03-13 [688f697] get rid of r->u and r->E to reduce register use
 2021-03-13 [b667b82] rename isedgeroi to roitype
 2021-03-13 [3c36f32] fix incorrect asborption fraction in immc demo
 2021-03-13 [d675737] remove insideroi variable, because it should not change the current prop
 2021-03-12 [49df21b] updating inroi and isedgeroi
 2021-03-12 [c1795ed] more simplification to the overly complex immc new codes, not yet working
 2021-03-12 [3087117] much simplified e-immc testing
 2021-03-10 [e4fc100] trying to simplify the immc flow, not working yet
 2021-03-09 [3057a0e] update the help info on faceroi face orders
 2021-03-09 [2e18153] fixing f-immc demo bug, thanks Yaoshen
 2021-03-05 [b14347c] immc example runs, but fimmc result is incorrect
 2021-03-05 [9ac29ec] fix two bugs, now e-immc and n-immc demo works fine
 2021-03-04 [087df42] revamping immc code
 2021-03-03 [0be4a0f] make demo_immc_vesel a function to run in matlab2010
 2021-03-03 [1e93a4f] fix n-immc bug, make demo_immc_basic.m example work
 2021-03-03 [948bb9f] update documentation for v2021.2 release
 2021-03-02 [735c9ee] fix typo in output variable name
 2021-03-02 [2218ee4] replace 3 separate steps by a single s2m call
 2021-03-02 [46183d8] remove unnecessarily duplicated functions, use iso2mesh functions

== MMC 1.9.5 (v2021.2, Moon Cake - RC1), Qianqian Fang <q.fang at neu.edu> ==

 2021-02-26 [f2f7221] add MATLAB_MEX_FILE in the makefile for octave mex
 2021-02-25 [baa74bb] add c++builder project file
 2021-02-24 [0b83b57] fix mmclab error when running multiple GPU simulations, thanks to Dr.Konrad Schumacher
 2021-02-24 [9168232] add photon sharing support in branchless-badoul ray-tracer
 2021-02-24 [9ba1362] fix errors and warnings on mac os
 2021-02-24 [54db37c] update nightly build script
 2021-02-08 [1e09902] fix the energy leak for n-immc
 2021-01-17 [db86323] Remove immc.mat
 2021-01-17 [831e792] Working vessel demo
 2021-01-13 [df1251a] allow SSE mmclab to output photon seeds
 2021-01-10 [2e510b1] update tend to ensure that tend - tstart is multiple of tstep
 2021-01-07 [3265f58] Update immc demo
 2021-01-06 [9bc35fc] Add n-immc demo and data
 2020-12-28*[05c5293] Add e-immc demo
 2020-12-21 [47bab21] Running iMMC code
 2020-12-17 [21b5b3f] Completion of ray-tracer
 2020-12-14*[f07710c] Add main portion in ray-tracer
 2020-12-14 [f90420e] Add compute-distance functions for iMMC
 2020-12-07 [834851c] Add cfg for iMMC
 2020-10-25 [1e915a6] replaydet=-1 is only supported in mcxlab, not in mmclab, remove
 2020-10-08 [2bc0237] enable photon detection inside elements next to zero-labeled element
 2020-10-07 [62e972b] fix the judgement condition of photon detection: distance^2 < radius -> distance^2 < radius^2
 2020-09-17 [8a651d8] initialize shared memory immediately after launching to correctly save history of a new photon

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

 2020-08-29 [e278aa0] remove warning
 2020-08-30 [cad8eec] allow building zmat on windows
 2020-08-29 [9bf4fab] update deploy script
 2020-08-29 [1164051] use mingw32-make on windows for travis-ci
 2020-08-29 [9e5e5dc] make code c99 compatible
 2020-08-27 [fc47461] patch cuda to add saving seeds and replay
 2020-08-27 [e071842] fix one memory error via valgrind
 2020-08-27 [1ef475a] debugged and partially fixed replay
 2020-08-25 [554fea8] fix comparison typo
 2020-08-25 [1b48e15] fix mmclab errors
 2020-08-25 [6d0b769] add save photon seeds and replay support
 2020-08-24 [93583a5] massive update to documentation, prepare for 1.9 release
 2020-08-15 [646b41b] remove warnings due to cl target version
 2020-08-12 [d34cf3c] enable fully constant expansion at run time via macros
 2020-08-09*[255727e] add zmat, ubj and jnifti support
 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
 2019-06-30*[4d9013f] mmclabcl is working
 2019-06-29 [acba8db] save nii for non-grid ray-tracers
 2019-06-29 [fe9c83d] add b2 run_mmc script
 2019-06-29 [727e89d] change b2 mesh
 2019-06-28 [e537021] further update benchmark script
 2019-06-28*[5b7e840] benchmark script to run on different host
 2019-06-28 [3fb9a9c] fix param priority from command line
 2019-06-28 [5325e53] fix cl build error
 2019-06-28 [4fd89e3] make dual-mode mmc again, remove unneeded registers
 2019-06-28 [ad13d2a] revert code back to 03/28 version
 2019-06-28 [fba4b95] update benchmark script
 2019-06-27 [420c0d4] b3 test script
 2019-06-27 [d2f193f] update script
 2019-06-27 [8b7e3ff] save output to bin
 2019-06-27 [827b30d] add mmcl benchmark master script
 2019-06-27 [d87e999] reduce colin27 photon
 2019-06-27 [7f1e3ee] add spherical_shell demo
 2019-06-27 [b971de3] add DMMC paper figure 1 mmclab demo script
 2019-06-27 [f1876ba] add dmmc example mesh file
 2019-06-27 [422a9da] add skinvessel mmc and dmmc example
 2019-06-27 [02f208a] add mmc2json script to convert mmclab cfg to json
 2019-06-27 [f0ff69b] fix the ray-tracer after dref related changes in the master branch
 2019-06-26 [454de4f] update code variant name
 2019-06-26*[d81fd9a] dualmode mmc - support both SSE4+cpu (-G -1) and CPU, rename to mmcl
 2019-06-26 [4c65a21] merge with the latest master branch
 2019-06-26 [90d0d20] fix outputtype=fluence and wp output, fix #36
 2019-06-26 [45d3711] make mmc functions compatible with mcx output
 2019-05-24 [0494f23] 2nd attempt to fix the reflection when mirror bc is used
 2019-05-24 [a7ac195] allow internal reflections when mirror bc is set
 2019-05-16*[24e2bb0] use isreflect=2 for total absorption on outer surf, 3 for perfect mirror
 2019-04-30 [a2dda44] allow point sources to use initial elements
 2019-04-30 [cbdcb1e] avoid initial elem search in cone/arcsine source launch
 2019-04-24 [caa0a65] fix output format in both dmmc and mmc mode
 2019-04-24 [cb93d6c] remove mac compilation error
 2019-04-22 [565ad68] fix bugs and finally get diffuse reflectance output to work
 2019-04-21 [5b79f08] save diffuse reflectance on surface
 2019-04-21 [44d1865] copy initial test from plucker to other 3 ray tracers
 2019-04-21 [ed8dbdd] saving dref on surface, support saveref option, feature incomplete
 2019-04-17 [f3623ff] minor update to function parameter type
 2019-04-16 [492aa3e] restore the capability to save mch files
 2019-04-02 [6407e74] update loadmch to support user defined output
 2019-03-28 [5312319] use DO_NOT_SAVE flag to remove memory operations
 2019-03-26 [22fe07f] remove unused variables
 2019-03-26 [eeccd6d] fix a bug found by Shijie
 2019-03-25 [fb51a41] fix the missing energy loss for the first step in new voxel
 2019-03-24 [78622ef] merge with master from github
 2019-03-24 [2508642] first step to make mmc cl kernel cuda compatible
 2019-03-23 [0e0f96f] fix bug in writing compression
 2019-03-23 [752753d] use atomic call to return raytet counts
 2019-03-23 [3676918] disable buffer fanning in the kernel
 2019-03-23 [3f52cb2] only write to memory when moving out of a voxel
 2019-03-23 [370e91d] use macro to dynamically select dmmc vs elem-mmc
 2019-03-21 [0b647e7] fix export data length
 2019-03-21 [109910e] use a better random number to distribute the writing location
 2019-03-21 [1b9d645] use --buffer to set copy of memory to reduce racing
 2019-03-21 [2f2aec3] matching the branchless badouel algorithm in mmc, thanks to Shijie
 2019-03-21 [0477ade] avoid mac compiler error
 2019-03-21 [9f5eaf9] fix a critical bug for dmmc ray-tracer
 2019-03-21 [c6c0721] disable volume saving if --save2pt is set to 0
 2019-03-21 [bc67cc8] fix incorrect results on AMD devices
 2019-03-21 [4ec96ed] update printed program name
 2019-03-20 [5dd80a1] no need to convert char lookup in string
 2019-03-20 [cfaf43b] merge with mmc v2019.3 master branch
 2019-03-20 [4efb7b7] fix OpenCL-precision-induced ray-tracing accuracy issue in Branchless-badouel ray-tracer
 2019-03-05 [ae6de41] update change log and README for v2019.3 release
 2019-03-05 [10f72ea] support mc2 and nii output for DMMC
 2019-03-04 [f403303] disable linking with iomp5 to avoid crash in older matlab
 2019-03-01 [996f765] add USC 19.5 atlas example, Fig9a in TranYan2019(submitted)
 2019-02-11 [8acc8d7] really reduce register count, fix DMMC output crash
 2019-02-10*[61ef773] fix dmmc, 5x speed increase from normal mmc
 2019-02-10 [2417416] fix infinite loop, thanks Shijie!
 2019-02-10 [5ef4499] return total ray-tet intersection counts
 2019-02-09 [7fab7dd] moving node,elem,type,facenb,normal,srcelem to constant mem
 2019-02-09 [ec0e183] optimized based on vtune profiling on intel cpu
 2019-02-09 [84e87e4] add xorshift128+ RNG, seed each thread by host RNG
 2019-02-06 [fe76503] convert output weight to double
 2019-01-31*[5c571cf] now can run on cuda and cpu
 2019-01-30 [29ae3e1] need debugging, but very close to bug free for the ray-tracing
 2019-01-27 [75fbcde] mmcx now can compile, no error
 2019-01-18 [53fda23] fix mmclab crash due to racing in multi-thread, similar to mcx issue #60
 2019-01-17 [2f61bfe] a very rough draft of the cl kernel, converted ray-tracer from SIMD to float3
 2019-01-14*[43aae8f] sync internal mmcx branch with master, mmcx branch was started in 2018

== MMC 1.4.8-2 (v2019.4, Pork Rinds - beta, update 2), Qianqian Fang <q.fang at neu.edu> ==

 2019-04-24 [8270b96] fix #35 - incorect mch file header in photon-sharing implementation
 2019-04-22*[6736244] saving dref on surface, support saveref option, add help info and demo
 2019-04-16 [492aa3e] restore the capability to save mch files
 2019-03-23 [87babe7] dmmc save data only when moving out of a voxel
 2019-03-23 [44bd1a5] adding mesh file for dmmc validation example
 2019-03-23 [a48cf39] fix the extra char in the shortopt list

== MMC 1.4.8-1 (v2019.3-1, Pork Rinds - beta, update 1), Qianqian Fang <q.fang at neu.edu> ==

 2019-03-21*[e57fad3] fix branchless-badouel ray-tracer and dmmc bug, need to make a new release
 2019-03-20 [283c3c0] use 64bit integer for total photon number
 2019-03-20 [a5680bd] add the missing prop file for dmmc in examples/validation
 2019-03-20 [704ca4a] fix empty string test

== MMC 1.4.8 (v2019.3, Pork Rinds - beta), Qianqian Fang <q.fang at neu.edu> ==

 2019-03-05 [10f72ea] support mc2 and nii output for DMMC
 2019-03-04 [dbd3617] fix wrong usage of free() on pointer returned by mxGetPr
 2019-03-04 [f403303] disable linking with iomp5 to avoid crash in older matlab
 2019-03-03 [389d852] add color to command line output, cmd options high priority
 2019-03-01*[996f765] add USC 19.5 atlas example, Fig9a in TranYan2019(submitted)
 2019-02-09 [84e87e4] add xorshift128+ RNG, seed each thread by host RNG
 2019-01-18 [53fda23] fix mmclab crash due to racing in multi-thread, similar to mcx issue #60
 2018-11-21*[6c67651] add mcxyz skinvessel benchmark
 2018-10-29*[d0d0cbe] add photon sharing example for mmclab
 2018-10-21 [6b42e92] add example (validated) for photon sharing
 2018-09-07 [2b28159] fix a bug for doubling thread number every call to mmc, thanks to Shijie
 2018-09-01*[0eaf31b] add nightly build script for mmc deployment
 2018-08-27 [cab6ca6] support clang
 2018-08-26*[71df635] add initial webassembly support for web-based mmc
 2018-08-19 [feab0bd] link mmclab on windows

== MMC 1.0-Final (v2018, Sachima), Qianqian Fang <q.fang at neu.edu> ==

2018-08-14 [25b323c] fixed discrepancy between DMMC and MCX along the boundary
2018-08-13*[2cfd54a] force matlab to use multi-threading with mmc
2018-07-16 [45c5b72] fix branchless_badouel_raytet: bary.x of -Inf value
2018-05-13 [f5f0379] process mcx generated detp output without w0
2018-04-24 [8241b0d] correct typo in array index
2018-01-29 [e4c33fb] use mcxpreview in mcxlab to preview the domain
2018-01-27 [2ee97d7] restructure folders, update documents
2018-01-14*[53eb374] make mesh elem and facenb flexible to support complex elements in the future
2018-01-13*[ecd9b80] add detailed doxygen documentation
2017-12-08 [50d7770] atomic condition fixed for havel element basis
2017-11-24 [62714c5] fix normalization, validation of dmmc
2017-11-15 [96c4eda] convert energy deposit to fluence
2017-11-13*[8e2f5ea] add dualmesh mode in mmclab
2017-11-13 [3a25295] use unitinmm to set voxel length,fix normalization,fix weight deposit
2017-11-09 [f9e9b93] define dedicated cfg->e0, allocate weight for grid output
2017-11-09 [c528baf] initial update to support hybrid mesh-grid MC
2017-10-30 [a63c19a] fix bug in getdetimage
2017-10-05 [0b5e2a8] enable wp for plucker mode, remove save_scatter_events (a function no longer needed)
2017-10-05 [af83f00] minor modification for mmclab, when there's not issaveexit field in cfg
2017-09-14 [e1de1ff] modified replay examples for testing wp and wl performance
2017-09-14*[a75528b] merge wide_det branch to support wide-field detector array output
2017-09-14 [07b33f3] make mmclab compatible with older version of MATLAB
2017-09-14 [70a308d] validated wide-field replay under "wL" mode, added an example
2017-09-08*[db8ebf9] replay for detection pattern (binary), need to validate and add example
2017-09-08 [ad76c08] suppress message of "specifying pattern file" when using input file
2017-09-08 [9d71d01] manipulate replay photon weight for pattern illumination (sync with master)
2017-09-07 [1061ab6] fix the wide_det issue for mmclab (caused by wrong maxmedia value), polish demo_wide_det
2017-09-05 [373bbb1] do not split subfields when no photon is detected
2017-09-01 [ebf0bca] add wide_det example for mmclab, still has a memory issue
2017-09-01 [a574da7] change some int to size_t for Matlab2017a
2017-09-01 [20ceaf4] modified mmclab.m for outputing detimages, mmclab issue not fixed
2017-08-31 [ffe7abe] fix size_t to int conversion issue, enable wide_det for mmclab, to be tested
2017-08-31 [1e86fdb] put calculation and saving of detimage into two functions, issues with mmclab
2017-08-31 [b0c620d] manipulate replay photon weight for pattern illumination
2017-08-16*[3a2e634] Output accumulated photon weight as time-resolved 2D images with an example attached
2017-07-15*[567d9ee] fix mmclab for octave crash due to an octave bug #48678


== MMC 1.0-RC3 (v2017.7, Haw Flakes-Update 1) RC release, Qianqian Fang <q.fang at neu.edu> ==

2017-07-03 [dd50986] fix rootpath handling, move MeshID and InitElem to Domain section
2017-07-02 [d315be8] fix basisorder verbose flag,fix terminal width initial value
2017-06-20 [0fb129d] support rotation angle in expanded src domain
2017-06-20 [04485b3] add --debugphoton flag to print debug info for selected photon ID
2017-06-06 [c076f68] add flag --atomic to select use or not use atomic operations
2017-06-06 [a797230] support older version of MATLAB
2017-05-30 [74be9ef] support mcx detpt and old mmc output format
2017-05-27 [10c8a27] avoid static TLS error in matlab by linking with libiomp5 instead of libgomp
2017-04-01 [588bd00] update replay testing statement
2017-03-31 [20b2906] add musmap for nodal based Jacobian (validated for homo media)
2017-03-30 [d646b4f] avoid launching 0-energy photons, improved upon c4a87df

== MMC 1.0-RC2 (v2017.3, Haw Flakes) RC release, Qianqian Fang <q.fang at neu.edu> ==

2017-03-30 [26fd658] fix a bug when replaying photons from multiple detectors
2017-03-30 [c4a87df] avoid launching photons with 0 weight (for pattern with 0 values)
2017-03-30 [c2e0e3c] function for calculating tpsf curve with detp data
2017-03-04 [1eaed5f] flush printing message in mmclab
2017-01-15 [b9b98c2] fix a bug that prevent external detector from detecting photons
2016-11-05 [0d988d8] including mexopts file for compiling mmclab on windows
2016-08-29 [f8101f6] resize mesh->med before use for widefield det
2016-08-29 [1f6451f] make mmclab support widefield detectors
2016-08-01 [d935226] implement time-dependent Jacobian under "replay" mode
2016-07-24 [d11dde5] add MCML like MC for validation and replay
2016-07-03 [b767e87] modular mmc main function, better interface with other programs
2016-06-08 [2458363] autobuild support for windows

== MMC 1.0-RC1 (v2016.5, Hot Cocoa) RC release, Qianqian Fang <q.fang at neu.edu> ==
2016-06-01 output partial path, scattering count, exit position/dir as subfield in 2nd output of mmclab
2016-05-31 remove double correction of length unit in mmc and mmclab
2016-05-25 elegantly terminate mmclab when exception is shown, print error unit and line numbers
2016-05-09 add widefield gaussian source support
2016-04-15 use mu_t for replay calculations for scattering Jacobian
2016-04-10 save scattering events number for each media type
2016-04-10 fix the bug in havel ray tracer, enable saving weighted scattering events number
2016-03-10 fix bug in weight calculations when the output is jacobian
2016-03-10 fix bug in basisorder for Havel raytracer

== MMC 1.0-beta (v2016.1, Cotton Candy) beta release, Qianqian Fang <q.fang at neu.edu> ==

2016/01/01 release 1.0-beta, also label as v2016.1 for time-based release strategy
2015/12/31 fix crash caused by round-off errors in Havel SSE4 ray-tracer
2015/12/25 replace drand48_r by erand48 for POSIX compliance
2015/12/24 make sse target by default for mmc and mmclab
2015/12/23 debugged replay demo script in mmclab, plot the sensitivity profile
2015/12/20 update cJSON library to the latest version
2015/12/16 add SFDI simulation examples and demo script 
2015/11/10 use Kahan sum for total weight accummulation to avoid incorrect normalization
2015/09/13 support converting and diverging beams in all area-sources
2015/08/06 add script to systematically compare MMC and MCX
2015/08/05 automatic retessellation when a wide-field source is specified
2015/08/05 add wide-field source support in MMCLAB
2015/07/18 fix vector normalization bug when reflection is enabled
2015/07/17 fix floating-point round-off bug by using a proper epsilon value
2015/04/24 fix crash due to the round-off of photon timer near tend
2015/04/21 report wide-field overhead in all ray-tracers
2015/04/21 add wide-field detection support
2015/04/11 allow to specify endianness when loading mch files
2015/02/06 initial implementation of mesh-retessellation based MMC for wide-field simulations
2014/06/05 add Colin27 brain atlas example

== MMC 0.9.5 (Wasabi Peas) stable release, Qianqian Fang <q.fang at neu.edu> ==

2013/12/22 WebMMC skeleton uploaded, allowing MMC to run inside a web browser
2013/12/20 output static or dynamic libraries (libmmc.a/libmmc.so)
2013/10/22 fix isotropic source bug
2013/06/26 (experimental) output absorption Jacobian pattern in the replay mode
2013/03/03 saving photon exit pos and direction with the "-x" flag
2013/03/02 photon replay with a pre-recorded seed for perturbation MC
2012/08/17 add MMCLAB examples
2012/08/16 initial ray-tracing in MMCLAB if source is not inside the mesh
2012/08/03 allow detector individual radius
2012/07/19 (experimental) add MMCLAB - a matlab interface
2012/02/02 support binary output format with -F flag
2012/01/25 support isotropic source, reading source types from JSON input


== MMC 0.9.0 (Banana Pudding) stable release, Qianqian Fang <q.fang at neu.edu> ==

2011/12/19 final release of 0.9.0
2011/12/19 fix a critical bug in the Havel ray-tracer, all SSE4 binaries are effected
2011/12/15 make nphoton unsigned int, maximum photon number is 2^32-1
2011/11/02 print unit and line number during error handling
2011/11/01 accept JSON-formatted input files
2011/10/14 Stefan Carp contributed a patch and validation package for DCS simulations
2011/10/12 fix a bug in writing mch file under Windows
2011/08/24 fix an SFMT bug when initializing RNG seeds in multiple parallel threads


== MMC 0.8.0 (Snow Cone) stable release, Qianqian Fang <q.fang at neu.edu> ==

2011/06/17 final release of 0.8.0
2011/04/23 sync private dev branch to trunk, publish v0.8.pre in the SVN
2011/04/19 the second paper regarding MMC published on Biomed. Opt. Exp. 2(5):1258–1264
2011/03/17 fix a critical bug in sphdiffusionslab.m
2011/02/25 use atomic for weight accumulation and double precision weight array
2011/02/20 can output fluence and energy deposit with the -O option
2011/02/18 supported recording photon partial path lengths
2011/02/17 supported specular reflection, match results from other simulators
2011/02/11 basic support of source types, set seed from command line
2011/01/12 select ray-tracing method from command line
2011/01/11 added sse math support, gain about 10% speed-up
2011/01/11 simplified Plucker method with initial barycentric coordinates
2011/01/09 used initial barycentric coordinates for Havel/Plucker methods
2011/01/05 added branchless Badouel with SSE, improves speed by 13%
2010/12/21 added support for Badouel's method
2010/12/20 merged with mmc 0.4.0 public svn
2010/11/17 Havel's SSE4 ray-tracing algorithm worked
2010/11/14 branch mmc source code for SSE implementation


== MMC 0.4.0 (Pecan Pie) stable release, Qianqian Fang <q.fang at neu.edu> ==

2010/12/14 tested on Windows using MinGW 20101030 with gcc 4.5 and LibGW32C, add documentation
2010/12/13 fixed negative time difference by promoting time counter from int to long
2010/12/13 fixed diminishing absorption fraction by using a double accumulator
2010/12/12 added initial support for SFMT RNG, speed and accuracy need further optimization
2010/12/11 included RNG C units in the main code to enable static inlining
2010/12/04 initial doxygen support for automatic documentation
2010/12/04 support llvm-gcc, icc and tcc via "make target CC=compiler"
2010/12/03 speed up gcc-compiled binary by 2x with fast exponential
2010/11/30 fix normalization using the correct time unit
2010/08/29 initial Windows support using MinGW and Libgw32c


== MMC 0.2 (Cheese Cake) stable release, Qianqian Fang <q.fang at neu.edu> ==

2010/08/29 first public release of MMC - v0.2
2010/08/28 update examples to use iso2mesh 1.0 and MCX 0.4.9 options, remove unused input file format
2010/07/25 release Collins adult brain atlas FEM mesh version 1
2010/07/25 add help text for all matlab/octave functions, release Sphere-Diffusion toolbox v1
2010/07/16 add README files for all examples
2010/07/15 paper published http://www.opticsinfobase.org/boe/abstract.cfm?uri=boe-1-1-165
2010/07/15 update license to GPL v3, mmc is officially open-source
2010/07/04 paper accepeted, update website at http://mcx.sf.net/mmc/
2010/06/23 used meaningful strings as debug flags, added "P" flag for progress bar
2010/06/23 made it possible to model transparent medium
2010/06/21 Russian Roulette to terminate photon
2010/06/20 added boundary reflection at internal or external surfaces
2010/06/07 paper submitted, wait ... wait ... wait ...
2010/06/04 finished paper, added timing unit from mcxcl project, added MMCDEBUG macro
2010/06/03 generated complex mesh from a brain atlas, run simulation and make figures
2010/05/30 announced sphere-diffusion toolbox, tested for Windows, compatible with Octave
2010/05/27 fixed a regression (once fixed in rev161), results are good, regenerated figures
2010/05/26 added scripts for analytical solutions for sphere in infinite-slab geometry
2010/05/25 added scripts for analytical solutions for sphere in semi-infinite medium
2010/05/23 used simple fluence addition approach by default, add MINSTEP_ADDITION macro
2010/05/22 reduced roundoff-error by explicit counting energy loss
2010/05/20 added README document
2010/05/20 added functions to compute the analytical solution of a sphere inside infinite medium
2010/05/19 used elem-volume, update tests, twig parameters
2010/05/19 used MCX approach for fluence accumulation, debugged normalization, tested with benchmarks
2010/05/13 updated POSIX MT RNG to the 48bit version (drand48_r)
2010/05/10 added POSIX MT and logistic RNGs, use MCX interface, improved OpenMP efficiency
2010/05/09 debugged meshtest case, flexible mesh generation using improved iso2mesh toolbox
2010/05/07 isolated photon simulation commands into a function
2010/05/07 created sortmesh.m in iso2mesh to increase memory consistency and reduce cache miss
2010/05/06 added meshreorient.m in iso2mesh to ensure the correct tetrahedron node orientation
2010/05/05 added validation and mesh test cases
2010/05/04 added matlab utilities for mesh generation and result processing
2010/05/01 fluence normalization and SSE4 support
2010/04/22 added support for time-resolved imaging, use node voronoi-volume to normalize
2010/04/21 major code cleaning up, bug fixes for scattering handling
2010/04/18 update weight-recording scheme, only save the absorbed energy, need revisit
2010/01/01 used gprof to optimize,add debuglevel,add weight middle pt at pin and pout
2009/12/30 added examples: sphere-box, port mcx_utils from MCX (mcx.sf.net)
2009/12/30 supported scattering based on mus, and accumulate packet weight
2009/12/29 initial upload to SVN
2009/12/28 completed mesh classes, tested with mouse-head-CT dataset
2009/08/07 ray-tracing of randomly scattered particles and added Makefile
2009/07/31 initial version supporting Plucker-coordinate-based ray-tracing
