Geant4 10.7.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4GDMLRead.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// G4GDMLRead
27//
28// Class description:
29//
30// GDML reader.
31
32// Author: Zoltan Torzsok, November 2007
33// --------------------------------------------------------------------
34#ifndef G4GDMLBASE_HH
35#define G4GDMLBASE_HH 1
36
37#include <xercesc/parsers/XercesDOMParser.hpp>
38#include <xercesc/util/PlatformUtils.hpp>
39#include <xercesc/sax/HandlerBase.hpp>
40#include <xercesc/util/XMLUni.hpp>
41#include <xercesc/dom/DOM.hpp>
42
43#include "G4Types.hh"
44
45#include "G4GDMLEvaluator.hh"
47
48class G4LogicalVolume;
50
51class G4GDMLErrorHandler : public xercesc::ErrorHandler
52{
53 public:
54
55 G4GDMLErrorHandler(const G4bool set) { Suppress = set; }
56
57 void warning(const xercesc::SAXParseException& exception)
58 {
59 if(Suppress)
60 {
61 return;
62 }
63 char* message = xercesc::XMLString::transcode(exception.getMessage());
64 G4cout << "G4GDML: VALIDATION WARNING! " << message
65 << " at line: " << exception.getLineNumber() << G4endl;
66 xercesc::XMLString::release(&message);
67 }
68
69 void error(const xercesc::SAXParseException& exception)
70 {
71 if(Suppress)
72 {
73 return;
74 }
75 char* message = xercesc::XMLString::transcode(exception.getMessage());
76 G4cout << "G4GDML: VALIDATION ERROR! " << message
77 << " at line: " << exception.getLineNumber() << G4endl;
78 xercesc::XMLString::release(&message);
79 }
80
81 void fatalError(const xercesc::SAXParseException& exception)
82 {
83 error(exception);
84 }
85 void resetErrors() {}
86
87 private:
88
89 G4bool Suppress = false;
90};
91
93{
94 public:
95
96 virtual void DefineRead(const xercesc::DOMElement* const) = 0;
97 virtual void MaterialsRead(const xercesc::DOMElement* const) = 0;
98 virtual void SetupRead(const xercesc::DOMElement* const) = 0;
99 virtual void SolidsRead(const xercesc::DOMElement* const) = 0;
100 virtual void Paramvol_contentRead(const xercesc::DOMElement* const) = 0;
101 virtual void Volume_contentRead(const xercesc::DOMElement* const) = 0;
102 virtual void StructureRead(const xercesc::DOMElement* const) = 0;
103 //
104 // Pure virtual methods implemented in concrete reader plugin's classes
105
106 virtual void ExtensionRead(const xercesc::DOMElement* const);
107 //
108 // To be implemented in the client code for handling extensions
109 // to the GDML schema, identified with the tag "extension".
110 // The implementation should be placed inside a user-class
111 // inheriting from G4GDMLReadStructure and being registered
112 // as argument to G4GDMLParser.
113
114 virtual void UserinfoRead(const xercesc::DOMElement* const);
115 //
116 // Customisable by user to handle "userinfo" extensions to the
117 // GDML schema, identified by the tag "userinfo".
118
119 virtual G4LogicalVolume* GetVolume(const G4String&) const = 0;
120 virtual G4String GetSetup(const G4String&) = 0;
121 //
122 // More pure virtual methods implemented in the reader plugin.
123
124 void Read(const G4String&, G4bool validation, G4bool isModule,
125 G4bool strip = true);
126 //
127 // Main method for reading GDML files.
128
129 void StripNames() const;
130 void StripName(G4String&) const;
131 //
132 // Strip off pointers from entity IDs.
133
134 void OverlapCheck(G4bool);
135 //
136 // Activate/de-activate surface check for overlaps (default is off).
137
138 const G4GDMLAuxListType* GetAuxList() const;
139
140 protected:
141
142 G4GDMLRead();
143 virtual ~G4GDMLRead();
144
145 G4String Transcode(const XMLCh* const);
146 G4String GenerateName(const G4String& name, G4bool strip = false);
147 G4String Strip(const G4String&) const;
149 void LoopRead(const xercesc::DOMElement* const,
150 void (G4GDMLRead::*)(const xercesc::DOMElement* const));
151
152 G4GDMLAuxStructType AuxiliaryRead(const xercesc::DOMElement* const auxElem);
153
154 protected:
155
158 G4bool check = false;
160
161 private:
162
163 G4int inLoop = 0, loopCount = 0;
164 G4GDMLAuxListType auxGlobalList;
165};
166
167#endif
std::vector< G4GDMLAuxStructType > G4GDMLAuxListType
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
G4GDMLErrorHandler(const G4bool set)
Definition: G4GDMLRead.hh:55
void fatalError(const xercesc::SAXParseException &exception)
Definition: G4GDMLRead.hh:81
void error(const xercesc::SAXParseException &exception)
Definition: G4GDMLRead.hh:69
void warning(const xercesc::SAXParseException &exception)
Definition: G4GDMLRead.hh:57
G4bool check
Definition: G4GDMLRead.hh:158
G4String Strip(const G4String &) const
Definition: G4GDMLRead.cc:104
virtual void Paramvol_contentRead(const xercesc::DOMElement *const)=0
G4bool validate
Definition: G4GDMLRead.hh:157
G4GDMLAuxStructType AuxiliaryRead(const xercesc::DOMElement *const auxElem)
Definition: G4GDMLRead.cc:287
G4bool dostrip
Definition: G4GDMLRead.hh:159
void GeneratePhysvolName(const G4String &, G4VPhysicalVolume *)
Definition: G4GDMLRead.cc:87
virtual void SolidsRead(const xercesc::DOMElement *const)=0
G4String GenerateName(const G4String &name, G4bool strip=false)
Definition: G4GDMLRead.cc:70
const G4GDMLAuxListType * GetAuxList() const
Definition: G4GDMLRead.cc:555
virtual void MaterialsRead(const xercesc::DOMElement *const)=0
virtual G4LogicalVolume * GetVolume(const G4String &) const =0
void LoopRead(const xercesc::DOMElement *const, void(G4GDMLRead::*)(const xercesc::DOMElement *const))
Definition: G4GDMLRead.cc:186
virtual void Volume_contentRead(const xercesc::DOMElement *const)=0
virtual G4String GetSetup(const G4String &)=0
void Read(const G4String &, G4bool validation, G4bool isModule, G4bool strip=true)
Definition: G4GDMLRead.cc:414
virtual void UserinfoRead(const xercesc::DOMElement *const)
Definition: G4GDMLRead.cc:369
virtual void SetupRead(const xercesc::DOMElement *const)=0
G4String Transcode(const XMLCh *const)
Definition: G4GDMLRead.cc:55
void StripName(G4String &) const
Definition: G4GDMLRead.cc:111
virtual void ExtensionRead(const xercesc::DOMElement *const)
Definition: G4GDMLRead.cc:406
virtual void DefineRead(const xercesc::DOMElement *const)=0
virtual void StructureRead(const xercesc::DOMElement *const)=0
virtual ~G4GDMLRead()
Definition: G4GDMLRead.cc:50
G4GDMLEvaluator eval
Definition: G4GDMLRead.hh:156
void OverlapCheck(G4bool)
Definition: G4GDMLRead.cc:64
void StripNames() const
Definition: G4GDMLRead.cc:117