38 #ifndef _MMC_UTILITIES_H 39 #define _MMC_UTILITIES_H 43 #include "cjson/cJSON.h" 49 #define MAX_FULL_PATH 2048 50 #define MAX_PATH_LENGTH 1024 51 #define MAX_SESSION_LENGTH 64 52 #define MAX_CHECKPOINT 16 53 #define DET_PHOTON_BUF 100000 54 #define SEED_FROM_FILE -999 55 #define MIN(a,b) ((a)<(b)?(a):(b)) 56 #define MMC_ERROR(id,msg) mcx_error(id,msg,__FILE__,__LINE__) 57 #define MMC_INFO -99999 58 #define MAX_DEVICE 256 61 #define S_RED "\x1b[31m" 62 #define S_GREEN "\x1b[32m" 63 #define S_YELLOW "\x1b[33m" 64 #define S_BLUE "\x1b[34m" 65 #define S_MAGENTA "\x1b[35m" 66 #define S_CYAN "\x1b[36m" 67 #define S_BOLD "\x1b[1m" 68 #define S_ITALIC "\x1b[3m" 69 #define S_RESET "\x1b[0m" 83 typedef double OutputType;
85 enum TDebugLevel {dlMove = 1, dlTracing = 2, dlBary = 4, dlWeight = 8, dlDist = 16, dlTracingEnter = 32,
86 dlTracingExit = 64, dlEdge = 128, dlAccum = 256, dlTime = 512, dlReflect = 1024,
87 dlProgress = 2048, dlExit = 4096
90 enum TRTMethod {rtPlucker, rtHavel, rtBadouel, rtBLBadouel, rtBLBadouelGrid};
91 enum TMCMethod {mmMCX, mmMCML};
92 enum TComputeBackend {cbSSE, cbOpenCL, cbCUDA};
94 enum TSrcType {stPencil, stIsotropic, stCone, stGaussian, stPlanar,
95 stPattern, stFourier, stArcSin, stDisk, stFourierX,
96 stFourier2D, stZGaussian, stLine, stSlit
98 enum TOutputType {otFlux, otFluence, otEnergy, otJacobian, otWL, otWP};
99 enum TOutputFormat {ofASCII, ofBin, ofNifti, ofAnalyze, ofMC2, ofTX3, ofJNifti, ofBJNifti};
100 enum TOutputDomain {odMesh, odGrid};
101 enum TDeviceVendor {dvUnknown, dvNVIDIA, dvAMD, dvIntel, dvIntelGPU};
102 enum TMCXParent {mpStandalone, mpMATLAB};
103 enum TBoundary {bcNoReflect, bcReflect, bcAbsorbExterior, bcMirror };
104 enum TRayHitType {htNone, htInOut, htOutIn, htNoHitIn, htNoHitOut};
105 enum TROIType {rtNone, rtEdge, rtNode, rtFace};
107 enum TBJData {JDB_mixed, JDB_nulltype, JDB_noop, JDB_true, JDB_false,
108 JDB_char, JDB_string, JDB_hp, JDB_int8, JDB_uint8, JDB_int16, JDB_int32,
109 JDB_int64, JDB_single, JDB_double, JDB_array, JDB_object, JDB_numtypes,
110 JDB_uint16 = 10, JDB_uint32, JDB_uint64
156 unsigned int savedetflag;
167 size_t globalmem, constmem, sharedmem;
171 size_t autoblock, autothread;
174 enum TDeviceVendor vendor;
261 char deviceid[MAX_DEVICE];
262 float workload[MAX_DEVICE];
268 unsigned int maxdetphoton;
270 unsigned char* exportseed;
271 float* exportdetected;
272 double energytot, energyabs, energyesc;
274 unsigned int runtime;
292 void mcx_savenii(OutputType* dat,
size_t len,
char* name,
int type32bit,
int outputformatid,
mcconfig* cfg);
293 void mcx_error(
const int id,
const char* msg,
const char* file,
const int linenum);
303 void mcx_loadvolume(
char* filename,
mcconfig* cfg,
int isbuf);
304 void mcx_normalize(
float field[],
float scale,
int fieldlen);
305 int mcx_readarg(
int argc,
char* argv[],
int id,
void* output,
const char* type);
321 int mcx_jdataencode(
void* vol,
int ndim, uint* dims,
char* type,
int byte,
int zipid,
void* obj,
int isubj,
mcconfig* cfg);
323 void mcx_savejnii(OutputType* vol,
int ndim, uint* dims,
float* voxelsize,
char* name,
int isfloat,
mcconfig* cfg);
324 void mcx_savebnii(OutputType* vol,
int ndim, uint* dims,
float* voxelsize,
char* name,
int isfloat,
mcconfig* cfg);
330 #define MMC_FPRINTF(fp,...) {if(omp_get_thread_num()==0) mexPrintf(__VA_ARGS__);} 332 #define MMC_FPRINTF(fp,...) mexPrintf(__VA_ARGS__) 335 #define MMC_FPRINTF(fp,...) fprintf(fp,__VA_ARGS__) 338 #if defined(MATLAB_MEX_FILE) || defined(OCTAVE_API_VERSION_NUMBER) || defined (HAVE_OCTAVE) 339 int mexPrintf(
const char* format, ... );
341 int mexPrintf(
const char* format, ... );
344 #define MMCDEBUG(cfg,debugflag,outputstr) {\ 345 if((cfg)->debuglevel & (debugflag)) {\ 346 MMC_FPRINTF outputstr ;\ 347 fflush((cfg)->flog);\ 356 int mmc_throw_exception(
const int id,
const char* msg,
const char* filename,
const int linenum);
This structure defines the problem settings (domain, filenames, session)
Definition: mmc_utils.h:184
void mcx_loadconfig(FILE *in, mcconfig *cfg)
Load user inputs from a .inp input file.
Definition: mmc_utils.c:1529
float tstart
Definition: mmc_utils.h:198
void mcx_progressbar(float percent)
Print a progress bar.
Definition: mmc_utils.c:2245
unsigned char * vol
Definition: mmc_utils.h:223
void mcx_matlab_flush()
Force matlab refresh the command window to print all buffered messages.
Definition: mmclab.cpp:1130
int mcmethod
Definition: mmc_utils.h:245
size_t nphoton
Definition: mmc_utils.h:185
void mcx_validatecfg(mcconfig *cfg)
Validate all input fields, and warn incompatible inputs.
Definition: mmc_utils.c:2472
int medianum
Definition: mmc_utils.h:205
int maxgate
Definition: mmc_utils.h:218
int mcx_jdatadecode(void **vol, int *ndim, uint *dims, int maxdim, char **type, cJSON *obj, mcconfig *cfg)
Decode an ND array from JSON/JData construct and output to a volumetric array.
Definition: mmc_utils.c:2046
int srcnum
Definition: mmc_utils.h:206
float minstep
Definition: mmc_utils.h:217
int mcx_lookupindex(char *key, const char *index)
Look up a single character in a string.
Definition: mmc_utils.c:2401
void mcx_clearcfg(mcconfig *cfg)
Clearing the simulation configuration data structure.
Definition: mmc_utils.c:350
FILE * flog
Definition: mmc_utils.h:250
void mcx_printlog(mcconfig *cfg, char *str)
Print a message to the console or a log file.
Definition: mmc_utils.c:1075
unsigned int savedetflag
Definition: mmc_utils.h:282
medium * prop
Definition: mmc_utils.h:212
uint4 crop1
Definition: mmc_utils.h:204
int detnum
Definition: mmc_utils.h:207
unsigned int nbuffer
Definition: mmc_utils.h:277
int e0
Definition: mmc_utils.h:189
float sradius
Definition: mmc_utils.h:209
char method
Definition: mmc_utils.h:240
void mcx_initcfg(mcconfig *cfg)
Initializing the simulation configuration with default values.
Definition: mmc_utils.c:207
void mcx_printheader(mcconfig *cfg)
Print MCX output header.
Definition: mmc_utils.c:3005
void mcx_savejnii(OutputType *vol, int ndim, uint *dims, float *voxelsize, char *name, int isfloat, mcconfig *cfg)
Save volumetric output (fluence etc) to a JNIfTI/JSON/JData format file.
Definition: mmc_utils.c:707
float * srcpattern
Definition: mmc_utils.h:195
int respin
Definition: mmc_utils.h:155
unsigned int srcnum
Definition: mmc_utils.h:154
float unitinmm
Definition: mmc_utils.h:254
float3 steps
Definition: mmc_utils.h:201
float tstep
Definition: mmc_utils.h:199
unsigned int detectedcount
Definition: mmc_utils.h:273
float minenergy
Definition: mmc_utils.h:247
int isextdet
Definition: mmc_utils.h:249
char issave2pt
Definition: mmc_utils.h:234
float normalizer
Definition: mmc_utils.h:153
void mcx_cleargpuinfo(GPUInfo **gpuinfo)
Reset and clear the GPU information data structure.
Definition: mmc_utils.c:415
unsigned int version
Definition: mmc_utils.h:144
float4 detparam1
Definition: mmc_utils.h:214
#define MAX_SESSION_LENGTH
Definition: mmc_utils.h:51
int srctype
Definition: mmc_utils.h:192
float normalizer
Definition: mmc_utils.h:276
void mcx_error(const int id, const char *msg, const char *file, const int linenum)
Error reporting function.
Definition: mmc_utils.c:1106
unsigned int detected
Definition: mmc_utils.h:149
float4 srcparam1
Definition: mmc_utils.h:193
float roulettesize
Definition: mmc_utils.h:246
uint4 crop0
Definition: mmc_utils.h:203
int nthread
Definition: mmc_utils.h:187
char isgpuinfo
Definition: mmc_utils.h:235
uint3 dim
Definition: mmc_utils.h:202
This structure defines the optical properties for each medium.
Definition: mmc_utils.h:129
float mus
Definition: mmc_utils.h:131
char isreflect
Definition: mmc_utils.h:227
void mcx_convertcol2row(unsigned int **vol, uint3 *dim)
Convert a column-major (MATLAB/FORTRAN) array to a row-major (C/C++) array.
Definition: mmc_utils.c:1970
void mcx_savebnii(OutputType *vol, int ndim, uint *dims, float *voxelsize, char *name, int isfloat, mcconfig *cfg)
Save volumetric output (fluence etc) to a binary JNIfTI/JSON/JData format file.
Definition: mmc_utils.c:543
float n
Definition: mmc_utils.h:133
char ismomentum
Definition: mmc_utils.h:231
void mcx_savejdata(char *filename, mcconfig *cfg)
Save simulation settings to an inp file.
Definition: mmc_utils.c:1814
float4 srcparam2
Definition: mmc_utils.h:194
char isref3
Definition: mmc_utils.h:228
float4 detparam2
Definition: mmc_utils.h:215
int debugphoton
Definition: mmc_utils.h:253
const int out[4][3]
Tetrahedron faces, in counter-clock-wise orders, represented using local node indices.
Definition: mmc_mesh.c:58
char * shapedata
Definition: mmc_utils.h:284
unsigned int detnum
Definition: mmc_utils.h:146
int mcx_loadfromjson(char *jbuf, mcconfig *cfg)
Load a .json input file into memory.
Definition: mmc_utils.c:1206
int mmc_throw_exception(const int id, const char *msg, const char *filename, const int linenum)
Error reporting function in the mex function, equivallent to mcx_error in binary mode.
Definition: mmclab.cpp:1112
char isspecular
Definition: mmc_utils.h:236
Filer header data structure to .mch files to store detected photon data This header has a total of 25...
Definition: mmc_utils.h:142
Definition: mmc_utils.h:161
void mcx_savejdet(float *ppath, void *seeds, uint count, int doappend, mcconfig *cfg)
Save detected photon data to mch format binary file.
Definition: mmc_utils.c:915
void mcx_readconfig(char *fname, mcconfig *cfg)
Read simulation settings from a configuration file (.inp or .json)
Definition: mmc_utils.c:1147
unsigned int savedphoton
Definition: mmc_utils.h:150
void mcx_usage(char *exename, mcconfig *cfg)
Print MCX help information.
Definition: mmc_utils.c:3031
int maxmpthread
Definition: mmc_utils.h:173
void mcx_saveconfig(FILE *in, mcconfig *cfg)
Save simulation settings to an inp file.
Definition: mmc_utils.c:1782
char issaveseed
Definition: mmc_utils.h:237
int respin
Definition: mmc_utils.h:219
int zipid
Definition: mmc_utils.h:281
void mcx_prep(mcconfig *cfg)
Preprocess configuration and set option dependency.
Definition: mmc_utils.c:2536
float3 srcpos
Definition: mmc_utils.h:190
float * replaytime
Definition: mmc_utils.h:259
char isatomic
Definition: mmc_utils.h:239
float tend
Definition: mmc_utils.h:200
float * replayweight
Definition: mmc_utils.h:258
float mua
Definition: mmc_utils.h:130
#define MAX_PATH_LENGTH
Definition: mmc_utils.h:50
void mcx_writeconfig(char *fname, mcconfig *cfg)
Write simulation settings to an inp file.
Definition: mmc_utils.c:1505
unsigned integer triplet {ix,iy,iz}
Definition: vector_types.h:108
history his
Definition: mmc_utils.h:255
char autopilot
Definition: mmc_utils.h:275
unsigned int seedbyte
Definition: mmc_utils.h:152
char isrowmajor
Definition: mmc_utils.h:226
int seed
Definition: mmc_utils.h:188
char issavedet
Definition: mmc_utils.h:230
float4 * detpos
Definition: mmc_utils.h:213
int implicit
Definition: mmc_utils.h:241
char basisorder
Definition: mmc_utils.h:242
unsigned int debuglevel
Definition: mmc_utils.h:252
float unitinmm
Definition: mmc_utils.h:151
int mcx_parsedebugopt(char *debugopt)
Parse the debug flag in the letter format.
Definition: mmc_utils.c:2204
float nout
Definition: mmc_utils.h:248
void mcx_convertcol2row4d(unsigned int **vol, uint4 *dim)
Convert a column-major (MATLAB/FORTRAN) array to a row-major (C/C++) array.
Definition: mmc_utils.c:2000
void mcx_savenii(OutputType *dat, size_t len, char *name, int type32bit, int outputformatid, mcconfig *cfg)
Save volumetric output (fluence etc) to an Nifty format binary file.
Definition: mmc_utils.c:436
float g
Definition: mmc_utils.h:132
unsigned int maxmedia
Definition: mmc_utils.h:145
char outputformat
Definition: mmc_utils.h:244
unsigned int totalphoton
Definition: mmc_utils.h:148
int mcx_readarg(int argc, char *argv[], int id, void *output, const char *type)
Function to read a single parameter value followed by a command line option.
Definition: mmc_utils.c:2307
int mcx_loadjson(cJSON *root, mcconfig *cfg)
Load user inputs from a .json input file.
Definition: mmc_utils.c:1246
float detradius
Definition: mmc_utils.h:208
float4 bary0
Definition: mmc_utils.h:197
int nblocksize
Definition: mmc_utils.h:186
float4 srcdir
Definition: mmc_utils.h:191
int mcx_remap(char *opt)
Test if a long command line option is supported.
Definition: mmc_utils.c:2373
void mcx_parsecmd(int argc, char *argv[], mcconfig *cfg)
Main function to read user command line options.
Definition: mmc_utils.c:2570
Definitions of the basic short vector data structures.
floating-point triplet {x,y,z}
Definition: vector_types.h:73
char issaveref
Definition: mmc_utils.h:238
int printnum
Definition: mmc_utils.h:220
unsigned int colcount
Definition: mmc_utils.h:147
#define MAX_CHECKPOINT
Definition: mmc_utils.h:52
void mcx_version(mcconfig *cfg)
Print MCX software version.
Definition: mmc_utils.c:2995
char isnormalized
Definition: mmc_utils.h:229
int mcx_keylookup(char *key, const char *table[])
Look up a string in a string list and return the index.
Definition: mmc_utils.c:2424
void mcx_savedata(OutputType *dat, size_t len, mcconfig *cfg, int isref)
Save volumetric output (fluence etc) to mc2 format binary file.
Definition: mmc_utils.c:831
char isdumpjson
Definition: mmc_utils.h:280
void * photonseed
Definition: mmc_utils.h:257
void mcx_normalize(float field[], float scale, int fieldlen)
Normalize the solution by multiplying a scaling factor.
Definition: mmc_utils.c:1089
void mcx_fflush(FILE *out)
Flush command line output.
Definition: mmc_utils.c:2228
float * detpattern
Definition: mmc_utils.h:216
char outputtype
Definition: mmc_utils.h:243
int mcx_jdataencode(void *vol, int ndim, uint *dims, char *type, int byte, int zipid, void *obj, int isubj, mcconfig *cfg)
Export an ND volumetric image to JSON/JData encoded construct.
Definition: mmc_utils.c:2129
int replaydet
Definition: mmc_utils.h:221
char issaveexit
Definition: mmc_utils.h:232