File indexing completed on 2025-12-16 10:12:43
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
0022 #include <G4VTouchable.hh>
0023
0024 #include <utility>
0025 #include <vector>
0026
0027
0028 class G4VPhysicalVolume;
0029
0030
0031
0032 namespace dd4hep {
0033
0034
0035 namespace sim {
0036
0037
0038 class Geant4VolumeManager;
0039 class Geant4GeometryInfo;
0040
0041
0042
0043
0044
0045
0046
0047 class Geant4VolumeManager : public Handle<Geant4GeometryInfo> {
0048 protected:
0049
0050 bool checkValidity() const;
0051 protected:
0052 friend class Geant4Mapping;
0053
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 public:
0069 static const VolumeID InvalidPath = VolumeID(-1LL);
0070 static const VolumeID Insensitive = VolumeID(-2LL);
0071 static const VolumeID NonExisting = 0ULL;
0072
0073
0074 Geant4VolumeManager(const Detector& description, Geant4GeometryInfo* info);
0075
0076
0077 std::vector<const G4VPhysicalVolume*>
0078 placementPath(const G4VTouchable* touchable, bool exception = true) const;
0079
0080 VolumeID volumeID(const G4VTouchable* touchable) const;
0081
0082 void volumeDescriptor(const std::vector<const G4VPhysicalVolume*>& path,
0083 std::pair<VolumeID,std::vector<std::pair<const BitFieldElement*, VolumeID> > >& volume_desc) const;
0084
0085 void volumeDescriptor(const G4VTouchable* touchable,
0086 std::pair<VolumeID,std::vector<std::pair<const BitFieldElement*, VolumeID> > >& volume_desc) const;
0087 };
0088 }
0089 }
0090 #endif