ATLAS Offline Software
TgcFastDigiTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 #include "TgcFastDigiTool.h"
6 #include "CLHEP/Random/RandGaussZiggurat.h"
7 #include "CLHEP/Random/RandFlat.h"
9 namespace {
10  constexpr double percentage(unsigned int numerator, unsigned int denom) {
11  return 100. * numerator / std::max(denom, 1u);
12  }
13 }
14 namespace MuonR4 {
15 
16  TgcFastDigiTool::TgcFastDigiTool(const std::string& type, const std::string& name, const IInterface* pIID):
18 
23  return StatusCode::SUCCESS;
24  }
26  ATH_MSG_INFO("Tried to convert "<<m_allHits[0]<<"/"<<m_allHits[1]<<" hits. In, "
27  <<percentage(m_acceptedHits[0], m_allHits[0]) <<"/"
28  <<percentage(m_acceptedHits[1], m_allHits[1]) <<"% of the cases, the conversion was successful");
29  return StatusCode::SUCCESS;
30  }
31 
32  int TgcFastDigiTool::associateBCIdTag(const EventContext& /*ctx*/,
33  const TimedHit& /*timedHit*/) const {
34  return TgcDigit::BC_CURRENT;
35  }
36 
37  bool TgcFastDigiTool::digitizeWireHit(const EventContext& ctx,
38  const TimedHit& timedHit,
39  const Muon::DigitEffiData* efficiencyMap,
40  TgcDigitCollection& outColl,
41  CLHEP::HepRandomEngine* rndEngine,
42  DeadTimeMap& deadTimes) const {
43 
44 
46  const Identifier hitId = timedHit->identify();
47  const TgcIdHelper& idHelper{m_idHelperSvc->tgcIdHelper()};
48  const MuonGMR4::TgcReadoutElement* readOutEle = m_detMgr->getTgcReadoutElement(hitId);
49  const IdentifierHash measHash = readOutEle->measurementHash(hitId);
50 
51  if (!readOutEle->numWireGangs(measHash)) {
52  ATH_MSG_VERBOSE("There're no wires in "<<m_idHelperSvc->toString(hitId)<<" nothing to do");
53  return false;
54  }
55  ++m_allHits[false];
56  if (efficiencyMap && efficiencyMap->getEfficiency(hitId) < CLHEP::RandFlat::shoot(rndEngine,0.,1.)){
57  ATH_MSG_VERBOSE("Simulated hit "<<xAOD::toEigen(timedHit->localPosition())
58  << m_idHelperSvc->toString(hitId) <<" is rejected because of efficency modelling");
59  return false;
60  }
61 
62  const Amg::Vector2D locSimHitPos{xAOD::toEigen(timedHit->localPosition()).block<2,1>(0,0)};
63 
64  const MuonGMR4::WireGroupDesign& design{readOutEle->wireGangLayout(measHash)};
65  if (!design.insideTrapezoid(locSimHitPos)) {
66  ATH_MSG_DEBUG("The hit "<<Amg::toString(locSimHitPos)<<" in "<<m_idHelperSvc->toStringGasGap(hitId)
67  <<" is outside of the trapezoid "<<design);
68  return false;
69  }
70  const int wireGrpNum = design.stripNumber(locSimHitPos);
71 
72  if (wireGrpNum < 0) {
73  ATH_MSG_DEBUG("True hit "<<Amg::toString(locSimHitPos)<<" "<<m_idHelperSvc->toStringGasGap(hitId)
74  <<" is not covered by any wire gang");
75  return false;
76  }
77 
78  const double uncert = design.stripPitch() * design.numWiresInGroup(wireGrpNum) / std::sqrt(12);
79  const double locX = CLHEP::RandGaussZiggurat::shoot(rndEngine, locSimHitPos.x(), uncert);
82  const Amg::Vector2D smearedPos{locX, locSimHitPos.y()};
83  const int prdWireNum = design.stripNumber(smearedPos);
84 
85  if (prdWireNum < 0) {
86  if (design.insideTrapezoid(smearedPos)) {
87  ATH_MSG_WARNING("True hit "<<Amg::toString(locSimHitPos, 2)<<" corresponding to "<<wireGrpNum<<" --> "
88  <<Amg::toString(smearedPos)<<" "<<uncert<<" is outside of "<<design);
89  }
90  return false;
91  }
92  bool isValid{false};
93  const Identifier digitId{idHelper.channelID(hitId, readOutEle->gasGapNumber(measHash), false, prdWireNum, isValid)};
94  if (!isValid) {
95  ATH_MSG_WARNING("Invalid channel "<< m_idHelperSvc->toStringGasGap(hitId)<<", channel: "<<prdWireNum);
96  return false;
97  }
98 
99  if (!passDeadTime(digitId, hitTime(timedHit), m_deadTime, deadTimes)) {
100  ATH_MSG_VERBOSE("Reject hit due to dead map constraint");
101  return false;
102  }
103  ATH_MSG_VERBOSE("Convert simulated hit "<<m_idHelperSvc->toString(digitId)<<" located at "
104  <<Amg::toString(locSimHitPos, 2)<<" wire group number: "<<prdWireNum<<", time: "<<hitTime(timedHit)
105  <<" wiregroup pos "<<Amg::toString(design.center(prdWireNum).value_or(Amg::Vector2D::Zero()), 2));
106  outColl.push_back(std::make_unique<TgcDigit>(digitId, associateBCIdTag(ctx, timedHit)));
107  ++m_acceptedHits[false];
108  return true;
109  }
110  bool TgcFastDigiTool::digitizeStripHit(const EventContext& ctx,
111  const TimedHit& timedHit,
112  const Muon::DigitEffiData* efficiencyMap,
113  TgcDigitCollection& outColl,
114  CLHEP::HepRandomEngine* rndEngine,
115  DeadTimeMap& deadTimes) const {
116 
117  const Identifier hitId = timedHit->identify();
118  const TgcIdHelper& idHelper{m_idHelperSvc->tgcIdHelper()};
119  const MuonGMR4::TgcReadoutElement* readOutEle = m_detMgr->getTgcReadoutElement(hitId);
120 
121  const IdentifierHash measHash = readOutEle->measurementHash(hitId);
122  if (!readOutEle->numStrips(measHash)) {
123  ATH_MSG_DEBUG("There're no strips in "<<m_idHelperSvc->toString(hitId)<<" nothing to do");
124  return false;
125  }
126  ++(m_allHits[true]);
127 
129  if (efficiencyMap && efficiencyMap->getEfficiency(hitId) < CLHEP::RandFlat::shoot(rndEngine,0.,1.)){
130  ATH_MSG_VERBOSE("Simulated hit "<<xAOD::toEigen(timedHit->localPosition())
131  << m_idHelperSvc->toString(hitId) <<" is rejected because of efficency modelling");
132  return false;
133  }
134 
135  const ActsGeometryContext& gctx{getGeoCtx(ctx)};
136 
137  const IdentifierHash stripHash{readOutEle->constructHash(0,readOutEle->gasGapNumber(measHash), true)};
138  const IdentifierHash wireHash{readOutEle->constructHash(0, readOutEle->gasGapNumber(measHash), false)};
139 
140  const Amg::Transform3D toPhiRot{readOutEle->globalToLocalTrans(gctx, stripHash) *
141  readOutEle->localToGlobalTrans(gctx, wireHash)};
142  const Amg::Vector2D locSimHitPos{(toPhiRot*xAOD::toEigen(timedHit->localPosition())).block<2,1>(0,0)};
143 
144 
145  const MuonGMR4::RadialStripDesign& design{readOutEle->stripLayout(measHash)};
146  if (!design.insideTrapezoid(locSimHitPos)) {
147  ATH_MSG_DEBUG("The eta hit "<<Amg::toString(locSimHitPos)<<" in "<<m_idHelperSvc->toStringGasGap(hitId)
148  <<" is outside of the trapezoid "<<std::endl<<design);
149  return false;
150  }
151  int stripNum = design.stripNumber(locSimHitPos);
152  if (stripNum < 0) {
153  ATH_MSG_WARNING("Strip hit "<<Amg::toString(locSimHitPos)<<" cannot be assigned to any active strip for "
154  <<m_idHelperSvc->toStringGasGap(hitId)<<". "<<design);
155  return false;
156  }
158  const Amg::Vector2D stripNorm{design.stripNormal(stripNum)};
159 
162  const double stripPitch = std::abs(*Amg::intersect<2>(design.stripLeftBottom(stripNum), design.stripLeftEdge(stripNum),
163  locSimHitPos, stripNorm)) +
164  std::abs(*Amg::intersect<2>(design.stripRightBottom(stripNum), design.stripRightEdge(stripNum),
165  locSimHitPos, stripNorm));
166 
167  const double uncert = stripPitch / std::sqrt(12);
168  const double locX = CLHEP::RandGaussZiggurat::shoot(rndEngine, locSimHitPos.x(), uncert);
171  const Amg::Vector2D smearedPos{locX, locSimHitPos.y()};
172  const int digitStripNum = design.stripNumber(smearedPos);
173 
174  if (digitStripNum < 0) {
175  if (design.insideTrapezoid(smearedPos)) {
176  ATH_MSG_WARNING("True phi hit "<<Amg::toString(locSimHitPos, 2)<<" corresponding to "<<stripNum<<" --> "
177  <<Amg::toString(smearedPos)<<" "<<uncert<<" is outside of "<<design);
178  }
179  return false;
180  }
181 
182  bool isValid{false};
183  const Identifier digitId{idHelper.channelID(hitId, readOutEle->gasGapNumber(measHash), true, digitStripNum, isValid)};
184  if (!isValid) {
185  ATH_MSG_WARNING("Invalid channel "<< m_idHelperSvc->toStringGasGap(hitId)<<", channel: "<<digitStripNum);
186  return false;
187  }
188 
189  if (!passDeadTime(digitId, hitTime(timedHit), m_deadTime, deadTimes)) {
190  ATH_MSG_VERBOSE("Reject hit due to dead time constraint.");
191  return false;
192  }
193  ATH_MSG_VERBOSE("Convert simulated hit "<<m_idHelperSvc->toString(digitId)<<" located at "
194  <<Amg::toString(locSimHitPos, 2)<<" phi strip number: "<<digitStripNum<<", time: "<<hitTime(timedHit)
195  <<" strip position "<<Amg::toString(design.center(digitStripNum).value_or(Amg::Vector2D::Zero()), 2));
196 
197  outColl.push_back(std::make_unique<TgcDigit>(digitId, associateBCIdTag(ctx, timedHit)));
198 
199  ++(m_acceptedHits[true]);
200  return true;
201  }
202  StatusCode TgcFastDigiTool::digitize(const EventContext& ctx,
203  const TimedHits& hitsToDigit,
204  xAOD::MuonSimHitContainer* sdoContainer) const {
205 
206  // Prepare the temporary cache
207  DigiCache digitCache{};
209  const Muon::DigitEffiData* efficiencyMap{nullptr};
210  ATH_CHECK(SG::get( efficiencyMap, m_effiDataKey, ctx));
211  const TgcIdHelper& idHelper{m_idHelperSvc->tgcIdHelper()};
212 
213  CLHEP::HepRandomEngine* rndEngine = getRandomEngine(ctx);
214 
215  xAOD::ChamberViewer viewer{hitsToDigit, m_idHelperSvc.get()};
216  do {
217  DeadTimeMap deadTimes{};
218  for (const TimedHit& simHit : viewer) {
220  if (m_digitizeMuonOnly && !MC::isMuon(simHit)) {
221  continue;
222  }
223  TgcDigitCollection* outColl = fetchCollection(simHit->identify(), digitCache);
224 
225  const bool digitizedEta = digitizeWireHit(ctx,simHit, efficiencyMap,*outColl, rndEngine, deadTimes);
226  const bool digitizedPhi = digitizeStripHit(ctx, simHit, efficiencyMap,*outColl, rndEngine, deadTimes);
227 
228  if (digitizedEta) {
229  xAOD::MuonSimHit* sdo = addSDO(simHit, sdoContainer);
230  sdo->setIdentifier(outColl->at(outColl->size() - 1 - digitizedPhi)->identify());
231  } else if (digitizedPhi) {
232  xAOD::MuonSimHit* sdo = addSDO(simHit, sdoContainer);
233  sdo->setIdentifier(outColl->at(outColl->size() - 1)->identify());
234  const MuonGMR4::TgcReadoutElement* re{m_detMgr->getTgcReadoutElement(simHit->identify())};
235 
236  const Amg::Transform3D etaToPhi{re->globalToLocalTrans(getGeoCtx(ctx), re->layerHash(sdo->identify())) *
237  re->localToGlobalTrans(getGeoCtx(ctx), re->layerHash(simHit->identify()))};
238 
239  sdo->setLocalDirection(xAOD::toStorage(etaToPhi * xAOD::toEigen(sdo->localDirection())));
240  sdo->setLocalPosition(xAOD::toStorage(etaToPhi * xAOD::toEigen(sdo->localPosition())));
241  }
242  }
243  } while(viewer.next());
245  ATH_CHECK(writeDigitContainer(ctx, m_writeKey, std::move(digitCache), idHelper.module_hash_max()));
246  return StatusCode::SUCCESS;
247  }
248 }
MuonR4::TgcFastDigiTool::m_effiDataKey
SG::ReadCondHandleKey< Muon::DigitEffiData > m_effiDataKey
Definition: TgcFastDigiTool.h:71
xAOD::MuonSimHit_v1
Definition: MuonSimHit_v1.h:18
MuonR4::MuonDigitizationTool::passDeadTime
static bool passDeadTime(const Identifier &channelId, const double hitTime, const double deadTimeWindow, DeadTimeMap &deadTimeMap)
Returns whether the new digit is within the dead time window.
Definition: MuonDigitizationTool.cxx:164
MuonR4::TgcFastDigiTool::m_digitizeMuonOnly
Gaudi::Property< bool > m_digitizeMuonOnly
Definition: TgcFastDigiTool.h:79
MuonR4::TgcFastDigiTool::initialize
StatusCode initialize() override final
Definition: TgcFastDigiTool.cxx:19
xAOD::MuonSimHit_v1::setIdentifier
void setIdentifier(const Identifier &id)
Sets the global ATLAS identifier.
Definition: xAODMuonSimHit_V1.cxx:43
MuonGMR4::WireGroupDesign
Definition: WireGroupDesign.h:23
xAOD::MuonSimHit_v1::identify
Identifier identify() const
Returns the global ATLAS identifier of the SimHit.
Definition: xAODMuonSimHit_V1.cxx:42
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
Trk::locX
@ locX
Definition: ParamDefs.h:37
TgcIdHelper
Definition: TgcIdHelper.h:50
Amg::Vector2D
Eigen::Matrix< double, 2, 1 > Vector2D
Definition: GeoPrimitives.h:48
MuonGMR4::TgcReadoutElement::wireGangLayout
const WireGroupDesign & wireGangLayout(const IdentifierHash &layHash) const
Returns access to the wire group design of the given gasGap [1-3] If the gap does not have a wires an...
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
MuonR4::TgcFastDigiTool::digitizeStripHit
bool digitizeStripHit(const EventContext &ctx, const TimedHit &timedHit, const Muon::DigitEffiData *efficiencyMap, TgcDigitCollection &outColl, CLHEP::HepRandomEngine *rndEngine, DeadTimeMap &deadTimes) const
Digitize the strip hit by smearing the truth hit position according to the wire group pitch and then ...
Definition: TgcFastDigiTool.cxx:110
xAOD::toStorage
MeasVector< N > toStorage(const AmgVector(N)&amgVec)
Converts the double precision of the AmgVector into the floating point storage precision of the MeasV...
Definition: MeasurementDefs.h:69
MuonR4::TgcFastDigiTool::DigiCache
OutDigitCache_t< TgcDigitCollection > DigiCache
Definition: TgcFastDigiTool.h:67
xAOD::MuonSimHit_v1::setLocalPosition
void setLocalPosition(MeasVector< 3 > vec)
Sets the local position of the traversing particle.
Definition: xAODMuonSimHit_V1.cxx:56
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
TimedHitPtr< xAOD::MuonSimHit >
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
MuonR4::TgcFastDigiTool::TgcFastDigiTool
TgcFastDigiTool(const std::string &type, const std::string &name, const IInterface *pIID)
Definition: TgcFastDigiTool.cxx:16
SG::VarHandleKey::empty
bool empty() const
Test if the key is blank.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:150
MuonR4::TgcFastDigiTool::associateBCIdTag
int associateBCIdTag(const EventContext &ctx, const TimedHit &timedHit) const
: Associates the global bcIdTag to the digit
Definition: TgcFastDigiTool.cxx:32
Trk::u
@ u
Enums for curvilinear frames.
Definition: ParamDefs.h:77
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
MuonR4::TgcFastDigiTool::finalize
StatusCode finalize() override final
Definition: TgcFastDigiTool.cxx:25
MuonR4::TgcFastDigiTool::digitize
StatusCode digitize(const EventContext &ctx, const TimedHits &hitsToDigit, xAOD::MuonSimHitContainer *sdoContainer) const override final
Digitize the time ordered hits and write them to the digit format specific for the detector technolog...
Definition: TgcFastDigiTool.cxx:202
TgcFastDigiTool.h
xAOD::ChamberViewer
Definition: ChamberViewer.h:59
Amg::toString
std::string toString(const Translation3D &translation, int precision=4)
GeoPrimitvesToStringConverter.
Definition: GeoPrimitivesToStringConverter.h:40
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
MuonR4::TgcFastDigiTool::m_deadTime
Gaudi::Property< double > m_deadTime
Definition: TgcFastDigiTool.h:77
MuonR4::MuonDigitizationTool::getRandomEngine
CLHEP::HepRandomEngine * getRandomEngine(const EventContext &ctx) const
Definition: MuonDigitizationTool.cxx:129
MuonR4::TgcFastDigiTool::digitizeWireHit
bool digitizeWireHit(const EventContext &ctx, const TimedHit &timedHit, const Muon::DigitEffiData *efficiencyMap, TgcDigitCollection &outColl, CLHEP::HepRandomEngine *rndEngine, DeadTimeMap &deadTimes) const
Digitize the wire hit by smearing the truth hit position according to the wire group pitch and then a...
Definition: TgcFastDigiTool.cxx:37
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
TgcDigitCollection
Definition: TgcDigitCollection.h:17
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
Muon::DigitEffiData::getEfficiency
double getEfficiency(const Identifier &channelId, bool isInnerQ1=false) const
Returns the signal generation efficiency of the sTgc channel.
Definition: DigitEffiData.cxx:38
MuonGMR4::TgcReadoutElement::gasGapNumber
static unsigned gasGapNumber(const IdentifierHash &measHash)
Unpacks the gas gap number from the measurement hash.
xAOD::MuonSimHit_v1::localDirection
ConstVectorMap< 3 > localDirection() const
Returns the local direction of the traversing particle.
Definition: xAODMuonSimHit_V1.cxx:66
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
MuonGMR4::TgcReadoutElement::measurementHash
IdentifierHash measurementHash(const Identifier &measId) const override final
Constructs the identifier hash from the full measurement Identifier.
TgcDigit::BC_CURRENT
@ BC_CURRENT
Definition: TgcDigit.h:37
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
ActsGeometryContext
Include the GeoPrimitives which need to be put first.
Definition: ActsGeometryContext.h:27
compute_lumi.denom
denom
Definition: compute_lumi.py:76
Muon::DigitEffiData
Definition: DigitEffiData.h:23
MuonR4::MuonDigitizationTool::getGeoCtx
const ActsGeometryContext & getGeoCtx(const EventContext &ctx) const
Returns the reference to the ActsGeometryContext needed to fetch global positions from the Readout ge...
Definition: MuonDigitizationTool.cxx:135
MuonR4::MuonDigitizationTool::addSDO
xAOD::MuonSimHit * addSDO(const TimedHit &hit, xAOD::MuonSimHitContainer *sdoContainer) const
Adds the timed simHit to the output SDO container.
Definition: MuonDigitizationTool.cxx:142
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
MuonR4::MuonDigitizationTool::writeDigitContainer
StatusCode writeDigitContainer(const EventContext &ctx, const SG::WriteHandleKey< DigitCont > &key, OutDigitCache_t< DigitColl > &&digitCache, unsigned int hashMax) const
Helper function to move the collected digits into the final DigitContainer.
xAOD::MuonSimHit_v1::setLocalDirection
void setLocalDirection(MeasVector< 3 > vec)
Sets the local direction of the traversing particle.
Definition: xAODMuonSimHit_V1.cxx:62
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
ChamberViewer.h
MuonR4::MuonDigitizationTool::hitTime
static double hitTime(const TimedHit &hit)
Returns the global time of the hit which is the sum of eventTime & individual hit time.
Definition: MuonDigitizationTool.cxx:63
MuonR4
This header ties the generic definitions in this package.
Definition: HoughEventData.h:16
MuonR4::MuonDigitizationTool::initialize
StatusCode initialize() override
Definition: MuonDigitizationTool.cxx:11
MuonDigit::identify
Identifier identify() const
Definition: MuonDigit.h:30
MuonR4::TgcFastDigiTool::m_writeKey
SG::WriteHandleKey< TgcDigitContainer > m_writeKey
Definition: TgcFastDigiTool.h:69
MuonGMR4::TgcReadoutElement::numStrips
unsigned numStrips(const IdentifierHash &layHash) const
Returns the number of strips for a given gasGap [1-3].
MuonR4::MuonDigitizationTool
Barebone implementation of the I/O infrastructure for all MuonDigitizationTools.
Definition: MuonDigitizationTool.h:30
MuonR4::MuonDigitizationTool::TimedHits
std::vector< TimedHitPtr< xAOD::MuonSimHit > > TimedHits
Definition: MuonDigitizationTool.h:58
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
MuonGMR4::TgcReadoutElement::numWireGangs
unsigned numWireGangs(const IdentifierHash &layHash) const
Returns the number of wire gangs for a given gasGap [1-3].
MuonR4::MuonDigitizationTool::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: MuonDigitizationTool.h:113
re
const boost::regex re(r_e)
MuonGMR4::TgcReadoutElement::constructHash
static IdentifierHash constructHash(unsigned measCh, unsigned gasGap, const bool isStrip)
Constructs the Hash out of the Identifier fields (channel, gasGap, isStrip)
xAOD::MuonSimHit_v1::localPosition
ConstVectorMap< 3 > localPosition() const
Returns the local postion of the traversing particle.
Definition: xAODMuonSimHit_V1.cxx:60
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
MuonR4::MuonDigitizationTool::m_detMgr
const MuonGMR4::MuonDetectorManager * m_detMgr
Definition: MuonDigitizationTool.h:111
MuonR4::MuonDigitizationTool::DeadTimeMap
std::unordered_map< Identifier, double > DeadTimeMap
Definition: MuonDigitizationTool.h:100
DataVector::at
const T * at(size_type n) const
Access an element, as an rvalue.
IdentifierHash
This is a "hash" representation of an Identifier. This encodes a 32 bit index which can be used to lo...
Definition: IdentifierHash.h:25
MuonGMR4::RadialStripDesign
Definition: RadialStripDesign.h:23
MuonR4::MuonDigitizationTool::fetchCollection
DigitColl * fetchCollection(const Identifier &hitId, OutDigitCache_t< DigitColl > &digitCache) const
Helper function that provides fetches the proper DigitCollection from the DigitCache for a given hit ...
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
MuonGMR4::TgcReadoutElement
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/TgcReadoutElement.h:19
HepMCHelpers.h
MuonGMR4::TgcReadoutElement::stripLayout
const RadialStripDesign & stripLayout(const IdentifierHash &layHash) const
Returns access to the strip design of the given gasGap [1-3] If the gap does not have strips an excep...
generate::Zero
void Zero(TH1D *hin)
Definition: generate.cxx:32
isMuon
bool isMuon(const T &p)
Definition: AtlasPID.h:202
Identifier
Definition: IdentifierFieldParser.cxx:14