ATLAS Offline Software
Loading...
Searching...
No Matches
DiscLayer.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// DiscLayer.h, (c) ATLAS Detector software
8
9#ifndef TRKGEOMETRY_DISCLAYER_H
10#define TRKGEOMETRY_DISCLAYER_H
11
12class MsgStream;
13
14// Amg
16// Trk
17#include "TrkGeometry/Layer.h"
19//
22// STL sorting
23#include <algorithm>
24#include <memory>
25namespace Trk {
26
27class DiscBounds;
28class VolumeBounds;
31
41
42class DiscLayer final
43 : public DiscSurface
44 , public Layer
45{
46 friend class TrackingVolume;
47
48public:
50 DiscLayer() = default;
51
54 std::shared_ptr<const DiscBounds> dbounds,
55 const LayerMaterialProperties& laymatprop,
56 double thickness = 0.,
57 std::unique_ptr<OverlapDescriptor> od = nullptr,
58 int laytyp = int(Trk::active));
59
62 const LayerMaterialProperties& laymatprop,
63 double thickness = 0.,
64 std::unique_ptr<OverlapDescriptor> od = nullptr,
65 int laytyp = int(Trk::active));
66
70 std::shared_ptr<const DiscBounds> dbounds,
71 std::unique_ptr<SurfaceArray> surfaceArray,
72 double isontolerance = 0.,
73 std::unique_ptr<OverlapDescriptor> od = nullptr,
74 IApproachDescriptor* ad = nullptr,
75 int laytyp = int(Trk::active));
76
80 std::shared_ptr<const DiscBounds> dbounds,
81 std::unique_ptr<SurfaceArray> surfaceArray,
82 const LayerMaterialProperties& laymatprop,
83 double thickness = 0.,
84 std::unique_ptr<OverlapDescriptor> od = nullptr,
85 IApproachDescriptor* ad = nullptr,
86 int laytyp = int(Trk::active));
87
89 DiscLayer(const DiscLayer& cla);
90
92 DiscLayer(const DiscLayer& cla, const Amg::Transform3D& tr);
93
96
98 virtual ~DiscLayer() = default;
99
101 virtual const DiscSurface& surfaceRepresentation() const override final;
102 virtual DiscSurface& surfaceRepresentation() override final;
103
107 const Amg::Vector3D& pos, const Amg::Vector3D& mom, PropDirection pdir,
108 const BoundaryCheck& bcheck, bool resolveSubSurfaces = 0,
109 const ICompatibilityEstimator* ice = nullptr) const override final;
110
112 virtual double preUpdateMaterialFactor(
114 Trk::PropDirection dir) const override final;
115
117 virtual double postUpdateMaterialFactor(
119 Trk::PropDirection dir) const override final;
120
122 virtual void moveLayer(Amg::Transform3D& shift) override final;
123
126 virtual void resizeLayer(const VolumeBounds& vBounds,
127 double envelope) override final;
128
130 virtual void resizeAndRepositionLayer(const VolumeBounds& vBounds,
131 const Amg::Vector3D& cCenter,
132 double envelop) override final;
133
134 private:
137
141 const Amg::Vector3D& dir,
142 const BoundaryCheck& bcheck) const;
143
144 protected:
147};
148
153 public:
154 bool operator()(const DiscLayer* one, const DiscLayer* two) const {
155 return (one->center().z() < two->center().z());
156 }
157};
158
159} // namespace Trk
160
161#endif // TRKGEOMETY_DISCLAYER_H
162
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...
Class to describe the bounds for a planar DiscSurface.
Definition DiscBounds.h:44
simple helper function to allow sorting of DiscLayers in z
Definition DiscLayer.h:152
bool operator()(const DiscLayer *one, const DiscLayer *two) const
Definition DiscLayer.h:154
Class to describe a disc-like detector layer for tracking, it inhertis from both, Layer base class an...
Definition DiscLayer.h:45
void buildApproachDescriptor()
build approach surfaces
virtual ~DiscLayer()=default
Destructor.
virtual const Surface & surfaceOnApproach(const Amg::Vector3D &pos, const Amg::Vector3D &mom, 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()
virtual void resizeAndRepositionLayer(const VolumeBounds &vBounds, const Amg::Vector3D &cCenter, double envelop) override final
Resize the layer to the tracking volume - not implemented.
DiscLayer()=default
Default Constructor.
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()
virtual void resizeLayer(const VolumeBounds &vBounds, double envelope) override final
Resize the layer to the tracking volume - only works for CylinderVolumeBouns.
DiscLayer & operator=(const DiscLayer &)
Assignment operator for DiscLayers.
Definition DiscLayer.cxx:96
friend class TrackingVolume
Definition DiscLayer.h:46
virtual void moveLayer(Amg::Transform3D &shift) override final
move the Layer non-const
std::unique_ptr< IApproachDescriptor > m_approachDescriptor
< surface for approaching
Definition DiscLayer.h:146
virtual double preUpdateMaterialFactor(const Trk::TrackParameters &par, Trk::PropDirection dir) const override final
getting the MaterialProperties back - for pre-update
virtual double postUpdateMaterialFactor(const Trk::TrackParameters &par, Trk::PropDirection dir) const override final
getting the MaterialProperties back - for post-update
virtual const DiscSurface & surfaceRepresentation() const override final
Transforms the layer into a Surface representation for extrapolation.
DiscSurface()
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