// $Id$ // Category: geometry // // Author: I. Hrivnacova, 27.07.2000 // // Class TG4XMLGeometryGenerator // ----------------------------- // Singleton class for generation of geometry data files in XML, // the XML format is independent from G4 geometry // object model. #ifndef TG4_XML_GEOMETRY_GENERATOR_H #define TG4_XML_GEOMETRY_GENERATOR_H #include "TG4Verbose.h" #include "TG4Globals.h" #include #include class TG4VXMLConvertor; class G4LogicalVolume; class TG4XMLGeometryGenerator : public TG4Verbose { public: TG4XMLGeometryGenerator(); // --> protected // TG4XMLGeometryGenerator(const TG4XMLGeometryGenerator& right); virtual ~TG4XMLGeometryGenerator(); // static access method static TG4XMLGeometryGenerator* Instance(); // methods void GenerateMaterials(const G4String& version, const G4String& date, const G4String& author, const G4String dtdVersion, G4LogicalVolume* lv); void GenerateSection(const G4String& name, const G4String& version, const G4String& date, const G4String& author, const G4String& topVolume, G4LogicalVolume* lv); void OpenFile(G4String filePath); void CloseFile(); protected: TG4XMLGeometryGenerator(const TG4XMLGeometryGenerator& right); // operators TG4XMLGeometryGenerator& operator=(const TG4XMLGeometryGenerator& right); private: // methods void CutName(G4String& name) const; void ProcessLogicalVolume(G4LogicalVolume* lv); void ProcessMaterials(G4LogicalVolume* lv); void ProcessSolids(G4LogicalVolume* lv); void ProcessRotations(G4LogicalVolume* lv); void ClearMaterialNames(); void ClearVolumeNames(); // static data members static TG4XMLGeometryGenerator* fgInstance; //this instance // data members TG4VXMLConvertor* fConvertor; //interface to XML convertor G4std::ofstream fOutFile; //output file TG4StringSet fMaterialNames; //set of names of materials TG4StringSet fVolumeNames; //set of names of solids }; // inline methods inline TG4XMLGeometryGenerator* TG4XMLGeometryGenerator::Instance() { return fgInstance; } #endif //TG4_GEOMETRY_XML_MANAGER_H