ATLAS Offline Software
MmReadoutElement.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
5 
6 
8 
10 #include <GaudiKernel/SystemOfUnits.h>
11 #include <optional>
12 
13 #ifndef SIMULATIONBASE
14 # include "Acts/Surfaces/Surface.hpp"
15 # include "Acts/Surfaces/TrapezoidBounds.hpp"
16 #endif
17 
18 using namespace ActsTrk;
19 
20 namespace MuonGMR4 {
22 std::ostream& operator<<(std::ostream& ostr, const parameterBook& pars) {
23  ostr<<"chamber shortWidth/longWidth/length [mm]: "<<(2.*pars.halfShortWidth)<<"/";
24  ostr<<(2.*pars.halfLongWidth)<<"/"<<(2.*pars.halfHeight)<<std::endl;
25  return ostr;
26 }
27 
28 MmReadoutElement::MmReadoutElement(defineArgs&& args):
30  m_pars{std::move(args)} {
31 }
32 
34 
36  ATH_MSG_DEBUG("Parameter book "<<parameterBook());
38 
39  if (m_pars.layers.empty()) {
40  ATH_MSG_FATAL("The readout element "<<idHelperSvc()->toStringDetEl(identify())<<" doesn't have any layers defined");
41  return StatusCode::FAILURE;
42  }
43 #ifndef SIMULATIONBASE
45  m_pars.layerBounds->makeBounds<Acts::TrapezoidBounds>(m_pars.halfShortWidth,
48  90.*Gaudi::Units::deg)));
49 #endif
50  for (unsigned int layer = 0; layer < m_pars.layers.size(); ++layer) {
51  IdentifierHash layHash{layer};
52  if (m_pars.layers[layer]->hash() != layHash) {
53  ATH_MSG_FATAL("Layer "<<m_pars.layers[layer]<<" has a very strange hash. Expect "<<layer);
54  return StatusCode::FAILURE;
55  }
56  ATH_CHECK(insertTransform<MmReadoutElement>(layHash));
57 #ifndef SIMULATIONBASE
58  const StripDesign& design{m_pars.layers[layer]->design()};
59 
61  m_pars.layerBounds->makeBounds<Acts::TrapezoidBounds>(design.shortHalfHeight(),
62  design.longHalfHeight(),
63  design.halfWidth(),
64  90.*Gaudi::Units::deg + design.stereoAngle())));
65 #endif
66  }
67 #ifndef SIMULATIONBASE
68  m_pars.layerBounds.reset();
69 #endif
70  return StatusCode::SUCCESS;
71 }
72 
73 Amg::Transform3D MmReadoutElement::fromGapToChamOrigin(const IdentifierHash& layHash) const {
74  return stripLayer(layHash).toOrigin();
75 }
76 
77 
78 #if defined(FLATTEN) && defined(__GNUC__)
79 // We compile this function with optimization, even in debug builds; otherwise,
80 // the heavy use of Eigen makes it too slow. However, from here we may call
81 // to out-of-line Eigen code that is linked from other DSOs; in that case,
82 // it would not be optimized. Avoid this by forcing all Eigen code
83 // to be inlined here if possible.
84 [[gnu::flatten]]
85 #endif
86 Amg::Vector3D MmReadoutElement::stripPosition(const ActsGeometryContext& ctx, const IdentifierHash& measHash) const {
87  const IdentifierHash lHash = layerHash(measHash);
88  if (static_cast<unsigned int>(lHash) < m_pars.layers.size()) {
89  return localToGlobalTrans(ctx, lHash) * stripLayer(lHash).localStripPosition(stripNumber(measHash));
90  }
91  ATH_MSG_WARNING(__FILE__<<":"<<__LINE__<<" The layer hash "<<static_cast<unsigned int>(lHash)
92  <<" is out of range. Maximum range "<<m_pars.layers.size());
93  return Amg::Vector3D::Zero();
94 }
95 
96 
97 #if defined(FLATTEN) && defined(__GNUC__)
98 // We compile this function with optimization, even in debug builds; otherwise,
99 // the heavy use of Eigen makes it too slow. However, from here we may call
100 // to out-of-line Eigen code that is linked from other DSOs; in that case,
101 // it would not be optimized. Avoid this by forcing all Eigen code
102 // to be inlined here if possible.
103 [[gnu::flatten]]
104 #endif
105 Amg::Vector3D MmReadoutElement::leftStripEdge(const ActsGeometryContext& ctx, const IdentifierHash& measHash) const {
106  const IdentifierHash lHash = layerHash(measHash);
107  if (static_cast<unsigned int>(lHash) < m_pars.layers.size()) {
108  return localToGlobalTrans(ctx, lHash) * stripLayer(lHash).localStripLeftEdge(stripNumber(measHash));
109  }
110  ATH_MSG_WARNING(__FILE__<<":"<<__LINE__<<" The layer hash "<<static_cast<unsigned int>(lHash)
111  <<" is out of range. Maximum range "<<m_pars.layers.size());
112  return Amg::Vector3D::Zero();
113 }
114 
115 #if defined(FLATTEN) && defined(__GNUC__)
116 // We compile this function with optimization, even in debug builds; otherwise,
117 // the heavy use of Eigen makes it too slow. However, from here we may call
118 // to out-of-line Eigen code that is linked from other DSOs; in that case,
119 // it would not be optimized. Avoid this by forcing all Eigen code
120 // to be inlined here if possible.
121 [[gnu::flatten]]
122 #endif
123 Amg::Vector3D MmReadoutElement::rightStripEdge(const ActsGeometryContext& ctx, const IdentifierHash& measHash) const{
124  const IdentifierHash lHash = layerHash(measHash);
125  if (static_cast<unsigned int>(lHash) < m_pars.layers.size()) {
126  return localToGlobalTrans(ctx, lHash) * stripLayer(lHash).localStripRightEdge(stripNumber(measHash));
127  }
128  ATH_MSG_WARNING(__FILE__<<":"<<__LINE__<<" The layer hash "<<static_cast<unsigned int>(lHash)
129  <<" is out of range. Maximum range "<<m_pars.layers.size());
130  return Amg::Vector3D::Zero();
131 }
132 
133 
134 }
make_hlt_rep.pars
pars
Definition: make_hlt_rep.py:90
MuonGMR4::parameterBook
MmReadoutElement::parameterBook parameterBook
Definition: MmReadoutElement.cxx:21
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
MuonGMR4::MmReadoutElement::fromGapToChamOrigin
Amg::Transform3D fromGapToChamOrigin(const IdentifierHash &layerHash) const
Definition: MmReadoutElement.cxx:73
MuonGMR4::StripDesign
Definition: StripDesign.h:30
AthCheckMacros.h
python.CaloAddPedShiftConfig.args
args
Definition: CaloAddPedShiftConfig.py:47
MuonGMR4::MmReadoutElement::parameterBook
Set of parameters to describe a RPC chamber.
Definition: MmReadoutElement.h:23
MuonGMR4::StripLayer::toOrigin
const Amg::Transform3D & toOrigin() const
Returns the transformation to go from the strip layer center to the origin of the Strip chamber.
MuonGMR4::MuonReadoutElement
The MuonReadoutElement is an abstract class representing the geometry representing the muon detector.
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/MuonReadoutElement.h:38
deg
#define deg
Definition: SbPolyhedron.cxx:17
MuonGMR4::MuonReadoutElement::createGeoTransform
StatusCode createGeoTransform()
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/src/MuonReadoutElement.cxx:36
MuonGMR4::MmReadoutElement::parameterBook::halfShortWidth
double halfShortWidth
width of the lower edge
Definition: MmReadoutElement.h:28
MuonGMR4::StripLayer::localStripRightEdge
Amg::Vector3D localStripRightEdge(unsigned int stripNum, bool phiView=false) const
Returns the position of the right strip edge at (negative y in the strip design description) in the l...
MuonGMR4
The ReadoutGeomCnvAlg converts the Run4 Readout geometry build from the GeoModelXML into the legacy M...
Definition: MdtCalibInput.h:19
MuonGMR4::MmReadoutElement::m_pars
parameterBook m_pars
Definition: MmReadoutElement.h:130
MuonGMR4::MmReadoutElement::stripPosition
Amg::Vector3D stripPosition(const ActsGeometryContext &ctx, const Identifier &measId) const
Returns the position of the strip center.
MuonGMR4::MuonReadoutElement::idHelperSvc
const Muon::IMuonIdHelperSvc * idHelperSvc() const
Returns the pointer to the muonIdHelperSvc.
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
MuonGMR4::StripLayer::localStripPosition
Amg::Vector3D localStripPosition(unsigned int stripum, bool phiView=false) const
Returns the position of the strip centre expressed in the frame of the local readout plane.
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
MuonGMR4::MmReadoutElement::stripNumber
static unsigned int stripNumber(const IdentifierHash &measHash)
MuonGMR4::MmReadoutElement::parameterBook::halfHeight
double halfHeight
length in the radial direction
Definition: MmReadoutElement.h:32
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
ActsTrk::operator<<
MsgStream & operator<<(MsgStream &out, const ActsUtils::Stat &stat)
Definition: TrackToTruthAssociationAlg.cxx:25
MuonGMR4::MmReadoutElement::parameterBook::halfLongWidth
double halfLongWidth
width of the upper edge
Definition: MmReadoutElement.h:30
MuonGMR4::StripLayer::localStripLeftEdge
Amg::Vector3D localStripLeftEdge(unsigned int stripNum, bool phiView=false) const
Returns the position of the strip edge at (positive y in the strip design description) in the local c...
ActsGeometryContext
Include the GeoPrimitives which need to be put first.
Definition: ActsGeometryContext.h:27
MuonGMR4::MmReadoutElement::parameterBook::layers
std::vector< StripLayerPtr > layers
Pointers to the strip layers.
Definition: MmReadoutElement.h:38
MuonGMR4::MmReadoutElement::leftStripEdge
Amg::Vector3D leftStripEdge(const ActsGeometryContext &ctx, const Identifier &measId) const
Returns the global position of the strip edge.
MuonGMR4::MmReadoutElement::stripLayer
const StripLayer & stripLayer(const Identifier &measId) const
MuonGMR4::MmReadoutElement::getParameters
const parameterBook & getParameters() const
Definition: MmReadoutElement.cxx:33
MuonGMR4::MmReadoutElement::parameterBook::layerBounds
std::shared_ptr< Acts::SurfaceBoundFactory > layerBounds
Definition: MmReadoutElement.h:41
MuonGMR4::MuonReadoutElement::geoTransformHash
static IdentifierHash geoTransformHash()
Returns the hash that is associated with the surface cache holding the transformation that is placing...
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/src/MuonReadoutElement.cxx:44
MuonGMR4::MuonReadoutElement::identify
Identifier identify() const override final
Return the athena identifier.
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
MuonGMR4::MuonReadoutElement::planeSurfaceFactory
StatusCode planeSurfaceFactory(const IdentifierHash &hash, std::shared_ptr< Acts::PlanarBounds > pBounds)
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/src/MuonReadoutElement.cxx:125
MuonGMR4::MmReadoutElement::layerHash
IdentifierHash layerHash(const Identifier &measId) const override final
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
GeoPrimitivesHelpers.h
MuonGMR4::MmReadoutElement::rightStripEdge
Amg::Vector3D rightStripEdge(const ActsGeometryContext &ctx, const Identifier &measId) const
Returns the global position of the strip edge.
MuonGMR4::MmReadoutElement::initElement
StatusCode initElement() override final
Element initialization.
Definition: MmReadoutElement.cxx:35
MuonGMR4::MuonReadoutElement::localToGlobalTrans
const Amg::Transform3D & localToGlobalTrans(const ActsGeometryContext &ctx) const
Returns the local to global transformation into the ATLAS coordinate system.
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/src/MuonReadoutElement.cxx:81
ActsTrk
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
Definition: MSTrackingVolumeBuilder.cxx:25
MuonGMR4::MmReadoutElement::defineArgs
Definition: MmReadoutElement.h:48
MmReadoutElement.h
generate::Zero
void Zero(TH1D *hin)
Definition: generate.cxx:32