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)