Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:10:52

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 "Acts/Geometry/GeometryContext.hpp"
0012 #include "Acts/Utilities/AxisDefinitions.hpp"
0013 #include "Acts/Utilities/BinnedArray.hpp"
0014 
0015 #include <memory>
0016 #include <vector>
0017 
0018 namespace Acts {
0019 
0020 class TrackingVolume;
0021 
0022 /// A std::shared_ptr to a tracking volume
0023 using TrackingVolumePtr = std::shared_ptr<const TrackingVolume>;
0024 using MutableTrackingVolumePtr = std::shared_ptr<TrackingVolume>;
0025 
0026 /// A BinnedArray of a std::shared_tr to a TrackingVolume
0027 using TrackingVolumeArray = BinnedArray<TrackingVolumePtr>;
0028 /// A std::vector of a std::shared_ptr to a TrackingVolume
0029 using TrackingVolumeVector = std::vector<TrackingVolumePtr>;
0030 
0031 /// @class ITrackingVolumeArrayCreator
0032 ///
0033 /// Interface class ITrackingVolumeArrayCreators It inherits from IAlgTool.
0034 ///
0035 /// It is designed to centralize the code to create
0036 /// Arrays of Tracking Volumes for both:
0037 ///
0038 ///   - confinement in another TrackingVolume
0039 ///   - navigation and glueing
0040 ///
0041 /// Arrays for glueing and confinement are often the same,
0042 /// therefore the newly created TrackingVolumeArray is done by a shared_ptr
0043 class ITrackingVolumeArrayCreator {
0044  public:
0045   /// Virtual destructor
0046   virtual ~ITrackingVolumeArrayCreator() = default;
0047 
0048   /// TrackingVolumeArrayCreator interface method - creates array depending on
0049   /// the binning type
0050   ///
0051   /// @param [in] gctx the geometry context for this building
0052   /// @param vols are the TrackingVolumes ordered in a tracker
0053   /// @param aDir is the axis direction for the volume binning
0054   ///
0055   /// @return shared pointer to a new TrackingVolumeArray
0056   virtual std::shared_ptr<const TrackingVolumeArray> trackingVolumeArray(
0057       const GeometryContext& gctx, const TrackingVolumeVector& vols,
0058       AxisDirection aDir) const = 0;
0059 };
0060 }  // namespace Acts