Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-02-22 10:32:43

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 //
0014 // NOTE:
0015 //
0016 // This is an internal include file. It should only be included to 
0017 // instantiate code. Otherwise the VolumeManager include file should be
0018 // sufficient for all practical purposes.
0019 //
0020 //==========================================================================
0021 #ifndef DD4HEP_DETAIL_VOLUMEMANAGERINTERNA_H
0022 #define DD4HEP_DETAIL_VOLUMEMANAGERINTERNA_H
0023 
0024 // Framework include files
0025 #include <DD4hep/Volumes.h>
0026 #include <DD4hep/DetElement.h>
0027 #include <DD4hep/IDDescriptor.h>
0028 #include <DD4hep/VolumeManager.h>
0029 
0030 // ROOT include files
0031 #include <TGeoMatrix.h>
0032 
0033 /// Namespace for the AIDA detector description toolkit
0034 namespace dd4hep {
0035 
0036   /// Namespace for implementation details of the AIDA detector description toolkit
0037   namespace detail {
0038 
0039     /// Extended context. Needs to be public for persistency reasons
0040     /**
0041      *
0042      * \author  M.Frank
0043      * \version 1.0
0044      * \ingroup DD4HEP_CORE
0045      */
0046     class VolumeManagerContextExtension : public VolumeManagerContext {
0047     public:
0048       /// The placement of the (sensitive) volume
0049       PlacedVolume placement{0};
0050       /// The transformation of space-points to the coordinate system of the closests detector element
0051       TGeoHMatrix toElement;
0052       /// Default constructor
0053       VolumeManagerContextExtension() = default;
0054       /// Default destructor
0055       ~VolumeManagerContextExtension() = default;
0056     };
0057   
0058     /// This structure describes the internal data of the volume manager object
0059     /**
0060      *
0061      * \author  M.Frank
0062      * \version 1.0
0063      * \ingroup DD4HEP_CORE
0064      */
0065     class VolumeManagerObject: public NamedObject {
0066     public:
0067       /// The container of subdetector elements
0068       std::map<DetElement, VolumeManager>       subdetectors;
0069       /// The volume managers for the individual subdetector elements
0070       std::map<VolumeID, VolumeManager>         managers;
0071       /// The container of placements managed by this instance
0072       std::map<VolumeID, VolumeManagerContext*> volumes;
0073       /// The Detector element handle managed by this instance
0074       DetElement             detector;
0075       /// The ID descriptor object
0076       IDDescriptor           id;
0077       /// The reference to the TOP level VolumeManager
0078       VolumeManagerObject*   top     = 0;
0079       /// The system field descriptor
0080       const BitFieldElement* system  = 0;
0081       /// System identifier
0082       VolumeID               sysID   = 0;
0083       /// Sub-detector mask
0084       VolumeID               detMask = ~0x0ULL;
0085       /// Population flags
0086       int                    flags   = VolumeManager::NONE;
0087     public:
0088       /// Default constructor
0089       VolumeManagerObject() = default;
0090       /// No move constructor
0091       VolumeManagerObject(VolumeManagerObject&& copy) = delete;
0092       /// No copy constructor
0093       VolumeManagerObject(const VolumeManagerObject& copy) = delete;
0094       /// Default destructor
0095       virtual ~VolumeManagerObject();
0096       /// No move assignment
0097       VolumeManagerObject& operator=(VolumeManagerObject&& copy) = delete;
0098       /// No copy assignment
0099       VolumeManagerObject& operator=(const VolumeManagerObject& copy) = delete;
0100       /// Search the locally cached volumes for a matching ID
0101       VolumeManagerContext* search(const VolumeID& id) const;
0102       /// Update callback when alignment has changed (called only for subdetectors....)
0103       void update(unsigned long tags, DetElement& det, void* param);
0104     };
0105 
0106   }       /* End namespace detail                  */
0107 }         /* End namespace dd4hep                  */
0108 #endif // DD4HEP_DETAIL_VOLUMEMANAGERINTERNA_H