53 :
54 GeoVDetectorElement{detElem.getMaterialGeom()},
56 m_type{detElem.
isPixel() ? DetectorType::Pixel : DetectorType::Sct},
59{
60
61
63
65
66
68
69 const InDetDD::SiDetectorDesign &design = detElem.
design();
72
73 auto rectangleBounds = std::make_shared<const Acts::RectangleBounds>(hlX, hlY);
74
76 m_surface = Acts::Surface::makeShared<Acts::PlaneSurface>(rectangleBounds, *
this);
78
80
81 const InDetDD::SiDetectorDesign &design = detElem.
design();
82
86
87 auto trapezoidBounds =
88 std::make_shared<const Acts::TrapezoidBounds>(minHlX, maxHlX, hlY);
89
91
92 m_surface = Acts::Surface::makeShared<Acts::PlaneSurface>(trapezoidBounds, *
this);
94
95
97
98 const InDetDD::SiDetectorDesign &design = detElem.
design();
99 const auto *annulus = dynamic_cast<const InDetDD::StripStereoAnnulusDesign *>(&design);
100 if (annulus == nullptr) {
101 throw std::domain_error("ActsDetectorElement got inconsistent surface");
102 }
103
104 double phi = annulus->phiWidth();
105 double phiS = annulus->stereo();
106 double R = annulus->waferCentreR();
107 double maxR = annulus->maxR();
108 double minR = annulus->minR();
109
110
111 double phiAvg = 0;
112
113 double phiMax =
phi / 2.;
114 double phiMin = -phiMax;
115
116
118 R * std::sin(-phiS));
119
120 auto annulusBounds = std::make_shared<Acts::AnnulusBounds>(
121 minR, maxR, phiMin, phiMax, originStripXYRotated, phiAvg);
123
124 m_surface = Acts::Surface::makeShared<Acts::DiscSurface>(annulusBounds, *
this);
126
127 } else {
128 std::cout << boundsType << std::endl;
129 throw std::domain_error("ActsDetectorElement does not support this surface type");
130 }
131}
constexpr double length_unit
Scalar phi() const
phi method
Identifier m_explicitIdentifier
double m_thickness
Thickness of this detector element.
std::shared_ptr< const Acts::SurfaceBounds > m_bounds
Boundaries of the detector element.
std::shared_ptr< Acts::Surface > m_surface
Corresponding Surface.
const GeoVDetectorElement * m_detElement
Detector element as variant.
double thickness() const
Returns the thickness of the module.
virtual double maxWidth() const =0
Method to calculate maximum width of a module.
virtual double minWidth() const =0
Method to calculate minimum width of a module.
virtual double length() const =0
Method to calculate length of a module.
virtual double width() const =0
Method to calculate average width of a module.
virtual const SiDetectorDesign & design() const override final
access to the local description (inline):
virtual IdentifierHash identifyHash() const override final
identifier hash (inline)
virtual const Trk::SurfaceBounds & bounds() const override final
Return the boundaries of the element.
virtual Identifier identify() const override final
identifier of this detector element (inline)
virtual BoundsType type() const =0
Return the bounds type - for persistency optimization.
Eigen::Matrix< double, 2, 1 > Vector2D
double R(const INavigable4Momentum *p1, const double v_eta, const double v_phi)