ATLAS Offline Software
Loading...
Searching...
No Matches
CylinderLayer.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3*/
4
6// CylinderLayer.h, (c) ATLAS Detector software
8
9#ifndef TRKGEOMETRY_CYLINDERLAYER_H
10#define TRKGEOMETRY_CYLINDERLAYER_H
11
12class MsgStream;
13
14// Amg
16// Trk
20#include "TrkGeometry/Layer.h"
22// STL sorting
23#include <algorithm>
24
25namespace Trk {
26
27class CylinderBounds;
30
39
40class CylinderLayer final
41 : public CylinderSurface
42 , public Layer
43{
44public:
47
50 std::shared_ptr<const CylinderBounds> cbounds,
51 const LayerMaterialProperties& laymatprop,
52 double thickness = 0.,
53 std::unique_ptr<OverlapDescriptor> od = nullptr,
54 int laytyp = int(Trk::active));
55
58 const LayerMaterialProperties& laymatprop,
59 double thickness = 0.,
60 std::unique_ptr<OverlapDescriptor> od = nullptr,
61 int laytyp = int(Trk::active));
62
69 std::shared_ptr<const CylinderBounds> cbounds,
70 std::unique_ptr<SurfaceArray> surfaceArray,
71 double thickness = 0.,
72 std::unique_ptr<OverlapDescriptor> od = nullptr,
73 IApproachDescriptor* ad = nullptr,
74 int laytyp = int(Trk::active));
75
79 std::shared_ptr<const CylinderBounds> cbounds,
80 std::unique_ptr<SurfaceArray> surfaceArray,
81 const LayerMaterialProperties& laymatprop,
82 double thickness = 0.,
83 std::unique_ptr<OverlapDescriptor> od = nullptr,
84 IApproachDescriptor* ad = nullptr,
85 int laytyp = int(Trk::active));
86
89 CylinderLayer(std::shared_ptr<const CylinderBounds> cbounds,
90 const LayerMaterialProperties& laymatprop,
91 double thickness = 0.,
92 std::unique_ptr<OverlapDescriptor> od = nullptr,
93 int laytyp = int(Trk::active));
94
97 CylinderLayer(std::shared_ptr<const CylinderBounds> cbounds,
98 std::unique_ptr<SurfaceArray> surfaceArray,
99 double thickness = 0.,
100 std::unique_ptr<OverlapDescriptor> od = nullptr,
101 IApproachDescriptor* ad = nullptr,
102 int laytyp = int(Trk::active));
103
106 CylinderLayer(std::shared_ptr<const CylinderBounds> cbounds,
107 std::unique_ptr<SurfaceArray> surfaceArray,
108 const LayerMaterialProperties& laymatprop,
109 double thickness = 0.,
110 std::unique_ptr<OverlapDescriptor> od = nullptr,
111 IApproachDescriptor* ad = nullptr,
112 int laytyp = int(Trk::active));
113
115 CylinderLayer(const CylinderLayer& cla);
116
118 CylinderLayer(const CylinderLayer& cla, const Amg::Transform3D& tr);
119
122
124 virtual ~CylinderLayer() = default;
125
127 virtual const CylinderSurface& surfaceRepresentation() const override final;
128 virtual CylinderSurface& surfaceRepresentation() override final;
129
131 virtual double preUpdateMaterialFactor(
133 Trk::PropDirection dir) const override final;
134
136 virtual double postUpdateMaterialFactor(
138 Trk::PropDirection dir) const override final;
139
143 const Amg::Vector3D& pos, const Amg::Vector3D& dir, PropDirection pdir,
144 const BoundaryCheck& bcheck, bool resolveSubSurfaces = 0,
145 const ICompatibilityEstimator* ice = nullptr) const override final;
146
148 virtual void moveLayer(Amg::Transform3D& shift) override final;
149
152 virtual void resizeLayer(const VolumeBounds& vBounds,
153 double envelope) override final;
154
155
157 virtual void resizeAndRepositionLayer(const VolumeBounds& vBounds,
158 const Amg::Vector3D& cCenter,
159 double envelope) override final;
160
161
162 private:
166 const Amg::Vector3D& dir,
167 const BoundaryCheck& bcheck) const;
168
171
172 protected:
175};
176
179
181 public:
184
185 bool operator()(const CylinderLayer* one, const CylinderLayer* two) const {
186 return (one->surfaceRepresentation().bounds().r() <
187 two->surfaceRepresentation().bounds().r());
188 }
189};
190
191} // namespace Trk
192
193#endif // TRKGEOMETY_CYLINDERLAYER_H
194
Eigen::Affine3d Transform3D
#define protected
Eigen::Matrix< double, 3, 1 > Vector3D
The BoundaryCheck class allows to steer the way surface boundaries are used for inside/outside checks...
Bounds for a cylindrical Surface.
bool operator()(const CylinderLayer *one, const CylinderLayer *two) const
CylinderLayerSorterR()
Default Constructor.
Class to describe a cylindrical detector layer for tracking, it inhertis from both,...
virtual double postUpdateMaterialFactor(const Trk::TrackParameters &par, Trk::PropDirection dir) const override final
getting the MaterialProperties back - for post-update
virtual void resizeAndRepositionLayer(const VolumeBounds &vBounds, const Amg::Vector3D &cCenter, double envelope) override final
Resize the layer to the tracking volume.
virtual const Surface & surfaceOnApproach(const Amg::Vector3D &pos, const Amg::Vector3D &dir, PropDirection pdir, const BoundaryCheck &bcheck, bool resolveSubSurfaces=0, const ICompatibilityEstimator *ice=nullptr) const override final
Surface seen on approach - if not defined differently, it is the surfaceRepresentation()
CylinderLayer()
Default Constructor.
CylinderLayer & operator=(const CylinderLayer &)
Assignment operator for CylinderLayers.
const Surface & approachSurface(const Amg::Vector3D &pos, const Amg::Vector3D &dir, const BoundaryCheck &bcheck) const
Surface seen on approach - if not defined differently, it is the surfaceRepresentation()
void buildApproachDescriptor()
build approach surfaces
virtual void moveLayer(Amg::Transform3D &shift) override final
move the Layer
virtual double preUpdateMaterialFactor(const Trk::TrackParameters &par, Trk::PropDirection dir) const override final
getting the MaterialProperties back - for pre-update
virtual void resizeLayer(const VolumeBounds &vBounds, double envelope) override final
Resize the layer to the tracking volume - only works for CylinderVolumeBouns.
std::unique_ptr< IApproachDescriptor > m_approachDescriptor
surfaces on approach to the layer
virtual ~CylinderLayer()=default
Destructor.
virtual const CylinderSurface & surfaceRepresentation() const override final
Transforms the layer into a Surface representation for extrapolation.
Class for a CylinderSurface in the ATLAS detector.
CylinderSurface()
Default Constructor.
CVirtual class to decide and return which approaching surface to be taken.
This virtual base class encapsulates the logics to build pre/post/full update material for Layer stru...
Layer()=default
Default Constructor.
const SurfaceArray * surfaceArray() const
Return the entire SurfaceArray, returns nullptr if no SurfaceArray.
double thickness() const
Return the Thickness of the Layer.
BaseClass to be overloaded for describing overlaps and next-by elements for the sub-detector implemen...
Abstract Base Class for tracking surfaces.
const Amg::Transform3D & transform() const
Returns HepGeom::Transform3D by reference.
Pure Absract Base Class for Volume bounds.
STL class.
Definition of ATLAS Math & Geometry primitives (Amg)
Eigen::Affine3d Transform3D
Ensure that the ATLAS eigen extensions are properly loaded.
PropDirection
PropDirection, enum for direction of the propagation.
ParametersBase< TrackParametersDim, Charged > TrackParameters
@ active
Definition Layer.h:47
STL namespace.
#define private