ATLAS Offline Software
MuonPhaseII/MuonDetDescr/MuonGeoModelTestR4/src/GeoModelsTgcTest.cxx
Go to the documentation of this file.
1 
2 /*
3  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
4 */
5 #include "GeoModelsTgcTest.h"
9 #include <fstream>
10 
11 using namespace ActsTrk;
12 namespace MuonGMR4{
13 
15  ATH_CHECK(m_idHelperSvc.retrieve());
16  ATH_CHECK(m_geoCtxKey.initialize());
18  ATH_CHECK(m_tree.init(this));
19 
20  const sTgcIdHelper& idHelper{m_idHelperSvc->stgcIdHelper()};
21  auto translateTokenList = [this, &idHelper](const std::vector<std::string>& chNames){
22 
23  std::set<Identifier> transcriptedIds{};
24  for (const std::string& token : chNames) {
25  if (token.size() != 6) {
26  ATH_MSG_WARNING("Wrong format given for "<<token<<". Expecting 6 characters");
27  continue;
28  }
30  const std::string statName = token.substr(0, 3);
31  const unsigned statEta = std::atoi(token.substr(3, 1).c_str()) * (token[4] == 'A' ? 1 : -1);
32  const unsigned statPhi = std::atoi(token.substr(5, 1).c_str());
33  bool isValid{false};
34  const Identifier eleId = idHelper.elementID(statName, statEta, statPhi, isValid);
35  if (!isValid) {
36  ATH_MSG_WARNING("Failed to deduce a station name for " << token);
37  continue;
38  }
39  transcriptedIds.insert(eleId);
40  const Identifier secMlId = idHelper.multilayerID(eleId, 2, isValid);
41  if (isValid){
42  transcriptedIds.insert(secMlId);
43  }
44  }
45  return transcriptedIds;
46  };
47 
48  std::vector <std::string>& selectedSt = m_selectStat.value();
49  const std::vector <std::string>& excludedSt = m_excludeStat.value();
50  selectedSt.erase(std::remove_if(selectedSt.begin(), selectedSt.end(),
51  [&excludedSt](const std::string& token){
52  return std::ranges::find(excludedSt, token) != excludedSt.end();
53  }), selectedSt.end());
54 
55  if (selectedSt.size()) {
56  m_testStations = translateTokenList(selectedSt);
57  std::stringstream sstr{};
58  for (const Identifier& id : m_testStations) {
59  sstr<<" *** "<<m_idHelperSvc->toString(id)<<std::endl;
60  }
61  ATH_MSG_INFO("Test only the following stations "<<std::endl<<sstr.str());
62  } else {
63  const std::set<Identifier> excluded = translateTokenList(excludedSt);
65  for(auto itr = idHelper.detectorElement_begin();
66  itr!= idHelper.detectorElement_end();++itr){
67  if (!excluded.count(*itr)) {
68  m_testStations.insert(*itr);
69  }
70  }
72  if (!excluded.empty()) {
73  std::stringstream excluded_report{};
74  for (const Identifier& id : excluded){
75  excluded_report << " *** " << m_idHelperSvc->toStringDetEl(id) << std::endl;
76  }
77  ATH_MSG_INFO("Test all station except the following excluded ones " << std::endl << excluded_report.str());
78  }
79  }
80  ATH_CHECK(detStore()->retrieve(m_detMgr));
81  return StatusCode::SUCCESS;
82 }
84  ATH_CHECK(m_tree.write());
85  return StatusCode::SUCCESS;
86 }
88  const EventContext& ctx{Gaudi::Hive::currentContext()};
89 
90  const ActsGeometryContext* geoContextHandle{nullptr};
91  ATH_CHECK(SG::get(geoContextHandle, m_geoCtxKey, ctx));
92  const ActsGeometryContext& gctx{*geoContextHandle};
93 
94 
95  for (const Identifier& test_me : m_testStations) {
96  ATH_MSG_DEBUG("Test retrieval of sTgc detector element "<<m_idHelperSvc->toStringDetEl(test_me));
97  const sTgcReadoutElement* reElement = m_detMgr->getsTgcReadoutElement(test_me);
98  if (!reElement) {
99  continue;
100  }
102  if (m_idHelperSvc->stgcIdHelper().elementID(reElement->identify()) != m_idHelperSvc->stgcIdHelper().elementID(test_me)) {
103  ATH_MSG_FATAL("Expected to retrieve "<<m_idHelperSvc->toString(test_me)
104  <<". But got instead "<<m_idHelperSvc->toString(reElement->identify()));
105  return StatusCode::FAILURE;
106  }
107  ATH_CHECK(dumpToTree(ctx,gctx,reElement));
108  const Amg::Transform3D globToLocal{reElement->globalToLocalTrans(gctx)};
109  const Amg::Transform3D& localToGlob{reElement->localToGlobalTrans(gctx)};
111  const Amg::Transform3D transClosure = globToLocal * localToGlob;
112  for (Amg::Vector3D axis :{Amg::Vector3D::UnitX(),Amg::Vector3D::UnitY(),Amg::Vector3D::UnitZ()}) {
113  const double closure_mag = std::abs( (transClosure*axis).dot(axis) - 1.);
114  if (closure_mag > std::numeric_limits<float>::epsilon() ) {
115  ATH_MSG_FATAL("Closure test failed for "<<m_idHelperSvc->toStringDetEl(test_me)<<" and axis "<<Amg::toString(axis, 0)
116  <<". Ended up with "<< Amg::toString(transClosure*axis) );
117  return StatusCode::FAILURE;
118  }
119  }
120  const sTgcIdHelper& id_helper{m_idHelperSvc->stgcIdHelper()};
121  for (unsigned int layer = 1; layer <= reElement->numLayers(); ++layer) {
122  for (int chType = sTgcIdHelper::sTgcChannelTypes::Pad; chType <= sTgcIdHelper::sTgcChannelTypes::Wire; ++chType) {
123  bool isValidLay{false};
124  const Identifier layID = id_helper.channelID(reElement->identify(),
125  reElement->multilayer(),
126  layer, chType, 1, isValidLay);
127  if (!isValidLay) {
128  continue;
129  }
130  const unsigned int numChannel = reElement->numChannels(layID);
131 
132  for (unsigned int channel = 1; channel < numChannel ; ++channel) {
133  bool isValidCh{false};
134  const Identifier chID = id_helper.channelID(reElement->identify(),
135  reElement->multilayer(),
136  layer, chType, channel, isValidCh);
137  if (!isValidCh) {
138  continue;
139  }
141  const IdentifierHash measHash = reElement->measurementHash(chID);
142  const IdentifierHash layHash = reElement->layerHash(chID);
143  ATH_MSG_VERBOSE("layer: "<<layer<<", chType: "<<chType
144  <<" --> layerHash: "<<static_cast<unsigned>(layHash));
145  const Identifier backCnv = reElement->measurementId(measHash);
146  if (backCnv != chID) {
147  ATH_MSG_FATAL("The back and forth conversion of "<<m_idHelperSvc->toString(chID)
148  <<" failed. Got "<<m_idHelperSvc->toString(backCnv));
149  return StatusCode::FAILURE;
150  }
151  if (layHash != reElement->layerHash(measHash)) {
152  ATH_MSG_FATAL("Constructing the layer hash from the identifier "<<
153  m_idHelperSvc->toString(chID)<<" leads to different layer hashes "<<
154  layHash<<" vs. "<< reElement->layerHash(measHash));
155  return StatusCode::FAILURE;
156  }
157  if (chType == sTgcIdHelper::sTgcChannelTypes::Strip) {
158  ATH_MSG_VERBOSE("Channel "<<m_idHelperSvc->toString(chID)<<" strip position "
159  <<Amg::toString(reElement->globalChannelPosition(gctx, measHash)));
160  }
161  else if (chType == sTgcIdHelper::sTgcChannelTypes::Wire) {
162  ATH_MSG_VERBOSE("Channel "<<m_idHelperSvc->toString(chID)<<" wireGroup position "
163  <<Amg::toString(reElement->globalChannelPosition(gctx, measHash)));
164  }
165  else if (chType == sTgcIdHelper::sTgcChannelTypes::Pad) {
166  ATH_MSG_VERBOSE("Channel "<<m_idHelperSvc->toString(chID)<<" Pad position "
167  <<Amg::toString(reElement->globalChannelPosition(gctx, measHash)));
168  }
169  }
170  }
171  }
172 
173  }
174  return StatusCode::SUCCESS;
175 }
176 
177 StatusCode GeoModelsTgcTest::dumpToTree(const EventContext& ctx,
178  const ActsGeometryContext& gctx,
179  const sTgcReadoutElement* reElement){
180 
181  m_stIndex = reElement->stationName();
182  m_stEta = reElement->stationEta();
183  m_stPhi = reElement->stationPhi();
184  m_stML = reElement->multilayer();
185  m_chamberDesign = reElement->chamberDesign();
187  m_numLayers = reElement->numLayers();
188  m_gasTck = reElement->gasGapThickness();
190  m_sChamberLength = reElement->sChamberLength();
191  m_lChamberLength = reElement->lChamberLength();
192  m_chamberHeight = reElement->chamberHeight();
193 
195  const Amg::Transform3D& transform{reElement->localToGlobalTrans(gctx)};
196  m_readoutTransform = transform;
197  m_alignableNode = reElement->alignableTransform()->getDefTransform();
198 
199  const sTgcIdHelper& id_helper{m_idHelperSvc->stgcIdHelper()};
200  for (unsigned int layer = 1; layer <= reElement->numLayers(); ++layer) {
201  for (int chType = sTgcIdHelper::sTgcChannelTypes::Pad; chType <= sTgcIdHelper::sTgcChannelTypes::Wire; ++chType) {
202  unsigned int numWireGroup = 0;
204  bool isValidLay{false};
205  const Identifier layID = id_helper.channelID(reElement->identify(),
206  reElement->multilayer(),
207  layer, chType, 1, isValidLay);
208  if (!isValidLay) {
209  continue;
210  }
212 
213  m_sGapLength = 2.*reElement->stripDesign(layID).shortHalfHeight();
214  m_lGapLength = 2.*reElement->stripDesign(layID).longHalfHeight();
215  m_sPadLength = 2.*reElement->padDesign(layID).shortHalfHeight();
216  m_lPadLength = 2.*reElement->padDesign(layID).longHalfHeight();
217  m_gapHeight =2.*reElement->stripDesign(layID).halfWidth();
218  m_yCutout = reElement->stripDesign(layID).yCutout();
219 
220  switch (chType) {
221  case sTgcIdHelper::sTgcChannelTypes::Pad:
222  m_numPads.push_back(reElement->numChannels(layID));
223  m_numPadEta.push_back(reElement->numPadEta(layID));
224  m_numPadPhi.push_back(reElement->numPadPhi(layID));
225  m_padPhiShift.push_back(reElement->padPhiShift(layID));
226  m_firstPadPhiDiv.push_back(reElement->padDesign(layID).firstPadPhiDiv());
227  m_anglePadPhi = reElement->anglePadPhi(layID);
228  m_beamlineRadius = reElement->beamlineRadius(layID);
229 
230  for (unsigned int phiIndex = 1; phiIndex <= reElement->numPadPhi(layID); ++phiIndex) {
231  for(unsigned int etaIndex = 1; etaIndex <= reElement->numPadEta(layID); ++etaIndex) {
232  bool isValidPad{false};
233  const Identifier padID = id_helper.padID(reElement->identify(),
234  reElement->multilayer(),
235  layer, chType, etaIndex, phiIndex, isValidPad);
236  if (!isValidPad) {
237  ATH_MSG_WARNING("Invalid Identifier detected for readout element "
238  <<m_idHelperSvc->toStringDetEl(reElement->identify())
239  <<" layer: "<<layer<<" pad: ("<<etaIndex << ", " << phiIndex<<") channelType: "<<chType);
240  continue;
241  }
242  if (etaIndex == 1 && phiIndex == 1) {
243  m_firstPadHeight.push_back(reElement->padHeight(padID));
244  }
245  else if (etaIndex == 2 && phiIndex == 1) {
246  m_padHeight.push_back(reElement->padHeight(padID));
247  }
248  Amg::Vector2D localPadPos(Amg::Vector2D::Zero());
249  std::array<Amg::Vector2D,4> localPadCorners{make_array<Amg::Vector2D, 4>(Amg::Vector2D::Zero())};
250  Amg::Vector3D globalPadPos(Amg::Vector3D::Zero());
251  std::array<Amg::Vector3D,4> globalPadCorners{make_array<Amg::Vector3D, 4>(Amg::Vector3D::Zero())};
252 
253  localPadPos = reElement->localChannelPosition(padID);
254  localPadCorners = reElement->localPadCorners(padID);
255 
256  m_localPadPos.push_back(localPadPos);
257  m_localPadCornerBL.push_back(localPadCorners[0]);
258  m_localPadCornerBR.push_back(localPadCorners[1]);
259  m_localPadCornerTL.push_back(localPadCorners[2]);
260  m_localPadCornerTR.push_back(localPadCorners[3]);
261 
262  Amg::Vector2D hitCorrection{-.1, -.1};
263  Amg::Vector2D hitPos = localPadCorners[3] + hitCorrection;
264  m_hitPosition.push_back(hitPos);
265  m_padNumber.push_back(reElement->padNumber(hitPos, padID));
266 
267  globalPadPos = reElement->globalChannelPosition(gctx, padID);
268  globalPadCorners = reElement->globalPadCorners(gctx, padID);
269 
270  m_globalPadPos.push_back(globalPadPos);
271  m_globalPadCornerBR.push_back(globalPadCorners[0]);
272  m_globalPadCornerBL.push_back(globalPadCorners[1]);
273  m_globalPadCornerTR.push_back(globalPadCorners[2]);
274  m_globalPadCornerTL.push_back(globalPadCorners[3]);
275 
276  m_padEta.push_back(reElement->padEta(padID));
277  m_padPhi.push_back(reElement->padPhi(padID));
278  m_padGasGap.push_back(layer);
279 
280  if (!(etaIndex == 1 && phiIndex == 1)) continue;
281  const Amg::Transform3D locToGlob = reElement->localToGlobalTrans(gctx, padID);
282  ATH_MSG_DEBUG("The local to global transformation on layers is: " << Amg::toString(locToGlob));
283  m_padRot.push_back(locToGlob);
284  m_padRotGasGap.push_back(layer);
285  }
286  }
287  break;
288 
289  case sTgcIdHelper::sTgcChannelTypes::Strip:{
290  const StripDesign& design{reElement->stripDesign(layID)};
291  m_numStrips = design.numStrips();
292  m_stripPitch = design.stripPitch();
293  m_stripWidth = design.stripWidth();
294  for (unsigned int strip = 1; strip <= reElement->numChannels(layID); ++strip) {
295  bool isValidStrip{false};
296  const Identifier stripID = id_helper.channelID(reElement->identify(),
297  reElement->multilayer(),
298  layer, chType, strip, isValidStrip);
299  if (!isValidStrip) {
300  ATH_MSG_WARNING("Invalid Identifier detected for readout element "
301  <<m_idHelperSvc->toStringDetEl(reElement->identify())
302  <<" layer: "<<layer<<" strip: "<<strip<<" channelType: "<<chType);
303  continue;
304  }
305  m_localStripPos.push_back((reElement->localChannelPosition(stripID)).block<2,1>(0,0));
306  m_globalStripPos.push_back(reElement->globalChannelPosition(gctx, stripID));
307  m_stripGasGap.push_back(layer);
308  m_stripNum.push_back(strip);
309  m_stripLengths.push_back(reElement->stripLength(stripID));
310 
311  if (strip != 1) continue;
312  const Amg::Transform3D locToGlob = reElement->localToGlobalTrans(gctx, stripID);
313  ATH_MSG_DEBUG("The local to global transformation on layers is: " << Amg::toString(locToGlob));
314  m_stripRot.push_back(locToGlob);
315  m_stripRotGasGap.push_back(layer);
316 
317  }
318  break;
319  } case sTgcIdHelper::sTgcChannelTypes::Wire: {
320  const WireGroupDesign& design{reElement->wireDesign(layID)};
321  m_wireGroupWidth = design.numWiresInGroup(2);
322  numWireGroup = design.numStrips();
323  m_wirePitch = design.stripPitch();
324  m_wireWidth = design.stripWidth();
325  m_numWires.push_back(design.nAllWires());
326  m_firstWireGroupWidth.push_back(design.numWiresInGroup(1));
327  m_numWireGroups.push_back(numWireGroup);
328  m_wireCutout.push_back(design.wireCutout());
329  for (unsigned int wireGroup = 1; wireGroup <= numWireGroup; ++wireGroup) {
330  bool isValidWire{false};
331  const Identifier wireGroupID = id_helper.channelID(reElement->identify(),
332  reElement->multilayer(),
333  layer, chType, wireGroup, isValidWire);
334  if (!isValidWire) {
335  ATH_MSG_WARNING("Invalid Identifier detected for readout element "
336  <<m_idHelperSvc->toStringDetEl(reElement->identify())
337  <<" layer: "<<layer<<" wireGroup: "<<wireGroup<<" channelType: "<<chType);
338  continue;
339  }
340  m_localWireGroupPos.push_back(reElement->localChannelPosition(wireGroupID));
341  m_globalWireGroupPos.push_back(reElement->globalChannelPosition(gctx, wireGroupID));
342  m_wireGroupGasGap.push_back(layer);
343  m_wireGroupNum.push_back(wireGroup);
344 
345  if (wireGroup != 1) continue;
346  const Amg::Transform3D locToGlob = reElement->localToGlobalTrans(gctx, wireGroupID);
347  ATH_MSG_DEBUG("The local to global transformation on layers is: " << Amg::toString(locToGlob));
348  m_wireGroupRot.push_back(locToGlob);
349  m_wireGroupRotGasGap.push_back(layer);
350  }
351  break;
352  }
353  }
354  }
355  }
356  return m_tree.fill(ctx) ? StatusCode::SUCCESS : StatusCode::FAILURE;
357 }
358 
359 }
360 
MuonGMR4::sTgcReadoutElement::localChannelPosition
Amg::Vector2D localChannelPosition(const Identifier &measId) const
Returns the local pad/strip/wireGroup position.
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
chType
sTgcIdHelper::sTgcChannelTypes chType
Definition: MuonPhaseII/MuonDetDescr/MuonGeoModelTestR4/src/NSWGeoPlottingAlg.cxx:21
MuonGMR4::sTgcReadoutElement::multilayer
int multilayer() const
Returns the multilayer of the sTgcReadoutElement.
MuonGMR4::sTgcReadoutElement::padHeight
double padHeight(const Identifier &measId) const
Returns the height of all the pads that are not adjacent to the bottom edge of the trapezoid active a...
python.tests.PyTestsLib.finalize
def finalize(self)
_info( "content of StoreGate..." ) self.sg.dump()
Definition: PyTestsLib.py:50
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
MuonGMR4::StripDesign
Definition: StripDesign.h:30
MuonGMR4::WireGroupDesign
Definition: WireGroupDesign.h:23
MuonGMR4::sTgcReadoutElement::padEta
unsigned int padEta(const Identifier &measId) const
Returns the Eta index of the pad for the given pad identifier.
plotting.yearwise_efficiency.channel
channel
Definition: yearwise_efficiency.py:24
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
ActsGeometryContext.h
MuonGMR4::sTgcReadoutElement::numPadEta
unsigned int numPadEta(const Identifier &measId) const
Returns the number of pads in the eta direction in the given layer.
MuonGMR4::sTgcReadoutElement::numChannels
unsigned int numChannels(const Identifier &measId) const
Returns the number of strips / wires / pads in a given gasGap.
Amg::Vector2D
Eigen::Matrix< double, 2, 1 > Vector2D
Definition: GeoPrimitives.h:48
initialize
void initialize()
Definition: run_EoverP.cxx:894
MuonGMR4::StripDesign::numStrips
virtual int numStrips() const
Number of strips on the panel.
MuonGMR4::sTgcReadoutElement::stripDesign
const StripDesign & stripDesign(const Identifier &measId) const
Retrieves the readoutElement Layer given the Identifier/Hash.
MuonGMR4::sTgcReadoutElement::numPadPhi
unsigned int numPadPhi(const Identifier &measId) const
Returns the number of pads in the Phi direction in the given gasGap layer.
MuonGMR4::MuonReadoutElement::chamberDesign
const std::string & chamberDesign() const
The chamber design refers to the construction parameters of a readout element.
yodamerge_tmp.axis
list axis
Definition: yodamerge_tmp.py:241
MuonGMR4::sTgcReadoutElement::stripLength
double stripLength(const Identifier &measId) const
Length of each strip.
MuonGMR4::WireGroupDesign::numWiresInGroup
unsigned int numWiresInGroup(unsigned int groupNum) const
Returns the number of wires in a given group.
Definition: WireGroupDesign.cxx:39
MuonGMR4::MuonReadoutElement::globalToLocalTrans
Amg::Transform3D globalToLocalTrans(const ActsGeometryContext &ctx) const
Transformations to translate between local <-> global coordinates.
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/src/MuonReadoutElement.cxx:78
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
isValid
bool isValid(const T &p)
Av: we implement here an ATLAS-sepcific convention: all particles which are 99xxxxx are fine.
Definition: AtlasPID.h:872
sTgcIdHelper::sTgcChannelTypes
sTgcChannelTypes
Definition: sTgcIdHelper.h:190
MuonGMR4::StripDesign::longHalfHeight
double longHalfHeight() const
Returns the longer half height of the panel.
MuonGMR4::sTgcReadoutElement::measurementHash
IdentifierHash measurementHash(const Identifier &measId) const override final
Constructs the identifier hash from the full measurement Identifier.
MuonGMR4::sTgcReadoutElement::chamberHeight
double chamberHeight() const
Height of the chamber.
MuonGMR4::StripDesign::shortHalfHeight
double shortHalfHeight() const
Returns the shorter half height of the panel.
LArG4FSStartPointFilterLegacy.execute
execute
Definition: LArG4FSStartPointFilterLegacy.py:20
MuonGMR4::sTgcReadoutElement::padPhiShift
double padPhiShift(const Identifier &measId) const
Returns the staggering shift of inner pad edges in the phi direction.
sTgcReadoutElement.h
MuonGMR4::sTgcReadoutElement::wireDesign
const WireGroupDesign & wireDesign(const Identifier &measId) const
Retrieves the readoutElement Layer given the Identifier/Hash.
Amg::toString
std::string toString(const Translation3D &translation, int precision=4)
GeoPrimitvesToStringConverter.
Definition: GeoPrimitivesToStringConverter.h:40
MuonGMR4
The ReadoutGeomCnvAlg converts the Run4 Readout geometry build from the GeoModelXML into the legacy M...
Definition: MdtCalibInput.h:19
EventPrimitivesToStringConverter.h
SG::get
const T * get(const ReadCondHandleKey< T > &key, const EventContext &ctx)
Convenience function to retrieve an object given a ReadCondHandleKey.
Definition: ReadCondHandle.h:287
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
MuonGMR4::StripDesign::yCutout
double yCutout() const
Returns the cutout of the diamond.
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
Amg::transform
Amg::Vector3D transform(Amg::Vector3D &v, Amg::Transform3D &tr)
Transform a point from a Trasformation3D.
Definition: GeoPrimitivesHelpers.h:156
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
GeoModelsTgcTest.h
MuonGMR4::sTgcReadoutElement::measurementId
Identifier measurementId(const IdentifierHash &measHash) const override final
Converts the measurement hash back to the full Identifier.
dot.dot
def dot(G, fn, nodesToHighlight=[])
Definition: dot.py:5
ActsGeometryContext
Include the GeoPrimitives which need to be put first.
Definition: ActsGeometryContext.h:27
MuonGMR4::sTgcReadoutElement::beamlineRadius
double beamlineRadius(const Identifier &measId) const
Returns the distance between the gasGap center and the beamline.
MuonGMR4::sTgcReadoutElement::sChamberLength
double sChamberLength() const
Length of the chamber on the short side.
python.PyKernel.detStore
detStore
Definition: PyKernel.py:41
MuonGMR4::sTgcReadoutElement::globalChannelPosition
Amg::Vector3D globalChannelPosition(const ActsGeometryContext &ctx, const Identifier &measId) const
Returns the global pad/strip/wireGroup position.
MuonGMR4::sTgcReadoutElement::lChamberLength
double lChamberLength() const
Length of the chamber on the long side.
MuonGMR4::sTgcReadoutElement::gasGapThickness
double gasGapThickness() const
Returns the thickness of the gas gap.
MuonGMR4::MuonReadoutElement::alignableTransform
const GeoAlignableTransform * alignableTransform() const
Returnsthe alignable transform of the readout element.
sTgcIdHelper
Definition: sTgcIdHelper.h:55
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::sTgcReadoutElement::numLayers
unsigned int numLayers() const
Returns the number of gas gap layers.
MuonGMR4::sTgcReadoutElement::padPhi
unsigned int padPhi(const Identifier &measId) const
Returns the Phi index of the pad for the given pad identifier.
MuonGMR4::sTgcReadoutElement
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/sTgcReadoutElement.h:20
MuonGMR4::sTgcReadoutElement::padDesign
const PadDesign & padDesign(const Identifier &measId) const
Retrieves the readoutElement Layer given the Identifier/Hash.
eflowRec::phiIndex
unsigned int phiIndex(float phi, float binsize)
calculate phi index for a given phi
Definition: EtaPhiLUT.cxx:23
MuonGMR4::StripDesign::halfWidth
double halfWidth() const
Returns the half height of the strip panel.
MuonGMR4::MuonReadoutElement::stationName
int stationName() const
Returns the stationName (BIS, BOS, etc) encoded into the integer.
MuonGMR4::sTgcReadoutElement::anglePadPhi
double anglePadPhi(const Identifier &measId) const
Returns the angular pitch of the pads in the phi direction.
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
MuonGMR4::sTgcReadoutElement::globalPadCorners
globalCornerArray globalPadCorners(const ActsGeometryContext &ctx, const Identifier &measId) const
MuonGMR4::sTgcReadoutElement::localPadCorners
localCornerArray localPadCorners(const Identifier &measId) const
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
CxxUtils::atoi
int atoi(std::string_view str)
Helper functions to unpack numbers decoded in string into integers and doubles The strings are requir...
Definition: Control/CxxUtils/Root/StringUtils.cxx:85
ActsTrk
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
Definition: MSTrackingVolumeBuilder.cxx:25
MuonGMR4::MuonReadoutElement::stationEta
int stationEta() const
Returns the stationEta (positive A site, negative O site)
MuonGMR4::sTgcReadoutElement::layerHash
IdentifierHash layerHash(const Identifier &measId) const override final
Transforms the Identifier into a layer hash.
MuonGMR4::PadDesign::firstPadPhiDiv
double firstPadPhiDiv() const
Returns the angle of the first pad outer edge w.r.t. the gasGap center from the beamline.
MuonGMR4::sTgcReadoutElement::padNumber
int padNumber(const Amg::Vector2D &hitPos, const Identifier &measId) const
Returns the pad Number given local position of hit and Identifier/Hash.
MuonGMR4::MuonReadoutElement::stationPhi
int stationPhi() const
Returns the stationPhi (1-8) -> sector (2*phi - (isSmall))
generate::Zero
void Zero(TH1D *hin)
Definition: generate.cxx:32
Identifier
Definition: IdentifierFieldParser.cxx:14