4 // Author: I. Hrivnacova, 27.07.2000
6 // Class TG4XMLConvertor
7 // ---------------------
8 // The class provides methods for conversion of G4 basic geometry objects
9 // to XML defined by AGDD.dtd
10 // (ATLAS Generic Detector Description)
12 #ifndef TG4_XML_CONVERTOR_H
13 #define TG4_XML_CONVERTOR_H
15 #include "TG4VXMLConvertor.h"
16 #include "TG4Globals.h"
19 #include <g4std/fstream>
20 #include <g4std/vector>
24 class G4LogicalVolume;
35 class TG4XMLConvertor : public TG4VXMLConvertor
37 typedef G4std::vector<const G4RotationMatrix*> RotationMatrixVector;
40 TG4XMLConvertor(G4std::ofstream& outFile);
41 virtual ~TG4XMLConvertor();
44 virtual void OpenMaterials(const G4String& version, const G4String& date,
45 const G4String& author, const G4String dtdVersion);
46 virtual void OpenSection(const G4String& name, const G4String& version,
47 const G4String& date, const G4String& author,
48 const G4String& topVolume);
49 virtual void OpenComposition(const G4String& name);
50 virtual void CloseMaterials();
51 virtual void CloseSection();
52 virtual void CloseComposition();
54 virtual void WriteMaterial(const G4Material* material);
55 virtual void WriteSolid(G4String lvName, const G4VSolid* solid,
56 G4String materialName);
57 virtual void WriteRotation(const G4RotationMatrix* rotation);
58 virtual void WritePosition(G4String lvName, G4ThreeVector position);
59 virtual void WritePositionWithRotation(
60 G4String lvName, G4ThreeVector position,
61 const G4RotationMatrix* rotation);
62 virtual void WriteReplica(G4String lvName, G4PVReplica* pvr);
63 virtual void WriteEmptyLine();
64 virtual void IncreaseIndention();
65 virtual void DecreaseIndention();
68 void SetNumWidth(G4int width);
69 void SetNumPrecision(G4int precision);
73 void CutName(G4String& name) const;
74 void CutName(G4String& name, G4int size) const;
75 void PutName(G4String& element, G4String name, G4String templ) const;
78 void WriteBox (G4String lvName, const G4Box* box, G4String materialName);
79 void WriteTubs(G4String lvName, const G4Tubs* tubs, G4String materialName);
80 void WriteCons(G4String lvName, const G4Cons* cons, G4String materialName);
81 void WriteTrd (G4String lvName, const G4Trd* trd, G4String materialName);
82 void WriteTrap(G4String lvName, const G4Trap* trap, G4String materialName);
83 void WritePara(G4String lvName, const G4Para* para, G4String materialName);
84 void WritePolycone(G4String lvName, const G4Polycone* polycone,
85 G4String materialName);
86 void WritePolyhedra(G4String lvName, const G4Polyhedra* polyhedra,
87 G4String materialName);
89 // static data members
90 static const G4int fgkMaxVolumeNameLength; //maximal volume name length
91 static const G4int fgkMaxMaterialNameLength;//maximal material name length
92 static const G4int fgkDefaultNumWidth; //default output numbers width
93 static const G4int fgkDefaultNumPrecision; //default output numbers precision
96 G4std::ofstream& fOutFile; //output file
97 const G4String fkBasicIndention; //basic indention
98 G4String fIndention; //indention string
99 G4int fNW; //output numbers width
100 G4int fNP; //output numbers precision
101 G4int fRotationCounter; //counter of rotations
102 RotationMatrixVector fRotations; //vector of rot matrices
105 inline void TG4XMLConvertor::SetNumWidth(G4int width)
108 inline void TG4XMLConvertor::SetNumPrecision(G4int precision)
111 #endif //TG4_XML_CONVERTOR_H