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