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 // G4tgrVolume 27 // 28 // Class description: 29 // 30 // Abstract base class to manage the geometry info of any volume. 31 // Volumes created in this class contain the information of a detector volume. 32 // They have associated several detector placements that can be instances of 33 // G4tgrPlace, G4tgrPlaceDivision, G4tgrPlaceDivRep or 34 // G4tgrPlaceParameterisation. 35 // Each detector positioning is done inside a parent. As there can be several 36 // parents, one parent for each volume placement will be written, even if that 37 // means that parents are repeated... 38 39 // Author: P.Arce, CIEMAT (November 2007) 40 // -------------------------------------------------------------------- 41 #ifndef G4tgrVolume_hh 42 #define G4tgrVolume_hh 1 43 44 #include <vector> 45 #include <map> 46 47 #include "globals.hh" 48 49 class G4tgrSolid; 50 class G4tgrPlace; 51 class G4tgrPlaceDivRep; 52 class G4tgrPlaceParameterisation; 53 54 class G4tgrVolume 55 { 56 public: 57 58 G4tgrVolume(); 59 G4tgrVolume(const std::vector<G4String>& wl); 60 G4tgrVolume(const G4tgrVolume& vol); 61 virtual ~G4tgrVolume(); 62 63 virtual G4tgrPlace* AddPlace(const std::vector<G4String>& wl); 64 // Add a position with the data read from a ':place' tag 65 66 G4tgrPlaceDivRep* AddPlaceReplica(const std::vector<G4String>& wl); 67 // Add a replicated position 68 69 G4tgrPlaceParameterisation* AddPlaceParam(const std::vector<G4String>& wl); 70 // Add a parameterised position 71 72 void AddVisibility(const std::vector<G4String>& wl); 73 // Add visibility flag 74 75 void AddRGBColour(const std::vector<G4String>& wl); 76 // Add colour 77 78 void AddCheckOverlaps(const std::vector<G4String>& wl); 79 // Add check overlaps flag 80 81 // Accessors 82 83 const G4String& GetName() const { return theName; } 84 void SetName(const G4String& name) { theName = name; } 85 const G4String& GetType() const { return theType; } 86 G4tgrSolid* GetSolid() const { return theSolid; } 87 const G4String& GetMaterialName() const { return theMaterialName; } 88 89 const std::vector<G4tgrPlace*> GetPlacements() const {return thePlacements;} 90 G4bool GetVisibility() const { return theVisibility; } 91 G4double* GetColour() const { return theRGBColour; } 92 G4double* GetRGBColour() const { return theRGBColour; } 93 94 G4bool GetCheckOverlaps() const { return theCheckOverlaps; } 95 96 virtual G4tgrVolume* GetVolume(G4int ii) const; 97 98 friend std::ostream& operator<<(std::ostream& os, const G4tgrVolume& obj); 99 100 protected: 101 102 G4String theName = ""; 103 // Name of the volume 104 G4String theType = ""; 105 // Type of the volume 106 G4String theMaterialName = ""; 107 // Material of which the corresponding PV will be made of 108 G4tgrSolid* theSolid = nullptr; 109 // Solid 110 std::vector<G4tgrPlace*> thePlacements; 111 // Vector of placements 112 113 G4bool theVisibility = false; 114 G4double* theRGBColour = nullptr; 115 G4bool theCheckOverlaps = false; 116 }; 117 118 #endif 119