mmc_raytrace.h
Go to the documentation of this file.
1 /***************************************************************************/
32 /***************************************************************************/
38 #ifndef _MMC_RAY_TRACING_H
39 #define _MMC_RAY_TRACING_H
40 
41 #include "mmc_mesh.h"
42 #include "mmc_utils.h"
43 
44 #define MAX_TRIAL 3
45 #define FIX_PHOTON 1e-3f
47 /***************************************************************************/
53 typedef struct MMC_ray {
57  float4 bary0;
58  int eid;
59  int faceid;
60  int isend;
61  int nexteid;
62  float weight;
63  float photontimer;
64  float slen0;
65  float slen;
66  float Lmove;
67  double Eabsorb;
68  unsigned int photonid;
69  float* partialpath;
70  void* photonseed;
71  float focus;
72  unsigned int posidx;
73  unsigned int oldidx;
74  double oldweight;
75  float* roisize;
76  int roitype;
77  int inroi;
78  int roiidx;
79  int refeid;
80 } ray;
81 
82 /***************************************************************************/
88 typedef struct MMC_visitor {
89  float raytet;
90  float raytet0;
91  float rtstep;
92  int detcount;
93  int bufpos;
94  int reclen;
95  float* partialpath;
96  void* photonseed;
97  double* launchweight;
98  double* absorbweight;
99  double* kahanc0;
100  double* kahanc1;
101 } visitor;
102 
103 #ifdef __cplusplus
104 extern "C" {
105 #endif
106 void interppos(float3* w, float3* p1, float3* p2, float3* p3, float3* pout);
107 void getinterp(float w1, float w2, float w3, float3* p1, float3* p2, float3* p3, float3* pout);
108 void fixphoton(float3* p, float3* nodes, int* ee);
109 void onephoton(size_t id, raytracer* tracer, tetmesh* mesh, mcconfig* cfg, RandType* ran, RandType* ran0, visitor* visit);
110 void launchphoton(mcconfig* cfg, ray* r, tetmesh* mesh, RandType* ran, RandType* ran0);
111 float reflectray(mcconfig* cfg, float3* c0, raytracer* tracer, int* oldeid, int* eid, int faceid, RandType* ran, int inroi);
112 float reflectrayroi(mcconfig* cfg, float3* c0, float3* ph, raytracer* tracer, int* eid, int* inroi, RandType* ran, int roitype, int roiidx, int refeid);
113 void save_scatter_events(ray* r, tetmesh* mesh, mcconfig* cfg, visitor* visit);
114 void albedoweight(ray* r, tetmesh* mesh, mcconfig* cfg, visitor* visit);
115 void visitor_init(mcconfig* cfg, visitor* visit);
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);
124 
125 #ifdef MCX_CONTAINER
126 #ifdef __cplusplus
127 extern "C"
128 #endif
129 int mcx_throw_exception(const int id, const char* msg, const char* filename, const int linenum);
130 #endif
131 
132 #ifdef __cplusplus
133 }
134 #endif
135 
136 #endif
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