169 const char* posistr =
"position";
170 const char* setustr =
"setup";
171 const char* consstr =
"constant";
172 const char* varistr =
"variable";
173 const char* rotastr =
"rotation";
174 const char* scalstr =
"scale";
175 const char* elemstr =
"element";
176 const char* istpstr =
"isotope";
177 const char* matestr =
"material";
178 const char* volustr =
"volume";
179 const char* assestr =
"assembly";
180 const char* twtrstr =
"twistedtrap";
181 const char* cutTstr =
"cutTube";
182 const char* bboxstr =
"box";
183 const char* xtrustr =
"xtru";
184 const char* arb8str =
"arb8";
185 const char* tubestr =
"tube";
186 const char* conestr =
"cone";
187 const char* polystr =
"polycone";
188 const char* hypestr =
"hype";
189 const char* trapstr =
"trap";
190 const char* trdstr =
"trd";
191 const char* sphestr =
"sphere";
192 const char* orbstr =
"orb";
193 const char* parastr =
"para";
194 const char* torustr =
"torus";
195 const char* hedrstr =
"polyhedra";
196 const char* eltustr =
"eltube";
197 const char* subtstr =
"subtraction";
198 const char* uniostr =
"union";
199 const char* parbstr =
"paraboloid";
200 const char* intestr =
"intersection";
201 const char* reflstr =
"reflectedSolid";
202 const char* ellistr =
"ellipsoid";
203 const char* elcnstr =
"elcone";
204 const char* usrstr =
"userinfo";
206 Bool_t hasIsotopesExtended;
208 if ((strcmp(name, posistr)) == 0) {
210 }
else if ((strcmp(name, rotastr)) == 0) {
212 }
else if ((strcmp(name, scalstr)) == 0) {
214 }
else if ((strcmp(name, setustr)) == 0) {
216 }
else if ((strcmp(name, consstr)) == 0) {
218 }
else if ((strcmp(name, varistr)) == 0) {
223 else if (((strcmp(name,
"atom")) == 0) && ((strcmp(parent, elemstr)) == 0)) {
225 hasIsotopesExtended =
kFALSE;
226 node =
EleProcess(gdml, node, parentn, hasIsotopes, hasIsotopesExtended);
228 else if ((strcmp(name, elemstr) == 0) && !gdml->
HasAttr(node,
"Z")) {
230 hasIsotopesExtended =
kFALSE;
231 node =
EleProcess(gdml, node, parentn, hasIsotopes, hasIsotopesExtended);
234 else if ((strcmp(name, elemstr) == 0) && gdml->
HasAttr(node,
"Z")) {
236 if ((strcmp(gdml->
GetNodeName(childtmp),
"fraction") == 0) ){
238 hasIsotopesExtended =
kTRUE;
239 node =
EleProcess(gdml, node, parentn, hasIsotopes, hasIsotopesExtended);}
244 else if (((strcmp(name,
"atom")) == 0) && ((strcmp(parent, istpstr)) == 0)) {
249 else if ((strcmp(name, matestr)) == 0 && gdml->
HasAttr(node,
"Z")) {
256 atom = strcmp(gdml->
GetNodeName(childtmp),
"atom")==0;
259 int z = (atom) ? 1 : 0;
262 else if ((strcmp(name, matestr)) == 0 && !gdml->
HasAttr(node,
"Z")) {
268 else if ((strcmp(name, volustr)) == 0) {
270 }
else if ((strcmp(name, bboxstr)) == 0) {
271 node =
Box(gdml, node, attr);
272 }
else if ((strcmp(name, ellistr)) == 0) {
274 }
else if ((strcmp(name, elcnstr)) == 0) {
275 node =
ElCone(gdml, node, attr);
276 }
else if ((strcmp(name, cutTstr)) == 0) {
277 node =
CutTube(gdml, node, attr);
278 }
else if ((strcmp(name, arb8str)) == 0) {
279 node =
Arb8(gdml, node, attr);
280 }
else if ((strcmp(name, tubestr)) == 0) {
281 node =
Tube(gdml, node, attr);
282 }
else if ((strcmp(name, conestr)) == 0) {
283 node =
Cone(gdml, node, attr);
284 }
else if ((strcmp(name, polystr)) == 0) {
286 }
else if ((strcmp(name, trapstr)) == 0) {
287 node =
Trap(gdml, node, attr);
288 }
else if ((strcmp(name, trdstr)) == 0) {
289 node =
Trd(gdml, node, attr);
290 }
else if ((strcmp(name, sphestr)) == 0) {
291 node =
Sphere(gdml, node, attr);
292 }
else if ((strcmp(name, xtrustr)) == 0) {
293 node =
Xtru(gdml, node, attr);
294 }
else if ((strcmp(name, twtrstr)) == 0) {
296 }
else if ((strcmp(name, hypestr)) == 0) {
297 node =
Hype(gdml, node, attr);
298 }
else if ((strcmp(name, orbstr)) == 0) {
299 node =
Orb(gdml, node, attr);
300 }
else if ((strcmp(name, parastr)) == 0) {
301 node =
Para(gdml, node, attr);
302 }
else if ((strcmp(name, torustr)) == 0) {
303 node =
Torus(gdml, node, attr);
304 }
else if ((strcmp(name, eltustr)) == 0) {
305 node =
ElTube(gdml, node, attr);
306 }
else if ((strcmp(name, hedrstr)) == 0) {
308 }
else if ((strcmp(name, parbstr)) == 0) {
310 }
else if ((strcmp(name, subtstr)) == 0) {
311 node =
BooSolid(gdml, node, attr, 1);
312 }
else if ((strcmp(name, intestr)) == 0) {
313 node =
BooSolid(gdml, node, attr, 2);
314 }
else if ((strcmp(name, uniostr)) == 0) {
315 node =
BooSolid(gdml, node, attr, 3);
316 }
else if ((strcmp(name, reflstr)) == 0) {
318 }
else if ((strcmp(name, assestr)) == 0) {
320 }
else if ((strcmp(name, usrstr)) == 0) {
323 }
else if (((strcmp(name,
"gdml")) != 0) && ((strcmp(name,
"define")) != 0) &&
324 ((strcmp(name,
"element")) != 0) && ((strcmp(name,
"materials")) != 0) &&
325 ((strcmp(name,
"solids")) != 0) && ((strcmp(name,
"structure")) != 0) &&
326 ((strcmp(name,
"zplane")) != 0) && ((strcmp(name,
"first")) != 0) &&
327 ((strcmp(name,
"second")) != 0) && ((strcmp(name,
"twoDimVertex")) != 0) &&
328 ((strcmp(name,
"firstposition")) != 0) && ((strcmp(name,
"firstpositionref")) != 0) &&
329 ((strcmp(name,
"firstrotation")) != 0) && ((strcmp(name,
"firstrotationref")) != 0) &&
330 ((strcmp(name,
"section")) != 0) && ((strcmp(name,
"world")) != 0) &&
331 ((strcmp(name,
"isotope")) != 0)) {
332 std::cout <<
"Error: Unsupported GDML Tag Used :" << name <<
". Please Check Geometry/Schema." << std::endl;
365 if ((strcmp(axisString,
"kXAxis")) == 0) {
367 }
else if ((strcmp(axisString,
"kYAxis")) == 0) {
369 }
else if ((strcmp(axisString,
"kZAxis")) == 0) {
371 }
else if ((strcmp(axisString,
"kRho")) == 0) {
373 }
else if ((strcmp(axisString,
"kPhi")) == 0) {
391 if (index >= 0) stripped = stripped(0, index);
392 return stripped.
Data();
411 if (tempattr ==
"name") {
414 if (tempattr ==
"value") {
438 if (strcmp(unit,
"mm") == 0) {
440 }
else if (strcmp(unit,
"milimeter") == 0) {
442 }
else if (strcmp(unit,
"cm") == 0) {
444 }
else if (strcmp(unit,
"centimeter") == 0) {
446 }
else if (strcmp(unit,
"m") == 0) {
448 }
else if (strcmp(unit,
"meter") == 0) {
450 }
else if (strcmp(unit,
"km") == 0) {
451 retunit =
"100000.0";
452 }
else if (strcmp(unit,
"kilometer") == 0) {
453 retunit =
"100000.0";
454 }
else if (strcmp(unit,
"rad") == 0) {
456 }
else if (strcmp(unit,
"radian") == 0) {
458 }
else if (strcmp(unit,
"deg") == 0) {
460 }
else if (strcmp(unit,
"degree") == 0) {
462 }
else if (strcmp(unit,
"pi") == 0) {
464 }
else if (strcmp(unit,
"avogadro") == 0) {
467 Fatal(
"GetScale",
"Unit <%s> not known", unit);
486 if ((unit ==
"mm") || (unit ==
"milimeter")) {
488 }
else if ((unit ==
"cm") || (unit ==
"centimeter")) {
490 }
else if ((unit ==
"m") || (unit ==
"meter")) {
492 }
else if ((unit ==
"km") || (unit ==
"kilometer")) {
494 }
else if ((unit ==
"rad") || (unit ==
"radian")) {
496 }
else if ((unit ==
"deg") || (unit ==
"degree")) {
498 }
else if ((unit ==
"ev") || (unit ==
"electronvolt")) {
499 retunit = 0.000000001;
500 }
else if ((unit ==
"kev") || (unit ==
"kiloelectronvolt")) {
502 }
else if ((unit ==
"mev") || (unit ==
"megaelectronvolt")) {
504 }
else if ((unit ==
"gev") || (unit ==
"gigaelectronvolt")) {
506 }
else if (unit ==
"pi") {
508 }
else if (unit ==
"avogadro") {
511 Fatal(
"GetScaleVal",
"Unit <%s> not known", sunit);
523 double val = strtod(svalue, &end);
526 while( *end != 0 && isspace(*end) ) ++end;
530 if (*end == 0)
return val;
536 std::string expanded;
537 expanded.reserve(strlen(svalue) * 2);
541 const std::locale &loc = std::locale::classic();
544 const char *p = svalue;
547 for (; *p != 0; ++p) {
548 if (std::isalpha(*p, loc) || *p ==
'_') {
560 for (; *p != 0; ++p) {
561 if (!isalnum(*p, loc) && *p !=
'_') {
569 if (*p == 0) expanded +=
']';
572 TFormula f(
"TFormula", expanded.c_str());
580 Fatal(
"Value",
"Got bad value %lf from string '%s'", val, svalue);
607 if (tempattr ==
"name") {
609 }
else if (tempattr ==
"x") {
611 }
else if (tempattr ==
"y") {
613 }
else if (tempattr ==
"z") {
615 }
else if (tempattr ==
"unit") {
660 if (tempattr ==
"name") {
662 }
else if (tempattr ==
"x") {
664 }
else if (tempattr ==
"y") {
666 }
else if (tempattr ==
"z") {
668 }
else if (tempattr ==
"unit") {
717 if (tempattr ==
"name") {
719 }
else if (tempattr ==
"x") {
721 }
else if (tempattr ==
"y") {
723 }
else if (tempattr ==
"z") {
765 if (tempattr ==
"name") {
767 }
else if (tempattr ==
"z") {
769 }
else if (tempattr ==
"n") {
784 if (tempattr ==
"value") {
834 if (tempattr ==
"name") {
849 if ((strcmp(gdml->
GetNodeName(child),
"fraction")) == 0) {
857 if (tempattr ==
"n") {
859 }
else if (tempattr ==
"ref") {
867 fracmap[ref.
Data()] =
n;
873 for (fractions f = fracmap.begin(); f != fracmap.end(); ++f) {
885 if (hasIsotopesExtended) {
890 if (tempattr ==
"name") {
905 if ((strcmp(gdml->
GetNodeName(child),
"fraction")) == 0) {
913 if (tempattr ==
"n") {
915 }
else if (tempattr ==
"ref") {
923 fracmap[ref.
Data()] =
n;
929 for (fractions f = fracmap.begin(); f != fracmap.end(); ++f) {
946 if (tempattr ==
"name") {
949 }
else if (tempattr ==
"z") {
951 }
else if (tempattr ==
"formula") {
967 if (tempattr ==
"value") {
1006 static int medid = 0;
1009 Int_t ncompo = 0, mixflag = 2;
1022 while (child != 0) {
1025 if ((strcmp(gdml->
GetNodeName(child),
"atom")) == 0) {
1030 if (tempattr ==
"value") {
1037 if ((strcmp(gdml->
GetNodeName(child),
"D")) == 0) {
1042 if (tempattr ==
"value") {
1052 name = gdml->
GetAttr(node,
"name");
1059 tempconst = gdml->
GetAttr(node,
"Z");
1066 if (tmpname ==
"vacuum") {
1078 while (child != 0) {
1081 if ((strcmp(gdml->
GetNodeName(child),
"fraction")) == 0) {
1084 ncompo = ncompo + 1;
1090 if (tempattr ==
"n") {
1092 }
else if (tempattr ==
"ref") {
1102 fracmap[ref.
Data()] =
n;
1106 else if ((strcmp(gdml->
GetNodeName(child),
"composite")) == 0) {
1110 ncompo = ncompo + 1;
1116 if (tempattr ==
"n") {
1118 }
else if (tempattr ==
"ref") {
1128 fracmap[ref.
Data()] =
n;
1131 else if ((strcmp(gdml->
GetNodeName(child),
"D")) == 0) {
1136 if (tempattr ==
"value") {
1148 name = gdml->
GetAttr(node,
"name");
1158 for (fractions f = fracmap.begin(); f != fracmap.end(); ++f) {
1166 natoms = (
Int_t)f->second;
1168 mix->AddElement(
felemap[f->first], natoms);
1176 mix->AddElement(mattmp, weight);
1180 mix->AddElement(
felemap[f->first], weight);
1195 }
else if (mixflag == 0) {
1241 while (child != 0) {
1242 if ((strcmp(gdml->
GetNodeName(child),
"solidref")) == 0) {
1244 reftemp = gdml->
GetAttr(child,
"ref");
1251 solidname = reftemp;
1254 printf(
"Solid: %s, Not Yet Defined!\n", reftemp.
Data());
1258 if ((strcmp(gdml->
GetNodeName(child),
"materialref")) == 0) {
1259 reftemp = gdml->
GetAttr(child,
"ref");
1266 printf(
"Medium: %s, Not Yet Defined!\n", gdml->
GetAttr(child,
"ref"));
1273 name = gdml->
GetAttr(node,
"name");
1295 while (child != 0) {
1296 if ((strcmp(gdml->
GetNodeName(child),
"physvol")) == 0) {
1309 while (subchild != 0) {
1313 if (tempattr ==
"volumeref") {
1314 reftemp = gdml->
GetAttr(subchild,
"ref");
1321 else if (tempattr ==
"file") {
1322 const char* filevol;
1326 filevol = gdml->
GetAttr(subchild,
"volname");
1331 if (filedoc1 == 0) {
1364 else if (tempattr ==
"position") {
1367 reftemp = gdml->
GetAttr(subchild,
"name");
1372 }
else if (tempattr ==
"positionref") {
1373 reftemp = gdml->
GetAttr(subchild,
"ref");
1378 else std::cout <<
"ERROR! Physvol's position " << reftemp <<
" not found!" << std::endl;
1379 }
else if (tempattr ==
"rotation") {
1382 reftemp = gdml->
GetAttr(subchild,
"name");
1387 }
else if (tempattr ==
"rotationref") {
1388 reftemp = gdml->
GetAttr(subchild,
"ref");
1393 else std::cout <<
"ERROR! Physvol's rotation " << reftemp <<
" not found!" << std::endl;
1394 }
else if (tempattr ==
"scale") {
1397 reftemp = gdml->
GetAttr(subchild,
"name");
1402 }
else if (tempattr ==
"scaleref") {
1403 reftemp = gdml->
GetAttr(subchild,
"ref");
1408 else std::cout <<
"ERROR! Physvol's scale " << reftemp <<
" not found!" << std::endl;
1411 subchild = gdml->
GetNext(subchild);
1425 memset(scale3x3, 0, 9 *
sizeof(
Double_t));
1428 scale3x3[0] = diagonal[0];
1429 scale3x3[4] = diagonal[1];
1430 scale3x3[8] = diagonal[2];
1454 vol->
AddNode(lv, copynum, transform);
1457 }
else if ((strcmp(gdml->
GetNodeName(child),
"divisionvol")) == 0) {
1473 if (tempattr ==
"axis") {
1475 }
else if (tempattr ==
"number") {
1477 }
else if (tempattr ==
"width") {
1479 }
else if (tempattr ==
"offset") {
1481 }
else if (tempattr ==
"unit") {
1491 while (subchild != 0) {
1495 if (tempattr ==
"volumeref") {
1496 reftemp = gdml->
GetAttr(subchild,
"ref");
1500 divVolref = reftemp;
1503 subchild = gdml->
GetNext(subchild);
1529 Fatal(
"VolProcess",
"Cannot divide volume %s", vol->
GetName());
1540 else if ((strcmp(gdml->
GetNodeName(child),
"replicavol")) == 0) {
1560 if (tempattr ==
"number") {
1568 while (subchild != 0) {
1572 if (tempattr ==
"volumeref") {
1573 reftemp = gdml->
GetAttr(subchild,
"ref");
1577 divVolref = reftemp;
1580 if (tempattr ==
"replicate_along_axis") {
1581 subsubchild = gdml->
GetChild(subchild);
1583 while (subsubchild != 0) {
1584 if ((strcmp(gdml->
GetNodeName(subsubchild),
"width")) == 0) {
1589 if (tempattr ==
"value") {
1592 else if (tempattr ==
"unit"){
1599 else if ((strcmp(gdml->
GetNodeName(subsubchild),
"offset")) == 0) {
1604 if (tempattr ==
"value") {
1607 else if (tempattr ==
"unit"){
1613 else if ((strcmp(gdml->
GetNodeName(subsubchild),
"direction")) == 0) {
1618 if (tempattr ==
"x") {
1621 else if (tempattr ==
"y"){
1624 else if (tempattr ==
"z"){
1627 else if (tempattr ==
"rho"){
1630 else if (tempattr ==
"phi"){
1638 subsubchild = gdml->
GetNext(subsubchild);
1643 subchild = gdml->
GetNext(subchild);
1651 Double_t widthline = wvalue*retwunit;
1652 Double_t offsetline = ovalue*retounit;
1672 Fatal(
"VolProcess",
"Cannot divide volume %s", vol->
GetName());
1681 else if (strcmp(gdml->
GetNodeName(child),
"auxiliary") == 0) {
1682 TString auxType, auxUnit, auxValue;
1684 printf(
"Auxiliary values for volume %s\n",vol->
GetName());
1685 auxmap =
new TMap();
1697 printf(
" %s: %s\n", auxType.
Data(), auxValue.
Data());
1746 while (child != 0) {
1750 if (tempattr ==
"first") {
1751 reftemp = gdml->
GetAttr(child,
"ref");
1758 }
else if (tempattr ==
"second") {
1759 reftemp = gdml->
GetAttr(child,
"ref");
1766 }
else if (tempattr ==
"position") {
1769 reftemp = gdml->
GetAttr(child,
"name");
1774 }
else if (tempattr ==
"positionref") {
1775 reftemp = gdml->
GetAttr(child,
"ref");
1782 }
else if (tempattr ==
"rotation") {
1785 reftemp = gdml->
GetAttr(child,
"name");
1790 }
else if (tempattr ==
"rotationref") {
1791 reftemp = gdml->
GetAttr(child,
"ref");
1798 }
else if (tempattr ==
"firstposition") {
1801 reftemp = gdml->
GetAttr(child,
"name");
1806 }
else if (tempattr ==
"firstpositionref") {
1807 reftemp = gdml->
GetAttr(child,
"ref");
1814 }
else if (tempattr ==
"firstrotation") {
1817 reftemp = gdml->
GetAttr(child,
"name");
1822 }
else if (tempattr ==
"firstrotationref") {
1823 reftemp = gdml->
GetAttr(child,
"ref");
1838 if (!first || !second) {
1839 Fatal(
"BooSolid",
"Incomplete solid %s, missing shape components", name.
Data());
1867 TString nodename, auxtype, auxtypec, auxvalue, auxvaluec, auxunit, auxunitc;
1873 if (nodename ==
"auxiliary") {
1874 auxtype = gdml->
GetAttr(child,
"auxtype");
1875 auxvalue = gdml->
GetAttr(child,
"auxvalue");
1876 if (auxtype ==
"Region") {
1883 auxtypec = gdml->
GetAttr(subchild,
"auxtype");
1884 auxvaluec = gdml->
GetAttr(subchild,
"auxvalue");
1885 auxunitc = gdml->
GetAttr(subchild,
"auxunit");
1886 if (auxtypec ==
"volume") {
1888 if (region) region->
AddVolume(auxvaluec);
1892 if (region) region->
AddCut(auxtypec, value);
1894 subchild = gdml->
GetNext(subchild);
1940 while (child != 0) {
1941 if ((strcmp(gdml->
GetNodeName(child),
"physvol")) == 0) {
1950 while (subchild != 0) {
1954 if (tempattr ==
"volumeref") {
1955 reftemp = gdml->
GetAttr(subchild,
"ref");
1960 }
else if (tempattr ==
"positionref") {
1961 reftemp = gdml->
GetAttr(subchild,
"ref");
1968 }
else if (tempattr ==
"position") {
1971 reftemp = gdml->
GetAttr(subchild,
"name");
1976 }
else if (tempattr ==
"rotationref") {
1977 reftemp = gdml->
GetAttr(subchild,
"ref");
1984 }
else if (tempattr ==
"rotation") {
1987 reftemp = gdml->
GetAttr(subchild,
"name");
1994 subchild = gdml->
GetNext(subchild);
2000 assem->
AddNode(lv, copynum, matr);
2024 while (child != 0) {
2026 if ((strcmp(gdml->
GetNodeName(child),
"world") == 0)) {
2029 reftemp = gdml->
GetAttr(child,
"ref");
2066 if (tempattr ==
"name") {
2068 }
else if (tempattr ==
"x") {
2070 }
else if (tempattr ==
"y") {
2072 }
else if (tempattr ==
"z") {
2074 }
else if (tempattr ==
"lunit") {
2126 if (tempattr ==
"name") {
2128 }
else if (tempattr ==
"ax") {
2130 }
else if (tempattr ==
"by") {
2132 }
else if (tempattr ==
"cz") {
2134 }
else if (tempattr ==
"zcut1") {
2136 }
else if (tempattr ==
"zcut2") {
2138 }
else if (tempattr ==
"lunit") {
2162 z1 =
Value(zcut1)*retunit;
2167 z2 =
Value(zcut2)*retunit;
2175 origin[2] = 0.5 * (z1 + z2);
2210 if (tempattr ==
"name") {
2212 }
else if (tempattr ==
"dx") {
2214 }
else if (tempattr ==
"dy") {
2216 }
else if (tempattr ==
"zmax") {
2218 }
else if (tempattr ==
"zcut") {
2220 }
else if (tempattr ==
"lunit") {
2242 Info(
"ElCone",
"ERROR! Parameter zcut = %.12g is not set properly, elcone will not be imported.", z1);
2286 if (tempattr ==
"name") {
2288 }
else if (tempattr ==
"rlo") {
2290 }
else if (tempattr ==
"rhi") {
2292 }
else if (tempattr ==
"dz") {
2294 }
else if (tempattr ==
"lunit") {
2354 if (tempattr ==
"name") {
2356 }
else if (tempattr ==
"v1x") {
2358 }
else if (tempattr ==
"v1y") {
2360 }
else if (tempattr ==
"v2x") {
2362 }
else if (tempattr ==
"v2y") {
2364 }
else if (tempattr ==
"v3x") {
2366 }
else if (tempattr ==
"v3y") {
2368 }
else if (tempattr ==
"v4x") {
2370 }
else if (tempattr ==
"v4y") {
2372 }
else if (tempattr ==
"v5x") {
2374 }
else if (tempattr ==
"v5y") {
2376 }
else if (tempattr ==
"v6x") {
2378 }
else if (tempattr ==
"v6y") {
2380 }
else if (tempattr ==
"v7x") {
2382 }
else if (tempattr ==
"v7y") {
2384 }
else if (tempattr ==
"v8x") {
2386 }
else if (tempattr ==
"v8y") {
2388 }
else if (tempattr ==
"dz") {
2390 }
else if (tempattr ==
"lunit") {
2463 if (tempattr ==
"name") {
2465 }
else if (tempattr ==
"rmin") {
2467 }
else if (tempattr ==
"rmax") {
2469 }
else if (tempattr ==
"z") {
2471 }
else if (tempattr ==
"lunit") {
2473 }
else if (tempattr ==
"aunit") {
2475 }
else if (tempattr ==
"startphi") {
2477 }
else if (tempattr ==
"deltaphi") {
2496 Double_t endphideg = startphideg + deltaphideg;
2499 if (deltaphideg < 360.)
2545 if (tempattr ==
"name") {
2547 }
else if (tempattr ==
"rmin") {
2549 }
else if (tempattr ==
"rmax") {
2551 }
else if (tempattr ==
"z") {
2553 }
else if (tempattr ==
"lunit") {
2555 }
else if (tempattr ==
"aunit") {
2557 }
else if (tempattr ==
"startphi") {
2559 }
else if (tempattr ==
"deltaphi") {
2561 }
else if (tempattr ==
"lowx") {
2563 }
else if (tempattr ==
"lowy") {
2565 }
else if (tempattr ==
"lowz") {
2567 }
else if (tempattr ==
"highx") {
2569 }
else if (tempattr ==
"highy") {
2571 }
else if (tempattr ==
"highz") {
2589 Double_t deltaphiline =
Value(deltaphi)*retaunit + startphiline;
2643 if (tempattr ==
"name") {
2645 }
else if (tempattr ==
"rmin1") {
2647 }
else if (tempattr ==
"rmax1") {
2649 }
else if (tempattr ==
"rmin2") {
2651 }
else if (tempattr ==
"rmax2") {
2653 }
else if (tempattr ==
"z") {
2655 }
else if (tempattr ==
"lunit") {
2657 }
else if (tempattr ==
"aunit") {
2659 }
else if (tempattr ==
"startphi") {
2661 }
else if (tempattr ==
"deltaphi") {
2735 if (tempattr ==
"name") {
2737 }
else if (tempattr ==
"x1") {
2739 }
else if (tempattr ==
"x2") {
2741 }
else if (tempattr ==
"x3") {
2743 }
else if (tempattr ==
"x4") {
2745 }
else if (tempattr ==
"y1") {
2747 }
else if (tempattr ==
"y2") {
2749 }
else if (tempattr ==
"z") {
2751 }
else if (tempattr ==
"lunit") {
2753 }
else if (tempattr ==
"aunit") {
2755 }
else if (tempattr ==
"phi") {
2757 }
else if (tempattr ==
"theta") {
2759 }
else if (tempattr ==
"alpha1") {
2761 }
else if (tempattr ==
"alpha2") {
2828 if (tempattr ==
"name") {
2830 }
else if (tempattr ==
"x1") {
2832 }
else if (tempattr ==
"x2") {
2834 }
else if (tempattr ==
"y1") {
2836 }
else if (tempattr ==
"y2") {
2838 }
else if (tempattr ==
"z") {
2840 }
else if (tempattr ==
"lunit") {
2897 if (tempattr ==
"name") {
2899 }
else if (tempattr ==
"lunit") {
2901 }
else if (tempattr ==
"aunit") {
2903 }
else if (tempattr ==
"startphi") {
2905 }
else if (tempattr ==
"deltaphi") {
2923 while (child != 0) {
2924 numplanes = numplanes + 1;
2931 double ** table =
new double*[numplanes];
2932 for (i = 0; i < numplanes; i++) {
2933 table[i] =
new double[cols];
2939 while (child != 0) {
2940 if (strcmp(gdml->
GetNodeName(child),
"zplane") == 0) {
2952 if (tempattr ==
"rmin") {
2954 rminline =
Value(rmin)*retlunit;
2955 table[planeno][0] = rminline;
2956 }
else if (tempattr ==
"rmax") {
2958 rmaxline =
Value(rmax)*retlunit;
2959 table[planeno][1] = rmaxline;
2960 }
else if (tempattr ==
"z") {
2962 zline =
Value(z)*retlunit;
2963 table[planeno][2] = zline;
2968 planeno = planeno + 1;
2981 for (
int j = 0; j < numplanes; j++) {
2982 poly->
DefineSection(zno, table[j][2], table[j][0], table[j][1]);
2987 for (i = 0; i < numplanes; i++) {
3021 if (tempattr ==
"name") {
3023 }
else if (tempattr ==
"lunit") {
3025 }
else if (tempattr ==
"aunit") {
3027 }
else if (tempattr ==
"startphi") {
3029 }
else if (tempattr ==
"deltaphi") {
3031 }
else if (tempattr ==
"numsides") {
3050 while (child != 0) {
3051 numplanes = numplanes + 1;
3058 double ** table =
new double*[numplanes];
3059 for (i = 0; i < numplanes; i++) {
3060 table[i] =
new double[cols];
3066 while (child != 0) {
3067 if (strcmp(gdml->
GetNodeName(child),
"zplane") == 0) {
3078 if (tempattr ==
"rmin") {
3080 rminline =
Value(rmin)*retlunit;
3081 table[planeno][0] = rminline;
3082 }
else if (tempattr ==
"rmax") {
3084 rmaxline =
Value(rmax)*retlunit;
3085 table[planeno][1] = rmaxline;
3086 }
else if (tempattr ==
"z") {
3088 zline =
Value(z)*retlunit;
3089 table[planeno][2] = zline;
3095 planeno = planeno + 1;
3110 for (
int j = 0; j < numplanes; j++) {
3111 polyg->
DefineSection(zno, table[j][2], table[j][0], table[j][1]);
3116 for (i = 0; i < numplanes; i++) {
3149 if (tempattr ==
"name") {
3151 }
else if (tempattr ==
"rmin") {
3153 }
else if (tempattr ==
"rmax") {
3155 }
else if (tempattr ==
"lunit") {
3157 }
else if (tempattr ==
"aunit") {
3159 }
else if (tempattr ==
"startphi") {
3161 }
else if (tempattr ==
"deltaphi") {
3163 }
else if (tempattr ==
"starttheta") {
3165 }
else if (tempattr ==
"deltatheta") {
3182 Double_t deltaphiline = startphiline+
Value(deltaphi)*retaunit;
3184 Double_t deltathetaline = startthetaline +
Value(deltatheta)*retaunit;
3224 if (tempattr ==
"name") {
3226 }
else if (tempattr ==
"rmin") {
3228 }
else if (tempattr ==
"rmax") {
3230 }
else if (tempattr ==
"rtor") {
3232 }
else if (tempattr ==
"lunit") {
3234 }
else if (tempattr ==
"aunit") {
3236 }
else if (tempattr ==
"startphi") {
3238 }
else if (tempattr ==
"deltaphi") {
3294 if (tempattr ==
"name") {
3296 }
else if (tempattr ==
"rmin") {
3298 }
else if (tempattr ==
"rmax") {
3300 }
else if (tempattr ==
"z") {
3302 }
else if (tempattr ==
"lunit") {
3304 }
else if (tempattr ==
"aunit") {
3306 }
else if (tempattr ==
"inst") {
3308 }
else if (tempattr ==
"outst") {
3367 if (tempattr ==
"name") {
3369 }
else if (tempattr ==
"x") {
3371 }
else if (tempattr ==
"y") {
3373 }
else if (tempattr ==
"z") {
3375 }
else if (tempattr ==
"lunit") {
3377 }
else if (tempattr ==
"aunit") {
3379 }
else if (tempattr ==
"phi") {
3381 }
else if (tempattr ==
"theta") {
3383 }
else if (tempattr ==
"alpha") {
3450 if (tempattr ==
"name") {
3452 }
else if (tempattr ==
"x1") {
3454 }
else if (tempattr ==
"x2") {
3456 }
else if (tempattr ==
"x3") {
3458 }
else if (tempattr ==
"x4") {
3460 }
else if (tempattr ==
"y1") {
3462 }
else if (tempattr ==
"y2") {
3464 }
else if (tempattr ==
"z") {
3466 }
else if (tempattr ==
"lunit") {
3468 }
else if (tempattr ==
"aunit") {
3470 }
else if (tempattr ==
"phi") {
3472 }
else if (tempattr ==
"theta") {
3474 }
else if (tempattr ==
"alph") {
3479 }
else if (tempattr ==
"phitwist") {
3548 if (tempattr ==
"name") {
3550 }
else if (tempattr ==
"dx") {
3552 }
else if (tempattr ==
"dy") {
3554 }
else if (tempattr ==
"dz") {
3556 }
else if (tempattr ==
"lunit") {
3601 if (tempattr ==
"name") {
3603 }
else if (tempattr ==
"r") {
3605 }
else if (tempattr ==
"lunit") {
3658 if (tempattr ==
"name") {
3660 }
else if (tempattr ==
"lunit") {
3679 while (child != 0) {
3682 if (tempattr ==
"twoDimVertex") {
3683 noverts = noverts + 1;
3684 }
else if (tempattr ==
"section") {
3685 nosects = nosects + 1;
3694 double *vertx =
new double[noverts];
3695 double *verty =
new double[noverts];
3697 double ** section =
new double*[nosects];
3698 for (i = 0; i < nosects; i++) {
3699 section[i] =
new double[cols];
3706 while (child != 0) {
3707 if (strcmp(gdml->
GetNodeName(child),
"twoDimVertex") == 0) {
3716 if (tempattr ==
"x") {
3718 xline =
Value(x)*retlunit;
3719 vertx[vert] = xline;
3720 }
else if (tempattr ==
"y") {
3722 yline =
Value(y)*retlunit;
3723 verty[vert] = yline;
3732 else if (strcmp(gdml->
GetNodeName(child),
"section") == 0) {
3743 if (tempattr ==
"zOrder") {
3745 section[sect][0] =
Value(zorder);
3746 }
else if (tempattr ==
"zPosition") {
3748 zposline =
Value(zpos)*retlunit;
3749 section[sect][1] = zposline;
3750 }
else if (tempattr ==
"xOffset") {
3752 xoffline =
Value(xoff)*retlunit;
3753 section[sect][2] = xoffline;
3754 }
else if (tempattr ==
"yOffset") {
3756 yoffline =
Value(yoff)*retlunit;
3757 section[sect][3] = yoffline;
3758 }
else if (tempattr ==
"scalingFactor") {
3760 section[sect][4] =
Value(scale);
3775 for (
int j = 0; j < sect; j++) {
3776 xtru->
DefineSection((
int)section[j][0], section[j][1], section[j][2], section[j][3], section[j][4]);
3782 for (i = 0; i < nosects; i++) {
3783 delete [] section[i];
3801 std::cout <<
"WARNING! The reflectedSolid is obsolete! Use scale transformation instead!" << std::endl;
3821 if (tempattr ==
"name") {
3823 }
else if (tempattr ==
"sx") {
3825 }
else if (tempattr ==
"sy") {
3827 }
else if (tempattr ==
"sz") {
3829 }
else if (tempattr ==
"rx") {
3831 }
else if (tempattr ==
"ry") {
3833 }
else if (tempattr ==
"rz") {
3835 }
else if (tempattr ==
"dx") {
3837 }
else if (tempattr ==
"dy") {
3839 }
else if (tempattr ==
"dz") {
3841 }
else if (tempattr ==
"solid") {
3855 rot->RotateZ(-(
Value(rz)));
3856 rot->RotateY(-(
Value(ry)));
3857 rot->RotateX(-(
Value(rx)));
3859 if (atoi(sx) == -1) {
3860 rot->ReflectX(
kTRUE);
3862 if (atoi(sy) == -1) {
3863 rot->ReflectY(
kTRUE);
3865 if (atoi(sz) == -1) {
3866 rot->ReflectZ(
kTRUE);
virtual const char * GetName() const
Returns name of object.
XMLNodePointer_t UsrProcess(TXMLEngine *gdml, XMLNodePointer_t node)
User data to be processed.
XMLNodePointer_t ConProcess(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the define section of the GDML file, constants can be declared.
XMLNodePointer_t TwistTrap(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, a TwistTrap may be declared.
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
RotMap frotmap
Map containing position names and the TGeoTranslation for it.
XMLNodePointer_t Trd(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, a Trd may be declared.
MatMap fmatmap
Map containing element names and the TGeoElement for it.
Collectable string class.
void MultiplyLeft(const TGeoMatrix *left)
multiply to the left with an other transformation if right is identity matrix, just return ...
Gtra is a twisted trapezoid.
Geometrical transformation package.
XMLNodePointer_t Paraboloid(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, a Paraboloid may be declared.
XMLNodePointer_t Xtru(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, an Xtru may be declared.
virtual const Double_t * GetRotationMatrix() const =0
virtual void SetName(const char *name)
Set the name of the TNamed.
XMLNodePointer_t Reflection(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, a Reflected Solid may be declared when the ReflectedSolid key...
EleMap felemap
Map containing isotope names and the TGeoIsotope for it.
TGeoVolume, TGeoVolumeMulti, TGeoVolumeAssembly are the volume classes.
virtual void RotateX(Double_t angle)
Rotate about X axis of the master frame with angle expressed in degrees.
XMLNodePointer_t Cone(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, a cone may be declared.
void SetTranslation(const Double_t *vect)
void Add(TObject *obj)
This function may not be used (but we need to provide it since it is a pure virtual in TCollection)...
Class describing translations.
virtual void DefineSection(Int_t snum, Double_t z, Double_t x0=0., Double_t y0=0., Double_t scale=1.)
defines z position of a section plane, rmin and rmax at this z.
Int_t AddRegion(TGeoRegion *region)
Add a new region of volumes.
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
TString GetScale(const char *unit)
Throughout the GDML file, a unit can de specified.
XMLNodePointer_t GetNext(XMLNodePointer_t xmlnode, Bool_t realnode=kTRUE)
return next to xmlnode node if realnode==kTRUE, any special nodes in between will be skipped ...
Matrix class used for computing global transformations Should NOT be used for node definition...
Base class describing materials.
void Multiply(const TGeoMatrix *right)
multiply to the right with an other transformation if right is identity matrix, just return ...
XMLNodePointer_t IsoProcess(TXMLEngine *gdml, XMLNodePointer_t node, XMLNodePointer_t parentn)
In the material section of the GDML file, an isotope may be declared.
XMLNodePointer_t Polycone(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, a Polycone may be declared.
void ToLower()
Change string to lower-case.
void SetSkipComments(Bool_t on=kTRUE)
void ReplayCreation(const TGeoVolume *other)
Recreate the content of the other volume without pointer copying.
A shape scaled by a TGeoScale transformation.
void box(Int_t pat, Double_t x1, Double_t y1, Double_t x2, Double_t y2)
virtual const Double_t * GetScale() const
XMLAttrPointer_t GetNextAttr(XMLAttrPointer_t xmlattr)
return next attribute in the list
TGeoHMatrix Inverse() const
Return a temporary inverse of this.
void FreeDoc(XMLDocPointer_t xmldoc)
frees allocated document data and deletes document itself
double GetScaleVal(const char *unit)
Throughout the GDML file, a unit can de specified.
TList * GetListOfMaterials() const
virtual TObject * FindObject(const char *name) const
Delete a TObjLink object.
ReflectionsMap freflectmap
Map containing volume names and the TGeoVolume for it.
Int_t GetNdaughters() const
const char * fCurrentFile
XMLNodePointer_t SclProcess(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the define section of the GDML file, rotations can be declared.
This class contains the implementation of the GDML parser associated to all the supported GDML elemen...
TObject * Last() const
Return the object in the last filled slot. Returns 0 if no entries.
static const double x2[5]
XMLNodePointer_t BooSolid(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr, int num)
In the solid section of the GDML file, boolean solids can be declared.
double Evaluate(const char *evalline)
Takes a string containing a mathematical expression and returns the value of the expression.
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString...
A phi segment of a conical tube.
The TNamed class is the base class for all named ROOT classes.
TGeoMatrix * GetMatrix()
This accessor method returns the matrix.
TGeoVolume * GDMLReadFile(const char *filename="test.gdml")
Creates the new instance of the XMLEngine called 'gdml', using the filename >> then parses the file a...
void AddIsotope(TGeoIsotope *isotope, Double_t relativeAbundance)
Add an isotope for this element. All isotopes have to be isotopes of the same element.
Base class for chemical elements.
static const double x4[22]
XMLNodePointer_t Arb8(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, an Arb8 may be declared.
TGeoMedium * GetMedium() const
double Value(const char *svalue) const
Convert number in string format to double value.
virtual void SetVertex(Int_t vnum, Double_t x, Double_t y)
Set values for a given vertex.
TRAP is a general trapezoid, i.e.
virtual void RotateY(Double_t angle)
Rotate about Y axis of the master frame with angle expressed in degrees.
FileMap ffilemap
Map containing reflected volume names and the solid ref for it.
ConstMap fconsts
Map containing files parsed during entire parsing, with their world volume name.
virtual const Double_t * GetTranslation() const
static constexpr double second
virtual TGeoVolume * Divide(const char *divname, Int_t iaxis, Int_t ndiv, Double_t start, Double_t step, Int_t numed=0, Option_t *option="")
Division a la G3.
This class is a helper class for TGDMLParse.
const char * GetNodeName(XMLNodePointer_t xmlnode)
returns name of xmlnode
XMLNodePointer_t CutTube(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, a Cut Tube may be declared.
virtual void AddNode(TGeoVolume *vol, Int_t copy_no, TGeoMatrix *mat=0, Option_t *option="")
Add a TGeoNode to the list of nodes.
XMLNodePointer_t Sphere(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, a Sphere may be declared.
virtual const Double_t * GetRotationMatrix() const
XMLNodePointer_t Orb(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, an Orb may be declared.
Class handling Boolean composition of shapes.
A trapezoid with both x and y lengths varying with z.
XMLNodePointer_t PosProcess(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the define section of the GDML file, positions can be declared.
XMLNodePointer_t Torus(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, a Torus may be declared.
XMLNodePointer_t Box(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, a box may be declared.
XMLNodePointer_t Ellipsoid(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, an ellipsoid may be declared.
Base abstract class for all shapes.
void ShiftToNext(XMLNodePointer_t &xmlnode, Bool_t realnode=kTRUE)
shifts specified node to next if realnode==kTRUE, any special nodes in between will be skipped ...
std::map< std::string, double > FracMap
Class describing rotation + translation.
XMLNodePointer_t Para(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, a Para may be declared.
XMLNodePointer_t Trap(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, a Trap may be declared.
Regions are groups of volumes having a common set of user tracking cuts.
Hyperboloid class defined by 5 parameters.
const char * GetAttrValue(XMLAttrPointer_t xmlattr)
return value of attribute
XMLNodePointer_t RotProcess(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the define section of the GDML file, rotations can be declared.
XMLAttrPointer_t GetFirstAttr(XMLNodePointer_t xmlnode)
return first attribute in the list, namespace (if exists) will be skipped
TXMLEngine * fFileEngine[20]
XMLNodePointer_t Hype(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, a Hype may be declared.
IsoMap fisomap
Map containing scale names and the TGeoScale for it.
virtual void AddNode(TGeoVolume *vol, Int_t copy_no, TGeoMatrix *mat=0, Option_t *option="")
Add a component to the assembly.
void SetUserExtension(TGeoExtension *ext)
Connect user-defined extension to the volume.
virtual void RotateZ(Double_t angle)
Rotate about Z axis of the master frame with angle expressed in degrees.
XMLNodePointer_t TopProcess(TXMLEngine *gdml, XMLNodePointer_t node)
In the setup section of the GDML file, the top volume need to be declared.
Class describing rotations.
Bool_t HasAttr(XMLNodePointer_t xmlnode, const char *name)
checks if node has attribute of specified name
A tube segment cut with 2 planes.
XMLDocPointer_t ParseFile(const char *filename, Int_t maxbuf=100000)
Parses content of file and tries to produce xml structures.
An extrusion with fixed outline shape in x-y and a sequence of z extents (segments).
Class describing scale transformations.
static const double x1[5]
XMLNodePointer_t Polyhedra(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, a Polyhedra may be declared.
R__EXTERN TGeoManager * gGeoManager
const char * GetAttr(XMLNodePointer_t xmlnode, const char *name)
returns value of attribute for xmlnode
TMap implements an associative array of (key,value) pairs using a THashTable for efficient retrieval ...
MixMap fmixmap
Map containing medium names and the TGeoMedium for it.
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
void AddVolume(TGeoVolume *vol)
Reference counted extension which has a pointer to and owns a user defined TObject.
Int_t SetAxis(const char *axisString)
When using the 'divide' process in the geometry this function sets the variable 'axis' depending on w...
An arbitrary trapezoid with less than 8 vertices standing on two parallel planes perpendicular to Z a...
Media are used to store properties related to tracking and which are useful only when using geometry ...
const char * NameShort(const char *name)
This function looks thru a string for the chars '0x' next to each other, when it finds this...
void SetMatrix(const Double_t *rot)
MedMap fmedmap
Map containing material names and the TGeoMaterial for it.
you should not use this method at all Int_t Int_t z
constexpr Double_t RadToDeg()
SclMap fsclmap
Map containing rotation names and the TGeoRotation for it.
SolMap fsolmap
Map containing mixture names and the TGeoMixture for it.
const char * ParseGDML(TXMLEngine *gdml, XMLNodePointer_t node)
This function recursively moves thru the DOM tree of the GDML file.
ReflVolMap freflvolmap
Map containing reflection names and the TGDMLRefl for it - containing refl matrix.
VolMap fvolmap
Map containing solid names and the TGeoShape for it.
XMLNodePointer_t GetChild(XMLNodePointer_t xmlnode, Bool_t realnode=kTRUE)
returns first child of xmlnode
Base class for Boolean operations between two shapes.
XMLNodePointer_t GetParent(XMLNodePointer_t xmlnode)
returns parent of xmlnode
void SetRotation(const Double_t *matrix)
XMLNodePointer_t DocGetRootElement(XMLDocPointer_t xmldoc)
returns root node of document
XMLNodePointer_t ElTube(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, a ElTube may be declared.
virtual void DefineSection(Int_t snum, Double_t z, Double_t rmin, Double_t rmax)
Defines z position of a section plane, rmin and rmax at this z.
virtual Double_t GetAxisRange(Int_t iaxis, Double_t &xlo, Double_t &xhi) const =0
ReflSolidMap freflsolidmap
Map containing reflection names and the Solid name ir references to.
XMLNodePointer_t MatProcess(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr, int z)
In the materials section of the GDML file, materials can be declared.
XMLNodePointer_t EleProcess(TXMLEngine *gdml, XMLNodePointer_t node, XMLNodePointer_t parentn, Bool_t hasIsotopes, Bool_t hasIsotopesExtended)
When the element keyword is found, this function is called, and the name and values of the element ar...
virtual void Fatal(const char *method, const char *msgfmt,...) const
Issue fatal error message.
TGeoShape * GetShape() const
XMLNodePointer_t Tube(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, a Tube may be declared.
void AddCut(const char *name, Double_t cut)
Add cut to the region.
XMLNodePointer_t AssProcess(TXMLEngine *gdml, XMLNodePointer_t node)
In the structure section of the GDML file, assembly volumes can be declared.
XMLNodePointer_t VolProcess(TXMLEngine *gdml, XMLNodePointer_t node)
In the structure section of the GDML file, volumes can be declared.
const char * GetAttrName(XMLAttrPointer_t xmlattr)
return name of the attribute
XMLNodePointer_t ElCone(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, an elliptical cone may be declared.
Bool_t DefinePolygon(Int_t nvert, const Double_t *xv, const Double_t *yv)
Creates the polygon representing the blueprint of any Xtru section.
static const double x3[11]
const char * Data() const