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);
529 if(*end == 0)
return val;
535 std::string expanded;
536 expanded.reserve(strlen(svalue)*2);
540 const std::locale& loc = std::locale::classic();
543 const char* p = svalue;
547 if(std::isalpha(*p, loc) || *p ==
'_'){
560 if(!isalnum(*p, loc) && *p !=
'_'){
568 if(*p == 0) expanded +=
']';
571 TFormula f(
"TFormula", expanded.c_str());
574 for(
auto it:
fconsts)
f.SetParameter(it.first.c_str(), it.second);
579 Fatal(
"Value",
"Got bad value %lf from string '%s'", val, svalue);
606 if (tempattr ==
"name") {
608 }
else if (tempattr ==
"x") {
610 }
else if (tempattr ==
"y") {
612 }
else if (tempattr ==
"z") {
614 }
else if (tempattr ==
"unit") {
659 if (tempattr ==
"name") {
661 }
else if (tempattr ==
"x") {
663 }
else if (tempattr ==
"y") {
665 }
else if (tempattr ==
"z") {
667 }
else if (tempattr ==
"unit") {
716 if (tempattr ==
"name") {
718 }
else if (tempattr ==
"x") {
720 }
else if (tempattr ==
"y") {
722 }
else if (tempattr ==
"z") {
764 if (tempattr ==
"name") {
766 }
else if (tempattr ==
"z") {
768 }
else if (tempattr ==
"n") {
783 if (tempattr ==
"value") {
835 if (tempattr ==
"name") {
850 if ((strcmp(gdml->
GetNodeName(child),
"fraction")) == 0) {
858 if (tempattr ==
"n") {
860 }
else if (tempattr ==
"ref") {
868 fracmap[ref.
Data()] =
n;
874 for (fractions
f = fracmap.begin();
f != fracmap.end();
f++) {
886 if (hasIsotopesExtended) {
891 if (tempattr ==
"name") {
906 if ((strcmp(gdml->
GetNodeName(child),
"fraction")) == 0) {
914 if (tempattr ==
"n") {
916 }
else if (tempattr ==
"ref") {
924 fracmap[ref.
Data()] =
n;
930 for (fractions
f = fracmap.begin();
f != fracmap.end();
f++) {
949 if (tempattr ==
"name") {
952 }
else if (tempattr ==
"z") {
954 }
else if (tempattr ==
"formula") {
970 if (tempattr ==
"value") {
1009 static int medid = 0;
1012 Int_t ncompo = 0, mixflag = 2;
1025 while (child != 0) {
1028 if ((strcmp(gdml->
GetNodeName(child),
"atom")) == 0) {
1033 if (tempattr ==
"value") {
1040 if ((strcmp(gdml->
GetNodeName(child),
"D")) == 0) {
1045 if (tempattr ==
"value") {
1055 name = gdml->
GetAttr(node,
"name");
1062 tempconst = gdml->
GetAttr(node,
"Z");
1069 if (tmpname ==
"vacuum") {
1081 while (child != 0) {
1084 if ((strcmp(gdml->
GetNodeName(child),
"fraction")) == 0) {
1087 ncompo = ncompo + 1;
1093 if (tempattr ==
"n") {
1095 }
else if (tempattr ==
"ref") {
1105 fracmap[ref.
Data()] =
n;
1109 else if ((strcmp(gdml->
GetNodeName(child),
"composite")) == 0) {
1113 ncompo = ncompo + 1;
1119 if (tempattr ==
"n") {
1121 }
else if (tempattr ==
"ref") {
1131 fracmap[ref.
Data()] =
n;
1134 else if ((strcmp(gdml->
GetNodeName(child),
"D")) == 0) {
1139 if (tempattr ==
"value") {
1151 name = gdml->
GetAttr(node,
"name");
1161 for (fractions
f = fracmap.begin();
f != fracmap.end();
f++) {
1169 natoms = (
Int_t)
f->second;
1171 mix->AddElement(
felemap[
f->first], natoms);
1179 mix->AddElement(mattmp, weight);
1183 mix->AddElement(
felemap[
f->first], weight);
1198 }
else if (mixflag == 0) {
1244 while (child != 0) {
1245 if ((strcmp(gdml->
GetNodeName(child),
"solidref")) == 0) {
1247 reftemp = gdml->
GetAttr(child,
"ref");
1254 solidname = reftemp;
1257 printf(
"Solid: %s, Not Yet Defined!\n", reftemp.
Data());
1261 if ((strcmp(gdml->
GetNodeName(child),
"materialref")) == 0) {
1262 reftemp = gdml->
GetAttr(child,
"ref");
1269 printf(
"Medium: %s, Not Yet Defined!\n", gdml->
GetAttr(child,
"ref"));
1276 name = gdml->
GetAttr(node,
"name");
1298 while (child != 0) {
1299 if ((strcmp(gdml->
GetNodeName(child),
"physvol")) == 0) {
1312 while (subchild != 0) {
1316 if (tempattr ==
"volumeref") {
1317 reftemp = gdml->
GetAttr(subchild,
"ref");
1324 else if (tempattr ==
"file") {
1325 const char* filevol;
1329 filevol = gdml->
GetAttr(subchild,
"volname");
1334 if (filedoc1 == 0) {
1367 else if (tempattr ==
"position") {
1370 reftemp = gdml->
GetAttr(subchild,
"name");
1375 }
else if (tempattr ==
"positionref") {
1376 reftemp = gdml->
GetAttr(subchild,
"ref");
1381 else std::cout <<
"ERROR! Physvol's position " << reftemp <<
" not found!" << std::endl;
1382 }
else if (tempattr ==
"rotation") {
1385 reftemp = gdml->
GetAttr(subchild,
"name");
1390 }
else if (tempattr ==
"rotationref") {
1391 reftemp = gdml->
GetAttr(subchild,
"ref");
1396 else std::cout <<
"ERROR! Physvol's rotation " << reftemp <<
" not found!" << std::endl;
1397 }
else if (tempattr ==
"scale") {
1400 reftemp = gdml->
GetAttr(subchild,
"name");
1405 }
else if (tempattr ==
"scaleref") {
1406 reftemp = gdml->
GetAttr(subchild,
"ref");
1411 else std::cout <<
"ERROR! Physvol's scale " << reftemp <<
" not found!" << std::endl;
1414 subchild = gdml->
GetNext(subchild);
1428 memset(scale3x3, 0, 9 *
sizeof(
Double_t));
1431 scale3x3[0] = diagonal[0];
1432 scale3x3[4] = diagonal[1];
1433 scale3x3[8] = diagonal[2];
1457 vol->
AddNode(lv, copynum, transform);
1460 }
else if ((strcmp(gdml->
GetNodeName(child),
"divisionvol")) == 0) {
1476 if (tempattr ==
"axis") {
1478 }
else if (tempattr ==
"number") {
1480 }
else if (tempattr ==
"width") {
1482 }
else if (tempattr ==
"offset") {
1484 }
else if (tempattr ==
"unit") {
1494 while (subchild != 0) {
1498 if (tempattr ==
"volumeref") {
1499 reftemp = gdml->
GetAttr(subchild,
"ref");
1503 divVolref = reftemp;
1506 subchild = gdml->
GetNext(subchild);
1532 Fatal(
"VolProcess",
"Cannot divide volume %s", vol->
GetName());
1543 else if ((strcmp(gdml->
GetNodeName(child),
"replicavol")) == 0) {
1563 if (tempattr ==
"number") {
1571 while (subchild != 0) {
1575 if (tempattr ==
"volumeref") {
1576 reftemp = gdml->
GetAttr(subchild,
"ref");
1580 divVolref = reftemp;
1583 if (tempattr ==
"replicate_along_axis") {
1584 subsubchild = gdml->
GetChild(subchild);
1586 while (subsubchild != 0) {
1587 if ((strcmp(gdml->
GetNodeName(subsubchild),
"width")) == 0) {
1592 if (tempattr ==
"value") {
1595 else if (tempattr ==
"unit"){
1602 else if ((strcmp(gdml->
GetNodeName(subsubchild),
"offset")) == 0) {
1607 if (tempattr ==
"value") {
1610 else if (tempattr ==
"unit"){
1616 else if ((strcmp(gdml->
GetNodeName(subsubchild),
"direction")) == 0) {
1621 if (tempattr ==
"x") {
1624 else if (tempattr ==
"y"){
1627 else if (tempattr ==
"z"){
1630 else if (tempattr ==
"rho"){
1633 else if (tempattr ==
"phi"){
1641 subsubchild = gdml->
GetNext(subsubchild);
1646 subchild = gdml->
GetNext(subchild);
1654 Double_t widthline = wvalue*retwunit;
1655 Double_t offsetline = ovalue*retounit;
1675 Fatal(
"VolProcess",
"Cannot divide volume %s", vol->
GetName());
1684 else if (strcmp(gdml->
GetNodeName(child),
"auxiliary") == 0) {
1685 TString auxType, auxUnit, auxValue;
1687 printf(
"Auxiliary values for volume %s\n",vol->
GetName());
1688 auxmap =
new TMap();
1700 printf(
" %s: %s\n", auxType.
Data(), auxValue.
Data());
1749 while (child != 0) {
1753 if (tempattr ==
"first") {
1754 reftemp = gdml->
GetAttr(child,
"ref");
1761 }
else if (tempattr ==
"second") {
1762 reftemp = gdml->
GetAttr(child,
"ref");
1769 }
else if (tempattr ==
"position") {
1772 reftemp = gdml->
GetAttr(child,
"name");
1777 }
else if (tempattr ==
"positionref") {
1778 reftemp = gdml->
GetAttr(child,
"ref");
1785 }
else if (tempattr ==
"rotation") {
1788 reftemp = gdml->
GetAttr(child,
"name");
1793 }
else if (tempattr ==
"rotationref") {
1794 reftemp = gdml->
GetAttr(child,
"ref");
1801 }
else if (tempattr ==
"firstposition") {
1804 reftemp = gdml->
GetAttr(child,
"name");
1809 }
else if (tempattr ==
"firstpositionref") {
1810 reftemp = gdml->
GetAttr(child,
"ref");
1817 }
else if (tempattr ==
"firstrotation") {
1820 reftemp = gdml->
GetAttr(child,
"name");
1825 }
else if (tempattr ==
"firstrotationref") {
1826 reftemp = gdml->
GetAttr(child,
"ref");
1841 if (!first || !second) {
1842 Fatal(
"BooSolid",
"Incomplete solid %s, missing shape components", name.
Data());
1868 Warning(
"ParseGDML",
"<userinfo> not supported yet. Skipping.");
1870 while (child != 0) {
1911 while (child != 0) {
1912 if ((strcmp(gdml->
GetNodeName(child),
"physvol")) == 0) {
1921 while (subchild != 0) {
1925 if (tempattr ==
"volumeref") {
1926 reftemp = gdml->
GetAttr(subchild,
"ref");
1931 }
else if (tempattr ==
"positionref") {
1932 reftemp = gdml->
GetAttr(subchild,
"ref");
1939 }
else if (tempattr ==
"position") {
1942 reftemp = gdml->
GetAttr(subchild,
"name");
1947 }
else if (tempattr ==
"rotationref") {
1948 reftemp = gdml->
GetAttr(subchild,
"ref");
1955 }
else if (tempattr ==
"rotation") {
1958 reftemp = gdml->
GetAttr(subchild,
"name");
1965 subchild = gdml->
GetNext(subchild);
1971 assem->
AddNode(lv, copynum, matr);
1995 while (child != 0) {
1997 if ((strcmp(gdml->
GetNodeName(child),
"world") == 0)) {
2000 reftemp = gdml->
GetAttr(child,
"ref");
2037 if (tempattr ==
"name") {
2039 }
else if (tempattr ==
"x") {
2041 }
else if (tempattr ==
"y") {
2043 }
else if (tempattr ==
"z") {
2045 }
else if (tempattr ==
"lunit") {
2097 if (tempattr ==
"name") {
2099 }
else if (tempattr ==
"ax") {
2101 }
else if (tempattr ==
"by") {
2103 }
else if (tempattr ==
"cz") {
2105 }
else if (tempattr ==
"zcut1") {
2107 }
else if (tempattr ==
"zcut2") {
2109 }
else if (tempattr ==
"lunit") {
2133 z1 =
Value(zcut1)*retunit;
2138 z2 =
Value(zcut2)*retunit;
2146 origin[2] = 0.5 * (z1 + z2);
2181 if (tempattr ==
"name") {
2183 }
else if (tempattr ==
"dx") {
2185 }
else if (tempattr ==
"dy") {
2187 }
else if (tempattr ==
"zmax") {
2189 }
else if (tempattr ==
"zcut") {
2191 }
else if (tempattr ==
"lunit") {
2213 Info(
"ElCone",
"ERROR! Parameter zcut = %.12g is not set properly, elcone will not be imported.", z1);
2257 if (tempattr ==
"name") {
2259 }
else if (tempattr ==
"rlo") {
2261 }
else if (tempattr ==
"rhi") {
2263 }
else if (tempattr ==
"dz") {
2265 }
else if (tempattr ==
"lunit") {
2325 if (tempattr ==
"name") {
2327 }
else if (tempattr ==
"v1x") {
2329 }
else if (tempattr ==
"v1y") {
2331 }
else if (tempattr ==
"v2x") {
2333 }
else if (tempattr ==
"v2y") {
2335 }
else if (tempattr ==
"v3x") {
2337 }
else if (tempattr ==
"v3y") {
2339 }
else if (tempattr ==
"v4x") {
2341 }
else if (tempattr ==
"v4y") {
2343 }
else if (tempattr ==
"v5x") {
2345 }
else if (tempattr ==
"v5y") {
2347 }
else if (tempattr ==
"v6x") {
2349 }
else if (tempattr ==
"v6y") {
2351 }
else if (tempattr ==
"v7x") {
2353 }
else if (tempattr ==
"v7y") {
2355 }
else if (tempattr ==
"v8x") {
2357 }
else if (tempattr ==
"v8y") {
2359 }
else if (tempattr ==
"dz") {
2361 }
else if (tempattr ==
"lunit") {
2434 if (tempattr ==
"name") {
2436 }
else if (tempattr ==
"rmin") {
2438 }
else if (tempattr ==
"rmax") {
2440 }
else if (tempattr ==
"z") {
2442 }
else if (tempattr ==
"lunit") {
2444 }
else if (tempattr ==
"aunit") {
2446 }
else if (tempattr ==
"startphi") {
2448 }
else if (tempattr ==
"deltaphi") {
2467 Double_t endphideg = startphideg + deltaphideg;
2470 if (deltaphideg < 360.)
2516 if (tempattr ==
"name") {
2518 }
else if (tempattr ==
"rmin") {
2520 }
else if (tempattr ==
"rmax") {
2522 }
else if (tempattr ==
"z") {
2524 }
else if (tempattr ==
"lunit") {
2526 }
else if (tempattr ==
"aunit") {
2528 }
else if (tempattr ==
"startphi") {
2530 }
else if (tempattr ==
"deltaphi") {
2532 }
else if (tempattr ==
"lowx") {
2534 }
else if (tempattr ==
"lowy") {
2536 }
else if (tempattr ==
"lowz") {
2538 }
else if (tempattr ==
"highx") {
2540 }
else if (tempattr ==
"highy") {
2542 }
else if (tempattr ==
"highz") {
2560 Double_t deltaphiline =
Value(deltaphi)*retaunit + startphiline;
2614 if (tempattr ==
"name") {
2616 }
else if (tempattr ==
"rmin1") {
2618 }
else if (tempattr ==
"rmax1") {
2620 }
else if (tempattr ==
"rmin2") {
2622 }
else if (tempattr ==
"rmax2") {
2624 }
else if (tempattr ==
"z") {
2626 }
else if (tempattr ==
"lunit") {
2628 }
else if (tempattr ==
"aunit") {
2630 }
else if (tempattr ==
"startphi") {
2632 }
else if (tempattr ==
"deltaphi") {
2706 if (tempattr ==
"name") {
2708 }
else if (tempattr ==
"x1") {
2710 }
else if (tempattr ==
"x2") {
2712 }
else if (tempattr ==
"x3") {
2714 }
else if (tempattr ==
"x4") {
2716 }
else if (tempattr ==
"y1") {
2718 }
else if (tempattr ==
"y2") {
2720 }
else if (tempattr ==
"z") {
2722 }
else if (tempattr ==
"lunit") {
2724 }
else if (tempattr ==
"aunit") {
2726 }
else if (tempattr ==
"phi") {
2728 }
else if (tempattr ==
"theta") {
2730 }
else if (tempattr ==
"alpha1") {
2732 }
else if (tempattr ==
"alpha2") {
2799 if (tempattr ==
"name") {
2801 }
else if (tempattr ==
"x1") {
2803 }
else if (tempattr ==
"x2") {
2805 }
else if (tempattr ==
"y1") {
2807 }
else if (tempattr ==
"y2") {
2809 }
else if (tempattr ==
"z") {
2811 }
else if (tempattr ==
"lunit") {
2868 if (tempattr ==
"name") {
2870 }
else if (tempattr ==
"lunit") {
2872 }
else if (tempattr ==
"aunit") {
2874 }
else if (tempattr ==
"startphi") {
2876 }
else if (tempattr ==
"deltaphi") {
2894 while (child != 0) {
2895 numplanes = numplanes + 1;
2902 double ** table =
new double*[numplanes];
2903 for (i = 0; i < numplanes; i++) {
2904 table[i] =
new double[cols];
2910 while (child != 0) {
2911 if (strcmp(gdml->
GetNodeName(child),
"zplane") == 0) {
2923 if (tempattr ==
"rmin") {
2925 rminline =
Value(rmin)*retlunit;
2926 table[planeno][0] = rminline;
2927 }
else if (tempattr ==
"rmax") {
2929 rmaxline =
Value(rmax)*retlunit;
2930 table[planeno][1] = rmaxline;
2931 }
else if (tempattr ==
"z") {
2933 zline =
Value(z)*retlunit;
2934 table[planeno][2] = zline;
2939 planeno = planeno + 1;
2952 for (
int j = 0; j < numplanes; j++) {
2953 poly->
DefineSection(zno, table[j][2], table[j][0], table[j][1]);
2958 for (i = 0; i < numplanes; i++) {
2992 if (tempattr ==
"name") {
2994 }
else if (tempattr ==
"lunit") {
2996 }
else if (tempattr ==
"aunit") {
2998 }
else if (tempattr ==
"startphi") {
3000 }
else if (tempattr ==
"deltaphi") {
3002 }
else if (tempattr ==
"numsides") {
3021 while (child != 0) {
3022 numplanes = numplanes + 1;
3029 double ** table =
new double*[numplanes];
3030 for (i = 0; i < numplanes; i++) {
3031 table[i] =
new double[cols];
3037 while (child != 0) {
3038 if (strcmp(gdml->
GetNodeName(child),
"zplane") == 0) {
3049 if (tempattr ==
"rmin") {
3051 rminline =
Value(rmin)*retlunit;
3052 table[planeno][0] = rminline;
3053 }
else if (tempattr ==
"rmax") {
3055 rmaxline =
Value(rmax)*retlunit;
3056 table[planeno][1] = rmaxline;
3057 }
else if (tempattr ==
"z") {
3059 zline =
Value(z)*retlunit;
3060 table[planeno][2] = zline;
3066 planeno = planeno + 1;
3081 for (
int j = 0; j < numplanes; j++) {
3082 polyg->
DefineSection(zno, table[j][2], table[j][0], table[j][1]);
3087 for (i = 0; i < numplanes; i++) {
3120 if (tempattr ==
"name") {
3122 }
else if (tempattr ==
"rmin") {
3124 }
else if (tempattr ==
"rmax") {
3126 }
else if (tempattr ==
"lunit") {
3128 }
else if (tempattr ==
"aunit") {
3130 }
else if (tempattr ==
"startphi") {
3132 }
else if (tempattr ==
"deltaphi") {
3134 }
else if (tempattr ==
"starttheta") {
3136 }
else if (tempattr ==
"deltatheta") {
3153 Double_t deltaphiline = startphiline+
Value(deltaphi)*retaunit;
3155 Double_t deltathetaline = startthetaline +
Value(deltatheta)*retaunit;
3195 if (tempattr ==
"name") {
3197 }
else if (tempattr ==
"rmin") {
3199 }
else if (tempattr ==
"rmax") {
3201 }
else if (tempattr ==
"rtor") {
3203 }
else if (tempattr ==
"lunit") {
3205 }
else if (tempattr ==
"aunit") {
3207 }
else if (tempattr ==
"startphi") {
3209 }
else if (tempattr ==
"deltaphi") {
3265 if (tempattr ==
"name") {
3267 }
else if (tempattr ==
"rmin") {
3269 }
else if (tempattr ==
"rmax") {
3271 }
else if (tempattr ==
"z") {
3273 }
else if (tempattr ==
"lunit") {
3275 }
else if (tempattr ==
"aunit") {
3277 }
else if (tempattr ==
"inst") {
3279 }
else if (tempattr ==
"outst") {
3338 if (tempattr ==
"name") {
3340 }
else if (tempattr ==
"x") {
3342 }
else if (tempattr ==
"y") {
3344 }
else if (tempattr ==
"z") {
3346 }
else if (tempattr ==
"lunit") {
3348 }
else if (tempattr ==
"aunit") {
3350 }
else if (tempattr ==
"phi") {
3352 }
else if (tempattr ==
"theta") {
3354 }
else if (tempattr ==
"alpha") {
3421 if (tempattr ==
"name") {
3423 }
else if (tempattr ==
"x1") {
3425 }
else if (tempattr ==
"x2") {
3427 }
else if (tempattr ==
"x3") {
3429 }
else if (tempattr ==
"x4") {
3431 }
else if (tempattr ==
"y1") {
3433 }
else if (tempattr ==
"y2") {
3435 }
else if (tempattr ==
"z") {
3437 }
else if (tempattr ==
"lunit") {
3439 }
else if (tempattr ==
"aunit") {
3441 }
else if (tempattr ==
"phi") {
3443 }
else if (tempattr ==
"theta") {
3445 }
else if (tempattr ==
"alph") {
3450 }
else if (tempattr ==
"phitwist") {
3519 if (tempattr ==
"name") {
3521 }
else if (tempattr ==
"dx") {
3523 }
else if (tempattr ==
"dy") {
3525 }
else if (tempattr ==
"dz") {
3527 }
else if (tempattr ==
"lunit") {
3572 if (tempattr ==
"name") {
3574 }
else if (tempattr ==
"r") {
3576 }
else if (tempattr ==
"lunit") {
3629 if (tempattr ==
"name") {
3631 }
else if (tempattr ==
"lunit") {
3650 while (child != 0) {
3653 if (tempattr ==
"twoDimVertex") {
3654 noverts = noverts + 1;
3655 }
else if (tempattr ==
"section") {
3656 nosects = nosects + 1;
3665 double *vertx =
new double[noverts];
3666 double *verty =
new double[noverts];
3668 double ** section =
new double*[nosects];
3669 for (i = 0; i < nosects; i++) {
3670 section[i] =
new double[cols];
3677 while (child != 0) {
3678 if (strcmp(gdml->
GetNodeName(child),
"twoDimVertex") == 0) {
3687 if (tempattr ==
"x") {
3689 xline =
Value(x)*retlunit;
3690 vertx[vert] = xline;
3691 }
else if (tempattr ==
"y") {
3693 yline =
Value(y)*retlunit;
3694 verty[vert] = yline;
3703 else if (strcmp(gdml->
GetNodeName(child),
"section") == 0) {
3714 if (tempattr ==
"zOrder") {
3716 section[sect][0] =
Value(zorder);
3717 }
else if (tempattr ==
"zPosition") {
3719 zposline =
Value(zpos)*retlunit;
3720 section[sect][1] = zposline;
3721 }
else if (tempattr ==
"xOffset") {
3723 xoffline =
Value(xoff)*retlunit;
3724 section[sect][2] = xoffline;
3725 }
else if (tempattr ==
"yOffset") {
3727 yoffline =
Value(yoff)*retlunit;
3728 section[sect][3] = yoffline;
3729 }
else if (tempattr ==
"scalingFactor") {
3731 section[sect][4] =
Value(scale);
3746 for (
int j = 0; j < sect; j++) {
3747 xtru->
DefineSection((
int)section[j][0], section[j][1], section[j][2], section[j][3], section[j][4]);
3753 for (i = 0; i < nosects; i++) {
3754 delete [] section[i];
3772 std::cout <<
"WARNING! The reflectedSolid is obsolete! Use scale transformation instead!" << std::endl;
3792 if (tempattr ==
"name") {
3794 }
else if (tempattr ==
"sx") {
3796 }
else if (tempattr ==
"sy") {
3798 }
else if (tempattr ==
"sz") {
3800 }
else if (tempattr ==
"rx") {
3802 }
else if (tempattr ==
"ry") {
3804 }
else if (tempattr ==
"rz") {
3806 }
else if (tempattr ==
"dx") {
3808 }
else if (tempattr ==
"dy") {
3810 }
else if (tempattr ==
"dz") {
3812 }
else if (tempattr ==
"solid") {
3826 rot->RotateZ(-(
Value(rz)));
3827 rot->RotateY(-(
Value(ry)));
3828 rot->RotateX(-(
Value(rx)));
3830 if (atoi(sx) == -1) {
3831 rot->ReflectX(
kTRUE);
3833 if (atoi(sy) == -1) {
3834 rot->ReflectY(
kTRUE);
3836 if (atoi(sz) == -1) {
3837 rot->ReflectZ(
kTRUE);
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.
TList * GetListOfMaterials() const
RotMap frotmap
Map containing position names and the TGeoTranslation for it.
virtual TGeoMatrix & Inverse() const
Return a temporary inverse of this.
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 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 Info(const char *method, const char *msgfmt,...) const
Issue info message.
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.
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.
virtual Double_t GetAxisRange(Int_t iaxis, Double_t &xlo, Double_t &xhi) const =0
virtual TObject * FindObject(const char *name) const
Find an object in this list using its name.
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)
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
Int_t GetNdaughters() const
double GetScaleVal(const char *unit)
Throughout the GDML file, a unit can de specified.
ReflectionsMap freflectmap
Map containing volume names and the TGeoVolume for it.
const char * Data() const
virtual void Fatal(const char *method, const char *msgfmt,...) const
Issue fatal error message.
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.
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.
virtual const Double_t * GetScale() const
double Value(const char *svalue) const
Convert number in string format to double value.
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.
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 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.
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.
virtual const Double_t * GetTranslation() const
virtual const Double_t * GetRotationMatrix() const =0
virtual const Double_t * GetRotationMatrix() const
Hyperboloid class defined by 5 parameters.
const char * GetAttrValue(XMLAttrPointer_t xmlattr)
return value of attribute
virtual const char * GetName() const
Returns name of object.
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.
TGeoShape * GetShape() const
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.
you should not use this method at all Int_t Int_t z
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.
TObject * Last() const
Return the object in the last filled slot. Returns 0 if no entries.
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
TGeoMedium * GetMedium() const
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.
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)
XMLNodePointer_t Tube(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, a Tube may be declared.
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
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]
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.