Logo ROOT   6.10/00
Reference Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
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 "TGeoMatrix.h"
16 
17 #include "TXMLEngine.h"
18 
19 #include "TGeoVolume.h"
20 
21 #include "TFormula.h"
22 
23 #include <map>
24 #include <vector>
25 #include <iostream>
26 
27 /*************************************************************************
28  * TGDMLRefl - helper class for the import of GDML to ROOT. *
29  *************************************************************************/
30 
31 class TGDMLRefl : public TObject {
32 public:
33 
35 
36  fNameS = "";
37  fSolid = "";
38  fMatrix = 0;
39  }
40 
41  virtual ~TGDMLRefl() {}
42 
43  TGDMLRefl(const char* name, const char* solid, TGeoMatrix* matrix);
45 
46 private:
47 
48  const char* fNameS; //!reflected solid name
49  const char* fSolid; //!solid name being reflected
50  TGeoMatrix *fMatrix; //!matrix of reflected solid
51 
52  ClassDef(TGDMLRefl, 0) //helper class used for the storage of reflected solids
53 };
54 
55 /*************************************************************************
56  * TGDMLParse - base class for the import of GDML to ROOT. *
57  *************************************************************************/
58 
59 class TGDMLBaseTGDMMapHelper : public std::map<std::string, const void *> {
60 };
61 
62 //map's [] operator returns reference.
63 //to avoid ugly UB casts like static_cast<SomeType * &>(voidPtrLValue)
64 //I have this helper class.
65 template<typename T>
66 
68 private:
69  TGDMLBaseTGDMMapHelper::iterator fPosInMap;
70 
71 public:
72  TGDMAssignmentHelper(TGDMLBaseTGDMMapHelper &baseMap, const std::string &key) {
73  baseMap[key];//if we do not have this key-value pair before, insert it now (with zero for pointer).
74  //find iterator for this key now :)
75  fPosInMap = baseMap.find(key);
76  }
77 
78  operator T * ()const {
79  return (T*)fPosInMap->second;//const_cast<T*>(static_cast<const T *>(fPosInMap->second));
80  }
81 
83  fPosInMap->second = ptr;
84  return *this;
85  }
86 };
87 
88 template<class T>
90 public:
91  TGDMAssignmentHelper<T> operator [](const std::string &key) {
92  return TGDMAssignmentHelper<T>(*this, key);
93  }
94 };
95 
96 class TGDMLParse : public TObject {
97 public:
98 
100  TGeoVolume* fWorld; //top volume of geometry
101  int fVolID; //volume ID, incremented as assigned.
102  int fFILENO; //Holds which level of file the parser is at
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 
107  TGDMLParse() { //constructor
108  fWorldName = "";
109  fWorld = 0;
110  fVolID = 0;
111  fFILENO = 0;
112  for (Int_t i=0; i<20; i++) fFileEngine[i] = 0;
113  fStartFile = 0;
114  fCurrentFile = 0;
115  }
116 
117  virtual ~TGDMLParse() { //destructor
118  }
119 
120  static TGeoVolume* StartGDML(const char* filename) {
121  TGDMLParse* parser = new TGDMLParse;
122  TGeoVolume* world = parser->GDMLReadFile(filename);
123  return world;
124  }
125 
126  TGeoVolume* GDMLReadFile(const char* filename = "test.gdml");
127 
128 private:
129 
130  const char* ParseGDML(TXMLEngine* gdml, XMLNodePointer_t node) ;
131  TString GetScale(const char* unit);
132  double GetScaleVal(const char* unit);
133  double Evaluate(const char* evalline);
134  const char* NameShort(const char* name);
135  double Value(const char *svalue) const;
136 
137  //'define' section
142 
143  //'materials' section
145  XMLNodePointer_t EleProcess(TXMLEngine* gdml, XMLNodePointer_t node, XMLNodePointer_t parentn, Bool_t hasIsotopes, Bool_t hasIsotopesExtended);
146  //XMLNodePointer_t EleProcess(TXMLEngine* gdml, XMLNodePointer_t node, XMLNodePointer_t parentn);
148  //XMLNodePointer_t MatProcess(TXMLEngine* gdml, XMLNodePointer_t node, XMLAttrPointer_t attr);
149 
150  //'solids' section
172  XMLNodePointer_t Ellipsoid(TXMLEngine* gdml, XMLNodePointer_t node, XMLAttrPointer_t attr); //not really implemented: just approximation to a TGeoBBox
173 
174  //'structure' section
178  Int_t SetAxis(const char* axisString); //Set Axis for Division
179 
180  //'setup' section
182 
191 
196  typedef std::map<std::string, std::string> ReflectionsMap;
197  typedef std::map<std::string, std::string> ReflVolMap;
198  typedef std::map<std::string, double> FracMap;
199  typedef std::map<std::string, double> ConstMap;
200 
201  PosMap fposmap; //!Map containing position names and the TGeoTranslation for it
202  RotMap frotmap; //!Map containing rotation names and the TGeoRotation for it
203  SclMap fsclmap; //!Map containing scale names and the TGeoScale for it
204  IsoMap fisomap; //!Map containing isotope names and the TGeoIsotope for it
205  EleMap felemap; //!Map containing element names and the TGeoElement for it
206  MatMap fmatmap; //!Map containing material names and the TGeoMaterial for it
207  MedMap fmedmap; //!Map containing medium names and the TGeoMedium for it
208  MixMap fmixmap; //!Map containing mixture names and the TGeoMixture for it
209  SolMap fsolmap; //!Map containing solid names and the TGeoShape for it
210  VolMap fvolmap; //!Map containing volume names and the TGeoVolume for it
211  ReflectionsMap freflectmap; //!Map containing reflection names and the Solid name ir references to
212  ReflSolidMap freflsolidmap; //!Map containing reflection names and the TGDMLRefl for it - containing refl matrix
213  ReflVolMap freflvolmap; //!Map containing reflected volume names and the solid ref for it
214  FileMap ffilemap; //!Map containing files parsed during entire parsing, with their world volume name
215  ConstMap fconsts; //!Map containing values of constants declared in the file
216 
217  ClassDef(TGDMLParse, 0) //imports GDML using DOM and binds it to ROOT
218 };
219 
220 #endif
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.
Definition: TGDMLParse.cxx:403
TGDMAssignmentHelper< T > operator[](const std::string &key)
Definition: TGDMLParse.h:91
TGDMMapHelper< TGeoTranslation > PosMap
Definition: TGDMLParse.h:183
XMLNodePointer_t TwistTrap(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, a TwistTrap may be declared.
RotMap frotmap
Map containing position names and the TGeoTranslation for it.
Definition: TGDMLParse.h:202
TGDMMapHelper< TGeoMedium > MedMap
Definition: TGDMLParse.h:189
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.
Definition: TGDMLParse.h:206
TGeoVolume * fWorld
Definition: TGDMLParse.h:100
std::map< std::string, double > ConstMap
Definition: TGDMLParse.h:199
TGDMAssignmentHelper(TGDMLBaseTGDMMapHelper &baseMap, const std::string &key)
Definition: TGDMLParse.h:72
Geometrical transformation package.
Definition: TGeoMatrix.h:38
XMLNodePointer_t Paraboloid(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, a Paraboloid may be declared.
double T(double x)
Definition: ChebyshevPol.h:34
XMLNodePointer_t Xtru(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, an Xtru may be declared.
TGDMMapHelper< TGeoIsotope > IsoMap
Definition: TGDMLParse.h:187
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.
Definition: TGDMLParse.h:205
TGeoVolume, TGeoVolumeMulti, TGeoVolumeAssembly are the volume classes.
Definition: TGeoVolume.h:48
XMLNodePointer_t Cone(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, a cone may be declared.
TString GetScale(const char *unit)
Throughout the GDML file, a unit can de specified.
Definition: TGDMLParse.cxx:436
Basic string class.
Definition: TString.h:129
XMLNodePointer_t IsoProcess(TXMLEngine *gdml, XMLNodePointer_t node, XMLNodePointer_t parentn)
In the material section of the GDML file, an isotope may be declared.
Definition: TGDMLParse.cxx:750
XMLNodePointer_t Polycone(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, a Polycone may be declared.
int Int_t
Definition: RtypesCore.h:41
bool Bool_t
Definition: RtypesCore.h:59
TGDMMapHelper< const char > FileMap
Definition: TGDMLParse.h:195
double GetScaleVal(const char *unit)
Throughout the GDML file, a unit can de specified.
Definition: TGDMLParse.cxx:482
TGDMMapHelper< TGeoShape > SolMap
Definition: TGDMLParse.h:192
ReflectionsMap freflectmap
Map containing volume names and the TGeoVolume for it.
Definition: TGDMLParse.h:211
TGDMMapHelper< TGeoMaterial > MatMap
Definition: TGDMLParse.h:188
const char * fCurrentFile
Definition: TGDMLParse.h:105
XMLNodePointer_t SclProcess(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the define section of the GDML file, rotations can be declared.
Definition: TGDMLParse.cxx:706
TGDMMapHelper< TGeoVolume > VolMap
Definition: TGDMLParse.h:193
TGeoMatrix * fMatrix
solid name being reflected
Definition: TGDMLParse.h:50
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)
Definition: TGDMLParse.cxx:352
#define ClassDef(name, id)
Definition: Rtypes.h:297
TGeoMatrix * GetMatrix()
this accessor method returns the matrix.
TGeoVolume * GDMLReadFile(const char *filename="test.gdml")
creates the new instance of the XMLEngine called &#39;gdml&#39;, using the filename &gt;&gt; then parses the file a...
Definition: TGDMLParse.cxx:127
TGDMMapHelper< TGeoElement > EleMap
Definition: TGDMLParse.h:186
double Value(const char *svalue) const
Convert number in string format to double value.
Definition: TGDMLParse.cxx:522
virtual ~TGDMLParse()
Definition: TGDMLParse.h:117
XMLNodePointer_t Arb8(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, an Arb8 may be declared.
FileMap ffilemap
Map containing reflected volume names and the solid ref for it.
Definition: TGDMLParse.h:214
ConstMap fconsts
Map containing files parsed during entire parsing, with their world volume name.
Definition: TGDMLParse.h:215
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.
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.
XMLNodePointer_t PosProcess(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the define section of the GDML file, positions can be declared.
Definition: TGDMLParse.cxx:595
XMLNodePointer_t Torus(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, a Torus may be declared.
std::map< std::string, std::string > ReflectionsMap
Definition: TGDMLParse.h:196
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.
std::map< std::string, double > FracMap
Definition: TGDMLParse.h:198
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.
const char * fStartFile
Definition: TGDMLParse.h:104
const char * fSolid
reflected solid name
Definition: TGDMLParse.h:49
XMLNodePointer_t RotProcess(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the define section of the GDML file, rotations can be declared.
Definition: TGDMLParse.cxx:648
TXMLEngine * fFileEngine[20]
Definition: TGDMLParse.h:103
XMLNodePointer_t Hype(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, a Hype may be declared.
void * XMLNodePointer_t
Definition: TXMLEngine.h:17
IsoMap fisomap
Map containing scale names and the TGeoScale for it.
Definition: TGDMLParse.h:204
XMLNodePointer_t TopProcess(TXMLEngine *gdml, XMLNodePointer_t node)
In the setup section of the GDML file, the top volume need to be declared.
const char * fNameS
Definition: TGDMLParse.h:48
void * XMLAttrPointer_t
Definition: TXMLEngine.h:19
XMLNodePointer_t Polyhedra(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, a Polyhedra may be declared.
MixMap fmixmap
Map containing medium names and the TGeoMedium for it.
Definition: TGDMLParse.h:208
Int_t SetAxis(const char *axisString)
When using the &#39;divide&#39; process in the geometry this function sets the variable &#39;axis&#39; depending on w...
Definition: TGDMLParse.cxx:363
TGDMMapHelper< TGeoScale > SclMap
Definition: TGDMLParse.h:185
TGDMLBaseTGDMMapHelper::iterator fPosInMap
Definition: TGDMLParse.h:69
TGDMAssignmentHelper & operator=(const T *ptr)
Definition: TGDMLParse.h:82
const char * NameShort(const char *name)
this function looks thru a string for the chars &#39;0x&#39; next to each other, when it finds this...
Definition: TGDMLParse.cxx:388
MedMap fmedmap
Map containing material names and the TGeoMaterial for it.
Definition: TGDMLParse.h:207
Mother of all ROOT objects.
Definition: TObject.h:37
you should not use this method at all Int_t Int_t z
Definition: TRolke.cxx:630
TGDMMapHelper< TGeoRotation > RotMap
Definition: TGDMLParse.h:184
SclMap fsclmap
Map containing rotation names and the TGeoRotation for it.
Definition: TGDMLParse.h:203
TGDMMapHelper< TGeoMixture > MixMap
Definition: TGDMLParse.h:190
SolMap fsolmap
Map containing mixture names and the TGeoMixture for it.
Definition: TGDMLParse.h:209
const char * ParseGDML(TXMLEngine *gdml, XMLNodePointer_t node)
this function recursively moves thru the DOM tree of the GDML file.
Definition: TGDMLParse.cxx:164
ReflVolMap freflvolmap
Map containing reflection names and the TGDMLRefl for it - containing refl matrix.
Definition: TGDMLParse.h:213
VolMap fvolmap
Map containing solid names and the TGeoShape for it.
Definition: TGDMLParse.h:210
XMLNodePointer_t ElTube(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, a ElTube may be declared.
std::map< std::string, std::string > ReflVolMap
Definition: TGDMLParse.h:197
ReflSolidMap freflsolidmap
Map containing reflection names and the Solid name ir references to.
Definition: TGDMLParse.h:212
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)
Definition: TGDMLParse.cxx:810
TGDMMapHelper< TGDMLRefl > ReflSolidMap
Definition: TGDMLParse.h:194
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.
virtual ~TGDMLRefl()
Definition: TGDMLParse.h:41
TString fWorldName
Definition: TGDMLParse.h:99
char name[80]
Definition: TGX11.cxx:109
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.
static TGeoVolume * StartGDML(const char *filename)
Definition: TGDMLParse.h:120
PosMap fposmap
Definition: TGDMLParse.h:201