31 #ifndef _MCEXTREME_UTILITIES_H 32 #define _MCEXTREME_UTILITIES_H 35 #include <vector_types.h> 36 #include "cjson/cJSON.h" 44 #define EPS FLT_EPSILON 45 #define VERY_BIG (1.f/FLT_EPSILON) 47 #define MAX_FULL_PATH 2048 48 #define MAX_PATH_LENGTH 1024 49 #define MAX_SESSION_LENGTH 256 50 #define MAX_DEVICE 256 52 #define MCX_CUDA_ERROR_LAUNCH_FAILED 719 55 #define MCX_CUDA_ARCH 100 58 #define MCX_ERROR(id,msg) mcx_error(id,msg,__FILE__,__LINE__) 59 #define MIN(a,b) ((a)<(b)?(a):(b)) 60 #define MAX(a,b) ((a)>(b)?(a):(b)) 62 typedef unsigned int uint; 63 typedef unsigned short ushort; 65 enum TOutputType {otFlux, otFluence, otEnergy, otJacobian, otWP, otDCS, otRF, otL}; 66 enum TMCXParent {mpStandalone, mpMATLAB, mpPython}; 67 enum TOutputFormat {ofMC2, ofNifti, ofAnalyze, ofUBJSON, ofTX3, ofJNifti, ofBJNifti}; 68 enum TBoundary {bcUnknown, bcReflect, bcAbsorb, bcMirror, bcCyclic}; 69 enum TBJData {JDB_mixed, JDB_nulltype, JDB_noop, JDB_true, JDB_false, 70 JDB_char, JDB_string, JDB_hp, JDB_int8, JDB_uint8, JDB_int16, JDB_uint16, JDB_int32, JDB_uint32,
71 JDB_int64, JDB_uint64, JDB_half, JDB_single, JDB_double, JDB_array, JDB_object, JDB_numtypes
270 void mcx_savenii(
float* dat,
size_t len,
char* name,
int type32bit,
int outputformatid,
Config* cfg);
271 void mcx_error(
const int id,
const char* msg,
const char* file,
const int linenum);
283 void mcx_normalize(
float field[],
float scale,
int fieldlen,
int option,
int pidx,
int srcnum);
284 void mcx_kahanSum(
float* sum,
float* kahanc,
float input);
285 int mcx_readarg(
int argc,
char* argv[],
int id,
void* output,
const char* type);
308 int mcx_jdataencode(
void* vol,
int ndim,
uint* dims,
char* type,
int byte,
int zipid,
void* obj,
int isubj,
Config* cfg);
310 void mcx_savejnii(
float* vol,
int ndim,
uint* dims,
float* voxelsize,
char* name,
int isfloat,
Config* cfg);
311 void mcx_savebnii(
float* vol,
int ndim,
uint* dims,
float* voxelsize,
char* name,
int isfloat,
Config* cfg);
323 int mcx_throw_exception(
const int id,
const char* msg,
const char* filename,
const int linenum);
328 #if defined(MCX_CONTAINER) && (defined(MATLAB_MEX_FILE) || defined(OCTAVE_API_VERSION_NUMBER)) 330 #define MCX_FPRINTF(fp,...) {if(omp_get_thread_num()==0) mexPrintf(__VA_ARGS__);} 332 #define MCX_FPRINTF(fp,...) mexPrintf(__VA_ARGS__) 335 #define MCX_FPRINTF(fp,...) fprintf(fp,__VA_ARGS__) 338 #if defined(MATLAB_MEX_FILE) || defined(OCTAVE_API_VERSION_NUMBER) 339 int mexPrintf(
const char* format, ... );
341 int mexPrintf(
const char* format, ... );
343 int mexEvalString(
const char* command);
unsigned int savedetflag
Definition: mcx_utils.h:243
char isreflect
Definition: mcx_utils.h:195
char internalsrc
Definition: mcx_utils.h:211
void mcx_normalize(float field[], float scale, int fieldlen, int option, int pidx, int srcnum)
Normalize the solution by multiplying a scaling factor.
Definition: mcx_utils.c:1172
unsigned int polmedianum
Definition: mcx_utils.h:176
float * srcpattern
Definition: mcx_utils.h:236
void mcx_usage(Config *cfg, char *exename)
Print MCX help information.
Definition: mcx_utils.c:5029
float lambda
Definition: mcx_utils.h:222
Official definition of the nifti1 header. Written by Bob Cox, SSCC, NIMH.
char issaveseed
Definition: mcx_utils.h:206
int parentid
Definition: mcx_utils.h:246
double energytot
Definition: mcx_utils.h:249
char issavedet
Definition: mcx_utils.h:199
void mcx_progressbar(float percent, Config *cfg)
Print a progress bar.
Definition: mcx_utils.c:4242
float mua
Definition: mcx_utils.h:90
#define float3(a, b, c)
Definition: mcx_core.cu:82
int mcx_remap(char *opt)
Test if a long command line option is supported.
Definition: mcx_utils.c:4364
unsigned long int detectedcount
Definition: mcx_utils.h:227
struct MCXHistoryHeader History
float mcx_updatemua(unsigned int mediaid, Config *cfg)
Retrieve mua for different cfg.vol formats to convert fluence back to energy in post-processing.
Definition: mcx_utils.c:1208
int gpuid
Definition: mcx_utils.h:190
Medium * prop
Definition: mcx_utils.h:182
size_t sharedmem
Definition: mcx_utils.h:143
void mcx_saveconfig(FILE *in, Config *cfg)
Save simulation settings to an inp file.
Definition: mcx_utils.c:2879
void mcx_version(Config *cfg)
Print MCX software version.
Definition: mcx_utils.c:4930
void mcx_convertcol2row4d(unsigned int **vol, uint4 *dim)
Convert a column-major (MATLAB/FORTRAN) array to a row-major (C/C++) array.
Definition: mcx_utils.c:3848
Definition: mcx_utils.h:158
void mcx_printlog(Config *cfg, char *str)
Print a message to the console or a log file.
Definition: mcx_utils.c:1157
char outputformat
Definition: mcx_utils.h:217
void mcx_flush(Config *cfg)
Force flush the command line to print the message.
Definition: mcx_utils.c:1240
FILE * flog
Definition: mcx_utils.h:223
int sm
Definition: mcx_utils.h:146
void mcx_replayinit(Config *cfg, float *detps, int dimdetps[2], int seedbyte)
Initialize the replay data structure from detected photon data - in embedded mode (MATLAB/Python) ...
Definition: mcx_utils.c:3321
Definition: mcx_utils.h:124
float4 srcparam1
Definition: mcx_utils.h:233
void mcx_savedetphoton(float *ppath, void *seeds, int count, int seedbyte, Config *cfg)
Save detected photon data to mch format binary file.
Definition: mcx_utils.c:951
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: mcx_utils.c:4302
unsigned int maxjumpdebug
Definition: mcx_utils.h:253
int mcx_jdataencode(void *vol, int ndim, uint *dims, char *type, int byte, int zipid, void *obj, int isubj, Config *cfg)
Export an ND volumetric image to JSON/JData encoded construct.
Definition: mcx_utils.c:4168
Definition: mcx_utils.h:78
void mcx_convertrow2col64(size_t **vol, uint3 *dim)
Convert a row-major (C/C++) array to a column-major (MATLAB/FORTRAN) array.
Definition: mcx_utils.c:3788
void mcx_savejnii(float *vol, int ndim, uint *dims, float *voxelsize, char *name, int isfloat, Config *cfg)
Save volumetric output (fluence etc) to a JNIfTI/JSON/JData format file.
Definition: mcx_utils.c:737
void mcx_clearcfg(Config *cfg)
Clearing the simulation configuration data structure.
Definition: mcx_utils.c:370
float * dz
Definition: mcx_utils.h:260
int mcx_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: mcxlab.cpp:1165
unsigned int runtime
Definition: mcx_utils.h:247
void mcx_kahanSum(float *sum, float *kahanc, float input)
Kahan summation: Add a sequence of finite precision floating point numbers.
Definition: mcx_utils.c:1193
unsigned int maxgate
Definition: mcx_utils.h:187
int mcx_lookupindex(char *key, const char *index)
Look up a single character in a string.
Definition: mcx_utils.c:4909
char issave2pt
Definition: mcx_utils.h:200
void mcx_loadseedfile(Config *cfg)
Load previously saved photon seeds from an .mch file for replay.
Definition: mcx_utils.c:3657
size_t nphoton
Definition: mcx_utils.h:159
float rho
Definition: mcx_utils.h:92
void mcx_convertrow2col(unsigned int **vol, uint3 *dim)
Convert a row-major (C/C++) array to a column-major (MATLAB/FORTRAN) array.
Definition: mcx_utils.c:3758
void mcx_loadseedjdat(char *filename, Config *cfg)
Load previously saved photon seeds from an .jdat file for replay.
Definition: mcx_utils.c:3557
void mcx_savejdata(char *filename, Config *cfg)
Save simulation settings to an inp file.
Definition: mcx_utils.c:2910
Replay replay
Definition: mcx_utils.h:237
float tstart
Definition: mcx_utils.h:167
unsigned int debuglevel
Definition: mcx_utils.h:242
void mcx_savebnii(float *vol, int ndim, uint *dims, float *voxelsize, char *name, int isfloat, Config *cfg)
Save volumetric output (fluence etc) to a binary JNIfTI/JSON/JData format file.
Definition: mcx_utils.c:574
void mcx_readconfig(char *fname, Config *cfg)
Read simulation settings from a configuration file (.inp or .json)
Definition: mcx_utils.c:1329
char ismomentum
Definition: mcx_utils.h:209
#define float4(a, b, c, d)
Definition: mcx_core.cu:83
uint3 crop1
Definition: mcx_utils.h:174
int respin
Definition: mcx_utils.h:188
void * seeddata
Definition: mcx_utils.h:238
char isnormalized
Definition: mcx_utils.h:198
int * detid
Definition: mcx_utils.h:125
char outputtype
Definition: mcx_utils.h:216
int zipid
Definition: mcx_utils.h:212
char faststep
Definition: mcx_utils.h:218
void mcx_prep_polarized(Config *cfg)
Preprocess media to prepare polarized photon simulation.
Definition: mcx_utils.c:1704
unsigned int uint
Definition: mcx_utils.h:62
float4 * smatrix
Definition: mcx_utils.h:185
int replaydet
Definition: mcx_utils.h:239
size_t globalmem
Definition: mcx_utils.h:141
#define uint4(a, b, c, d)
Definition: mcx_core.cu:79
Definition: mcx_utils.h:89
void mcx_preprocess(Config *cfg)
Preprocess user input and prepare the cfg data structure.
Definition: mcx_utils.c:1456
void mcx_dumpmask(Config *cfg)
Save the pre-masked volume (with detector ID) to an nii file.
Definition: mcx_utils.c:4031
unsigned int nblocksize
Definition: mcx_utils.h:160
char isref3
Definition: mcx_utils.h:196
int seedbyte
dimensions of the cfg.detphotons array
Definition: mcxlab.cpp:82
float sradius
Definition: mcx_utils.h:180
int voidtime
Definition: mcx_utils.h:232
void * seed
Definition: mcx_utils.h:126
float * exportdetected
Definition: mcx_utils.h:226
struct PhotonReplay Replay
float normalizer
Definition: mcx_utils.h:252
float mus
Definition: mcx_utils.h:80
void mcx_writeconfig(char *fname, Config *cfg)
Write simulation settings to an inp file.
Definition: mcx_utils.c:1429
Definition: mcx_utils.h:135
float4 srciquv
Definition: mcx_utils.h:166
unsigned int maxdetphoton
Definition: mcx_utils.h:178
int maxvoidstep
Definition: mcx_utils.h:231
int autoblock
Definition: mcx_utils.h:148
int maxgate
Definition: mcx_utils.h:150
History his
Definition: mcx_utils.h:224
float nmed
Definition: mcx_utils.h:94
int mcx_svmc_bgvoxel(int vol)
Check if a voxel contains background medium(0)
Definition: mcx_utils.c:3883
int maxmpthread
Definition: mcx_utils.h:151
float tstep
Definition: mcx_utils.h:168
char issrcfrom0
Definition: mcx_utils.h:203
struct MCXGPUInfo GPUInfo
float n
Definition: mcx_utils.h:82
int id
Definition: mcx_utils.h:137
char * shapedata
Definition: mcx_utils.h:229
unsigned int printnum
Definition: mcx_utils.h:189
int minor
Definition: mcx_utils.h:140
int major
Definition: mcx_utils.h:139
void mcx_convertcol2row(unsigned int **vol, uint3 *dim)
Convert a column-major (MATLAB/FORTRAN) array to a row-major (C/C++) array.
Definition: mcx_utils.c:3818
int mcx_run_from_json(char *jsonstr)
Run MCX simulations from a JSON input in a persistent session.
Definition: mcx_utils.c:4967
char * extrajson
Definition: mcx_utils.h:230
unsigned int nthread
Definition: mcx_utils.h:161
char isrefint
Definition: mcx_utils.h:197
unsigned int gscatter
Definition: mcx_utils.h:255
uint mediabyte
Definition: mcx_utils.h:257
int autothread
Definition: mcx_utils.h:149
float nsph
Definition: mcx_utils.h:93
void mcx_maskdet(Config *cfg)
Pre-label the voxel near a detector for easy photon detection.
Definition: mcx_utils.c:3900
void mcx_cleargpuinfo(GPUInfo **gpuinfo)
Reset and clear the GPU information data structure.
Definition: mcx_utils.c:357
void mcx_matlab_flush()
Force matlab refresh the command window to print all buffered messages.
Definition: mcxlab.cpp:1183
unsigned int detnum
Definition: mcx_utils.h:177
const char debugflag[]
Definition: mcx_utils.c:150
void mcx_loadconfig(FILE *in, Config *cfg)
Load user inputs from a .inp input file.
Definition: mcx_utils.c:1819
float mua
Definition: mcx_utils.h:79
#define MAX_SESSION_LENGTH
Definition: mcx_utils.h:49
float minenergy
Definition: mcx_utils.h:219
unsigned int srcnum
Definition: mcx_utils.h:235
float4 * detpos
Definition: mcx_utils.h:184
void mcx_savedata(float *dat, size_t len, Config *cfg)
Save volumetric output (fluence etc) to mc2 format binary file.
Definition: mcx_utils.c:862
float tend
Definition: mcx_utils.h:169
float4 srcpos
Definition: mcx_utils.h:164
void mcx_loadvolume(char *filename, Config *cfg, int isbuf)
Load media index data volume (.bin or .vol) to the memory.
Definition: mcx_utils.c:3138
double energyesc
Definition: mcx_utils.h:251
void mcx_initcfg(Config *cfg)
Initializing the simulation configuration with default values.
Definition: mcx_utils.c:232
float * exportdebugdata
Definition: mcx_utils.h:256
char issaveexit
Definition: mcx_utils.h:207
float omega
Definition: mcx_utils.h:221
char isgpuinfo
Definition: mcx_utils.h:201
int mcx_keylookup(char *key, const char *table[])
Look up a string in a string list and return the index.
Definition: mcx_utils.c:4876
void mcx_printheader(Config *cfg)
Print MCX output header.
Definition: mcx_utils.c:5002
size_t constmem
Definition: mcx_utils.h:142
unsigned int debugdatalen
Definition: mcx_utils.h:254
unsigned int nphase
Definition: mcx_utils.h:262
float detradius
Definition: mcx_utils.h:179
unsigned int medianum
Definition: mcx_utils.h:175
int core
Definition: mcx_utils.h:147
void mcx_parsecmd(int argc, char *argv[], Config *cfg)
Main function to read user command line options.
Definition: mcx_utils.c:4396
void mcx_savenii(float *dat, size_t len, char *name, int type32bit, int outputformatid, Config *cfg)
Save volumetric output (fluence etc) to an Nifty format binary file.
Definition: mcx_utils.c:467
void mcx_savejdet(float *ppath, void *seeds, uint count, int doappend, Config *cfg)
Save detected photon data to mch format binary file.
Definition: mcx_utils.c:998
#define MAX_DEVICE
Definition: mcx_utils.h:50
unsigned int * vol
Definition: mcx_utils.h:192
char isspecular
Definition: mcx_utils.h:202
int mcx_parsedebugopt(char *debugopt, const char *debugflag)
Parse the debug flag in the letter format.
Definition: mcx_utils.c:4851
void mcx_python_flush()
Force matlab refresh the command window to print all buffered messages.
Definition: pmcx.cpp:1157
float r
Definition: mcx_utils.h:91
float g
Definition: mcx_utils.h:81
char issaveref
Definition: mcx_utils.h:208
float * exportfield
Definition: mcx_utils.h:225
int seed
Definition: mcx_utils.h:162
float * dy
Definition: mcx_utils.h:259
int mcx_jdatadecode(void **vol, int *ndim, uint *dims, int maxdim, char **type, cJSON *obj, Config *cfg)
Decode an ND array from JSON/JData construct and output to a volumetric array.
Definition: mcx_utils.c:4082
int devcount
Definition: mcx_utils.h:138
#define uint3(a, b, c)
Definition: mcx_core.cu:78
char isdumpmask
Definition: mcx_utils.h:204
uint3 crop0
Definition: mcx_utils.h:173
float * invcdf
Definition: mcx_utils.h:263
char isdumpjson
Definition: mcx_utils.h:210
void mcx_validatecfg(Config *cfg, float *detps, int dimdetps[2], int seedbyte)
Validate all input fields, and warn incompatible inputs.
Definition: mcx_utils.c:3442
float * tof
Definition: mcx_utils.h:128
float unitinmm
Definition: mcx_utils.h:220
#define MAX_PATH_LENGTH
Definition: mcx_utils.h:48
void mcx_error(const int id, const char *msg, const char *file, const int linenum)
Error reporting function.
Definition: mcx_utils.c:1259
int dimdetps[2]
buffer to receive data from cfg.detphotons field
Definition: mcxlab.cpp:81
char autopilot
Definition: mcx_utils.h:205
char isrowmajor
Definition: mcx_utils.h:194
int clock
Definition: mcx_utils.h:145
struct MCXPolarizeMedium POLMedium
float * dx
Definition: mcx_utils.h:258
float4 srcdir
Definition: mcx_utils.h:165
int mcx_loadjson(cJSON *root, Config *cfg)
Load user inputs from a .json input file.
Definition: mcx_utils.c:2129
float3 steps
Definition: mcx_utils.h:170
POLMedium * polprop
Definition: mcx_utils.h:183
double energyabs
Definition: mcx_utils.h:250
int mcx_isbinstr(const char *str)
Test if a string contains only '0' and '1'.
Definition: mcx_utils.c:4944
float4 srcparam2
Definition: mcx_utils.h:234
float * weight
Definition: mcx_utils.h:127
int regcount
Definition: mcx_utils.h:144
uint3 dim
Definition: mcx_utils.h:172
char srctype
Definition: mcx_utils.h:213