Monte Carlo eXtreme, or MCX, is an open-source Monte Carlo (MC) photon simulator for modeling light transport in 3D turbid media. The MCX/MMC Suite also contains mesh-based Monte Carlo (MMC) - an anatomically accurate 3D Monte Carlo (MC) simulator that can use a tetrahedral mesh to represent extremely complex tissue structures.
Both MCX and MMC support graphics processing units (GPUs) and are capable of simulating thousands of photons simultaneously, making them among the fastest and most physically-accurate photon modeling tools. Since their initial releases, the MCX Suite has become one of the most widely disseminated biophotonics modeling platforms, well-known for its high accuracy, high speed and versatility, as attested to by its over 27,000 downloads and over 1,100 citations from a large (2,400 registered users) world-wide user community. This rapidly expanding user community presents a diverse set of demands and a wide range of applications in the form of continuously evolving complex imaging domains and modalities. We are dedicated to serving this active and growing research community, and draw strong motivation from our extensive interactions with users, aiming to further expand the breadth, complexity, and efficiency of our simulation platform.
The development of MCX/MMC simulation platform is funded by the NIH/NIGMS under grant R01-GM114365.
"Iso2Mesh" is a MATLAB/Octave-based mesh generation toolbox, designed for easy creation of high quality surface and tetrahedral meshes from 3D volumetric images. It contains over 200 mesh processing scripts/programs, working either independently or interacting with external free meshing utilities. Iso2Mesh toolbox can directly convert a 3D image stack, including binary, segmented or gray-scale images such as MRI or CT scans, into quality volumetric meshes. This makes it particularly suitable for multi-modality medical imaging data analysis and multi-physics modeling. Above all, iso2mesh is open-source. You can download it for free. You are also allowed to extend the toolbox for your own research and share with other users. Iso2Mesh is cross-platform and is compatible with both MATLAB and GNU Octave (a free MATLAB clone).
Between 2009 and 2020, Iso2Mesh has been cited over 620 times, with over 4,500 registered users worldwide, and an accumulative download over 40,000.
The details of this toolbox can be found in the following papers (citing the first paper is highly encouraged):
Currently, Iso2Mesh and its submodules are broadly distributed among popular open-source MATLAB toolboxes, especially among major neuroimaging tools, including
JSONLab is a free and open-source JSON/UBJSON/MessagePack encoder and decoder written in the native MATLAB language. It can be used to convert a MATLAB data structure (array, struct, cell, struct array, cell array, and objects) into JSON/UBJSON/MessagePack formatted strings and files, or to parse a JSON/UBJSON/MessagePack file into MATLAB data structure. JSONLab supports both MATLAB and GNU Octave (a free MATLAB clone).
We envision that both JSON and its binary counterparts will play important rules not only for light-weight data storage, but also for storage and interchange of scientific data. It has both the flexibility and generality as in other general-purpose file specifications, such as HDF5 but has significantly reduced complexity and excellent readability.
Towards this goal, we have developed the JData Specification (http://github.com/fangq/jdata) to standardize serializations of complex scientific data structures, such as N-D arrays, sparse/complex-valued arrays, trees, maps, tables and graphs using JSON/binary JSON constructs. The text and binary formatted JData files are syntactically compatible with JSON/UBJSON formats, and can be readily parsed using existing JSON and UBJSON parsers. JSONLab is not just a parser and writer of JSON/UBJSON data files, but one that systematically converts complex scientific data structures into human-readable and universally supported JSON forms using the standardized JData data annotations.
JSONLab was named the Pick of the Week and Popular File 2018, ranking #6 in downloads among 35,500+ community-contributed toolboxes . Since its initial release, it has attracted over 47,000 downloads from MATLAB’s File Exchange and 14,000 from SourceForge.
|Source code||https://github.com/fangq/jsonlab||»Debian|| |
|User forum||https://groups.google.com/g/iso2mesh-users||»Ubuntu|| |
|Documentation||http://iso2mesh.sourceforge.net/cgi-bin/index.cgi?jsonlab/Doc||»Arch Linux|| |
OpenJData is a set of open data-standards based on JSON/binary JSON formats. They are self-documenting, highly extensible, versatile, lightweight and easy-to-implement.
|Source code||https://github.com/OpenJData||JNIfTI spec||https://github.com/OpenJData/jnifti|
|User forum||https://github.com/fangq/jdata/issues||JSNIRF spec||https://github.com/OpenJData/jsnirf|
|Documentation||http://openjdata.org/wiki||Brain Mesh Library(in jnifti)||https://github.com/OpenJData/BrainMeshLibrary|
|MATLAB support|| http://openjdata.org/jsonlab|
|Python support|| https://pypi.org/project/jdata/|
|Python BJData support|| https://pypi.org/project/bjdata/|
The Brain2Mesh toolbox provides a streamlined matlab function to convert a segmented brain volumes and surfaces into a high-quality multi-layered tetrahedral brain/full head mesh. Typical inputs include segmentation outputs from SPM, FreeSurfer, FSL etc. This tool does not handle the segmentation of MRI scans, but examples of how commonly encountered segmented datasets can be used to create meshes can be found in the package named brain2mesh-demos.
The details of this toolbox can be found in the following paper:
|Brain mesh library||https://github.com/OpenJData/BrainMeshLibrary|
EasyH5 is a fully automated, fast, compact and portable MATLAB object to HDF5
exporter/importer. It contains two easy-to-use functions -
saveh5.m can handle almost all MATLAB data types, including
structs, struct arrays, cells, cell arrays, real and complex arrays, strings,
containers.Map objects. All other data classes (such as a table, digraph,
etc) can also be stored/loaded seemlessly using an undocumented data serialization
interface (MATLAB only).
EasyH5 stores complex numerical arrays using a special compound data type in an
HDF5 dataset. The real-part of the data are stored as
Real and the imaginary
part is stored as the
Imag component. The
loadh5.m automatically converts
such data structure to a complex array. Starting from v0.8, EasyH5 also supports
saving and loading sparse arrays using a compound dataset with 2 or 3
Real, and, in the case of a sparse
Imag. The sparse array dimension is stored as an attribute
SparseArraySize, attached with the dataset. Using the
to save compressed arrays is supported in v0.8 and later.
ZMat provides both an easy-to-use C-based data compression library - libzmat as well a portable mex function to enable zlib/gzip/lzma/lzip/lz4/lz4hc based data compression/decompression and base64 encoding/decoding support in MATLAB and GNU Octave. It is fast and compact, can process a large array within a fraction of a second.
Among the 6 supported compression methods, lz4 is the fastest for compression/decompression; lzma is the slowest but has the highest compression ratio; zlib/gzip have the best balance between speed and compression time.
The ZMat MATLAB function accepts 3 types of inputs: char-based strings, numerical arrays
or vectors, or logical arrays/vectors. Any other input format will
result in an error unless you typecast the input into
format. A multi-dimensional numerical array is accepeted, and the
original input's type/dimension info is stored in the 2nd output
"info". If one calls
zmat with both the encoded data (in byte vector)
"info" structure, zmat will first decode the binary data
and then restore the original input's type and size.
This is a fully functional NIfTI-1/2 reader/writer that supports both
MATLAB and GNU Octave, and is capable of reading/writing both non-compressed
and compressed NIfTI files (
.nii, .nii.gz) as well as two-part Analyze7.5/NIfTI
More importantly, this is a toolbox that converts NIfTI data to its JSON-based
replacement, JNIfTI (
.jnii for text-based and
.bnii for binary-based), defined
by the JNIfTI specification (http://github.com/fangq/jnifti). JNIfTI is a
much more flexible, human-readable and extensible file format compared to the
more rigid and opaque NIfTI format, making the data much easier to manipulate
The JNIfTI toolbox includes a stand-alone NIfTI-1/2 parser that works on both
MATLAB and GNU Octave without needing additional components. To just reading and
writing the un-compressed NIfTI and Analyze7.5 files (.nii, .hdr/.img), one
only needs to run
addpath('/path/to/jnifti'). For MATLAB, JNIfTI toolbox
memmapfile-based disk-reading, making it very fast. For Octave,
memmapfile is currently not implemented, so, a full reading is required.
The JNIfTI toolbox is also capable of reading/writing gzip-compressed NIfTI and
Analyze7.5 files (
.nii.gz, .hdr.gz, .img.gz). This feature is supported in MATLAB
directly without needing another toolbox (MATLAB must be in the JVM-enabled mode).
To process gzip-compressed NIfTI/Analyze files in Octave and MATLAB with
one need to install the open-source JSONLab and ZMat toolboxes, both supporting
MATLAB and Octave.
To save NIfTI-1/2 data as JNIfTI files, one needs to install JSONLab. The JNIfTI
data format supports internal compression (as oppose to external compression such
*.gz files). To create or read compressed JNIfTI files in Octave, one must
install the ZMat toolbox, as listed above.