143 fFileEngine[fFILENO] = gdml;
144 fStartFile = filename;
145 fCurrentFile = filename;
148 ParseGDML(gdml, mainnode);
172 const char* posistr =
"position";
173 const char* setustr =
"setup";
174 const char* consstr =
"constant";
175 const char* varistr =
"variable";
176 const char* rotastr =
"rotation";
177 const char* scalstr =
"scale";
178 const char* elemstr =
"element";
179 const char* istpstr =
"isotope";
180 const char* matestr =
"material";
181 const char* volustr =
"volume";
182 const char* assestr =
"assembly";
183 const char* twtrstr =
"twistedtrap";
184 const char* cutTstr =
"cutTube";
185 const char* bboxstr =
"box";
186 const char* xtrustr =
"xtru";
187 const char* arb8str =
"arb8";
188 const char* tubestr =
"tube";
189 const char* conestr =
"cone";
190 const char* polystr =
"polycone";
191 const char* hypestr =
"hype";
192 const char* trapstr =
"trap";
193 const char* trdstr =
"trd";
194 const char* sphestr =
"sphere";
195 const char* orbstr =
"orb";
196 const char* parastr =
"para";
197 const char* torustr =
"torus";
198 const char* hedrstr =
"polyhedra";
199 const char* eltustr =
"eltube";
200 const char* subtstr =
"subtraction";
201 const char* uniostr =
"union";
202 const char* parbstr =
"paraboloid";
203 const char* intestr =
"intersection";
204 const char* reflstr =
"reflectedSolid";
205 const char* ellistr =
"ellipsoid";
206 const char* elcnstr =
"elcone";
207 const char* usrstr =
"userinfo";
209 Bool_t hasIsotopesExtended;
211 if ((strcmp(name, posistr)) == 0) {
213 }
else if ((strcmp(name, rotastr)) == 0) {
215 }
else if ((strcmp(name, scalstr)) == 0) {
217 }
else if ((strcmp(name, setustr)) == 0) {
219 }
else if ((strcmp(name, consstr)) == 0) {
221 }
else if ((strcmp(name, varistr)) == 0) {
226 else if (((strcmp(name,
"atom")) == 0) && ((strcmp(parent, elemstr)) == 0)) {
228 hasIsotopesExtended =
kFALSE;
229 node =
EleProcess(gdml, node, parentn, hasIsotopes, hasIsotopesExtended);
231 else if ((strcmp(name, elemstr) == 0) && !gdml->
HasAttr(node,
"Z")) {
233 hasIsotopesExtended =
kFALSE;
234 node =
EleProcess(gdml, node, parentn, hasIsotopes, hasIsotopesExtended);
237 else if ((strcmp(name, elemstr) == 0) && gdml->
HasAttr(node,
"Z")) {
239 if ((strcmp(gdml->
GetNodeName(childtmp),
"fraction") == 0) ){
241 hasIsotopesExtended =
kTRUE;
242 node =
EleProcess(gdml, node, parentn, hasIsotopes, hasIsotopesExtended);}
247 else if (((strcmp(name,
"atom")) == 0) && ((strcmp(parent, istpstr)) == 0)) {
252 else if ((strcmp(name, matestr)) == 0 && gdml->
HasAttr(node,
"Z")) {
259 atom = strcmp(gdml->
GetNodeName(childtmp),
"atom")==0;
262 int z = (atom) ? 1 : 0;
265 else if ((strcmp(name, matestr)) == 0 && !gdml->
HasAttr(node,
"Z")) {
271 else if ((strcmp(name, volustr)) == 0) {
273 }
else if ((strcmp(name, bboxstr)) == 0) {
274 node =
Box(gdml, node, attr);
275 }
else if ((strcmp(name, ellistr)) == 0) {
277 }
else if ((strcmp(name, elcnstr)) == 0) {
278 node =
ElCone(gdml, node, attr);
279 }
else if ((strcmp(name, cutTstr)) == 0) {
280 node =
CutTube(gdml, node, attr);
281 }
else if ((strcmp(name, arb8str)) == 0) {
282 node =
Arb8(gdml, node, attr);
283 }
else if ((strcmp(name, tubestr)) == 0) {
284 node =
Tube(gdml, node, attr);
285 }
else if ((strcmp(name, conestr)) == 0) {
286 node =
Cone(gdml, node, attr);
287 }
else if ((strcmp(name, polystr)) == 0) {
289 }
else if ((strcmp(name, trapstr)) == 0) {
290 node =
Trap(gdml, node, attr);
291 }
else if ((strcmp(name, trdstr)) == 0) {
292 node =
Trd(gdml, node, attr);
293 }
else if ((strcmp(name, sphestr)) == 0) {
294 node =
Sphere(gdml, node, attr);
295 }
else if ((strcmp(name, xtrustr)) == 0) {
296 node =
Xtru(gdml, node, attr);
297 }
else if ((strcmp(name, twtrstr)) == 0) {
299 }
else if ((strcmp(name, hypestr)) == 0) {
300 node =
Hype(gdml, node, attr);
301 }
else if ((strcmp(name, orbstr)) == 0) {
302 node =
Orb(gdml, node, attr);
303 }
else if ((strcmp(name, parastr)) == 0) {
304 node =
Para(gdml, node, attr);
305 }
else if ((strcmp(name, torustr)) == 0) {
306 node =
Torus(gdml, node, attr);
307 }
else if ((strcmp(name, eltustr)) == 0) {
308 node =
ElTube(gdml, node, attr);
309 }
else if ((strcmp(name, hedrstr)) == 0) {
311 }
else if ((strcmp(name, parbstr)) == 0) {
313 }
else if ((strcmp(name, subtstr)) == 0) {
314 node =
BooSolid(gdml, node, attr, 1);
315 }
else if ((strcmp(name, intestr)) == 0) {
316 node =
BooSolid(gdml, node, attr, 2);
317 }
else if ((strcmp(name, uniostr)) == 0) {
318 node =
BooSolid(gdml, node, attr, 3);
319 }
else if ((strcmp(name, reflstr)) == 0) {
321 }
else if ((strcmp(name, assestr)) == 0) {
323 }
else if ((strcmp(name, usrstr)) == 0) {
326 }
else if (((strcmp(name,
"gdml")) != 0) && ((strcmp(name,
"define")) != 0) &&
327 ((strcmp(name,
"element")) != 0) && ((strcmp(name,
"materials")) != 0) &&
328 ((strcmp(name,
"solids")) != 0) && ((strcmp(name,
"structure")) != 0) &&
329 ((strcmp(name,
"zplane")) != 0) && ((strcmp(name,
"first")) != 0) &&
330 ((strcmp(name,
"second")) != 0) && ((strcmp(name,
"twoDimVertex")) != 0) &&
331 ((strcmp(name,
"firstposition")) != 0) && ((strcmp(name,
"firstpositionref")) != 0) &&
332 ((strcmp(name,
"firstrotation")) != 0) && ((strcmp(name,
"firstrotationref")) != 0) &&
333 ((strcmp(name,
"section")) != 0) && ((strcmp(name,
"world")) != 0) &&
334 ((strcmp(name,
"isotope")) != 0)) {
335 std::cout <<
"Error: Unsupported GDML Tag Used :" << name <<
". Please Check Geometry/Schema." << std::endl;
367 if ((strcmp(axisString,
"kXAxis")) == 0) {
369 }
else if ((strcmp(axisString,
"kYAxis")) == 0) {
371 }
else if ((strcmp(axisString,
"kZAxis")) == 0) {
373 }
else if ((strcmp(axisString,
"kRho")) == 0) {
375 }
else if ((strcmp(axisString,
"kPhi")) == 0) {
393 if (index >= 0) stripped = stripped(0, index);
394 return stripped.
Data();
413 if (tempattr ==
"name") {
416 if (tempattr ==
"value") {
440 if (strcmp(unit,
"mm") == 0) {
442 }
else if (strcmp(unit,
"milimeter") == 0) {
444 }
else if (strcmp(unit,
"cm") == 0) {
446 }
else if (strcmp(unit,
"centimeter") == 0) {
448 }
else if (strcmp(unit,
"m") == 0) {
450 }
else if (strcmp(unit,
"meter") == 0) {
452 }
else if (strcmp(unit,
"km") == 0) {
453 retunit =
"100000.0";
454 }
else if (strcmp(unit,
"kilometer") == 0) {
455 retunit =
"100000.0";
456 }
else if (strcmp(unit,
"rad") == 0) {
458 }
else if (strcmp(unit,
"radian") == 0) {
460 }
else if (strcmp(unit,
"deg") == 0) {
462 }
else if (strcmp(unit,
"degree") == 0) {
464 }
else if (strcmp(unit,
"pi") == 0) {
466 }
else if (strcmp(unit,
"avogadro") == 0) {
469 Fatal(
"GetScale",
"Unit <%s> not known", unit);
488 if ((unit ==
"mm") || (unit ==
"milimeter")) {
490 }
else if ((unit ==
"cm") || (unit ==
"centimeter")) {
492 }
else if ((unit ==
"m") || (unit ==
"meter")) {
494 }
else if ((unit ==
"km") || (unit ==
"kilometer")) {
496 }
else if ((unit ==
"rad") || (unit ==
"radian")) {
498 }
else if ((unit ==
"deg") || (unit ==
"degree")) {
500 }
else if ((unit ==
"ev") || (unit ==
"electronvolt")) {
501 retunit = 0.000000001;
502 }
else if ((unit ==
"kev") || (unit ==
"kiloelectronvolt")) {
504 }
else if ((unit ==
"mev") || (unit ==
"megaelectronvolt")) {
506 }
else if ((unit ==
"gev") || (unit ==
"gigaelectronvolt")) {
508 }
else if (unit ==
"pi") {
510 }
else if (unit ==
"avogadro") {
513 Fatal(
"GetScaleVal",
"Unit <%s> not known", sunit);
525 double val = strtod(svalue, &end);
528 while( *end != 0 && isspace(*end) ) ++end;
532 if(*end == 0)
return val;
538 std::string expanded;
539 expanded.reserve(strlen(svalue)*2);
543 const std::locale& loc = std::locale::classic();
546 const char* p = svalue;
550 if(std::isalpha(*p, loc) || *p ==
'_'){
563 if(!isalnum(*p, loc) && *p !=
'_'){
571 if(*p == 0) expanded +=
']';
574 TFormula f(
"TFormula", expanded.c_str());
577 for(
auto it:
fconsts)
f.SetParameter(it.first.c_str(), it.second);
582 Fatal(
"Value",
"Got bad value %lf from string '%s'", val, svalue);
609 if (tempattr ==
"name") {
611 }
else if (tempattr ==
"x") {
613 }
else if (tempattr ==
"y") {
615 }
else if (tempattr ==
"z") {
617 }
else if (tempattr ==
"unit") {
662 if (tempattr ==
"name") {
664 }
else if (tempattr ==
"x") {
666 }
else if (tempattr ==
"y") {
668 }
else if (tempattr ==
"z") {
670 }
else if (tempattr ==
"unit") {
719 if (tempattr ==
"name") {
721 }
else if (tempattr ==
"x") {
723 }
else if (tempattr ==
"y") {
725 }
else if (tempattr ==
"z") {
767 if (tempattr ==
"name") {
769 }
else if (tempattr ==
"z") {
771 }
else if (tempattr ==
"n") {
786 if (tempattr ==
"value") {
838 if (tempattr ==
"name") {
853 if ((strcmp(gdml->
GetNodeName(child),
"fraction")) == 0) {
861 if (tempattr ==
"n") {
863 }
else if (tempattr ==
"ref") {
871 fracmap[ref.
Data()] =
n;
877 for (fractions
f = fracmap.begin();
f != fracmap.end();
f++) {
889 if (hasIsotopesExtended) {
894 if (tempattr ==
"name") {
909 if ((strcmp(gdml->
GetNodeName(child),
"fraction")) == 0) {
917 if (tempattr ==
"n") {
919 }
else if (tempattr ==
"ref") {
927 fracmap[ref.
Data()] =
n;
933 for (fractions
f = fracmap.begin();
f != fracmap.end();
f++) {
952 if (tempattr ==
"name") {
955 }
else if (tempattr ==
"z") {
957 }
else if (tempattr ==
"formula") {
973 if (tempattr ==
"value") {
1012 static int medid = 0;
1015 Int_t ncompo = 0, mixflag = 2;
1028 while (child != 0) {
1031 if ((strcmp(gdml->
GetNodeName(child),
"atom")) == 0) {
1036 if (tempattr ==
"value") {
1043 if ((strcmp(gdml->
GetNodeName(child),
"D")) == 0) {
1048 if (tempattr ==
"value") {
1058 name = gdml->
GetAttr(node,
"name");
1065 tempconst = gdml->
GetAttr(node,
"Z");
1072 if (tmpname ==
"vacuum") {
1084 while (child != 0) {
1087 if ((strcmp(gdml->
GetNodeName(child),
"fraction")) == 0) {
1090 ncompo = ncompo + 1;
1096 if (tempattr ==
"n") {
1098 }
else if (tempattr ==
"ref") {
1108 fracmap[ref.
Data()] =
n;
1112 else if ((strcmp(gdml->
GetNodeName(child),
"composite")) == 0) {
1116 ncompo = ncompo + 1;
1122 if (tempattr ==
"n") {
1124 }
else if (tempattr ==
"ref") {
1134 fracmap[ref.
Data()] =
n;
1137 else if ((strcmp(gdml->
GetNodeName(child),
"D")) == 0) {
1142 if (tempattr ==
"value") {
1154 name = gdml->
GetAttr(node,
"name");
1164 for (fractions
f = fracmap.begin();
f != fracmap.end();
f++) {
1172 natoms = (
Int_t)
f->second;
1174 mix->AddElement(
felemap[
f->first], natoms);
1182 mix->AddElement(mattmp, weight);
1186 mix->AddElement(
felemap[
f->first], weight);
1201 }
else if (mixflag == 0) {
1247 while (child != 0) {
1248 if ((strcmp(gdml->
GetNodeName(child),
"solidref")) == 0) {
1250 reftemp = gdml->
GetAttr(child,
"ref");
1257 solidname = reftemp;
1260 printf(
"Solid: %s, Not Yet Defined!\n", reftemp.
Data());
1264 if ((strcmp(gdml->
GetNodeName(child),
"materialref")) == 0) {
1265 reftemp = gdml->
GetAttr(child,
"ref");
1272 printf(
"Medium: %s, Not Yet Defined!\n", gdml->
GetAttr(child,
"ref"));
1279 name = gdml->
GetAttr(node,
"name");
1301 while (child != 0) {
1302 if ((strcmp(gdml->
GetNodeName(child),
"physvol")) == 0) {
1315 while (subchild != 0) {
1319 if (tempattr ==
"volumeref") {
1320 reftemp = gdml->
GetAttr(subchild,
"ref");
1327 else if (tempattr ==
"file") {
1328 const char* filevol;
1332 filevol = gdml->
GetAttr(subchild,
"volname");
1337 if (filedoc1 == 0) {
1370 else if (tempattr ==
"position") {
1373 reftemp = gdml->
GetAttr(subchild,
"name");
1378 }
else if (tempattr ==
"positionref") {
1379 reftemp = gdml->
GetAttr(subchild,
"ref");
1384 else std::cout <<
"ERROR! Physvol's position " << reftemp <<
" not found!" << std::endl;
1385 }
else if (tempattr ==
"rotation") {
1388 reftemp = gdml->
GetAttr(subchild,
"name");
1393 }
else if (tempattr ==
"rotationref") {
1394 reftemp = gdml->
GetAttr(subchild,
"ref");
1399 else std::cout <<
"ERROR! Physvol's rotation " << reftemp <<
" not found!" << std::endl;
1400 }
else if (tempattr ==
"scale") {
1403 reftemp = gdml->
GetAttr(subchild,
"name");
1408 }
else if (tempattr ==
"scaleref") {
1409 reftemp = gdml->
GetAttr(subchild,
"ref");
1414 else std::cout <<
"ERROR! Physvol's scale " << reftemp <<
" not found!" << std::endl;
1417 subchild = gdml->
GetNext(subchild);
1431 memset(scale3x3, 0, 9 *
sizeof(
Double_t));
1434 scale3x3[0] = diagonal[0];
1435 scale3x3[4] = diagonal[1];
1436 scale3x3[8] = diagonal[2];
1460 vol->
AddNode(lv, copynum, transform);
1463 }
else if ((strcmp(gdml->
GetNodeName(child),
"divisionvol")) == 0) {
1479 if (tempattr ==
"axis") {
1481 }
else if (tempattr ==
"number") {
1483 }
else if (tempattr ==
"width") {
1485 }
else if (tempattr ==
"offset") {
1487 }
else if (tempattr ==
"unit") {
1497 while (subchild != 0) {
1501 if (tempattr ==
"volumeref") {
1502 reftemp = gdml->
GetAttr(subchild,
"ref");
1506 divVolref = reftemp;
1509 subchild = gdml->
GetNext(subchild);
1535 Fatal(
"VolProcess",
"Cannot divide volume %s", vol->
GetName());
1546 else if ((strcmp(gdml->
GetNodeName(child),
"replicavol")) == 0) {
1566 if (tempattr ==
"number") {
1574 while (subchild != 0) {
1578 if (tempattr ==
"volumeref") {
1579 reftemp = gdml->
GetAttr(subchild,
"ref");
1583 divVolref = reftemp;
1586 if (tempattr ==
"replicate_along_axis") {
1587 subsubchild = gdml->
GetChild(subchild);
1589 while (subsubchild != 0) {
1590 if ((strcmp(gdml->
GetNodeName(subsubchild),
"width")) == 0) {
1595 if (tempattr ==
"value") {
1598 else if (tempattr ==
"unit"){
1605 else if ((strcmp(gdml->
GetNodeName(subsubchild),
"offset")) == 0) {
1610 if (tempattr ==
"value") {
1613 else if (tempattr ==
"unit"){
1619 else if ((strcmp(gdml->
GetNodeName(subsubchild),
"direction")) == 0) {
1624 if (tempattr ==
"x") {
1627 else if (tempattr ==
"y"){
1630 else if (tempattr ==
"z"){
1633 else if (tempattr ==
"rho"){
1636 else if (tempattr ==
"phi"){
1644 subsubchild = gdml->
GetNext(subsubchild);
1649 subchild = gdml->
GetNext(subchild);
1657 Double_t widthline = wvalue*retwunit;
1658 Double_t offsetline = ovalue*retounit;
1678 Fatal(
"VolProcess",
"Cannot divide volume %s", vol->
GetName());
1687 else if (strcmp(gdml->
GetNodeName(child),
"auxiliary") == 0) {
1688 TString auxType, auxUnit, auxValue;
1690 printf(
"Auxiliary values for volume %s\n",vol->
GetName());
1691 auxmap =
new TMap();
1703 printf(
" %s: %s\n", auxType.
Data(), auxValue.
Data());
1752 while (child != 0) {
1756 if (tempattr ==
"first") {
1757 reftemp = gdml->
GetAttr(child,
"ref");
1764 }
else if (tempattr ==
"second") {
1765 reftemp = gdml->
GetAttr(child,
"ref");
1772 }
else if (tempattr ==
"position") {
1775 reftemp = gdml->
GetAttr(child,
"name");
1780 }
else if (tempattr ==
"positionref") {
1781 reftemp = gdml->
GetAttr(child,
"ref");
1788 }
else if (tempattr ==
"rotation") {
1791 reftemp = gdml->
GetAttr(child,
"name");
1796 }
else if (tempattr ==
"rotationref") {
1797 reftemp = gdml->
GetAttr(child,
"ref");
1804 }
else if (tempattr ==
"firstposition") {
1807 reftemp = gdml->
GetAttr(child,
"name");
1812 }
else if (tempattr ==
"firstpositionref") {
1813 reftemp = gdml->
GetAttr(child,
"ref");
1820 }
else if (tempattr ==
"firstrotation") {
1823 reftemp = gdml->
GetAttr(child,
"name");
1828 }
else if (tempattr ==
"firstrotationref") {
1829 reftemp = gdml->
GetAttr(child,
"ref");
1844 if (!first || !second) {
1845 Fatal(
"BooSolid",
"Incomplete solid %s, missing shape components", name.
Data());
1871 Warning(
"ParseGDML",
"<userinfo> not supported yet. Skipping.");
1873 while (child != 0) {
1914 while (child != 0) {
1915 if ((strcmp(gdml->
GetNodeName(child),
"physvol")) == 0) {
1924 while (subchild != 0) {
1928 if (tempattr ==
"volumeref") {
1929 reftemp = gdml->
GetAttr(subchild,
"ref");
1934 }
else if (tempattr ==
"positionref") {
1935 reftemp = gdml->
GetAttr(subchild,
"ref");
1942 }
else if (tempattr ==
"position") {
1945 reftemp = gdml->
GetAttr(subchild,
"name");
1950 }
else if (tempattr ==
"rotationref") {
1951 reftemp = gdml->
GetAttr(subchild,
"ref");
1958 }
else if (tempattr ==
"rotation") {
1961 reftemp = gdml->
GetAttr(subchild,
"name");
1968 subchild = gdml->
GetNext(subchild);
1974 assem->
AddNode(lv, copynum, matr);
1998 while (child != 0) {
2000 if ((strcmp(gdml->
GetNodeName(child),
"world") == 0)) {
2003 reftemp = gdml->
GetAttr(child,
"ref");
2040 if (tempattr ==
"name") {
2042 }
else if (tempattr ==
"x") {
2044 }
else if (tempattr ==
"y") {
2046 }
else if (tempattr ==
"z") {
2048 }
else if (tempattr ==
"lunit") {
2100 if (tempattr ==
"name") {
2102 }
else if (tempattr ==
"ax") {
2104 }
else if (tempattr ==
"by") {
2106 }
else if (tempattr ==
"cz") {
2108 }
else if (tempattr ==
"zcut1") {
2110 }
else if (tempattr ==
"zcut2") {
2112 }
else if (tempattr ==
"lunit") {
2136 z1 =
Value(zcut1)*retunit;
2141 z2 =
Value(zcut2)*retunit;
2149 origin[2] = 0.5 * (z1 + z2);
2184 if (tempattr ==
"name") {
2186 }
else if (tempattr ==
"dx") {
2188 }
else if (tempattr ==
"dy") {
2190 }
else if (tempattr ==
"zmax") {
2192 }
else if (tempattr ==
"zcut") {
2194 }
else if (tempattr ==
"lunit") {
2216 Info(
"ElCone",
"ERROR! Parameter zcut = %.12g is not set properly, elcone will not be imported.", z1);
2260 if (tempattr ==
"name") {
2262 }
else if (tempattr ==
"rlo") {
2264 }
else if (tempattr ==
"rhi") {
2266 }
else if (tempattr ==
"dz") {
2268 }
else if (tempattr ==
"lunit") {
2328 if (tempattr ==
"name") {
2330 }
else if (tempattr ==
"v1x") {
2332 }
else if (tempattr ==
"v1y") {
2334 }
else if (tempattr ==
"v2x") {
2336 }
else if (tempattr ==
"v2y") {
2338 }
else if (tempattr ==
"v3x") {
2340 }
else if (tempattr ==
"v3y") {
2342 }
else if (tempattr ==
"v4x") {
2344 }
else if (tempattr ==
"v4y") {
2346 }
else if (tempattr ==
"v5x") {
2348 }
else if (tempattr ==
"v5y") {
2350 }
else if (tempattr ==
"v6x") {
2352 }
else if (tempattr ==
"v6y") {
2354 }
else if (tempattr ==
"v7x") {
2356 }
else if (tempattr ==
"v7y") {
2358 }
else if (tempattr ==
"v8x") {
2360 }
else if (tempattr ==
"v8y") {
2362 }
else if (tempattr ==
"dz") {
2364 }
else if (tempattr ==
"lunit") {
2437 if (tempattr ==
"name") {
2439 }
else if (tempattr ==
"rmin") {
2441 }
else if (tempattr ==
"rmax") {
2443 }
else if (tempattr ==
"z") {
2445 }
else if (tempattr ==
"lunit") {
2447 }
else if (tempattr ==
"aunit") {
2449 }
else if (tempattr ==
"startphi") {
2451 }
else if (tempattr ==
"deltaphi") {
2470 Double_t endphideg = startphideg + deltaphideg;
2473 if (deltaphideg < 360.)
2519 if (tempattr ==
"name") {
2521 }
else if (tempattr ==
"rmin") {
2523 }
else if (tempattr ==
"rmax") {
2525 }
else if (tempattr ==
"z") {
2527 }
else if (tempattr ==
"lunit") {
2529 }
else if (tempattr ==
"aunit") {
2531 }
else if (tempattr ==
"startphi") {
2533 }
else if (tempattr ==
"deltaphi") {
2535 }
else if (tempattr ==
"lowx") {
2537 }
else if (tempattr ==
"lowy") {
2539 }
else if (tempattr ==
"lowz") {
2541 }
else if (tempattr ==
"highx") {
2543 }
else if (tempattr ==
"highy") {
2545 }
else if (tempattr ==
"highz") {
2563 Double_t deltaphiline =
Value(deltaphi)*retaunit + startphiline;
2617 if (tempattr ==
"name") {
2619 }
else if (tempattr ==
"rmin1") {
2621 }
else if (tempattr ==
"rmax1") {
2623 }
else if (tempattr ==
"rmin2") {
2625 }
else if (tempattr ==
"rmax2") {
2627 }
else if (tempattr ==
"z") {
2629 }
else if (tempattr ==
"lunit") {
2631 }
else if (tempattr ==
"aunit") {
2633 }
else if (tempattr ==
"startphi") {
2635 }
else if (tempattr ==
"deltaphi") {
2709 if (tempattr ==
"name") {
2711 }
else if (tempattr ==
"x1") {
2713 }
else if (tempattr ==
"x2") {
2715 }
else if (tempattr ==
"x3") {
2717 }
else if (tempattr ==
"x4") {
2719 }
else if (tempattr ==
"y1") {
2721 }
else if (tempattr ==
"y2") {
2723 }
else if (tempattr ==
"z") {
2725 }
else if (tempattr ==
"lunit") {
2727 }
else if (tempattr ==
"aunit") {
2729 }
else if (tempattr ==
"phi") {
2731 }
else if (tempattr ==
"theta") {
2733 }
else if (tempattr ==
"alpha1") {
2735 }
else if (tempattr ==
"alpha2") {
2802 if (tempattr ==
"name") {
2804 }
else if (tempattr ==
"x1") {
2806 }
else if (tempattr ==
"x2") {
2808 }
else if (tempattr ==
"y1") {
2810 }
else if (tempattr ==
"y2") {
2812 }
else if (tempattr ==
"z") {
2814 }
else if (tempattr ==
"lunit") {
2871 if (tempattr ==
"name") {
2873 }
else if (tempattr ==
"lunit") {
2875 }
else if (tempattr ==
"aunit") {
2877 }
else if (tempattr ==
"startphi") {
2879 }
else if (tempattr ==
"deltaphi") {
2897 while (child != 0) {
2898 numplanes = numplanes + 1;
2905 double ** table =
new double*[numplanes];
2906 for (i = 0; i < numplanes; i++) {
2907 table[i] =
new double[cols];
2913 while (child != 0) {
2914 if (strcmp(gdml->
GetNodeName(child),
"zplane") == 0) {
2926 if (tempattr ==
"rmin") {
2928 rminline =
Value(rmin)*retlunit;
2929 table[planeno][0] = rminline;
2930 }
else if (tempattr ==
"rmax") {
2932 rmaxline =
Value(rmax)*retlunit;
2933 table[planeno][1] = rmaxline;
2934 }
else if (tempattr ==
"z") {
2936 zline =
Value(z)*retlunit;
2937 table[planeno][2] = zline;
2942 planeno = planeno + 1;
2955 for (
int j = 0; j < numplanes; j++) {
2956 poly->
DefineSection(zno, table[j][2], table[j][0], table[j][1]);
2961 for (i = 0; i < numplanes; i++) {
2995 if (tempattr ==
"name") {
2997 }
else if (tempattr ==
"lunit") {
2999 }
else if (tempattr ==
"aunit") {
3001 }
else if (tempattr ==
"startphi") {
3003 }
else if (tempattr ==
"deltaphi") {
3005 }
else if (tempattr ==
"numsides") {
3024 while (child != 0) {
3025 numplanes = numplanes + 1;
3032 double ** table =
new double*[numplanes];
3033 for (i = 0; i < numplanes; i++) {
3034 table[i] =
new double[cols];
3040 while (child != 0) {
3041 if (strcmp(gdml->
GetNodeName(child),
"zplane") == 0) {
3052 if (tempattr ==
"rmin") {
3054 rminline =
Value(rmin)*retlunit;
3055 table[planeno][0] = rminline;
3056 }
else if (tempattr ==
"rmax") {
3058 rmaxline =
Value(rmax)*retlunit;
3059 table[planeno][1] = rmaxline;
3060 }
else if (tempattr ==
"z") {
3062 zline =
Value(z)*retlunit;
3063 table[planeno][2] = zline;
3069 planeno = planeno + 1;
3084 for (
int j = 0; j < numplanes; j++) {
3085 polyg->
DefineSection(zno, table[j][2], table[j][0], table[j][1]);
3090 for (i = 0; i < numplanes; i++) {
3123 if (tempattr ==
"name") {
3125 }
else if (tempattr ==
"rmin") {
3127 }
else if (tempattr ==
"rmax") {
3129 }
else if (tempattr ==
"lunit") {
3131 }
else if (tempattr ==
"aunit") {
3133 }
else if (tempattr ==
"startphi") {
3135 }
else if (tempattr ==
"deltaphi") {
3137 }
else if (tempattr ==
"starttheta") {
3139 }
else if (tempattr ==
"deltatheta") {
3156 Double_t deltaphiline = startphiline+
Value(deltaphi)*retaunit;
3158 Double_t deltathetaline = startthetaline +
Value(deltatheta)*retaunit;
3198 if (tempattr ==
"name") {
3200 }
else if (tempattr ==
"rmin") {
3202 }
else if (tempattr ==
"rmax") {
3204 }
else if (tempattr ==
"rtor") {
3206 }
else if (tempattr ==
"lunit") {
3208 }
else if (tempattr ==
"aunit") {
3210 }
else if (tempattr ==
"startphi") {
3212 }
else if (tempattr ==
"deltaphi") {
3268 if (tempattr ==
"name") {
3270 }
else if (tempattr ==
"rmin") {
3272 }
else if (tempattr ==
"rmax") {
3274 }
else if (tempattr ==
"z") {
3276 }
else if (tempattr ==
"lunit") {
3278 }
else if (tempattr ==
"aunit") {
3280 }
else if (tempattr ==
"inst") {
3282 }
else if (tempattr ==
"outst") {
3341 if (tempattr ==
"name") {
3343 }
else if (tempattr ==
"x") {
3345 }
else if (tempattr ==
"y") {
3347 }
else if (tempattr ==
"z") {
3349 }
else if (tempattr ==
"lunit") {
3351 }
else if (tempattr ==
"aunit") {
3353 }
else if (tempattr ==
"phi") {
3355 }
else if (tempattr ==
"theta") {
3357 }
else if (tempattr ==
"alpha") {
3424 if (tempattr ==
"name") {
3426 }
else if (tempattr ==
"x1") {
3428 }
else if (tempattr ==
"x2") {
3430 }
else if (tempattr ==
"x3") {
3432 }
else if (tempattr ==
"x4") {
3434 }
else if (tempattr ==
"y1") {
3436 }
else if (tempattr ==
"y2") {
3438 }
else if (tempattr ==
"z") {
3440 }
else if (tempattr ==
"lunit") {
3442 }
else if (tempattr ==
"aunit") {
3444 }
else if (tempattr ==
"phi") {
3446 }
else if (tempattr ==
"theta") {
3448 }
else if (tempattr ==
"alph") {
3453 }
else if (tempattr ==
"phitwist") {
3522 if (tempattr ==
"name") {
3524 }
else if (tempattr ==
"dx") {
3526 }
else if (tempattr ==
"dy") {
3528 }
else if (tempattr ==
"dz") {
3530 }
else if (tempattr ==
"lunit") {
3575 if (tempattr ==
"name") {
3577 }
else if (tempattr ==
"r") {
3579 }
else if (tempattr ==
"lunit") {
3632 if (tempattr ==
"name") {
3634 }
else if (tempattr ==
"lunit") {
3653 while (child != 0) {
3656 if (tempattr ==
"twoDimVertex") {
3657 noverts = noverts + 1;
3658 }
else if (tempattr ==
"section") {
3659 nosects = nosects + 1;
3668 double *vertx =
new double[noverts];
3669 double *verty =
new double[noverts];
3671 double ** section =
new double*[nosects];
3672 for (i = 0; i < nosects; i++) {
3673 section[i] =
new double[cols];
3680 while (child != 0) {
3681 if (strcmp(gdml->
GetNodeName(child),
"twoDimVertex") == 0) {
3690 if (tempattr ==
"x") {
3692 xline =
Value(x)*retlunit;
3693 vertx[vert] = xline;
3694 }
else if (tempattr ==
"y") {
3696 yline =
Value(y)*retlunit;
3697 verty[vert] = yline;
3706 else if (strcmp(gdml->
GetNodeName(child),
"section") == 0) {
3717 if (tempattr ==
"zOrder") {
3719 section[sect][0] =
Value(zorder);
3720 }
else if (tempattr ==
"zPosition") {
3722 zposline =
Value(zpos)*retlunit;
3723 section[sect][1] = zposline;
3724 }
else if (tempattr ==
"xOffset") {
3726 xoffline =
Value(xoff)*retlunit;
3727 section[sect][2] = xoffline;
3728 }
else if (tempattr ==
"yOffset") {
3730 yoffline =
Value(yoff)*retlunit;
3731 section[sect][3] = yoffline;
3732 }
else if (tempattr ==
"scalingFactor") {
3734 section[sect][4] =
Value(scale);
3749 for (
int j = 0; j < sect; j++) {
3750 xtru->
DefineSection((
int)section[j][0], section[j][1], section[j][2], section[j][3], section[j][4]);
3756 for (i = 0; i < nosects; i++) {
3757 delete [] section[i];
3775 std::cout <<
"WARNING! The reflectedSolid is obsolete! Use scale transformation instead!" << std::endl;
3795 if (tempattr ==
"name") {
3797 }
else if (tempattr ==
"sx") {
3799 }
else if (tempattr ==
"sy") {
3801 }
else if (tempattr ==
"sz") {
3803 }
else if (tempattr ==
"rx") {
3805 }
else if (tempattr ==
"ry") {
3807 }
else if (tempattr ==
"rz") {
3809 }
else if (tempattr ==
"dx") {
3811 }
else if (tempattr ==
"dy") {
3813 }
else if (tempattr ==
"dz") {
3815 }
else if (tempattr ==
"solid") {
3829 rot->RotateZ(-(
Value(rz)));
3830 rot->RotateY(-(
Value(ry)));
3831 rot->RotateX(-(
Value(rx)));
3833 if (atoi(sx) == -1) {
3834 rot->ReflectX(
kTRUE);
3836 if (atoi(sy) == -1) {
3837 rot->ReflectY(
kTRUE);
3839 if (atoi(sz) == -1) {
3840 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.
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
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
Find an object in this list using its name.
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.
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)
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.
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
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.
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.
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 skiped
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.
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.
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.
virtual TGeoMatrix & Inverse() const
Return a temporary inverse of this.
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 xml node
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)
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.
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.
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
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