EGSnrc C++ class library
Report PIRS-898 (2021)
Iwan Kawrakow, Ernesto Mainegra-Hing, Frederic Tessier, Reid Townson and Blake Walters
|
A Voxelized Human Phantom (VHP) geometry. More...
#include <egs_vhp_geometry.h>
Public Member Functions | |
EGS_VHPGeometry (const char *phantom_file, const char *media_file, int slice_min=0, int slice_max=1000000, const string &Name="") | |
bool | isInside (const EGS_Vector &x) |
int | isWhere (const EGS_Vector &x) |
int | inside (const EGS_Vector &x) |
int | medium (int ireg) const |
int | computeIntersections (int ireg, int n, const EGS_Vector &X, const EGS_Vector &u, EGS_GeometryIntersections *isections) |
EGS_Float | howfarToOutside (int ireg, const EGS_Vector &x, const EGS_Vector &u) |
int | howfar (int ireg, const EGS_Vector &x, const EGS_Vector &u, EGS_Float &t, int *newmed=0, EGS_Vector *normal=0) |
EGS_Float | hownear (int ireg, const EGS_Vector &x) |
int | getMaxStep () const |
bool | isOK () const |
int | getNx () const |
int | getNy () const |
int | getNz () const |
const string & | getType () const |
void | printInfo () const |
void | setMicros (EGS_Input *) |
Public Member Functions inherited from EGS_BaseGeometry | |
EGS_BaseGeometry (const string &Name) | |
Construct a geometry named Name. More... | |
virtual | ~EGS_BaseGeometry () |
Destructor. More... | |
bool | isConvex () const |
Is the geometry convex? More... | |
virtual EGS_Float | getVolume (int ireg) |
Calculates the volume of region ireg. More... | |
virtual EGS_Float | getBound (int idir, int ind) |
Returns region boundaries in direction determined by idir. More... | |
virtual int | getNRegDir (int idir) |
int | regions () const |
Returns the number of local regions in this geometry. More... | |
virtual bool | isRealRegion (int ireg) const |
Returnes true if ireg is a real region, false otherwise. More... | |
void | setMedium (const string &Name) |
Set all regions to a medium with name Name. More... | |
void | setMedium (int start, int end, const string &Name, int delta=1) |
Set every delta'th region between start and end to the medium named Name. More... | |
void | setMedium (int imed) |
Set all regions to a medium with index imed. More... | |
void | setMedium (int istart, int iend, int imed, int delta=1) |
Set every delta'th region between start and end (inclusive) to imed. More... | |
void | setMedia (EGS_Input *inp) |
Set the media in the geometry from the input pointed to by inp. More... | |
bool | hasRhoScaling () const |
Does this geometry object have a mass density scaling feature? More... | |
virtual EGS_Float | getRelativeRho (int ireg) const |
Get the relative mass density in region ireg. More... | |
virtual void | setRelativeRho (int start, int end, EGS_Float rho) |
Set the relative mass density in regions. More... | |
virtual void | setRelativeRho (EGS_Input *) |
Set the relative mass density from an user input. More... | |
EGS_Float | getMediumRho (int ind) const |
virtual void | setApplication (EGS_Application *app) |
bool | hasBScaling () const |
Does this geometry object have a B field scaling feature? | |
virtual EGS_Float | getBScaling (int ireg) const |
Get the B field scaling factor in region ireg. | |
virtual void | setBScaling (int start, int end, EGS_Float bf) |
Set the B field scaling factor in regions. More... | |
virtual void | setBScaling (EGS_Input *) |
Set the B field scaling factor from an user input. More... | |
const string & | getName () const |
Get the name of this geometry. More... | |
void | setDebug (bool deb) |
Turn debugging on. More... | |
void | setName (EGS_Input *inp) |
Set the name of the geometry from the input inp. More... | |
void | setBoundaryTolerance (EGS_Input *inp) |
Set the value of the boundary tolerance from the input inp. More... | |
void | setBoundaryTolerance (EGS_Float tol) |
Set the value of the boundary tolerance from argument. | |
virtual bool | hasBooleanProperty (int ireg, EGS_BPType prop) const |
Is the boolean property prop set for region ireg ? | |
virtual void | setBooleanProperty (EGS_BPType prop) |
Set the boolean properties of the entire geometry to prop. More... | |
virtual void | addBooleanProperty (int bit) |
Add a boolean property for the entire geometry by setting the bit'th bit. More... | |
virtual void | setBooleanProperty (EGS_BPType prop, int start, int end, int step=1) |
Set the boolean properties of every step'th region between start and end (inclusive) to prop. More... | |
virtual void | addBooleanProperty (int bit, int start, int end, int step=1) |
Add a boolean property to every step'th region between start and end (inclusive) by setting the bit'th bit. More... | |
int | ref () |
Increase the reference count to this geometry. More... | |
int | deref () |
Decrease the reference count to this geometry. More... | |
EGS_Float | getBoundaryTolerance () |
Get the value of the boundary tolerance. | |
virtual void | getNumberRegions (const string &str, vector< int > ®s) |
Get a list of all the regions labeled with a number. | |
virtual void | getLabelRegions (const string &str, vector< int > ®s) |
Get the list of all regions labeled with str. | |
virtual const string & | getLabelName (const int i) |
Get the name of the i-th explicit label in the geometry. | |
virtual int | getLabelCount () |
Get the number of explicit labels in the geometry. | |
int | setLabels (EGS_Input *input) |
Set the labels from an input block. | |
int | setLabels (const string &inp) |
Set the labels from an input string. | |
Protected Member Functions | |
void | setup () |
void | setMedia (EGS_Input *inp, int nmed, const int *med_ind) |
Protected Attributes | |
EGS_VoxelGeometry * | vg |
VHP_OrganData * | organs |
int | organ_media [256] |
int | organ_micro [256] |
string | organ_names [256] |
EGS_MicroMatrixCluster ** | micros |
int | nmicro |
int | nmax |
int | nmacro |
Protected Attributes inherited from EGS_BaseGeometry | |
int | nreg |
Number of local regions in this geometry. More... | |
string | name |
Name of this geometry. More... | |
short * | region_media |
Array of media indeces. More... | |
int | med |
Medium index. More... | |
bool | has_rho_scaling |
Does this geometry have relative mass density scvaling? More... | |
EGS_Float * | rhor |
Array with relative mass densities. More... | |
bool | has_B_scaling |
Does this geometry has B field scaling factor? More... | |
bool | has_Ref_rho |
EGS_Float * | bfactor |
Array with B field scaling factors. More... | |
EGS_Float | rhoRef |
Reference density for B field scaling. More... | |
int | nref |
Number of references to this geometry. More... | |
bool | debug |
Debugging flag. More... | |
bool | is_convex |
Is this geometry convex? More... | |
EGS_BPType | bproperty |
A bit mask of boolean properties for the entire geometry. More... | |
EGS_BPType * | bp_array |
An array of boolean properties on a region by region basis. More... | |
EGS_Float | boundaryTolerance |
Boundary tolerance for geometries that need it. | |
EGS_Float | halfBoundaryTolerance |
vector< label > | labels |
Labels. More... | |
EGS_Application * | app |
The application this object belongs to. | |
Static Protected Attributes | |
static string | type = "EGS_VHPGeometry" |
Static Protected Attributes inherited from EGS_BaseGeometry | |
static int | error_flag = 0 |
Set to non-zero status if a geometry problem is encountered. | |
Additional Inherited Members | |
Static Public Member Functions inherited from EGS_BaseGeometry | |
static int | findRegion (EGS_Float xp, int np, const EGS_Float *p) |
Find the bin to which xp belongs, given np bin edges p. More... | |
static int | nMedia () |
Get the number of media registered so far by all geometries. More... | |
static const char * | getMediumName (int ind) |
Get the name of medium with index ind. More... | |
static int | addMedium (const string &medname) |
Add a medium or get the index of an existing medium. More... | |
static int | getMediumIndex (const string &medname) |
Get the index of a medium named medname. More... | |
static EGS_BaseGeometry * | createGeometry (EGS_Input *) |
Create a geometry (or geometries) from a given input. More... | |
static EGS_BaseGeometry * | createSingleGeometry (EGS_Input *inp) |
Create a single geometry from the input inp. More... | |
static void | clearGeometries () |
Clears (deletes) all geometries in the currently active geometry list. More... | |
static EGS_BaseGeometry * | getGeometry (const string &Name) |
Get a pointer to the geometry named Name. More... | |
static EGS_BaseGeometry ** | getGeometries () |
static int | getNGeometries () |
static string | getUniqueName () |
Get a unique geometry name. More... | |
static void | describeGeometries () |
Describes all existing geometries. More... | |
static void | setActiveGeometryList (int list) |
Set the currently active geometry list. More... | |
static int | getLastError () |
static void | resetErrorFlag () |
A Voxelized Human Phantom (VHP) geometry.
This geometry type can be used to model a voxelized representation of a phantom. In principle a VHP geometry is the same as a XYZ geometry. The main reason for providing a separate implementation is the huge number of voxels needed to represent a whole body human phantom using 1-2 mm resolution, which necessitates a more careful memory use. In addition, this implementation provides the possibility to include a micro-voxel representation of the human spongiosa obtained from micro-CT images. A VHP geometry is defined as follows:
* library = egs_vhp_geometry * name = some_name * phantom data = phantom_data_file * media data = media_data_file * slice range = min_slice max_slice *
In the above, the slice range
input, which is optional, can be used to select a given slice range instead of using the entire phantom. The file phantom_data_file
is a binary file containing the definition of the phantom. The format of this file is as follows:
nslice
(16 bit unsigned integer value). Note that increasing slice number corresponds to increasing z coordinate.nslice
slices. The data for a slice consists ofnreg
of regions (16 bit usigned integer)nreg+1
pixel indeces (16 bit usigned integers)nreg
organ indeces (8 bit unsigned integers) so that all voxels between and are set to organ . This data structure, also used at run time, provides a significant compression compared to simply using an array of organ indeces (e.g., one needs about 12 MB to represent Richard Kramer's FAX phantom compared to about 150 MB that would be needed for the 1361 x 474 x 224 voxels of this phantom). Its disadvantage is the slighly slower ( 10-15%) access to the organ index of a voxel.The file media_data_file
is an ASCII file that defines the organ names and the materials to be used for each organ. Its format is as follows:
nmed
nmed
lines with a single medium name per line (media names are the actual medium names in the PEGS file to be used for the simulation).To add a micro-voxel representation of spongiosa, one includes in the geometry definition the following inputs:
* BSC thickness = thickness in cm * TB medium = medium name * BM medium = medium name * micro matrix = micro_data_file1 organ1 organ2 ... * micro matrix = micro_data_file2 organ1 organ2 ... * ... *
The TB medium
and BM medium
inputs define the PEGS medium names of trabecular bone and bone marrow. The BSC thickness
sets the thickness of the bone surface cells (BSC) layer. Note that in the current implementation the BSC thickness can not exceed the micro-voxel size. The binary files micro_data_file_i
define micro matrix clusters to replace macro voxels that have organ indeces organ1 organ2 ...
. A micro matrix cluster consists of micro matrices of dimension . This cluster is repeated periodically in spongiosa organs set to use this cluster. Note that the micro-matrix voxel size is automatically determned from the macro voxel size and the number of micro-voxels in a micro matrix. The format of the micro matrix file is as follows:
Definition at line 1303 of file egs_vhp_geometry.h.