12 #ifndef ROOT_TGDMLParse
13 #define ROOT_TGDMLParse
30 class TGDMLRefl :
public TObject {
40 virtual ~TGDMLRefl() {}
42 TGDMLRefl(
const char* name,
const char* solid, TGeoMatrix* matrix);
43 TGeoMatrix* GetMatrix();
51 ClassDef(TGDMLRefl, 0)
58 class TGDMLBaseTGDMMapHelper :
public std::map<std::string, const void *> {
66 class TGDMAssignmentHelper {
68 TGDMLBaseTGDMMapHelper::iterator fPosInMap;
71 TGDMAssignmentHelper(TGDMLBaseTGDMMapHelper &baseMap,
const std::string &key) {
74 fPosInMap = baseMap.find(key);
77 operator T * ()
const {
78 return (T*)fPosInMap->second;
81 TGDMAssignmentHelper & operator = (
const T * ptr) {
82 fPosInMap->second = ptr;
88 class TGDMMapHelper :
public TGDMLBaseTGDMMapHelper {
90 TGDMAssignmentHelper<T> operator [](
const std::string &key) {
91 return TGDMAssignmentHelper<T>(*
this, key);
95 class TGDMLParse :
public TObject {
102 TXMLEngine* fFileEngine[20];
103 const char* fStartFile;
104 const char* fCurrentFile;
105 std::string fDefault_lunit =
"mm";
106 std::string fDefault_aunit =
"rad";
109 virtual ~TGDMLParse() {}
111 static TGeoVolume* StartGDML(
const char* filename) {
112 TGDMLParse* parser =
new TGDMLParse;
113 TGeoVolume* world = parser->GDMLReadFile(filename);
117 TGeoVolume* GDMLReadFile(
const char* filename =
"test.gdml");
121 const char* ParseGDML(TXMLEngine* gdml, XMLNodePointer_t node) ;
122 TString GetScale(
const char* unit);
123 double GetScaleVal(
const char* unit);
124 double Evaluate(
const char* evalline);
125 const char* NameShort(
const char* name);
126 double Value(
const char *svalue)
const;
127 void DefineConstants();
130 XMLNodePointer_t ConProcess(TXMLEngine* gdml, XMLNodePointer_t node, XMLAttrPointer_t attr);
131 XMLNodePointer_t PosProcess(TXMLEngine* gdml, XMLNodePointer_t node, XMLAttrPointer_t attr);
132 XMLNodePointer_t QuantityProcess(TXMLEngine* gdml, XMLNodePointer_t node, XMLAttrPointer_t attr);
133 XMLNodePointer_t RotProcess(TXMLEngine* gdml, XMLNodePointer_t node, XMLAttrPointer_t attr);
134 XMLNodePointer_t SclProcess(TXMLEngine* gdml, XMLNodePointer_t node, XMLAttrPointer_t attr);
135 XMLNodePointer_t MatrixProcess(TXMLEngine* gdml, XMLNodePointer_t node, XMLAttrPointer_t attr);
138 XMLNodePointer_t IsoProcess(TXMLEngine* gdml, XMLNodePointer_t node, XMLNodePointer_t parentn);
139 XMLNodePointer_t EleProcess(TXMLEngine* gdml, XMLNodePointer_t node, XMLNodePointer_t parentn, Bool_t hasIsotopes, Bool_t hasIsotopesExtended);
140 XMLNodePointer_t MatProcess(TXMLEngine* gdml, XMLNodePointer_t node, XMLAttrPointer_t attr,
int z);
143 XMLNodePointer_t OpticalSurfaceProcess(TXMLEngine* gdml, XMLNodePointer_t node, XMLAttrPointer_t attr);
144 XMLNodePointer_t BooSolid(TXMLEngine* gdml, XMLNodePointer_t node, XMLAttrPointer_t attr,
int num);
145 XMLNodePointer_t Box(TXMLEngine* gdml, XMLNodePointer_t node, XMLAttrPointer_t attr);
146 XMLNodePointer_t Paraboloid(TXMLEngine* gdml, XMLNodePointer_t node, XMLAttrPointer_t attr);
147 XMLNodePointer_t Arb8(TXMLEngine* gdml, XMLNodePointer_t node, XMLAttrPointer_t attr);
148 XMLNodePointer_t Tube(TXMLEngine* gdml, XMLNodePointer_t node, XMLAttrPointer_t attr);
149 XMLNodePointer_t CutTube(TXMLEngine* gdml, XMLNodePointer_t node, XMLAttrPointer_t attr);
150 XMLNodePointer_t Cone(TXMLEngine* gdml, XMLNodePointer_t node, XMLAttrPointer_t attr);
151 XMLNodePointer_t ElCone(TXMLEngine* gdml, XMLNodePointer_t node, XMLAttrPointer_t attr);
152 XMLNodePointer_t Trap(TXMLEngine* gdml, XMLNodePointer_t node, XMLAttrPointer_t attr);
153 XMLNodePointer_t Trd(TXMLEngine* gdml, XMLNodePointer_t node, XMLAttrPointer_t attr);
154 XMLNodePointer_t Polycone(TXMLEngine* gdml, XMLNodePointer_t node, XMLAttrPointer_t attr);
155 XMLNodePointer_t Polyhedra(TXMLEngine* gdml, XMLNodePointer_t node, XMLAttrPointer_t attr);
156 XMLNodePointer_t Sphere(TXMLEngine* gdml, XMLNodePointer_t node, XMLAttrPointer_t attr);
157 XMLNodePointer_t Torus(TXMLEngine* gdml, XMLNodePointer_t node, XMLAttrPointer_t attr);
158 XMLNodePointer_t Hype(TXMLEngine* gdml, XMLNodePointer_t node, XMLAttrPointer_t attr);
159 XMLNodePointer_t Para(TXMLEngine* gdml, XMLNodePointer_t node, XMLAttrPointer_t attr);
160 XMLNodePointer_t TwistTrap(TXMLEngine* gdml, XMLNodePointer_t node, XMLAttrPointer_t attr);
161 XMLNodePointer_t ElTube(TXMLEngine* gdml, XMLNodePointer_t node, XMLAttrPointer_t attr);
162 XMLNodePointer_t Orb(TXMLEngine* gdml, XMLNodePointer_t node, XMLAttrPointer_t attr);
163 XMLNodePointer_t Xtru(TXMLEngine* gdml, XMLNodePointer_t node, XMLAttrPointer_t attr);
164 XMLNodePointer_t Reflection(TXMLEngine* gdml, XMLNodePointer_t node, XMLAttrPointer_t attr);
165 XMLNodePointer_t Ellipsoid(TXMLEngine* gdml, XMLNodePointer_t node, XMLAttrPointer_t attr);
168 XMLNodePointer_t VolProcess(TXMLEngine* gdml, XMLNodePointer_t node);
169 XMLNodePointer_t AssProcess(TXMLEngine* gdml, XMLNodePointer_t node);
170 XMLNodePointer_t UsrProcess(TXMLEngine* gdml, XMLNodePointer_t node);
171 XMLNodePointer_t SkinSurfaceProcess(TXMLEngine* gdml, XMLNodePointer_t node, XMLAttrPointer_t attr);
172 XMLNodePointer_t BorderSurfaceProcess(TXMLEngine* gdml, XMLNodePointer_t node, XMLAttrPointer_t attr);
173 Int_t SetAxis(
const char* axisString);
176 XMLNodePointer_t TopProcess(TXMLEngine* gdml, XMLNodePointer_t node);
178 typedef TGDMMapHelper<TGeoTranslation> PosMap;
179 typedef TGDMMapHelper<TGeoRotation> RotMap;
180 typedef TGDMMapHelper<TGeoScale> SclMap;
181 typedef TGDMMapHelper<TGeoElement> EleMap;
182 typedef TGDMMapHelper<TGeoIsotope> IsoMap;
183 typedef TGDMMapHelper<TGeoMaterial> MatMap;
184 typedef TGDMMapHelper<TGeoMedium> MedMap;
185 typedef TGDMMapHelper<TGeoMixture> MixMap;
187 typedef TGDMMapHelper<TGeoShape> SolMap;
188 typedef TGDMMapHelper<TGeoVolume> VolMap;
189 typedef TGDMMapHelper<TGeoNode> PvolMap;
190 typedef TGDMMapHelper<TGDMLMatrix> MatrixMap;
191 typedef TGDMMapHelper<TGDMLRefl> ReflSolidMap;
192 typedef TGDMMapHelper<const char> FileMap;
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;
209 ReflectionsMap freflectmap;
210 ReflSolidMap freflsolidmap;
211 ReflVolMap freflvolmap;
216 ClassDef(TGDMLParse, 0)