ATLAS Offline Software
sTgcFastDigiTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 #include "sTgcFastDigiTool.h"
5 #include "CLHEP/Random/RandGaussZiggurat.h"
6 #include "CLHEP/Random/RandFlat.h"
7 namespace {
8  constexpr double percentage(unsigned int numerator, unsigned int denom) {
9  return 100. * numerator / std::max(denom, 1u);
10  }
11  using channelType = sTgcIdHelper::sTgcChannelTypes;
12 }
13 namespace MuonR4 {
14 
15  sTgcFastDigiTool::sTgcFastDigiTool(const std::string& type, const std::string& name, const IInterface* pIID):
17 
23  return StatusCode::SUCCESS;
24  }
26  ATH_MSG_INFO("Tried to convert "<<m_allHits[channelType::Strip]<<"/"
27  <<m_allHits[channelType::Wire]<<"/"
28  <<m_allHits[channelType::Pad]<<" strip/wire/pad hits. In, "
29  <<percentage(m_acceptedHits[channelType::Strip], m_allHits[channelType::Strip]) <<"/"
30  <<percentage(m_acceptedHits[channelType::Wire], m_allHits[channelType::Wire])<<"/"
31  <<percentage(m_acceptedHits[channelType::Pad], m_allHits[channelType::Pad])
32  <<"% of the cases, the conversion was successful");
33  return StatusCode::SUCCESS;
34  }
35  StatusCode sTgcFastDigiTool::digitize(const EventContext& ctx,
36  const TimedHits& hitsToDigit,
37  xAOD::MuonSimHitContainer* sdoContainer) const {
38  const sTgcIdHelper& idHelper{m_idHelperSvc->stgcIdHelper()};
39  // Prepare the temporary cache
40  DigiCache digitCache{};
42  const Muon::DigitEffiData* efficiencyMap{nullptr};
43  ATH_CHECK(retrieveConditions(ctx, m_effiDataKey, efficiencyMap));
44  const NswErrorCalibData* nswUncertDB{nullptr};
45  ATH_CHECK(retrieveConditions(ctx, m_uncertCalibKey, nswUncertDB));
46 
47  CLHEP::HepRandomEngine* rndEngine = getRandomEngine(ctx);
48  for (const TimedHit& simHit : hitsToDigit) {
50  if (std::abs(simHit->pdgId()) != 13) continue;
51 
52  sTgcDigitCollection* digiColl = fetchCollection(simHit->identify(), digitCache);
53  bool digitized{false};
54  digitized |= digitizeStrip(ctx, simHit, nswUncertDB, efficiencyMap, rndEngine, *digiColl);
55  digitized |= digitizeWire(ctx, simHit, efficiencyMap, rndEngine, *digiColl);
56  digitized |= digitizePad(ctx, simHit, efficiencyMap, rndEngine, *digiColl);
57 
58  if (digitized) {
59  addSDO(simHit, sdoContainer);
60  }
61  }
63  ATH_CHECK(writeDigitContainer(ctx, m_writeKey, std::move(digitCache),
64  idHelper.module_hash_max()));
65  return StatusCode::SUCCESS;
66  }
67  bool sTgcFastDigiTool::digitizeStrip(const EventContext& ctx,
68  const TimedHit& timedHit,
69  const NswErrorCalibData* errorCalibDB,
70  const Muon::DigitEffiData* efficiencyMap,
71  CLHEP::HepRandomEngine* rndEngine,
72  sTgcDigitCollection& outCollection) const {
73 
74  if (!m_digitizeStrip) {
75  return false;
76  }
77  ++m_allHits[channelType::Strip];
78  const Identifier hitId{timedHit->identify()};
79  const MuonGMR4::sTgcReadoutElement* readOutEle{m_detMgr->getsTgcReadoutElement(hitId)};
80 
81  const sTgcIdHelper& idHelper{m_idHelperSvc->stgcIdHelper()};
82 
83  const int gasGap = idHelper.gasGap(hitId);
84  const MuonGMR4::StripDesign& design{readOutEle->stripDesign(hitId)};
85 
86  const Amg::Vector2D stripPos{xAOD::toEigen(timedHit->localPosition()).block<2,1>(0,0)};
87 
88  const int stripNum = design.stripNumber(stripPos);
89  if (stripNum < 0) {
90  ATH_MSG_VERBOSE("Strip hit "<<Amg::toString(stripPos)<<" "<<m_idHelperSvc->toStringGasGap(hitId)
91  <<" is out of range "<<std::endl<<design);
92  return false;
93  }
94 
95  bool isValid{false};
96  const Identifier stripId = idHelper.channelID(hitId, readOutEle->multilayer(),
97  gasGap, channelType::Strip, stripNum, isValid);
98 
99  if (!isValid) {
100  ATH_MSG_WARNING("Failed to deduce a valid identifier from "
101  <<m_idHelperSvc->toStringGasGap(hitId)<<" strip: "<<stripNum);
102  return false;
103  }
104 
106  bool isInnerQ1 = readOutEle->isEtaZero(readOutEle->measurementHash(hitId), stripPos);
107  if (efficiencyMap && efficiencyMap->getEfficiency(hitId, isInnerQ1) < CLHEP::RandFlat::shoot(rndEngine,0.,1.)){
108  ATH_MSG_VERBOSE("Simulated strip hit "<<xAOD::toEigen(timedHit->localPosition())
109  << m_idHelperSvc->toString(hitId) <<" is rejected because of efficency modelling");
110  return false;
111  }
112 
113  NswErrorCalibData::Input errorCalibInput{};
114  errorCalibInput.stripId= stripId;
115  errorCalibInput.locTheta = M_PI - timedHit->localDirection().theta();
116  errorCalibInput.clusterAuthor = 3; // centroid
117 
118  const double uncert = errorCalibDB->clusterUncertainty(errorCalibInput);
119  const double smearedX = CLHEP::RandGaussZiggurat::shoot(rndEngine, stripPos.x(), uncert);
120 
121  const Amg::Vector2D digitPos{smearedX * Amg::Vector2D::UnitX()};
122 
123  const int digitStrip = design.stripNumber(digitPos);
124  if (digitStrip < 0) {
125  ATH_MSG_VERBOSE("Smeared strip hit "<<Amg::toString(digitPos)<<" "<<m_idHelperSvc->toStringGasGap(hitId)
126  <<" is out of range "<<std::endl<<design);
127  return false;
128  }
129  const Identifier digitId = idHelper.channelID(hitId, readOutEle->multilayer(),
130  gasGap, channelType::Strip, digitStrip, isValid);
131 
132  if (!isValid) {
133  ATH_MSG_WARNING("Failed to deduce a valid identifier from "
134  <<m_idHelperSvc->toStringGasGap(hitId)<<" digit: "<<digitStrip);
135  return false;
136  }
137  constexpr double dummyCharge = 66666;
158  const double pull = (smearedX - (*design.center(digitStrip)).x()) / design.stripPitch();
159  const double w1 = CLHEP::RandFlat::shoot(rndEngine, 0., 0.5 *(1. - pull));
160  const double w2 = 1. - pull -2.*w1;
161  const double w3 = pull + w1;
162  const Identifier stripIdB = idHelper.channelID(hitId, readOutEle->multilayer(),
163  gasGap, channelType::Strip, digitStrip -1, isValid);
164  if (isValid) {
165  outCollection.push_back(std::make_unique<sTgcDigit>(stripIdB,
166  associateBCIdTag(ctx, timedHit),
167  hitTime(timedHit), dummyCharge * w1, false, false));
168  }
169  outCollection.push_back(std::make_unique<sTgcDigit>(digitId,
170  associateBCIdTag(ctx, timedHit),
171  hitTime(timedHit), dummyCharge * w2, false, false));
172 
173  const Identifier stripIdA = idHelper.channelID(hitId, readOutEle->multilayer(),
174  gasGap, channelType::Strip, digitStrip + 1, isValid);
175  if (isValid) {
176  outCollection.push_back(std::make_unique<sTgcDigit>(stripIdA,
177  associateBCIdTag(ctx, timedHit),
178  hitTime(timedHit), dummyCharge * w3, false, false));
179  }
180  ++m_acceptedHits[channelType::Strip];
181  return true;
182  }
183 
184  bool sTgcFastDigiTool::digitizeWire(const EventContext& ctx,
185  const TimedHit& timedHit,
186  const Muon::DigitEffiData* efficiencyMap,
187  CLHEP::HepRandomEngine* rndEngine,
188  sTgcDigitCollection& outCollection) const {
189 
190  if (!m_digitizeWire) {
191  return false;
192  }
193 
194  ++m_allHits[channelType::Wire];
195 
196  const Identifier hitId{timedHit->identify()};
198  if (efficiencyMap && efficiencyMap->getEfficiency(hitId) < CLHEP::RandFlat::shoot(rndEngine,0.,1.)){
199  ATH_MSG_VERBOSE("Simulated wire hit "<<xAOD::toEigen(timedHit->localPosition())
200  << m_idHelperSvc->toString(hitId) <<" is rejected because of efficency modelling");
201  return false;
202  }
203  const sTgcIdHelper& idHelper{m_idHelperSvc->stgcIdHelper()};
204  const MuonGMR4::sTgcReadoutElement* readOutEle = m_detMgr->getsTgcReadoutElement(hitId);
205  const int gasGap = idHelper.gasGap(hitId);
206 
207 
209  // Rotate the sim hit into the wire view
210  const IdentifierHash stripLayHash{readOutEle->createHash(gasGap, channelType::Strip, 0)};
211  const IdentifierHash wireLayHash{readOutEle->createHash(gasGap, channelType::Wire, 0)};
212 
213  const ActsGeometryContext& gctx{getGeoCtx(ctx)};
214  const Amg::Transform3D toWire{readOutEle->globalToLocalTrans(gctx, wireLayHash) *
215  readOutEle->localToGlobalTrans(gctx, stripLayHash)};
216 
217  const Amg::Vector2D wirePos{(toWire*xAOD::toEigen(timedHit->localPosition())).block<2,1>(0,0)};
218  // do not digitise wires that are never read out in reality
219  bool isInnerQ1 = readOutEle->isEtaZero(readOutEle->measurementHash(hitId), wirePos);
220  if(isInnerQ1) return false;
221 
223  if (efficiencyMap && efficiencyMap->getEfficiency(hitId, isInnerQ1) < CLHEP::RandFlat::shoot(rndEngine,0.,1.)){
224  ATH_MSG_VERBOSE("Simulated wire hit "<<xAOD::toEigen(timedHit->localPosition())
225  << m_idHelperSvc->toString(hitId) <<" is rejected because of efficency modelling");
226  return false;
227  }
228 
229  const MuonGMR4::WireGroupDesign& design{readOutEle->wireDesign(gasGap)};
230 
231  const int wireGrpNum = design.stripNumber(wirePos);
232  if (wireGrpNum < 0) {
233  ATH_MSG_VERBOSE("The wire "<<Amg::toString(wirePos)<<" in "<<m_idHelperSvc->toStringGasGap(hitId)
234  <<" is outside of the acceptance of "<<std::endl<<design);
235  return false;
236  }
237  const double uncert = design.stripPitch() * design.numWiresInGroup(wireGrpNum);
238 
239  const double smearedX = CLHEP::RandGaussZiggurat::shoot(rndEngine, wirePos.x(), uncert);
240 
241  const Amg::Vector2D digitPos{smearedX * Amg::Vector2D::UnitX()};
242 
243  const int digitWire = design.stripNumber(digitPos);
244  if (digitWire < 0) {
245  ATH_MSG_VERBOSE("Strip hit "<<Amg::toString(digitPos)<<" "<<m_idHelperSvc->toStringGasGap(hitId)
246  <<" is out of range "<<std::endl<<design);
247  return false;
248  }
249  bool isValid{false};
250  const Identifier digitId = idHelper.channelID(hitId, readOutEle->multilayer(),
251  gasGap, channelType::Wire, digitWire, isValid);
252 
253  if (!isValid) {
254  ATH_MSG_WARNING("Failed to deduce a valid identifier from "
255  <<m_idHelperSvc->toStringGasGap(hitId)<<" digit: "<<digitWire);
256  return false;
257  }
258  outCollection.push_back(std::make_unique<sTgcDigit>(digitId,
259  associateBCIdTag(ctx, timedHit),
260  hitTime(timedHit), 666, false, false));
261 
262 
263  ++m_acceptedHits[channelType::Wire];
264  return true;
265  }
266  int sTgcFastDigiTool::associateBCIdTag(const EventContext& /*ctx*/,
267  const TimedHit& /*timedHit*/) const {
269  return 0;
270  }
271 
272  bool sTgcFastDigiTool::digitizePad(const EventContext& ctx,
273  const TimedHit& timedHit,
274  const Muon::DigitEffiData* efficiencyMap,
275  CLHEP::HepRandomEngine* rndEngine,
276  sTgcDigitCollection& outCollection) const {
277 
278  if (!m_digitizePads) {
279  return false;
280  }
281 
282  ++m_allHits[channelType::Pad];
283 
284  const Identifier hitId{timedHit->identify()};
285  const sTgcIdHelper& idHelper{m_idHelperSvc->stgcIdHelper()};
286  const MuonGMR4::sTgcReadoutElement* readOutEle = m_detMgr->getsTgcReadoutElement(hitId);
287  const int gasGap = idHelper.gasGap(hitId);
288 
289 
291  // Rotate the sim hit into the wire view
292  const IdentifierHash stripLayHash{readOutEle->createHash(gasGap, channelType::Strip, 0)};
293  const IdentifierHash padLayerHash{readOutEle->createHash(gasGap, channelType::Pad, 0)};
294 
295  const ActsGeometryContext& gctx{getGeoCtx(ctx)};
296  const Amg::Transform3D toPad{readOutEle->globalToLocalTrans(gctx, padLayerHash) *
297  readOutEle->localToGlobalTrans(gctx, stripLayHash)};
298 
299  const Amg::Vector2D padPos{(toPad*xAOD::toEigen(timedHit->localPosition())).block<2,1>(0,0)};
301  const MuonGMR4::PadDesign& design{readOutEle->padDesign(gasGap)};
302 
303  const auto [padEta, padPhi] = design.channelNumber(padPos);
304  if (padEta < 0 || padPhi < 0) {
305  ATH_MSG_VERBOSE("The pad "<<Amg::toString(padPos)<<" in "<<m_idHelperSvc->toStringGasGap(hitId)
306  <<" is outside of the acceptance of "<<std::endl<<design);
307  return false;
308  }
309  bool isValid{false};
310  const Identifier padId = idHelper.padID(hitId, readOutEle->multilayer(),
311  gasGap, channelType::Pad, padEta, padPhi, isValid);
312 
313 
314  if (!isValid) {
315  ATH_MSG_WARNING("Failed to decuce a valid pad Identifier from "<<Amg::toString(padPos)
316  <<" in "<<m_idHelperSvc->toStringGasGap(hitId));
317  return false;
318  }
319 
321  bool isInnerQ1 = readOutEle->isEtaZero(readOutEle->measurementHash(hitId), padPos);
322  if (efficiencyMap && efficiencyMap->getEfficiency(hitId, isInnerQ1) < CLHEP::RandFlat::shoot(rndEngine,0.,1.)){
323  ATH_MSG_VERBOSE("Simulated pad hit "<<xAOD::toEigen(timedHit->localPosition())
324  << m_idHelperSvc->toString(hitId) <<" is rejected because of efficency modelling");
325  return false;
326  }
327 
328 
329 
330  outCollection.push_back(std::make_unique<sTgcDigit>(padId,
331  associateBCIdTag(ctx, timedHit),
332  hitTime(timedHit), 666, false, false));
333 
334  ++m_acceptedHits[channelType::Pad];
335 
336  return true;
337  }
338 
339 
340 }
sTgcFastDigiTool.h
NswErrorCalibData
Definition: NswErrorCalibData.h:19
MuonGMR4::sTgcReadoutElement::multilayer
int multilayer() const
Returns the multilayer of the sTgcReadoutElement.
dumpTgcDigiDeadChambers.gasGap
list gasGap
Definition: dumpTgcDigiDeadChambers.py:33
MuonGMR4::StripDesign::stripNumber
virtual int stripNumber(const Amg::Vector2D &pos) const
Calculates the number of the strip whose center is closest to the given point.
MuonGMR4::StripDesign
Definition: StripDesign.h:30
MuonGMR4::WireGroupDesign
Definition: WireGroupDesign.h:23
max
#define max(a, b)
Definition: cfImp.cxx:41
MuonR4::sTgcFastDigiTool::initialize
StatusCode initialize() override final
Definition: sTgcFastDigiTool.cxx:18
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
MuonR4::sTgcFastDigiTool::m_effiDataKey
SG::ReadCondHandleKey< Muon::DigitEffiData > m_effiDataKey
Definition: sTgcFastDigiTool.h:57
Amg::Vector2D
Eigen::Matrix< double, 2, 1 > Vector2D
Definition: GeoPrimitives.h:48
MuonR4::sTgcFastDigiTool::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: sTgcFastDigiTool.cxx:35
MuonR4::sTgcFastDigiTool::associateBCIdTag
int associateBCIdTag(const EventContext &ctx, const TimedHit &timedHit) const
: Associates the global bcIdTag to the digit
Definition: sTgcFastDigiTool.cxx:266
M_PI
#define M_PI
Definition: ActiveFraction.h:11
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)
Definition: AtlasPID.h:214
MuonR4::sTgcFastDigiTool::m_writeKey
SG::WriteHandleKey< sTgcDigitContainer > m_writeKey
Definition: sTgcFastDigiTool.h:55
SG::VarHandleKey::empty
bool empty() const
Test if the key is blank.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:150
sTgcIdHelper::sTgcChannelTypes
sTgcChannelTypes
Definition: sTgcIdHelper.h:190
x
#define x
MuonR4::MuonDigitizationTool::retrieveConditions
StatusCode retrieveConditions(const EventContext &ctx, const SG::ReadCondHandleKey< Container > &key, const Container *&contPtr) const
Helper function to access the conditions data.
Trk::u
@ u
Enums for curvilinear frames.
Definition: ParamDefs.h:83
MuonGMR4::sTgcReadoutElement::measurementHash
IdentifierHash measurementHash(const Identifier &measId) const override final
Constructs the identifier hash from the full measurement Identifier.
MuonGMR4::PadDesign::channelNumber
std::pair< int, int > channelNumber(const Amg::Vector2D &hitPos) const
Function to retrieve the pad eta and phi given a local position coordinate.
MuonR4::sTgcFastDigiTool::m_uncertCalibKey
SG::ReadCondHandleKey< NswErrorCalibData > m_uncertCalibKey
Definition: sTgcFastDigiTool.h:61
MuonR4::MuonDigitizationTool::addSDO
void addSDO(const TimedHit &hit, xAOD::MuonSimHitContainer *sdoContainer) const
Adds the timed simHit to the output SDO container.
Definition: MuonDigitizationTool.cxx:148
MuonGMR4::sTgcReadoutElement::wireDesign
const WireGroupDesign & wireDesign(const Identifier &measId) const
Retrieves the readoutElement Layer given the Identifier/Hash.
MuonR4::sTgcFastDigiTool::m_digitizePads
Gaudi::Property< bool > m_digitizePads
Definition: sTgcFastDigiTool.h:69
MuonGMR4::sTgcReadoutElement::createHash
static IdentifierHash createHash(const unsigned int gasGap, const unsigned int channelType, const unsigned int channel, const unsigned int wireInGrp=0)
Create a measurement hash from the Identifier fields.
Amg::toString
std::string toString(const Translation3D &translation, int precision=4)
GeoPrimitvesToStringConverter.
Definition: GeoPrimitivesToStringConverter.h:40
sTgcDigitCollection
Definition: sTgcDigitCollection.h:18
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
MuonR4::MuonDigitizationTool::getRandomEngine
CLHEP::HepRandomEngine * getRandomEngine(const EventContext &ctx) const
Definition: MuonDigitizationTool.cxx:135
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
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:36
python.StandardJetMods.pull
pull
Definition: StandardJetMods.py:264
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
NswErrorCalibData::clusterUncertainty
double clusterUncertainty(const Input &clustInfo) const
Definition: NswErrorCalibData.cxx:95
MuonGMR4::sTgcReadoutElement::isEtaZero
bool isEtaZero(const IdentifierHash &measurementHash, const Amg::Vector2D &localPosition) const
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/src/sTgcReadoutElement.cxx:350
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:581
MuonR4::sTgcFastDigiTool::digitizeWire
bool digitizeWire(const EventContext &ctx, const TimedHit &timedHit, const Muon::DigitEffiData *effiData, CLHEP::HepRandomEngine *rndEngine, sTgcDigitCollection &outCollection) const
Definition: sTgcFastDigiTool.cxx:184
ActsGeometryContext
Include the GeoPrimitives which need to be put first.
Definition: ActsGeometryContext.h:27
compute_lumi.denom
denom
Definition: compute_lumi.py:76
MuonR4::sTgcFastDigiTool::DigiCache
OutDigitCache_t< sTgcDigitCollection > DigiCache
Definition: sTgcFastDigiTool.h:54
NswErrorCalibData::Input::stripId
Identifier stripId
Identifier of the strip.
Definition: NswErrorCalibData.h:27
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:141
MuonGMR4::WireGroupDesign::stripNumber
int stripNumber(const Amg::Vector2D &pos) const override
Calculates the number of the strip whose center is closest to the given point.
MuonR4::sTgcFastDigiTool::finalize
StatusCode finalize() override final
Definition: sTgcFastDigiTool.cxx:25
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
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.
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
MuonR4::sTgcFastDigiTool::m_digitizeWire
Gaudi::Property< bool > m_digitizeWire
Definition: sTgcFastDigiTool.h:68
sTgcIdHelper
Definition: sTgcIdHelper.h:55
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
MuonGMR4::sTgcReadoutElement
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/sTgcReadoutElement.h:21
MuonGMR4::sTgcReadoutElement::padDesign
const PadDesign & padDesign(const Identifier &measId) const
Retrieves the readoutElement Layer given the Identifier/Hash.
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:69
MuonR4
The CsvMuonSimHitDumper reads a Simulation Hit container for muons and dumps information to csv files...
Definition: MuonSpacePoint.h:11
MuonR4::MuonDigitizationTool::initialize
StatusCode initialize() override
Definition: MuonDigitizationTool.cxx:17
MuonR4::sTgcFastDigiTool::digitizeStrip
bool digitizeStrip(const EventContext &ctx, const TimedHit &timedHit, const NswErrorCalibData *errorCalibDB, const Muon::DigitEffiData *effiData, CLHEP::HepRandomEngine *rndEngine, sTgcDigitCollection &outCollection) const
Definition: sTgcFastDigiTool.cxx:67
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:60
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
MuonR4::MuonDigitizationTool::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: MuonDigitizationTool.h:122
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:120
MuonR4::sTgcFastDigiTool::m_digitizeStrip
Gaudi::Property< bool > m_digitizeStrip
Definition: sTgcFastDigiTool.h:67
NswErrorCalibData::Input
Helper struct to be parsed to the object to derive the specific error of the cluster.
Definition: NswErrorCalibData.h:25
IdentifierHash
Definition: IdentifierHash.h:38
MuonR4::sTgcFastDigiTool::sTgcFastDigiTool
sTgcFastDigiTool(const std::string &type, const std::string &name, const IInterface *pIID)
Definition: sTgcFastDigiTool.cxx:15
MuonGMR4::PadDesign
Definition: PadDesign.h:24
MuonR4::sTgcFastDigiTool::digitizePad
bool digitizePad(const EventContext &ctx, const TimedHit &timedHit, const Muon::DigitEffiData *effiData, CLHEP::HepRandomEngine *rndEngine, sTgcDigitCollection &outCollection) const
Definition: sTgcFastDigiTool.cxx:272
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 ...