|
||||
File indexing completed on 2025-01-19 09:23:21
0001 // This file is part of the Acts project. 0002 // 0003 // Copyright (C) 2016-2020 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 http://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/CylinderBounds.hpp" 0015 #include "Acts/Surfaces/CylinderSurface.hpp" 0016 #include "Acts/Surfaces/SurfaceArray.hpp" 0017 0018 #include <algorithm> 0019 #include <memory> 0020 #include <utility> 0021 0022 namespace Acts { 0023 class CylinderBounds; 0024 0025 /// @class CylinderLayer 0026 /// 0027 /// Class to describe a cylindrical detector layer for tracking, it inhertis 0028 /// from both, Layer base class and CylinderSurface class 0029 /// 0030 class CylinderLayer : public CylinderSurface, public Layer { 0031 public: 0032 /// Factory for shared Layer pointer 0033 /// create a shared, fully deployed CylinderLayer 0034 /// 0035 /// @param transform is the 3D transform that places the layer in 3D space 0036 /// @param cbounds are the cylindrical bounds of the layer 0037 /// @param surfaceArray is the Binned Array that holds the sensitive surfaces 0038 /// @param thickness is the layer thickness (along the normal) 0039 /// @param ad is the approach descriptor for approaching the layer 0040 /// @param laytyp is the layer type 0041 /// 0042 /// @todo ApproachDescriptor to unique_ptr 0043 /// 0044 /// @return The return object is a shared pointer to the layer. 0045 static std::shared_ptr<CylinderLayer> create( 0046 const Transform3& transform, 0047 const std::shared_ptr<const CylinderBounds>& cbounds, 0048 std::unique_ptr<SurfaceArray> surfaceArray = nullptr, 0049 double thickness = 0., std::unique_ptr<ApproachDescriptor> ad = nullptr, 0050 LayerType laytyp = passive) { 0051 return std::shared_ptr<CylinderLayer>( 0052 new CylinderLayer(transform, cbounds, std::move(surfaceArray), 0053 thickness, std::move(ad), laytyp)); 0054 } 0055 0056 CylinderLayer(const CylinderLayer& cla) = delete; 0057 CylinderLayer() = delete; 0058 ~CylinderLayer() override = default; 0059 CylinderLayer& operator=(const CylinderLayer&) = delete; 0060 0061 /// Transforms the layer into a Surface representation 0062 /// This is for positioning and extrapolation 0063 const CylinderSurface& surfaceRepresentation() const override; 0064 0065 // Non-const version 0066 CylinderSurface& surfaceRepresentation() override; 0067 0068 private: 0069 /// build approach surfaces */ 0070 void buildApproachDescriptor(); 0071 0072 protected: 0073 /// Private constructor for CylinderLayer, called by create(args*) factory 0074 /// 0075 /// @param transform is the 3D transform that places the layer in 3D space 0076 /// @param cBounds The cylindrical bounds of the layer 0077 /// @param surfaceArray is the Binned Array that holds the sensitive surfaces 0078 /// @param thickness is the layer thickness (along the normal) 0079 /// @param ades are the approach descriptors for approaching the layer 0080 /// @param laytyp is the layer type 0081 /// @todo change ApproachDescriptor to unique_ptr 0082 CylinderLayer(const Transform3& transform, 0083 const std::shared_ptr<const CylinderBounds>& cBounds, 0084 std::unique_ptr<SurfaceArray> surfaceArray = nullptr, 0085 double thickness = 0., 0086 std::unique_ptr<ApproachDescriptor> ades = nullptr, 0087 LayerType laytyp = passive); 0088 0089 /// Private copy constructor with shift, called by create(args*) 0090 /// 0091 /// @param cla is the source cylinder layer for the copy 0092 /// @param shift is the additional transform applied after cloning 0093 CylinderLayer(const CylinderLayer& cla, const Transform3& shift); 0094 }; 0095 0096 } // namespace Acts
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |