File indexing completed on 2025-01-18 09:55:25
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 #ifndef DDG4_GEANT4VOLUMEMANAGER_H
0014 #define DDG4_GEANT4VOLUMEMANAGER_H
0015
0016
0017 #include <DD4hep/Detector.h>
0018 #include <DD4hep/IDDescriptor.h>
0019 #include <DDG4/Geant4Primitives.h>
0020
0021 #include <G4VTouchable.hh>
0022
0023 class G4VPhysicalVolume;
0024
0025
0026
0027 namespace dd4hep {
0028
0029
0030 namespace sim {
0031
0032
0033 class Geant4VolumeManager;
0034 class Geant4GeometryInfo;
0035
0036
0037
0038
0039
0040
0041
0042 class Geant4VolumeManager : public Handle<Geant4GeometryInfo> {
0043 protected:
0044
0045 bool checkValidity() const;
0046
0047 public:
0048 static const VolumeID InvalidPath = VolumeID(-1LL);
0049 static const VolumeID Insensitive = VolumeID(-2LL);
0050 static const VolumeID NonExisting = 0ULL;
0051
0052
0053 Geant4VolumeManager(const Detector& description, Geant4GeometryInfo* info);
0054
0055 Geant4VolumeManager() = default;
0056
0057 Geant4VolumeManager(const Handle<Geant4GeometryInfo>& e)
0058 : Handle<Geant4GeometryInfo>(e) { }
0059
0060 Geant4VolumeManager(const Geant4VolumeManager& e) = default;
0061
0062 template <typename Q> Geant4VolumeManager(const Handle<Q>& e)
0063 : Handle<Geant4GeometryInfo>(e) {
0064 }
0065
0066 Geant4VolumeManager& operator=(const Geant4VolumeManager& c) = default;
0067
0068
0069 std::vector<const G4VPhysicalVolume*>
0070 placementPath(const G4VTouchable* touchable, bool exception = true) const;
0071
0072
0073
0074 VolumeID volumeID(const G4VTouchable* touchable) const;
0075
0076 void volumeDescriptor(const std::vector<const G4VPhysicalVolume*>& path,
0077 std::pair<VolumeID,std::vector<std::pair<const BitFieldElement*, VolumeID> > >& volume_desc) const;
0078
0079 void volumeDescriptor(const G4VTouchable* touchable,
0080 std::pair<VolumeID,std::vector<std::pair<const BitFieldElement*, VolumeID> > >& volume_desc) const;
0081 };
0082
0083 }
0084 }
0085 #endif