EGSnrc C++ class library
Report PIRS-898 (2021)
Iwan Kawrakow, Ernesto Mainegra-Hing, Frederic Tessier, Reid Townson and Blake Walters
|
A cone stack. More...
#include <egs_cones.h>
Public Member Functions | |
EGS_ConeStack (const EGS_Vector &Xo, const EGS_Vector &A, const string &Name) | |
void | addLayer (EGS_Float thick, const vector< EGS_Float > &rtop, const vector< EGS_Float > &rbottom, const vector< string > &med_names) |
int | medium (int ireg) const |
bool | isInside (const EGS_Vector &x) |
int | isWhere (const EGS_Vector &x) |
int | inside (const EGS_Vector &x) |
bool | isRealRegion (int ireg) const |
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 |
const string & | getType () const |
void | printInfo () const |
int | nLayer () const |
void | shiftLabelRegions (const int i, const int index) |
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 | howfarToOutside (int ireg, const EGS_Vector &x, const EGS_Vector &u) |
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 int | computeIntersections (int ireg, int n, const EGS_Vector &x, const EGS_Vector &u, EGS_GeometryIntersections *isections) |
Calculates intersection distances to region boundaries. 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 | resize () |
void | clear (bool) |
int | isWhere (int il, const EGS_Vector &x) |
Protected Member Functions inherited from EGS_BaseGeometry | |
virtual void | setMedia (EGS_Input *inp, int nmed, const int *med_ind) |
Set media. More... | |
Protected Attributes | |
EGS_Vector | xo |
EGS_Vector | a |
int | nl |
int | nltot |
int | nmax |
bool | same_Rout |
EGS_Float | Rout |
EGS_Float | Rout2 |
EGS_Float * | pos |
int * | nr |
int * | flag |
EGS_SimpleCone *** | cones |
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_ConeStack" |
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 cone stack.
The EGS_ConeStack class models a series of layers divided into conical segments stacked together to form a potentially complex geometrical structure as shown in the following figure.
Each layer may have a different set of arbitrary number of cones with different opening angles and apexes, including cylinders (which are just special cases of cones). There can be an arbitrary number of layers in a cone stack. The only restriction is that all cones in a stack must have the same axis. A cone stack is defined using the following set of keys:
library = egs_cones type = EGS_ConeStack axis = Ox, Oy, Oz, ax, ay, az :start layer: input defining a layer :stop layer: ... :start layer: input defining a layer :stop layer:
The input to the axis
key defines the axis of all cones as a position (Ox,Oy,Oz
) and direction (ax,ay,az
). Note that the position also defines the position of the top plane of the first layer in the stack. There can be an arbitrary number of :start layer: :stop layer:
sections each defining one layer in the stack in sequence. The input needed to define a layer is
thickness = thickness of the layer top radii = list of the top cone radii bottom radii = list of the bottom cone radii media = list of media names, one for each region
The meaning of the thickness
key should be clear. There must be exactly the same number of inputs to the other 3 keys defining regions filled with the media specified in the media
key. Note that the radii must be given in increasing order. Note also that the cone stack is the only geometry type that must define its media, for all other geometry types media definition can be done either within the definition of the geometry or "from the outside", i.e. by some other composite geometry using this geometry as one of its components.
Sometimes the bottom radii of the cones in a layer can be the same as the top radii of the cones in the next layer (e.g. when defining the flattening filter of a medical linear accelerator). In such cases, the top radii
key can and should be omitted and the geometry will automatically take the radii from the previous layer. This has the added advantage of speeding up the region finding algorithm: if the top radii of a layer are the same as the bottom radii of the previous layer, one does not need to search for the new cone region when the boundary between layers is crossed but can simply use the cone region from the previous layer.
A cone stack is useful, for instance, for defining the upper portion of the treatment head of medical linear accelerators. Examples can be found in photon_linac.geom
, car.geom
and rz1.geom
example geometry files.
A simple example:
:start geometry definition: :start geometry: library = egs_cones type = EGS_ConeStack name = my_conestack axis = 1.2417 0 0 -1 0 0 :start layer: thickness = 0.0417 top radii = 0. bottom radii = 0.0858 media = water :stop layer: :start layer: thickness = 0.1283 top radii = 0. 0.0858 bottom radii = 0.3125 0.35 media = air water :stop layer: :start layer: thickness = 0.2217 bottom radii = 0.3125 0.35 media = air water :stop layer: :start layer: thickness = 2.05 top radii = 0.050 0.3125 0.35 bottom radii = 0.050 0.3125 0.35 media = water air water :stop layer: :stop geometry: simulation geometry = my_conestack :stop geometry definition:
Definition at line 1461 of file egs_cones.h.