Geant4 11.2.2
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4GDMLWrite.hh
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26// G4GDMLWrite
27//
28// Class description:
29//
30// GDML writer.
31
32// Author: Zoltan Torzsok, November 2007
33// --------------------------------------------------------------------
34#ifndef G4GDMLWRITE_HH
35#define G4GDMLWRITE_HH 1
36
37#include <map>
38
39#include <xercesc/dom/DOM.hpp>
40#include <xercesc/util/XMLString.hpp>
41#include <xercesc/util/PlatformUtils.hpp>
42#include <xercesc/framework/LocalFileFormatTarget.hpp>
43
44#include "G4Transform3D.hh"
45
47
48class G4LogicalVolume;
50
52{
53 using VolumeMapType = std::map<const G4LogicalVolume*, G4Transform3D>;
54 using PhysVolumeMapType = std::map<const G4VPhysicalVolume*, G4String>;
55 using DepthMapType = std::map<G4int, G4int>;
56
57 public:
58
59 G4Transform3D Write(const G4String& filename,
60 const G4LogicalVolume* const topLog,
61 const G4String& schemaPath, const G4int depth,
62 G4bool storeReferences = true);
63 //
64 // Main method for writing GDML files.
65
66 void AddModule(const G4VPhysicalVolume* const topVol);
67 void AddModule(const G4int depth);
68 //
69 // Split geometry structure in modules, by volume subtree or level.
70
72 //
73 // Import auxiliary structure.
74
76 //
77 // Set the flag to allow overwriting of the output GDML file
78
79 static void SetAddPointerToName(G4bool);
80 //
81 // Specify if to add or not memory addresses to IDs.
82
83 virtual void DefineWrite(xercesc::DOMElement*) = 0;
84 virtual void MaterialsWrite(xercesc::DOMElement*) = 0;
85 virtual void SolidsWrite(xercesc::DOMElement*) = 0;
86 virtual void StructureWrite(xercesc::DOMElement*) = 0;
88 const G4int) = 0;
89 virtual void SurfacesWrite() = 0;
90 virtual void SetupWrite(xercesc::DOMElement*,
91 const G4LogicalVolume* const) = 0;
92 //
93 // Pure virtual methods implemented in concrete writer plugin's classes.
94
95 virtual void ExtensionWrite(xercesc::DOMElement*);
96 virtual void UserinfoWrite(xercesc::DOMElement*);
97 virtual void AddExtension(xercesc::DOMElement*,
98 const G4LogicalVolume* const);
99 //
100 // To be implemented in the client code for handling extensions
101 // to the GDML schema, identified with the tag "extension".
102 // The implementation should be placed inside a user-class
103 // inheriting from G4GDMLWriteStructure and being registered
104 // as argument to G4GDMLParser.
105
106 G4String GenerateName(const G4String&, const void* const);
107
108 protected:
109
110 G4GDMLWrite();
111 virtual ~G4GDMLWrite();
112
113 VolumeMapType& VolumeMap();
114
115 xercesc::DOMAttr* NewAttribute(const G4String&, const G4String&);
116 xercesc::DOMAttr* NewAttribute(const G4String&, const G4double&);
117 xercesc::DOMElement* NewElement(const G4String&);
118 G4String Modularize(const G4VPhysicalVolume* const topvol,
119 const G4int depth);
120
121 void AddAuxInfo(G4GDMLAuxListType* auxInfoList,
122 xercesc::DOMElement* element);
123
124 G4bool FileExists(const G4String&) const;
125 PhysVolumeMapType& PvolumeMap();
126 DepthMapType& DepthMap();
127
128 protected:
129
132 xercesc::DOMDocument* doc = nullptr;
133 xercesc::DOMElement* extElement = nullptr;
134 xercesc::DOMElement* userinfoElement = nullptr;
135
138};
139
140#endif
std::vector< G4GDMLAuxStructType > G4GDMLAuxListType
double G4double
Definition G4Types.hh:83
bool G4bool
Definition G4Types.hh:86
int G4int
Definition G4Types.hh:85
virtual void SurfacesWrite()=0
virtual void MaterialsWrite(xercesc::DOMElement *)=0
DepthMapType & DepthMap()
G4bool FileExists(const G4String &) const
static void SetAddPointerToName(G4bool)
G4GDMLAuxListType auxList
void AddModule(const G4VPhysicalVolume *const topVol)
xercesc::DOMElement * NewElement(const G4String &)
G4String GenerateName(const G4String &, const void *const)
G4String SchemaLocation
void AddAuxiliary(G4GDMLAuxStructType myaux)
G4String Modularize(const G4VPhysicalVolume *const topvol, const G4int depth)
virtual void AddExtension(xercesc::DOMElement *, const G4LogicalVolume *const)
virtual void SetupWrite(xercesc::DOMElement *, const G4LogicalVolume *const)=0
G4Transform3D Write(const G4String &filename, const G4LogicalVolume *const topLog, const G4String &schemaPath, const G4int depth, G4bool storeReferences=true)
virtual G4Transform3D TraverseVolumeTree(const G4LogicalVolume *const, const G4int)=0
virtual ~G4GDMLWrite()
xercesc::DOMElement * extElement
virtual void DefineWrite(xercesc::DOMElement *)=0
xercesc::DOMDocument * doc
xercesc::DOMAttr * NewAttribute(const G4String &, const G4String &)
virtual void UserinfoWrite(xercesc::DOMElement *)
void AddAuxInfo(G4GDMLAuxListType *auxInfoList, xercesc::DOMElement *element)
static G4bool addPointerToName
xercesc::DOMElement * userinfoElement
virtual void ExtensionWrite(xercesc::DOMElement *)
virtual void SolidsWrite(xercesc::DOMElement *)=0
VolumeMapType & VolumeMap()
virtual void StructureWrite(xercesc::DOMElement *)=0
G4bool overwriteOutputFile
void SetOutputFileOverwrite(G4bool flag)
PhysVolumeMapType & PvolumeMap()