Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-09-15 08:13:38

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/Definitions/Algebra.hpp"
0012 #include "Acts/Geometry/ApproachDescriptor.hpp"
0013 #include "Acts/Geometry/Layer.hpp"
0014 #include "Acts/Surfaces/DiscSurface.hpp"
0015 
0016 #include <memory>
0017 
0018 namespace Acts {
0019 
0020 class DiscBounds;
0021 class SurfaceArray;
0022 
0023 /// @class DiscLayer
0024 ///
0025 /// Class to describe a disc-like detector layer for tracking,
0026 /// it inhertis from both, Layer base class
0027 /// and DiscSurface class
0028 
0029 class DiscLayer : virtual public DiscSurface, public Layer {
0030  public:
0031   ///  Factory constructor with DiscSurface components
0032   ///
0033   /// @param transform is the transform to place the layer in the 3D frame
0034   /// @param dbounds are the disc bounds that describe the layer dimensions
0035   /// @param surfaceArray is the array of sensitive surfaces
0036   /// @param thickness is the layer thickness (along the normal vector)
0037   /// @param ad is the approach descriptor that provides the approach surface
0038   /// @param laytyp is the layer type
0039   ///
0040   /// @todo move ApproachDescriptor to unqique_ptr
0041   ///
0042   /// @return a sharted pointer to the new layer
0043   static std::shared_ptr<DiscLayer> create(
0044       const Transform3& transform,
0045       const std::shared_ptr<const DiscBounds>& dbounds,
0046       std::unique_ptr<SurfaceArray> surfaceArray = nullptr,
0047       double thickness = 0., std::unique_ptr<ApproachDescriptor> ad = nullptr,
0048       LayerType laytyp = passive);
0049 
0050   DiscLayer() = delete;
0051   DiscLayer(const DiscLayer& cla) = delete;
0052   ~DiscLayer() override = default;
0053   DiscLayer& operator=(const DiscLayer&) = delete;
0054 
0055   /// Transforms the layer into a Surface representation for extrapolation
0056   /// @return This method returns a surface reference
0057   const DiscSurface& surfaceRepresentation() const override;
0058 
0059   // Non-const version
0060   DiscSurface& surfaceRepresentation() override;
0061 
0062  private:
0063   /// build approach surfaces
0064   void buildApproachDescriptor();
0065 
0066  protected:
0067   // Constructor with DiscSurface components and pointer to SurfaceArray
0068   ///
0069   /// @param transform is the transform to place the layer in the 3D frame
0070   /// @param dbounds are the disc bounds that describe the layer dimensions
0071   /// @param surfaceArray is the array of sensitive surfaces
0072   /// @param thickness is the layer thickness (along the normal vector)
0073   /// @param ades Are the approach descriptors that provides the approach surface
0074   /// @param laytyp is the layer taype
0075   DiscLayer(const Transform3& transform,
0076             const std::shared_ptr<const DiscBounds>& dbounds,
0077             std::unique_ptr<SurfaceArray> surfaceArray = nullptr,
0078             double thickness = 0.,
0079             std::unique_ptr<ApproachDescriptor> ades = nullptr,
0080             LayerType laytyp = active);
0081 
0082   /// Copy constructor with shift
0083   DiscLayer(const DiscLayer& cla, const Transform3& tr);
0084 };
0085 
0086 }  // namespace Acts