172 struct MaterialExtractor {
173 std::set<TGeoMaterial*> materials;
175 materials.insert(
v->GetMaterial());
176 for(
Int_t i=0; i<
v->GetNdaughters(); ++i)
177 (*
this)(
v->GetNode(i)->GetVolume());
193 fgG4Compatibility(0),
240 Info(
"WriteGDMLfile",
"Top volume does not exist!");
244 WriteGDMLfile(geomanager, volume, materials, filename, option);
251 TList materials, volumes, nodes;
252 MaterialExtractor extract;
254 Info(
"WriteGDMLfile",
"Invalid Volume reference to extract GDML information!");
264 WriteGDMLfile(geomanager, volume, &materials, filename, option);
265 materials.
Clear(
"nodelete");
266 volumes.
Clear(
"nodelete");
267 nodes.
Clear(
"nodelete");
278 const char* filename,
285 Info(
"WriteGDMLfile",
"Geant4 compatibility mode set");
291 Info(
"WriteGDMLfile",
"Fast naming convention with pointer suffix set");
294 Info(
"WriteGDMLfile",
"Naming without prefix set - be careful uniqness of name is not ensured");
297 Info(
"WriteGDMLfile",
"Potentially slow with incremental suffix naming convention set");
301 Int_t outputLayout = 1;
302 const char * krootNodeName =
"gdml";
303 const char * knsRefGeneral =
"http://www.w3.org/2001/XMLSchema-instance";
304 const char * knsNameGeneral =
"xsi";
305 const char * knsRefGdml =
"http://service-spi.web.cern.ch/service-spi/app/releases/GDML/schema/gdml.xsd";
306 const char * knsNameGdml =
"xsi:noNamespaceSchemaLocation";
320 fGdmlE->
NewNS(rootNode, knsRefGeneral, knsNameGeneral);
365 Info(
"WriteGDMLfile",
"Extracting volumes");
368 Info(
"WriteGDMLfile",
"%i volumes added",
fVolCnt);
381 Double_t tdiffI = difftime(endT, startT);
383 Info(
"WriteGDMLfile",
"Exporting time: %s", tdiffS.
Data());
388 Info(
"WriteGDMLfile",
"File %s saved", filename);
403 TIter next(matrixList);
432 if (!
surfaces->GetEntriesFast())
return;
449 if (!
surfaces->GetEntriesFast())
return;
467 if (!
surfaces->GetEntriesFast())
return;
478 Warning(
"ExtractBorderSurfaces",
"Inconsistent border surface extraction %s: Node %s"
483 Warning(
"ExtractBorderSurfaces",
"Inconsistent border surface extraction %s: Node %s"
499 Info(
"ExtractMaterials",
"Extracting materials");
505 TIter next(materialsLst);
522 Info(
"ExtractMaterials",
"%i materials added", matcnt);
550 TString volname, matname, solname, pattClsName, nodeVolNameBak;
575 if (solname ==
"-1") {
576 Info(
"ExtractVolumes",
"ERROR! %s volume was not added, because solid is either not supported or corrupted",
603 while ((geoNode = (
TGeoNode *) next())) {
614 if (nodevolname.
Contains(
"missing_")) {
618 nodeVolNameBak = nodevolname;
621 if (isPattern ==
kFALSE) {
623 TString nodename, posname, rotname;
625 nodename = nodename +
"in" + volname;
628 posname = nodename +
"pos";
650 fGdmlE->
NewAttr(scaleN, 0,
"name", (nodename +
"scl").Data());
667 if ((lxyz.
x != 0.0) || (lxyz.
y != 0.0) || (lxyz.
z != 0.0)) {
668 rotname = nodename +
"rot";
680 if (isPattern && pattFinder) {
693 offset = pattFinder->
GetStart() - xlo;
783 for (
Int_t idx = 0; idx < nOfIso; idx++) {
786 Fatal(
"CreateElementN",
"Missing isotopes for element %s", element->
GetName());
811 for (NameListI::iterator itr = wCounter.begin(); itr != wCounter.end(); ++itr) {
812 if (itr->second > 1) {
813 Info(
"CreateMixtureN",
"WARNING! 2 equal isotopes in one element. Check: %s isotope of %s element",
814 itr->first.Data(),
name);
821 Int_t valZ = element->
Z();
846 for (
Int_t idx = 0; idx < nOfElm; idx++) {
858 wPercentage[lname] += mixture->
GetWmixt()[idx];
872 for (NameListI::iterator itr = wCounter.begin(); itr != wCounter.end(); ++itr) {
873 if (itr->second > 1) {
874 Info(
"CreateMixtureN",
"WARNING! 2 equal elements in one material. Check: %s element of %s material",
875 itr->first.Data(), mname.
Data());
884 TIter next(&properties);
886 while ((property = (
TNamed*)next()))
906 if (tmpname ==
"vacuum") {
910 Info(
"CreateMaterialN",
"WARNING! value of Z in %s material can't be < 1 in Geant4, that is why it was changed to 1, please check it manually! ",
914 Info(
"CreateMaterialN",
"WARNING! value of Z in %s material can't be < 1 in Geant4", mname.
Data());
924 TIter next(&properties);
926 while ((property = (
TNamed*)next()))
1117 if ((geoShape->
GetBl1() == 0 || geoShape->
GetTl1() == 0 || geoShape->
GetH1() == 0) ||
1118 (geoShape->
GetBl2() == 0 || geoShape->
GetTl2() == 0 || geoShape->
GetH2() == 0)) {
1163 if ((geoShape->
GetBl1() == 0 && geoShape->
GetTl1() == 0 && geoShape->
GetH1() == 0) ||
1164 (geoShape->
GetBl2() == 0 && geoShape->
GetTl2() == 0 && geoShape->
GetH2() == 0)) {
1202 Info(
"CreateTwistedTrapN",
1203 "ERROR! Object %s is not exported correctly because parameter Alpha2 is not declared in GDML schema",
1308 Info(
"CreateCutTubeN",
"WARNING! %s - CutTube was replaced by intersection of TGeoTubSeg and two TGeoBBoxes",
1386 for (
Int_t it = 0; it < nZPlns; it++) {
1390 if ((it < nZPlns - 1) && (geoShape->
GetZ(it) == geoShape->
GetZ(it + 1))) {
1399 Info(
"CreatePolyconeN",
"WARNING! One plane was added to %s solid to be compatible with Geant4", lname.
Data());
1401 Info(
"CreatePolyconeN",
"WARNING! Solid %s definition seems not contiguous may cause problems in Geant4", lname.
Data());
1413 Info(
"CreatePolyconeN",
"WARNING! One plane was added to %s solid to be compatible with Geant4", lname.
Data());
1415 Info(
"CreatePolyconeN",
"WARNING! Solid %s definition seems not contiguous may cause problems in Geant4", lname.
Data());
1463 for (
Int_t it = 0; it < geoShape->
GetNz(); it++) {
1534 if (vertNum < 3 || secNum < 2) {
1535 Info(
"CreateXtrusionN",
"ERROR! TGeoXtru %s has only %i vertices and %i sections. It was not exported",
1536 lname.
Data(), vertNum, secNum);
1540 for (
Int_t it = 0; it < vertNum; it++) {
1547 for (
Int_t it = 0; it < secNum; it++) {
1587 Double_t zcut1 = 2 * zorig - zcut2;
1613 Double_t zmax = zcut * ((rx1 + rx2) / (rx1 - rx2));
1640 lboolType =
"union";
1643 lboolType =
"subtraction";
1646 lboolType =
"intersection";
1661 if (strcmp(leftS->
ClassName(),
"TGeoScaledShape") == 0 &&
1662 strcmp(rightS->
ClassName(),
"TGeoBBox") == 0) {
1664 if (lboolType ==
"intersection") {
1671 Xyz translL, translR;
1693 if (lname.
Contains(
"missing_") || lname ==
"") {
1694 Info(
"CreateCommonBoolN",
"ERROR! Left node is NULL - Boolean Shape will be skipped");
1702 if (rname.
Contains(
"missing_") || rname ==
"") {
1703 Info(
"CreateCommonBoolN",
"ERROR! Right node is NULL - Boolean Shape will be skipped");
1732 if ((translL.
x != 0.0) || (translL.
y != 0.0) || (translL.
z != 0.0)) {
1733 childN =
CreatePositionN((nodeName + lname +
"pos").Data(), translL,
"firstposition");
1737 if ((lrot.
x != 0.0) || (lrot.
y != 0.0) || (lrot.
z != 0.0)) {
1738 childN =
CreateRotationN((nodeName + lname +
"rot").Data(), lrot,
"firstrotation");
1742 if ((translR.
x != 0.0) || (translR.
y != 0.0) || (translR.
z != 0.0)) {
1743 childN =
CreatePositionN((nodeName + rname +
"pos").Data(), translR,
"position");
1747 if ((rrot.
x != 0.0) || (rrot.
y != 0.0) || (rrot.
z != 0.0)) {
1748 childN =
CreateRotationN((nodeName + rname +
"rot").Data(), rrot,
"rotation");
1771 TIter next(&properties);
1773 while ((property = (
TNamed*)next()))
1929 if (strcmp(rotref,
"") != 0) {
1934 if (scaleN != NULL) {
1955 if ((offset >= 0.) && (strcmp(axis,
"kPhi") == 0)) {
1957 Double_t decimals = offset - offsetI;
1959 offset = (offsetI % 360) + decimals - 360;
1966 if (strcmp(volref,
"") != 0) {
1981 const char * clsname = geoShape->
ClassName();
1989 if (strcmp(clsname,
"TGeoBBox") == 0) {
1991 }
else if (strcmp(clsname,
"TGeoParaboloid") == 0) {
1993 }
else if (strcmp(clsname,
"TGeoSphere") == 0) {
1995 }
else if (strcmp(clsname,
"TGeoArb8") == 0) {
1997 }
else if (strcmp(clsname,
"TGeoConeSeg") == 0) {
1999 }
else if (strcmp(clsname,
"TGeoCone") == 0) {
2001 }
else if (strcmp(clsname,
"TGeoPara") == 0) {
2003 }
else if (strcmp(clsname,
"TGeoTrap") == 0) {
2005 }
else if (strcmp(clsname,
"TGeoGtra") == 0) {
2007 }
else if (strcmp(clsname,
"TGeoTrd1") == 0) {
2009 }
else if (strcmp(clsname,
"TGeoTrd2") == 0) {
2011 }
else if (strcmp(clsname,
"TGeoTubeSeg") == 0) {
2013 }
else if (strcmp(clsname,
"TGeoCtub") == 0) {
2015 }
else if (strcmp(clsname,
"TGeoTube") == 0) {
2017 }
else if (strcmp(clsname,
"TGeoPcon") == 0) {
2019 }
else if (strcmp(clsname,
"TGeoTorus") == 0) {
2021 }
else if (strcmp(clsname,
"TGeoPgon") == 0) {
2023 }
else if (strcmp(clsname,
"TGeoEltu") == 0) {
2025 }
else if (strcmp(clsname,
"TGeoHype") == 0) {
2027 }
else if (strcmp(clsname,
"TGeoXtru") == 0) {
2029 }
else if (strcmp(clsname,
"TGeoScaledShape") == 0) {
2032 if (scaleObjClsName ==
"TGeoCone") {
2035 Info(
"ChooseObject",
2036 "ERROR! TGeoScaledShape object is not possible to process correctly. %s object is processed without scale",
2037 scaleObjClsName.
Data());
2043 }
else if (strcmp(clsname,
"TGeoCompositeShape") == 0) {
2045 }
else if (strcmp(clsname,
"TGeoUnion") == 0) {
2047 }
else if (strcmp(clsname,
"TGeoIntersection") == 0) {
2049 }
else if (strcmp(clsname,
"TGeoSubtraction") == 0) {
2052 Info(
"ChooseObject",
"ERROR! %s Solid CANNOT be processed, solid is NOT supported",
2056 if (solidN == NULL) {
2078 if (cosb > 0.00001) {
2116 Double_t boxdx = 1E8 * (2 * rmax) + (2 * z);
2177 Bool_t isIN = list[name2check];
2205 TString fstLet = newname(0, 1);
2207 newname =
"O" + newname(1, newname.
Length());
2218 if (newname != oldname) {
2221 "WARNING! Name of the object was changed because it failed to comply with NCNAME xml datatype restrictions.");
2224 "WARNING! Probably more names are going to be changed to comply with NCNAME xml datatype restriction, but it will not be displayed on the screen.");
2232 newname = newname +
"0x" + objPointer;
2243 newname = newname + nameIter;
2263 return !(isProcessed);
2275 if (strcmp(pattName,
"TGeoPatternX") == 0) {
2277 }
else if (strcmp(pattName,
"TGeoPatternCylR") == 0) {
2282 if (strcmp(pattName,
"TGeoPatternY") == 0) {
2284 }
else if (strcmp(pattName,
"TGeoPatternCylPhi") == 0) {
2290 if (strcmp(pattName,
"TGeoPatternZ") == 0) {
2295 return "kUndefined";
2298 return "kUndefined";
2306 if (parValue == 0.) {
2307 Info(
"IsNullParam",
"ERROR! %s is NULL due to %s = %.12g, Volume based on this shape will be skipped",
static const double x2[5]
static const double x1[5]
include TDocParser_001 C image html pict1_TDocParser_001 png width
TRObject operator()(const T1 &t1) const
virtual Int_t GetSize() const
Return the capacity of the collection, i.e.
This class is used in the process of reading and writing the GDML "matrix" tag.
const char * GetMatrixAsString() const
This class contains implementation of converting ROOT's gGeoManager geometry to GDML file.
XMLNodePointer_t fSolidsNode
void UnsetTemporaryBits(TGeoManager *geoMng)
Unsetting bits that were changed in gGeoManager during export so that export can be run more times wi...
std::map< TString, Bool_t > NameList
XMLNodePointer_t CreateDivisionN(Double_t offset, Double_t width, Int_t number, const char *axis, const char *unit, const char *volref)
Creates "divisionvol" node for GDML.
static const UInt_t fgkProcBitVol
XMLNodePointer_t CreatePolyconeN(TGeoPcon *geoShape)
Creates "polycone" node for GDML.
XMLNodePointer_t CreateFractionN(Double_t percentage, const char *refName)
Creates "fraction" node for GDML.
void ExtractMatrices(TObjArray *matrices)
Method exporting GDML matrices.
XMLDocPointer_t fGdmlFile
void SetG4Compatibility(Bool_t G4Compatible)
XMLNodePointer_t CreateParaboloidN(TGeoParaboloid *geoShape)
Creates "paraboloid" node for GDML.
TGeoCompositeShape * CreateFakeCtub(TGeoCtub *geoShape)
Method creating cutTube as an intersection of tube and two boxes.
TGDMLWrite()
Default constructor.
XMLNodePointer_t CreateBoxN(TGeoBBox *geoShape)
Creates "box" node for GDML.
std::map< TString, Float_t > NameListF
XMLNodePointer_t CreateMaterialN(TGeoMaterial *material, TString mname)
Creates "material" node for GDML.
XMLNodePointer_t CreateSphereN(TGeoSphere *geoShape)
Creates "sphere" node for GDML.
XMLNodePointer_t CreateTwistedTrapN(TGeoGtra *geoShape)
Creates "twistedtrap" node for GDML.
XMLNodePointer_t CreateZplaneN(Double_t z, Double_t rmin, Double_t rmax)
Creates "zplane" node for GDML.
static const UInt_t fgkMaxNameErr
Bool_t IsNullParam(Double_t parValue, TString parName, TString objName)
Check for null parameter to skip the NULL objects.
static TGDMLWrite * fgGDMLWrite
TString ExtractSolid(TGeoShape *volShape)
Method creating solid to xml file and returning its name.
XMLNodePointer_t CreateHypeN(TGeoHype *geoShape)
Creates "hype" node for GDML.
XMLNodePointer_t CreateElConeN(TGeoScaledShape *geoShape)
Creates "elcone" (elliptical cone) node for GDML this is a special case, because elliptical cone is n...
XMLNodePointer_t CreateConstantN(const char *name, Double_t value)
Creates "constant" kind of node for GDML.
XMLNodePointer_t CreateMatrixN(TGDMLMatrix const *matrix)
Creates "matrix" kind of node for GDML.
XMLNodePointer_t CreateOpticalSurfaceN(TGeoOpticalSurface *geoSurf)
Creates "opticalsurface" node for GDML.
XMLNodePointer_t CreateMixtureN(TGeoMixture *mixture, XMLNodePointer_t materials, TString mname)
Creates "material" node for GDML with references to other sub elements.
std::map< TString, Int_t > NameListI
void ExtractBorderSurfaces(TObjArray *surfaces)
Method exporting border surfaces.
static const UInt_t fgkProcBit
floating point precision when writing
Bool_t CanProcess(TObject *pointer)
Method which tests whether solids can be processed.
XMLNodePointer_t CreatePolyhedraN(TGeoPgon *geoShape)
Creates "polyhedra" node for GDML.
void WriteGDMLfile(TGeoManager *geomanager, const char *filename="test.gdml", TString option="")
XMLNodePointer_t CreateRotationN(const char *name, Xyz rotation, const char *type="rotation", const char *unit="deg")
Creates "rotation" kind of node for GDML.
XMLNodePointer_t CreatePositionN(const char *name, Xyz position, const char *type="position", const char *unit="cm")
Creates "position" kind of node for GDML.
XMLNodePointer_t CreatePropertyN(TNamed const &property)
Creates "property" node for GDML.
XMLNodePointer_t CreateElementN(TGeoElement *element, XMLNodePointer_t materials, const char *name)
Creates "element" node for GDML element node and attribute.
XMLNodePointer_t CreateConeN(TGeoConeSeg *geoShape)
Creates "cone" node for GDML from TGeoConeSeg object.
XMLNodePointer_t CreateSkinSurfaceN(TGeoSkinSurface *geoSurf)
Creates "skinsurface" node for GDML.
XMLNodePointer_t CreateCutTubeN(TGeoCtub *geoShape)
Creates "cutTube" node for GDML.
XMLNodePointer_t fStructureNode
void ExtractSkinSurfaces(TObjArray *surfaces)
Method exporting skin surfaces.
XMLNodePointer_t fDefineNode
virtual ~TGDMLWrite()
Destructor.
XMLNodePointer_t CreateTorusN(TGeoTorus *geoShape)
Creates "torus" node for GDML.
void ExtractVolumes(TGeoVolume *volume)
Method extracting geometry structure recursively.
XMLNodePointer_t ExtractMaterials(TList *materialsLst)
Method exporting materials.
XMLNodePointer_t fMaterialsNode
void ExtractOpticalSurfaces(TObjArray *surfaces)
Method exporting optical surfaces.
XMLNodePointer_t CreateDN(Double_t density, const char *unit="g/cm3")
Creates "D" density node for GDML.
void ExtractConstants(TGeoManager *geom)
Method exporting GDML matrices.
XMLNodePointer_t CreateArb8N(TGeoArb8 *geoShape)
Creates "arb8" node for GDML.
XMLNodePointer_t StartVolumeN(const char *name, const char *solid, const char *material)
Creates "volume" node for GDML.
void SetNamingSpeed(ENamingType naming)
Set convention of naming solids and volumes.
TString GetPattAxis(Int_t divAxis, const char *pattName, TString &unit)
Method that retrieves axis and unit along which object is divided.
TString GenName(TString oldname)
NCNAME basic restrictions Replace "$" character with empty character etc.
XMLNodePointer_t CreateXtrusionN(TGeoXtru *geoShape)
Creates "xtru" node for GDML.
XMLNodePointer_t CreatePhysVolN(const char *name, Int_t copyno, const char *volref, const char *posref, const char *rotref, XMLNodePointer_t scaleN)
Creates "physvol" node for GDML.
Bool_t IsInList(NameList list, TString name2check)
Checks whether name2check is in (NameList) list.
XMLNodePointer_t StartAssemblyN(const char *name)
Creates "assembly" node for GDML.
XMLNodePointer_t CreateParaN(TGeoPara *geoShape)
Creates "para" node for GDML.
XMLNodePointer_t CreateSetupN(const char *topVolName, const char *name="default", const char *version="1.0")
Creates "setup" node for GDML.
XMLNodePointer_t CreateTrapN(TGeoTrap *geoShape)
Creates "trap" node for GDML.
Xyz GetXYZangles(const Double_t *rotationMatrix)
Retrieves X Y Z angles from rotation matrix.
XMLNodePointer_t CreateTubeN(TGeoTubeSeg *geoShape)
Creates "tube" node for GDML from object TGeoTubeSeg.
XMLNodePointer_t CreateBorderSurfaceN(TGeoBorderSurface *geoSurf)
Creates "bordersurface" node for GDML.
XMLNodePointer_t CreateAtomN(Double_t atom, const char *unit="g/mole")
Creates "atom" node for GDML.
XMLNodePointer_t CreateEltubeN(TGeoEltu *geoShape)
Creates "eltube" node for GDML.
XMLNodePointer_t CreateEllipsoidN(TGeoCompositeShape *geoShape, TString elName)
Creates "ellipsoid" node for GDML this is a special case, because ellipsoid is not defined in ROOT so...
XMLNodePointer_t CreateIsotopN(TGeoIsotope *isotope, const char *name)
Creates "isotope" node for GDML.
XMLNodePointer_t CreateCommonBoolN(TGeoCompositeShape *geoShape)
Creates common part of union intersection and subtraction nodes.
XMLNodePointer_t CreateTrdN(TGeoTrd1 *geoShape)
Creates "trd" node for GDML from object TGeoTrd1.
XMLNodePointer_t ChooseObject(TGeoShape *geoShape)
Chooses the object and method that should be used for processing object.
An arbitrary trapezoid with less than 8 vertices standing on two parallel planes perpendicular to Z a...
Bool_t TestAttBit(UInt_t f) const
virtual const Double_t * GetOrigin() const
virtual Double_t GetDX() const
virtual Double_t GetDZ() const
virtual Double_t GetDY() const
virtual EGeoBoolType GetBooleanOperator() const =0
TGeoMatrix * GetRightMatrix() const
TGeoShape * GetLeftShape() const
TGeoMatrix * GetLeftMatrix() const
TGeoShape * GetRightShape() const
TGeoNode const * GetNode2() const
TGeoOpticalSurface const * GetSurface() const
TGeoNode const * GetNode1() const
Class describing rotation + translation.
Class handling Boolean composition of shapes.
TGeoBoolNode * GetBoolNode() const
A phi segment of a conical tube.
virtual Double_t GetRmax2() const
virtual Double_t GetDz() const
virtual Double_t GetRmin2() const
virtual Double_t GetRmin1() const
virtual Double_t GetRmax1() const
A tube segment cut with 2 planes.
const Double_t * GetNlow() const
const Double_t * GetNhigh() const
Base class for chemical elements.
Int_t GetNisotopes() const
Bool_t HasIsotopes() const
Double_t GetRelativeAbundance(Int_t i) const
Return relative abundance of i-th isotope in this element.
TGeoIsotope * GetIsotope(Int_t i) const
Return i-th isotope in the element.
virtual Double_t GetA() const
virtual Double_t GetB() const
Gtra is a twisted trapezoid.
Double_t GetTwistAngle() const
virtual const Double_t * GetRotationMatrix() const
Hyperboloid class defined by 5 parameters.
Double_t GetStOut() const
The manager class for any TGeo geometry.
TObjArray * GetListOfVolumes() const
TObjArray * GetListOfSkinSurfaces() const
TObjArray * GetListOfGDMLMatrices() const
Int_t GetNproperties() const
TObjArray * GetListOfBorderSurfaces() const
Double_t GetProperty(const char *name, Bool_t *error=nullptr) const
Get a user-defined property.
TObjArray * GetListOfOpticalSurfaces() const
TList * GetListOfMaterials() const
TGeoVolume * GetTopVolume() const
Base class describing materials.
virtual Bool_t IsMixture() const
TList const & GetProperties() const
virtual Double_t GetA() const
virtual Double_t GetDensity() const
virtual Double_t GetZ() const
Geometrical transformation package.
virtual const Double_t * GetTranslation() const =0
Bool_t IsReflection() const
virtual const Double_t * GetRotationMatrix() const =0
virtual TGeoHMatrix Inverse() const =0
virtual TGeoElement * GetElement(Int_t i=0) const
Retrieve the pointer to the element corresponding to component I.
Double_t * GetWmixt() const
virtual Int_t GetNelements() const
A node represent a volume positioned inside another.They store links to both volumes and to the TGeoM...
TGeoVolume * GetVolume() const
virtual TGeoMatrix * GetMatrix() const =0
TList const & GetProperties() const
static const char * ModelToString(ESurfaceModel model)
static const char * TypeToString(ESurfaceType type)
ESurfaceModel GetModel() const
ESurfaceFinish GetFinish() const
static const char * FinishToString(ESurfaceFinish finish)
Double_t GetValue() const
ESurfaceType GetType() const
Double_t GetAlpha() const
Double_t GetTheta() const
Base finder class for patterns.
virtual Int_t GetDivAxis()
Double_t GetStart() const
Double_t * GetRmax() const
Double_t * GetRmin() const
Class describing rotations.
void SetAngles(Double_t phi, Double_t theta, Double_t psi)
Set matrix elements according to Euler angles.
virtual const Double_t * GetScale() const
A shape scaled by a TGeoScale transformation.
TGeoShape * GetShape() const
TGeoScale * GetScale() const
Base abstract class for all shapes.
virtual Double_t GetAxisRange(Int_t iaxis, Double_t &xlo, Double_t &xhi) const =0
virtual const char * GetName() const
Get the shape name.
TGeoVolume const * GetVolume() const
TGeoOpticalSurface const * GetSurface() const
virtual Double_t GetRmin() const
Double_t GetTheta2() const
virtual Double_t GetRmax() const
Double_t GetTheta1() const
Class describing translations.
TRAP is a general trapezoid, i.e.
Double_t GetAlpha2() const
Double_t GetTheta() const
Double_t GetAlpha1() const
A trapezoid with only x length varying with z.
A trapezoid with both x and y lengths varying with z.
virtual Double_t GetRmin() const
virtual Double_t GetDz() const
virtual Double_t GetRmax() const
TGeoVolume, TGeoVolumeMulti, TGeoVolumeAssembly are the volume classes.
TGeoMaterial * GetMaterial() const
TGeoPatternFinder * GetFinder() const
Bool_t IsTopVolume() const
True if this is the top volume of the geometry.
TGeoShape * GetShape() const
virtual Bool_t IsAssembly() const
Returns true if the volume is an assembly or a scaled assembly.
An extrusion with fixed outline shape in x-y and a sequence of z extents (segments).
Double_t GetYOffset(Int_t i) const
Double_t GetY(Int_t i) const
Double_t GetScale(Int_t i) const
Double_t GetXOffset(Int_t i) const
Double_t GetX(Int_t i) const
virtual void Add(TObject *obj)
virtual void Clear(Option_t *option="")
Remove all objects from the list.
The TNamed class is the base class for all named ROOT classes.
virtual const char * GetTitle() const
Returns title of object.
virtual const char * GetName() const
Returns name of object.
Int_t GetEntriesFast() const
Mother of all ROOT objects.
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
virtual const char * ClassName() const
Returns name of class to which the object belongs.
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
virtual void Fatal(const char *method, const char *msgfmt,...) const
Issue fatal error message.
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
void ToLower()
Change string to lower-case.
const char * Data() const
Bool_t IsDigit() const
Returns true if all characters in string are digits (0-9) or white spaces, i.e.
TString & ReplaceAll(const TString &s1, const TString &s2)
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
XMLAttrPointer_t NewAttr(XMLNodePointer_t xmlnode, XMLNsPointer_t, const char *name, const char *value)
creates new attribute for xmlnode, namespaces are not supported for attributes
XMLNsPointer_t NewNS(XMLNodePointer_t xmlnode, const char *reference, const char *name=0)
create namespace attribute for xmlnode.
void SaveDoc(XMLDocPointer_t xmldoc, const char *filename, Int_t layout=1)
store document content to file if layout<=0, no any spaces or newlines will be placed between xmlnode...
XMLNodePointer_t NewChild(XMLNodePointer_t parent, XMLNsPointer_t ns, const char *name, const char *content=0)
create new child element for parent node
void FreeDoc(XMLDocPointer_t xmldoc)
frees allocated document data and deletes document itself
void AddChild(XMLNodePointer_t parent, XMLNodePointer_t child)
add child element to xmlnode
XMLDocPointer_t NewDoc(const char *version="1.0")
creates new xml document with provided version
void SetSkipComments(Bool_t on=kTRUE)
void DocSetRootElement(XMLDocPointer_t xmldoc, XMLNodePointer_t xmlnode)
set main (root) node for document
static constexpr double rad
static constexpr double m2
constexpr Double_t E()
Base of natural log:
Double_t ATan2(Double_t, Double_t)
constexpr Double_t DegToRad()
Conversion from degree to radian:
Double_t Sqrt(Double_t x)
constexpr Double_t RadToDeg()
Conversion from radian to degree: