38 #ifndef _MMC_RAY_TRACING_H 39 #define _MMC_RAY_TRACING_H 45 #define FIX_PHOTON 1e-3f 53 typedef struct MMC_ray { 116 void visitor_clear(
visitor* visit);
117 void updateroi(
int immctype,
ray* r,
tetmesh* mesh);
118 void traceroi(
ray* r,
raytracer* tracer,
int roitype,
int doinit);
119 void compute_distances_to_edge(
ray* r,
raytracer* tracer,
int* ee,
int edgeid,
float d2d[2],
float3 p2d[2],
int* hitstatus);
120 void compute_distances_to_node(
ray* r,
raytracer* tracer,
int* ee,
int index,
float nr,
float3** center,
int* hitstatus);
121 float ray_cylinder_intersect(
ray* r,
int index,
float d2d[2],
float3 p2d[2],
int hitstatus);
122 float ray_sphere_intersect(
ray* r,
int index,
float3* center,
float nr,
int hitstatus);
123 float ray_face_intersect(
ray* r,
raytracer* tracer,
int* ee,
int index,
int baseid,
int eid,
int* hitstatus);
129 int mcx_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
float4 bary0
Definition: mmc_raytrace.h:57
float3 p0
Definition: mmc_raytrace.h:54
float weight
Definition: mmc_raytrace.h:62
int nexteid
Definition: mmc_raytrace.h:61
int isend
Definition: mmc_raytrace.h:60
float * roisize
Definition: mmc_raytrace.h:75
void onephoton(size_t id, raytracer *tracer, tetmesh *mesh, mcconfig *cfg, RandType *ran, RandType *ran0, visitor *visit)
The core Monte Carlo function simulating a single photon (!!!Important!!!)
Definition: mmc_raytrace.c:1715
float raytet0
Definition: mmc_raytrace.h:90
void * photonseed
Definition: mmc_raytrace.h:96
int bufpos
Definition: mmc_raytrace.h:93
void launchphoton(mcconfig *cfg, ray *r, tetmesh *mesh, RandType *ran, RandType *ran0)
Launch a new photon.
Definition: mmc_raytrace.c:2241
float * partialpath
Definition: mmc_raytrace.h:95
double Eabsorb
Definition: mmc_raytrace.h:67
float reflectray(mcconfig *cfg, float3 *c0, raytracer *tracer, int *oldeid, int *eid, int faceid, RandType *ran, int inroi)
Calculate the reflection/transmission of a ray at an interface.
Definition: mmc_raytrace.c:2159
unsigned int posidx
Definition: mmc_raytrace.h:72
int inroi
Definition: mmc_raytrace.h:77
A structure that accumulates the statistics about the simulation.
Definition: mmc_raytrace.h:88
float slen0
Definition: mmc_raytrace.h:64
int roiidx
Definition: mmc_raytrace.h:78
Basic FEM mesh data structrure.
Definition: mmc_mesh.h:90
float3 vec
Definition: mmc_raytrace.h:55
float Lmove
Definition: mmc_raytrace.h:66
int detcount
Definition: mmc_raytrace.h:92
double * absorbweight
Definition: mmc_raytrace.h:98
Definition of program options and problem domain configurations.
int faceid
Definition: mmc_raytrace.h:59
void albedoweight(ray *r, tetmesh *mesh, mcconfig *cfg, visitor *visit)
Deal with absorption using MCML-like algorithm (albedo-weight MC)
Definition: mmc_raytrace.c:2491
float focus
Definition: mmc_raytrace.h:71
float3 pout
Definition: mmc_raytrace.h:56
void interppos(float3 *w, float3 *p1, float3 *p2, float3 *p3, float3 *pout)
function to linearly interpolate between 3 3D points (p1,p2,p3) using weight (w)
Definition: mmc_raytrace.c:153
float * partialpath
Definition: mmc_raytrace.h:69
float raytet
Definition: mmc_raytrace.h:89
int reclen
Definition: mmc_raytrace.h:94
float photontimer
Definition: mmc_raytrace.h:63
unsigned int photonid
Definition: mmc_raytrace.h:68
void * photonseed
Definition: mmc_raytrace.h:70
Data structure associated with the current photon/ray.
Definition: mmc_raytrace.h:53
void fixphoton(float3 *p, float3 *nodes, int *ee)
Function to deal with ray-edge/ray-vertex intersections.
Definition: mmc_raytrace.c:189
int eid
Definition: mmc_raytrace.h:58
float rtstep
Definition: mmc_raytrace.h:91
Definition of basic mesh data structures and inline vector operations.
int roitype
Definition: mmc_raytrace.h:76
float reflectrayroi(mcconfig *cfg, float3 *c0, float3 *ph, raytracer *tracer, int *eid, int *inroi, RandType *ran, int roitype, int roiidx, int refeid)
Calculate the reflection/transmission of a ray at the ROI surface.
Definition: mmc_raytrace.c:2056
double * launchweight
Definition: mmc_raytrace.h:97
double * kahanc1
Definition: mmc_raytrace.h:100
floating-point triplet {x,y,z}
Definition: vector_types.h:73
void getinterp(float w1, float w2, float w3, float3 *p1, float3 *p2, float3 *p3, float3 *pout)
function to linearly interpolate between 3 3D points (p1,p2,p3) using scalar weight (w) ...
Definition: mmc_raytrace.c:172
int refeid
Definition: mmc_raytrace.h:79
double * kahanc0
Definition: mmc_raytrace.h:99
Ray-tracer data structrure for pre-computed data.
Definition: mmc_mesh.h:128
float slen
Definition: mmc_raytrace.h:65