Introduction

ValoMC is an open source Monte Carlo code that can simulate the passage of visible and near infrared range photons through a medium. The implementation is based on the photon packet method. The simulation geometry is defined using unstructured (triangular or tetrahedral) mesh. The program solves the photon fluence in the computation domain and the exitance at the domain boundary. It is capable of simulating complex measurement geometries with spatially varying optical parameter distributions and supports several types of light sources as well as intensity modulated light. Furthermore, attention is given to ease of use and fast problem set up with a MATLAB (The MathWorks Inc., Natick, MA) interface. The simulation code is written in C++ and parallelized using OpenMP.

ValoMC is being developed by Aleksi Leino, Aki Pulkkinen, Tuomas Lunttila and Tanja Tarvainen at University of Eastern Finland, Kuopio, Finland.

If you use ValoMC in your work, please reference it with the following citation:

A.A. Leino, A. Pulkkinen and T. Tarvainen, ValoMC: a Monte Carlo software and MATLAB toolbox for simulating light transport in biological tissue, OSA Continuum 2, 957-972 (2019)

Click here to see examples of works where ValoMC has been utilised.


Simulation using the digimouse model. Model data is described in B. Dogdas, D. Stout, A. Chatziioannou, RM Leahy, Digimouse: A 3D Whole Body Mouse Atlas from CT and Cryosection Data, Phys. Med. Bio, 52: 577-587, 2007

Minimal example

The following MATLAB code snippet sets up and runs a Monte Carlo simulation in a rectangular region

xsize =  10;    % width of the region  [mm]
ysize =  10;    % height of the region [mm]
dh = 1;         % discretisation size  [mm]
vmcmesh = createRectangularMesh(xsize, ysize, dh);

% Create a light source
%    - Set a light source from boundary elements 4 to 7
%    - Photons are launched at a random angle so that all angles have a cosinic distribution
vmcboundary.lightsource(4:7) = {'cosinic'};

% Give optical parameters
%    - Constant optical parameters are set troughout the medium.
%    - Alternatively, optical parameters can set be for each element using indexing

vmcmedium.absorption_coefficient = 0.01;     % [1/mm]
vmcmedium.scattering_coefficient = 1.0;      % [1/mm]
vmcmedium.scattering_anisotropy = 0.9;       % anisotropy parameter g [unitless]
vmcmedium.refractive_index = 1.3;            % refractive index [unitless]

% Run the Monte Carlo simulation
solution = ValoMC(vmcmesh, vmcmedium, vmcboundary);

% Plot the solution using MATLAB
patch('Faces',vmcmesh.H,'Vertices',vmcmesh.r,'FaceVertexCData', solution.element_fluence, 'FaceColor', 'flat', 'LineWidth',1.5);

News

6.3.2022: Critical fix

A potentially significant error was spotted in the 3d code and fixed. We are currently investigating the magnitude of the error. It affects all 3d simulations but not the 2d simulations. We regret for any inconvenience caused. You can find the issue and join in the discussion here.

1.4.2019: Publication

Research article that describes ValoMC was published in OSA Continuum.

21.2.2019: Release candidate

Version 1.0rc is now released. A number of fixes have been introduced to the MATLAB interface. From now on, we indent to minimize changes that are backward incompatible to the MATLAB interface.

28.5.2018: Beta-release

We are releasing the beta version for test use and feedback. Please note that the functionality might still change and that the code might not be fully forward compatible with later releases.