Starting from version 0.9, MMC accepts a JSON-formatted input file in addition to the conventional tMCimg-like input format. JSON (JavaScript Object Notation) is a portable, human-readable and "fat-free" text format to represent complex and hierarchical data. Using the JSON format makes a input file self-explanatory, extensible and easy-to-interface with other applications (like MATLAB).
A sample JSON input file can be found under the examples/onecube folder. This file, onecube.json, is also shown below:
{
"Mesh": {
"MeshID": "onecube",
"InitElem": 3
},
"Session": {
"Photons": 100,
"Seed": 17182818,
"ID": "onecube"
},
"Forward": {
"T0": 0.0e+00,
"T1": 5.0e-09,
"Dt": 5.0e-10
},
"Optode": {
"Source": {
"Pos": [2.0, 8.0, 0.0],
"Dir": [0.0, 0.0, 1.0]
},
"Detector": [
{
"Pos": [2.0, 6.0, 0.0],
"R": 1.0
},
{
"Pos": [2.0, 4.0, 0.0],
"R": 1.0
},
{
"Pos": [2.0, 2.0, 0.0],
"R": 1.0
}
]
}
}
A JSON input file requires 4 root objects, namely "Mesh", "Session", "Forward" and "Optode". Each object is a data structure providing information as indicated by its name. Each object can contain various sub-fields. The orders of the fields in the same level are flexible. For each field, you can always find the equivalent fields in the *.inp input files. For example, The "MeshID" field under the "Mesh" object is the same as Line#6 in onecube.inp; the "InitElem" under "Mesh" is the same as Line#7; the "Forward.T0" is the same as the first number in Line#5, etc.
An MMC JSON input file must be a valid JSON text file. You can validate your input file by running a JSON validator, for example http://jsonlint.com/ You should always use "..." to quote a "name" and separate parallel items by ",".
MMC accepts an alternative form of JSON input, but using it is not recommended. In the alternative format, you can use
"rootobj_name.field_name": valueto represent any specific parameter in the root level. For example
{
"Mesh.MeshID": "onecube",
"Session.ID": "onecube",
...
}
You can even mix this format with the standard format. If any of the input parameters has both formats in a single input file, the standard-formatted values have higher priority.
To invoke the JSON-formatted input file in your simulations, you can use the "-f" command line option with MMC, just like using a .inp file. For example:
../../src/bin/mmc -n 20 -f onecube.json -s onecubejson -D M
The input file must have a ".json" suffix in order for MMC to recognize it. If the input information is set in both the command-line, and the input file, the command line values take priority (this rule also applies to .inp input files). For example, when using "-n 20", the value set in "Session"/"Photons" is overwritten to 20; when using "-s onecubejson", the "Session"/"ID" value is modified. If your JSON input file is invalid, MMC will quit and point out where it expects you to double check.