52 return firstElem.second[0] < secondElem.second[0];
56string join(
const vector<string> &v,
string delim) {
60 for (vector<string>::const_iterator p = v.begin(); p != v.end(); ++p) {
62 if (p != v.end() - 1) {
73 for (
size_t i =0; i <
gmap[root].children.size(); i++) {
79 return Node(root, children);
87 int err = input->getInput(
"simulation geometry",
sim_geom_name);
89 egsWarning(
"GeomInfo::initializeFromInput: missing keyword 'simulation geometry'\n");
97 egsWarning(
"GeomInfo::initializeFromInput: missing keyword 'phantom geometries'\n");
102 err = input->getInput(
"source geometries",
source_names);
104 egsWarning(
"GeomInfo::initializeFromInput: missing keyword 'source geometries'\n");
110 vector<EGS_Input *> items;
113 while ((ij = input->takeInputItem(
"geometry")) != 0) {
118 int err = ij->getInput(
"name", name);
120 egsWarning(
"GeomInfo::initializeFromInput: Found geometry with no name. All geometries must be named.\n");
129 for (vector<EGS_Input *>::iterator item = items.begin(); item != items.end(); item++) {
130 input->addInputItem(**item);
152 EGS_Input *inscribedInp = input->getInputItem(
"inscribed geometry");
157 EGS_Input *transformInp = inscribedInp->getInputItem(
"transformations");
162 vector<EGS_Input *> items;
166 while ((ij = transformInp->takeInputItem(
"transformation")) != 0) {
172 for (vector<EGS_Input *>::iterator item = items.begin(); item != items.end(); item++) {
173 transformInp->addInputItem(**item);
184 input->getInput(
"base geometry", base);
192 vector<string> children;
195 EGS_Input *inscribed_inp = input->getInputItem(
"inscribed geometry");
196 if (!inscribed_inp) {
200 string inscribed_name;
201 inscribed_inp->getInput(
"inscribed geometry name", inscribed_name);
204 for (
size_t i=0; i < ninscribed; i++) {
205 children.push_back(inscribed_name);
214 vector<string> children;
215 input->getInput(
"inscribed geometries", children);
223 vector<string> children;
225 input->getInput(
"name", name);
229 vector<EGS_Input *> items;
232 vector<int> start_regs, stop_regs;
233 vector<string> names;
234 vector<CDGeomRegType> regs;
236 while ((ij = input->takeInputItem(
"set geometry")) != 0) {
240 ij->getInput(
"set geometry", aux);
242 int start_reg, stop_reg;
245 if (aux.size() == 2) {
246 start_reg = atoi(aux[0].c_str());
247 stop_reg = start_reg;
249 }
else if (aux.size() == 3) {
250 start_reg = atoi(aux[0].c_str());
251 stop_reg = atoi(aux[1].c_str());
255 vector<int> start_stop_regs;
256 start_stop_regs.push_back(start_reg);
257 start_stop_regs.push_back(stop_reg);
264 for (vector<EGS_Input *>::iterator item = items.begin(); item != items.end(); item++) {
265 input->addInputItem(**item);
270 for (
size_t i=0; i< regs.size(); i++) {
271 for (
int g = regs[i].second[0]; g <= regs[i].second[1]; g++) {
272 children.push_back(regs[i].first);
283 vector<string> children;
286 input->getInput(
"type", type);
288 if (type ==
"EGS_XYZGeometry") {
292 input->getInput(
"dimensions", children);
299 vector<string> children;
300 input->getInput(
"geometries", children);
307 vector<string> children;
308 input->getInput(
"geometries", children);
314 vector<string> children;
315 input->getInput(
"my geometry", children);
335 int err = input->getInput(
"library", library);
337 vector<string> children;
342 if (library ==
"egs_autoenvelope") {
344 }
else if (library ==
"egs_genvelope") {
346 }
else if (library ==
"egs_cdgeometry") {
348 }
else if (library ==
"egs_ndgeometry") {
350 }
else if (library ==
"egs_gunion") {
352 }
else if (library ==
"egs_gstack") {
354 }
else if (library ==
"egs_gtransformed") {
364 for (
size_t p=0; p < geoms.size(); p++) {
365 if (geoms[p] == geom->getName()) {
377 for (
size_t i = start; i < gnames.size(); i++) {
378 int nreg = EGS_BaseGeometry::getGeometry(gnames[i])->regions();
379 max = nreg > max ? nreg : max;
388 EGS_BaseGeometry *geom = EGS_BaseGeometry::getGeometry(gri.
name);
390 if (gri.
type ==
"EGS_AEnvelope" ||
391 gri.
type ==
"EGS_ASwitchedEnvelope" ||
392 gri.
type ==
"EGS_EnvelopeGeometry" ||
393 gri.
type ==
"EGS_FastEnvelope") {
396 EGS_BaseGeometry *base = EGS_BaseGeometry::getGeometry(gri.
children[idx]);
397 return base->regions();
402 }
else if (gri.
type ==
"EGS_CDGeometry") {
404 }
else if (gri.
type ==
"EGS_NDGeometry") {
405 return EGS_BaseGeometry::getGeometry(gri.
children[idx])->regions();
406 }
else if (gri.
type ==
"EGS_UnionGeometry") {
408 }
else if (gri.
type ==
"EGS_StackGeometry") {
412 return geom->regions();
419 EGS_BaseGeometry *g = EGS_BaseGeometry::getGeometry(root.name);
420 int nreg = g->regions();
421 gmap[root.name].name = root.name;
422 gmap[root.name].type = g->getType();
423 gmap[root.name].start = start;
424 gmap[root.name].end = start + nreg - 1;
425 gmap[root.name].nreg = nreg;
427 ordered.push_back(
gmap[root.name]);
428 for (
size_t i=0; i <
gmap[root.name].children.size(); i++) {
455 for (
int gg=0; gg <
ngeom; gg++) {
458 EGS_BaseGeometry *geom = EGS_BaseGeometry::getGeometry(ginfo.
name);
465 for (
int rr = ginfo.
start; rr <= ginfo.
end; rr++) {
494 return gri.
start + local.second;
499 return ir >= 0 && ir < nreg_total && global_ir_to_phant[ir] >= 0;
504 return ir >= 0 && ir < nreg_total && global_ir_to_source[ir] >= 0;
515 egsInformation(
"Total number of geometries = %d\n",
ngeom);
516 egsInformation(
"Total number of regions = %d\n",
nreg_total);
517 egsInformation(
"Simulation geometry = %s\n",
sim_geom_name.c_str());
520 egsInformation(
"Source geometries = %s\n", sgnames.c_str());
522 egsInformation(
"\nName | First Reg Idx | Last Reg Idx | Nreg \n%s\n",
string(80,
524 for (
int gg=0; gg <
ngeom; gg++) {
526 egsInformation(
"%-30s | %13d | %13d | %12d \n", gr.
name.c_str(), gr.
start, gr.
end, gr.
nreg);
528 egsInformation(
"%s\n",
string(80,
'-').c_str());
map< EGS_BaseGeometry *, GeomRegionInfo > geom_to_regioninfo
void getGeomRegs(Node, vector< GeomRegionInfo > &, int)
string source_envelope_name
vector< int > global_ir_to_local_ir
pointer for the geometry it belongs to
vector< GeomRegionInfo > ordered_geom_data
vector< EGS_BaseGeometry * > global_ir_to_geom
the source geometry index or -1 if not a source
int phantomFromRegion(int ir)
return the phantom index for this region number or -1 if region is not in a phantom
int localToGlobal(GeomRegT)
int initializeFromInput(EGS_Input *input)
Initialize the GeomInfo structure (ginfo) This function reads the geometry input block,...
Node build_tree(string root, vector< Node > &children)
vector< int > global_ir_to_source
the phantoms geometry index or -1 if not a phant
int ngeom
total number of geometries created
void setGeometryIndexes(EGS_BaseGeometry *sim_geom)
Setup all arrays required to decide which geometry/phantom a region is in and whether or not we are s...
vector< int > global_ir_to_phant
array of size nreg mapping global region number to
GeomRegT globalToLocal(int ir)
convert global region number to (EGS_BaseGeometry, local_reg_num) pair
int nreg_total
total number of regions in the simulation geometry
int globalToLocalReg(int ir)
convert global region number to local_reg_num
vector< string > getChildren(string name, EGS_Input *inp)
vector< string > source_names
vector< string > phantom_names
vector< string > getUnionChildren(EGS_Input *input)
vector< string > getAutoEnvelopeChildren(EGS_Input *input)
vector< string > getGEnvelopeChildren(EGS_Input *input)
vector< string > getGTransformedChildren(EGS_Input *input)
string join(const vector< string > &v, string delim)
pair< string, vector< int > > CDGeomRegType
int nregForSubDiv(GeomRegionInfo gri, int idx)
int maxNRegOfGeoms(vector< string > gnames, int start)
bool pairCompare(const CDGeomRegType &firstElem, const CDGeomRegType &secondElem)
vector< string > getCDChildren(EGS_Input *input)
vector< string > getNDChildren(EGS_Input *input)
string getGeomBaseName(EGS_Input *input)
int findGeomInVec(EGS_BaseGeometry *geom, vector< string > geoms)
vector< string > getGStackChildren(EGS_Input *input)
size_t countAutoEnvelopeInscribed(EGS_Input *input)
ginfo contains classes for organizing information about the geometries present in an egs_brachy simul...
pair< EGS_BaseGeometry *, int > GeomRegT
pair of geometry and local region number
a struct to contain elementary information aboud a geometry
vector< string > children