Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:55:25

0001 //==========================================================================
0002 //  AIDA Detector description implementation 
0003 //--------------------------------------------------------------------------
0004 // Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN)
0005 // All rights reserved.
0006 //
0007 // For the licensing terms see $DD4hepINSTALL/LICENSE.
0008 // For the list of contributors see $DD4hepINSTALL/doc/CREDITS.
0009 //
0010 // Author     : M.Frank
0011 //
0012 //==========================================================================
0013 #ifndef DDG4_GEANT4VOLUMEMANAGER_H
0014 #define DDG4_GEANT4VOLUMEMANAGER_H
0015 
0016 // Framework include files
0017 #include <DD4hep/Detector.h>
0018 #include <DD4hep/IDDescriptor.h>
0019 #include <DDG4/Geant4Primitives.h>
0020 
0021 #include <G4VTouchable.hh>
0022 // Geant4 forward declarations
0023 class G4VPhysicalVolume;
0024 
0025 
0026 /// Namespace for the AIDA detector description toolkit
0027 namespace dd4hep {
0028 
0029   /// Namespace for the Geant4 based simulation part of the AIDA detector description toolkit
0030   namespace sim {
0031 
0032     // Forward declarations
0033     class Geant4VolumeManager;
0034     class Geant4GeometryInfo;
0035 
0036     /// The Geant4VolumeManager to facilitate optimized lookups of cell IDs from touchables.
0037     /** @class Geant4VolumeManager Geant4VolumeManager.h DDG4/Geant4VolumeManager.h
0038      *
0039      * @author  M.Frank
0040      * @version 1.0
0041      */
0042     class Geant4VolumeManager : public Handle<Geant4GeometryInfo>   {
0043     protected:
0044       /// Check the validity of the information before accessing it.
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       /// Initializing constructor. The tree will automatically be built if possible
0053       Geant4VolumeManager(const Detector& description, Geant4GeometryInfo* info);
0054       /// Default constructor
0055       Geant4VolumeManager() = default;
0056       /// Constructor to be used when reading the already parsed object
0057       Geant4VolumeManager(const Handle<Geant4GeometryInfo>& e)
0058         : Handle<Geant4GeometryInfo>(e) {  }
0059       /// Constructor to be used when reading the already parsed object
0060       Geant4VolumeManager(const Geant4VolumeManager& e) = default;
0061       /// Constructor to be used when reading the already parsed object
0062       template <typename Q> Geant4VolumeManager(const Handle<Q>& e)
0063         : Handle<Geant4GeometryInfo>(e) {
0064       }
0065       /// Assignment operator
0066       Geant4VolumeManager& operator=(const Geant4VolumeManager& c) = default;
0067 
0068       /// Helper: Generate placement path from touchable object
0069       std::vector<const G4VPhysicalVolume*>
0070       placementPath(const G4VTouchable* touchable, bool exception = true) const;
0071       /// Access CELLID by placement path
0072       //VolumeID volumeID(const std::vector<const G4VPhysicalVolume*>& path) const;
0073       /// Access CELLID by Geant4 touchable object
0074       VolumeID volumeID(const G4VTouchable* touchable) const;
0075       /// Accessfully decoded volume fields  by placement path
0076       void volumeDescriptor(const std::vector<const G4VPhysicalVolume*>& path,
0077                             std::pair<VolumeID,std::vector<std::pair<const BitFieldElement*, VolumeID> > >& volume_desc) const;
0078       /// Access fully decoded volume fields by Geant4 touchable object
0079       void volumeDescriptor(const G4VTouchable* touchable,
0080                             std::pair<VolumeID,std::vector<std::pair<const BitFieldElement*, VolumeID> > >& volume_desc) const;
0081     };
0082 
0083   }    // End namespace sim
0084 }      // End namespace dd4hep
0085 #endif // DDG4_GEANT4VOLUMEMANAGER_H