Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
TGDMLParse.h
Go to the documentation of this file.
1/* @(#)root/gdml:$Id$ */
2// Authors: Ben Lloyd 09/11/06
3
4/*************************************************************************
5 * Copyright (C) 1995-2006, Rene Brun and Fons Rademakers. *
6 * All rights reserved. *
7 * *
8 * For the licensing terms see $ROOTSYS/LICENSE. *
9 * For the list of contributors see $ROOTSYS/README/CREDITS. *
10 *************************************************************************/
11
12#ifndef ROOT_TGDMLParse
13#define ROOT_TGDMLParse
14
15#include "TFormula.h"
16#include "TXMLEngine.h"
17#include "TGeoMatrix.h"
18#include "TGeoVolume.h"
19#include "TGeoElement.h"
20
21#include <map>
22#include <iostream>
23
24class TGDMLMatrix;
25
26/*************************************************************************
27 * TGDMLRefl - helper class for the import of GDML to ROOT. *
28 *************************************************************************/
29
30class TGDMLRefl : public TObject {
31public:
32
34
35 fNameS = "";
36 fSolid = "";
37 fMatrix = nullptr;
38 }
39
40 virtual ~TGDMLRefl() {}
41
42 TGDMLRefl(const char* name, const char* solid, TGeoMatrix* matrix);
44
45private:
46
47 const char* fNameS; //!reflected solid name
48 const char* fSolid; //!solid name being reflected
49 TGeoMatrix *fMatrix; //!matrix of reflected solid
50
51 ClassDef(TGDMLRefl, 0) //helper class used for the storage of reflected solids
52};
53
54/*************************************************************************
55 * TGDMLParse - base class for the import of GDML to ROOT. *
56 *************************************************************************/
57
58class TGDMLBaseTGDMMapHelper : public std::map<std::string, const void *> {
59};
60
61//map's [] operator returns reference.
62//to avoid ugly UB casts like static_cast<SomeType * &>(voidPtrLValue)
63//I have this helper class.
64template<typename T>
65
67private:
68 TGDMLBaseTGDMMapHelper::iterator fPosInMap;
69
70public:
71 TGDMAssignmentHelper(TGDMLBaseTGDMMapHelper &baseMap, const std::string &key) {
72 baseMap[key];//if we do not have this key-value pair before, insert it now (with zero for pointer).
73 //find iterator for this key now :)
74 fPosInMap = baseMap.find(key);
75 }
76
77 operator T * ()const {
78 return (T*)fPosInMap->second;//const_cast<T*>(static_cast<const T *>(fPosInMap->second));
79 }
80
82 fPosInMap->second = ptr;
83 return *this;
84 }
85};
86
87template<class T>
89public:
90 TGDMAssignmentHelper<T> operator [](const std::string &key) {
91 return TGDMAssignmentHelper<T>(*this, key);
92 }
93};
94
95class TGDMLParse : public TObject {
96public:
97
99 TGeoVolume* fWorld; //top volume of geometry
100 int fVolID; //volume ID, incremented as assigned.
101 int fFILENO; //Holds which level of file the parser is at
102 int fNunitless{0}; // Number of entities defined unitless
103 TXMLEngine* fFileEngine[20]; //array of dom object pointers
104 const char* fStartFile; //name of originating file
105 const char* fCurrentFile; //current file name being parsed
106 std::string fDefault_lunit = "mm";
107 std::string fDefault_aunit = "rad";
108
109 TGDMLParse();
110 virtual ~TGDMLParse() {}
111
112 static TGeoVolume* StartGDML(const char* filename) {
113 TGDMLParse* parser = new TGDMLParse;
114 TGeoVolume* world = parser->GDMLReadFile(filename);
115 return world;
116 }
117
118 TGeoVolume* GDMLReadFile(const char* filename = "test.gdml");
119
120private:
121
122 const char* ParseGDML(TXMLEngine* gdml, XMLNodePointer_t node) ;
123 TString GetScale(const char* unit);
124 double GetScaleVal(const char* unit);
125 double Evaluate(const char* evalline);
126 const char* NameShort(const char* name);
127 double Value(const char *svalue) const;
128 void DefineConstants();
129
130 //'define' section
137
138 //'materials' section
140 XMLNodePointer_t EleProcess(TXMLEngine* gdml, XMLNodePointer_t node, XMLNodePointer_t parentn, Bool_t hasIsotopes, Bool_t hasIsotopesExtended);
142
143 //'solids' section
168
169 //'structure' section
175 Int_t SetAxis(const char* axisString); //Set Axis for Division
176
177 //'setup' section
179
180 // Find defined objects by name
181 TGeoTranslation *GetPosition(const char *name);
182 TGeoRotation *GetRotation(const char *name);
183 TGeoScale *GetScaleObj(const char *name);
184 TGeoShape *GetSolid(const char *name);
185 TGeoVolume *GetVolume(const char *name);
186
195
202 typedef std::map<std::string, std::string> ReflectionsMap;
203 typedef std::map<std::string, std::string> ReflVolMap;
204 typedef std::map<std::string, double> FracMap;
205 typedef std::map<std::string, double> ConstMap;
206
207 PosMap fposmap; //!Map containing position names and the TGeoTranslation for it
208 RotMap frotmap; //!Map containing rotation names and the TGeoRotation for it
209 SclMap fsclmap; //!Map containing scale names and the TGeoScale for it
210 IsoMap fisomap; //!Map containing isotope names and the TGeoIsotope for it
211 EleMap felemap; //!Map containing element names and the TGeoElement for it
212 MatMap fmatmap; //!Map containing material names and the TGeoMaterial for it
213 MedMap fmedmap; //!Map containing medium names and the TGeoMedium for it
214 MixMap fmixmap; //!Map containing mixture names and the TGeoMixture for it
215 SolMap fsolmap; //!Map containing solid names and the TGeoShape for it
216 VolMap fvolmap; //!Map containing volume names and the TGeoVolume for it
217 PvolMap fpvolmap; //!Map containing placed volume names and the TGeoNode for it
218 ReflectionsMap freflectmap; //!Map containing reflection names and the Solid name ir references to
219 ReflSolidMap freflsolidmap; //!Map containing reflection names and the TGDMLRefl for it - containing refl matrix
220 ReflVolMap freflvolmap; //!Map containing reflected volume names and the solid ref for it
221 FileMap ffilemap; //!Map containing files parsed during entire parsing, with their world volume name
222 ConstMap fconsts; //!Map containing values of constants declared in the file
223 MatrixMap fmatrices; //!Map containing matrices defined in the GDML file
224
225 ClassDef(TGDMLParse, 0) //imports GDML using DOM and binds it to ROOT
226};
227
228#endif
bool Bool_t
Definition RtypesCore.h:63
int Int_t
Definition RtypesCore.h:45
#define ClassDef(name, id)
Definition Rtypes.h:337
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char filename
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t attr
char name[80]
Definition TGX11.cxx:110
void * XMLNodePointer_t
Definition TXMLEngine.h:17
void * XMLAttrPointer_t
Definition TXMLEngine.h:19
TGDMLBaseTGDMMapHelper::iterator fPosInMap
Definition TGDMLParse.h:68
TGDMAssignmentHelper & operator=(const T *ptr)
Definition TGDMLParse.h:81
TGDMAssignmentHelper(TGDMLBaseTGDMMapHelper &baseMap, const std::string &key)
Definition TGDMLParse.h:71
This class is used in the process of reading and writing the GDML "matrix" tag.
Definition TGDMLMatrix.h:34
This class contains the implementation of the GDML parser associated to all the supported GDML elemen...
Definition TGDMLParse.h:95
XMLNodePointer_t Ellipsoid(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, an ellipsoid may be declared.
double Evaluate(const char *evalline)
Takes a string containing a mathematical expression and returns the value of the expression.
TGeoVolume * GDMLReadFile(const char *filename="test.gdml")
Creates the new instance of the XMLEngine called 'gdml', using the filename >> then parses the file a...
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...
XMLNodePointer_t TopProcess(TXMLEngine *gdml, XMLNodePointer_t node)
In the setup section of the GDML file, the top volume need to be declared.
TGeoVolume * GetVolume(const char *name)
TGeoScale * GetScaleObj(const char *name)
std::map< std::string, std::string > ReflVolMap
Definition TGDMLParse.h:203
std::map< std::string, double > ConstMap
Definition TGDMLParse.h:205
ReflSolidMap freflsolidmap
Map containing reflection names and the Solid name ir references to.
Definition TGDMLParse.h:219
const char * ParseGDML(TXMLEngine *gdml, XMLNodePointer_t node)
This function recursively moves thru the DOM tree of the GDML file.
XMLNodePointer_t SclProcess(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the define section of the GDML file, rotations can be declared.
TGDMMapHelper< const char > FileMap
Definition TGDMLParse.h:201
TGDMLParse()
Constructor.
XMLNodePointer_t BorderSurfaceProcess(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the structure section of the GDML file, border surfaces can be declared.
virtual ~TGDMLParse()
Definition TGDMLParse.h:110
XMLNodePointer_t Trd(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, a Trd may be declared.
const char * fCurrentFile
Definition TGDMLParse.h:105
TGeoRotation * GetRotation(const char *name)
void DefineConstants()
Define constant expressions used.
std::map< std::string, std::string > ReflectionsMap
Definition TGDMLParse.h:202
const char * NameShort(const char *name)
This function looks thru a string for the chars '0x' next to each other, when it finds this,...
XMLNodePointer_t Orb(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, an Orb may be declared.
FileMap ffilemap
Map containing reflected volume names and the solid ref for it.
Definition TGDMLParse.h:221
TGDMMapHelper< TGDMLMatrix > MatrixMap
Definition TGDMLParse.h:199
MatrixMap fmatrices
Map containing values of constants declared in the file.
Definition TGDMLParse.h:223
XMLNodePointer_t Hype(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, a Hype may be declared.
TGDMMapHelper< TGeoMaterial > MatMap
Definition TGDMLParse.h:192
TGDMMapHelper< TGeoVolume > VolMap
Definition TGDMLParse.h:197
VolMap fvolmap
Map containing solid names and the TGeoShape for it.
Definition TGDMLParse.h:216
double GetScaleVal(const char *unit)
Throughout the GDML file, a unit can de specified.
std::string fDefault_lunit
Definition TGDMLParse.h:106
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.
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 Arb8(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, an Arb8 may be declared.
RotMap frotmap
Map containing position names and the TGeoTranslation for it.
Definition TGDMLParse.h:208
XMLNodePointer_t PosProcess(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the define section of the GDML file, positions can be declared.
ReflVolMap freflvolmap
Map containing reflection names and the TGDMLRefl for it - containing refl matrix.
Definition TGDMLParse.h:220
XMLNodePointer_t Sphere(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, a Sphere may be declared.
TString fWorldName
Definition TGDMLParse.h:98
ReflectionsMap freflectmap
Map containing placed volume names and the TGeoNode for it.
Definition TGDMLParse.h:218
XMLNodePointer_t Trap(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, a Trap may be declared.
TGeoVolume * fWorld
Definition TGDMLParse.h:99
std::map< std::string, double > FracMap
Definition TGDMLParse.h:204
XMLNodePointer_t EleProcess(TXMLEngine *gdml, XMLNodePointer_t node, XMLNodePointer_t parentn, Bool_t hasIsotopes, Bool_t hasIsotopesExtended)
When the element keyword is found, this function is called, and the name and values of the element ar...
XMLNodePointer_t Polyhedra(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, a Polyhedra may be declared.
XMLNodePointer_t Cone(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, a cone may be declared.
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.
TGDMMapHelper< TGeoElement > EleMap
Definition TGDMLParse.h:190
TGDMMapHelper< TGeoNode > PvolMap
Definition TGDMLParse.h:198
MatMap fmatmap
Map containing element names and the TGeoElement for it.
Definition TGDMLParse.h:212
TGDMMapHelper< TGeoMixture > MixMap
Definition TGDMLParse.h:194
SclMap fsclmap
Map containing rotation names and the TGeoRotation for it.
Definition TGDMLParse.h:209
XMLNodePointer_t MatrixProcess(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the define section of the GDML file, matrices These are referenced by other GDML tags,...
IsoMap fisomap
Map containing scale names and the TGeoScale for it.
Definition TGDMLParse.h:210
XMLNodePointer_t IsoProcess(TXMLEngine *gdml, XMLNodePointer_t node, XMLNodePointer_t parentn)
In the material section of the GDML file, an isotope may be declared.
PvolMap fpvolmap
Map containing volume names and the TGeoVolume for it.
Definition TGDMLParse.h:217
TGeoTranslation * GetPosition(const char *name)
XMLNodePointer_t TwistTrap(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, a TwistTrap may be declared.
MedMap fmedmap
Map containing material names and the TGeoMaterial for it.
Definition TGDMLParse.h:213
static TGeoVolume * StartGDML(const char *filename)
Definition TGDMLParse.h:112
TGDMMapHelper< TGeoShape > SolMap
Definition TGDMLParse.h:196
XMLNodePointer_t Paraboloid(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, a Paraboloid may be declared.
Int_t SetAxis(const char *axisString)
When using the 'divide' process in the geometry this function sets the variable 'axis' depending on w...
const char * fStartFile
Definition TGDMLParse.h:104
ConstMap fconsts
Map containing files parsed during entire parsing, with their world volume name.
Definition TGDMLParse.h:222
std::string fDefault_aunit
Definition TGDMLParse.h:107
XMLNodePointer_t QuantityProcess(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the define section of the GDML file, quantities can be declared.
TGDMMapHelper< TGeoTranslation > PosMap
Definition TGDMLParse.h:187
XMLNodePointer_t Polycone(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, a Polycone 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.
SolMap fsolmap
Map containing mixture names and the TGeoMixture for it.
Definition TGDMLParse.h:215
EleMap felemap
Map containing isotope names and the TGeoIsotope for it.
Definition TGDMLParse.h:211
XMLNodePointer_t Tube(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, a Tube may be declared.
TString GetScale(const char *unit)
Throughout the GDML file, a unit can de specified.
XMLNodePointer_t AssProcess(TXMLEngine *gdml, XMLNodePointer_t node)
In the structure section of the GDML file, assembly volumes can be declared.
PosMap fposmap
Definition TGDMLParse.h:207
TGeoShape * GetSolid(const char *name)
TXMLEngine * fFileEngine[20]
Definition TGDMLParse.h:103
XMLNodePointer_t RotProcess(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the define section of the GDML file, rotations can be declared.
TGDMMapHelper< TGeoMedium > MedMap
Definition TGDMLParse.h:193
TGDMMapHelper< TGeoIsotope > IsoMap
Definition TGDMLParse.h:191
XMLNodePointer_t Torus(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, a Torus may be declared.
TGDMMapHelper< TGeoScale > SclMap
Definition TGDMLParse.h:189
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 VolProcess(TXMLEngine *gdml, XMLNodePointer_t node)
In the structure section of the GDML file, volumes can be declared.
XMLNodePointer_t OpticalSurfaceProcess(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, optical surfaces can be defined.
XMLNodePointer_t SkinSurfaceProcess(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the structure section of the GDML file, skin surfaces can be declared.
XMLNodePointer_t ElTube(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, a ElTube 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.
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.
TGDMMapHelper< TGDMLRefl > ReflSolidMap
Definition TGDMLParse.h:200
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.
TGDMMapHelper< TGeoRotation > RotMap
Definition TGDMLParse.h:188
MixMap fmixmap
Map containing medium names and the TGeoMedium for it.
Definition TGDMLParse.h:214
XMLNodePointer_t UsrProcess(TXMLEngine *gdml, XMLNodePointer_t node)
User data to be processed.
This class is a helper class for TGDMLParse.
Definition TGDMLParse.h:30
virtual ~TGDMLRefl()
Definition TGDMLParse.h:40
const char * fNameS
Definition TGDMLParse.h:47
TGeoMatrix * fMatrix
solid name being reflected
Definition TGDMLParse.h:49
TGeoMatrix * GetMatrix()
This accessor method returns the matrix.
const char * fSolid
reflected solid name
Definition TGDMLParse.h:48
TGDMAssignmentHelper< T > operator[](const std::string &key)
Definition TGDMLParse.h:90
Geometrical transformation package.
Definition TGeoMatrix.h:41
Class describing rotations.
Definition TGeoMatrix.h:175
Class describing scale transformations.
Definition TGeoMatrix.h:245
Base abstract class for all shapes.
Definition TGeoShape.h:26
Class describing translations.
Definition TGeoMatrix.h:122
TGeoVolume, TGeoVolumeMulti, TGeoVolumeAssembly are the volume classes.
Definition TGeoVolume.h:49
Mother of all ROOT objects.
Definition TObject.h:41
Basic string class.
Definition TString.h:139
Typedefs used by the geometry group.