ATLAS Offline Software
Loading...
Searching...
No Matches
MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/MdtReadoutElement.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4#ifndef MUONREADOUTGEOMETRYR4_MDTREADOUTELEMENT_H
5#define MUONREADOUTGEOMETRYR4_MDTREADOUTELEMENT_H
6
9
10#ifndef SIMULATIONBASE
13# include "Acts/Utilities/BoundFactory.hpp"
14#endif
15
16namespace MuonGMR4 {
17
19
20 public:
26 // the number of tubes of the first layer
27 std::vector<MdtTubeLayerPtr> tubeLayers{};
28
30 std::set<IdentifierHash> removedTubes{};
31
33 double tubeWall{0.};
35 double tubeInnerRad{0.};
37 double tubePitch{0.};
39 double wireTension{0.};
41 double endPlugLength{0.};
43 double deadLength{0.};
45 double radLengthX0{0.};
53 double shortHalfX{0.};
54 double longHalfX{0.};
56 double halfY{0.};
58 double halfHeight{0.};
60 double readoutSide{1.};
63 #ifndef SIMULATIONBASE
64 std::shared_ptr<Acts::SurfaceBoundFactory> boundFactory;
65 #endif
66
67 };
68
71
74 const parameterBook& getParameters() const;
79
80 double thickness() const override final;
81
82 StatusCode initElement() override final;
84 unsigned int multilayer() const;
86 unsigned int numLayers() const;
88 unsigned int numTubesInLay() const;
89
92 static unsigned int tubeNumber(const IdentifierHash& hash);
95 static unsigned int layerNumber(const IdentifierHash& hash);
97 static IdentifierHash measurementHash(unsigned int layerNumber, unsigned int tubeNumber);
98
99
108 Identifier measurementId(const IdentifierHash& measHash) const override final;
109
114 double tubePitch() const;
127
129 Amg::Vector3D globalTubePos(const ActsTrk::GeometryContext& ctx,
130 const Identifier& measId) const;
131
132 Amg::Vector3D globalTubePos(const ActsTrk::GeometryContext& ctx,
134
136 Amg::Vector3D readOutPos(const ActsTrk::GeometryContext& ctx,
137 const Identifier& measId) const;
138
139 Amg::Vector3D readOutPos(const ActsTrk::GeometryContext& ctx,
140 const IdentifierHash& measId) const;
141
143 Amg::Vector3D highVoltPos(const ActsTrk::GeometryContext& ctx,
144 const Identifier& measId) const;
145 Amg::Vector3D highVoltPos(const ActsTrk::GeometryContext& ctx,
146 const IdentifierHash& measId) const;
149 double distanceToReadout(const ActsTrk::GeometryContext& ctx,
150 const Identifier& measId,
151 const Amg::Vector3D& globPoint) const;
152 double distanceToReadout(const ActsTrk::GeometryContext& ctx,
153 const IdentifierHash& measHash,
154 const Amg::Vector3D& globPoint) const;
155
161 double distanceToReadout(const IdentifierHash& measHash,
162 const Amg::Vector3D& localPoint) const;
163
165
166 double tubeLength(const IdentifierHash& hash) const;
167
168 double wireLength(const IdentifierHash& hash) const;
170 double uncutTubeLength(const IdentifierHash& tubeHash) const;
171
172
173 friend ActsTrk::TransformCacheDetEle<MdtReadoutElement>;
174
181
189 private:
202 const ActsTrk::DetectorAlignStore* store) const;
203
204 #ifndef SIMULATIONBASE
213 const IdentifierHash& tubeHash,
214 const Amg::Vector3D& nominalEnd,
215 const tubeSide_t side) const;
216
224 const Amg::Vector3D& localTubeEndPoint,
225 const Amg::Vector3D& fixedPoint,
226 const double thickness) const;
227
228#endif
234 int m_stML{m_idHelper.multilayer(identify())};
236 bool m_isBarrel{m_idHelper.isBarrel(identify())};
239};
240
241std::ostream& operator<<(std::ostream& ostr, const MdtReadoutElement::parameterBook& pars);
242} // namespace MuonGMR4
243
244namespace ActsTrk{
245 template <> Amg::Transform3D
247 template <> Identifier
249}
250
252#endif
Eigen::Affine3d Transform3D
Eigen::Matrix< double, 3, 1 > Vector3D
Amg::Transform3D fetchTransform(const DetectorAlignStore *store) const override final
Identifier identify() const override final
Returns the Identifier of the transform cache.
This is a "hash" representation of an Identifier.
Container classifier the MDT as-built parameters See parameter description in http://atlas-muon-align...
tubeSide_t
MDT tube side.
double thickness() const override final
Overload from the Acts::DetectorElement (2 * halfheight)
bool isBarrel() const
States whether the chamber is built into the barrel or not.
double moduleWidthL() const
Returns the length of the top edge of the chamber (top width)
Amg::Vector3D highVoltPos(const ActsTrk::GeometryContext &ctx, const Identifier &measId) const
Returns the global position of the High Voltage connectors.
Amg::Vector3D localTubePos(const IdentifierHash &hash) const
Returns the tube position in the chamber coordinate frame (Not applying the B-line corrections)
Amg::Transform3D toTubeFrame(const IdentifierHash &hash) const
Returns the transformation into the rest frame of the tube x-axis: Pointing towards the next layer y-...
static IdentifierHash measurementHash(unsigned int layerNumber, unsigned int tubeNumber)
Transform the layer and tube number to the measurementHash.
Amg::Vector3D bLineReferencePoint() const
Returns the fixed point of the B-line & as-bult defromation model expressed in the as-built frame.
double tubeRadius() const
Adds the thickness of the tube wall onto the radius.
double distanceToReadout(const ActsTrk::GeometryContext &ctx, const Identifier &measId, const Amg::Vector3D &globPoint) const
Returns the distance along the wire from the readout card The distance is given as the delta z of the...
bool isValid(const IdentifierHash &measHash) const
Amg::Vector3D readOutPos(const ActsTrk::GeometryContext &ctx, const Identifier &measId) const
Returns the global position of the readout card.
const MdtIdHelper & m_idHelper
Detector identifier helper to quickly extract the ID fields.
static unsigned int layerNumber(const IdentifierHash &hash)
Transforms the identifier hash into a layer number ranging from (0-numLayers()-1)
double moduleHeight() const
Returns the height of the chamber (Distance bottom - topWidth)
Amg::Transform3D asBuiltRefFrame() const
Returns the transformation to go into the reference frame of the as-buit & b-line model starting from...
Amg::Vector3D globalTubePos(const ActsTrk::GeometryContext &ctx, const Identifier &measId) const
Returns the global position of the tube center.
unsigned int numTubesInLay() const
Returns the number of tubes per layer.
double innerTubeRadius() const
Returns the inner tube radius.
void setComplementaryReadoutEle(const MdtReadoutElement *other)
Set the link to the second readout element inside the muon station.
ActsTrk::DetectorType detectorType() const override final
Overload from the ActsTrk::IDetectorElement.
double moduleThickness() const
Returns the thickness of the chamber.
double moduleWidthS() const
Returns the length of the bottom edge of the chamber (short width)
static unsigned int tubeNumber(const IdentifierHash &hash)
Transforms the idenfier hash into a tube number ranging from (0- numTubesInLay()-1)
double uncutTubeLength(const IdentifierHash &tubeHash) const
Returns the uncut tube length.
Amg::Transform3D fromIdealToDeformed(const IdentifierHash &tubeHash, const ActsTrk::DetectorAlignStore *store) const
Applies the B & as-built parameters.
Amg::Vector3D wireEndpointAsBuilt(const MdtAsBuiltPar &asBuilt, const IdentifierHash &tubeHash, const Amg::Vector3D &nominalEnd, const tubeSide_t side) const
Amg::Vector3D applyBlineCorrections(const BLinePar &bline, const Amg::Vector3D &localTubeEndPoint, const Amg::Vector3D &fixedPoint, const double thickness) const
Apply the B-line model correction to a tube endpoint.
IdentifierHash layerHash(const Identifier &measId) const override final
Transforms the Identifier into the layer hash.
const MdtReadoutElement * complementaryRE() const
Returns the pointer to the other readout element inside the muon station.
Amg::Transform3D toChamberLayer(const IdentifierHash &hash) const
Returns the transformation into the rest frame of the tube x-axis: Pointing towards the next layer y-...
MdtAsBuiltPar::tubeSide_t tubeSide_t
Moves the wire endpoints according to the as-built model.
unsigned int multilayer() const
Returns the multi layer of the MdtReadoutElement.
Identifier measurementId(const IdentifierHash &measHash) const override final
Converts the measurement hash back to the full Identifier.
double tubePitch() const
Returns the pitch between 2 tubes in a layer.
unsigned int numLayers() const
Returns the number of tube layer.
Identifier identify() const override final
Return the athena identifier.
const Muon::IMuonIdHelperSvc * idHelperSvc() const
Returns the pointer to the muonIdHelperSvc.
virtual const MdtIdHelper & mdtIdHelper() const =0
access to MdtIdHelper
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
DetectorType
Simple enum to Identify the Type of the ACTS sub detector.
@ Mdt
MuonSpectrometer.
Definition of ATLAS Math & Geometry primitives (Amg)
Eigen::Affine3d Transform3D
Eigen::Matrix< double, 3, 1 > Vector3D
The ReadoutGeomCnvAlg converts the Run4 Readout geometry build from the GeoModelXML into the legacy M...
std::ostream & operator<<(std::ostream &ostr, const Chamber::defineArgs &args)
Definition Chamber.cxx:14
double shortHalfX
The chambers have either a rectangular or a trapezoidal shape to first approximation.
std::shared_ptr< Acts::SurfaceBoundFactory > boundFactory
Sets of surface bounds which is shared amongst all readout elements used to assign the same bound obj...
std::vector< MdtTubeLayerPtr > tubeLayers
Vector defining the position of all tubes in each tube layer.
#define private