Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-09-16 08:12: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/Definitions/Algebra.hpp"
0012 #include "Acts/Geometry/ApproachDescriptor.hpp"
0013 #include "Acts/Geometry/Layer.hpp"
0014 #include "Acts/Surfaces/ConeBounds.hpp"
0015 #include "Acts/Surfaces/ConeSurface.hpp"
0016 
0017 #include <memory>
0018 
0019 namespace Acts {
0020 
0021 class ConeBounds;
0022 class SurfaceArray;
0023 
0024 /// @class ConeLayer
0025 ///
0026 /// Class to describe a conical detector layer for tracking, it inhertis from
0027 /// both, Layer base class and ConeSurface class
0028 class ConeLayer : virtual public ConeSurface, public Layer {
0029  public:
0030   /// Factory for shared layer
0031   ///
0032   /// @param transform is the 3D transform that positions the layer in 3D frame
0033   /// @param cbounds is the conical bound description
0034   /// @param surfaceArray is the array of sensitive surfaces
0035   /// @param thickness is the layer thickness along the normal axis
0036   /// @param ad is the approach descriptor for navigation towards the layer
0037   /// @param laytyp is the layer type
0038   ///
0039   /// @todo change od and ad to unique_ptr
0040   ///
0041   /// @return is a shared pointer to a layer
0042   static std::shared_ptr<ConeLayer> create(
0043       const Transform3& transform, std::shared_ptr<const ConeBounds> cbounds,
0044       std::unique_ptr<SurfaceArray> surfaceArray, double thickness = 0.,
0045       std::unique_ptr<ApproachDescriptor> ad = nullptr,
0046       LayerType laytyp = active);
0047 
0048   ConeLayer() = delete;
0049   ConeLayer(const ConeLayer& cla) = delete;
0050   ~ConeLayer() override = default;
0051   ConeLayer& operator=(const ConeLayer&) = delete;
0052 
0053   /// Transforms the layer into a Surface representation for extrapolation
0054   const ConeSurface& surfaceRepresentation() const override;
0055 
0056   // Non-const version
0057   ConeSurface& surfaceRepresentation() override;
0058 
0059  protected:
0060   /// Private constructor with arguments
0061   ///
0062   /// @param transform is the 3D transform that positions the layer in 3D frame
0063   /// @param cbounds is the conical bound description
0064   /// @param surfaceArray is the array of sensitive surfaces
0065   /// @param thickness is the layer thickness along the normal axis
0066   /// @param ade is the approach descriptor for navigation towards the layer
0067   /// @param laytyp is the layer type
0068   ///
0069   /// @todo change od and ad to unique_ptr
0070   ConeLayer(const Transform3& transform,
0071             std::shared_ptr<const ConeBounds> cbounds,
0072             std::unique_ptr<SurfaceArray> surfaceArray, double thickness = 0.,
0073             std::unique_ptr<ApproachDescriptor> ade = nullptr,
0074             LayerType laytyp = active);
0075 
0076   /// Private copy constructor with shift, called by create(args*)
0077   ///
0078   /// @param cla is the source clone layer
0079   /// @param shift is the additional shift applied after copying
0080   ConeLayer(const ConeLayer& cla, const Transform3& shift);
0081 };
0082 
0083 }  // namespace Acts