Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-07-09 07:49:36

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 <cstddef>
0012 #include <string>
0013 
0014 namespace Acts {
0015 
0016 class Portal;
0017 class TrackingVolume;
0018 class GeometryContext;
0019 
0020 /// @class PortalShellBase
0021 /// The portal shell of a volume is the set of portals that describes
0022 /// connections "outside" of the volume. Which boundary surfaces of a volume are
0023 /// included in the shell depends on the volume. Portal shells are only used
0024 /// during geometry construction, and are not part of the final geometry
0025 /// description.
0026 ///
0027 /// This class is the base class for all portal shells
0028 class PortalShellBase {
0029  public:
0030   /// Virtual destructor
0031   virtual ~PortalShellBase() = default;
0032 
0033   /// Fill the open slots of the shell with a @c TrivialPortalLink
0034   /// to the given @p volume.
0035   /// @param volume The volume to connect
0036   virtual void fill(TrackingVolume& volume) = 0;
0037 
0038   /// Get the number of portals in the shell. This number depends on the volume
0039   /// type
0040   /// @return The number of portals in the shell
0041   virtual std::size_t size() const = 0;
0042 
0043   /// Instruct the shell to register the portals with the volume, handing over
0044   /// shared ownership in the process.
0045   /// @note The target volume depends on the shell type, e.g. composite shells
0046   ///       like the @c CylinerStackPortalShell register portals to the *correct*
0047   ///       volumes.
0048   virtual void applyToVolume() = 0;
0049 
0050   /// Check if a portal is *valid*, e.g. if non of the portals has two
0051   /// unconnected sides.
0052   /// @return True if the shell is valid, false otherwise
0053   virtual bool isValid() const = 0;
0054 
0055   /// Get a label for the portal shell for debugging purposes
0056   /// @return A label for the portal shell
0057   virtual std::string label() const = 0;
0058 };
0059 
0060 }  // namespace Acts