Geant4-11
Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | Static Protected Attributes | Private Types | Private Attributes | Static Private Attributes
G4GDMLWriteStructure Class Reference

#include <G4GDMLWriteStructure.hh>

Inheritance diagram for G4GDMLWriteStructure:
G4GDMLWriteParamvol G4GDMLWriteSetup G4GDMLWriteSolids G4GDMLWriteMaterials G4GDMLWriteDefine G4GDMLWrite

Public Member Functions

void AddAuxiliary (G4GDMLAuxStructType myaux)
 
void AddElement (const G4Element *const)
 
virtual void AddExtension (xercesc::DOMElement *, const G4LogicalVolume *const)
 
void AddIsotope (const G4Isotope *const)
 
void AddMaterial (const G4Material *const)
 
void AddModule (const G4int depth)
 
void AddModule (const G4VPhysicalVolume *const topVol)
 
void AddPosition (const G4String &name, const G4ThreeVector &pos)
 
virtual void AddSolid (const G4VSolid *const)
 
void AddVolumeAuxiliary (G4GDMLAuxStructType myaux, const G4LogicalVolume *const)
 
virtual void DefineWrite (xercesc::DOMElement *)
 
virtual void ExtensionWrite (xercesc::DOMElement *)
 
void FirstpositionWrite (xercesc::DOMElement *element, const G4String &name, const G4ThreeVector &pos)
 
void FirstrotationWrite (xercesc::DOMElement *element, const G4String &name, const G4ThreeVector &rot)
 
 G4GDMLWriteStructure ()
 
G4String GenerateName (const G4String &, const void *const)
 
G4ThreeVector GetAngles (const G4RotationMatrix &)
 
G4int GetMaxExportLevel () const
 
virtual void MaterialsWrite (xercesc::DOMElement *)
 
virtual void ParamvolAlgorithmWrite (xercesc::DOMElement *paramvolElement, const G4VPhysicalVolume *const paramvol)
 
virtual void ParamvolWrite (xercesc::DOMElement *, const G4VPhysicalVolume *const)
 
void PositionWrite (xercesc::DOMElement *element, const G4String &name, const G4ThreeVector &pos)
 
void RotationWrite (xercesc::DOMElement *element, const G4String &name, const G4ThreeVector &rot)
 
void ScaleWrite (xercesc::DOMElement *element, const G4String &name, const G4ThreeVector &scl)
 
void SetEnergyCutsExport (G4bool)
 
void SetMaxExportLevel (G4int)
 
void SetOutputFileOverwrite (G4bool flag)
 
void SetSDExport (G4bool)
 
virtual void SetupWrite (xercesc::DOMElement *, const G4LogicalVolume *const)
 
virtual void SolidsWrite (xercesc::DOMElement *)
 
virtual void StructureWrite (xercesc::DOMElement *)
 
virtual void UserinfoWrite (xercesc::DOMElement *)
 
G4Transform3D Write (const G4String &filename, const G4LogicalVolume *const topLog, const G4String &schemaPath, const G4int depth, G4bool storeReferences=true)
 
virtual ~G4GDMLWriteStructure ()
 

Static Public Member Functions

static void SetAddPointerToName (G4bool)
 

Protected Member Functions

void AddAuxInfo (G4GDMLAuxListType *auxInfoList, xercesc::DOMElement *element)
 
void AssemblyWrite (xercesc::DOMElement *, const int assemblyID)
 
void AtomWrite (xercesc::DOMElement *, const G4double &)
 
void BooleanWrite (xercesc::DOMElement *, const G4BooleanSolid *const)
 
void BorderSurfaceCache (const G4LogicalBorderSurface *const)
 
void Box_dimensionsWrite (xercesc::DOMElement *, const G4Box *const)
 
void BoxWrite (xercesc::DOMElement *, const G4Box *const)
 
void Cone_dimensionsWrite (xercesc::DOMElement *, const G4Cons *const)
 
void ConeWrite (xercesc::DOMElement *, const G4Cons *const)
 
void CutTubeWrite (xercesc::DOMElement *, const G4CutTubs *const)
 
DepthMapTypeDepthMap ()
 
void DivisionvolWrite (xercesc::DOMElement *, const G4PVDivision *const)
 
void DWrite (xercesc::DOMElement *, const G4double &)
 
void ElconeWrite (xercesc::DOMElement *, const G4EllipticalCone *const)
 
void ElementWrite (const G4Element *const)
 
void Ellipsoid_dimensionsWrite (xercesc::DOMElement *, const G4Ellipsoid *const)
 
void EllipsoidWrite (xercesc::DOMElement *, const G4Ellipsoid *const)
 
void EltubeWrite (xercesc::DOMElement *, const G4EllipticalTube *const)
 
void ExportEnergyCuts (const G4LogicalVolume *const)
 
void ExportSD (const G4LogicalVolume *const)
 
G4bool FileExists (const G4String &) const
 
G4bool FindOpticalSurface (const G4SurfaceProperty *)
 
void GenericPolyconeWrite (xercesc::DOMElement *, const G4GenericPolycone *const)
 
void GenTrapWrite (xercesc::DOMElement *, const G4GenericTrap *const)
 
const G4LogicalBorderSurfaceGetBorderSurface (const G4VPhysicalVolume *const)
 
const G4LogicalSkinSurfaceGetSkinSurface (const G4LogicalVolume *const)
 
void Hype_dimensionsWrite (xercesc::DOMElement *, const G4Hype *const)
 
void HypeWrite (xercesc::DOMElement *, const G4Hype *const)
 
void IsotopeWrite (const G4Isotope *const)
 
void MaterialWrite (const G4Material *const)
 
void MEEWrite (xercesc::DOMElement *, const G4double &)
 
G4String Modularize (const G4VPhysicalVolume *const topvol, const G4int depth)
 
void MultiUnionWrite (xercesc::DOMElement *solElement, const G4MultiUnion *const)
 
xercesc::DOMAttr * NewAttribute (const G4String &, const G4double &)
 
xercesc::DOMAttr * NewAttribute (const G4String &, const G4String &)
 
xercesc::DOMElement * NewElement (const G4String &)
 
void OpticalSurfaceWrite (xercesc::DOMElement *, const G4OpticalSurface *const)
 
void Orb_dimensionsWrite (xercesc::DOMElement *, const G4Orb *const)
 
void OrbWrite (xercesc::DOMElement *, const G4Orb *const)
 
void Para_dimensionsWrite (xercesc::DOMElement *, const G4Para *const)
 
void ParaboloidWrite (xercesc::DOMElement *, const G4Paraboloid *const)
 
void ParametersWrite (xercesc::DOMElement *, const G4VPhysicalVolume *const, const G4int &)
 
void ParaWrite (xercesc::DOMElement *, const G4Para *const)
 
void PhysvolWrite (xercesc::DOMElement *, const G4VPhysicalVolume *const topVol, const G4Transform3D &transform, const G4String &moduleName)
 
void Polycone_dimensionsWrite (xercesc::DOMElement *, const G4Polycone *const)
 
void PolyconeWrite (xercesc::DOMElement *, const G4Polycone *const)
 
void Polyhedra_dimensionsWrite (xercesc::DOMElement *, const G4Polyhedra *const)
 
void PolyhedraWrite (xercesc::DOMElement *, const G4Polyhedra *const)
 
void Position_vectorWrite (xercesc::DOMElement *, const G4String &, const G4String &, const G4ThreeVector &)
 
void PropertyConstWrite (const G4String &, const G4double, const G4MaterialPropertiesTable *)
 
void PropertyVectorWrite (const G4String &, const G4PhysicsFreeVector *const)
 
void PropertyWrite (xercesc::DOMElement *, const G4Material *const)
 
void PropertyWrite (xercesc::DOMElement *, const G4OpticalSurface *const)
 
PhysVolumeMapTypePvolumeMap ()
 
void PWrite (xercesc::DOMElement *, const G4double &)
 
void ReplicavolWrite (xercesc::DOMElement *, const G4VPhysicalVolume *const)
 
void Rotation_vectorWrite (xercesc::DOMElement *, const G4String &, const G4String &, const G4ThreeVector &)
 
void RZPointWrite (xercesc::DOMElement *, const G4double &, const G4double &)
 
void Scale_vectorWrite (xercesc::DOMElement *, const G4String &, const G4String &, const G4ThreeVector &)
 
void ScaledWrite (xercesc::DOMElement *, const G4ScaledSolid *const)
 
void SkinSurfaceCache (const G4LogicalSkinSurface *const)
 
void Sphere_dimensionsWrite (xercesc::DOMElement *, const G4Sphere *const)
 
void SphereWrite (xercesc::DOMElement *, const G4Sphere *const)
 
void SurfacesWrite ()
 
void TessellatedWrite (xercesc::DOMElement *, const G4TessellatedSolid *const)
 
void TetWrite (xercesc::DOMElement *, const G4Tet *const)
 
void Torus_dimensionsWrite (xercesc::DOMElement *, const G4Torus *const)
 
void TorusWrite (xercesc::DOMElement *, const G4Torus *const)
 
void Trap_dimensionsWrite (xercesc::DOMElement *, const G4Trap *const)
 
void TrapWrite (xercesc::DOMElement *, const G4Trap *const)
 
G4Transform3D TraverseVolumeTree (const G4LogicalVolume *const topVol, const G4int depth)
 
void Trd_dimensionsWrite (xercesc::DOMElement *, const G4Trd *const)
 
void TrdWrite (xercesc::DOMElement *, const G4Trd *const)
 
void Tube_dimensionsWrite (xercesc::DOMElement *, const G4Tubs *const)
 
void TubeWrite (xercesc::DOMElement *, const G4Tubs *const)
 
void TwistedboxWrite (xercesc::DOMElement *, const G4TwistedBox *const)
 
void TwistedtrapWrite (xercesc::DOMElement *, const G4TwistedTrap *const)
 
void TwistedtrdWrite (xercesc::DOMElement *, const G4TwistedTrd *const)
 
void TwistedtubsWrite (xercesc::DOMElement *, const G4TwistedTubs *const)
 
void TWrite (xercesc::DOMElement *, const G4double &)
 
VolumeMapTypeVolumeMap ()
 
void XtruWrite (xercesc::DOMElement *, const G4ExtrudedSolid *const)
 
void ZplaneWrite (xercesc::DOMElement *, const G4double &, const G4double &, const G4double &)
 

Protected Attributes

G4GDMLAuxListType auxList
 
std::map< const G4LogicalVolume *, G4GDMLAuxListTypeauxmap
 
std::vector< xercesc::DOMElement * > borderElementVec
 
xercesc::DOMElement * defineElement = nullptr
 
xercesc::DOMDocument * doc = nullptr
 
std::vector< const G4Element * > elementList
 
xercesc::DOMElement * extElement = nullptr
 
std::vector< const G4Isotope * > isotopeList
 
std::vector< const G4Material * > materialList
 
xercesc::DOMElement * materialsElement = nullptr
 
G4bool overwriteOutputFile = false
 
std::vector< const G4PhysicsFreeVector * > propertyList
 
G4String SchemaLocation
 
std::vector< xercesc::DOMElement * > skinElementVec
 
std::vector< const G4VSolid * > solidList
 
xercesc::DOMElement * solidsElement = nullptr
 
xercesc::DOMElement * structureElement = nullptr
 
xercesc::DOMElement * userinfoElement = nullptr
 

Static Protected Attributes

static G4bool addPointerToName = true
 
static const G4double kAngularPrecision = DBL_EPSILON
 
static const G4double kLinearPrecision = DBL_EPSILON
 
static const G4double kRelativePrecision = DBL_EPSILON
 
static const G4int maxTransforms = 8
 

Private Types

using DepthMapType = std::map< G4int, G4int >
 
using PhysVolumeMapType = std::map< const G4VPhysicalVolume *, G4String >
 
using VolumeMapType = std::map< const G4LogicalVolume *, G4Transform3D >
 

Private Attributes

std::vector< G4intaddedAssemblies
 
std::map< const G4VPhysicalVolume *, G4intassemblyVolMap
 
G4bool cexport = false
 
std::map< const G4VPhysicalVolume *, G4intimprintsMap
 
G4int maxLevel = 0
 
std::vector< const G4OpticalSurface * > opt_vec
 
G4ReflectionFactoryreflFactory = nullptr
 
G4bool sdexport = false
 

Static Private Attributes

static G4int levelNo = 0
 

Detailed Description

Definition at line 51 of file G4GDMLWriteStructure.hh.

Member Typedef Documentation

◆ DepthMapType

using G4GDMLWrite::DepthMapType = std::map<G4int, G4int>
privateinherited

Definition at line 55 of file G4GDMLWrite.hh.

◆ PhysVolumeMapType

using G4GDMLWrite::PhysVolumeMapType = std::map<const G4VPhysicalVolume*, G4String>
privateinherited

Definition at line 54 of file G4GDMLWrite.hh.

◆ VolumeMapType

using G4GDMLWrite::VolumeMapType = std::map<const G4LogicalVolume*, G4Transform3D>
privateinherited

Definition at line 53 of file G4GDMLWrite.hh.

Constructor & Destructor Documentation

◆ G4GDMLWriteStructure()

G4GDMLWriteStructure::G4GDMLWriteStructure ( )

Definition at line 61 of file G4GDMLWriteStructure.cc.

64{
66}
G4ReflectionFactory * reflFactory
static G4ReflectionFactory * Instance()
#define INT_MAX
Definition: templates.hh:90

References G4ReflectionFactory::Instance(), and reflFactory.

◆ ~G4GDMLWriteStructure()

G4GDMLWriteStructure::~G4GDMLWriteStructure ( )
virtual

Definition at line 69 of file G4GDMLWriteStructure.cc.

70{
71}

Member Function Documentation

◆ AddAuxiliary()

void G4GDMLWrite::AddAuxiliary ( G4GDMLAuxStructType  myaux)
inherited

Definition at line 398 of file G4GDMLWrite.cc.

399{
400 auxList.push_back(myaux);
401}
G4GDMLAuxListType auxList
Definition: G4GDMLWrite.hh:136

References G4GDMLWrite::auxList.

◆ AddAuxInfo()

void G4GDMLWrite::AddAuxInfo ( G4GDMLAuxListType auxInfoList,
xercesc::DOMElement *  element 
)
protectedinherited

Definition at line 94 of file G4GDMLWrite.cc.

96{
97 for(auto iaux = auxInfoList->cbegin(); iaux != auxInfoList->cend(); ++iaux)
98 {
99 xercesc::DOMElement* auxiliaryElement = NewElement("auxiliary");
100 element->appendChild(auxiliaryElement);
101
102 auxiliaryElement->setAttributeNode(NewAttribute("auxtype", (*iaux).type));
103 auxiliaryElement->setAttributeNode(NewAttribute("auxvalue", (*iaux).value));
104 if(((*iaux).unit) != "")
105 {
106 auxiliaryElement->setAttributeNode(NewAttribute("auxunit", (*iaux).unit));
107 }
108
109 if(iaux->auxList)
110 {
111 AddAuxInfo(iaux->auxList, auxiliaryElement);
112 }
113 }
114 return;
115}
xercesc::DOMElement * NewElement(const G4String &)
Definition: G4GDMLWrite.cc:192
xercesc::DOMAttr * NewAttribute(const G4String &, const G4String &)
Definition: G4GDMLWrite.cc:155
void AddAuxInfo(G4GDMLAuxListType *auxInfoList, xercesc::DOMElement *element)
Definition: G4GDMLWrite.cc:94

References G4GDMLWrite::AddAuxInfo(), G4GDMLWrite::NewAttribute(), and G4GDMLWrite::NewElement().

Referenced by G4GDMLWrite::AddAuxInfo(), TraverseVolumeTree(), and G4GDMLWrite::UserinfoWrite().

◆ AddElement()

void G4GDMLWriteMaterials::AddElement ( const G4Element * const  elementPtr)
inherited

Definition at line 350 of file G4GDMLWriteMaterials.cc.

351{
352 for(std::size_t i = 0; i < elementList.size(); ++i) // Check if element is
353 { // already in the list!
354 if(elementList[i] == elementPtr)
355 {
356 return;
357 }
358 }
359 elementList.push_back(elementPtr);
360 ElementWrite(elementPtr);
361}
std::vector< const G4Element * > elementList
void ElementWrite(const G4Element *const)

References G4GDMLWriteMaterials::elementList, and G4GDMLWriteMaterials::ElementWrite().

Referenced by G4GDMLWriteMaterials::MaterialWrite().

◆ AddExtension()

void G4GDMLWrite::AddExtension ( xercesc::DOMElement *  ,
const G4LogicalVolume * const   
)
virtualinherited

Definition at line 80 of file G4GDMLWrite.cc.

82{
83 // Empty implementation. To be overwritten by user for specific extensions
84 // related to attributes associated to volumes
85}

Referenced by TraverseVolumeTree().

◆ AddIsotope()

void G4GDMLWriteMaterials::AddIsotope ( const G4Isotope * const  isotopePtr)
inherited

Definition at line 336 of file G4GDMLWriteMaterials.cc.

337{
338 for(std::size_t i = 0; i < isotopeList.size(); ++i) // Check if isotope is
339 { // already in the list!
340 if(isotopeList[i] == isotopePtr)
341 {
342 return;
343 }
344 }
345 isotopeList.push_back(isotopePtr);
346 IsotopeWrite(isotopePtr);
347}
void IsotopeWrite(const G4Isotope *const)
std::vector< const G4Isotope * > isotopeList

References G4GDMLWriteMaterials::isotopeList, and G4GDMLWriteMaterials::IsotopeWrite().

Referenced by G4GDMLWriteMaterials::ElementWrite().

◆ AddMaterial()

void G4GDMLWriteMaterials::AddMaterial ( const G4Material * const  materialPtr)
inherited

Definition at line 364 of file G4GDMLWriteMaterials.cc.

365{
366 for(std::size_t i = 0; i < materialList.size(); ++i) // Check if material is
367 { // already in the list!
368 if(materialList[i] == materialPtr)
369 {
370 return;
371 }
372 }
373 materialList.push_back(materialPtr);
374 MaterialWrite(materialPtr);
375}
void MaterialWrite(const G4Material *const)
std::vector< const G4Material * > materialList

References G4GDMLWriteMaterials::materialList, and G4GDMLWriteMaterials::MaterialWrite().

Referenced by TraverseVolumeTree().

◆ AddModule() [1/2]

void G4GDMLWrite::AddModule ( const G4int  depth)
inherited

Definition at line 361 of file G4GDMLWrite.cc.

362{
363 if(depth < 0)
364 {
365 G4Exception("G4GDMLWrite::AddModule()", "InvalidSetup", FatalException,
366 "Depth must be a positive number!");
367 }
368 if(DepthMap().find(depth) != DepthMap().end())
369 {
370 G4Exception("G4GDMLWrite::AddModule()", "InvalidSetup", FatalException,
371 "Adding module(s) at this depth is already requested!");
372 }
373 DepthMap()[depth] = 0;
374}
@ FatalException
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
Definition: G4Exception.cc:35
DepthMapType & DepthMap()
Definition: G4GDMLWrite.cc:73

References G4GDMLWrite::DepthMap(), FatalException, and G4Exception().

◆ AddModule() [2/2]

void G4GDMLWrite::AddModule ( const G4VPhysicalVolume *const  topVol)
inherited

Definition at line 327 of file G4GDMLWrite.cc.

328{
329 G4String fname = GenerateName(physvol->GetName(), physvol);
330 G4cout << "G4GDML: Adding module '" << fname << "'..." << G4endl;
331
332 if(physvol == nullptr)
333 {
334 G4Exception("G4GDMLWrite::AddModule()", "InvalidSetup", FatalException,
335 "Invalid NULL pointer is specified for modularization!");
336 return;
337 }
338 if(dynamic_cast<const G4PVDivision*>(physvol))
339 {
340 G4Exception("G4GDMLWrite::AddModule()", "InvalidSetup", FatalException,
341 "It is not possible to modularize by divisionvol!");
342 return;
343 }
344 if(physvol->IsParameterised())
345 {
346 G4Exception("G4GDMLWrite::AddModule()", "InvalidSetup", FatalException,
347 "It is not possible to modularize by parameterised volume!");
348 return;
349 }
350 if(physvol->IsReplicated())
351 {
352 G4Exception("G4GDMLWrite::AddModule()", "InvalidSetup", FatalException,
353 "It is not possible to modularize by replicated volume!");
354 return;
355 }
356
357 PvolumeMap()[physvol] = fname;
358}
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
G4String GenerateName(const G4String &, const void *const)
Definition: G4GDMLWrite.cc:132
PhysVolumeMapType & PvolumeMap()
Definition: G4GDMLWrite.cc:66
string fname
Definition: test.py:308

References FatalException, test::fname, G4cout, G4endl, G4Exception(), G4GDMLWrite::GenerateName(), G4VPhysicalVolume::GetName(), G4VPhysicalVolume::IsParameterised(), G4VPhysicalVolume::IsReplicated(), and G4GDMLWrite::PvolumeMap().

◆ AddPosition()

void G4GDMLWriteDefine::AddPosition ( const G4String name,
const G4ThreeVector pos 
)
inlineinherited

Definition at line 73 of file G4GDMLWriteDefine.hh.

74 {
76 }
static const G4double pos
xercesc::DOMElement * defineElement
void Position_vectorWrite(xercesc::DOMElement *, const G4String &, const G4String &, const G4ThreeVector &)
const char * name(G4int ptype)

References G4GDMLWriteDefine::defineElement, G4InuclParticleNames::name(), pos, and G4GDMLWriteDefine::Position_vectorWrite().

Referenced by G4GDMLWriteSolids::TessellatedWrite(), and G4GDMLWriteSolids::TetWrite().

◆ AddSolid()

void G4GDMLWriteSolids::AddSolid ( const G4VSolid * const  solidPtr)
virtualinherited

Definition at line 1137 of file G4GDMLWriteSolids.cc.

1138{
1139 for(std::size_t i = 0; i < solidList.size(); ++i) // Check if solid is
1140 { // already in the list!
1141 if(solidList[i] == solidPtr)
1142 {
1143 return;
1144 }
1145 }
1146
1147 solidList.push_back(solidPtr);
1148
1149 if(const G4BooleanSolid* const booleanPtr =
1150 dynamic_cast<const G4BooleanSolid*>(solidPtr))
1151 {
1152 BooleanWrite(solidsElement, booleanPtr);
1153 }
1154 else if(const G4ScaledSolid* const scaledPtr =
1155 dynamic_cast<const G4ScaledSolid*>(solidPtr))
1156 {
1157 ScaledWrite(solidsElement, scaledPtr);
1158 }
1159 else if(solidPtr->GetEntityType() == "G4MultiUnion")
1160 {
1161 const G4MultiUnion* const munionPtr =
1162 static_cast<const G4MultiUnion*>(solidPtr);
1163 MultiUnionWrite(solidsElement, munionPtr);
1164 }
1165 else if(solidPtr->GetEntityType() == "G4Box")
1166 {
1167 const G4Box* const boxPtr = static_cast<const G4Box*>(solidPtr);
1168 BoxWrite(solidsElement, boxPtr);
1169 }
1170 else if(solidPtr->GetEntityType() == "G4Cons")
1171 {
1172 const G4Cons* const conePtr = static_cast<const G4Cons*>(solidPtr);
1173 ConeWrite(solidsElement, conePtr);
1174 }
1175 else if(solidPtr->GetEntityType() == "G4EllipticalCone")
1176 {
1177 const G4EllipticalCone* const elconePtr =
1178 static_cast<const G4EllipticalCone*>(solidPtr);
1179 ElconeWrite(solidsElement, elconePtr);
1180 }
1181 else if(solidPtr->GetEntityType() == "G4Ellipsoid")
1182 {
1183 const G4Ellipsoid* const ellipsoidPtr =
1184 static_cast<const G4Ellipsoid*>(solidPtr);
1185 EllipsoidWrite(solidsElement, ellipsoidPtr);
1186 }
1187 else if(solidPtr->GetEntityType() == "G4EllipticalTube")
1188 {
1189 const G4EllipticalTube* const eltubePtr =
1190 static_cast<const G4EllipticalTube*>(solidPtr);
1191 EltubeWrite(solidsElement, eltubePtr);
1192 }
1193 else if(solidPtr->GetEntityType() == "G4ExtrudedSolid")
1194 {
1195 const G4ExtrudedSolid* const xtruPtr =
1196 static_cast<const G4ExtrudedSolid*>(solidPtr);
1197 XtruWrite(solidsElement, xtruPtr);
1198 }
1199 else if(solidPtr->GetEntityType() == "G4Hype")
1200 {
1201 const G4Hype* const hypePtr = static_cast<const G4Hype*>(solidPtr);
1202 HypeWrite(solidsElement, hypePtr);
1203 }
1204 else if(solidPtr->GetEntityType() == "G4Orb")
1205 {
1206 const G4Orb* const orbPtr = static_cast<const G4Orb*>(solidPtr);
1207 OrbWrite(solidsElement, orbPtr);
1208 }
1209 else if(solidPtr->GetEntityType() == "G4Para")
1210 {
1211 const G4Para* const paraPtr = static_cast<const G4Para*>(solidPtr);
1212 ParaWrite(solidsElement, paraPtr);
1213 }
1214 else if(solidPtr->GetEntityType() == "G4Paraboloid")
1215 {
1216 const G4Paraboloid* const paraboloidPtr =
1217 static_cast<const G4Paraboloid*>(solidPtr);
1218 ParaboloidWrite(solidsElement, paraboloidPtr);
1219 }
1220 else if(solidPtr->GetEntityType() == "G4Polycone")
1221 {
1222 const G4Polycone* const polyconePtr =
1223 static_cast<const G4Polycone*>(solidPtr);
1224 PolyconeWrite(solidsElement, polyconePtr);
1225 }
1226 else if(solidPtr->GetEntityType() == "G4GenericPolycone")
1227 {
1228 const G4GenericPolycone* const genpolyconePtr =
1229 static_cast<const G4GenericPolycone*>(solidPtr);
1230 GenericPolyconeWrite(solidsElement, genpolyconePtr);
1231 }
1232 else if(solidPtr->GetEntityType() == "G4Polyhedra")
1233 {
1234 const G4Polyhedra* const polyhedraPtr =
1235 static_cast<const G4Polyhedra*>(solidPtr);
1236 PolyhedraWrite(solidsElement, polyhedraPtr);
1237 }
1238 else if(solidPtr->GetEntityType() == "G4Sphere")
1239 {
1240 const G4Sphere* const spherePtr = static_cast<const G4Sphere*>(solidPtr);
1241 SphereWrite(solidsElement, spherePtr);
1242 }
1243 else if(solidPtr->GetEntityType() == "G4TessellatedSolid")
1244 {
1245 const G4TessellatedSolid* const tessellatedPtr =
1246 static_cast<const G4TessellatedSolid*>(solidPtr);
1247 TessellatedWrite(solidsElement, tessellatedPtr);
1248 }
1249 else if(solidPtr->GetEntityType() == "G4Tet")
1250 {
1251 const G4Tet* const tetPtr = static_cast<const G4Tet*>(solidPtr);
1252 TetWrite(solidsElement, tetPtr);
1253 }
1254 else if(solidPtr->GetEntityType() == "G4Torus")
1255 {
1256 const G4Torus* const torusPtr = static_cast<const G4Torus*>(solidPtr);
1257 TorusWrite(solidsElement, torusPtr);
1258 }
1259 else if(solidPtr->GetEntityType() == "G4GenericTrap")
1260 {
1261 const G4GenericTrap* const gtrapPtr =
1262 static_cast<const G4GenericTrap*>(solidPtr);
1263 GenTrapWrite(solidsElement, gtrapPtr);
1264 }
1265 else if(solidPtr->GetEntityType() == "G4Trap")
1266 {
1267 const G4Trap* const trapPtr = static_cast<const G4Trap*>(solidPtr);
1268 TrapWrite(solidsElement, trapPtr);
1269 }
1270 else if(solidPtr->GetEntityType() == "G4Trd")
1271 {
1272 const G4Trd* const trdPtr = static_cast<const G4Trd*>(solidPtr);
1273 TrdWrite(solidsElement, trdPtr);
1274 }
1275 else if(solidPtr->GetEntityType() == "G4Tubs")
1276 {
1277 const G4Tubs* const tubePtr = static_cast<const G4Tubs*>(solidPtr);
1278 TubeWrite(solidsElement, tubePtr);
1279 }
1280 else if(solidPtr->GetEntityType() == "G4CutTubs")
1281 {
1282 const G4CutTubs* const cuttubePtr = static_cast<const G4CutTubs*>(solidPtr);
1283 CutTubeWrite(solidsElement, cuttubePtr);
1284 }
1285 else if(solidPtr->GetEntityType() == "G4TwistedBox")
1286 {
1287 const G4TwistedBox* const twistedboxPtr =
1288 static_cast<const G4TwistedBox*>(solidPtr);
1289 TwistedboxWrite(solidsElement, twistedboxPtr);
1290 }
1291 else if(solidPtr->GetEntityType() == "G4TwistedTrap")
1292 {
1293 const G4TwistedTrap* const twistedtrapPtr =
1294 static_cast<const G4TwistedTrap*>(solidPtr);
1295 TwistedtrapWrite(solidsElement, twistedtrapPtr);
1296 }
1297 else if(solidPtr->GetEntityType() == "G4TwistedTrd")
1298 {
1299 const G4TwistedTrd* const twistedtrdPtr =
1300 static_cast<const G4TwistedTrd*>(solidPtr);
1301 TwistedtrdWrite(solidsElement, twistedtrdPtr);
1302 }
1303 else if(solidPtr->GetEntityType() == "G4TwistedTubs")
1304 {
1305 const G4TwistedTubs* const twistedtubsPtr =
1306 static_cast<const G4TwistedTubs*>(solidPtr);
1307 TwistedtubsWrite(solidsElement, twistedtubsPtr);
1308 }
1309 else
1310 {
1311 G4String error_msg = "Unknown solid: " + solidPtr->GetName() +
1312 "; Type: " + solidPtr->GetEntityType();
1313 G4Exception("G4GDMLWriteSolids::AddSolid()", "WriteError", FatalException,
1314 error_msg);
1315 }
1316}
Definition: G4Box.hh:56
Definition: G4Cons.hh:78
void TwistedtrdWrite(xercesc::DOMElement *, const G4TwistedTrd *const)
void TorusWrite(xercesc::DOMElement *, const G4Torus *const)
void TetWrite(xercesc::DOMElement *, const G4Tet *const)
void TrapWrite(xercesc::DOMElement *, const G4Trap *const)
void HypeWrite(xercesc::DOMElement *, const G4Hype *const)
void TwistedtrapWrite(xercesc::DOMElement *, const G4TwistedTrap *const)
void ScaledWrite(xercesc::DOMElement *, const G4ScaledSolid *const)
void MultiUnionWrite(xercesc::DOMElement *solElement, const G4MultiUnion *const)
void PolyhedraWrite(xercesc::DOMElement *, const G4Polyhedra *const)
void TessellatedWrite(xercesc::DOMElement *, const G4TessellatedSolid *const)
void GenTrapWrite(xercesc::DOMElement *, const G4GenericTrap *const)
void TwistedboxWrite(xercesc::DOMElement *, const G4TwistedBox *const)
void TubeWrite(xercesc::DOMElement *, const G4Tubs *const)
void ParaboloidWrite(xercesc::DOMElement *, const G4Paraboloid *const)
std::vector< const G4VSolid * > solidList
void SphereWrite(xercesc::DOMElement *, const G4Sphere *const)
void BoxWrite(xercesc::DOMElement *, const G4Box *const)
void OrbWrite(xercesc::DOMElement *, const G4Orb *const)
void TwistedtubsWrite(xercesc::DOMElement *, const G4TwistedTubs *const)
void EltubeWrite(xercesc::DOMElement *, const G4EllipticalTube *const)
void BooleanWrite(xercesc::DOMElement *, const G4BooleanSolid *const)
void ElconeWrite(xercesc::DOMElement *, const G4EllipticalCone *const)
void ConeWrite(xercesc::DOMElement *, const G4Cons *const)
void GenericPolyconeWrite(xercesc::DOMElement *, const G4GenericPolycone *const)
xercesc::DOMElement * solidsElement
void CutTubeWrite(xercesc::DOMElement *, const G4CutTubs *const)
void EllipsoidWrite(xercesc::DOMElement *, const G4Ellipsoid *const)
void PolyconeWrite(xercesc::DOMElement *, const G4Polycone *const)
void ParaWrite(xercesc::DOMElement *, const G4Para *const)
void TrdWrite(xercesc::DOMElement *, const G4Trd *const)
void XtruWrite(xercesc::DOMElement *, const G4ExtrudedSolid *const)
Definition: G4Hype.hh:69
Definition: G4Orb.hh:56
Definition: G4Para.hh:79
Definition: G4Tet.hh:56
Definition: G4Trd.hh:63
Definition: G4Tubs.hh:75
G4String GetName() const
virtual G4GeometryType GetEntityType() const =0

References G4GDMLWriteSolids::BooleanWrite(), G4GDMLWriteSolids::BoxWrite(), G4GDMLWriteSolids::ConeWrite(), G4GDMLWriteSolids::CutTubeWrite(), G4GDMLWriteSolids::ElconeWrite(), G4GDMLWriteSolids::EllipsoidWrite(), G4GDMLWriteSolids::EltubeWrite(), FatalException, G4Exception(), G4GDMLWriteSolids::GenericPolyconeWrite(), G4GDMLWriteSolids::GenTrapWrite(), G4VSolid::GetEntityType(), G4VSolid::GetName(), G4GDMLWriteSolids::HypeWrite(), G4GDMLWriteSolids::MultiUnionWrite(), G4GDMLWriteSolids::OrbWrite(), G4GDMLWriteSolids::ParaboloidWrite(), G4GDMLWriteSolids::ParaWrite(), G4GDMLWriteSolids::PolyconeWrite(), G4GDMLWriteSolids::PolyhedraWrite(), G4GDMLWriteSolids::ScaledWrite(), G4GDMLWriteSolids::solidList, G4GDMLWriteSolids::solidsElement, G4GDMLWriteSolids::SphereWrite(), G4GDMLWriteSolids::TessellatedWrite(), G4GDMLWriteSolids::TetWrite(), G4GDMLWriteSolids::TorusWrite(), G4GDMLWriteSolids::TrapWrite(), G4GDMLWriteSolids::TrdWrite(), G4GDMLWriteSolids::TubeWrite(), G4GDMLWriteSolids::TwistedboxWrite(), G4GDMLWriteSolids::TwistedtrapWrite(), G4GDMLWriteSolids::TwistedtrdWrite(), G4GDMLWriteSolids::TwistedtubsWrite(), and G4GDMLWriteSolids::XtruWrite().

Referenced by G4GDMLWriteSolids::BooleanWrite(), G4GDMLWriteSolids::MultiUnionWrite(), G4GDMLWriteSolids::ScaledWrite(), and TraverseVolumeTree().

◆ AddVolumeAuxiliary()

void G4GDMLWriteStructure::AddVolumeAuxiliary ( G4GDMLAuxStructType  myaux,
const G4LogicalVolume * const  lvol 
)

Definition at line 829 of file G4GDMLWriteStructure.cc.

831{
832 auto pos = auxmap.find(lvol);
833
834 if(pos == auxmap.cend())
835 {
836 auxmap[lvol] = G4GDMLAuxListType();
837 }
838
839 auxmap[lvol].push_back(myaux);
840}
std::vector< G4GDMLAuxStructType > G4GDMLAuxListType
std::map< const G4LogicalVolume *, G4GDMLAuxListType > auxmap

References auxmap, and pos.

Referenced by ExportEnergyCuts(), and ExportSD().

◆ AssemblyWrite()

void G4GDMLWriteStructure::AssemblyWrite ( xercesc::DOMElement *  volumeElement,
const int  assemblyID 
)
protected

Definition at line 264 of file G4GDMLWriteStructure.cc.

266{
268 G4AssemblyVolume* myassembly = assemblies->GetAssembly(assemblyID);
269
270 xercesc::DOMElement* assemblyElement = NewElement("assembly");
271 G4String name = "Assembly_" + std::to_string(assemblyID);
272
273 assemblyElement->setAttributeNode(NewAttribute("name", name));
274
275 auto vit = myassembly->GetTripletsIterator();
276
277 G4int depth = 0;
278 const G4String ModuleName;
279
280 for(std::size_t i5 = 0; i5 < myassembly->TotalTriplets(); ++i5)
281 {
282 G4LogicalVolume* lvol = (*vit).GetVolume();
283 if (lvol == nullptr)
284 {
285 G4String message = "Nested assemblies not yet supported for exporting. Sorry!";
286 G4Exception("G4GDMLWriteStructure::AssemblyWrite()", "InvalidSetup",
287 FatalException, message);
288 return;
289 }
290 TraverseVolumeTree(lvol, depth + 1);
291
292 const G4ThreeVector rot = GetAngles((*vit).GetRotation()->inverse());
293 const G4ThreeVector pos = (*vit).GetTranslation();
294
295 const G4String pname =
296 GenerateName((*vit).GetVolume()->GetName() + "_pv", &(*vit));
297
298 xercesc::DOMElement* physvolElement = NewElement("physvol");
299 physvolElement->setAttributeNode(NewAttribute("name", pname));
300
301 assemblyElement->appendChild(physvolElement);
302
303 const G4String volumeref =
304 GenerateName((*vit).GetVolume()->GetName(), (*vit).GetVolume());
305
306 xercesc::DOMElement* volumerefElement = NewElement("volumeref");
307 volumerefElement->setAttributeNode(NewAttribute("ref", volumeref));
308 physvolElement->appendChild(volumerefElement);
309
310 if(std::fabs(pos.x()) > kLinearPrecision ||
311 std::fabs(pos.y()) > kLinearPrecision ||
312 std::fabs(pos.z()) > kLinearPrecision)
313 {
314 PositionWrite(physvolElement,name+"_position_" + std::to_string(i5), pos);
315 }
316
317 if(std::fabs(rot.x()) > kAngularPrecision ||
318 std::fabs(rot.y()) > kAngularPrecision ||
319 std::fabs(rot.z()) > kAngularPrecision)
320 {
321 RotationWrite(physvolElement,name+"_rotation_" + std::to_string(i5), rot);
322 }
323 ++vit;
324 }
325
326 volumeElement->appendChild(assemblyElement);
327}
int G4int
Definition: G4Types.hh:85
double z() const
double x() const
double y() const
static G4AssemblyStore * GetInstance()
G4AssemblyVolume * GetAssembly(unsigned int id, G4bool verbose=true) const
std::vector< G4AssemblyTriplet >::iterator GetTripletsIterator()
std::size_t TotalTriplets() const
static const G4double kLinearPrecision
void RotationWrite(xercesc::DOMElement *element, const G4String &name, const G4ThreeVector &rot)
static const G4double kAngularPrecision
void PositionWrite(xercesc::DOMElement *element, const G4String &name, const G4ThreeVector &pos)
G4ThreeVector GetAngles(const G4RotationMatrix &)
G4Transform3D TraverseVolumeTree(const G4LogicalVolume *const topVol, const G4int depth)
string pname
Definition: eplot.py:33

References FatalException, G4Exception(), G4GDMLWrite::GenerateName(), G4GDMLWriteDefine::GetAngles(), G4AssemblyStore::GetAssembly(), G4AssemblyStore::GetInstance(), G4AssemblyVolume::GetTripletsIterator(), G4GDMLWriteDefine::kAngularPrecision, G4GDMLWriteDefine::kLinearPrecision, G4InuclParticleNames::name(), G4GDMLWrite::NewAttribute(), G4GDMLWrite::NewElement(), eplot::pname, pos, G4GDMLWriteDefine::PositionWrite(), G4GDMLWriteDefine::RotationWrite(), G4AssemblyVolume::TotalTriplets(), TraverseVolumeTree(), CLHEP::Hep3Vector::x(), CLHEP::Hep3Vector::y(), and CLHEP::Hep3Vector::z().

Referenced by TraverseVolumeTree().

◆ AtomWrite()

void G4GDMLWriteMaterials::AtomWrite ( xercesc::DOMElement *  element,
const G4double a 
)
protectedinherited

Definition at line 53 of file G4GDMLWriteMaterials.cc.

55{
56 xercesc::DOMElement* atomElement = NewElement("atom");
57 atomElement->setAttributeNode(NewAttribute("unit", "g/mole"));
58 atomElement->setAttributeNode(NewAttribute("value", a * mole / g));
59 element->appendChild(atomElement);
60}
static constexpr double mole
Definition: G4SIunits.hh:279
static constexpr double g
Definition: G4SIunits.hh:168

References g, mole, G4GDMLWrite::NewAttribute(), and G4GDMLWrite::NewElement().

Referenced by G4GDMLWriteMaterials::ElementWrite(), G4GDMLWriteMaterials::IsotopeWrite(), and G4GDMLWriteMaterials::MaterialWrite().

◆ BooleanWrite()

void G4GDMLWriteSolids::BooleanWrite ( xercesc::DOMElement *  solElement,
const G4BooleanSolid * const  boolean 
)
protectedinherited

Definition at line 141 of file G4GDMLWriteSolids.cc.

143{
144 G4int displaced = 0;
145
146 G4String tag("undefined");
147 if(dynamic_cast<const G4IntersectionSolid*>(boolean))
148 {
149 tag = "intersection";
150 }
151 else if(dynamic_cast<const G4SubtractionSolid*>(boolean))
152 {
153 tag = "subtraction";
154 }
155 else if(dynamic_cast<const G4UnionSolid*>(boolean))
156 {
157 tag = "union";
158 }
159
160 G4VSolid* firstPtr = const_cast<G4VSolid*>(boolean->GetConstituentSolid(0));
161 G4VSolid* secondPtr = const_cast<G4VSolid*>(boolean->GetConstituentSolid(1));
162
163 G4ThreeVector firstpos, firstrot, pos, rot;
164
165 // Solve possible displacement of referenced solids!
166 //
167 while(true)
168 {
169 if(displaced > 8)
170 {
171 G4String ErrorMessage = "The referenced solid '" + firstPtr->GetName() +
172 +"in the Boolean shape '" + +boolean->GetName() +
173 +"' was displaced too many times!";
174 G4Exception("G4GDMLWriteSolids::BooleanWrite()", "InvalidSetup",
175 FatalException, ErrorMessage);
176 }
177
178 if(G4DisplacedSolid* disp = dynamic_cast<G4DisplacedSolid*>(firstPtr))
179 {
180 firstpos += disp->GetObjectTranslation();
181 firstrot += GetAngles(disp->GetObjectRotation());
182 firstPtr = disp->GetConstituentMovedSolid();
183 ++displaced;
184 continue;
185 }
186 break;
187 }
188 displaced = 0;
189 while(true)
190 {
191 if(displaced > maxTransforms)
192 {
193 G4String ErrorMessage = "The referenced solid '" + secondPtr->GetName() +
194 +"in the Boolean shape '" + +boolean->GetName() +
195 +"' was displaced too many times!";
196 G4Exception("G4GDMLWriteSolids::BooleanWrite()", "InvalidSetup",
197 FatalException, ErrorMessage);
198 }
199
200 if(G4DisplacedSolid* disp = dynamic_cast<G4DisplacedSolid*>(secondPtr))
201 {
202 pos += disp->GetObjectTranslation();
203 rot += GetAngles(disp->GetObjectRotation());
204 secondPtr = disp->GetConstituentMovedSolid();
205 ++displaced;
206 continue;
207 }
208 break;
209 }
210
211 AddSolid(firstPtr); // At first add the constituent solids!
212 AddSolid(secondPtr);
213
214 const G4String& name = GenerateName(boolean->GetName(), boolean);
215 const G4String& firstref = GenerateName(firstPtr->GetName(), firstPtr);
216 const G4String& secondref = GenerateName(secondPtr->GetName(), secondPtr);
217
218 xercesc::DOMElement* booleanElement = NewElement(tag);
219 booleanElement->setAttributeNode(NewAttribute("name", name));
220 xercesc::DOMElement* firstElement = NewElement("first");
221 firstElement->setAttributeNode(NewAttribute("ref", firstref));
222 booleanElement->appendChild(firstElement);
223 xercesc::DOMElement* secondElement = NewElement("second");
224 secondElement->setAttributeNode(NewAttribute("ref", secondref));
225 booleanElement->appendChild(secondElement);
226 solElement->appendChild(booleanElement);
227 // Add the boolean solid AFTER the constituent solids!
228
229 if((std::fabs(pos.x()) > kLinearPrecision) ||
230 (std::fabs(pos.y()) > kLinearPrecision) ||
231 (std::fabs(pos.z()) > kLinearPrecision))
232 {
233 PositionWrite(booleanElement, name + "_pos", pos);
234 }
235
236 if((std::fabs(rot.x()) > kAngularPrecision) ||
237 (std::fabs(rot.y()) > kAngularPrecision) ||
238 (std::fabs(rot.z()) > kAngularPrecision))
239 {
240 RotationWrite(booleanElement, name + "_rot", rot);
241 }
242
243 if((std::fabs(firstpos.x()) > kLinearPrecision) ||
244 (std::fabs(firstpos.y()) > kLinearPrecision) ||
245 (std::fabs(firstpos.z()) > kLinearPrecision))
246 {
247 FirstpositionWrite(booleanElement, name + "_fpos", firstpos);
248 }
249
250 if((std::fabs(firstrot.x()) > kAngularPrecision) ||
251 (std::fabs(firstrot.y()) > kAngularPrecision) ||
252 (std::fabs(firstrot.z()) > kAngularPrecision))
253 {
254 FirstrotationWrite(booleanElement, name + "_frot", firstrot);
255 }
256}
void FirstrotationWrite(xercesc::DOMElement *element, const G4String &name, const G4ThreeVector &rot)
void FirstpositionWrite(xercesc::DOMElement *element, const G4String &name, const G4ThreeVector &pos)
virtual void AddSolid(const G4VSolid *const)
static const G4int maxTransforms
Definition: xmlparse.cc:187

References G4GDMLWriteSolids::AddSolid(), FatalException, G4GDMLWriteDefine::FirstpositionWrite(), G4GDMLWriteDefine::FirstrotationWrite(), G4Exception(), G4GDMLWrite::GenerateName(), G4GDMLWriteDefine::GetAngles(), G4VSolid::GetName(), G4GDMLWriteDefine::kAngularPrecision, G4GDMLWriteDefine::kLinearPrecision, G4GDMLWriteSolids::maxTransforms, G4InuclParticleNames::name(), G4GDMLWrite::NewAttribute(), G4GDMLWrite::NewElement(), pos, G4GDMLWriteDefine::PositionWrite(), G4GDMLWriteDefine::RotationWrite(), CLHEP::Hep3Vector::x(), CLHEP::Hep3Vector::y(), and CLHEP::Hep3Vector::z().

Referenced by G4GDMLWriteSolids::AddSolid().

◆ BorderSurfaceCache()

void G4GDMLWriteStructure::BorderSurfaceCache ( const G4LogicalBorderSurface * const  bsurf)
protected

Definition at line 330 of file G4GDMLWriteStructure.cc.

332{
333 if(bsurf == nullptr)
334 {
335 return;
336 }
337
338 const G4SurfaceProperty* psurf = bsurf->GetSurfaceProperty();
339
340 // Generate the new element for border-surface
341 //
342 const G4String& bsname = GenerateName(bsurf->GetName(), bsurf);
343 const G4String& psname = GenerateName(psurf->GetName(), psurf);
344 xercesc::DOMElement* borderElement = NewElement("bordersurface");
345 borderElement->setAttributeNode(NewAttribute("name", bsname));
346 borderElement->setAttributeNode(NewAttribute("surfaceproperty", psname));
347
348 const G4String volumeref1 =
349 GenerateName(bsurf->GetVolume1()->GetName(), bsurf->GetVolume1());
350 const G4String volumeref2 =
351 GenerateName(bsurf->GetVolume2()->GetName(), bsurf->GetVolume2());
352 xercesc::DOMElement* volumerefElement1 = NewElement("physvolref");
353 xercesc::DOMElement* volumerefElement2 = NewElement("physvolref");
354 volumerefElement1->setAttributeNode(NewAttribute("ref", volumeref1));
355 volumerefElement2->setAttributeNode(NewAttribute("ref", volumeref2));
356 borderElement->appendChild(volumerefElement1);
357 borderElement->appendChild(volumerefElement2);
358
359 if(FindOpticalSurface(psurf))
360 {
361 const G4OpticalSurface* opsurf =
362 dynamic_cast<const G4OpticalSurface*>(psurf);
363 if(opsurf == nullptr)
364 {
365 G4Exception("G4GDMLWriteStructure::BorderSurfaceCache()", "InvalidSetup",
366 FatalException, "No optical surface found!");
367 return;
368 }
370 }
371
372 borderElementVec.push_back(borderElement);
373}
void OpticalSurfaceWrite(xercesc::DOMElement *, const G4OpticalSurface *const)
std::vector< xercesc::DOMElement * > borderElementVec
G4bool FindOpticalSurface(const G4SurfaceProperty *)
const G4VPhysicalVolume * GetVolume2() const
const G4VPhysicalVolume * GetVolume1() const
const G4String & GetName() const
G4SurfaceProperty * GetSurfaceProperty() const
const G4String & GetName() const
const G4String & GetName() const

References borderElementVec, FatalException, FindOpticalSurface(), G4Exception(), G4GDMLWrite::GenerateName(), G4LogicalSurface::GetName(), G4VPhysicalVolume::GetName(), G4SurfaceProperty::GetName(), G4LogicalSurface::GetSurfaceProperty(), G4LogicalBorderSurface::GetVolume1(), G4LogicalBorderSurface::GetVolume2(), G4GDMLWrite::NewAttribute(), G4GDMLWrite::NewElement(), G4GDMLWriteSolids::OpticalSurfaceWrite(), and G4GDMLWriteSolids::solidsElement.

Referenced by GetBorderSurface().

◆ Box_dimensionsWrite()

void G4GDMLWriteParamvol::Box_dimensionsWrite ( xercesc::DOMElement *  parametersElement,
const G4Box * const  box 
)
protectedinherited

Definition at line 65 of file G4GDMLWriteParamvol.cc.

67{
68 xercesc::DOMElement* box_dimensionsElement = NewElement("box_dimensions");
69 box_dimensionsElement->setAttributeNode(
70 NewAttribute("x", 2.0 * box->GetXHalfLength() / mm));
71 box_dimensionsElement->setAttributeNode(
72 NewAttribute("y", 2.0 * box->GetYHalfLength() / mm));
73 box_dimensionsElement->setAttributeNode(
74 NewAttribute("z", 2.0 * box->GetZHalfLength() / mm));
75 box_dimensionsElement->setAttributeNode(NewAttribute("lunit", "mm"));
76 parametersElement->appendChild(box_dimensionsElement);
77}
static constexpr double mm
Definition: G4SIunits.hh:95
G4double GetYHalfLength() const
G4double GetZHalfLength() const
G4double GetXHalfLength() const

References G4Box::GetXHalfLength(), G4Box::GetYHalfLength(), G4Box::GetZHalfLength(), mm, G4GDMLWrite::NewAttribute(), and G4GDMLWrite::NewElement().

Referenced by G4GDMLWriteParamvol::ParametersWrite().

◆ BoxWrite()

void G4GDMLWriteSolids::BoxWrite ( xercesc::DOMElement *  solElement,
const G4Box * const  box 
)
protectedinherited

Definition at line 292 of file G4GDMLWriteSolids.cc.

294{
295 const G4String& name = GenerateName(box->GetName(), box);
296
297 xercesc::DOMElement* boxElement = NewElement("box");
298 boxElement->setAttributeNode(NewAttribute("name", name));
299 boxElement->setAttributeNode(
300 NewAttribute("x", 2.0 * box->GetXHalfLength() / mm));
301 boxElement->setAttributeNode(
302 NewAttribute("y", 2.0 * box->GetYHalfLength() / mm));
303 boxElement->setAttributeNode(
304 NewAttribute("z", 2.0 * box->GetZHalfLength() / mm));
305 boxElement->setAttributeNode(NewAttribute("lunit", "mm"));
306 solElement->appendChild(boxElement);
307}

References G4GDMLWrite::GenerateName(), G4VSolid::GetName(), G4Box::GetXHalfLength(), G4Box::GetYHalfLength(), G4Box::GetZHalfLength(), mm, G4InuclParticleNames::name(), G4GDMLWrite::NewAttribute(), and G4GDMLWrite::NewElement().

Referenced by G4GDMLWriteSolids::AddSolid().

◆ Cone_dimensionsWrite()

void G4GDMLWriteParamvol::Cone_dimensionsWrite ( xercesc::DOMElement *  parametersElement,
const G4Cons * const  cone 
)
protectedinherited

Definition at line 157 of file G4GDMLWriteParamvol.cc.

159{
160 xercesc::DOMElement* cone_dimensionsElement = NewElement("cone_dimensions");
161 cone_dimensionsElement->setAttributeNode(
162 NewAttribute("rmin1", cone->GetInnerRadiusMinusZ() / mm));
163 cone_dimensionsElement->setAttributeNode(
164 NewAttribute("rmax1", cone->GetOuterRadiusMinusZ() / mm));
165 cone_dimensionsElement->setAttributeNode(
166 NewAttribute("rmin2", cone->GetInnerRadiusPlusZ() / mm));
167 cone_dimensionsElement->setAttributeNode(
168 NewAttribute("rmax2", cone->GetOuterRadiusPlusZ() / mm));
169 cone_dimensionsElement->setAttributeNode(
170 NewAttribute("z", 2.0 * cone->GetZHalfLength() / mm));
171 cone_dimensionsElement->setAttributeNode(
172 NewAttribute("startphi", cone->GetStartPhiAngle() / degree));
173 cone_dimensionsElement->setAttributeNode(
174 NewAttribute("deltaphi", cone->GetDeltaPhiAngle() / degree));
175 cone_dimensionsElement->setAttributeNode(NewAttribute("aunit", "deg"));
176 cone_dimensionsElement->setAttributeNode(NewAttribute("lunit", "mm"));
177 parametersElement->appendChild(cone_dimensionsElement);
178}
static constexpr double degree
Definition: G4SIunits.hh:124
G4double GetOuterRadiusPlusZ() const
G4double GetStartPhiAngle() const
G4double GetDeltaPhiAngle() const
G4double GetInnerRadiusMinusZ() const
G4double GetInnerRadiusPlusZ() const
G4double GetOuterRadiusMinusZ() const
G4double GetZHalfLength() const

References degree, G4Cons::GetDeltaPhiAngle(), G4Cons::GetInnerRadiusMinusZ(), G4Cons::GetInnerRadiusPlusZ(), G4Cons::GetOuterRadiusMinusZ(), G4Cons::GetOuterRadiusPlusZ(), G4Cons::GetStartPhiAngle(), G4Cons::GetZHalfLength(), mm, G4GDMLWrite::NewAttribute(), and G4GDMLWrite::NewElement().

Referenced by G4GDMLWriteParamvol::ParametersWrite().

◆ ConeWrite()

void G4GDMLWriteSolids::ConeWrite ( xercesc::DOMElement *  solElement,
const G4Cons * const  cone 
)
protectedinherited

Definition at line 310 of file G4GDMLWriteSolids.cc.

312{
313 const G4String& name = GenerateName(cone->GetName(), cone);
314
315 xercesc::DOMElement* coneElement = NewElement("cone");
316 coneElement->setAttributeNode(NewAttribute("name", name));
317 coneElement->setAttributeNode(
318 NewAttribute("rmin1", cone->GetInnerRadiusMinusZ() / mm));
319 coneElement->setAttributeNode(
320 NewAttribute("rmax1", cone->GetOuterRadiusMinusZ() / mm));
321 coneElement->setAttributeNode(
322 NewAttribute("rmin2", cone->GetInnerRadiusPlusZ() / mm));
323 coneElement->setAttributeNode(
324 NewAttribute("rmax2", cone->GetOuterRadiusPlusZ() / mm));
325 coneElement->setAttributeNode(
326 NewAttribute("z", 2.0 * cone->GetZHalfLength() / mm));
327 coneElement->setAttributeNode(
328 NewAttribute("startphi", cone->GetStartPhiAngle() / degree));
329 coneElement->setAttributeNode(
330 NewAttribute("deltaphi", cone->GetDeltaPhiAngle() / degree));
331 coneElement->setAttributeNode(NewAttribute("aunit", "deg"));
332 coneElement->setAttributeNode(NewAttribute("lunit", "mm"));
333 solElement->appendChild(coneElement);
334}

References degree, G4GDMLWrite::GenerateName(), G4Cons::GetDeltaPhiAngle(), G4Cons::GetInnerRadiusMinusZ(), G4Cons::GetInnerRadiusPlusZ(), G4VSolid::GetName(), G4Cons::GetOuterRadiusMinusZ(), G4Cons::GetOuterRadiusPlusZ(), G4Cons::GetStartPhiAngle(), G4Cons::GetZHalfLength(), mm, G4InuclParticleNames::name(), G4GDMLWrite::NewAttribute(), and G4GDMLWrite::NewElement().

Referenced by G4GDMLWriteSolids::AddSolid().

◆ CutTubeWrite()

void G4GDMLWriteSolids::CutTubeWrite ( xercesc::DOMElement *  solElement,
const G4CutTubs * const  cuttube 
)
protectedinherited

Definition at line 894 of file G4GDMLWriteSolids.cc.

896{
897 const G4String& name = GenerateName(cuttube->GetName(), cuttube);
898
899 xercesc::DOMElement* cuttubeElement = NewElement("cutTube");
900 cuttubeElement->setAttributeNode(NewAttribute("name", name));
901 cuttubeElement->setAttributeNode(
902 NewAttribute("rmin", cuttube->GetInnerRadius() / mm));
903 cuttubeElement->setAttributeNode(
904 NewAttribute("rmax", cuttube->GetOuterRadius() / mm));
905 cuttubeElement->setAttributeNode(
906 NewAttribute("z", 2.0 * cuttube->GetZHalfLength() / mm));
907 cuttubeElement->setAttributeNode(
908 NewAttribute("startphi", cuttube->GetStartPhiAngle() / degree));
909 cuttubeElement->setAttributeNode(
910 NewAttribute("deltaphi", cuttube->GetDeltaPhiAngle() / degree));
911 cuttubeElement->setAttributeNode(
912 NewAttribute("lowX", cuttube->GetLowNorm().getX() / mm));
913 cuttubeElement->setAttributeNode(
914 NewAttribute("lowY", cuttube->GetLowNorm().getY() / mm));
915 cuttubeElement->setAttributeNode(
916 NewAttribute("lowZ", cuttube->GetLowNorm().getZ() / mm));
917 cuttubeElement->setAttributeNode(
918 NewAttribute("highX", cuttube->GetHighNorm().getX() / mm));
919 cuttubeElement->setAttributeNode(
920 NewAttribute("highY", cuttube->GetHighNorm().getY() / mm));
921 cuttubeElement->setAttributeNode(
922 NewAttribute("highZ", cuttube->GetHighNorm().getZ() / mm));
923 cuttubeElement->setAttributeNode(NewAttribute("aunit", "deg"));
924 cuttubeElement->setAttributeNode(NewAttribute("lunit", "mm"));
925 solElement->appendChild(cuttubeElement);
926}
double getZ() const
double getX() const
double getY() const
G4ThreeVector GetHighNorm() const
G4double GetStartPhiAngle() const
G4double GetZHalfLength() const
G4double GetInnerRadius() const
G4ThreeVector GetLowNorm() const
G4double GetDeltaPhiAngle() const
G4double GetOuterRadius() const

References degree, G4GDMLWrite::GenerateName(), G4CutTubs::GetDeltaPhiAngle(), G4CutTubs::GetHighNorm(), G4CutTubs::GetInnerRadius(), G4CutTubs::GetLowNorm(), G4VSolid::GetName(), G4CutTubs::GetOuterRadius(), G4CutTubs::GetStartPhiAngle(), CLHEP::Hep3Vector::getX(), CLHEP::Hep3Vector::getY(), CLHEP::Hep3Vector::getZ(), G4CutTubs::GetZHalfLength(), mm, G4InuclParticleNames::name(), G4GDMLWrite::NewAttribute(), and G4GDMLWrite::NewElement().

Referenced by G4GDMLWriteSolids::AddSolid().

◆ DefineWrite()

void G4GDMLWriteDefine::DefineWrite ( xercesc::DOMElement *  element)
virtualinherited

Implements G4GDMLWrite.

Definition at line 137 of file G4GDMLWriteDefine.cc.

138{
139#ifdef G4VERBOSE
140 G4cout << "G4GDML: Writing definitions..." << G4endl;
141#endif
142 defineElement = NewElement("define");
143 element->appendChild(defineElement);
144}

References G4GDMLWriteDefine::defineElement, G4cout, G4endl, and G4GDMLWrite::NewElement().

◆ DepthMap()

G4GDMLWrite::DepthMapType & G4GDMLWrite::DepthMap ( )
protectedinherited

Definition at line 73 of file G4GDMLWrite.cc.

74{
75 static DepthMapType instance;
76 return instance;
77}
std::map< G4int, G4int > DepthMapType
Definition: G4GDMLWrite.hh:55

Referenced by G4GDMLWrite::AddModule(), and G4GDMLWrite::Modularize().

◆ DivisionvolWrite()

void G4GDMLWriteStructure::DivisionvolWrite ( xercesc::DOMElement *  volumeElement,
const G4PVDivision * const  divisionvol 
)
protected

Definition at line 74 of file G4GDMLWriteStructure.cc.

76{
77 EAxis axis = kUndefined;
78 G4int number = 0;
79 G4double width = 0.0;
80 G4double offset = 0.0;
81 G4bool consuming = false;
82
83 divisionvol->GetReplicationData(axis, number, width, offset, consuming);
84 axis = divisionvol->GetDivisionAxis();
85
86 G4String unitString("mm");
87 G4String axisString("kUndefined");
88 if(axis == kXAxis)
89 {
90 axisString = "kXAxis";
91 }
92 else if(axis == kYAxis)
93 {
94 axisString = "kYAxis";
95 }
96 else if(axis == kZAxis)
97 {
98 axisString = "kZAxis";
99 }
100 else if(axis == kRho)
101 {
102 axisString = "kRho";
103 }
104 else if(axis == kPhi)
105 {
106 axisString = "kPhi";
107 unitString = "rad";
108 }
109
110 const G4String name = GenerateName(divisionvol->GetName(), divisionvol);
111 const G4String volumeref =
112 GenerateName(divisionvol->GetLogicalVolume()->GetName(),
113 divisionvol->GetLogicalVolume());
114
115 xercesc::DOMElement* divisionvolElement = NewElement("divisionvol");
116 divisionvolElement->setAttributeNode(NewAttribute("axis", axisString));
117 divisionvolElement->setAttributeNode(NewAttribute("number", number));
118 divisionvolElement->setAttributeNode(NewAttribute("width", width));
119 divisionvolElement->setAttributeNode(NewAttribute("offset", offset));
120 divisionvolElement->setAttributeNode(NewAttribute("unit", unitString));
121 xercesc::DOMElement* volumerefElement = NewElement("volumeref");
122 volumerefElement->setAttributeNode(NewAttribute("ref", volumeref));
123 divisionvolElement->appendChild(volumerefElement);
124 volumeElement->appendChild(divisionvolElement);
125}
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
const G4String & GetName() const
EAxis GetDivisionAxis() const
virtual void GetReplicationData(EAxis &axis, G4int &nReplicas, G4double &width, G4double &offset, G4bool &consuming) const
G4LogicalVolume * GetLogicalVolume() const
EAxis
Definition: geomdefs.hh:54
@ kPhi
Definition: geomdefs.hh:60
@ kYAxis
Definition: geomdefs.hh:56
@ kXAxis
Definition: geomdefs.hh:55
@ kZAxis
Definition: geomdefs.hh:57
@ kUndefined
Definition: geomdefs.hh:61
@ kRho
Definition: geomdefs.hh:58

References G4GDMLWrite::GenerateName(), G4PVDivision::GetDivisionAxis(), G4VPhysicalVolume::GetLogicalVolume(), G4LogicalVolume::GetName(), G4VPhysicalVolume::GetName(), G4PVDivision::GetReplicationData(), kPhi, kRho, kUndefined, kXAxis, kYAxis, kZAxis, G4InuclParticleNames::name(), G4GDMLWrite::NewAttribute(), and G4GDMLWrite::NewElement().

Referenced by TraverseVolumeTree().

◆ DWrite()

void G4GDMLWriteMaterials::DWrite ( xercesc::DOMElement *  element,
const G4double d 
)
protectedinherited

Definition at line 63 of file G4GDMLWriteMaterials.cc.

65{
66 xercesc::DOMElement* DElement = NewElement("D");
67 DElement->setAttributeNode(NewAttribute("unit", "g/cm3"));
68 DElement->setAttributeNode(NewAttribute("value", d * cm3 / g));
69 element->appendChild(DElement);
70}
static constexpr double cm3
Definition: G4SIunits.hh:101

References cm3, g, G4GDMLWrite::NewAttribute(), and G4GDMLWrite::NewElement().

Referenced by G4GDMLWriteMaterials::MaterialWrite().

◆ ElconeWrite()

void G4GDMLWriteSolids::ElconeWrite ( xercesc::DOMElement *  solElement,
const G4EllipticalCone * const  elcone 
)
protectedinherited

Definition at line 337 of file G4GDMLWriteSolids.cc.

339{
340 const G4String& name = GenerateName(elcone->GetName(), elcone);
341
342 xercesc::DOMElement* elconeElement = NewElement("elcone");
343 elconeElement->setAttributeNode(NewAttribute("name", name));
344 elconeElement->setAttributeNode(
345 NewAttribute("dx", elcone->GetSemiAxisX() / mm));
346 elconeElement->setAttributeNode(
347 NewAttribute("dy", elcone->GetSemiAxisY() / mm));
348 elconeElement->setAttributeNode(NewAttribute("zmax", elcone->GetZMax() / mm));
349 elconeElement->setAttributeNode(
350 NewAttribute("zcut", elcone->GetZTopCut() / mm));
351 elconeElement->setAttributeNode(NewAttribute("lunit", "mm"));
352 solElement->appendChild(elconeElement);
353}
G4double GetSemiAxisX() const
G4double GetSemiAxisY() const
G4double GetZMax() const
G4double GetZTopCut() const

References G4GDMLWrite::GenerateName(), G4VSolid::GetName(), G4EllipticalCone::GetSemiAxisX(), G4EllipticalCone::GetSemiAxisY(), G4EllipticalCone::GetZMax(), G4EllipticalCone::GetZTopCut(), mm, G4InuclParticleNames::name(), G4GDMLWrite::NewAttribute(), and G4GDMLWrite::NewElement().

Referenced by G4GDMLWriteSolids::AddSolid().

◆ ElementWrite()

void G4GDMLWriteMaterials::ElementWrite ( const G4Element * const  elementPtr)
protectedinherited

Definition at line 116 of file G4GDMLWriteMaterials.cc.

117{
118 const G4String name = GenerateName(elementPtr->GetName(), elementPtr);
119
120 xercesc::DOMElement* elementElement = NewElement("element");
121 elementElement->setAttributeNode(NewAttribute("name", name));
122
123 const std::size_t NumberOfIsotopes = elementPtr->GetNumberOfIsotopes();
124
125 if(NumberOfIsotopes > 0)
126 {
127 const G4double* RelativeAbundanceVector
128 = elementPtr->GetRelativeAbundanceVector();
129 for(std::size_t i = 0; i < NumberOfIsotopes; ++i)
130 {
131 G4String fractionref = GenerateName(elementPtr->GetIsotope(i)->GetName(),
132 elementPtr->GetIsotope(i));
133 xercesc::DOMElement* fractionElement = NewElement("fraction");
134 fractionElement->setAttributeNode(
135 NewAttribute("n", RelativeAbundanceVector[i]));
136 fractionElement->setAttributeNode(NewAttribute("ref", fractionref));
137 elementElement->appendChild(fractionElement);
138 AddIsotope(elementPtr->GetIsotope(i));
139 }
140 }
141 else
142 {
143 elementElement->setAttributeNode(NewAttribute("Z", elementPtr->GetZ()));
144 AtomWrite(elementElement, elementPtr->GetA());
145 }
146
147 materialsElement->appendChild(elementElement);
148 // Append the element AFTER all the possible components are appended!
149}
G4double * GetRelativeAbundanceVector() const
Definition: G4Element.hh:167
G4double GetZ() const
Definition: G4Element.hh:131
const G4Isotope * GetIsotope(G4int iso) const
Definition: G4Element.hh:170
G4double GetA() const
Definition: G4Element.hh:139
size_t GetNumberOfIsotopes() const
Definition: G4Element.hh:159
const G4String & GetName() const
Definition: G4Element.hh:127
void AtomWrite(xercesc::DOMElement *, const G4double &)
void AddIsotope(const G4Isotope *const)
xercesc::DOMElement * materialsElement
const G4String & GetName() const
Definition: G4Isotope.hh:87

References G4GDMLWriteMaterials::AddIsotope(), G4GDMLWriteMaterials::AtomWrite(), G4GDMLWrite::GenerateName(), G4Element::GetA(), G4Element::GetIsotope(), G4Element::GetName(), G4Isotope::GetName(), G4Element::GetNumberOfIsotopes(), G4Element::GetRelativeAbundanceVector(), G4Element::GetZ(), G4GDMLWriteMaterials::materialsElement, G4InuclParticleNames::name(), G4GDMLWrite::NewAttribute(), and G4GDMLWrite::NewElement().

Referenced by G4GDMLWriteMaterials::AddElement().

◆ Ellipsoid_dimensionsWrite()

void G4GDMLWriteParamvol::Ellipsoid_dimensionsWrite ( xercesc::DOMElement *  parametersElement,
const G4Ellipsoid * const  ellipsoid 
)
protectedinherited

Definition at line 235 of file G4GDMLWriteParamvol.cc.

237{
238 xercesc::DOMElement* ellipsoid_dimensionsElement =
239 NewElement("ellipsoid_dimensions");
240 ellipsoid_dimensionsElement->setAttributeNode(
241 NewAttribute("ax", ellipsoid->GetSemiAxisMax(0) / mm));
242 ellipsoid_dimensionsElement->setAttributeNode(
243 NewAttribute("by", ellipsoid->GetSemiAxisMax(1) / mm));
244 ellipsoid_dimensionsElement->setAttributeNode(
245 NewAttribute("cz", ellipsoid->GetSemiAxisMax(2) / mm));
246 ellipsoid_dimensionsElement->setAttributeNode(
247 NewAttribute("zcut1", ellipsoid->GetZBottomCut() / mm));
248 ellipsoid_dimensionsElement->setAttributeNode(
249 NewAttribute("zcut2", ellipsoid->GetZTopCut() / mm));
250 ellipsoid_dimensionsElement->setAttributeNode(NewAttribute("lunit", "mm"));
251 parametersElement->appendChild(ellipsoid_dimensionsElement);
252}
G4double GetSemiAxisMax(G4int i) const
G4double GetZTopCut() const
G4double GetZBottomCut() const

References G4Ellipsoid::GetSemiAxisMax(), G4Ellipsoid::GetZBottomCut(), G4Ellipsoid::GetZTopCut(), mm, G4GDMLWrite::NewAttribute(), and G4GDMLWrite::NewElement().

Referenced by G4GDMLWriteParamvol::ParametersWrite().

◆ EllipsoidWrite()

void G4GDMLWriteSolids::EllipsoidWrite ( xercesc::DOMElement *  solElement,
const G4Ellipsoid * const  ellipsoid 
)
protectedinherited

Definition at line 356 of file G4GDMLWriteSolids.cc.

358{
359 const G4String& name = GenerateName(ellipsoid->GetName(), ellipsoid);
360
361 xercesc::DOMElement* ellipsoidElement = NewElement("ellipsoid");
362 ellipsoidElement->setAttributeNode(NewAttribute("name", name));
363 ellipsoidElement->setAttributeNode(
364 NewAttribute("ax", ellipsoid->GetSemiAxisMax(0) / mm));
365 ellipsoidElement->setAttributeNode(
366 NewAttribute("by", ellipsoid->GetSemiAxisMax(1) / mm));
367 ellipsoidElement->setAttributeNode(
368 NewAttribute("cz", ellipsoid->GetSemiAxisMax(2) / mm));
369 ellipsoidElement->setAttributeNode(
370 NewAttribute("zcut1", ellipsoid->GetZBottomCut() / mm));
371 ellipsoidElement->setAttributeNode(
372 NewAttribute("zcut2", ellipsoid->GetZTopCut() / mm));
373 ellipsoidElement->setAttributeNode(NewAttribute("lunit", "mm"));
374 solElement->appendChild(ellipsoidElement);
375}

References G4GDMLWrite::GenerateName(), G4VSolid::GetName(), G4Ellipsoid::GetSemiAxisMax(), G4Ellipsoid::GetZBottomCut(), G4Ellipsoid::GetZTopCut(), mm, G4InuclParticleNames::name(), G4GDMLWrite::NewAttribute(), and G4GDMLWrite::NewElement().

Referenced by G4GDMLWriteSolids::AddSolid().

◆ EltubeWrite()

void G4GDMLWriteSolids::EltubeWrite ( xercesc::DOMElement *  solElement,
const G4EllipticalTube * const  eltube 
)
protectedinherited

Definition at line 378 of file G4GDMLWriteSolids.cc.

380{
381 const G4String& name = GenerateName(eltube->GetName(), eltube);
382
383 xercesc::DOMElement* eltubeElement = NewElement("eltube");
384 eltubeElement->setAttributeNode(NewAttribute("name", name));
385 eltubeElement->setAttributeNode(NewAttribute("dx", eltube->GetDx() / mm));
386 eltubeElement->setAttributeNode(NewAttribute("dy", eltube->GetDy() / mm));
387 eltubeElement->setAttributeNode(NewAttribute("dz", eltube->GetDz() / mm));
388 eltubeElement->setAttributeNode(NewAttribute("lunit", "mm"));
389 solElement->appendChild(eltubeElement);
390}
G4double GetDy() const
G4double GetDx() const
G4double GetDz() const

References G4GDMLWrite::GenerateName(), G4EllipticalTube::GetDx(), G4EllipticalTube::GetDy(), G4EllipticalTube::GetDz(), G4VSolid::GetName(), mm, G4InuclParticleNames::name(), G4GDMLWrite::NewAttribute(), and G4GDMLWrite::NewElement().

Referenced by G4GDMLWriteSolids::AddSolid().

◆ ExportEnergyCuts()

void G4GDMLWriteStructure::ExportEnergyCuts ( const G4LogicalVolume * const  lvol)
protected

Definition at line 849 of file G4GDMLWriteStructure.cc.

850{
851 G4GDMLEvaluator eval;
852 G4ProductionCuts* pcuts = lvol->GetRegion()->GetProductionCuts();
854 G4Gamma* gamma = G4Gamma::Gamma();
858
859 G4double gamma_cut = ctab->ConvertRangeToEnergy(
860 gamma, lvol->GetMaterial(), pcuts->GetProductionCut("gamma"));
861 G4double eminus_cut = ctab->ConvertRangeToEnergy(
862 eminus, lvol->GetMaterial(), pcuts->GetProductionCut("e-"));
863 G4double eplus_cut = ctab->ConvertRangeToEnergy(
864 eplus, lvol->GetMaterial(), pcuts->GetProductionCut("e+"));
865 G4double proton_cut = ctab->ConvertRangeToEnergy(
866 proton, lvol->GetMaterial(), pcuts->GetProductionCut("proton"));
867
868 G4GDMLAuxStructType gammainfo = { "gammaECut",
869 eval.ConvertToString(gamma_cut), "MeV", 0 };
870 G4GDMLAuxStructType eminusinfo = { "electronECut",
871 eval.ConvertToString(eminus_cut), "MeV",
872 0 };
873 G4GDMLAuxStructType eplusinfo = { "positronECut",
874 eval.ConvertToString(eplus_cut), "MeV", 0 };
875 G4GDMLAuxStructType protinfo = { "protonECut",
876 eval.ConvertToString(proton_cut), "MeV", 0 };
877
878 AddVolumeAuxiliary(gammainfo, lvol);
879 AddVolumeAuxiliary(eminusinfo, lvol);
880 AddVolumeAuxiliary(eplusinfo, lvol);
881 AddVolumeAuxiliary(protinfo, lvol);
882}
static constexpr double eplus
Definition: G4SIunits.hh:184
static G4Electron * Electron()
Definition: G4Electron.cc:93
G4String ConvertToString(G4int ival)
void AddVolumeAuxiliary(G4GDMLAuxStructType myaux, const G4LogicalVolume *const)
static G4Gamma * Gamma()
Definition: G4Gamma.cc:85
G4Region * GetRegion() const
G4Material * GetMaterial() const
static G4Positron * Positron()
Definition: G4Positron.cc:93
static G4ProductionCutsTable * GetProductionCutsTable()
G4double ConvertRangeToEnergy(const G4ParticleDefinition *particle, const G4Material *material, G4double range)
G4double GetProductionCut(G4int index) const
static G4Proton * Proton()
Definition: G4Proton.cc:92
G4ProductionCuts * GetProductionCuts() const

References AddVolumeAuxiliary(), G4ProductionCutsTable::ConvertRangeToEnergy(), G4GDMLEvaluator::ConvertToString(), G4Electron::Electron(), eplus, G4Gamma::Gamma(), G4LogicalVolume::GetMaterial(), G4ProductionCuts::GetProductionCut(), G4Region::GetProductionCuts(), G4ProductionCutsTable::GetProductionCutsTable(), G4LogicalVolume::GetRegion(), G4Positron::Positron(), G4Proton::Proton(), and G4InuclParticleNames::proton.

Referenced by TraverseVolumeTree().

◆ ExportSD()

void G4GDMLWriteStructure::ExportSD ( const G4LogicalVolume * const  lvol)
protected

Definition at line 891 of file G4GDMLWriteStructure.cc.

892{
894
895 if(sd != nullptr)
896 {
897 G4String SDname = sd->GetName();
898
899 G4GDMLAuxStructType SDinfo = { "SensDet", SDname, "", 0 };
900 AddVolumeAuxiliary(SDinfo, lvol);
901 }
902}
G4VSensitiveDetector * GetSensitiveDetector() const

References AddVolumeAuxiliary(), G4VSensitiveDetector::GetName(), and G4LogicalVolume::GetSensitiveDetector().

Referenced by TraverseVolumeTree().

◆ ExtensionWrite()

void G4GDMLWrite::ExtensionWrite ( xercesc::DOMElement *  )
virtualinherited

Definition at line 88 of file G4GDMLWrite.cc.

89{
90 // Empty implementation. To be overwritten by user for specific extensions
91}

Referenced by G4GDMLWrite::Write().

◆ FileExists()

G4bool G4GDMLWrite::FileExists ( const G4String fname) const
protectedinherited

Definition at line 53 of file G4GDMLWrite.cc.

54{
55 struct stat FileInfo;
56 return (stat(fname.c_str(), &FileInfo) == 0);
57}

References test::fname.

Referenced by G4GDMLWrite::Write().

◆ FindOpticalSurface()

G4bool G4GDMLWriteStructure::FindOpticalSurface ( const G4SurfaceProperty psurf)
protected

Definition at line 417 of file G4GDMLWriteStructure.cc.

418{
419 const G4OpticalSurface* osurf = dynamic_cast<const G4OpticalSurface*>(psurf);
420 auto pos = std::find(opt_vec.cbegin(), opt_vec.cend(), osurf);
421 if(pos != opt_vec.cend())
422 {
423 return false;
424 } // item already created!
425
426 opt_vec.push_back(osurf); // cache it for future reference
427 return true;
428}
std::vector< const G4OpticalSurface * > opt_vec

References opt_vec, and pos.

Referenced by BorderSurfaceCache(), and SkinSurfaceCache().

◆ FirstpositionWrite()

void G4GDMLWriteDefine::FirstpositionWrite ( xercesc::DOMElement *  element,
const G4String name,
const G4ThreeVector pos 
)
inlineinherited

Definition at line 68 of file G4GDMLWriteDefine.hh.

70 {
71 Position_vectorWrite(element, "firstposition", name, pos);
72 }

References G4InuclParticleNames::name(), pos, and G4GDMLWriteDefine::Position_vectorWrite().

Referenced by G4GDMLWriteSolids::BooleanWrite().

◆ FirstrotationWrite()

void G4GDMLWriteDefine::FirstrotationWrite ( xercesc::DOMElement *  element,
const G4String name,
const G4ThreeVector rot 
)
inlineinherited

Definition at line 63 of file G4GDMLWriteDefine.hh.

65 {
66 Rotation_vectorWrite(element, "firstrotation", name, rot);
67 }
void Rotation_vectorWrite(xercesc::DOMElement *, const G4String &, const G4String &, const G4ThreeVector &)

References G4InuclParticleNames::name(), and G4GDMLWriteDefine::Rotation_vectorWrite().

Referenced by G4GDMLWriteSolids::BooleanWrite().

◆ GenerateName()

G4String G4GDMLWrite::GenerateName ( const G4String name,
const void * const  ptr 
)
inherited

Definition at line 132 of file G4GDMLWrite.cc.

133{
134 G4String nameOut;
135 std::stringstream stream;
136 stream << name;
138 {
139 stream << ptr;
140 };
141
142 nameOut = G4String(stream.str());
143 std::vector<char> toremove = { ' ', '/', ':', '#', '+' };
144 for(auto c : toremove)
145 {
146 if(G4StrUtil::contains(nameOut, c))
147 {
148 std::replace(nameOut.begin(), nameOut.end(), c, '_');
149 }
150 }
151 return nameOut;
152}
static G4bool addPointerToName
Definition: G4GDMLWrite.hh:131
G4bool contains(const G4String &str, std::string_view ss)
Check if a string contains a given substring.

References G4GDMLWrite::addPointerToName, G4StrUtil::contains(), and G4InuclParticleNames::name().

Referenced by G4GDMLWrite::AddModule(), AssemblyWrite(), G4GDMLWriteSolids::BooleanWrite(), BorderSurfaceCache(), G4GDMLWriteSolids::BoxWrite(), G4GDMLWriteSolids::ConeWrite(), G4GDMLWriteSolids::CutTubeWrite(), DivisionvolWrite(), G4GDMLWriteSolids::ElconeWrite(), G4GDMLWriteMaterials::ElementWrite(), G4GDMLWriteSolids::EllipsoidWrite(), G4GDMLWriteSolids::EltubeWrite(), G4GDMLParser::ExportRegions(), G4GDMLWriteSolids::GenericPolyconeWrite(), G4GDMLWriteSolids::GenTrapWrite(), G4GDMLWriteSolids::HypeWrite(), G4GDMLWriteMaterials::IsotopeWrite(), G4GDMLWriteMaterials::MaterialWrite(), G4GDMLWriteSolids::MultiUnionWrite(), G4GDMLWriteSolids::OpticalSurfaceWrite(), G4GDMLWriteSolids::OrbWrite(), G4GDMLWriteSolids::ParaboloidWrite(), G4GDMLWriteParamvol::ParametersWrite(), G4GDMLWriteParamvol::ParamvolAlgorithmWrite(), G4GDMLWriteParamvol::ParamvolWrite(), G4GDMLWriteSolids::ParaWrite(), PhysvolWrite(), G4GDMLWriteSolids::PolyconeWrite(), G4GDMLWriteSolids::PolyhedraWrite(), G4GDMLWriteMaterials::PropertyConstWrite(), G4GDMLWriteMaterials::PropertyVectorWrite(), G4GDMLWriteMaterials::PropertyWrite(), G4GDMLWriteSolids::PropertyWrite(), ReplicavolWrite(), G4GDMLWriteSolids::ScaledWrite(), G4GDMLWriteSetup::SetupWrite(), SkinSurfaceCache(), G4GDMLWriteSolids::SphereWrite(), G4GDMLWriteSolids::TessellatedWrite(), G4GDMLWriteSolids::TetWrite(), G4GDMLWriteSolids::TorusWrite(), G4GDMLWriteSolids::TrapWrite(), TraverseVolumeTree(), G4GDMLWriteSolids::TrdWrite(), G4GDMLWriteSolids::TubeWrite(), G4GDMLWriteSolids::TwistedboxWrite(), G4GDMLWriteSolids::TwistedtrapWrite(), G4GDMLWriteSolids::TwistedtrdWrite(), G4GDMLWriteSolids::TwistedtubsWrite(), and G4GDMLWriteSolids::XtruWrite().

◆ GenericPolyconeWrite()

void G4GDMLWriteSolids::GenericPolyconeWrite ( xercesc::DOMElement *  solElement,
const G4GenericPolycone * const  polycone 
)
protectedinherited

Definition at line 547 of file G4GDMLWriteSolids.cc.

549{
550 const G4String& name = GenerateName(polycone->GetName(), polycone);
551 xercesc::DOMElement* polyconeElement = NewElement("genericPolycone");
552 const G4double startPhi = polycone->GetStartPhi();
553 polyconeElement->setAttributeNode(NewAttribute("name", name));
554 polyconeElement->setAttributeNode(
555 NewAttribute("startphi", startPhi / degree));
556 polyconeElement->setAttributeNode(
557 NewAttribute("deltaphi", (polycone->GetEndPhi() - startPhi) / degree));
558 polyconeElement->setAttributeNode(NewAttribute("aunit", "deg"));
559 polyconeElement->setAttributeNode(NewAttribute("lunit", "mm"));
560 solElement->appendChild(polyconeElement);
561
562 const std::size_t num_rzpoints = polycone->GetNumRZCorner();
563 for(std::size_t i = 0; i < num_rzpoints; ++i)
564 {
565 const G4double r_point = polycone->GetCorner(i).r;
566 const G4double z_point = polycone->GetCorner(i).z;
567 RZPointWrite(polyconeElement, r_point, z_point);
568 }
569}
void RZPointWrite(xercesc::DOMElement *, const G4double &, const G4double &)
G4double GetStartPhi() const
G4double GetEndPhi() const
G4int GetNumRZCorner() const
G4PolyconeSideRZ GetCorner(G4int index) const

References degree, G4GDMLWrite::GenerateName(), G4GenericPolycone::GetCorner(), G4GenericPolycone::GetEndPhi(), G4VSolid::GetName(), G4GenericPolycone::GetNumRZCorner(), G4GenericPolycone::GetStartPhi(), G4InuclParticleNames::name(), G4GDMLWrite::NewAttribute(), G4GDMLWrite::NewElement(), G4PolyconeSideRZ::r, G4GDMLWriteSolids::RZPointWrite(), and G4PolyconeSideRZ::z.

Referenced by G4GDMLWriteSolids::AddSolid().

◆ GenTrapWrite()

void G4GDMLWriteSolids::GenTrapWrite ( xercesc::DOMElement *  solElement,
const G4GenericTrap * const  gtrap 
)
protectedinherited

Definition at line 780 of file G4GDMLWriteSolids.cc.

782{
783 const G4String& name = GenerateName(gtrap->GetName(), gtrap);
784
785 std::vector<G4TwoVector> vertices = gtrap->GetVertices();
786
787 xercesc::DOMElement* gtrapElement = NewElement("arb8");
788 gtrapElement->setAttributeNode(NewAttribute("name", name));
789 gtrapElement->setAttributeNode(
790 NewAttribute("dz", gtrap->GetZHalfLength() / mm));
791 gtrapElement->setAttributeNode(NewAttribute("v1x", vertices[0].x()));
792 gtrapElement->setAttributeNode(NewAttribute("v1y", vertices[0].y()));
793 gtrapElement->setAttributeNode(NewAttribute("v2x", vertices[1].x()));
794 gtrapElement->setAttributeNode(NewAttribute("v2y", vertices[1].y()));
795 gtrapElement->setAttributeNode(NewAttribute("v3x", vertices[2].x()));
796 gtrapElement->setAttributeNode(NewAttribute("v3y", vertices[2].y()));
797 gtrapElement->setAttributeNode(NewAttribute("v4x", vertices[3].x()));
798 gtrapElement->setAttributeNode(NewAttribute("v4y", vertices[3].y()));
799 gtrapElement->setAttributeNode(NewAttribute("v5x", vertices[4].x()));
800 gtrapElement->setAttributeNode(NewAttribute("v5y", vertices[4].y()));
801 gtrapElement->setAttributeNode(NewAttribute("v6x", vertices[5].x()));
802 gtrapElement->setAttributeNode(NewAttribute("v6y", vertices[5].y()));
803 gtrapElement->setAttributeNode(NewAttribute("v7x", vertices[6].x()));
804 gtrapElement->setAttributeNode(NewAttribute("v7y", vertices[6].y()));
805 gtrapElement->setAttributeNode(NewAttribute("v8x", vertices[7].x()));
806 gtrapElement->setAttributeNode(NewAttribute("v8y", vertices[7].y()));
807 gtrapElement->setAttributeNode(NewAttribute("lunit", "mm"));
808 solElement->appendChild(gtrapElement);
809}
G4double GetZHalfLength() const
const std::vector< G4TwoVector > & GetVertices() const

References G4GDMLWrite::GenerateName(), G4VSolid::GetName(), G4GenericTrap::GetVertices(), G4GenericTrap::GetZHalfLength(), mm, G4InuclParticleNames::name(), G4GDMLWrite::NewAttribute(), and G4GDMLWrite::NewElement().

Referenced by G4GDMLWriteSolids::AddSolid().

◆ GetAngles()

G4ThreeVector G4GDMLWriteDefine::GetAngles ( const G4RotationMatrix mtx)
inherited

Definition at line 50 of file G4GDMLWriteDefine.cc.

51{
52 G4double x, y, z;
53 G4RotationMatrix mat = mtx;
54 mat.rectify(); // Rectify matrix from possible roundoff errors
55
56 // Direction of rotation given by left-hand rule; clockwise rotation
57
58 static const G4double kMatrixPrecision = 10E-10;
59 const G4double cosb = std::sqrt(mtx.xx() * mtx.xx() + mtx.yx() * mtx.yx());
60
61 if(cosb > kMatrixPrecision)
62 {
63 x = std::atan2(mtx.zy(), mtx.zz());
64 y = std::atan2(-mtx.zx(), cosb);
65 z = std::atan2(mtx.yx(), mtx.xx());
66 }
67 else
68 {
69 x = std::atan2(-mtx.yz(), mtx.yy());
70 y = std::atan2(-mtx.zx(), cosb);
71 z = 0.0;
72 }
73
74 return G4ThreeVector(x, y, z);
75}
CLHEP::Hep3Vector G4ThreeVector
double zz() const
double yz() const
double zx() const
double yx() const
double zy() const
double xx() const
double yy() const

References CLHEP::HepRotation::rectify(), CLHEP::HepRotation::xx(), CLHEP::HepRotation::yx(), CLHEP::HepRotation::yy(), CLHEP::HepRotation::yz(), CLHEP::HepRotation::zx(), CLHEP::HepRotation::zy(), and CLHEP::HepRotation::zz().

Referenced by AssemblyWrite(), G4GDMLWriteSolids::BooleanWrite(), G4GDMLWriteSolids::MultiUnionWrite(), G4GDMLWriteParamvol::ParametersWrite(), PhysvolWrite(), and TraverseVolumeTree().

◆ GetBorderSurface()

const G4LogicalBorderSurface * G4GDMLWriteStructure::GetBorderSurface ( const G4VPhysicalVolume * const  pvol)
protected

Definition at line 453 of file G4GDMLWriteStructure.cc.

455{
456 G4LogicalBorderSurface* surf = nullptr;
458 if(nsurf)
459 {
460 const G4LogicalBorderSurfaceTable* btable =
462 for(auto pos = btable->cbegin(); pos != btable->cend(); ++pos)
463 {
464 if(pvol == pos->first.first) // just the first in the couple
465 { // could be enough?
466 surf = pos->second; // break;
467 BorderSurfaceCache(surf);
468 }
469 }
470 }
471 return surf;
472}
std::map< std::pair< const G4VPhysicalVolume *, const G4VPhysicalVolume * >, G4LogicalBorderSurface * > G4LogicalBorderSurfaceTable
void BorderSurfaceCache(const G4LogicalBorderSurface *const)
static std::size_t GetNumberOfBorderSurfaces()
static const G4LogicalBorderSurfaceTable * GetSurfaceTable()

References BorderSurfaceCache(), G4LogicalBorderSurface::GetNumberOfBorderSurfaces(), G4LogicalBorderSurface::GetSurfaceTable(), and pos.

Referenced by TraverseVolumeTree().

◆ GetMaxExportLevel()

G4int G4GDMLWriteStructure::GetMaxExportLevel ( ) const

Definition at line 905 of file G4GDMLWriteStructure.cc.

906{
907 return maxLevel;
908}

References maxLevel.

◆ GetSkinSurface()

const G4LogicalSkinSurface * G4GDMLWriteStructure::GetSkinSurface ( const G4LogicalVolume * const  lvol)
protected

Definition at line 431 of file G4GDMLWriteStructure.cc.

433{
434 G4LogicalSkinSurface* surf = 0;
436 if(nsurf)
437 {
438 const G4LogicalSkinSurfaceTable* stable =
440 for(auto pos = stable->cbegin(); pos != stable->cend(); ++pos)
441 {
442 if(lvol == (*pos)->GetLogicalVolume())
443 {
444 surf = *pos;
445 break;
446 }
447 }
448 }
449 return surf;
450}
std::vector< G4LogicalSkinSurface * > G4LogicalSkinSurfaceTable
static const G4LogicalSkinSurfaceTable * GetSurfaceTable()
static std::size_t GetNumberOfSkinSurfaces()

References G4LogicalSkinSurface::GetNumberOfSkinSurfaces(), G4LogicalSkinSurface::GetSurfaceTable(), and pos.

Referenced by TraverseVolumeTree().

◆ Hype_dimensionsWrite()

void G4GDMLWriteParamvol::Hype_dimensionsWrite ( xercesc::DOMElement *  parametersElement,
const G4Hype * const  hype 
)
protectedinherited

Definition at line 283 of file G4GDMLWriteParamvol.cc.

285{
286 xercesc::DOMElement* hype_dimensionsElement = NewElement("hype_dimensions");
287 hype_dimensionsElement->setAttributeNode(
288 NewAttribute("rmin", hype->GetInnerRadius() / mm));
289 hype_dimensionsElement->setAttributeNode(
290 NewAttribute("rmax", hype->GetOuterRadius() / mm));
291 hype_dimensionsElement->setAttributeNode(
292 NewAttribute("inst", hype->GetInnerStereo() / degree));
293 hype_dimensionsElement->setAttributeNode(
294 NewAttribute("outst", hype->GetOuterStereo() / degree));
295 hype_dimensionsElement->setAttributeNode(
296 NewAttribute("z", 2.0 * hype->GetZHalfLength() / mm));
297 hype_dimensionsElement->setAttributeNode(NewAttribute("aunit", "deg"));
298 hype_dimensionsElement->setAttributeNode(NewAttribute("lunit", "mm"));
299 parametersElement->appendChild(hype_dimensionsElement);
300}
G4double GetInnerStereo() const
G4double GetZHalfLength() const
G4double GetOuterStereo() const
G4double GetOuterRadius() const
G4double GetInnerRadius() const

References degree, G4Hype::GetInnerRadius(), G4Hype::GetInnerStereo(), G4Hype::GetOuterRadius(), G4Hype::GetOuterStereo(), G4Hype::GetZHalfLength(), mm, G4GDMLWrite::NewAttribute(), and G4GDMLWrite::NewElement().

Referenced by G4GDMLWriteParamvol::ParametersWrite().

◆ HypeWrite()

void G4GDMLWriteSolids::HypeWrite ( xercesc::DOMElement *  solElement,
const G4Hype * const  hype 
)
protectedinherited

Definition at line 438 of file G4GDMLWriteSolids.cc.

440{
441 const G4String& name = GenerateName(hype->GetName(), hype);
442
443 xercesc::DOMElement* hypeElement = NewElement("hype");
444 hypeElement->setAttributeNode(NewAttribute("name", name));
445 hypeElement->setAttributeNode(
446 NewAttribute("rmin", hype->GetInnerRadius() / mm));
447 hypeElement->setAttributeNode(
448 NewAttribute("rmax", hype->GetOuterRadius() / mm));
449 hypeElement->setAttributeNode(
450 NewAttribute("inst", hype->GetInnerStereo() / degree));
451 hypeElement->setAttributeNode(
452 NewAttribute("outst", hype->GetOuterStereo() / degree));
453 hypeElement->setAttributeNode(
454 NewAttribute("z", 2.0 * hype->GetZHalfLength() / mm));
455 hypeElement->setAttributeNode(NewAttribute("aunit", "deg"));
456 hypeElement->setAttributeNode(NewAttribute("lunit", "mm"));
457 solElement->appendChild(hypeElement);
458}

References degree, G4GDMLWrite::GenerateName(), G4Hype::GetInnerRadius(), G4Hype::GetInnerStereo(), G4VSolid::GetName(), G4Hype::GetOuterRadius(), G4Hype::GetOuterStereo(), G4Hype::GetZHalfLength(), mm, G4InuclParticleNames::name(), G4GDMLWrite::NewAttribute(), and G4GDMLWrite::NewElement().

Referenced by G4GDMLWriteSolids::AddSolid().

◆ IsotopeWrite()

void G4GDMLWriteMaterials::IsotopeWrite ( const G4Isotope * const  isotopePtr)
protectedinherited

Definition at line 103 of file G4GDMLWriteMaterials.cc.

104{
105 const G4String name = GenerateName(isotopePtr->GetName(), isotopePtr);
106
107 xercesc::DOMElement* isotopeElement = NewElement("isotope");
108 isotopeElement->setAttributeNode(NewAttribute("name", name));
109 isotopeElement->setAttributeNode(NewAttribute("N", isotopePtr->GetN()));
110 isotopeElement->setAttributeNode(NewAttribute("Z", isotopePtr->GetZ()));
111 materialsElement->appendChild(isotopeElement);
112 AtomWrite(isotopeElement, isotopePtr->GetA());
113}
G4int GetZ() const
Definition: G4Isotope.hh:90
G4int GetN() const
Definition: G4Isotope.hh:93
G4double GetA() const
Definition: G4Isotope.hh:96

References G4GDMLWriteMaterials::AtomWrite(), G4GDMLWrite::GenerateName(), G4Isotope::GetA(), G4Isotope::GetN(), G4Isotope::GetName(), G4Isotope::GetZ(), G4GDMLWriteMaterials::materialsElement, G4InuclParticleNames::name(), G4GDMLWrite::NewAttribute(), and G4GDMLWrite::NewElement().

Referenced by G4GDMLWriteMaterials::AddIsotope().

◆ MaterialsWrite()

void G4GDMLWriteMaterials::MaterialsWrite ( xercesc::DOMElement *  element)
virtualinherited

Implements G4GDMLWrite.

Definition at line 321 of file G4GDMLWriteMaterials.cc.

322{
323#ifdef G4VERBOSE
324 G4cout << "G4GDML: Writing materials..." << G4endl;
325#endif
326 materialsElement = NewElement("materials");
327 element->appendChild(materialsElement);
328
329 isotopeList.clear();
330 elementList.clear();
331 materialList.clear();
332 propertyList.clear();
333}
std::vector< const G4PhysicsFreeVector * > propertyList

References G4GDMLWriteMaterials::elementList, G4cout, G4endl, G4GDMLWriteMaterials::isotopeList, G4GDMLWriteMaterials::materialList, G4GDMLWriteMaterials::materialsElement, G4GDMLWrite::NewElement(), and G4GDMLWriteMaterials::propertyList.

◆ MaterialWrite()

void G4GDMLWriteMaterials::MaterialWrite ( const G4Material * const  materialPtr)
protectedinherited

Definition at line 152 of file G4GDMLWriteMaterials.cc.

153{
154 G4String state_str("undefined");
155 const G4State state = materialPtr->GetState();
156 if(state == kStateSolid)
157 {
158 state_str = "solid";
159 }
160 else if(state == kStateLiquid)
161 {
162 state_str = "liquid";
163 }
164 else if(state == kStateGas)
165 {
166 state_str = "gas";
167 }
168
169 const G4String name = GenerateName(materialPtr->GetName(), materialPtr);
170
171 xercesc::DOMElement* materialElement = NewElement("material");
172 materialElement->setAttributeNode(NewAttribute("name", name));
173 materialElement->setAttributeNode(NewAttribute("state", state_str));
174
175 // Write any property attached to the material...
176 //
177 if(materialPtr->GetMaterialPropertiesTable())
178 {
179 PropertyWrite(materialElement, materialPtr);
180 }
181
182 if(materialPtr->GetTemperature() != STP_Temperature)
183 {
184 TWrite(materialElement, materialPtr->GetTemperature());
185 }
186
187 if(materialPtr->GetPressure() != STP_Pressure)
188 {
189 PWrite(materialElement, materialPtr->GetPressure());
190 }
191
192 // Write Ionisation potential (mean excitation energy)
193 MEEWrite(materialElement,
194 materialPtr->GetIonisation()->GetMeanExcitationEnergy());
195
196 DWrite(materialElement, materialPtr->GetDensity());
197
198 const std::size_t NumberOfElements = materialPtr->GetNumberOfElements();
199
200 if((NumberOfElements > 1) ||
201 (materialPtr->GetElement(0) != nullptr &&
202 materialPtr->GetElement(0)->GetNumberOfIsotopes() > 1))
203 {
204 const G4double* MassFractionVector = materialPtr->GetFractionVector();
205
206 for(std::size_t i = 0; i < NumberOfElements; ++i)
207 {
208 const G4String fractionref = GenerateName(
209 materialPtr->GetElement(i)->GetName(), materialPtr->GetElement(i));
210 xercesc::DOMElement* fractionElement = NewElement("fraction");
211 fractionElement->setAttributeNode(
212 NewAttribute("n", MassFractionVector[i]));
213 fractionElement->setAttributeNode(NewAttribute("ref", fractionref));
214 materialElement->appendChild(fractionElement);
215 AddElement(materialPtr->GetElement(i));
216 }
217 }
218 else
219 {
220 materialElement->setAttributeNode(NewAttribute("Z", materialPtr->GetZ()));
221 AtomWrite(materialElement, materialPtr->GetA());
222 }
223
224 // Append the material AFTER all the possible components are appended!
225 //
226 materialsElement->appendChild(materialElement);
227}
G4State
Definition: G4Material.hh:111
@ kStateSolid
Definition: G4Material.hh:111
@ kStateLiquid
Definition: G4Material.hh:111
@ kStateGas
Definition: G4Material.hh:111
void TWrite(xercesc::DOMElement *, const G4double &)
void MEEWrite(xercesc::DOMElement *, const G4double &)
void DWrite(xercesc::DOMElement *, const G4double &)
void PWrite(xercesc::DOMElement *, const G4double &)
void AddElement(const G4Element *const)
void PropertyWrite(xercesc::DOMElement *, const G4Material *const)
G4double GetMeanExcitationEnergy() const
G4double GetPressure() const
Definition: G4Material.hh:179
G4double GetDensity() const
Definition: G4Material.hh:176
G4MaterialPropertiesTable * GetMaterialPropertiesTable() const
Definition: G4Material.hh:252
G4State GetState() const
Definition: G4Material.hh:177
G4double GetTemperature() const
Definition: G4Material.hh:178
const G4Element * GetElement(G4int iel) const
Definition: G4Material.hh:198
G4double GetZ() const
Definition: G4Material.cc:736
const G4double * GetFractionVector() const
Definition: G4Material.hh:190
G4IonisParamMat * GetIonisation() const
Definition: G4Material.hh:222
size_t GetNumberOfElements() const
Definition: G4Material.hh:182
G4double GetA() const
Definition: G4Material.cc:750
const G4String & GetName() const
Definition: G4Material.hh:173
float STP_Temperature
Definition: hepunit.py:301
int STP_Pressure
Definition: hepunit.py:302

References G4GDMLWriteMaterials::AddElement(), G4GDMLWriteMaterials::AtomWrite(), G4GDMLWriteMaterials::DWrite(), G4GDMLWrite::GenerateName(), G4Material::GetA(), G4Material::GetDensity(), G4Material::GetElement(), G4Material::GetFractionVector(), G4Material::GetIonisation(), G4Material::GetMaterialPropertiesTable(), G4IonisParamMat::GetMeanExcitationEnergy(), G4Element::GetName(), G4Material::GetName(), G4Material::GetNumberOfElements(), G4Element::GetNumberOfIsotopes(), G4Material::GetPressure(), G4Material::GetState(), G4Material::GetTemperature(), G4Material::GetZ(), kStateGas, kStateLiquid, kStateSolid, G4GDMLWriteMaterials::materialsElement, G4GDMLWriteMaterials::MEEWrite(), G4InuclParticleNames::name(), G4GDMLWrite::NewAttribute(), G4GDMLWrite::NewElement(), G4GDMLWriteMaterials::PropertyWrite(), G4GDMLWriteMaterials::PWrite(), source.hepunit::STP_Pressure, source.hepunit::STP_Temperature, and G4GDMLWriteMaterials::TWrite().

Referenced by G4GDMLWriteMaterials::AddMaterial().

◆ MEEWrite()

void G4GDMLWriteMaterials::MEEWrite ( xercesc::DOMElement *  element,
const G4double MEE 
)
protectedinherited

Definition at line 93 of file G4GDMLWriteMaterials.cc.

95{
96 xercesc::DOMElement* PElement = NewElement("MEE");
97 PElement->setAttributeNode(NewAttribute("unit", "eV"));
98 PElement->setAttributeNode(NewAttribute("value", MEE / electronvolt));
99 element->appendChild(PElement);
100}
static constexpr double electronvolt
Definition: G4SIunits.hh:191

References electronvolt, G4GDMLWrite::NewAttribute(), and G4GDMLWrite::NewElement().

Referenced by G4GDMLWriteMaterials::MaterialWrite().

◆ Modularize()

G4String G4GDMLWrite::Modularize ( const G4VPhysicalVolume *const  topvol,
const G4int  depth 
)
protectedinherited

Definition at line 377 of file G4GDMLWrite.cc.

379{
380 if(PvolumeMap().find(physvol) != PvolumeMap().cend())
381 {
382 return PvolumeMap()[physvol]; // Modularize via physvol
383 }
384
385 if(DepthMap().find(depth) != DepthMap().cend()) // Modularize via depth
386 {
387 std::stringstream stream;
388 stream << "depth" << depth << "_module" << DepthMap()[depth] << ".gdml";
389 DepthMap()[depth]++; // There can be more modules at this depth!
390 return G4String(stream.str());
391 }
392
393 return G4String(""); // Empty string for module name = no modularization
394 // was requested at that level/physvol!
395}

References G4GDMLWrite::DepthMap(), and G4GDMLWrite::PvolumeMap().

Referenced by TraverseVolumeTree().

◆ MultiUnionWrite()

void G4GDMLWriteSolids::MultiUnionWrite ( xercesc::DOMElement *  solElement,
const G4MultiUnion * const  munionSolid 
)
protectedinherited

Definition at line 82 of file G4GDMLWriteSolids.cc.

84{
85 G4int numSolids = munionSolid->GetNumberOfSolids();
86 G4String tag("multiUnion");
87
88 G4VSolid* solid;
90
91 const G4String& name = GenerateName(munionSolid->GetName(), munionSolid);
92 xercesc::DOMElement* multiUnionElement = NewElement(tag);
93 multiUnionElement->setAttributeNode(NewAttribute("name", name));
94
95 for(G4int i = 0; i < numSolids; ++i)
96 {
97 solid = munionSolid->GetSolid(i);
98 transform = munionSolid->GetTransformation(i);
99
100 HepGeom::Rotate3D rot3d;
102 HepGeom::Scale3D scale;
103 transform.getDecomposition(scale, rot3d, transl);
104
106 G4RotationMatrix rotm(CLHEP::HepRep3x3(rot3d.xx(), rot3d.xy(), rot3d.xz(),
107 rot3d.yx(), rot3d.yy(), rot3d.yz(),
108 rot3d.zx(), rot3d.zy(), rot3d.zz()));
109 G4ThreeVector rot = GetAngles(rotm);
110
111 AddSolid(solid);
112 const G4String& solidref = GenerateName(solid->GetName(), solid);
113 std::ostringstream os;
114 os << i + 1;
115 const G4String& nodeName = "Node-" + G4String(os.str());
116 xercesc::DOMElement* solidElement = NewElement("solid");
117 solidElement->setAttributeNode(NewAttribute("ref", solidref));
118 xercesc::DOMElement* multiUnionNodeElement = NewElement("multiUnionNode");
119 multiUnionNodeElement->setAttributeNode(NewAttribute("name", name+"_"+nodeName));
120 multiUnionNodeElement->appendChild(solidElement); // Append solid to node
121 if((std::fabs(pos.x()) > kLinearPrecision) ||
122 (std::fabs(pos.y()) > kLinearPrecision) ||
123 (std::fabs(pos.z()) > kLinearPrecision))
124 {
125 PositionWrite(multiUnionNodeElement,name+"_"+nodeName+"_pos",pos);
126 }
127 if((std::fabs(rot.x()) > kAngularPrecision) ||
128 (std::fabs(rot.y()) > kAngularPrecision) ||
129 (std::fabs(rot.z()) > kAngularPrecision))
130 {
131 RotationWrite(multiUnionNodeElement,name+"_"+nodeName+"_rot",rot);
132 }
133 multiUnionElement->appendChild(multiUnionNodeElement); // Append node
134 }
135
136 solElement->appendChild(multiUnionElement);
137 // Add the multiUnion solid AFTER the constituent nodes!
138}
const G4Transform3D & GetTransformation(G4int index) const
G4int GetNumberOfSolids() const
G4VSolid * GetSolid(G4int index) const
double zz() const
Definition: Transform3D.h:281
double yz() const
Definition: Transform3D.h:272
double xy() const
Definition: Transform3D.h:260
CLHEP::Hep3Vector getTranslation() const
double zx() const
Definition: Transform3D.h:275
double yx() const
Definition: Transform3D.h:266
double zy() const
Definition: Transform3D.h:278
double xx() const
Definition: Transform3D.h:257
double yy() const
Definition: Transform3D.h:269
double xz() const
Definition: Transform3D.h:263
G4bool transform(G4String &input, const G4String &type)

References G4GDMLWriteSolids::AddSolid(), G4GDMLWrite::GenerateName(), G4GDMLWriteDefine::GetAngles(), G4VSolid::GetName(), G4MultiUnion::GetNumberOfSolids(), G4MultiUnion::GetSolid(), G4MultiUnion::GetTransformation(), HepGeom::Transform3D::getTranslation(), G4GDMLWriteDefine::kAngularPrecision, G4GDMLWriteDefine::kLinearPrecision, G4InuclParticleNames::name(), G4GDMLWrite::NewAttribute(), G4GDMLWrite::NewElement(), pos, G4GDMLWriteDefine::PositionWrite(), G4GDMLWriteDefine::RotationWrite(), G4coutFormatters::anonymous_namespace{G4coutFormatters.cc}::transform(), CLHEP::Hep3Vector::x(), HepGeom::Transform3D::xx(), HepGeom::Transform3D::xy(), HepGeom::Transform3D::xz(), CLHEP::Hep3Vector::y(), HepGeom::Transform3D::yx(), HepGeom::Transform3D::yy(), HepGeom::Transform3D::yz(), CLHEP::Hep3Vector::z(), HepGeom::Transform3D::zx(), HepGeom::Transform3D::zy(), and HepGeom::Transform3D::zz().

Referenced by G4GDMLWriteSolids::AddSolid().

◆ NewAttribute() [1/2]

xercesc::DOMAttr * G4GDMLWrite::NewAttribute ( const G4String name,
const G4double value 
)
protectedinherited

Definition at line 171 of file G4GDMLWrite.cc.

173{
174 XMLCh* tempStr = NULL;
175 tempStr = xercesc::XMLString::transcode(name);
176 xercesc::DOMAttr* att = doc->createAttribute(tempStr);
177 xercesc::XMLString::release(&tempStr);
178
179 std::ostringstream ostream;
180 ostream.precision(15);
181 ostream << value;
182 G4String str = ostream.str();
183
184 tempStr = xercesc::XMLString::transcode(str);
185 att->setValue(tempStr);
186 xercesc::XMLString::release(&tempStr);
187
188 return att;
189}
xercesc::DOMDocument * doc
Definition: G4GDMLWrite.hh:132

References G4GDMLWrite::doc, and G4InuclParticleNames::name().

◆ NewAttribute() [2/2]

xercesc::DOMAttr * G4GDMLWrite::NewAttribute ( const G4String name,
const G4String value 
)
protectedinherited

Definition at line 155 of file G4GDMLWrite.cc.

157{
158 XMLCh* tempStr = NULL;
159 tempStr = xercesc::XMLString::transcode(name);
160 xercesc::DOMAttr* att = doc->createAttribute(tempStr);
161 xercesc::XMLString::release(&tempStr);
162
163 tempStr = xercesc::XMLString::transcode(value);
164 att->setValue(tempStr);
165 xercesc::XMLString::release(&tempStr);
166
167 return att;
168}

References G4GDMLWrite::doc, and G4InuclParticleNames::name().

Referenced by G4GDMLWrite::AddAuxInfo(), AssemblyWrite(), G4GDMLWriteMaterials::AtomWrite(), G4GDMLWriteSolids::BooleanWrite(), BorderSurfaceCache(), G4GDMLWriteParamvol::Box_dimensionsWrite(), G4GDMLWriteSolids::BoxWrite(), G4GDMLWriteParamvol::Cone_dimensionsWrite(), G4GDMLWriteSolids::ConeWrite(), G4GDMLWriteSolids::CutTubeWrite(), DivisionvolWrite(), G4GDMLWriteMaterials::DWrite(), G4GDMLWriteSolids::ElconeWrite(), G4GDMLWriteMaterials::ElementWrite(), G4GDMLWriteParamvol::Ellipsoid_dimensionsWrite(), G4GDMLWriteSolids::EllipsoidWrite(), G4GDMLWriteSolids::EltubeWrite(), G4GDMLWriteSolids::GenericPolyconeWrite(), G4GDMLWriteSolids::GenTrapWrite(), G4GDMLWriteParamvol::Hype_dimensionsWrite(), G4GDMLWriteSolids::HypeWrite(), G4GDMLWriteMaterials::IsotopeWrite(), G4GDMLWriteMaterials::MaterialWrite(), G4GDMLWriteMaterials::MEEWrite(), G4GDMLWriteSolids::MultiUnionWrite(), G4GDMLWriteSolids::OpticalSurfaceWrite(), G4GDMLWriteParamvol::Orb_dimensionsWrite(), G4GDMLWriteSolids::OrbWrite(), G4GDMLWriteParamvol::Para_dimensionsWrite(), G4GDMLWriteSolids::ParaboloidWrite(), G4GDMLWriteParamvol::ParametersWrite(), G4GDMLWriteParamvol::ParamvolWrite(), G4GDMLWriteSolids::ParaWrite(), PhysvolWrite(), G4GDMLWriteParamvol::Polycone_dimensionsWrite(), G4GDMLWriteSolids::PolyconeWrite(), G4GDMLWriteParamvol::Polyhedra_dimensionsWrite(), G4GDMLWriteSolids::PolyhedraWrite(), G4GDMLWriteDefine::Position_vectorWrite(), G4GDMLWriteMaterials::PropertyConstWrite(), G4GDMLWriteMaterials::PropertyVectorWrite(), G4GDMLWriteMaterials::PropertyWrite(), G4GDMLWriteSolids::PropertyWrite(), G4GDMLWriteMaterials::PWrite(), ReplicavolWrite(), G4GDMLWriteDefine::Rotation_vectorWrite(), G4GDMLWriteSolids::RZPointWrite(), G4GDMLWriteDefine::Scale_vectorWrite(), G4GDMLWriteSolids::ScaledWrite(), G4GDMLWriteSetup::SetupWrite(), SkinSurfaceCache(), G4GDMLWriteParamvol::Sphere_dimensionsWrite(), G4GDMLWriteSolids::SphereWrite(), G4GDMLWriteSolids::TessellatedWrite(), G4GDMLWriteSolids::TetWrite(), G4GDMLWriteParamvol::Torus_dimensionsWrite(), G4GDMLWriteSolids::TorusWrite(), G4GDMLWriteParamvol::Trap_dimensionsWrite(), G4GDMLWriteSolids::TrapWrite(), TraverseVolumeTree(), G4GDMLWriteParamvol::Trd_dimensionsWrite(), G4GDMLWriteSolids::TrdWrite(), G4GDMLWriteParamvol::Tube_dimensionsWrite(), G4GDMLWriteSolids::TubeWrite(), G4GDMLWriteSolids::TwistedboxWrite(), G4GDMLWriteSolids::TwistedtrapWrite(), G4GDMLWriteSolids::TwistedtrdWrite(), G4GDMLWriteSolids::TwistedtubsWrite(), G4GDMLWriteMaterials::TWrite(), G4GDMLWrite::Write(), G4GDMLWriteSolids::XtruWrite(), and G4GDMLWriteSolids::ZplaneWrite().

◆ NewElement()

xercesc::DOMElement * G4GDMLWrite::NewElement ( const G4String name)
protectedinherited

Definition at line 192 of file G4GDMLWrite.cc.

193{
194 XMLCh* tempStr = NULL;
195 tempStr = xercesc::XMLString::transcode(name);
196 xercesc::DOMElement* elem = doc->createElement(tempStr);
197 xercesc::XMLString::release(&tempStr);
198
199 return elem;
200}
#define elem(i, j)

References G4GDMLWrite::doc, elem, and G4InuclParticleNames::name().

Referenced by G4GDMLWrite::AddAuxInfo(), AssemblyWrite(), G4GDMLWriteMaterials::AtomWrite(), G4GDMLWriteSolids::BooleanWrite(), BorderSurfaceCache(), G4GDMLWriteParamvol::Box_dimensionsWrite(), G4GDMLWriteSolids::BoxWrite(), G4GDMLWriteParamvol::Cone_dimensionsWrite(), G4GDMLWriteSolids::ConeWrite(), G4GDMLWriteSolids::CutTubeWrite(), G4GDMLWriteDefine::DefineWrite(), DivisionvolWrite(), G4GDMLWriteMaterials::DWrite(), G4GDMLWriteSolids::ElconeWrite(), G4GDMLWriteMaterials::ElementWrite(), G4GDMLWriteParamvol::Ellipsoid_dimensionsWrite(), G4GDMLWriteSolids::EllipsoidWrite(), G4GDMLWriteSolids::EltubeWrite(), G4GDMLWriteSolids::GenericPolyconeWrite(), G4GDMLWriteSolids::GenTrapWrite(), G4GDMLWriteParamvol::Hype_dimensionsWrite(), G4GDMLWriteSolids::HypeWrite(), G4GDMLWriteMaterials::IsotopeWrite(), G4GDMLWriteMaterials::MaterialsWrite(), G4GDMLWriteMaterials::MaterialWrite(), G4GDMLWriteMaterials::MEEWrite(), G4GDMLWriteSolids::MultiUnionWrite(), G4GDMLWriteSolids::OpticalSurfaceWrite(), G4GDMLWriteParamvol::Orb_dimensionsWrite(), G4GDMLWriteSolids::OrbWrite(), G4GDMLWriteParamvol::Para_dimensionsWrite(), G4GDMLWriteSolids::ParaboloidWrite(), G4GDMLWriteParamvol::ParametersWrite(), G4GDMLWriteParamvol::ParamvolWrite(), G4GDMLWriteSolids::ParaWrite(), PhysvolWrite(), G4GDMLWriteParamvol::Polycone_dimensionsWrite(), G4GDMLWriteSolids::PolyconeWrite(), G4GDMLWriteParamvol::Polyhedra_dimensionsWrite(), G4GDMLWriteSolids::PolyhedraWrite(), G4GDMLWriteDefine::Position_vectorWrite(), G4GDMLWriteMaterials::PropertyConstWrite(), G4GDMLWriteMaterials::PropertyVectorWrite(), G4GDMLWriteMaterials::PropertyWrite(), G4GDMLWriteSolids::PropertyWrite(), G4GDMLWriteMaterials::PWrite(), ReplicavolWrite(), G4GDMLWriteDefine::Rotation_vectorWrite(), G4GDMLWriteSolids::RZPointWrite(), G4GDMLWriteDefine::Scale_vectorWrite(), G4GDMLWriteSolids::ScaledWrite(), G4GDMLWriteSetup::SetupWrite(), SkinSurfaceCache(), G4GDMLWriteSolids::SolidsWrite(), G4GDMLWriteParamvol::Sphere_dimensionsWrite(), G4GDMLWriteSolids::SphereWrite(), StructureWrite(), G4GDMLWriteSolids::TessellatedWrite(), G4GDMLWriteSolids::TetWrite(), G4GDMLWriteParamvol::Torus_dimensionsWrite(), G4GDMLWriteSolids::TorusWrite(), G4GDMLWriteParamvol::Trap_dimensionsWrite(), G4GDMLWriteSolids::TrapWrite(), TraverseVolumeTree(), G4GDMLWriteParamvol::Trd_dimensionsWrite(), G4GDMLWriteSolids::TrdWrite(), G4GDMLWriteParamvol::Tube_dimensionsWrite(), G4GDMLWriteSolids::TubeWrite(), G4GDMLWriteSolids::TwistedboxWrite(), G4GDMLWriteSolids::TwistedtrapWrite(), G4GDMLWriteSolids::TwistedtrdWrite(), G4GDMLWriteSolids::TwistedtubsWrite(), G4GDMLWriteMaterials::TWrite(), G4GDMLWrite::UserinfoWrite(), G4GDMLWriteSolids::XtruWrite(), and G4GDMLWriteSolids::ZplaneWrite().

◆ OpticalSurfaceWrite()

void G4GDMLWriteSolids::OpticalSurfaceWrite ( xercesc::DOMElement *  solElement,
const G4OpticalSurface * const  surf 
)
protectedinherited

Definition at line 1058 of file G4GDMLWriteSolids.cc.

1060{
1061 xercesc::DOMElement* optElement = NewElement("opticalsurface");
1062 G4OpticalSurfaceModel smodel = surf->GetModel();
1063 G4double sval =
1064 (smodel == glisur) ? surf->GetPolish() : surf->GetSigmaAlpha();
1065 const G4String& name = GenerateName(surf->GetName(), surf);
1066
1067 optElement->setAttributeNode(NewAttribute("name", name));
1068 optElement->setAttributeNode(NewAttribute("model", smodel));
1069 optElement->setAttributeNode(NewAttribute("finish", surf->GetFinish()));
1070 optElement->setAttributeNode(NewAttribute("type", surf->GetType()));
1071 optElement->setAttributeNode(NewAttribute("value", sval));
1072
1073 // Write any property attached to the optical surface...
1074 //
1075 if(surf->GetMaterialPropertiesTable())
1076 {
1077 PropertyWrite(optElement, surf);
1078 }
1079
1080 solElement->appendChild(optElement);
1081}
G4OpticalSurfaceModel
@ glisur
void PropertyWrite(xercesc::DOMElement *, const G4OpticalSurface *const)
G4OpticalSurfaceModel GetModel() const
G4double GetSigmaAlpha() const
G4OpticalSurfaceFinish GetFinish() const
G4double GetPolish() const
G4MaterialPropertiesTable * GetMaterialPropertiesTable() const
const G4SurfaceType & GetType() const

References G4GDMLWrite::GenerateName(), G4OpticalSurface::GetFinish(), G4OpticalSurface::GetMaterialPropertiesTable(), G4OpticalSurface::GetModel(), G4SurfaceProperty::GetName(), G4OpticalSurface::GetPolish(), G4OpticalSurface::GetSigmaAlpha(), G4SurfaceProperty::GetType(), glisur, G4InuclParticleNames::name(), G4GDMLWrite::NewAttribute(), G4GDMLWrite::NewElement(), and G4GDMLWriteSolids::PropertyWrite().

Referenced by BorderSurfaceCache(), and SkinSurfaceCache().

◆ Orb_dimensionsWrite()

void G4GDMLWriteParamvol::Orb_dimensionsWrite ( xercesc::DOMElement *  parametersElement,
const G4Orb * const  orb 
)
protectedinherited

Definition at line 204 of file G4GDMLWriteParamvol.cc.

206{
207 xercesc::DOMElement* orb_dimensionsElement = NewElement("orb_dimensions");
208 orb_dimensionsElement->setAttributeNode(
209 NewAttribute("r", orb->GetRadius() / mm));
210 orb_dimensionsElement->setAttributeNode(NewAttribute("lunit", "mm"));
211 parametersElement->appendChild(orb_dimensionsElement);
212}
G4double GetRadius() const

References G4Orb::GetRadius(), mm, G4GDMLWrite::NewAttribute(), and G4GDMLWrite::NewElement().

Referenced by G4GDMLWriteParamvol::ParametersWrite().

◆ OrbWrite()

void G4GDMLWriteSolids::OrbWrite ( xercesc::DOMElement *  solElement,
const G4Orb * const  orb 
)
protectedinherited

Definition at line 461 of file G4GDMLWriteSolids.cc.

463{
464 const G4String& name = GenerateName(orb->GetName(), orb);
465
466 xercesc::DOMElement* orbElement = NewElement("orb");
467 orbElement->setAttributeNode(NewAttribute("name", name));
468 orbElement->setAttributeNode(NewAttribute("r", orb->GetRadius() / mm));
469 orbElement->setAttributeNode(NewAttribute("lunit", "mm"));
470 solElement->appendChild(orbElement);
471}

References G4GDMLWrite::GenerateName(), G4VSolid::GetName(), G4Orb::GetRadius(), mm, G4InuclParticleNames::name(), G4GDMLWrite::NewAttribute(), and G4GDMLWrite::NewElement().

Referenced by G4GDMLWriteSolids::AddSolid().

◆ Para_dimensionsWrite()

void G4GDMLWriteParamvol::Para_dimensionsWrite ( xercesc::DOMElement *  parametersElement,
const G4Para * const  para 
)
protectedinherited

Definition at line 255 of file G4GDMLWriteParamvol.cc.

257{
258 const G4ThreeVector simaxis = para->GetSymAxis();
259
260 const G4double alpha = std::atan(para->GetTanAlpha());
261 const G4double theta = std::acos(simaxis.z());
262 const G4double phi =
263 (simaxis.z() != 1.0) ? (std::atan(simaxis.y() / simaxis.x())) : (0.0);
264
265 xercesc::DOMElement* para_dimensionsElement = NewElement("para_dimensions");
266 para_dimensionsElement->setAttributeNode(
267 NewAttribute("x", 2.0 * para->GetXHalfLength() / mm));
268 para_dimensionsElement->setAttributeNode(
269 NewAttribute("y", 2.0 * para->GetYHalfLength() / mm));
270 para_dimensionsElement->setAttributeNode(
271 NewAttribute("z", 2.0 * para->GetZHalfLength() / mm));
272 para_dimensionsElement->setAttributeNode(
273 NewAttribute("alpha", alpha / degree));
274 para_dimensionsElement->setAttributeNode(
275 NewAttribute("theta", theta / degree));
276 para_dimensionsElement->setAttributeNode(NewAttribute("phi", phi / degree));
277 para_dimensionsElement->setAttributeNode(NewAttribute("aunit", "deg"));
278 para_dimensionsElement->setAttributeNode(NewAttribute("lunit", "mm"));
279 parametersElement->appendChild(para_dimensionsElement);
280}
static const G4double alpha
G4double GetTanAlpha() const
G4ThreeVector GetSymAxis() const
G4double GetYHalfLength() const
G4double GetZHalfLength() const
G4double GetXHalfLength() const

References alpha, degree, G4Para::GetSymAxis(), G4Para::GetTanAlpha(), G4Para::GetXHalfLength(), G4Para::GetYHalfLength(), G4Para::GetZHalfLength(), mm, G4GDMLWrite::NewAttribute(), G4GDMLWrite::NewElement(), CLHEP::Hep3Vector::x(), CLHEP::Hep3Vector::y(), and CLHEP::Hep3Vector::z().

Referenced by G4GDMLWriteParamvol::ParametersWrite().

◆ ParaboloidWrite()

void G4GDMLWriteSolids::ParaboloidWrite ( xercesc::DOMElement *  solElement,
const G4Paraboloid * const  paraboloid 
)
protectedinherited

Definition at line 501 of file G4GDMLWriteSolids.cc.

503{
504 const G4String& name = GenerateName(paraboloid->GetName(), paraboloid);
505
506 xercesc::DOMElement* paraboloidElement = NewElement("paraboloid");
507 paraboloidElement->setAttributeNode(NewAttribute("name", name));
508 paraboloidElement->setAttributeNode(
509 NewAttribute("rlo", paraboloid->GetRadiusMinusZ() / mm));
510 paraboloidElement->setAttributeNode(
511 NewAttribute("rhi", paraboloid->GetRadiusPlusZ() / mm));
512 paraboloidElement->setAttributeNode(
513 NewAttribute("dz", paraboloid->GetZHalfLength() / mm));
514 paraboloidElement->setAttributeNode(NewAttribute("lunit", "mm"));
515 solElement->appendChild(paraboloidElement);
516}
G4double GetRadiusPlusZ() const
G4double GetRadiusMinusZ() const
G4double GetZHalfLength() const

References G4GDMLWrite::GenerateName(), G4VSolid::GetName(), G4Paraboloid::GetRadiusMinusZ(), G4Paraboloid::GetRadiusPlusZ(), G4Paraboloid::GetZHalfLength(), mm, G4InuclParticleNames::name(), G4GDMLWrite::NewAttribute(), and G4GDMLWrite::NewElement().

Referenced by G4GDMLWriteSolids::AddSolid().

◆ ParametersWrite()

void G4GDMLWriteParamvol::ParametersWrite ( xercesc::DOMElement *  paramvolElement,
const G4VPhysicalVolume * const  paramvol,
const G4int index 
)
protectedinherited

Definition at line 363 of file G4GDMLWriteParamvol.cc.

365{
367 index, const_cast<G4VPhysicalVolume*>(paramvol));
368 G4ThreeVector Angles;
369 G4String name = GenerateName(paramvol->GetName(), paramvol);
370 std::stringstream os;
371 os.precision(15);
372 os << index;
373 G4String sncopie = os.str();
374
375 xercesc::DOMElement* parametersElement = NewElement("parameters");
376 parametersElement->setAttributeNode(NewAttribute("number", index + 1));
377
378 PositionWrite(parametersElement, name + sncopie + "_pos",
379 paramvol->GetObjectTranslation());
380 Angles = GetAngles(paramvol->GetObjectRotationValue());
381 if(Angles.mag2() > DBL_EPSILON)
382 {
383 RotationWrite(parametersElement, name + sncopie + "_rot",
384 GetAngles(paramvol->GetObjectRotationValue()));
385 }
386 paramvolElement->appendChild(parametersElement);
387
388 G4VSolid* solid = paramvol->GetLogicalVolume()->GetSolid();
389
390 if(G4Box* box = dynamic_cast<G4Box*>(solid))
391 {
393 *box, index, const_cast<G4VPhysicalVolume*>(paramvol));
394 Box_dimensionsWrite(parametersElement, box);
395 }
396 else if(G4Trd* trd = dynamic_cast<G4Trd*>(solid))
397 {
399 *trd, index, const_cast<G4VPhysicalVolume*>(paramvol));
400 Trd_dimensionsWrite(parametersElement, trd);
401 }
402 else if(G4Trap* trap = dynamic_cast<G4Trap*>(solid))
403 {
405 *trap, index, const_cast<G4VPhysicalVolume*>(paramvol));
406 Trap_dimensionsWrite(parametersElement, trap);
407 }
408 else if(G4Tubs* tube = dynamic_cast<G4Tubs*>(solid))
409 {
411 *tube, index, const_cast<G4VPhysicalVolume*>(paramvol));
412 Tube_dimensionsWrite(parametersElement, tube);
413 }
414 else if(G4Cons* cone = dynamic_cast<G4Cons*>(solid))
415 {
417 *cone, index, const_cast<G4VPhysicalVolume*>(paramvol));
418 Cone_dimensionsWrite(parametersElement, cone);
419 }
420 else if(G4Sphere* sphere = dynamic_cast<G4Sphere*>(solid))
421 {
423 *sphere, index, const_cast<G4VPhysicalVolume*>(paramvol));
424 Sphere_dimensionsWrite(parametersElement, sphere);
425 }
426 else if(G4Orb* orb = dynamic_cast<G4Orb*>(solid))
427 {
429 *orb, index, const_cast<G4VPhysicalVolume*>(paramvol));
430 Orb_dimensionsWrite(parametersElement, orb);
431 }
432 else if(G4Torus* torus = dynamic_cast<G4Torus*>(solid))
433 {
435 *torus, index, const_cast<G4VPhysicalVolume*>(paramvol));
436 Torus_dimensionsWrite(parametersElement, torus);
437 }
438 else if(G4Ellipsoid* ellipsoid = dynamic_cast<G4Ellipsoid*>(solid))
439 {
441 *ellipsoid, index, const_cast<G4VPhysicalVolume*>(paramvol));
442 Ellipsoid_dimensionsWrite(parametersElement, ellipsoid);
443 }
444 else if(G4Para* para = dynamic_cast<G4Para*>(solid))
445 {
447 *para, index, const_cast<G4VPhysicalVolume*>(paramvol));
448 Para_dimensionsWrite(parametersElement, para);
449 }
450 else if(G4Hype* hype = dynamic_cast<G4Hype*>(solid))
451 {
453 *hype, index, const_cast<G4VPhysicalVolume*>(paramvol));
454 Hype_dimensionsWrite(parametersElement, hype);
455 }
456 else if(G4Polycone* pcone = dynamic_cast<G4Polycone*>(solid))
457 {
459 *pcone, index, const_cast<G4VPhysicalVolume*>(paramvol));
460 Polycone_dimensionsWrite(parametersElement, pcone);
461 }
462 else if(G4Polyhedra* polyhedra = dynamic_cast<G4Polyhedra*>(solid))
463 {
465 *polyhedra, index, const_cast<G4VPhysicalVolume*>(paramvol));
466 Polyhedra_dimensionsWrite(parametersElement, polyhedra);
467 }
468 else
469 {
470 G4String error_msg = "Solid '" + solid->GetName() +
471 "' cannot be used in parameterised volume!";
472 G4Exception("G4GDMLWriteParamvol::ParametersWrite()", "InvalidSetup",
473 FatalException, error_msg);
474 }
475}
double mag2() const
void Tube_dimensionsWrite(xercesc::DOMElement *, const G4Tubs *const)
void Orb_dimensionsWrite(xercesc::DOMElement *, const G4Orb *const)
void Trap_dimensionsWrite(xercesc::DOMElement *, const G4Trap *const)
void Polycone_dimensionsWrite(xercesc::DOMElement *, const G4Polycone *const)
void Hype_dimensionsWrite(xercesc::DOMElement *, const G4Hype *const)
void Ellipsoid_dimensionsWrite(xercesc::DOMElement *, const G4Ellipsoid *const)
void Polyhedra_dimensionsWrite(xercesc::DOMElement *, const G4Polyhedra *const)
void Trd_dimensionsWrite(xercesc::DOMElement *, const G4Trd *const)
void Box_dimensionsWrite(xercesc::DOMElement *, const G4Box *const)
void Cone_dimensionsWrite(xercesc::DOMElement *, const G4Cons *const)
void Sphere_dimensionsWrite(xercesc::DOMElement *, const G4Sphere *const)
void Para_dimensionsWrite(xercesc::DOMElement *, const G4Para *const)
void Torus_dimensionsWrite(xercesc::DOMElement *, const G4Torus *const)
G4VSolid * GetSolid() const
virtual void ComputeTransformation(const G4int, G4VPhysicalVolume *) const =0
virtual void ComputeDimensions(G4Box &, const G4int, const G4VPhysicalVolume *) const
G4RotationMatrix GetObjectRotationValue() const
virtual G4VPVParameterisation * GetParameterisation() const =0
G4ThreeVector GetObjectTranslation() const
#define DBL_EPSILON
Definition: templates.hh:66

References G4GDMLWriteParamvol::Box_dimensionsWrite(), G4VPVParameterisation::ComputeDimensions(), G4VPVParameterisation::ComputeTransformation(), G4GDMLWriteParamvol::Cone_dimensionsWrite(), DBL_EPSILON, G4GDMLWriteParamvol::Ellipsoid_dimensionsWrite(), FatalException, G4Exception(), G4GDMLWrite::GenerateName(), G4GDMLWriteDefine::GetAngles(), G4VPhysicalVolume::GetLogicalVolume(), G4VPhysicalVolume::GetName(), G4VSolid::GetName(), G4VPhysicalVolume::GetObjectRotationValue(), G4VPhysicalVolume::GetObjectTranslation(), G4VPhysicalVolume::GetParameterisation(), G4LogicalVolume::GetSolid(), G4GDMLWriteParamvol::Hype_dimensionsWrite(), CLHEP::Hep3Vector::mag2(), G4InuclParticleNames::name(), G4GDMLWrite::NewAttribute(), G4GDMLWrite::NewElement(), G4GDMLWriteParamvol::Orb_dimensionsWrite(), G4GDMLWriteParamvol::Para_dimensionsWrite(), G4GDMLWriteParamvol::Polycone_dimensionsWrite(), G4GDMLWriteParamvol::Polyhedra_dimensionsWrite(), G4GDMLWriteDefine::PositionWrite(), G4GDMLWriteDefine::RotationWrite(), G4GDMLWriteParamvol::Sphere_dimensionsWrite(), G4GDMLWriteParamvol::Torus_dimensionsWrite(), G4GDMLWriteParamvol::Trap_dimensionsWrite(), G4GDMLWriteParamvol::Trd_dimensionsWrite(), and G4GDMLWriteParamvol::Tube_dimensionsWrite().

Referenced by G4GDMLWriteParamvol::ParamvolAlgorithmWrite().

◆ ParamvolAlgorithmWrite()

void G4GDMLWriteParamvol::ParamvolAlgorithmWrite ( xercesc::DOMElement *  paramvolElement,
const G4VPhysicalVolume *const  paramvol 
)
virtualinherited

Definition at line 498 of file G4GDMLWriteParamvol.cc.

500{
501 const G4String volumeref = GenerateName(
502 paramvol->GetLogicalVolume()->GetName(), paramvol->GetLogicalVolume());
503
504 const G4int parameterCount = paramvol->GetMultiplicity();
505
506 for(G4int i = 0; i < parameterCount; ++i)
507 {
508 ParametersWrite(paramvolElement, paramvol, i);
509 }
510}
void ParametersWrite(xercesc::DOMElement *, const G4VPhysicalVolume *const, const G4int &)
virtual G4int GetMultiplicity() const

References G4GDMLWrite::GenerateName(), G4VPhysicalVolume::GetLogicalVolume(), G4VPhysicalVolume::GetMultiplicity(), G4LogicalVolume::GetName(), and G4GDMLWriteParamvol::ParametersWrite().

Referenced by G4GDMLWriteParamvol::ParamvolWrite().

◆ ParamvolWrite()

void G4GDMLWriteParamvol::ParamvolWrite ( xercesc::DOMElement *  volumeElement,
const G4VPhysicalVolume * const  paramvol 
)
virtualinherited

Definition at line 478 of file G4GDMLWriteParamvol.cc.

480{
481 const G4String volumeref = GenerateName(
482 paramvol->GetLogicalVolume()->GetName(), paramvol->GetLogicalVolume());
483 xercesc::DOMElement* paramvolElement = NewElement("paramvol");
484 paramvolElement->setAttributeNode(
485 NewAttribute("ncopies", paramvol->GetMultiplicity()));
486 xercesc::DOMElement* volumerefElement = NewElement("volumeref");
487 volumerefElement->setAttributeNode(NewAttribute("ref", volumeref));
488
489 xercesc::DOMElement* algorithmElement =
490 NewElement("parameterised_position_size");
491 paramvolElement->appendChild(volumerefElement);
492 paramvolElement->appendChild(algorithmElement);
493 ParamvolAlgorithmWrite(algorithmElement, paramvol);
494 volumeElement->appendChild(paramvolElement);
495}
virtual void ParamvolAlgorithmWrite(xercesc::DOMElement *paramvolElement, const G4VPhysicalVolume *const paramvol)

References G4GDMLWrite::GenerateName(), G4VPhysicalVolume::GetLogicalVolume(), G4VPhysicalVolume::GetMultiplicity(), G4LogicalVolume::GetName(), G4GDMLWrite::NewAttribute(), G4GDMLWrite::NewElement(), and G4GDMLWriteParamvol::ParamvolAlgorithmWrite().

Referenced by TraverseVolumeTree().

◆ ParaWrite()

void G4GDMLWriteSolids::ParaWrite ( xercesc::DOMElement *  solElement,
const G4Para * const  para 
)
protectedinherited

Definition at line 474 of file G4GDMLWriteSolids.cc.

476{
477 const G4String& name = GenerateName(para->GetName(), para);
478
479 const G4ThreeVector simaxis = para->GetSymAxis();
480 const G4double alpha = std::atan(para->GetTanAlpha());
481 const G4double phi = simaxis.phi();
482 const G4double theta = simaxis.theta();
483
484 xercesc::DOMElement* paraElement = NewElement("para");
485 paraElement->setAttributeNode(NewAttribute("name", name));
486 paraElement->setAttributeNode(
487 NewAttribute("x", 2.0 * para->GetXHalfLength() / mm));
488 paraElement->setAttributeNode(
489 NewAttribute("y", 2.0 * para->GetYHalfLength() / mm));
490 paraElement->setAttributeNode(
491 NewAttribute("z", 2.0 * para->GetZHalfLength() / mm));
492 paraElement->setAttributeNode(NewAttribute("alpha", alpha / degree));
493 paraElement->setAttributeNode(NewAttribute("theta", theta / degree));
494 paraElement->setAttributeNode(NewAttribute("phi", phi / degree));
495 paraElement->setAttributeNode(NewAttribute("aunit", "deg"));
496 paraElement->setAttributeNode(NewAttribute("lunit", "mm"));
497 solElement->appendChild(paraElement);
498}
double phi() const
double theta() const

References alpha, degree, G4GDMLWrite::GenerateName(), G4VSolid::GetName(), G4Para::GetSymAxis(), G4Para::GetTanAlpha(), G4Para::GetXHalfLength(), G4Para::GetYHalfLength(), G4Para::GetZHalfLength(), mm, G4InuclParticleNames::name(), G4GDMLWrite::NewAttribute(), G4GDMLWrite::NewElement(), CLHEP::Hep3Vector::phi(), and CLHEP::Hep3Vector::theta().

Referenced by G4GDMLWriteSolids::AddSolid().

◆ PhysvolWrite()

void G4GDMLWriteStructure::PhysvolWrite ( xercesc::DOMElement *  volumeElement,
const G4VPhysicalVolume *const  topVol,
const G4Transform3D transform,
const G4String moduleName 
)
protected

Definition at line 128 of file G4GDMLWriteStructure.cc.

132{
133 HepGeom::Scale3D scale;
134 HepGeom::Rotate3D rotate;
135 HepGeom::Translate3D translate;
136
137 T.getDecomposition(scale, rotate, translate);
138
139 const G4ThreeVector scl(scale(0, 0), scale(1, 1), scale(2, 2));
140 const G4ThreeVector rot = GetAngles(rotate.getRotation());
141 const G4ThreeVector pos = T.getTranslation();
142
143 const G4String name = GenerateName(physvol->GetName(), physvol);
144 const G4int copynumber = physvol->GetCopyNo();
145
146 xercesc::DOMElement* physvolElement = NewElement("physvol");
147 physvolElement->setAttributeNode(NewAttribute("name", name));
148 if(copynumber)
149 {
150 physvolElement->setAttributeNode(NewAttribute("copynumber", copynumber));
151 }
152
153 volumeElement->appendChild(physvolElement);
154
155 G4LogicalVolume* lv;
156 // Is it reflected?
157 if(reflFactory->IsReflected(physvol->GetLogicalVolume()))
158 {
159 lv = reflFactory->GetConstituentLV(physvol->GetLogicalVolume());
160 }
161 else
162 {
163 lv = physvol->GetLogicalVolume();
164 }
165
166 const G4String volumeref = GenerateName(lv->GetName(), lv);
167
168 if(ModuleName.empty())
169 {
170 xercesc::DOMElement* volumerefElement = NewElement("volumeref");
171 volumerefElement->setAttributeNode(NewAttribute("ref", volumeref));
172 physvolElement->appendChild(volumerefElement);
173 }
174 else
175 {
176 xercesc::DOMElement* fileElement = NewElement("file");
177 fileElement->setAttributeNode(NewAttribute("name", ModuleName));
178 fileElement->setAttributeNode(NewAttribute("volname", volumeref));
179 physvolElement->appendChild(fileElement);
180 }
181
182 if(std::fabs(pos.x()) > kLinearPrecision ||
183 std::fabs(pos.y()) > kLinearPrecision ||
184 std::fabs(pos.z()) > kLinearPrecision)
185 {
186 PositionWrite(physvolElement, name + "_pos", pos);
187 }
188 if(std::fabs(rot.x()) > kAngularPrecision ||
189 std::fabs(rot.y()) > kAngularPrecision ||
190 std::fabs(rot.z()) > kAngularPrecision)
191 {
192 RotationWrite(physvolElement, name + "_rot", rot);
193 }
194 if(std::fabs(scl.x() - 1.0) > kRelativePrecision ||
195 std::fabs(scl.y() - 1.0) > kRelativePrecision ||
196 std::fabs(scl.z() - 1.0) > kRelativePrecision)
197 {
198 ScaleWrite(physvolElement, name + "_scl", scl);
199 }
200}
void ScaleWrite(xercesc::DOMElement *element, const G4String &name, const G4ThreeVector &scl)
static const G4double kRelativePrecision
G4bool IsReflected(G4LogicalVolume *lv) const
G4LogicalVolume * GetConstituentLV(G4LogicalVolume *reflLV) const
CLHEP::HepRotation getRotation() const
void getDecomposition(Scale3D &scale, Rotate3D &rotation, Translate3D &translation) const
Definition: Transform3D.cc:173

References G4GDMLWrite::GenerateName(), G4GDMLWriteDefine::GetAngles(), G4ReflectionFactory::GetConstituentLV(), G4VPhysicalVolume::GetCopyNo(), HepGeom::Transform3D::getDecomposition(), G4VPhysicalVolume::GetLogicalVolume(), G4LogicalVolume::GetName(), G4VPhysicalVolume::GetName(), HepGeom::Transform3D::getRotation(), HepGeom::Transform3D::getTranslation(), G4ReflectionFactory::IsReflected(), G4GDMLWriteDefine::kAngularPrecision, G4GDMLWriteDefine::kLinearPrecision, G4GDMLWriteDefine::kRelativePrecision, G4InuclParticleNames::name(), G4GDMLWrite::NewAttribute(), G4GDMLWrite::NewElement(), pos, G4GDMLWriteDefine::PositionWrite(), reflFactory, G4GDMLWriteDefine::RotationWrite(), G4GDMLWriteDefine::ScaleWrite(), CLHEP::Hep3Vector::x(), CLHEP::Hep3Vector::y(), and CLHEP::Hep3Vector::z().

Referenced by TraverseVolumeTree().

◆ Polycone_dimensionsWrite()

void G4GDMLWriteParamvol::Polycone_dimensionsWrite ( xercesc::DOMElement *  parametersElement,
const G4Polycone * const  pcone 
)
protectedinherited

Definition at line 303 of file G4GDMLWriteParamvol.cc.

305{
306 xercesc::DOMElement* pcone_dimensionsElement =
307 NewElement("polycone_dimensions");
308
309 pcone_dimensionsElement->setAttributeNode(
311 pcone_dimensionsElement->setAttributeNode(NewAttribute(
312 "startPhi", pcone->GetOriginalParameters()->Start_angle / degree));
313 pcone_dimensionsElement->setAttributeNode(NewAttribute(
314 "openPhi", pcone->GetOriginalParameters()->Opening_angle / degree));
315 pcone_dimensionsElement->setAttributeNode(NewAttribute("aunit", "deg"));
316 pcone_dimensionsElement->setAttributeNode(NewAttribute("lunit", "mm"));
317
318 parametersElement->appendChild(pcone_dimensionsElement);
319 const size_t num_zplanes = pcone->GetOriginalParameters()->Num_z_planes;
320 const G4double* z_array = pcone->GetOriginalParameters()->Z_values;
321 const G4double* rmin_array = pcone->GetOriginalParameters()->Rmin;
322 const G4double* rmax_array = pcone->GetOriginalParameters()->Rmax;
323
324 for(std::size_t i = 0; i < num_zplanes; ++i)
325 {
326 ZplaneWrite(pcone_dimensionsElement, z_array[i], rmin_array[i],
327 rmax_array[i]);
328 }
329}
void ZplaneWrite(xercesc::DOMElement *, const G4double &, const G4double &, const G4double &)
G4PolyconeHistorical * GetOriginalParameters() const

References degree, G4Polycone::GetOriginalParameters(), G4GDMLWrite::NewAttribute(), G4GDMLWrite::NewElement(), G4PolyconeHistorical::Num_z_planes, G4PolyconeHistorical::Opening_angle, G4PolyconeHistorical::Rmax, G4PolyconeHistorical::Rmin, G4PolyconeHistorical::Start_angle, G4PolyconeHistorical::Z_values, and G4GDMLWriteSolids::ZplaneWrite().

Referenced by G4GDMLWriteParamvol::ParametersWrite().

◆ PolyconeWrite()

void G4GDMLWriteSolids::PolyconeWrite ( xercesc::DOMElement *  solElement,
const G4Polycone * const  polycone 
)
protectedinherited

Definition at line 519 of file G4GDMLWriteSolids.cc.

521{
522 const G4String& name = GenerateName(polycone->GetName(), polycone);
523
524 xercesc::DOMElement* polyconeElement = NewElement("polycone");
525 polyconeElement->setAttributeNode(NewAttribute("name", name));
526 polyconeElement->setAttributeNode(NewAttribute(
527 "startphi", polycone->GetOriginalParameters()->Start_angle / degree));
528 polyconeElement->setAttributeNode(NewAttribute(
529 "deltaphi", polycone->GetOriginalParameters()->Opening_angle / degree));
530 polyconeElement->setAttributeNode(NewAttribute("aunit", "deg"));
531 polyconeElement->setAttributeNode(NewAttribute("lunit", "mm"));
532 solElement->appendChild(polyconeElement);
533
534 const std::size_t num_zplanes
535 = polycone->GetOriginalParameters()->Num_z_planes;
536 const G4double* z_array = polycone->GetOriginalParameters()->Z_values;
537 const G4double* rmin_array = polycone->GetOriginalParameters()->Rmin;
538 const G4double* rmax_array = polycone->GetOriginalParameters()->Rmax;
539
540 for(std::size_t i = 0; i < num_zplanes; ++i)
541 {
542 ZplaneWrite(polyconeElement, z_array[i], rmin_array[i], rmax_array[i]);
543 }
544}

References degree, G4GDMLWrite::GenerateName(), G4VSolid::GetName(), G4Polycone::GetOriginalParameters(), G4InuclParticleNames::name(), G4GDMLWrite::NewAttribute(), G4GDMLWrite::NewElement(), G4PolyconeHistorical::Num_z_planes, G4PolyconeHistorical::Opening_angle, G4PolyconeHistorical::Rmax, G4PolyconeHistorical::Rmin, G4PolyconeHistorical::Start_angle, G4PolyconeHistorical::Z_values, and G4GDMLWriteSolids::ZplaneWrite().

Referenced by G4GDMLWriteSolids::AddSolid().

◆ Polyhedra_dimensionsWrite()

void G4GDMLWriteParamvol::Polyhedra_dimensionsWrite ( xercesc::DOMElement *  parametersElement,
const G4Polyhedra * const  polyhedra 
)
protectedinherited

Definition at line 332 of file G4GDMLWriteParamvol.cc.

334{
335 xercesc::DOMElement* polyhedra_dimensionsElement =
336 NewElement("polyhedra_dimensions");
337
338 polyhedra_dimensionsElement->setAttributeNode(
339 NewAttribute("numRZ", polyhedra->GetOriginalParameters()->Num_z_planes));
340 polyhedra_dimensionsElement->setAttributeNode(
341 NewAttribute("numSide", polyhedra->GetOriginalParameters()->numSide));
342 polyhedra_dimensionsElement->setAttributeNode(NewAttribute(
343 "startPhi", polyhedra->GetOriginalParameters()->Start_angle / degree));
344 polyhedra_dimensionsElement->setAttributeNode(NewAttribute(
345 "openPhi", polyhedra->GetOriginalParameters()->Opening_angle / degree));
346 polyhedra_dimensionsElement->setAttributeNode(NewAttribute("aunit", "deg"));
347 polyhedra_dimensionsElement->setAttributeNode(NewAttribute("lunit", "mm"));
348
349 parametersElement->appendChild(polyhedra_dimensionsElement);
350 const size_t num_zplanes = polyhedra->GetOriginalParameters()->Num_z_planes;
351 const G4double* z_array = polyhedra->GetOriginalParameters()->Z_values;
352 const G4double* rmin_array = polyhedra->GetOriginalParameters()->Rmin;
353 const G4double* rmax_array = polyhedra->GetOriginalParameters()->Rmax;
354
355 for(std::size_t i = 0; i < num_zplanes; ++i)
356 {
357 ZplaneWrite(polyhedra_dimensionsElement, z_array[i], rmin_array[i],
358 rmax_array[i]);
359 }
360}
G4PolyhedraHistorical * GetOriginalParameters() const

References degree, G4Polyhedra::GetOriginalParameters(), G4GDMLWrite::NewAttribute(), G4GDMLWrite::NewElement(), G4PolyhedraHistorical::Num_z_planes, G4PolyhedraHistorical::numSide, G4PolyhedraHistorical::Opening_angle, G4PolyhedraHistorical::Rmax, G4PolyhedraHistorical::Rmin, G4PolyhedraHistorical::Start_angle, G4PolyhedraHistorical::Z_values, and G4GDMLWriteSolids::ZplaneWrite().

Referenced by G4GDMLWriteParamvol::ParametersWrite().

◆ PolyhedraWrite()

void G4GDMLWriteSolids::PolyhedraWrite ( xercesc::DOMElement *  solElement,
const G4Polyhedra * const  polyhedra 
)
protectedinherited

Definition at line 572 of file G4GDMLWriteSolids.cc.

574{
575 const G4String& name = GenerateName(polyhedra->GetName(), polyhedra);
576 if(polyhedra->IsGeneric() == false)
577 {
578 xercesc::DOMElement* polyhedraElement = NewElement("polyhedra");
579 polyhedraElement->setAttributeNode(NewAttribute("name", name));
580 polyhedraElement->setAttributeNode(NewAttribute(
581 "startphi", polyhedra->GetOriginalParameters()->Start_angle / degree));
582 polyhedraElement->setAttributeNode(NewAttribute(
583 "deltaphi", polyhedra->GetOriginalParameters()->Opening_angle / degree));
584 polyhedraElement->setAttributeNode(
585 NewAttribute("numsides", polyhedra->GetOriginalParameters()->numSide));
586 polyhedraElement->setAttributeNode(NewAttribute("aunit", "deg"));
587 polyhedraElement->setAttributeNode(NewAttribute("lunit", "mm"));
588 solElement->appendChild(polyhedraElement);
589
590 const std::size_t num_zplanes
591 = polyhedra->GetOriginalParameters()->Num_z_planes;
592 const G4double* z_array = polyhedra->GetOriginalParameters()->Z_values;
593 const G4double* rmin_array = polyhedra->GetOriginalParameters()->Rmin;
594 const G4double* rmax_array = polyhedra->GetOriginalParameters()->Rmax;
595
596 const G4double convertRad =
597 std::cos(0.5 * polyhedra->GetOriginalParameters()->Opening_angle /
598 polyhedra->GetOriginalParameters()->numSide);
599
600 for(std::size_t i = 0; i < num_zplanes; ++i)
601 {
602 ZplaneWrite(polyhedraElement, z_array[i], rmin_array[i] * convertRad,
603 rmax_array[i] * convertRad);
604 }
605 }
606 else // generic polyhedra
607 {
608 xercesc::DOMElement* polyhedraElement = NewElement("genericPolyhedra");
609 polyhedraElement->setAttributeNode(NewAttribute("name", name));
610 polyhedraElement->setAttributeNode(NewAttribute(
611 "startphi", polyhedra->GetOriginalParameters()->Start_angle / degree));
612 polyhedraElement->setAttributeNode(NewAttribute(
613 "deltaphi", polyhedra->GetOriginalParameters()->Opening_angle / degree));
614 polyhedraElement->setAttributeNode(
615 NewAttribute("numsides", polyhedra->GetOriginalParameters()->numSide));
616 polyhedraElement->setAttributeNode(NewAttribute("aunit", "deg"));
617 polyhedraElement->setAttributeNode(NewAttribute("lunit", "mm"));
618 solElement->appendChild(polyhedraElement);
619
620 const std::size_t num_rzpoints = polyhedra->GetNumRZCorner();
621
622 for(std::size_t i = 0; i < num_rzpoints; ++i)
623 {
624 const G4double r_point = polyhedra->GetCorner(i).r;
625 const G4double z_point = polyhedra->GetCorner(i).z;
626 RZPointWrite(polyhedraElement, r_point, z_point);
627 }
628 }
629}
G4int GetNumRZCorner() const
G4PolyhedraSideRZ GetCorner(const G4int index) const
G4bool IsGeneric() const

References degree, G4GDMLWrite::GenerateName(), G4Polyhedra::GetCorner(), G4VSolid::GetName(), G4Polyhedra::GetNumRZCorner(), G4Polyhedra::GetOriginalParameters(), G4Polyhedra::IsGeneric(), G4InuclParticleNames::name(), G4GDMLWrite::NewAttribute(), G4GDMLWrite::NewElement(), G4PolyhedraHistorical::Num_z_planes, G4PolyhedraHistorical::numSide, G4PolyhedraHistorical::Opening_angle, G4PolyhedraSideRZ::r, G4PolyhedraHistorical::Rmax, G4PolyhedraHistorical::Rmin, G4GDMLWriteSolids::RZPointWrite(), G4PolyhedraHistorical::Start_angle, G4PolyhedraSideRZ::z, G4PolyhedraHistorical::Z_values, and G4GDMLWriteSolids::ZplaneWrite().

Referenced by G4GDMLWriteSolids::AddSolid().

◆ Position_vectorWrite()

void G4GDMLWriteDefine::Position_vectorWrite ( xercesc::DOMElement *  element,
const G4String tag,
const G4String name,
const G4ThreeVector pos 
)
protectedinherited

Definition at line 118 of file G4GDMLWriteDefine.cc.

122{
123 const G4double x = (std::fabs(pos.x()) < kLinearPrecision) ? 0.0 : pos.x();
124 const G4double y = (std::fabs(pos.y()) < kLinearPrecision) ? 0.0 : pos.y();
125 const G4double z = (std::fabs(pos.z()) < kLinearPrecision) ? 0.0 : pos.z();
126
127 xercesc::DOMElement* positionElement = NewElement(tag);
128 positionElement->setAttributeNode(NewAttribute("name", name));
129 positionElement->setAttributeNode(NewAttribute("x", x / mm));
130 positionElement->setAttributeNode(NewAttribute("y", y / mm));
131 positionElement->setAttributeNode(NewAttribute("z", z / mm));
132 positionElement->setAttributeNode(NewAttribute("unit", "mm"));
133 element->appendChild(positionElement);
134}

References G4GDMLWriteDefine::kLinearPrecision, mm, G4InuclParticleNames::name(), G4GDMLWrite::NewAttribute(), G4GDMLWrite::NewElement(), and pos.

Referenced by G4GDMLWriteDefine::AddPosition(), G4GDMLWriteDefine::FirstpositionWrite(), and G4GDMLWriteDefine::PositionWrite().

◆ PositionWrite()

void G4GDMLWriteDefine::PositionWrite ( xercesc::DOMElement *  element,
const G4String name,
const G4ThreeVector pos 
)
inlineinherited

◆ PropertyConstWrite()

void G4GDMLWriteMaterials::PropertyConstWrite ( const G4String key,
const G4double  pval,
const G4MaterialPropertiesTable ptable 
)
protectedinherited

Definition at line 261 of file G4GDMLWriteMaterials.cc.

264{
265 const G4String matrixref = GenerateName(key, ptable);
266 xercesc::DOMElement* matrixElement = NewElement("matrix");
267 matrixElement->setAttributeNode(NewAttribute("name", matrixref));
268 matrixElement->setAttributeNode(NewAttribute("coldim", "1"));
269 std::ostringstream pvalues;
270
271 pvalues << pval;
272 matrixElement->setAttributeNode(NewAttribute("values", pvalues.str()));
273
274 defineElement->appendChild(matrixElement);
275}

References G4GDMLWriteDefine::defineElement, G4GDMLWrite::GenerateName(), G4GDMLWrite::NewAttribute(), and G4GDMLWrite::NewElement().

Referenced by G4GDMLWriteMaterials::PropertyWrite().

◆ PropertyVectorWrite()

void G4GDMLWriteMaterials::PropertyVectorWrite ( const G4String key,
const G4PhysicsFreeVector * const  pvec 
)
protectedinherited

Definition at line 230 of file G4GDMLWriteMaterials.cc.

232{
233 for(std::size_t i = 0; i < propertyList.size(); ++i) // Check if property is
234 { // already in the list!
235 if(propertyList[i] == pvec)
236 {
237 return;
238 }
239 }
240 propertyList.push_back(pvec);
241
242 const G4String matrixref = GenerateName(key, pvec);
243 xercesc::DOMElement* matrixElement = NewElement("matrix");
244 matrixElement->setAttributeNode(NewAttribute("name", matrixref));
245 matrixElement->setAttributeNode(NewAttribute("coldim", "2"));
246 std::ostringstream pvalues;
247 for(std::size_t i = 0; i < pvec->GetVectorLength(); ++i)
248 {
249 if(i != 0)
250 {
251 pvalues << " ";
252 }
253 pvalues << pvec->Energy(i) << " " << (*pvec)[i];
254 }
255 matrixElement->setAttributeNode(NewAttribute("values", pvalues.str()));
256
257 defineElement->appendChild(matrixElement);
258}
G4double Energy(const std::size_t index) const
std::size_t GetVectorLength() const

References G4GDMLWriteDefine::defineElement, G4PhysicsVector::Energy(), G4GDMLWrite::GenerateName(), G4PhysicsVector::GetVectorLength(), G4GDMLWrite::NewAttribute(), G4GDMLWrite::NewElement(), and G4GDMLWriteMaterials::propertyList.

Referenced by G4GDMLWriteMaterials::PropertyWrite(), and G4GDMLWriteSolids::PropertyWrite().

◆ PropertyWrite() [1/2]

void G4GDMLWriteMaterials::PropertyWrite ( xercesc::DOMElement *  matElement,
const G4Material * const  mat 
)
protectedinherited

Definition at line 278 of file G4GDMLWriteMaterials.cc.

280{
281 xercesc::DOMElement* propElement;
283
284 auto pvec = ptable->GetProperties();
285 auto cvec = ptable->GetConstProperties();
286
287 for(size_t i = 0; i < pvec.size(); ++i)
288 {
289 if (pvec[i] != nullptr)
290 {
291 propElement = NewElement("property");
292 propElement->setAttributeNode(
293 NewAttribute("name", ptable->GetMaterialPropertyNames()[i]));
294 propElement->setAttributeNode(NewAttribute(
295 "ref", GenerateName(ptable->GetMaterialPropertyNames()[i],
296 pvec[i])));
298 pvec[i]);
299 matElement->appendChild(propElement);
300 }
301 }
302
303 for(size_t i = 0; i < cvec.size(); ++i)
304 {
305 if (cvec[i].second == true)
306 {
307 propElement = NewElement("property");
308 propElement->setAttributeNode(NewAttribute(
309 "name", ptable->GetMaterialConstPropertyNames()[i]));
310 propElement->setAttributeNode(NewAttribute(
312 ptable)));
314 cvec[i].first, ptable);
315 matElement->appendChild(propElement);
316 }
317 }
318}
static constexpr double second
Definition: G4SIunits.hh:137
void PropertyVectorWrite(const G4String &, const G4PhysicsFreeVector *const)
void PropertyConstWrite(const G4String &, const G4double, const G4MaterialPropertiesTable *)
const std::vector< G4String > & GetMaterialConstPropertyNames() const
const std::vector< std::pair< G4double, G4bool > > & GetConstProperties() const
const std::vector< G4MaterialPropertyVector * > & GetProperties() const
const std::vector< G4String > & GetMaterialPropertyNames() const

References G4GDMLWrite::GenerateName(), G4MaterialPropertiesTable::GetConstProperties(), G4MaterialPropertiesTable::GetMaterialConstPropertyNames(), G4Material::GetMaterialPropertiesTable(), G4MaterialPropertiesTable::GetMaterialPropertyNames(), G4MaterialPropertiesTable::GetProperties(), G4GDMLWrite::NewAttribute(), G4GDMLWrite::NewElement(), G4GDMLWriteMaterials::PropertyConstWrite(), G4GDMLWriteMaterials::PropertyVectorWrite(), and second.

Referenced by G4GDMLWriteMaterials::MaterialWrite().

◆ PropertyWrite() [2/2]

void G4GDMLWriteSolids::PropertyWrite ( xercesc::DOMElement *  optElement,
const G4OpticalSurface * const  surf 
)
protectedinherited

Definition at line 1084 of file G4GDMLWriteSolids.cc.

1086{
1087 xercesc::DOMElement* propElement;
1089 auto pvec = ptable->GetProperties();
1090 auto cvec = ptable->GetConstProperties();
1091
1092 for(size_t i = 0; i < pvec.size(); ++i)
1093 {
1094 if(pvec[i] != nullptr) {
1095 propElement = NewElement("property");
1096 propElement->setAttributeNode(
1097 NewAttribute("name", ptable->GetMaterialPropertyNames()[i]));
1098 propElement->setAttributeNode(NewAttribute(
1099 "ref", GenerateName(ptable->GetMaterialPropertyNames()[i],
1100 pvec[i])));
1102 pvec[i]);
1103 optElement->appendChild(propElement);
1104 }
1105 }
1106 for(size_t i = 0; i < cvec.size(); ++i)
1107 {
1108 if (cvec[i].second == true) {
1109 propElement = NewElement("property");
1110 propElement->setAttributeNode(NewAttribute(
1111 "name", ptable->GetMaterialConstPropertyNames()[i]));
1112 propElement->setAttributeNode(NewAttribute(
1113 "ref", ptable->GetMaterialConstPropertyNames()[i]));
1114 xercesc::DOMElement* constElement = NewElement("constant");
1115 constElement->setAttributeNode(NewAttribute(
1116 "name", ptable->GetMaterialConstPropertyNames()[i]));
1117 constElement->setAttributeNode(NewAttribute("value", cvec[i].first));
1118 defineElement->appendChild(constElement);
1119 optElement->appendChild(propElement);
1120 }
1121 }
1122}

References G4GDMLWriteDefine::defineElement, G4GDMLWrite::GenerateName(), G4MaterialPropertiesTable::GetConstProperties(), G4MaterialPropertiesTable::GetMaterialConstPropertyNames(), G4OpticalSurface::GetMaterialPropertiesTable(), G4MaterialPropertiesTable::GetMaterialPropertyNames(), G4MaterialPropertiesTable::GetProperties(), G4GDMLWrite::NewAttribute(), G4GDMLWrite::NewElement(), G4GDMLWriteMaterials::PropertyVectorWrite(), and second.

Referenced by G4GDMLWriteSolids::OpticalSurfaceWrite().

◆ PvolumeMap()

G4GDMLWrite::PhysVolumeMapType & G4GDMLWrite::PvolumeMap ( )
protectedinherited

Definition at line 66 of file G4GDMLWrite.cc.

67{
68 static PhysVolumeMapType instance;
69 return instance;
70}
std::map< const G4VPhysicalVolume *, G4String > PhysVolumeMapType
Definition: G4GDMLWrite.hh:54

Referenced by G4GDMLWrite::AddModule(), and G4GDMLWrite::Modularize().

◆ PWrite()

void G4GDMLWriteMaterials::PWrite ( xercesc::DOMElement *  element,
const G4double P 
)
protectedinherited

Definition at line 73 of file G4GDMLWriteMaterials.cc.

75{
76 xercesc::DOMElement* PElement = NewElement("P");
77 PElement->setAttributeNode(NewAttribute("unit", "pascal"));
78 PElement->setAttributeNode(NewAttribute("value", P / hep_pascal));
79 element->appendChild(PElement);
80}
static constexpr double hep_pascal
Definition: G4SIunits.hh:222
static double P[]

References hep_pascal, G4GDMLWrite::NewAttribute(), G4GDMLWrite::NewElement(), and P.

Referenced by G4GDMLWriteMaterials::MaterialWrite().

◆ ReplicavolWrite()

void G4GDMLWriteStructure::ReplicavolWrite ( xercesc::DOMElement *  volumeElement,
const G4VPhysicalVolume * const  replicavol 
)
protected

Definition at line 203 of file G4GDMLWriteStructure.cc.

205{
206 EAxis axis = kUndefined;
207 G4int number = 0;
208 G4double width = 0.0;
209 G4double offset = 0.0;
210 G4bool consuming = false;
211 G4String unitString("mm");
212
213 replicavol->GetReplicationData(axis, number, width, offset, consuming);
214
215 const G4String volumeref = GenerateName(
216 replicavol->GetLogicalVolume()->GetName(), replicavol->GetLogicalVolume());
217
218 xercesc::DOMElement* replicavolElement = NewElement("replicavol");
219 replicavolElement->setAttributeNode(NewAttribute("number", number));
220 xercesc::DOMElement* volumerefElement = NewElement("volumeref");
221 volumerefElement->setAttributeNode(NewAttribute("ref", volumeref));
222 replicavolElement->appendChild(volumerefElement);
223 xercesc::DOMElement* replicateElement = NewElement("replicate_along_axis");
224 replicavolElement->appendChild(replicateElement);
225
226 xercesc::DOMElement* dirElement = NewElement("direction");
227 if(axis == kXAxis)
228 {
229 dirElement->setAttributeNode(NewAttribute("x", "1"));
230 }
231 else if(axis == kYAxis)
232 {
233 dirElement->setAttributeNode(NewAttribute("y", "1"));
234 }
235 else if(axis == kZAxis)
236 {
237 dirElement->setAttributeNode(NewAttribute("z", "1"));
238 }
239 else if(axis == kRho)
240 {
241 dirElement->setAttributeNode(NewAttribute("rho", "1"));
242 }
243 else if(axis == kPhi)
244 {
245 dirElement->setAttributeNode(NewAttribute("phi", "1"));
246 unitString = "rad";
247 }
248 replicateElement->appendChild(dirElement);
249
250 xercesc::DOMElement* widthElement = NewElement("width");
251 widthElement->setAttributeNode(NewAttribute("value", width));
252 widthElement->setAttributeNode(NewAttribute("unit", unitString));
253 replicateElement->appendChild(widthElement);
254
255 xercesc::DOMElement* offsetElement = NewElement("offset");
256 offsetElement->setAttributeNode(NewAttribute("value", offset));
257 offsetElement->setAttributeNode(NewAttribute("unit", unitString));
258 replicateElement->appendChild(offsetElement);
259
260 volumeElement->appendChild(replicavolElement);
261}
virtual void GetReplicationData(EAxis &axis, G4int &nReplicas, G4double &width, G4double &offset, G4bool &consuming) const =0

References G4GDMLWrite::GenerateName(), G4VPhysicalVolume::GetLogicalVolume(), G4LogicalVolume::GetName(), G4VPhysicalVolume::GetReplicationData(), kPhi, kRho, kUndefined, kXAxis, kYAxis, kZAxis, G4GDMLWrite::NewAttribute(), and G4GDMLWrite::NewElement().

Referenced by TraverseVolumeTree().

◆ Rotation_vectorWrite()

void G4GDMLWriteDefine::Rotation_vectorWrite ( xercesc::DOMElement *  element,
const G4String tag,
const G4String name,
const G4ThreeVector rot 
)
protectedinherited

Definition at line 99 of file G4GDMLWriteDefine.cc.

103{
104 const G4double x = (std::fabs(rot.x()) < kAngularPrecision) ? 0.0 : rot.x();
105 const G4double y = (std::fabs(rot.y()) < kAngularPrecision) ? 0.0 : rot.y();
106 const G4double z = (std::fabs(rot.z()) < kAngularPrecision) ? 0.0 : rot.z();
107
108 xercesc::DOMElement* rotationElement = NewElement(tag);
109 rotationElement->setAttributeNode(NewAttribute("name", name));
110 rotationElement->setAttributeNode(NewAttribute("x", x / degree));
111 rotationElement->setAttributeNode(NewAttribute("y", y / degree));
112 rotationElement->setAttributeNode(NewAttribute("z", z / degree));
113 rotationElement->setAttributeNode(NewAttribute("unit", "deg"));
114 element->appendChild(rotationElement);
115}

References degree, G4GDMLWriteDefine::kAngularPrecision, G4InuclParticleNames::name(), G4GDMLWrite::NewAttribute(), G4GDMLWrite::NewElement(), CLHEP::Hep3Vector::x(), CLHEP::Hep3Vector::y(), and CLHEP::Hep3Vector::z().

Referenced by G4GDMLWriteDefine::FirstrotationWrite(), and G4GDMLWriteDefine::RotationWrite().

◆ RotationWrite()

void G4GDMLWriteDefine::RotationWrite ( xercesc::DOMElement *  element,
const G4String name,
const G4ThreeVector rot 
)
inlineinherited

◆ RZPointWrite()

void G4GDMLWriteSolids::RZPointWrite ( xercesc::DOMElement *  element,
const G4double r,
const G4double z 
)
protectedinherited

Definition at line 1048 of file G4GDMLWriteSolids.cc.

1050{
1051 xercesc::DOMElement* rzpointElement = NewElement("rzpoint");
1052 rzpointElement->setAttributeNode(NewAttribute("r", r / mm));
1053 rzpointElement->setAttributeNode(NewAttribute("z", z / mm));
1054 element->appendChild(rzpointElement);
1055}

References mm, G4GDMLWrite::NewAttribute(), and G4GDMLWrite::NewElement().

Referenced by G4GDMLWriteSolids::GenericPolyconeWrite(), and G4GDMLWriteSolids::PolyhedraWrite().

◆ Scale_vectorWrite()

void G4GDMLWriteDefine::Scale_vectorWrite ( xercesc::DOMElement *  element,
const G4String tag,
const G4String name,
const G4ThreeVector scl 
)
protectedinherited

Definition at line 78 of file G4GDMLWriteDefine.cc.

82{
83 const G4double x =
84 (std::fabs(scl.x() - 1.0) < kRelativePrecision) ? 1.0 : scl.x();
85 const G4double y =
86 (std::fabs(scl.y() - 1.0) < kRelativePrecision) ? 1.0 : scl.y();
87 const G4double z =
88 (std::fabs(scl.z() - 1.0) < kRelativePrecision) ? 1.0 : scl.z();
89
90 xercesc::DOMElement* scaleElement = NewElement(tag);
91 scaleElement->setAttributeNode(NewAttribute("name", name));
92 scaleElement->setAttributeNode(NewAttribute("x", x));
93 scaleElement->setAttributeNode(NewAttribute("y", y));
94 scaleElement->setAttributeNode(NewAttribute("z", z));
95 element->appendChild(scaleElement);
96}

References G4GDMLWriteDefine::kRelativePrecision, G4InuclParticleNames::name(), G4GDMLWrite::NewAttribute(), G4GDMLWrite::NewElement(), CLHEP::Hep3Vector::x(), CLHEP::Hep3Vector::y(), and CLHEP::Hep3Vector::z().

Referenced by G4GDMLWriteDefine::ScaleWrite().

◆ ScaledWrite()

void G4GDMLWriteSolids::ScaledWrite ( xercesc::DOMElement *  solElement,
const G4ScaledSolid * const  scaled 
)
protectedinherited

Definition at line 259 of file G4GDMLWriteSolids.cc.

261{
262 G4String tag("scaledSolid");
263
264 G4VSolid* solid = const_cast<G4VSolid*>(scaled->GetUnscaledSolid());
265 G4Scale3D scale = scaled->GetScaleTransform();
266 G4ThreeVector sclVector = G4ThreeVector(scale.xx(), scale.yy(), scale.zz());
267
268 AddSolid(solid); // Add the constituent solid!
269
270 const G4String& name = GenerateName(scaled->GetName(), scaled);
271 const G4String& solidref = GenerateName(solid->GetName(), solid);
272
273 xercesc::DOMElement* scaledElement = NewElement(tag);
274 scaledElement->setAttributeNode(NewAttribute("name", name));
275
276 xercesc::DOMElement* solidElement = NewElement("solidref");
277 solidElement->setAttributeNode(NewAttribute("ref", solidref));
278 scaledElement->appendChild(solidElement);
279
280 if((std::fabs(scale.xx()) > kLinearPrecision) &&
281 (std::fabs(scale.yy()) > kLinearPrecision) &&
282 (std::fabs(scale.zz()) > kLinearPrecision))
283 {
284 ScaleWrite(scaledElement, name + "_scl", sclVector);
285 }
286
287 solElement->appendChild(scaledElement);
288 // Add the scaled solid AFTER its constituent solid!
289}
G4VSolid * GetUnscaledSolid() const
G4Scale3D GetScaleTransform() const

References G4GDMLWriteSolids::AddSolid(), G4GDMLWrite::GenerateName(), G4VSolid::GetName(), G4ScaledSolid::GetScaleTransform(), G4ScaledSolid::GetUnscaledSolid(), G4GDMLWriteDefine::kLinearPrecision, G4InuclParticleNames::name(), G4GDMLWrite::NewAttribute(), G4GDMLWrite::NewElement(), G4GDMLWriteDefine::ScaleWrite(), HepGeom::Transform3D::xx(), HepGeom::Transform3D::yy(), and HepGeom::Transform3D::zz().

Referenced by G4GDMLWriteSolids::AddSolid().

◆ ScaleWrite()

void G4GDMLWriteDefine::ScaleWrite ( xercesc::DOMElement *  element,
const G4String name,
const G4ThreeVector scl 
)
inlineinherited

Definition at line 48 of file G4GDMLWriteDefine.hh.

50 {
51 Scale_vectorWrite(element, "scale", name, scl);
52 }
void Scale_vectorWrite(xercesc::DOMElement *, const G4String &, const G4String &, const G4ThreeVector &)

References G4InuclParticleNames::name(), and G4GDMLWriteDefine::Scale_vectorWrite().

Referenced by PhysvolWrite(), G4GDMLWriteSolids::ScaledWrite(), and TraverseVolumeTree().

◆ SetAddPointerToName()

void G4GDMLWrite::SetAddPointerToName ( G4bool  set)
staticinherited

Definition at line 410 of file G4GDMLWrite.cc.

411{
412 addPointerToName = set;
413}

References G4GDMLWrite::addPointerToName.

◆ SetEnergyCutsExport()

void G4GDMLWriteStructure::SetEnergyCutsExport ( G4bool  fcuts)

Definition at line 843 of file G4GDMLWriteStructure.cc.

844{
845 cexport = fcuts;
846}

References cexport.

◆ SetMaxExportLevel()

void G4GDMLWriteStructure::SetMaxExportLevel ( G4int  level)

Definition at line 911 of file G4GDMLWriteStructure.cc.

912{
913 if(level <= 0)
914 {
915 G4Exception("G4GDMLWriteStructure::TraverseVolumeTree()", "InvalidSetup",
916 FatalException, "Levels to export must be greater than zero!");
917 return;
918 }
919 maxLevel = level;
920 levelNo = 0;
921}

References FatalException, G4Exception(), levelNo, and maxLevel.

◆ SetOutputFileOverwrite()

void G4GDMLWrite::SetOutputFileOverwrite ( G4bool  flag)
inherited

Definition at line 404 of file G4GDMLWrite.cc.

405{
406 overwriteOutputFile = flag;
407}
G4bool overwriteOutputFile
Definition: G4GDMLWrite.hh:137

References G4GDMLWrite::overwriteOutputFile.

◆ SetSDExport()

void G4GDMLWriteStructure::SetSDExport ( G4bool  fsd)

Definition at line 885 of file G4GDMLWriteStructure.cc.

886{
887 sdexport = fsd;
888}

References sdexport.

◆ SetupWrite()

void G4GDMLWriteSetup::SetupWrite ( xercesc::DOMElement *  gdmlElement,
const G4LogicalVolume * const  logvol 
)
virtualinherited

Implements G4GDMLWrite.

Definition at line 47 of file G4GDMLWriteSetup.cc.

49{
50#ifdef G4VERBOSE
51 G4cout << "G4GDML: Writing setup..." << G4endl;
52#endif
53 const G4String worldref = GenerateName(logvol->GetName(), logvol);
54
55 xercesc::DOMElement* setupElement = NewElement("setup");
56 setupElement->setAttributeNode(NewAttribute("version", "1.0"));
57 setupElement->setAttributeNode(NewAttribute("name", "Default"));
58 xercesc::DOMElement* worldElement = NewElement("world");
59 worldElement->setAttributeNode(NewAttribute("ref", worldref));
60 setupElement->appendChild(worldElement);
61 gdmlElement->appendChild(setupElement);
62}

References G4cout, G4endl, G4GDMLWrite::GenerateName(), G4LogicalVolume::GetName(), G4GDMLWrite::NewAttribute(), and G4GDMLWrite::NewElement().

◆ SkinSurfaceCache()

void G4GDMLWriteStructure::SkinSurfaceCache ( const G4LogicalSkinSurface * const  ssurf)
protected

Definition at line 376 of file G4GDMLWriteStructure.cc.

378{
379 if(ssurf == nullptr)
380 {
381 return;
382 }
383
384 const G4SurfaceProperty* psurf = ssurf->GetSurfaceProperty();
385
386 // Generate the new element for border-surface
387 //
388 const G4String& ssname = GenerateName(ssurf->GetName(), ssurf);
389 const G4String& psname = GenerateName(psurf->GetName(), psurf);
390 xercesc::DOMElement* skinElement = NewElement("skinsurface");
391 skinElement->setAttributeNode(NewAttribute("name", ssname));
392 skinElement->setAttributeNode(NewAttribute("surfaceproperty", psname));
393
394 const G4String volumeref = GenerateName(ssurf->GetLogicalVolume()->GetName(),
395 ssurf->GetLogicalVolume());
396 xercesc::DOMElement* volumerefElement = NewElement("volumeref");
397 volumerefElement->setAttributeNode(NewAttribute("ref", volumeref));
398 skinElement->appendChild(volumerefElement);
399
400 if(FindOpticalSurface(psurf))
401 {
402 const G4OpticalSurface* opsurf =
403 dynamic_cast<const G4OpticalSurface*>(psurf);
404 if(opsurf == nullptr)
405 {
406 G4Exception("G4GDMLWriteStructure::SkinSurfaceCache()", "InvalidSetup",
407 FatalException, "No optical surface found!");
408 return;
409 }
411 }
412
413 skinElementVec.push_back(skinElement);
414}
std::vector< xercesc::DOMElement * > skinElementVec
const G4LogicalVolume * GetLogicalVolume() const

References FatalException, FindOpticalSurface(), G4Exception(), G4GDMLWrite::GenerateName(), G4LogicalSkinSurface::GetLogicalVolume(), G4LogicalSurface::GetName(), G4LogicalVolume::GetName(), G4SurfaceProperty::GetName(), G4LogicalSurface::GetSurfaceProperty(), G4GDMLWrite::NewAttribute(), G4GDMLWrite::NewElement(), G4GDMLWriteSolids::OpticalSurfaceWrite(), skinElementVec, and G4GDMLWriteSolids::solidsElement.

Referenced by TraverseVolumeTree().

◆ SolidsWrite()

void G4GDMLWriteSolids::SolidsWrite ( xercesc::DOMElement *  gdmlElement)
virtualinherited

Implements G4GDMLWrite.

Definition at line 1125 of file G4GDMLWriteSolids.cc.

1126{
1127#ifdef G4VERBOSE
1128 G4cout << "G4GDML: Writing solids..." << G4endl;
1129#endif
1130 solidsElement = NewElement("solids");
1131 gdmlElement->appendChild(solidsElement);
1132
1133 solidList.clear();
1134}

References G4cout, G4endl, G4GDMLWrite::NewElement(), G4GDMLWriteSolids::solidList, and G4GDMLWriteSolids::solidsElement.

◆ Sphere_dimensionsWrite()

void G4GDMLWriteParamvol::Sphere_dimensionsWrite ( xercesc::DOMElement *  parametersElement,
const G4Sphere * const  sphere 
)
protectedinherited

Definition at line 181 of file G4GDMLWriteParamvol.cc.

183{
184 xercesc::DOMElement* sphere_dimensionsElement =
185 NewElement("sphere_dimensions");
186 sphere_dimensionsElement->setAttributeNode(
187 NewAttribute("rmin", sphere->GetInnerRadius() / mm));
188 sphere_dimensionsElement->setAttributeNode(
189 NewAttribute("rmax", sphere->GetOuterRadius() / mm));
190 sphere_dimensionsElement->setAttributeNode(
191 NewAttribute("startphi", sphere->GetStartPhiAngle() / degree));
192 sphere_dimensionsElement->setAttributeNode(
193 NewAttribute("deltaphi", sphere->GetDeltaPhiAngle() / degree));
194 sphere_dimensionsElement->setAttributeNode(
195 NewAttribute("starttheta", sphere->GetStartThetaAngle() / degree));
196 sphere_dimensionsElement->setAttributeNode(
197 NewAttribute("deltatheta", sphere->GetDeltaThetaAngle() / degree));
198 sphere_dimensionsElement->setAttributeNode(NewAttribute("aunit", "deg"));
199 sphere_dimensionsElement->setAttributeNode(NewAttribute("lunit", "mm"));
200 parametersElement->appendChild(sphere_dimensionsElement);
201}
G4double GetStartPhiAngle() const
G4double GetDeltaPhiAngle() const
G4double GetInnerRadius() const
G4double GetOuterRadius() const
G4double GetDeltaThetaAngle() const
G4double GetStartThetaAngle() const

References degree, G4Sphere::GetDeltaPhiAngle(), G4Sphere::GetDeltaThetaAngle(), G4Sphere::GetInnerRadius(), G4Sphere::GetOuterRadius(), G4Sphere::GetStartPhiAngle(), G4Sphere::GetStartThetaAngle(), mm, G4GDMLWrite::NewAttribute(), and G4GDMLWrite::NewElement().

Referenced by G4GDMLWriteParamvol::ParametersWrite().

◆ SphereWrite()

void G4GDMLWriteSolids::SphereWrite ( xercesc::DOMElement *  solElement,
const G4Sphere * const  sphere 
)
protectedinherited

Definition at line 632 of file G4GDMLWriteSolids.cc.

634{
635 const G4String& name = GenerateName(sphere->GetName(), sphere);
636
637 xercesc::DOMElement* sphereElement = NewElement("sphere");
638 sphereElement->setAttributeNode(NewAttribute("name", name));
639 sphereElement->setAttributeNode(
640 NewAttribute("rmin", sphere->GetInnerRadius() / mm));
641 sphereElement->setAttributeNode(
642 NewAttribute("rmax", sphere->GetOuterRadius() / mm));
643 sphereElement->setAttributeNode(
644 NewAttribute("startphi", sphere->GetStartPhiAngle() / degree));
645 sphereElement->setAttributeNode(
646 NewAttribute("deltaphi", sphere->GetDeltaPhiAngle() / degree));
647 sphereElement->setAttributeNode(
648 NewAttribute("starttheta", sphere->GetStartThetaAngle() / degree));
649 sphereElement->setAttributeNode(
650 NewAttribute("deltatheta", sphere->GetDeltaThetaAngle() / degree));
651 sphereElement->setAttributeNode(NewAttribute("aunit", "deg"));
652 sphereElement->setAttributeNode(NewAttribute("lunit", "mm"));
653 solElement->appendChild(sphereElement);
654}

References degree, G4GDMLWrite::GenerateName(), G4Sphere::GetDeltaPhiAngle(), G4Sphere::GetDeltaThetaAngle(), G4Sphere::GetInnerRadius(), G4VSolid::GetName(), G4Sphere::GetOuterRadius(), G4Sphere::GetStartPhiAngle(), G4Sphere::GetStartThetaAngle(), mm, G4InuclParticleNames::name(), G4GDMLWrite::NewAttribute(), and G4GDMLWrite::NewElement().

Referenced by G4GDMLWriteSolids::AddSolid().

◆ StructureWrite()

void G4GDMLWriteStructure::StructureWrite ( xercesc::DOMElement *  gdmlElement)
virtual

Implements G4GDMLWrite.

Definition at line 493 of file G4GDMLWriteStructure.cc.

494{
495#ifdef G4VERBOSE
496 G4cout << "G4GDML: Writing structure..." << G4endl;
497#endif
498
499 // filling the list of phys volumes that are parts of assemblies
500
502
503 for(auto it = assemblies->cbegin(); it != assemblies->cend(); ++it)
504 {
505 auto vit = (*it)->GetVolumesIterator();
506
507 for(std::size_t i5 = 0; i5 < (*it)->TotalImprintedVolumes(); ++i5)
508 {
509 G4String pvname = (*vit)->GetName();
510 std::size_t pos = pvname.find("_impr_") + 6;
511 G4String impID = pvname.substr(pos);
512
513 pos = impID.find("_");
514 impID = impID.substr(0, pos);
515
516 assemblyVolMap[*vit] = (*it)->GetAssemblyID();
517 imprintsMap[*vit] = std::atoi(impID.c_str());
518 ++vit;
519 }
520 }
521
522 structureElement = NewElement("structure");
523 gdmlElement->appendChild(structureElement);
524}
std::map< const G4VPhysicalVolume *, G4int > assemblyVolMap
std::map< const G4VPhysicalVolume *, G4int > imprintsMap
xercesc::DOMElement * structureElement

References assemblyVolMap, G4cout, G4endl, G4AssemblyStore::GetInstance(), imprintsMap, G4GDMLWrite::NewElement(), pos, and structureElement.

◆ SurfacesWrite()

void G4GDMLWriteStructure::SurfacesWrite ( )
protectedvirtual

Implements G4GDMLWrite.

Definition at line 475 of file G4GDMLWriteStructure.cc.

476{
477#ifdef G4VERBOSE
478 G4cout << "G4GDML: Writing surfaces..." << G4endl;
479#endif
480 for(auto pos = skinElementVec.cbegin();
481 pos != skinElementVec.cend(); ++pos)
482 {
483 structureElement->appendChild(*pos);
484 }
485 for(auto pos = borderElementVec.cbegin();
486 pos != borderElementVec.cend(); ++pos)
487 {
488 structureElement->appendChild(*pos);
489 }
490}

References borderElementVec, G4cout, G4endl, pos, skinElementVec, and structureElement.

◆ TessellatedWrite()

void G4GDMLWriteSolids::TessellatedWrite ( xercesc::DOMElement *  solElement,
const G4TessellatedSolid * const  tessellated 
)
protectedinherited

Definition at line 657 of file G4GDMLWriteSolids.cc.

659{
660 const G4String& solid_name = tessellated->GetName();
661 const G4String& name = GenerateName(solid_name, tessellated);
662
663 xercesc::DOMElement* tessellatedElement = NewElement("tessellated");
664 tessellatedElement->setAttributeNode(NewAttribute("name", name));
665 tessellatedElement->setAttributeNode(NewAttribute("aunit", "deg"));
666 tessellatedElement->setAttributeNode(NewAttribute("lunit", "mm"));
667 solElement->appendChild(tessellatedElement);
668
669 std::map<G4ThreeVector, G4String, G4ThreeVectorCompare> vertexMap;
670
671 const std::size_t NumFacets = tessellated->GetNumberOfFacets();
672 std::size_t NumVertex = 0;
673
674 for(std::size_t i = 0; i < NumFacets; ++i)
675 {
676 const G4VFacet* facet = tessellated->GetFacet(i);
677 const size_t NumVertexPerFacet = facet->GetNumberOfVertices();
678
679 G4String FacetTag;
680
681 if(NumVertexPerFacet == 3)
682 {
683 FacetTag = "triangular";
684 }
685 else if(NumVertexPerFacet == 4)
686 {
687 FacetTag = "quadrangular";
688 }
689 else
690 {
691 G4Exception("G4GDMLWriteSolids::TessellatedWrite()", "InvalidSetup",
692 FatalException, "Facet should contain 3 or 4 vertices!");
693 }
694
695 xercesc::DOMElement* facetElement = NewElement(FacetTag);
696 tessellatedElement->appendChild(facetElement);
697
698 for(std::size_t j = 0; j < NumVertexPerFacet; ++j)
699 {
700 std::stringstream name_stream;
701 std::stringstream ref_stream;
702
703 name_stream << "vertex" << (j + 1);
704 ref_stream << solid_name << "_v" << NumVertex;
705
706 const G4String& fname = name_stream.str(); // facet's tag variable
707 G4String ref = ref_stream.str(); // vertex tag to be associated
708
709 // Now search for the existance of the current vertex in the
710 // map of cached vertices. If existing, do NOT store it as
711 // position in the GDML file, so avoiding duplication; otherwise
712 // cache it in the local map and add it as position in the
713 // "define" section of the GDML file.
714
715 const G4ThreeVector& vertex = facet->GetVertex(j);
716
717 if(vertexMap.find(vertex) != vertexMap.cend()) // Vertex is cached
718 {
719 ref = vertexMap[vertex]; // Set the proper tag for it
720 }
721 else // Vertex not found
722 {
723 vertexMap.insert(std::make_pair(vertex, ref)); // Cache vertex and ...
724 AddPosition(ref, vertex); // ... add it to define section!
725 ++NumVertex;
726 }
727
728 // Now create association of the vertex with its facet
729 //
730 facetElement->setAttributeNode(NewAttribute(fname, ref));
731 }
732 }
733}
void AddPosition(const G4String &name, const G4ThreeVector &pos)
G4int GetNumberOfFacets() const
G4VFacet * GetFacet(G4int i) const
virtual G4ThreeVector GetVertex(G4int i) const =0
virtual G4int GetNumberOfVertices() const =0

References G4GDMLWriteDefine::AddPosition(), FatalException, test::fname, G4Exception(), G4GDMLWrite::GenerateName(), G4TessellatedSolid::GetFacet(), G4VSolid::GetName(), G4TessellatedSolid::GetNumberOfFacets(), G4VFacet::GetNumberOfVertices(), G4VFacet::GetVertex(), G4InuclParticleNames::name(), G4GDMLWrite::NewAttribute(), and G4GDMLWrite::NewElement().

Referenced by G4GDMLWriteSolids::AddSolid().

◆ TetWrite()

void G4GDMLWriteSolids::TetWrite ( xercesc::DOMElement *  solElement,
const G4Tet * const  tet 
)
protectedinherited

Definition at line 736 of file G4GDMLWriteSolids.cc.

738{
739 const G4String& solid_name = tet->GetName();
740 const G4String& name = GenerateName(solid_name, tet);
741
742 std::vector<G4ThreeVector> vertexList = tet->GetVertices();
743
744 xercesc::DOMElement* tetElement = NewElement("tet");
745 tetElement->setAttributeNode(NewAttribute("name", name));
746 tetElement->setAttributeNode(NewAttribute("vertex1", solid_name + "_v1"));
747 tetElement->setAttributeNode(NewAttribute("vertex2", solid_name + "_v2"));
748 tetElement->setAttributeNode(NewAttribute("vertex3", solid_name + "_v3"));
749 tetElement->setAttributeNode(NewAttribute("vertex4", solid_name + "_v4"));
750 tetElement->setAttributeNode(NewAttribute("lunit", "mm"));
751 solElement->appendChild(tetElement);
752
753 AddPosition(solid_name + "_v1", vertexList[0]);
754 AddPosition(solid_name + "_v2", vertexList[1]);
755 AddPosition(solid_name + "_v3", vertexList[2]);
756 AddPosition(solid_name + "_v4", vertexList[3]);
757}
void GetVertices(G4ThreeVector &anchor, G4ThreeVector &p1, G4ThreeVector &p2, G4ThreeVector &p3) const
Definition: G4Tet.cc:286

References G4GDMLWriteDefine::AddPosition(), G4GDMLWrite::GenerateName(), G4VSolid::GetName(), G4Tet::GetVertices(), G4InuclParticleNames::name(), G4GDMLWrite::NewAttribute(), and G4GDMLWrite::NewElement().

Referenced by G4GDMLWriteSolids::AddSolid().

◆ Torus_dimensionsWrite()

void G4GDMLWriteParamvol::Torus_dimensionsWrite ( xercesc::DOMElement *  parametersElement,
const G4Torus * const  torus 
)
protectedinherited

Definition at line 215 of file G4GDMLWriteParamvol.cc.

217{
218 xercesc::DOMElement* torus_dimensionsElement = NewElement("torus_dimensions");
219 torus_dimensionsElement->setAttributeNode(
220 NewAttribute("rmin", torus->GetRmin() / mm));
221 torus_dimensionsElement->setAttributeNode(
222 NewAttribute("rmax", torus->GetRmax() / mm));
223 torus_dimensionsElement->setAttributeNode(
224 NewAttribute("rtor", torus->GetRtor() / mm));
225 torus_dimensionsElement->setAttributeNode(
226 NewAttribute("startphi", torus->GetSPhi() / degree));
227 torus_dimensionsElement->setAttributeNode(
228 NewAttribute("deltaphi", torus->GetDPhi() / degree));
229 torus_dimensionsElement->setAttributeNode(NewAttribute("aunit", "deg"));
230 torus_dimensionsElement->setAttributeNode(NewAttribute("lunit", "mm"));
231 parametersElement->appendChild(torus_dimensionsElement);
232}
G4double GetDPhi() const
G4double GetRmin() const
G4double GetRtor() const
G4double GetRmax() const
G4double GetSPhi() const

References degree, G4Torus::GetDPhi(), G4Torus::GetRmax(), G4Torus::GetRmin(), G4Torus::GetRtor(), G4Torus::GetSPhi(), mm, G4GDMLWrite::NewAttribute(), and G4GDMLWrite::NewElement().

Referenced by G4GDMLWriteParamvol::ParametersWrite().

◆ TorusWrite()

void G4GDMLWriteSolids::TorusWrite ( xercesc::DOMElement *  solElement,
const G4Torus * const  torus 
)
protectedinherited

Definition at line 760 of file G4GDMLWriteSolids.cc.

762{
763 const G4String& name = GenerateName(torus->GetName(), torus);
764
765 xercesc::DOMElement* torusElement = NewElement("torus");
766 torusElement->setAttributeNode(NewAttribute("name", name));
767 torusElement->setAttributeNode(NewAttribute("rmin", torus->GetRmin() / mm));
768 torusElement->setAttributeNode(NewAttribute("rmax", torus->GetRmax() / mm));
769 torusElement->setAttributeNode(NewAttribute("rtor", torus->GetRtor() / mm));
770 torusElement->setAttributeNode(
771 NewAttribute("startphi", torus->GetSPhi() / degree));
772 torusElement->setAttributeNode(
773 NewAttribute("deltaphi", torus->GetDPhi() / degree));
774 torusElement->setAttributeNode(NewAttribute("aunit", "deg"));
775 torusElement->setAttributeNode(NewAttribute("lunit", "mm"));
776 solElement->appendChild(torusElement);
777}

References degree, G4GDMLWrite::GenerateName(), G4Torus::GetDPhi(), G4VSolid::GetName(), G4Torus::GetRmax(), G4Torus::GetRmin(), G4Torus::GetRtor(), G4Torus::GetSPhi(), mm, G4InuclParticleNames::name(), G4GDMLWrite::NewAttribute(), and G4GDMLWrite::NewElement().

Referenced by G4GDMLWriteSolids::AddSolid().

◆ Trap_dimensionsWrite()

void G4GDMLWriteParamvol::Trap_dimensionsWrite ( xercesc::DOMElement *  parametersElement,
const G4Trap * const  trap 
)
protectedinherited

Definition at line 99 of file G4GDMLWriteParamvol.cc.

101{
102 const G4ThreeVector simaxis = trap->GetSymAxis();
103 const G4double phi =
104 (simaxis.z() != 1.0) ? (std::atan(simaxis.y() / simaxis.x())) : (0.0);
105 const G4double theta = std::acos(simaxis.z());
106 const G4double alpha1 = std::atan(trap->GetTanAlpha1());
107 const G4double alpha2 = std::atan(trap->GetTanAlpha2());
108
109 xercesc::DOMElement* trap_dimensionsElement = NewElement("trap");
110 trap_dimensionsElement->setAttributeNode(
111 NewAttribute("z", 2.0 * trap->GetZHalfLength() / mm));
112 trap_dimensionsElement->setAttributeNode(
113 NewAttribute("theta", theta / degree));
114 trap_dimensionsElement->setAttributeNode(NewAttribute("phi", phi / degree));
115 trap_dimensionsElement->setAttributeNode(
116 NewAttribute("y1", 2.0 * trap->GetYHalfLength1() / mm));
117 trap_dimensionsElement->setAttributeNode(
118 NewAttribute("x1", 2.0 * trap->GetXHalfLength1() / mm));
119 trap_dimensionsElement->setAttributeNode(
120 NewAttribute("x2", 2.0 * trap->GetXHalfLength2() / mm));
121 trap_dimensionsElement->setAttributeNode(
122 NewAttribute("alpha1", alpha1 / degree));
123 trap_dimensionsElement->setAttributeNode(
124 NewAttribute("y2", 2.0 * trap->GetYHalfLength2() / mm));
125 trap_dimensionsElement->setAttributeNode(
126 NewAttribute("x3", 2.0 * trap->GetXHalfLength3() / mm));
127 trap_dimensionsElement->setAttributeNode(
128 NewAttribute("x4", 2.0 * trap->GetXHalfLength4() / mm));
129 trap_dimensionsElement->setAttributeNode(
130 NewAttribute("alpha2", alpha2 / degree));
131 trap_dimensionsElement->setAttributeNode(NewAttribute("aunit", "deg"));
132 trap_dimensionsElement->setAttributeNode(NewAttribute("lunit", "mm"));
133 parametersElement->appendChild(trap_dimensionsElement);
134}
const G4double alpha2
G4double GetYHalfLength1() const
G4double GetTanAlpha2() const
G4double GetXHalfLength2() const
G4ThreeVector GetSymAxis() const
G4double GetXHalfLength4() const
G4double GetZHalfLength() const
G4double GetYHalfLength2() const
G4double GetTanAlpha1() const
G4double GetXHalfLength3() const
G4double GetXHalfLength1() const

References alpha2, degree, G4Trap::GetSymAxis(), G4Trap::GetTanAlpha1(), G4Trap::GetTanAlpha2(), G4Trap::GetXHalfLength1(), G4Trap::GetXHalfLength2(), G4Trap::GetXHalfLength3(), G4Trap::GetXHalfLength4(), G4Trap::GetYHalfLength1(), G4Trap::GetYHalfLength2(), G4Trap::GetZHalfLength(), mm, G4GDMLWrite::NewAttribute(), G4GDMLWrite::NewElement(), CLHEP::Hep3Vector::x(), CLHEP::Hep3Vector::y(), and CLHEP::Hep3Vector::z().

Referenced by G4GDMLWriteParamvol::ParametersWrite().

◆ TrapWrite()

void G4GDMLWriteSolids::TrapWrite ( xercesc::DOMElement *  solElement,
const G4Trap * const  trap 
)
protectedinherited

Definition at line 812 of file G4GDMLWriteSolids.cc.

814{
815 const G4String& name = GenerateName(trap->GetName(), trap);
816
817 const G4ThreeVector& simaxis = trap->GetSymAxis();
818 const G4double phi = simaxis.phi();
819 const G4double theta = simaxis.theta();
820 const G4double alpha1 = std::atan(trap->GetTanAlpha1());
821 const G4double alpha2 = std::atan(trap->GetTanAlpha2());
822
823 xercesc::DOMElement* trapElement = NewElement("trap");
824 trapElement->setAttributeNode(NewAttribute("name", name));
825 trapElement->setAttributeNode(
826 NewAttribute("z", 2.0 * trap->GetZHalfLength() / mm));
827 trapElement->setAttributeNode(NewAttribute("theta", theta / degree));
828 trapElement->setAttributeNode(NewAttribute("phi", phi / degree));
829 trapElement->setAttributeNode(
830 NewAttribute("y1", 2.0 * trap->GetYHalfLength1() / mm));
831 trapElement->setAttributeNode(
832 NewAttribute("x1", 2.0 * trap->GetXHalfLength1() / mm));
833 trapElement->setAttributeNode(
834 NewAttribute("x2", 2.0 * trap->GetXHalfLength2() / mm));
835 trapElement->setAttributeNode(NewAttribute("alpha1", alpha1 / degree));
836 trapElement->setAttributeNode(
837 NewAttribute("y2", 2.0 * trap->GetYHalfLength2() / mm));
838 trapElement->setAttributeNode(
839 NewAttribute("x3", 2.0 * trap->GetXHalfLength3() / mm));
840 trapElement->setAttributeNode(
841 NewAttribute("x4", 2.0 * trap->GetXHalfLength4() / mm));
842 trapElement->setAttributeNode(NewAttribute("alpha2", alpha2 / degree));
843 trapElement->setAttributeNode(NewAttribute("aunit", "deg"));
844 trapElement->setAttributeNode(NewAttribute("lunit", "mm"));
845 solElement->appendChild(trapElement);
846}

References alpha2, degree, G4GDMLWrite::GenerateName(), G4VSolid::GetName(), G4Trap::GetSymAxis(), G4Trap::GetTanAlpha1(), G4Trap::GetTanAlpha2(), G4Trap::GetXHalfLength1(), G4Trap::GetXHalfLength2(), G4Trap::GetXHalfLength3(), G4Trap::GetXHalfLength4(), G4Trap::GetYHalfLength1(), G4Trap::GetYHalfLength2(), G4Trap::GetZHalfLength(), mm, G4InuclParticleNames::name(), G4GDMLWrite::NewAttribute(), G4GDMLWrite::NewElement(), CLHEP::Hep3Vector::phi(), and CLHEP::Hep3Vector::theta().

Referenced by G4GDMLWriteSolids::AddSolid().

◆ TraverseVolumeTree()

G4Transform3D G4GDMLWriteStructure::TraverseVolumeTree ( const G4LogicalVolume *const  topVol,
const G4int  depth 
)
protectedvirtual

Implements G4GDMLWrite.

Definition at line 527 of file G4GDMLWriteStructure.cc.

529{
530 if(VolumeMap().find(volumePtr) != VolumeMap().cend())
531 {
532 return VolumeMap()[volumePtr]; // Volume is already processed
533 }
534
535 G4VSolid* solidPtr = volumePtr->GetSolid();
536 G4Transform3D R, invR;
537 G4int trans = 0;
538
539 std::map<const G4LogicalVolume*, G4GDMLAuxListType>::iterator auxiter;
540
541 ++levelNo;
542
543 while(true) // Solve possible displacement/reflection
544 { // of the referenced solid!
545 if(trans > maxTransforms)
546 {
547 G4String ErrorMessage = "Referenced solid in volume '" +
548 volumePtr->GetName() +
549 "' was displaced/reflected too many times!";
550 G4Exception("G4GDMLWriteStructure::TraverseVolumeTree()", "InvalidSetup",
551 FatalException, ErrorMessage);
552 }
553
554 if(G4ReflectedSolid* refl = dynamic_cast<G4ReflectedSolid*>(solidPtr))
555 {
556 R = R * refl->GetTransform3D();
557 solidPtr = refl->GetConstituentMovedSolid();
558 ++trans;
559 continue;
560 }
561
562 if(G4DisplacedSolid* disp = dynamic_cast<G4DisplacedSolid*>(solidPtr))
563 {
564 R = R * G4Transform3D(disp->GetObjectRotation(),
565 disp->GetObjectTranslation());
566 solidPtr = disp->GetConstituentMovedSolid();
567 ++trans;
568 continue;
569 }
570
571 break;
572 }
573
574 // check if it is a reflected volume
575 G4LogicalVolume* tmplv = const_cast<G4LogicalVolume*>(volumePtr);
576
577 if(reflFactory->IsReflected(tmplv))
578 {
579 tmplv = reflFactory->GetConstituentLV(tmplv);
580 if(VolumeMap().find(tmplv) != VolumeMap().cend())
581 {
582 return R; // Volume is already processed
583 }
584 }
585
586 // Only compute the inverse when necessary!
587 //
588 if(trans > 0)
589 {
590 invR = R.inverse();
591 }
592
593 const G4String name = GenerateName(tmplv->GetName(), tmplv);
594
595 G4String materialref = "NULL";
596
597 if(volumePtr->GetMaterial())
598 {
599 materialref = GenerateName(volumePtr->GetMaterial()->GetName(),
600 volumePtr->GetMaterial());
601 }
602
603 const G4String solidref = GenerateName(solidPtr->GetName(), solidPtr);
604
605 xercesc::DOMElement* volumeElement = NewElement("volume");
606 volumeElement->setAttributeNode(NewAttribute("name", name));
607 xercesc::DOMElement* materialrefElement = NewElement("materialref");
608 materialrefElement->setAttributeNode(NewAttribute("ref", materialref));
609 volumeElement->appendChild(materialrefElement);
610 xercesc::DOMElement* solidrefElement = NewElement("solidref");
611 solidrefElement->setAttributeNode(NewAttribute("ref", solidref));
612 volumeElement->appendChild(solidrefElement);
613
614 G4int daughterCount = volumePtr->GetNoDaughters();
615
616 if(levelNo == maxLevel) // Stop exporting if reached levels limit
617 {
618 daughterCount = 0;
619 }
620
621 std::map<G4int, std::vector<G4int> > assemblyIDToAddedImprints;
622
623 for(G4int i = 0; i < daughterCount; ++i) // Traverse all the children!
624 {
625 const G4VPhysicalVolume* const physvol = volumePtr->GetDaughter(i);
626 const G4String ModuleName = Modularize(physvol, depth);
627
628 G4Transform3D daughterR;
629
630 if(ModuleName.empty()) // Check if subtree requested to be
631 { // a separate module!
632 daughterR = TraverseVolumeTree(physvol->GetLogicalVolume(), depth + 1);
633 }
634 else
635 {
637 daughterR = writer.Write(ModuleName, physvol->GetLogicalVolume(),
638 SchemaLocation, depth + 1);
639 }
640
641 if(const G4PVDivision* const divisionvol =
642 dynamic_cast<const G4PVDivision*>(physvol)) // Is it division?
643 {
644 if(!G4Transform3D::Identity.isNear(invR * daughterR, kRelativePrecision))
645 {
646 G4String ErrorMessage = "Division volume in '" + name +
647 "' can not be related to reflected solid!";
648 G4Exception("G4GDMLWriteStructure::TraverseVolumeTree()",
649 "InvalidSetup", FatalException, ErrorMessage);
650 }
651 DivisionvolWrite(volumeElement, divisionvol);
652 }
653 else
654 {
655 if(physvol->IsParameterised()) // Is it a paramvol?
656 {
657 if(!G4Transform3D::Identity.isNear(invR * daughterR,
659 {
660 G4String ErrorMessage = "Parameterised volume in '" + name +
661 "' can not be related to reflected solid!";
662 G4Exception("G4GDMLWriteStructure::TraverseVolumeTree()",
663 "InvalidSetup", FatalException, ErrorMessage);
664 }
665 ParamvolWrite(volumeElement, physvol);
666 }
667 else
668 {
669 if(physvol->IsReplicated()) // Is it a replicavol?
670 {
671 if(!G4Transform3D::Identity.isNear(invR * daughterR,
673 {
674 G4String ErrorMessage = "Replica volume in '" + name +
675 "' can not be related to reflected solid!";
676 G4Exception("G4GDMLWriteStructure::TraverseVolumeTree()",
677 "InvalidSetup", FatalException, ErrorMessage);
678 }
679 ReplicavolWrite(volumeElement, physvol);
680 }
681 else // Is it a physvol or an assembly?
682 {
683 if(assemblyVolMap.find(physvol) != assemblyVolMap.cend())
684 {
685 G4int assemblyID = assemblyVolMap[physvol];
686
687 G4String assemblyref = "Assembly_" + std::to_string(assemblyID);
688
689 // here I need to retrieve the imprint ID
690
691 G4int imprintID = imprintsMap[physvol];
692
693 // there are 2 steps:
694 //
695 // 1) add assembly to the structure if that has not yet been done
696 // (but after the constituents volumes have been added)
697 //
698
699 if(std::find(addedAssemblies.cbegin(), addedAssemblies.cend(),
700 assemblyID) == addedAssemblies.cend())
701 {
702 AssemblyWrite(structureElement, assemblyID);
703 addedAssemblies.push_back(assemblyID);
704 assemblyIDToAddedImprints[assemblyID] = std::vector<G4int>();
705 }
706
707 // 2) add the assembly (as physical volume) to the mother volume
708 // (but only once), using it's original position and rotation.
709 //
710
711 // here I need a check if assembly has been already added to the
712 // mother volume
713 std::vector<G4int>& addedImprints = assemblyIDToAddedImprints[assemblyID];
714 if(std::find(addedImprints.cbegin(), addedImprints.cend(),
715 imprintID) == addedImprints.cend())
716 {
717 G4String imprintname = "Imprint_" + std::to_string(imprintID) + "_";
718 imprintname = GenerateName(imprintname, physvol);
719
720 // I need to get those two from the container of imprints from
721 // the assembly I have the imprint ID, I need to get pos and rot
722 //
724 ->GetAssembly(assemblyID)
725 ->GetImprintTransformation(imprintID);
726
727 HepGeom::Scale3D scale;
728 HepGeom::Rotate3D rotate;
729 HepGeom::Translate3D translate;
730
731 transf.getDecomposition(scale, rotate, translate);
732
733 const G4ThreeVector scl(scale(0, 0), scale(1, 1), scale(2, 2));
734 const G4ThreeVector rot = GetAngles(rotate.getRotation().inverse());
735 const G4ThreeVector pos = transf.getTranslation();
736
737 // here I need a normal physvol referencing to my assemblyref
738
739 xercesc::DOMElement* physvolElement = NewElement("physvol");
740 physvolElement->setAttributeNode(NewAttribute("name", imprintname));
741
742 xercesc::DOMElement* volumerefElement = NewElement("volumeref");
743 volumerefElement->setAttributeNode(NewAttribute("ref", assemblyref));
744 physvolElement->appendChild(volumerefElement);
745
746 if(std::fabs(pos.x()) > kLinearPrecision ||
747 std::fabs(pos.y()) > kLinearPrecision ||
748 std::fabs(pos.z()) > kLinearPrecision)
749 {
750 PositionWrite(physvolElement, imprintname + "_pos", pos);
751 }
752 if(std::fabs(rot.x()) > kAngularPrecision ||
753 std::fabs(rot.y()) > kAngularPrecision ||
754 std::fabs(rot.z()) > kAngularPrecision)
755 {
756 RotationWrite(physvolElement, imprintname + "_rot", rot);
757 }
758 if(std::fabs(scl.x() - 1.0) > kRelativePrecision ||
759 std::fabs(scl.y() - 1.0) > kRelativePrecision ||
760 std::fabs(scl.z() - 1.0) > kRelativePrecision)
761 {
762 ScaleWrite(physvolElement, name + "_scl", scl);
763 }
764
765 volumeElement->appendChild(physvolElement);
766 //
767 addedImprints.push_back(imprintID);
768 }
769 }
770 else // not part of assembly, so a normal physical volume
771 {
773 if(physvol->GetFrameRotation() != nullptr)
774 {
775 rot = *(physvol->GetFrameRotation());
776 }
777 G4Transform3D P(rot, physvol->GetObjectTranslation());
778
779 PhysvolWrite(volumeElement, physvol, invR * P * daughterR,
780 ModuleName);
781 }
782 }
783 }
784 }
785 // BorderSurfaceCache(GetBorderSurface(physvol));
786 GetBorderSurface(physvol);
787 }
788
789 if(cexport)
790 {
791 ExportEnergyCuts(volumePtr);
792 }
793 // Add optional energy cuts
794
795 if(sdexport)
796 {
797 ExportSD(volumePtr);
798 }
799 // Add optional SDs
800
801 // Here write the auxiliary info
802 //
803 auxiter = auxmap.find(volumePtr);
804 if(auxiter != auxmap.cend())
805 {
806 AddAuxInfo(&(auxiter->second), volumeElement);
807 }
808
809 structureElement->appendChild(volumeElement);
810 // Append the volume AFTER traversing the children so that
811 // the order of volumes will be correct!
812
813 VolumeMap()[tmplv] = R;
814
815 AddExtension(volumeElement, volumePtr);
816 // Add any possible user defined extension attached to a volume
817
818 AddMaterial(volumePtr->GetMaterial());
819 // Add the involved materials and solids!
820
821 AddSolid(solidPtr);
822
824
825 return R;
826}
HepGeom::Transform3D G4Transform3D
HepRotation inverse() const
G4Transform3D & GetImprintTransformation(unsigned int imprintID)
void AddMaterial(const G4Material *const)
virtual void ParamvolWrite(xercesc::DOMElement *, const G4VPhysicalVolume *const)
const G4LogicalBorderSurface * GetBorderSurface(const G4VPhysicalVolume *const)
void AssemblyWrite(xercesc::DOMElement *, const int assemblyID)
std::vector< G4int > addedAssemblies
void SkinSurfaceCache(const G4LogicalSkinSurface *const)
const G4LogicalSkinSurface * GetSkinSurface(const G4LogicalVolume *const)
void PhysvolWrite(xercesc::DOMElement *, const G4VPhysicalVolume *const topVol, const G4Transform3D &transform, const G4String &moduleName)
void ExportEnergyCuts(const G4LogicalVolume *const)
void ExportSD(const G4LogicalVolume *const)
void DivisionvolWrite(xercesc::DOMElement *, const G4PVDivision *const)
void ReplicavolWrite(xercesc::DOMElement *, const G4VPhysicalVolume *const)
G4String SchemaLocation
Definition: G4GDMLWrite.hh:130
G4String Modularize(const G4VPhysicalVolume *const topvol, const G4int depth)
Definition: G4GDMLWrite.cc:377
virtual void AddExtension(xercesc::DOMElement *, const G4LogicalVolume *const)
Definition: G4GDMLWrite.cc:80
G4Transform3D Write(const G4String &filename, const G4LogicalVolume *const topLog, const G4String &schemaPath, const G4int depth, G4bool storeReferences=true)
Definition: G4GDMLWrite.cc:203
VolumeMapType & VolumeMap()
Definition: G4GDMLWrite.cc:60
virtual G4bool IsReplicated() const =0
const G4RotationMatrix * GetFrameRotation() const
virtual G4bool IsParameterised() const =0
static DLL_API const Transform3D Identity
Definition: Transform3D.h:196
Transform3D inverse() const
Definition: Transform3D.cc:141

References G4GDMLWrite::AddAuxInfo(), addedAssemblies, G4GDMLWrite::AddExtension(), G4GDMLWriteMaterials::AddMaterial(), G4GDMLWriteSolids::AddSolid(), assemblyVolMap, AssemblyWrite(), auxmap, cexport, DivisionvolWrite(), ExportEnergyCuts(), ExportSD(), FatalException, G4Exception(), G4GDMLWrite::GenerateName(), G4GDMLWriteDefine::GetAngles(), G4AssemblyStore::GetAssembly(), GetBorderSurface(), G4ReflectionFactory::GetConstituentLV(), G4LogicalVolume::GetDaughter(), HepGeom::Transform3D::getDecomposition(), G4VPhysicalVolume::GetFrameRotation(), G4AssemblyVolume::GetImprintTransformation(), G4AssemblyStore::GetInstance(), G4VPhysicalVolume::GetLogicalVolume(), G4LogicalVolume::GetMaterial(), G4LogicalVolume::GetName(), G4VSolid::GetName(), G4Material::GetName(), G4LogicalVolume::GetNoDaughters(), G4VPhysicalVolume::GetObjectTranslation(), HepGeom::Transform3D::getRotation(), GetSkinSurface(), G4LogicalVolume::GetSolid(), HepGeom::Transform3D::getTranslation(), HepGeom::Transform3D::Identity, imprintsMap, HepGeom::Transform3D::inverse(), CLHEP::HepRotation::inverse(), G4VPhysicalVolume::IsParameterised(), G4ReflectionFactory::IsReflected(), G4VPhysicalVolume::IsReplicated(), G4GDMLWriteDefine::kAngularPrecision, G4GDMLWriteDefine::kLinearPrecision, G4GDMLWriteDefine::kRelativePrecision, levelNo, maxLevel, G4GDMLWriteSolids::maxTransforms, G4GDMLWrite::Modularize(), G4InuclParticleNames::name(), G4GDMLWrite::NewAttribute(), G4GDMLWrite::NewElement(), P, G4GDMLWriteParamvol::ParamvolWrite(), PhysvolWrite(), pos, G4GDMLWriteDefine::PositionWrite(), reflFactory, ReplicavolWrite(), G4GDMLWriteDefine::RotationWrite(), G4GDMLWriteDefine::ScaleWrite(), G4GDMLWrite::SchemaLocation, sdexport, SkinSurfaceCache(), structureElement, TraverseVolumeTree(), G4GDMLWrite::VolumeMap(), G4GDMLWrite::Write(), CLHEP::Hep3Vector::x(), CLHEP::Hep3Vector::y(), and CLHEP::Hep3Vector::z().

Referenced by AssemblyWrite(), and TraverseVolumeTree().

◆ Trd_dimensionsWrite()

void G4GDMLWriteParamvol::Trd_dimensionsWrite ( xercesc::DOMElement *  parametersElement,
const G4Trd * const  trd 
)
protectedinherited

Definition at line 80 of file G4GDMLWriteParamvol.cc.

82{
83 xercesc::DOMElement* trd_dimensionsElement = NewElement("trd_dimensions");
84 trd_dimensionsElement->setAttributeNode(
85 NewAttribute("x1", 2.0 * trd->GetXHalfLength1() / mm));
86 trd_dimensionsElement->setAttributeNode(
87 NewAttribute("x2", 2.0 * trd->GetXHalfLength2() / mm));
88 trd_dimensionsElement->setAttributeNode(
89 NewAttribute("y1", 2.0 * trd->GetYHalfLength1() / mm));
90 trd_dimensionsElement->setAttributeNode(
91 NewAttribute("y2", 2.0 * trd->GetYHalfLength2() / mm));
92 trd_dimensionsElement->setAttributeNode(
93 NewAttribute("z", 2.0 * trd->GetZHalfLength() / mm));
94 trd_dimensionsElement->setAttributeNode(NewAttribute("lunit", "mm"));
95 parametersElement->appendChild(trd_dimensionsElement);
96}
G4double GetXHalfLength2() const
G4double GetYHalfLength2() const
G4double GetXHalfLength1() const
G4double GetYHalfLength1() const
G4double GetZHalfLength() const

References G4Trd::GetXHalfLength1(), G4Trd::GetXHalfLength2(), G4Trd::GetYHalfLength1(), G4Trd::GetYHalfLength2(), G4Trd::GetZHalfLength(), mm, G4GDMLWrite::NewAttribute(), and G4GDMLWrite::NewElement().

Referenced by G4GDMLWriteParamvol::ParametersWrite().

◆ TrdWrite()

void G4GDMLWriteSolids::TrdWrite ( xercesc::DOMElement *  solElement,
const G4Trd * const  trd 
)
protectedinherited

Definition at line 849 of file G4GDMLWriteSolids.cc.

851{
852 const G4String& name = GenerateName(trd->GetName(), trd);
853
854 xercesc::DOMElement* trdElement = NewElement("trd");
855 trdElement->setAttributeNode(NewAttribute("name", name));
856 trdElement->setAttributeNode(
857 NewAttribute("x1", 2.0 * trd->GetXHalfLength1() / mm));
858 trdElement->setAttributeNode(
859 NewAttribute("x2", 2.0 * trd->GetXHalfLength2() / mm));
860 trdElement->setAttributeNode(
861 NewAttribute("y1", 2.0 * trd->GetYHalfLength1() / mm));
862 trdElement->setAttributeNode(
863 NewAttribute("y2", 2.0 * trd->GetYHalfLength2() / mm));
864 trdElement->setAttributeNode(
865 NewAttribute("z", 2.0 * trd->GetZHalfLength() / mm));
866 trdElement->setAttributeNode(NewAttribute("lunit", "mm"));
867 solElement->appendChild(trdElement);
868}

References G4GDMLWrite::GenerateName(), G4VSolid::GetName(), G4Trd::GetXHalfLength1(), G4Trd::GetXHalfLength2(), G4Trd::GetYHalfLength1(), G4Trd::GetYHalfLength2(), G4Trd::GetZHalfLength(), mm, G4InuclParticleNames::name(), G4GDMLWrite::NewAttribute(), and G4GDMLWrite::NewElement().

Referenced by G4GDMLWriteSolids::AddSolid().

◆ Tube_dimensionsWrite()

void G4GDMLWriteParamvol::Tube_dimensionsWrite ( xercesc::DOMElement *  parametersElement,
const G4Tubs * const  tube 
)
protectedinherited

Definition at line 137 of file G4GDMLWriteParamvol.cc.

139{
140 xercesc::DOMElement* tube_dimensionsElement = NewElement("tube_dimensions");
141 tube_dimensionsElement->setAttributeNode(
142 NewAttribute("InR", tube->GetInnerRadius() / mm));
143 tube_dimensionsElement->setAttributeNode(
144 NewAttribute("OutR", tube->GetOuterRadius() / mm));
145 tube_dimensionsElement->setAttributeNode(
146 NewAttribute("hz", 2.0 * tube->GetZHalfLength() / mm));
147 tube_dimensionsElement->setAttributeNode(
148 NewAttribute("StartPhi", tube->GetStartPhiAngle() / degree));
149 tube_dimensionsElement->setAttributeNode(
150 NewAttribute("DeltaPhi", tube->GetDeltaPhiAngle() / degree));
151 tube_dimensionsElement->setAttributeNode(NewAttribute("aunit", "deg"));
152 tube_dimensionsElement->setAttributeNode(NewAttribute("lunit", "mm"));
153 parametersElement->appendChild(tube_dimensionsElement);
154}
G4double GetZHalfLength() const
G4double GetInnerRadius() const
G4double GetOuterRadius() const
G4double GetStartPhiAngle() const
G4double GetDeltaPhiAngle() const

References degree, G4Tubs::GetDeltaPhiAngle(), G4Tubs::GetInnerRadius(), G4Tubs::GetOuterRadius(), G4Tubs::GetStartPhiAngle(), G4Tubs::GetZHalfLength(), mm, G4GDMLWrite::NewAttribute(), and G4GDMLWrite::NewElement().

Referenced by G4GDMLWriteParamvol::ParametersWrite().

◆ TubeWrite()

void G4GDMLWriteSolids::TubeWrite ( xercesc::DOMElement *  solElement,
const G4Tubs * const  tube 
)
protectedinherited

Definition at line 871 of file G4GDMLWriteSolids.cc.

873{
874 const G4String& name = GenerateName(tube->GetName(), tube);
875
876 xercesc::DOMElement* tubeElement = NewElement("tube");
877 tubeElement->setAttributeNode(NewAttribute("name", name));
878 tubeElement->setAttributeNode(
879 NewAttribute("rmin", tube->GetInnerRadius() / mm));
880 tubeElement->setAttributeNode(
881 NewAttribute("rmax", tube->GetOuterRadius() / mm));
882 tubeElement->setAttributeNode(
883 NewAttribute("z", 2.0 * tube->GetZHalfLength() / mm));
884 tubeElement->setAttributeNode(
885 NewAttribute("startphi", tube->GetStartPhiAngle() / degree));
886 tubeElement->setAttributeNode(
887 NewAttribute("deltaphi", tube->GetDeltaPhiAngle() / degree));
888 tubeElement->setAttributeNode(NewAttribute("aunit", "deg"));
889 tubeElement->setAttributeNode(NewAttribute("lunit", "mm"));
890 solElement->appendChild(tubeElement);
891}

References degree, G4GDMLWrite::GenerateName(), G4Tubs::GetDeltaPhiAngle(), G4Tubs::GetInnerRadius(), G4VSolid::GetName(), G4Tubs::GetOuterRadius(), G4Tubs::GetStartPhiAngle(), G4Tubs::GetZHalfLength(), mm, G4InuclParticleNames::name(), G4GDMLWrite::NewAttribute(), and G4GDMLWrite::NewElement().

Referenced by G4GDMLWriteSolids::AddSolid().

◆ TwistedboxWrite()

void G4GDMLWriteSolids::TwistedboxWrite ( xercesc::DOMElement *  solElement,
const G4TwistedBox * const  twistedbox 
)
protectedinherited

Definition at line 929 of file G4GDMLWriteSolids.cc.

931{
932 const G4String& name = GenerateName(twistedbox->GetName(), twistedbox);
933
934 xercesc::DOMElement* twistedboxElement = NewElement("twistedbox");
935 twistedboxElement->setAttributeNode(NewAttribute("name", name));
936 twistedboxElement->setAttributeNode(
937 NewAttribute("x", 2.0 * twistedbox->GetXHalfLength() / mm));
938 twistedboxElement->setAttributeNode(
939 NewAttribute("y", 2.0 * twistedbox->GetYHalfLength() / mm));
940 twistedboxElement->setAttributeNode(
941 NewAttribute("z", 2.0 * twistedbox->GetZHalfLength() / mm));
942 twistedboxElement->setAttributeNode(
943 NewAttribute("PhiTwist", twistedbox->GetPhiTwist() / degree));
944 twistedboxElement->setAttributeNode(NewAttribute("aunit", "deg"));
945 twistedboxElement->setAttributeNode(NewAttribute("lunit", "mm"));
946 solElement->appendChild(twistedboxElement);
947}
G4double GetPhiTwist() const
Definition: G4TwistedBox.hh:65
G4double GetXHalfLength() const
Definition: G4TwistedBox.hh:62
G4double GetZHalfLength() const
Definition: G4TwistedBox.hh:64
G4double GetYHalfLength() const
Definition: G4TwistedBox.hh:63

References degree, G4GDMLWrite::GenerateName(), G4VSolid::GetName(), G4TwistedBox::GetPhiTwist(), G4TwistedBox::GetXHalfLength(), G4TwistedBox::GetYHalfLength(), G4TwistedBox::GetZHalfLength(), mm, G4InuclParticleNames::name(), G4GDMLWrite::NewAttribute(), and G4GDMLWrite::NewElement().

Referenced by G4GDMLWriteSolids::AddSolid().

◆ TwistedtrapWrite()

void G4GDMLWriteSolids::TwistedtrapWrite ( xercesc::DOMElement *  solElement,
const G4TwistedTrap * const  twistedtrap 
)
protectedinherited

Definition at line 950 of file G4GDMLWriteSolids.cc.

952{
953 const G4String& name = GenerateName(twistedtrap->GetName(), twistedtrap);
954
955 xercesc::DOMElement* twistedtrapElement = NewElement("twistedtrap");
956 twistedtrapElement->setAttributeNode(NewAttribute("name", name));
957 twistedtrapElement->setAttributeNode(
958 NewAttribute("y1", 2.0 * twistedtrap->GetY1HalfLength() / mm));
959 twistedtrapElement->setAttributeNode(
960 NewAttribute("x1", 2.0 * twistedtrap->GetX1HalfLength() / mm));
961 twistedtrapElement->setAttributeNode(
962 NewAttribute("x2", 2.0 * twistedtrap->GetX2HalfLength() / mm));
963 twistedtrapElement->setAttributeNode(
964 NewAttribute("y2", 2.0 * twistedtrap->GetY2HalfLength() / mm));
965 twistedtrapElement->setAttributeNode(
966 NewAttribute("x3", 2.0 * twistedtrap->GetX3HalfLength() / mm));
967 twistedtrapElement->setAttributeNode(
968 NewAttribute("x4", 2.0 * twistedtrap->GetX4HalfLength() / mm));
969 twistedtrapElement->setAttributeNode(
970 NewAttribute("z", 2.0 * twistedtrap->GetZHalfLength() / mm));
971 twistedtrapElement->setAttributeNode(
972 NewAttribute("Alph", twistedtrap->GetTiltAngleAlpha() / degree));
973 twistedtrapElement->setAttributeNode(
974 NewAttribute("Theta", twistedtrap->GetPolarAngleTheta() / degree));
975 twistedtrapElement->setAttributeNode(
976 NewAttribute("Phi", twistedtrap->GetAzimuthalAnglePhi() / degree));
977 twistedtrapElement->setAttributeNode(
978 NewAttribute("PhiTwist", twistedtrap->GetPhiTwist() / degree));
979 twistedtrapElement->setAttributeNode(NewAttribute("aunit", "deg"));
980 twistedtrapElement->setAttributeNode(NewAttribute("lunit", "mm"));
981
982 solElement->appendChild(twistedtrapElement);
983}
G4double GetPolarAngleTheta() const
G4double GetAzimuthalAnglePhi() const
G4double GetTiltAngleAlpha() const
G4double GetZHalfLength() const
G4double GetX1HalfLength() const
G4double GetX2HalfLength() const
G4double GetX3HalfLength() const
G4double GetX4HalfLength() const
G4double GetY2HalfLength() const
G4double GetPhiTwist() const
G4double GetY1HalfLength() const

References degree, G4GDMLWrite::GenerateName(), G4TwistedTrap::GetAzimuthalAnglePhi(), G4VSolid::GetName(), G4TwistedTrap::GetPhiTwist(), G4TwistedTrap::GetPolarAngleTheta(), G4TwistedTrap::GetTiltAngleAlpha(), G4TwistedTrap::GetX1HalfLength(), G4TwistedTrap::GetX2HalfLength(), G4TwistedTrap::GetX3HalfLength(), G4TwistedTrap::GetX4HalfLength(), G4TwistedTrap::GetY1HalfLength(), G4TwistedTrap::GetY2HalfLength(), G4TwistedTrap::GetZHalfLength(), mm, G4InuclParticleNames::name(), G4GDMLWrite::NewAttribute(), and G4GDMLWrite::NewElement().

Referenced by G4GDMLWriteSolids::AddSolid().

◆ TwistedtrdWrite()

void G4GDMLWriteSolids::TwistedtrdWrite ( xercesc::DOMElement *  solElement,
const G4TwistedTrd * const  twistedtrd 
)
protectedinherited

Definition at line 986 of file G4GDMLWriteSolids.cc.

988{
989 const G4String& name = GenerateName(twistedtrd->GetName(), twistedtrd);
990
991 xercesc::DOMElement* twistedtrdElement = NewElement("twistedtrd");
992 twistedtrdElement->setAttributeNode(NewAttribute("name", name));
993 twistedtrdElement->setAttributeNode(
994 NewAttribute("x1", 2.0 * twistedtrd->GetX1HalfLength() / mm));
995 twistedtrdElement->setAttributeNode(
996 NewAttribute("x2", 2.0 * twistedtrd->GetX2HalfLength() / mm));
997 twistedtrdElement->setAttributeNode(
998 NewAttribute("y1", 2.0 * twistedtrd->GetY1HalfLength() / mm));
999 twistedtrdElement->setAttributeNode(
1000 NewAttribute("y2", 2.0 * twistedtrd->GetY2HalfLength() / mm));
1001 twistedtrdElement->setAttributeNode(
1002 NewAttribute("z", 2.0 * twistedtrd->GetZHalfLength() / mm));
1003 twistedtrdElement->setAttributeNode(
1004 NewAttribute("PhiTwist", twistedtrd->GetPhiTwist() / degree));
1005 twistedtrdElement->setAttributeNode(NewAttribute("aunit", "deg"));
1006 twistedtrdElement->setAttributeNode(NewAttribute("lunit", "mm"));
1007 solElement->appendChild(twistedtrdElement);
1008}
G4double GetX2HalfLength() const
Definition: G4TwistedTrd.hh:67
G4double GetY2HalfLength() const
Definition: G4TwistedTrd.hh:69
G4double GetY1HalfLength() const
Definition: G4TwistedTrd.hh:68
G4double GetZHalfLength() const
Definition: G4TwistedTrd.hh:70
G4double GetPhiTwist() const
Definition: G4TwistedTrd.hh:71
G4double GetX1HalfLength() const
Definition: G4TwistedTrd.hh:66

References degree, G4GDMLWrite::GenerateName(), G4VSolid::GetName(), G4TwistedTrd::GetPhiTwist(), G4TwistedTrd::GetX1HalfLength(), G4TwistedTrd::GetX2HalfLength(), G4TwistedTrd::GetY1HalfLength(), G4TwistedTrd::GetY2HalfLength(), G4TwistedTrd::GetZHalfLength(), mm, G4InuclParticleNames::name(), G4GDMLWrite::NewAttribute(), and G4GDMLWrite::NewElement().

Referenced by G4GDMLWriteSolids::AddSolid().

◆ TwistedtubsWrite()

void G4GDMLWriteSolids::TwistedtubsWrite ( xercesc::DOMElement *  solElement,
const G4TwistedTubs * const  twistedtubs 
)
protectedinherited

Definition at line 1011 of file G4GDMLWriteSolids.cc.

1013{
1014 const G4String& name = GenerateName(twistedtubs->GetName(), twistedtubs);
1015
1016 xercesc::DOMElement* twistedtubsElement = NewElement("twistedtubs");
1017 twistedtubsElement->setAttributeNode(NewAttribute("name", name));
1018 twistedtubsElement->setAttributeNode(
1019 NewAttribute("twistedangle", twistedtubs->GetPhiTwist() / degree));
1020 twistedtubsElement->setAttributeNode(
1021 NewAttribute("midinnerrad", twistedtubs->GetInnerRadius() / mm));
1022 twistedtubsElement->setAttributeNode(
1023 NewAttribute("midouterrad", twistedtubs->GetOuterRadius() / mm));
1024 twistedtubsElement->setAttributeNode(
1025 NewAttribute("negativeEndz", twistedtubs->GetEndZ(0) / mm));
1026 twistedtubsElement->setAttributeNode(
1027 NewAttribute("positiveEndz", twistedtubs->GetEndZ(1) / mm));
1028 twistedtubsElement->setAttributeNode(
1029 NewAttribute("phi", twistedtubs->GetDPhi() / degree));
1030 twistedtubsElement->setAttributeNode(NewAttribute("aunit", "deg"));
1031 twistedtubsElement->setAttributeNode(NewAttribute("lunit", "mm"));
1032 solElement->appendChild(twistedtubsElement);
1033}
G4double GetOuterRadius() const
G4double GetPhiTwist() const
G4double GetEndZ(G4int i) const
G4double GetInnerRadius() const
G4double GetDPhi() const

References degree, G4GDMLWrite::GenerateName(), G4TwistedTubs::GetDPhi(), G4TwistedTubs::GetEndZ(), G4TwistedTubs::GetInnerRadius(), G4VSolid::GetName(), G4TwistedTubs::GetOuterRadius(), G4TwistedTubs::GetPhiTwist(), mm, G4InuclParticleNames::name(), G4GDMLWrite::NewAttribute(), and G4GDMLWrite::NewElement().

Referenced by G4GDMLWriteSolids::AddSolid().

◆ TWrite()

void G4GDMLWriteMaterials::TWrite ( xercesc::DOMElement *  element,
const G4double T 
)
protectedinherited

Definition at line 83 of file G4GDMLWriteMaterials.cc.

85{
86 xercesc::DOMElement* TElement = NewElement("T");
87 TElement->setAttributeNode(NewAttribute("unit", "K"));
88 TElement->setAttributeNode(NewAttribute("value", T / kelvin));
89 element->appendChild(TElement);
90}
static constexpr double kelvin
Definition: G4SIunits.hh:274

References kelvin, G4GDMLWrite::NewAttribute(), and G4GDMLWrite::NewElement().

Referenced by G4GDMLWriteMaterials::MaterialWrite().

◆ UserinfoWrite()

void G4GDMLWrite::UserinfoWrite ( xercesc::DOMElement *  gdmlElement)
virtualinherited

Definition at line 118 of file G4GDMLWrite.cc.

119{
120 if(auxList.size() > 0)
121 {
122#ifdef G4VERBOSE
123 G4cout << "G4GDML: Writing userinfo..." << G4endl;
124#endif
125 userinfoElement = NewElement("userinfo");
126 gdmlElement->appendChild(userinfoElement);
128 }
129}
xercesc::DOMElement * userinfoElement
Definition: G4GDMLWrite.hh:134

References G4GDMLWrite::AddAuxInfo(), G4GDMLWrite::auxList, G4cout, G4endl, G4GDMLWrite::NewElement(), and G4GDMLWrite::userinfoElement.

Referenced by G4GDMLWrite::Write().

◆ VolumeMap()

G4GDMLWrite::VolumeMapType & G4GDMLWrite::VolumeMap ( )
protectedinherited

Definition at line 60 of file G4GDMLWrite.cc.

61{
62 static VolumeMapType instance;
63 return instance;
64}
std::map< const G4LogicalVolume *, G4Transform3D > VolumeMapType
Definition: G4GDMLWrite.hh:53

Referenced by TraverseVolumeTree(), and G4GDMLWrite::Write().

◆ Write()

G4Transform3D G4GDMLWrite::Write ( const G4String filename,
const G4LogicalVolume *const  topLog,
const G4String schemaPath,
const G4int  depth,
G4bool  storeReferences = true 
)
inherited

Definition at line 203 of file G4GDMLWrite.cc.

207{
208 SchemaLocation = setSchemaLocation;
209 addPointerToName = refs;
210#ifdef G4VERBOSE
211 if(depth == 0)
212 {
213 G4cout << "G4GDML: Writing '" << fname << "'..." << G4endl;
214 }
215 else
216 {
217 G4cout << "G4GDML: Writing module '" << fname << "'..." << G4endl;
218 }
219#endif
221 {
222 G4String ErrorMessage = "File '" + fname + "' already exists!";
223 G4Exception("G4GDMLWrite::Write()", "InvalidSetup", FatalException,
224 ErrorMessage);
225 }
226
227 VolumeMap().clear(); // The module map is global for all modules,
228 // so clear it only at once!
229
230 XMLCh* tempStr = NULL;
231 tempStr = xercesc::XMLString::transcode("LS");
232 xercesc::DOMImplementationRegistry::getDOMImplementation(tempStr);
233 xercesc::XMLString::release(&tempStr);
234 tempStr = xercesc::XMLString::transcode("Range");
235 xercesc::DOMImplementation* impl =
236 xercesc::DOMImplementationRegistry::getDOMImplementation(tempStr);
237 xercesc::XMLString::release(&tempStr);
238 tempStr = xercesc::XMLString::transcode("gdml");
239 doc = impl->createDocument(0, tempStr, 0);
240 xercesc::XMLString::release(&tempStr);
241 xercesc::DOMElement* gdml = doc->getDocumentElement();
242
243#if XERCES_VERSION_MAJOR >= 3
244 // DOM L3 as per Xerces 3.0 API
245 xercesc::DOMLSSerializer* writer =
246 ((xercesc::DOMImplementationLS*) impl)->createLSSerializer();
247
248 xercesc::DOMConfiguration* dc = writer->getDomConfig();
249 dc->setParameter(xercesc::XMLUni::fgDOMWRTFormatPrettyPrint, true);
250
251#else
252
253 xercesc::DOMWriter* writer =
254 ((xercesc::DOMImplementationLS*) impl)->createDOMWriter();
255
256 if(writer->canSetFeature(xercesc::XMLUni::fgDOMWRTFormatPrettyPrint, true))
257 writer->setFeature(xercesc::XMLUni::fgDOMWRTFormatPrettyPrint, true);
258
259#endif
260
261 gdml->setAttributeNode(
262 NewAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"));
263 gdml->setAttributeNode(
264 NewAttribute("xsi:noNamespaceSchemaLocation", SchemaLocation));
265
266 ExtensionWrite(gdml);
267 DefineWrite(gdml);
268 MaterialsWrite(gdml);
269 SolidsWrite(gdml);
270 StructureWrite(gdml);
271 UserinfoWrite(gdml);
272 SetupWrite(gdml, logvol);
273
274 G4Transform3D R = TraverseVolumeTree(logvol, depth);
275
277 xercesc::XMLFormatTarget* myFormTarget =
278 new xercesc::LocalFileFormatTarget(fname.c_str());
279
280 try
281 {
282#if XERCES_VERSION_MAJOR >= 3
283 // DOM L3 as per Xerces 3.0 API
284 xercesc::DOMLSOutput* theOutput =
285 ((xercesc::DOMImplementationLS*) impl)->createLSOutput();
286 theOutput->setByteStream(myFormTarget);
287 writer->write(doc, theOutput);
288#else
289 writer->writeNode(myFormTarget, *doc);
290#endif
291 } catch(const xercesc::XMLException& toCatch)
292 {
293 char* message = xercesc::XMLString::transcode(toCatch.getMessage());
294 G4cout << "G4GDML: Exception message is: " << message << G4endl;
295 xercesc::XMLString::release(&message);
297 } catch(const xercesc::DOMException& toCatch)
298 {
299 char* message = xercesc::XMLString::transcode(toCatch.msg);
300 G4cout << "G4GDML: Exception message is: " << message << G4endl;
301 xercesc::XMLString::release(&message);
303 } catch(...)
304 {
305 G4cout << "G4GDML: Unexpected Exception!" << G4endl;
307 }
308
309 delete myFormTarget;
310 writer->release();
311
312 if(depth == 0)
313 {
314 G4cout << "G4GDML: Writing '" << fname << "' done !" << G4endl;
315 }
316 else
317 {
318#ifdef G4VERBOSE
319 G4cout << "G4GDML: Writing module '" << fname << "' done !" << G4endl;
320#endif
321 }
322
323 return R;
324}
virtual void SurfacesWrite()=0
virtual void MaterialsWrite(xercesc::DOMElement *)=0
G4bool FileExists(const G4String &) const
Definition: G4GDMLWrite.cc:53
virtual void SetupWrite(xercesc::DOMElement *, const G4LogicalVolume *const)=0
virtual G4Transform3D TraverseVolumeTree(const G4LogicalVolume *const, const G4int)=0
virtual void DefineWrite(xercesc::DOMElement *)=0
virtual void UserinfoWrite(xercesc::DOMElement *)
Definition: G4GDMLWrite.cc:118
virtual void ExtensionWrite(xercesc::DOMElement *)
Definition: G4GDMLWrite.cc:88
virtual void SolidsWrite(xercesc::DOMElement *)=0
virtual void StructureWrite(xercesc::DOMElement *)=0

References G4GDMLWrite::addPointerToName, G4GDMLWrite::DefineWrite(), G4GDMLWrite::doc, G4GDMLWrite::ExtensionWrite(), FatalException, G4GDMLWrite::FileExists(), test::fname, G4cout, G4endl, G4Exception(), HepGeom::Transform3D::Identity, G4GDMLWrite::MaterialsWrite(), G4GDMLWrite::NewAttribute(), G4GDMLWrite::overwriteOutputFile, G4GDMLWrite::SchemaLocation, G4GDMLWrite::SetupWrite(), G4GDMLWrite::SolidsWrite(), G4GDMLWrite::StructureWrite(), G4GDMLWrite::SurfacesWrite(), G4GDMLWrite::TraverseVolumeTree(), G4GDMLWrite::UserinfoWrite(), and G4GDMLWrite::VolumeMap().

Referenced by TraverseVolumeTree().

◆ XtruWrite()

void G4GDMLWriteSolids::XtruWrite ( xercesc::DOMElement *  solElement,
const G4ExtrudedSolid * const  xtru 
)
protectedinherited

Definition at line 393 of file G4GDMLWriteSolids.cc.

395{
396 const G4String& name = GenerateName(xtru->GetName(), xtru);
397
398 xercesc::DOMElement* xtruElement = NewElement("xtru");
399 xtruElement->setAttributeNode(NewAttribute("name", name));
400 xtruElement->setAttributeNode(NewAttribute("lunit", "mm"));
401 solElement->appendChild(xtruElement);
402
403 const G4int NumVertex = xtru->GetNofVertices();
404
405 for(G4int i = 0; i < NumVertex; ++i)
406 {
407 xercesc::DOMElement* twoDimVertexElement = NewElement("twoDimVertex");
408 xtruElement->appendChild(twoDimVertexElement);
409
410 const G4TwoVector& vertex = xtru->GetVertex(i);
411
412 twoDimVertexElement->setAttributeNode(NewAttribute("x", vertex.x() / mm));
413 twoDimVertexElement->setAttributeNode(NewAttribute("y", vertex.y() / mm));
414 }
415
416 const G4int NumSection = xtru->GetNofZSections();
417
418 for(G4int i = 0; i < NumSection; ++i)
419 {
420 xercesc::DOMElement* sectionElement = NewElement("section");
421 xtruElement->appendChild(sectionElement);
422
423 const G4ExtrudedSolid::ZSection section = xtru->GetZSection(i);
424
425 sectionElement->setAttributeNode(NewAttribute("zOrder", i));
426 sectionElement->setAttributeNode(
427 NewAttribute("zPosition", section.fZ / mm));
428 sectionElement->setAttributeNode(
429 NewAttribute("xOffset", section.fOffset.x() / mm));
430 sectionElement->setAttributeNode(
431 NewAttribute("yOffset", section.fOffset.y() / mm));
432 sectionElement->setAttributeNode(
433 NewAttribute("scalingFactor", section.fScale));
434 }
435}
double x() const
double y() const
ZSection GetZSection(G4int index) const
G4int GetNofZSections() const
G4int GetNofVertices() const
G4TwoVector GetVertex(G4int index) const

References G4ExtrudedSolid::ZSection::fOffset, G4ExtrudedSolid::ZSection::fScale, G4ExtrudedSolid::ZSection::fZ, G4GDMLWrite::GenerateName(), G4VSolid::GetName(), G4ExtrudedSolid::GetNofVertices(), G4ExtrudedSolid::GetNofZSections(), G4ExtrudedSolid::GetVertex(), G4ExtrudedSolid::GetZSection(), mm, G4InuclParticleNames::name(), G4GDMLWrite::NewAttribute(), G4GDMLWrite::NewElement(), CLHEP::Hep2Vector::x(), and CLHEP::Hep2Vector::y().

Referenced by G4GDMLWriteSolids::AddSolid().

◆ ZplaneWrite()

void G4GDMLWriteSolids::ZplaneWrite ( xercesc::DOMElement *  element,
const G4double z,
const G4double rmin,
const G4double rmax 
)
protectedinherited

Definition at line 1036 of file G4GDMLWriteSolids.cc.

1039{
1040 xercesc::DOMElement* zplaneElement = NewElement("zplane");
1041 zplaneElement->setAttributeNode(NewAttribute("z", z / mm));
1042 zplaneElement->setAttributeNode(NewAttribute("rmin", rmin / mm));
1043 zplaneElement->setAttributeNode(NewAttribute("rmax", rmax / mm));
1044 element->appendChild(zplaneElement);
1045}

References mm, G4GDMLWrite::NewAttribute(), and G4GDMLWrite::NewElement().

Referenced by G4GDMLWriteParamvol::Polycone_dimensionsWrite(), G4GDMLWriteSolids::PolyconeWrite(), G4GDMLWriteParamvol::Polyhedra_dimensionsWrite(), and G4GDMLWriteSolids::PolyhedraWrite().

Field Documentation

◆ addedAssemblies

std::vector<G4int> G4GDMLWriteStructure::addedAssemblies
private

Definition at line 115 of file G4GDMLWriteStructure.hh.

Referenced by TraverseVolumeTree().

◆ addPointerToName

G4bool G4GDMLWrite::addPointerToName = true
staticprotectedinherited

◆ assemblyVolMap

std::map<const G4VPhysicalVolume*, G4int> G4GDMLWriteStructure::assemblyVolMap
private

Definition at line 111 of file G4GDMLWriteStructure.hh.

Referenced by StructureWrite(), and TraverseVolumeTree().

◆ auxList

G4GDMLAuxListType G4GDMLWrite::auxList
protectedinherited

Definition at line 136 of file G4GDMLWrite.hh.

Referenced by G4GDMLWrite::AddAuxiliary(), and G4GDMLWrite::UserinfoWrite().

◆ auxmap

std::map<const G4LogicalVolume*, G4GDMLAuxListType> G4GDMLWriteStructure::auxmap
protected

Definition at line 94 of file G4GDMLWriteStructure.hh.

Referenced by AddVolumeAuxiliary(), and TraverseVolumeTree().

◆ borderElementVec

std::vector<xercesc::DOMElement*> G4GDMLWriteStructure::borderElementVec
protected

Definition at line 92 of file G4GDMLWriteStructure.hh.

Referenced by BorderSurfaceCache(), and SurfacesWrite().

◆ cexport

G4bool G4GDMLWriteStructure::cexport = false
private

Definition at line 102 of file G4GDMLWriteStructure.hh.

Referenced by SetEnergyCutsExport(), and TraverseVolumeTree().

◆ defineElement

xercesc::DOMElement* G4GDMLWriteDefine::defineElement = nullptr
protectedinherited

◆ doc

xercesc::DOMDocument* G4GDMLWrite::doc = nullptr
protectedinherited

◆ elementList

std::vector<const G4Element*> G4GDMLWriteMaterials::elementList
protectedinherited

◆ extElement

xercesc::DOMElement* G4GDMLWrite::extElement = nullptr
protectedinherited

Definition at line 133 of file G4GDMLWrite.hh.

◆ imprintsMap

std::map<const G4VPhysicalVolume*, G4int> G4GDMLWriteStructure::imprintsMap
private

Definition at line 113 of file G4GDMLWriteStructure.hh.

Referenced by StructureWrite(), and TraverseVolumeTree().

◆ isotopeList

std::vector<const G4Isotope*> G4GDMLWriteMaterials::isotopeList
protectedinherited

◆ kAngularPrecision

const G4double G4GDMLWriteDefine::kAngularPrecision = DBL_EPSILON
staticprotectedinherited

◆ kLinearPrecision

const G4double G4GDMLWriteDefine::kLinearPrecision = DBL_EPSILON
staticprotectedinherited

◆ kRelativePrecision

const G4double G4GDMLWriteDefine::kRelativePrecision = DBL_EPSILON
staticprotectedinherited

◆ levelNo

G4int G4GDMLWriteStructure::levelNo = 0
staticprivate

Definition at line 108 of file G4GDMLWriteStructure.hh.

Referenced by SetMaxExportLevel(), and TraverseVolumeTree().

◆ materialList

std::vector<const G4Material*> G4GDMLWriteMaterials::materialList
protectedinherited

◆ materialsElement

xercesc::DOMElement* G4GDMLWriteMaterials::materialsElement = nullptr
protectedinherited

◆ maxLevel

G4int G4GDMLWriteStructure::maxLevel = 0
private

◆ maxTransforms

const G4int G4GDMLWriteSolids::maxTransforms = 8
staticprotectedinherited

Definition at line 147 of file G4GDMLWriteSolids.hh.

Referenced by G4GDMLWriteSolids::BooleanWrite(), and TraverseVolumeTree().

◆ opt_vec

std::vector<const G4OpticalSurface*> G4GDMLWriteStructure::opt_vec
private

Definition at line 98 of file G4GDMLWriteStructure.hh.

Referenced by FindOpticalSurface().

◆ overwriteOutputFile

G4bool G4GDMLWrite::overwriteOutputFile = false
protectedinherited

Definition at line 137 of file G4GDMLWrite.hh.

Referenced by G4GDMLWrite::SetOutputFileOverwrite(), and G4GDMLWrite::Write().

◆ propertyList

std::vector<const G4PhysicsFreeVector*> G4GDMLWriteMaterials::propertyList
protectedinherited

◆ reflFactory

G4ReflectionFactory* G4GDMLWriteStructure::reflFactory = nullptr
private

Definition at line 100 of file G4GDMLWriteStructure.hh.

Referenced by G4GDMLWriteStructure(), PhysvolWrite(), and TraverseVolumeTree().

◆ SchemaLocation

G4String G4GDMLWrite::SchemaLocation
protectedinherited

Definition at line 130 of file G4GDMLWrite.hh.

Referenced by TraverseVolumeTree(), and G4GDMLWrite::Write().

◆ sdexport

G4bool G4GDMLWriteStructure::sdexport = false
private

Definition at line 104 of file G4GDMLWriteStructure.hh.

Referenced by SetSDExport(), and TraverseVolumeTree().

◆ skinElementVec

std::vector<xercesc::DOMElement*> G4GDMLWriteStructure::skinElementVec
protected

Definition at line 93 of file G4GDMLWriteStructure.hh.

Referenced by SkinSurfaceCache(), and SurfacesWrite().

◆ solidList

std::vector<const G4VSolid*> G4GDMLWriteSolids::solidList
protectedinherited

◆ solidsElement

xercesc::DOMElement* G4GDMLWriteSolids::solidsElement = nullptr
protectedinherited

◆ structureElement

xercesc::DOMElement* G4GDMLWriteStructure::structureElement = nullptr
protected

Definition at line 91 of file G4GDMLWriteStructure.hh.

Referenced by StructureWrite(), SurfacesWrite(), and TraverseVolumeTree().

◆ userinfoElement

xercesc::DOMElement* G4GDMLWrite::userinfoElement = nullptr
protectedinherited

Definition at line 134 of file G4GDMLWrite.hh.

Referenced by G4GDMLWrite::UserinfoWrite().


The documentation for this class was generated from the following files: