Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-11-05 08:53:35

0001 // This file is part of the ACTS project.
0002 //
0003 // Copyright (C) 2016 CERN for the benefit of the ACTS project
0004 //
0005 // This Source Code Form is subject to the terms of the Mozilla Public
0006 // License, v. 2.0. If a copy of the MPL was not distributed with this
0007 // file, You can obtain one at https://mozilla.org/MPL/2.0/.
0008 
0009 #pragma once
0010 
0011 #include <any>
0012 
0013 namespace Acts {
0014 
0015 class Surface;
0016 
0017 namespace Experimental {
0018 
0019 class Portal;
0020 class DetectorVolume;
0021 
0022 /// @brief This is the interface for generating geometry ids and assign them
0023 /// to detector volumes, portals and surfaces
0024 ///
0025 class IGeometryIdGenerator {
0026  public:
0027   /// Type alias for geometry ID cache storage
0028   using GeoIdCache = std::any;
0029 
0030   virtual ~IGeometryIdGenerator() = default;
0031 
0032   /// @brief  Virtual interface method to generate a geometry id cache
0033   /// @return a geometry id cache wrapped in a std::any object
0034   virtual GeoIdCache generateCache() const = 0;
0035 
0036   /// The virtual interface definition for assigning a geometry id to
0037   /// a detector volume
0038   ///
0039   /// @param cache is the cache object for e.g. object counting
0040   /// @param dVolume the detector volume to assign the geometry id to
0041   virtual void assignGeometryId(GeoIdCache& cache,
0042                                 DetectorVolume& dVolume) const = 0;
0043 
0044   /// The virtual interface definition for assigning a geometry id to
0045   /// a portal
0046   ///
0047   /// @param cache is the cache object for e.g. object counting
0048   /// @param portal the portal to assign the geometry id to
0049   virtual void assignGeometryId(GeoIdCache& cache, Portal& portal) const = 0;
0050 
0051   /// @brief  The virtual interface definition for assigning a geometry id to
0052   /// a surface
0053   ///
0054   /// @param cache is the cache object for e.g. object counting
0055   /// @param surface the surface to assign the geometry id to
0056   virtual void assignGeometryId(GeoIdCache& cache, Surface& surface) const = 0;
0057 };
0058 
0059 }  // namespace Experimental
0060 }  // namespace Acts