EGSnrc C++ class library
Report PIRS-898 (2021)
Iwan Kawrakow, Ernesto Mainegra-Hing, Frederic Tessier, Reid Townson and Blake Walters
|
An envelope geometry class. More...
#include <egs_envelope_geometry.h>
Public Member Functions | |
EGS_EnvelopeGeometry (EGS_BaseGeometry *G, const vector< EGS_BaseGeometry * > &geoms, const string &Name="", bool newindexing=false) | |
bool | isRealRegion (int ireg) const |
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 | hasBooleanProperty (int ireg, EGS_BPType prop) const |
void | setBooleanProperty (EGS_BPType) |
void | addBooleanProperty (int) |
void | setBooleanProperty (EGS_BPType, int, int, int step=1) |
void | addBooleanProperty (int, int, int, int step=1) |
const string & | getType () const |
EGS_BaseGeometry ** | getInscribedGeometries (std::size_t &nInscribed) const |
void | printInfo () const |
void | setRelativeRho (int start, int end, EGS_Float rho) |
void | setRelativeRho (EGS_Input *) |
EGS_Float | getRelativeRho (int ireg) const |
void | setBScaling (int start, int end, EGS_Float bf) |
void | setBScaling (EGS_Input *) |
EGS_Float | getBScaling (int ireg) const |
virtual void | getLabelRegions (const string &str, vector< int > ®s) |
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... | |
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... | |
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? | |
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. | |
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 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 | setMedia (EGS_Input *, int, const int *) |
Don't set media for an envelope geometry. More... | |
Protected Attributes | |
EGS_BaseGeometry * | g |
The envelope geometry. | |
EGS_BaseGeometry ** | geometries |
The inscribed geometries. | |
int | n_in |
Number of inscribed geometries. | |
int | nbase |
Number of regions in the base geometry. | |
int | nmax |
bool | new_indexing |
If true, use new indexing style. | |
int * | reg_to_inscr |
Region to inscribed geometry conversion. | |
int * | local_start |
First region for each inscribed geometry. | |
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_EnvelopeGeometry" |
Geometry type. | |
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 () |
An envelope geometry class.
An envelope geometry is a geometry consisting of a base geometry (the envelope) and one or more inscribed geometries . As a very simple example consider a box (the envelope) and e.g. a sphere (the inscribed geometry) inside the box. There can be much more complex geometries modeled as envelope geometries and more examples will be given after the details of the implementation of the various geometry methods:
The above explanation makes it clear that any type of a geometry can be used as the envelope or an inscribed geometry as long as the logic applies. The conditions for the applicability of the above logic are:
Apart for these two restrictions any geometries can be used. In particular, neither the envelope nor the inscribed geometries need to be elementary geometries. More complex examples of the use of this type of a composite geometry are:
One should keep in mind that an envelope geometry becomes slower with increasing number of inscribed objects. In situations with many such objects it may be advantageous to combine several objects into some other composite geometry (e.g. a geometry union, a stack, another envelope, etc.) before inscribing into the envelope.
An envelope geometry can be defined using the following keys:
library = egs_genvelope base geometry = name of a previously defined geometry inscribed geometries = list of names of previously defined geometries
The above should be self explanatory. Example geometry files making use of an envelope geometry are car.geom, chambers_in_box.geom, rz1.geom, seeds_in_xyz.geom
and seeds_in_xyz1.geom
.
A simple example:
:start geometry definition: :start geometry: name = my_box library = egs_box box size = 1 2 3 :start media input: media = water :stop media input: :stop geometry: :start geometry: name = g1 library = egs_spheres midpoint = 0 0 1 radii = 0.3 :start media input: media = air :stop media input: :stop geometry: :start geometry: name = g2 library = egs_spheres midpoint = 0 0 -1 radii = 0.3 :start media input: media = air :stop media input: :stop geometry: :start geometry: name = my_envelope library = egs_genvelope base geometry = my_box # Inscribed geometries must be strictly inside the envelope # No touching of surfaces! inscribed geometries = g1 g2 :stop geometry: simulation geometry = my_envelope :stop geometry definition:
Definition at line 229 of file egs_envelope_geometry.h.
|
protectedvirtual |
Don't set media for an envelope geometry.
This function is re-implemented to warn the user to not set media in the envelope geometry. Instead, media should be set for the envelope and in the inscribed geometries.
Reimplemented from EGS_BaseGeometry.
Definition at line 49 of file egs_envelope_geometry.cpp.
References egsWarning.
|
protected |
Max. number of regions in any inscribed geometry
Definition at line 602 of file egs_envelope_geometry.h.