| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 | 
							- /* defs.h */
 
- // libraries that will be needed throughout
 
- #include <stdlib.h>
 
- #include <stdio.h>
 
- #include <string.h>
 
- #include <math.h>
 
- #include <malloc.h>
 
- #define MAX_KERNELS 50	//max number of monoenergetic kernels to use for creating polyenergetic kernel
 
- #define N_KERNEL_RADII 24  //number of radial increments in mono kernels 
 
- #define N_KERNEL_ANGLES 48 //number of angular increments in mono kernels
 
- #define N_KERNEL_CATEGORIES 5  //number of kernel categories (primary, first scatter...)
 
- #define SOI 17
 
- // upsample factors to determine insideness for voxels on aperture edge:
 
- #define Mus  5
 
- #define Nus  5
 
- #define Qus  5
 
- #define SUCCESS 1
 
- #define FAILURE 0
 
- #define RSAFE 2.0   // safety margin for dose_mask calculation in cm
 
- #define PI 3.14152654
 
- #define Y_DOSE_EXTENT 8.0  //optionally only calculate this many cm in y-direction (commented out in calc_dose)
 
- #define NPHI 12  //number of azimuthal angles for convolution 
 
- // #define DELR 0.4 //radial increments for convolution (adaptive to the problem now, in calc_dose)
 
- #define NTHETA 6  //number of polar angles for convolution (must divide evenly into N_KERNEL_ANGLES)
 
- /* #define NPHI 12	//number of azimuthal angles for convolution 
 
- #define DELR 0.1 //radial increments for convolution
 
- #define NTHETA 12  //number of polar angles for convolution (must divide evenly into N_KERNEL_ANGLES)  */
 
- #define MAXX(x,y) ((x) > (y) ? (x) : (y))
 
- //each kernel file contains 7 entries per voxel, the first five are these categores
 
- typedef enum
 
- {
 
-  primary_,
 
-  first_scatter_,
 
-  second_scatter_,
 
-  multiple_scatter_,
 
-  brem_annih_
 
- } KERNEL_CATEGORIES;
 
- typedef struct
 
- {
 
-     float x;
 
-     float y;
 
-     float z;
 
- } POINT;
 
- //standard float precision grid structure, with dynamically allocated matrix 
 
- //used for density, deff, terma, kerma, dose
 
- typedef struct
 
- {
 
-     POINT start;
 
-     POINT inc;
 
-     int x_count;
 
-     int y_count;
 
-     int z_count;
 
-     float *matrix;
 
- } FLOAT_GRID;
 
- //macro to access grid values
 
- #define GRID_VALUE(GRID_ptr, i, j, k)\
 
-     ((GRID_ptr)->matrix[(i) +\
 
-                         (GRID_ptr)->x_count *\
 
-                          ((j) + ((k) * (GRID_ptr)->y_count))])
 
- // macro for 3D dot products
 
- #define DOT3D(vec1,vec2) ((vec1[0])*(vec2[0])+(vec1[1])*(vec2[1])+(vec1[2])*(vec2[2]))
 
- //kernel structure for each monoenergetic kernel and the polyenergetic kernel
 
- typedef struct
 
- {
 
-  int nradii;
 
-  int ntheta;
 
-  float *radial_boundary;
 
-  float *angular_boundary;
 
-  float *matrix[N_KERNEL_CATEGORIES];  //kernel values for each category
 
-  float *total_matrix;				   //sum of all categories (used for current convolution)
 
- } KERNEL;
 
- //macros for accessing kernel values
 
- #define KERNEL_VALUE(kern_ptr,category,i,j) \
 
-         (kern_ptr)->matrix[category][(i) + (j)*(kern_ptr)->nradii]
 
- #define KERNEL_TOTAL_VALUE(kern_ptr,i,j) \
 
-         (kern_ptr)->total_matrix[(i) + (j)*(kern_ptr)->nradii]
 
- //infor and array of KERNEL structures for monoenergetic kernels 
 
- typedef struct
 
- {
 
-  int nkernels;
 
-  float *energy;
 
-  float *fluence;
 
-  float *mu;
 
-  float *mu_en;
 
-  KERNEL kernel[MAX_KERNELS];
 
- } MONO_KERNELS;
 
- //beam description (center and size)
 
- typedef struct
 
- {
 
-  float ip[3];  // first aperture center vector
 
-  float jp[3];  // second aperture center vector
 
-  float kp[3];  // source direction vector
 
-  float y_vec[3];   // source location vector
 
-  // aperture parameters
 
-  float xp;
 
-  float yp;
 
-  float del_xp;   // aperture width in ip direction
 
-  float del_yp;   // aperture width in jp direction
 
-  // source-axis distance (leave here for now because to ubiquitous)
 
-  float SAD;
 
-  // beam number to avoid ambiguity
 
-  int num;
 
- } BEAM;
 
- /* Prototypes of utility functions */
 
- float *fvector(int nl, int nh);
 
- float **fmatrix(int nrl, int nrh, int ncl, int nch);
 
- void free_fvector(float *v, int nl, int nh);
 
- void free_fmatrix(float **m, int nrl, int nrh, int ncl, int nch);
 
- int copy_grid_geometry(FLOAT_GRID *, FLOAT_GRID *);
 
- int binSearch(float *, float, int);
 
- void nrerror(char error_text[]);
 
 
  |