Logo ROOT  
Reference Guide
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
20#include <map>
21#include <iostream>
22
23class TGDMLMatrix;
24
25/*************************************************************************
26 * TGDMLRefl - helper class for the import of GDML to ROOT. *
27 *************************************************************************/
28
29class TGDMLRefl : public TObject {
30public:
31
33
34 fNameS = "";
35 fSolid = "";
36 fMatrix = 0;
37 }
38
39 virtual ~TGDMLRefl() {}
40
41 TGDMLRefl(const char* name, const char* solid, TGeoMatrix* matrix);
43
44private:
45
46 const char* fNameS; //!reflected solid name
47 const char* fSolid; //!solid name being reflected
48 TGeoMatrix *fMatrix; //!matrix of reflected solid
49
50 ClassDef(TGDMLRefl, 0) //helper class used for the storage of reflected solids
51};
52
53/*************************************************************************
54 * TGDMLParse - base class for the import of GDML to ROOT. *
55 *************************************************************************/
56
57class TGDMLBaseTGDMMapHelper : public std::map<std::string, const void *> {
58};
59
60//map's [] operator returns reference.
61//to avoid ugly UB casts like static_cast<SomeType * &>(voidPtrLValue)
62//I have this helper class.
63template<typename T>
64
66private:
67 TGDMLBaseTGDMMapHelper::iterator fPosInMap;
68
69public:
70 TGDMAssignmentHelper(TGDMLBaseTGDMMapHelper &baseMap, const std::string &key) {
71 baseMap[key];//if we do not have this key-value pair before, insert it now (with zero for pointer).
72 //find iterator for this key now :)
73 fPosInMap = baseMap.find(key);
74 }
75
76 operator T * ()const {
77 return (T*)fPosInMap->second;//const_cast<T*>(static_cast<const T *>(fPosInMap->second));
78 }
79
81 fPosInMap->second = ptr;
82 return *this;
83 }
84};
85
86template<class T>
88public:
89 TGDMAssignmentHelper<T> operator [](const std::string &key) {
90 return TGDMAssignmentHelper<T>(*this, key);
91 }
92};
93
94class TGDMLParse : public TObject {
95public:
96
98 TGeoVolume* fWorld; //top volume of geometry
99 int fVolID; //volume ID, incremented as assigned.
100 int fFILENO; //Holds which level of file the parser is at
101 TXMLEngine* fFileEngine[20]; //array of dom object pointers
102 const char* fStartFile; //name of originating file
103 const char* fCurrentFile; //current file name being parsed
104 std::string fDefault_lunit = "mm";
105 std::string fDefault_aunit = "rad";
106
107 TGDMLParse();
108 virtual ~TGDMLParse() {}
109
110 static TGeoVolume* StartGDML(const char* filename) {
111 TGDMLParse* parser = new TGDMLParse;
112 TGeoVolume* world = parser->GDMLReadFile(filename);
113 return world;
114 }
115
116 TGeoVolume* GDMLReadFile(const char* filename = "test.gdml");
117
118private:
119
120 const char* ParseGDML(TXMLEngine* gdml, XMLNodePointer_t node) ;
121 TString GetScale(const char* unit);
122 double GetScaleVal(const char* unit);
123 double Evaluate(const char* evalline);
124 const char* NameShort(const char* name);
125 double Value(const char *svalue) const;
126 void DefineConstants();
127
128 //'define' section
135
136 //'materials' section
138 XMLNodePointer_t EleProcess(TXMLEngine* gdml, XMLNodePointer_t node, XMLNodePointer_t parentn, Bool_t hasIsotopes, Bool_t hasIsotopesExtended);
140
141 //'solids' section
166
167 //'structure' section
173 Int_t SetAxis(const char* axisString); //Set Axis for Division
174
175 //'setup' section
177
186
193 typedef std::map<std::string, std::string> ReflectionsMap;
194 typedef std::map<std::string, std::string> ReflVolMap;
195 typedef std::map<std::string, double> FracMap;
196 typedef std::map<std::string, double> ConstMap;
197
198 PosMap fposmap; //!Map containing position names and the TGeoTranslation for it
199 RotMap frotmap; //!Map containing rotation names and the TGeoRotation for it
200 SclMap fsclmap; //!Map containing scale names and the TGeoScale for it
201 IsoMap fisomap; //!Map containing isotope names and the TGeoIsotope for it
202 EleMap felemap; //!Map containing element names and the TGeoElement for it
203 MatMap fmatmap; //!Map containing material names and the TGeoMaterial for it
204 MedMap fmedmap; //!Map containing medium names and the TGeoMedium for it
205 MixMap fmixmap; //!Map containing mixture names and the TGeoMixture for it
206 SolMap fsolmap; //!Map containing solid names and the TGeoShape for it
207 VolMap fvolmap; //!Map containing volume names and the TGeoVolume for it
208 PvolMap fpvolmap; //!Map containing placed volume names and the TGeoNode for it
209 ReflectionsMap freflectmap; //!Map containing reflection names and the Solid name ir references to
210 ReflSolidMap freflsolidmap; //!Map containing reflection names and the TGDMLRefl for it - containing refl matrix
211 ReflVolMap freflvolmap; //!Map containing reflected volume names and the solid ref for it
212 FileMap ffilemap; //!Map containing files parsed during entire parsing, with their world volume name
213 ConstMap fconsts; //!Map containing values of constants declared in the file
214 MatrixMap fmatrices; //!Map containing matrices defined in the GDML file
215
216 ClassDef(TGDMLParse, 0) //imports GDML using DOM and binds it to ROOT
217};
218
219#endif
int Int_t
Definition: RtypesCore.h:43
bool Bool_t
Definition: RtypesCore.h:61
#define ClassDef(name, id)
Definition: Rtypes.h:322
char name[80]
Definition: TGX11.cxx:109
void * XMLNodePointer_t
Definition: TXMLEngine.h:17
void * XMLAttrPointer_t
Definition: TXMLEngine.h:19
TGDMLBaseTGDMMapHelper::iterator fPosInMap
Definition: TGDMLParse.h:67
TGDMAssignmentHelper & operator=(const T *ptr)
Definition: TGDMLParse.h:80
TGDMAssignmentHelper(TGDMLBaseTGDMMapHelper &baseMap, const std::string &key)
Definition: TGDMLParse.h:70
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:94
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.
Definition: TGDMLParse.cxx:401
TGeoVolume * GDMLReadFile(const char *filename="test.gdml")
Creates the new instance of the XMLEngine called 'gdml', using the filename >> then parses the file a...
Definition: TGDMLParse.cxx:159
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.
std::map< std::string, std::string > ReflVolMap
Definition: TGDMLParse.h:194
std::map< std::string, double > ConstMap
Definition: TGDMLParse.h:196
ReflSolidMap freflsolidmap
Map containing reflection names and the Solid name ir references to.
Definition: TGDMLParse.h:210
const char * ParseGDML(TXMLEngine *gdml, XMLNodePointer_t node)
This function recursively moves thru the DOM tree of the GDML file.
Definition: TGDMLParse.cxx:194
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:948
TGDMMapHelper< const char > FileMap
Definition: TGDMLParse.h:192
TGDMLParse()
Constructor.
Definition: TGDMLParse.cxx:128
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:108
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:103
void DefineConstants()
Define constant expressions used.
Definition: TGDMLParse.cxx:484
std::map< std::string, std::string > ReflectionsMap
Definition: TGDMLParse.h:193
const char * NameShort(const char *name)
This function looks thru a string for the chars '0x' next to each other, when it finds this,...
Definition: TGDMLParse.cxx:436
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:212
TGDMMapHelper< TGDMLMatrix > MatrixMap
Definition: TGDMLParse.h:190
MatrixMap fmatrices
Map containing values of constants declared in the file.
Definition: TGDMLParse.h:214
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:183
TGDMMapHelper< TGeoVolume > VolMap
Definition: TGDMLParse.h:188
VolMap fvolmap
Map containing solid names and the TGeoShape for it.
Definition: TGDMLParse.h:207
double GetScaleVal(const char *unit)
Throughout the GDML file, a unit can de specified.
Definition: TGDMLParse.cxx:715
std::string fDefault_lunit
Definition: TGDMLParse.h:104
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:199
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:839
ReflVolMap freflvolmap
Map containing reflection names and the TGDMLRefl for it - containing refl matrix.
Definition: TGDMLParse.h:211
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:97
ReflectionsMap freflectmap
Map containing placed volume names and the TGeoNode for it.
Definition: TGDMLParse.h:209
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:98
std::map< std::string, double > FracMap
Definition: TGDMLParse.h:195
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:181
TGDMMapHelper< TGeoNode > PvolMap
Definition: TGDMLParse.h:189
MatMap fmatmap
Map containing element names and the TGeoElement for it.
Definition: TGDMLParse.h:203
TGDMMapHelper< TGeoMixture > MixMap
Definition: TGDMLParse.h:185
SclMap fsclmap
Map containing rotation names and the TGeoRotation for it.
Definition: TGDMLParse.h:200
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,...
Definition: TGDMLParse.cxx:556
XMLNodePointer_t Tessellated(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the solids section of the GDML file, a tessellated shape may be declared.
IsoMap fisomap
Map containing scale names and the TGeoScale for it.
Definition: TGDMLParse.h:201
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:992
PvolMap fpvolmap
Map containing volume names and the TGeoVolume for it.
Definition: TGDMLParse.h:208
double Value(const char *svalue) const
Convert number in string format to double value.
Definition: TGDMLParse.cxx:756
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:204
static TGeoVolume * StartGDML(const char *filename)
Definition: TGDMLParse.h:110
TGDMMapHelper< TGeoShape > SolMap
Definition: TGDMLParse.h:187
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...
Definition: TGDMLParse.cxx:411
const char * fStartFile
Definition: TGDMLParse.h:102
ConstMap fconsts
Map containing files parsed during entire parsing, with their world volume name.
Definition: TGDMLParse.h:213
std::string fDefault_aunit
Definition: TGDMLParse.h:105
XMLNodePointer_t QuantityProcess(TXMLEngine *gdml, XMLNodePointer_t node, XMLAttrPointer_t attr)
In the define section of the GDML file, quantities can be declared.
Definition: TGDMLParse.cxx:525
TGDMMapHelper< TGeoTranslation > PosMap
Definition: TGDMLParse.h:178
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:206
EleMap felemap
Map containing isotope names and the TGeoIsotope for it.
Definition: TGDMLParse.h:202
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.
Definition: TGDMLParse.cxx:670
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:198
TXMLEngine * fFileEngine[20]
Definition: TGDMLParse.h:101
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:891
TGDMMapHelper< TGeoMedium > MedMap
Definition: TGDMLParse.h:184
TGDMMapHelper< TGeoIsotope > IsoMap
Definition: TGDMLParse.h:182
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:180
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:452
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.
Definition: TGDMLParse.cxx:605
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:191
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.
int fVolID
Definition: TGDMLParse.h:99
TGDMMapHelper< TGeoRotation > RotMap
Definition: TGDMLParse.h:179
MixMap fmixmap
Map containing medium names and the TGeoMedium for it.
Definition: TGDMLParse.h:205
XMLNodePointer_t UsrProcess(TXMLEngine *gdml, XMLNodePointer_t node)
User data to be processed.
This class is a helper class for TGDMLParse.
Definition: TGDMLParse.h:29
virtual ~TGDMLRefl()
Definition: TGDMLParse.h:39
const char * fNameS
Definition: TGDMLParse.h:46
TGeoMatrix * fMatrix
solid name being reflected
Definition: TGDMLParse.h:48
TGeoMatrix * GetMatrix()
This accessor method returns the matrix.
const char * fSolid
reflected solid name
Definition: TGDMLParse.h:47
TGDMAssignmentHelper< T > operator[](const std::string &key)
Definition: TGDMLParse.h:89
Geometrical transformation package.
Definition: TGeoMatrix.h:41
TGeoVolume, TGeoVolumeMulti, TGeoVolumeAssembly are the volume classes.
Definition: TGeoVolume.h:47
Mother of all ROOT objects.
Definition: TObject.h:37
Basic string class.
Definition: TString.h:131
double T(double x)
Definition: ChebyshevPol.h:34