Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 // G4GDMLWriteStructure 27 // 28 // Class description: 29 // 30 // GDML class for export of structures. 31 32 // Author: Zoltan Torzsok, November 2007 33 // -------------------------------------------------------------------- 34 #ifndef G4GDMLWRITESTRUCTURE_HH 35 #define G4GDMLWRITESTRUCTURE_HH 1 36 37 #include "G4Types.hh" 38 #include "G4Transform3D.hh" 39 #include "G4GDMLWriteParamvol.hh" 40 41 class G4LogicalVolume; 42 class G4VPhysicalVolume; 43 class G4PVDivision; 44 class G4LogicalBorderSurface; 45 class G4LogicalSkinSurface; 46 class G4OpticalSurface; 47 class G4SurfaceProperty; 48 class G4ReflectionFactory; 49 class G4AssemblyTriplet; 50 51 class G4GDMLWriteStructure : public G4GDMLWriteParamvol 52 { 53 public: 54 55 G4GDMLWriteStructure(); 56 virtual ~G4GDMLWriteStructure(); 57 58 virtual void StructureWrite(xercesc::DOMElement*); 59 void AddVolumeAuxiliary(G4GDMLAuxStructType myaux, 60 const G4LogicalVolume* const); 61 62 void SetEnergyCutsExport(G4bool); 63 void SetSDExport(G4bool); 64 65 G4int GetMaxExportLevel() const; 66 void SetMaxExportLevel(G4int); 67 68 protected: 69 70 void DivisionvolWrite(xercesc::DOMElement*, const G4PVDivision* const); 71 void PhysvolWrite(xercesc::DOMElement*, 72 const G4VPhysicalVolume* const topVol, 73 const G4Transform3D& transform, 74 const G4String& moduleName); 75 void ReplicavolWrite(xercesc::DOMElement*, const G4VPhysicalVolume* const); 76 void AssemblyWrite(xercesc::DOMElement*, const int assemblyID); 77 G4Transform3D TraverseVolumeTree(const G4LogicalVolume* const topVol, 78 const G4int depth); 79 void SurfacesWrite(); 80 void BorderSurfaceCache(const G4LogicalBorderSurface* const); 81 void SkinSurfaceCache(const G4LogicalSkinSurface* const); 82 const G4LogicalBorderSurface* GetBorderSurface( 83 const G4VPhysicalVolume* const); 84 const G4LogicalSkinSurface* GetSkinSurface(const G4LogicalVolume* const); 85 G4bool FindOpticalSurface(const G4SurfaceProperty*); 86 void ExportEnergyCuts(const G4LogicalVolume* const); 87 void ExportSD(const G4LogicalVolume* const); 88 89 protected: 90 91 xercesc::DOMElement* structureElement = nullptr; 92 std::vector<xercesc::DOMElement*> borderElementVec; 93 std::vector<xercesc::DOMElement*> skinElementVec; 94 std::map<const G4LogicalVolume*, G4GDMLAuxListType> auxmap; 95 96 private: // cache for optical surfaces... 97 98 std::vector<const G4OpticalSurface*> opt_vec; 99 100 G4ReflectionFactory* reflFactory = nullptr; 101 102 G4bool cexport = false; 103 // Flag for optional export of energy cuts per volume 104 G4bool sdexport= false; 105 // Flag for optional export of SD per volume 106 G4int maxLevel = 0; 107 // Maximum number of levels to export 108 static G4int levelNo; 109 // Counter for level being exported 110 111 std::map<const G4VPhysicalVolume*, G4int> assemblyVolMap; 112 // Map of phys volumes to assembly IDs 113 std::map<const G4VPhysicalVolume*, G4int> imprintsMap; 114 // Map of phys volumes to imprints IDs 115 std::vector<G4int> addedAssemblies; 116 // Vector of assemblies IDs already added to the structure 117 }; 118 119 #endif 120