ATLAS Offline Software
Public Member Functions | Protected Types | Protected Member Functions | Static Protected Member Functions | Protected Attributes | Private Types | Private Member Functions | Static Private Member Functions | Private Attributes | List of all members
MuonR4::RpcFastDigiTool Class Referencefinal

#include <RpcFastDigiTool.h>

Inheritance diagram for MuonR4::RpcFastDigiTool:
Collaboration diagram for MuonR4::RpcFastDigiTool:

Public Member Functions

 RpcFastDigiTool (const std::string &type, const std::string &name, const IInterface *pIID)
 
StatusCode initialize () override final
 
StatusCode finalize () override final
 
StatusCode processBunchXing (int bunchXing, SubEventIterator bSubEvents, SubEventIterator eSubEvents) override final
 
StatusCode mergeEvent (const EventContext &ctx) override final
 
StatusCode prepareEvent (const EventContext &ctx, const unsigned int) override final
 When being run from PileUpToolsAlgs, this method is called at the start of the subevts loop. More...
 
StatusCode processAllSubEvents (const EventContext &ctx) override final
 alternative interface which uses the PileUpMergeSvc to obtain all the required SubEvents. More...
 
StatusCode processAllSubEvents (const EventContext &ctx) const
 Reentrant version of the digitization tool. More...
 

Protected Types

using TimedHit = TimedHitPtr< xAOD::MuonSimHit >
 
using TimedHits = std::vector< TimedHitPtr< xAOD::MuonSimHit > >
 
template<class DetType >
using OutDigitCache_t = std::vector< std::unique_ptr< DetType > >
 DigitContainers are sorted by DigitCollections which are the ensemble of all hits in a given MuonChamber. More...
 
using DeadTimeMap = std::unordered_map< Identifier, double >
 

Protected Member Functions

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 technology. More...
 
CLHEP::HepRandomEngine * getRandomEngine (const EventContext &ctx) const
 
xAOD::MuonSimHitaddSDO (const TimedHit &hit, xAOD::MuonSimHitContainer *sdoContainer) const
 Adds the timed simHit to the output SDO container. More...
 
const ActsGeometryContextgetGeoCtx (const EventContext &ctx) const
 Returns the reference to the ActsGeometryContext needed to fetch global positions from the Readout geometry. More...
 
template<class Container >
StatusCode retrieveContainer (const EventContext &ctx, const SG::ReadHandleKey< Container > &key, const Container *&contPtr) const
 Helper function to retrieve a container from StoreGate. More...
 
template<class Container >
StatusCode retrieveConditions (const EventContext &ctx, const SG::ReadCondHandleKey< Container > &key, const Container *&contPtr) const
 Helper function to access the conditions data. More...
 
template<class DigitColl >
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 identifier If the Collection is fetched for the first time, it's inserted into the cache first. More...
 
template<class DigitCont , class DigitColl >
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. More...
 

Static Protected Member Functions

static double hitTime (const TimedHit &hit)
 Returns the global time of the hit which is the sum of eventTime & individual hit time. More...
 
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. More...
 

Protected Attributes

const MuonGMR4::MuonDetectorManagerm_detMgr {nullptr}
 
ServiceHandle< Muon::IMuonIdHelperSvcm_idHelperSvc
 

Private Types

using EdgeSide = MuonGMR4::RpcReadoutElement::EdgeSide
 
using DigiCache = OutDigitCache_t< RpcDigitCollection >
 
using PileUpHits = PileUpMergeSvc::TimedList< xAOD::MuonSimHitContainer >::type
 
using SimHitLocalCopy = std::pair< std::unique_ptr< xAOD::MuonSimHitContainer >, std::unique_ptr< xAOD::MuonSimHitAuxContainer > >
 Create a local copy of the sim hits to ensure overlayed hits across the events remain valid. More...
 

Private Member Functions

bool digitizeHit (const Identifier &gasGapId, const bool measuresPhi, const MuonGMR4::RpcReadoutElement &reEle, const double hitTime, const Amg::Vector2D &locPos, const Muon::DigitEffiData *effiMap, RpcDigitCollection &outContainer, CLHEP::HepRandomEngine *rndEngine, DeadTimeMap &deadTimes) const
 Digitize the sim hit as Rpc strip 1D hit. More...
 
bool digitizeHitBI (const Identifier &gasGapId, const MuonGMR4::RpcReadoutElement &reEle, const double hitTime, const Amg::Vector2D &locPos, const Muon::DigitEffiData *effiMap, RpcDigitCollection &outContainer, CLHEP::HepRandomEngine *rndEngine, DeadTimeMap &deadTimes) const
 Digitize the sim hit as Rpc strip 2D hit. More...
 
StatusCode fillTimedHits (PileUpHits &&hitColl, TimedHits &timedHits) const
 Translates the PileUpHits into the timed hits format. More...
 

Static Private Member Functions

static double timeOverThreshold (CLHEP::HepRandomEngine *rndmEngine)
 Roll the time over threshold for each signal digit. More...
 

Private Attributes

int m_stIdxBIL {-1}
 
int m_stIdxBIS {-1}
 
SG::WriteHandleKey< RpcDigitContainerm_writeKey {this, "OutputObjectName", "RPC_DIGITS"}
 
SG::ReadCondHandleKey< Muon::DigitEffiDatam_effiDataKey
 
std::array< std::atomic< unsigned >, 2 > m_allHits ATLAS_THREAD_SAFE {}
 
std::array< std::atomic< unsigned >, 2 > m_acceptedHits ATLAS_THREAD_SAFE {}
 
Gaudi::Property< double > m_propagationVelocity
 
Gaudi::Property< double > m_stripTimeResolution
 
Gaudi::Property< double > m_deadTime {this, "deadTime", 100.*Gaudi::Units::nanosecond}
 
Gaudi::Property< bool > m_digitizeMuonOnly
 
SG::ReadHandleKey< xAOD::MuonSimHitContainerm_simHitKey {this, "SimHitKey", ""}
 
SG::ReadHandleKey< ActsGeometryContextm_geoCtxKey
 
ServiceHandle< PileUpMergeSvcm_mergeSvc {this, "PileUpMergeSvc", "PileUpMergeSvc", ""}
 
Gaudi::Property< std::string > m_streamName {this, "StreamName", ""}
 
ServiceHandle< IAthRNGSvcm_rndmSvc {this, "RndmSvc", "AthRNGSvc", ""}
 
SG::WriteHandleKey< xAOD::MuonSimHitContainerm_sdoKey {this, "OutputSDOName", ""}
 
Gaudi::Property< bool > m_onlyUseContainerName
 
Gaudi::Property< bool > m_includePileUpTruth {this, "IncludePileUpTruth", true, "Include pile-up truth info"}
 
std::string m_inputObjectName {""}
 
TimedHits m_timedHits {}
 
std::vector< SimHitLocalCopym_simHits {}
 

structors and AlgTool implementation

virtual StatusCode processAllSubEvents (const EventContext &ctx)=0
 dummy implementation to allow compilation while all Digitization packages are migrated to use this new interface. More...
 
virtual bool toProcess (int bunchXing) const override
 the method this base class helps implementing More...
 
virtual bool filterPassed () const override
 dummy implementation of passing filter More...
 
virtual void resetFilter () override
 dummy implementation of filter reset More...
 
Gaudi::Property< int > m_firstXing
 
Gaudi::Property< int > m_lastXing
 
Gaudi::Property< int > m_vetoPileUpTruthLinks
 
bool m_filterPassed {true}
 

Detailed Description

Definition at line 16 of file RpcFastDigiTool.h.

Member Typedef Documentation

◆ DeadTimeMap

using MuonR4::MuonDigitizationTool::DeadTimeMap = std::unordered_map<Identifier, double>
protectedinherited

Definition at line 129 of file MuonDigitizationTool.h.

◆ DigiCache

Definition at line 74 of file RpcFastDigiTool.h.

◆ EdgeSide

Definition at line 29 of file RpcFastDigiTool.h.

◆ OutDigitCache_t

template<class DetType >
using MuonR4::MuonDigitizationTool::OutDigitCache_t = std::vector<std::unique_ptr<DetType> >
protectedinherited

DigitContainers are sorted by DigitCollections which are the ensemble of all hits in a given MuonChamber.

To fill the final DigitContainer thread-safely, the DigitCollections shall be cached pre cached in a OutDigitCache_t vector which is later moved to the final DigitContainer

Definition at line 109 of file MuonDigitizationTool.h.

◆ PileUpHits

Definition at line 145 of file MuonDigitizationTool.h.

◆ SimHitLocalCopy

using MuonR4::MuonDigitizationTool::SimHitLocalCopy = std::pair<std::unique_ptr<xAOD::MuonSimHitContainer>, std::unique_ptr<xAOD::MuonSimHitAuxContainer> >
privateinherited

Create a local copy of the sim hits to ensure overlayed hits across the events remain valid.

Definition at line 172 of file MuonDigitizationTool.h.

◆ TimedHit

Definition at line 70 of file MuonDigitizationTool.h.

◆ TimedHits

using MuonR4::MuonDigitizationTool::TimedHits = std::vector<TimedHitPtr<xAOD::MuonSimHit> >
protectedinherited

Definition at line 71 of file MuonDigitizationTool.h.

Constructor & Destructor Documentation

◆ RpcFastDigiTool()

MuonR4::RpcFastDigiTool::RpcFastDigiTool ( const std::string &  type,
const std::string &  name,
const IInterface *  pIID 
)

Definition at line 17 of file RpcFastDigiTool.cxx.

17  :

Member Function Documentation

◆ addSDO()

xAOD::MuonSimHit * MuonR4::MuonDigitizationTool::addSDO ( const TimedHit hit,
xAOD::MuonSimHitContainer sdoContainer 
) const
protectedinherited

Adds the timed simHit to the output SDO container.

The hit may be rejected if it's originating from pile-up and the pile-up truth skimming strategy is applied

Definition at line 148 of file MuonDigitizationTool.cxx.

149  {
150  if(!sdoContainer) {
151  ATH_MSG_VERBOSE("No SDO container setup of writing");
152  return nullptr;
153  }
154  if (!m_includePileUpTruth && HepMC::ignoreTruthLink(hit->genParticleLink(), m_vetoPileUpTruthLinks)) {
155  ATH_MSG_VERBOSE("Hit "<<m_idHelperSvc->toString(hit->identify())<<" is a pile-up truth link");
156  return nullptr;
157  }
158 
159  xAOD::MuonSimHit* sdoHit = sdoContainer->push_back(std::make_unique<xAOD::MuonSimHit>());
160  (*sdoHit) = (*hit);
161  static const SG::Accessor<float> acc_eventTime{"MuSim_evtTime"};
162  static const SG::Accessor<unsigned short> acc_eventID{"MuSim_evtID"};
163  static const SG::Accessor<unsigned short> acc_puType{"MuSim_puType"};
164  acc_eventTime(*sdoHit) = hit.eventTime();
165  acc_eventID(*sdoHit) = hit.eventId();
166  acc_puType(*sdoHit) = hit.pileupType();
167  return sdoHit;
168  }

◆ digitize()

StatusCode MuonR4::RpcFastDigiTool::digitize ( const EventContext &  ctx,
const TimedHits hitsToDigit,
xAOD::MuonSimHitContainer sdoContainer 
) const
finaloverrideprotectedvirtual

Digitize the time ordered hits and write them to the digit format specific for the detector technology.

A new MuonSimHitContainer pointer is parsed to also create the MuonSDO. If a new SDO should be added to the container plese use the addSDO() method as defined below.

Fetch the conditions for efficiency calculations

Standard digitization path

We need to rotate the local frame in order to be consistent with the Identifier

Write everything at the end into the final digit container

Implements MuonR4::MuonDigitizationTool.

Definition at line 34 of file RpcFastDigiTool.cxx.

36  {
37  const RpcIdHelper& idHelper{m_idHelperSvc->rpcIdHelper()};
38  // Prepare the temporary cache
39  DigiCache digitCache{};
41  const Muon::DigitEffiData* efficiencyMap{nullptr};
42  ATH_CHECK(retrieveConditions(ctx, m_effiDataKey, efficiencyMap));
43 
44  CLHEP::HepRandomEngine* rndEngine = getRandomEngine(ctx);
45  xAOD::ChamberViewer viewer{hitsToDigit, m_idHelperSvc.get()};
46  do {
47  DeadTimeMap deadTimes{};
48  for (const TimedHit& simHit : viewer) {
49  if (m_digitizeMuonOnly && std::abs(simHit->pdgId()) != 13){
50  continue;
51  }
52  const Identifier hitId{simHit->identify()};
53 
54  const MuonGMR4::RpcReadoutElement* readOutEle = m_detMgr->getRpcReadoutElement(hitId);
55  const Amg::Vector3D locPos{xAOD::toEigen(simHit->localPosition())};
56  RpcDigitCollection* digiColl = fetchCollection(hitId, digitCache);
57  bool run4_BIS = ((m_idHelperSvc->stationName(hitId) == m_stIdxBIS) && (abs(m_idHelperSvc->stationEta(hitId)) < 7));
58  if ((m_idHelperSvc->stationName(hitId) != m_stIdxBIL) && !(run4_BIS)) {
60  const bool digitizedEta = digitizeHit(hitId, false, *readOutEle,
61  hitTime(simHit), locPos.block<2,1>(0,0),
62  efficiencyMap, *digiColl, rndEngine, deadTimes);
63 
64  const bool digitizedPhi = digitizeHit(hitId, true, *readOutEle, hitTime(simHit),
65  etaToPhi*locPos.block<2,1>(0,0),
66  efficiencyMap, *digiColl, rndEngine, deadTimes);
67  if (digitizedEta) {
68  xAOD::MuonSimHit* sdo = addSDO(simHit, sdoContainer);
69  const Identifier digitId{(*digiColl)[digiColl->size() -1 - digitizedPhi]->identify()};
70  sdo->setIdentifier(digitId);
71  } else if (digitizedPhi) {
72  xAOD::MuonSimHit* sdo = addSDO(simHit, sdoContainer);
74  Amg::Vector3D phiPos{locPos};
75  phiPos.block<2,1>(0,0) = etaToPhi * phiPos.block<2,1>(0,0);
76  Amg::Vector3D locDir{xAOD::toEigen(simHit->localDirection())};
77  locDir.block<2,1>(0,0) = etaToPhi * locDir.block<2,1>(0,0);
78  const Identifier digitId{(*digiColl)[digiColl->size() -1]->identify()};
79  sdo->setIdentifier(digitId);
81  sdo->setLocalPosition(xAOD::toStorage(phiPos));
82  }
83  } else if (digitizeHitBI(hitId, *readOutEle, hitTime(simHit), locPos.block<2,1>(0,0),
84  efficiencyMap, *digiColl, rndEngine, deadTimes)) {
85  xAOD::MuonSimHit* sdo = addSDO(simHit, sdoContainer);
86  const Identifier digitId{(*digiColl)[digiColl->size() -1]->identify()};
87  sdo->setIdentifier(digitId);
88  }
89  }
90  } while (viewer.next());
92  ATH_CHECK(writeDigitContainer(ctx, m_writeKey, std::move(digitCache), idHelper.module_hash_max()));
93  return StatusCode::SUCCESS;
94  }

◆ digitizeHit()

bool MuonR4::RpcFastDigiTool::digitizeHit ( const Identifier gasGapId,
const bool  measuresPhi,
const MuonGMR4::RpcReadoutElement reEle,
const double  hitTime,
const Amg::Vector2D locPos,
const Muon::DigitEffiData effiMap,
RpcDigitCollection outContainer,
CLHEP::HepRandomEngine *  rndEngine,
DeadTimeMap deadTimes 
) const
private

Digitize the sim hit as Rpc strip 1D hit.


Parameters
gasGapIdIdentifier of the associated gasGap
measuresPhiProcess a phi or an eta strip
designPtrPointer to the striplayout of the gasGap
hitTimeGlobal time of the hit
locPosOnStripLocal position of the hit perpendicular to the strip plane
effiMapPointer to an efficiency look-up table
outContainerDigitCollection to push the new digit into
rndEngineRandom engine used for smearing
deadTimesReference to the last digitized times in order to apply the dead time model

Final check whether the digit is actually efficient

Correct for the signal propagation time

Definition at line 95 of file RpcFastDigiTool.cxx.

103  {
104 
105  ++(m_allHits[measuresPhi]);
106  const MuonGMR4::StripDesign& design{measuresPhi ? *reEle.getParameters().phiDesign
107  : *reEle.getParameters().etaDesign};
108 
109  const double uncert = design.stripPitch() / std::sqrt(12.);
110  const double smearedX = CLHEP::RandGaussZiggurat::shoot(rndEngine, locPos.x(), uncert);
111  const Amg::Vector2D locHitPos{smearedX, locPos.y()};
112 
113  if (!design.insideTrapezoid(locHitPos)) {
114  ATH_MSG_VERBOSE("The hit "<<Amg::toString(locHitPos)<<" is outside of the trapezoid bounds for "
115  <<m_idHelperSvc->toStringGasGap(gasGapId)<<", measuresPhi: "<<(measuresPhi ? "yay" : "nay"));
116  return false;
117  }
118  const int strip = design.stripNumber(locHitPos);
119  if (strip < 0) {
120  ATH_MSG_VERBOSE("Hit " << Amg::toString(locHitPos) << " cannot trigger any signal in a strip for "
121  << m_idHelperSvc->toStringGasGap(gasGapId) <<std::endl<<design<<
122  std::endl<<", measuresPhi: "<<(measuresPhi ? "yay" : "nay"));
123  return false;
124  }
125 
126  const RpcIdHelper& id_helper{m_idHelperSvc->rpcIdHelper()};
127 
128  bool isValid{false};
129  const Identifier digitId{id_helper.channelID(gasGapId,
130  id_helper.doubletZ(gasGapId),
131  id_helper.doubletPhi(gasGapId),
132  id_helper.gasGap(gasGapId),
133  measuresPhi, strip, isValid)};
134 
135  if (!isValid) {
136  ATH_MSG_WARNING("Invalid hit identifier obtained for "<<m_idHelperSvc->toStringGasGap(gasGapId)
137  <<", eta strip "<<strip<<" & hit "<<Amg::toString(locHitPos,2 )
138  <<" /// "<<design);
139  return false;
140  }
142  if (effiMap && effiMap->getEfficiency(digitId) < CLHEP::RandFlat::shoot(rndEngine,0.,1.)) {
143  ATH_MSG_VERBOSE("Hit is marked as inefficient");
144  return false;
145  }
146 
147  if (!passDeadTime(digitId, hitTime, m_deadTime, deadTimes)) {
148  ATH_MSG_VERBOSE("Reject hit due to dead map constraint");
149  return false;
150  }
152  const double signalTime = hitTime + reEle.distanceToEdge(reEle.measurementHash(digitId),
154  const double digitTime = CLHEP::RandGaussZiggurat::shoot(rndEngine, signalTime, m_stripTimeResolution);
155  outContainer.push_back(std::make_unique<RpcDigit>(digitId, digitTime, timeOverThreshold(rndEngine)));
156  ++(m_acceptedHits[measuresPhi]);
157  return true;
158  }

◆ digitizeHitBI()

bool MuonR4::RpcFastDigiTool::digitizeHitBI ( const Identifier gasGapId,
const MuonGMR4::RpcReadoutElement reEle,
const double  hitTime,
const Amg::Vector2D locPos,
const Muon::DigitEffiData effiMap,
RpcDigitCollection outContainer,
CLHEP::HepRandomEngine *  rndEngine,
DeadTimeMap deadTimes 
) const
private

Digitize the sim hit as Rpc strip 2D hit.


Parameters
gasGapIdIdentifier of the associated gasGap
designPtrPointer to the striplayout of the gasGap
hitTimeGlobal time of the hit
locPosLocal position of the hit inside the strip plane
effiMapPointer to an efficiency look-up table
outContainerDigitCollection to push the new digit into
rndEngineRandom engine used for smearing
deadTimesReference to the last digitized times in order to apply the dead time model

Smeared x coordinate

Smear the Phi Coordinate

Smeared propagation time in nanoseconds along strip to y=-stripLength/2 (L) and y=stripLength/2 (R)

Check whether the digit is actually efficient

Definition at line 159 of file RpcFastDigiTool.cxx.

166  {
167 
168  ++(m_allHits[false]);
169  const MuonGMR4::StripDesign& design{*reEle.getParameters().etaDesign};
170  const RpcIdHelper& id_helper{m_idHelperSvc->rpcIdHelper()};
171 
172 
174  const double uncert = design.stripPitch() / std::sqrt(12.);
175  const double smearedX = CLHEP::RandGaussZiggurat::shoot(rndEngine, locPos.x(), uncert);
176 
178  // True propagation time in nanoseconds along strip to y=-stripLength/2 (L) and y=stripLength/2 (R)
179  const IdentifierHash layHash = reEle.layerHash(gasGapId);
180  const double propagationTimeL = reEle.distanceToEdge(layHash, locPos, EdgeSide::readOut) / m_propagationVelocity;
181  const double propagationTimeR = reEle.distanceToEdge(layHash, locPos, EdgeSide::highVoltage)/ m_propagationVelocity;
182 
184  const double smearedTimeL = CLHEP::RandGaussZiggurat::shoot(rndEngine, propagationTimeL, m_stripTimeResolution);
185  const double smearedTimeR = CLHEP::RandGaussZiggurat::shoot(rndEngine, propagationTimeR, m_stripTimeResolution);
186 
187  const double smearedDeltaT = smearedTimeR - smearedTimeL;
188 
189  /*
190  |--- d1, t1 ---||--- d1, t1 ---||-- d --| For t2 > t1:
191  ||||||||||||||||X|||||||||||||||||||||||| <- RPC strip, deltaT = t2 - t1, d1 = v_prop * t1 (likewise for d2),
192  |-------- d2, t2 -------| X is a hit l = d1 + d2, d = d2 - d1 -> d = l - 2d1 = v_prop * deltaT
193  |----------------- l -------------------|
194  Hence, d1 = 0.5 * (l - d) = 0.5 * (l - v_prop * deltaT)
195 
196  Then converting to coordinate system where 0 -> -0.5*l to match strip local coordinates
197  d1 -> d1 = -0.5*l + 0.5* (l-d) = -0.5*d = -0.5 * v_pro*deltaT
198  */
199  const double smearedY = -0.5 * m_propagationVelocity * smearedDeltaT; //in mm
200  //If smearedDeltaT == 0 position is in the centre of the strip (0).
201 
202  const Amg::Vector2D locHitPos{smearedX, smearedY};
203 
204  if (!design.insideTrapezoid(locHitPos)) {
205  ATH_MSG_VERBOSE("The hit "<<Amg::toString(locHitPos)<<" is outside of the trapezoid bounds for "
206  <<m_idHelperSvc->toStringGasGap(gasGapId));
207  return false;
208  }
209 
210  const int strip = design.stripNumber(locHitPos);
211  if (strip < 0) {
212  ATH_MSG_VERBOSE("Hit " << Amg::toString(locHitPos) << " cannot trigger any signal in a strip for "
213  << m_idHelperSvc->toStringGasGap(gasGapId) <<std::endl<<design);
214  return false;
215  }
216 
217 
218  bool isValid{false};
219  const Identifier digitId{id_helper.channelID(gasGapId,
220  id_helper.doubletZ(gasGapId),
221  id_helper.doubletPhi(gasGapId),
222  id_helper.gasGap(gasGapId),
223  false, strip, isValid)};
224  if (!isValid) {
225  ATH_MSG_WARNING("Failed to create a valid strip "<<m_idHelperSvc->toStringGasGap(gasGapId)
226  <<", strip: "<<strip);
227  return false;
228  }
229  if (!passDeadTime(digitId, hitTime, m_deadTime, deadTimes)) {
230  ATH_MSG_VERBOSE("Reject hit due to dead map constraint");
231  return false;
232  }
233  ATH_MSG_VERBOSE("Digitize hit "<<m_idHelperSvc->toString(digitId)<<" located at: "<<Amg::toString(locHitPos));
235  const bool effiSignal1 = !effiMap || effiMap->getEfficiency(gasGapId) >= CLHEP::RandFlat::shoot(rndEngine,0., 1.);
236  const bool effiSignal2 = !effiMap || effiMap->getEfficiency(gasGapId) >= CLHEP::RandFlat::shoot(rndEngine,0., 1.);
237  if (effiSignal1) {
238  outContainer.push_back(std::make_unique<RpcDigit>(digitId, hitTime + smearedTimeR, timeOverThreshold(rndEngine)));
239  }
240  if (effiSignal2) {
241  outContainer.push_back(std::make_unique<RpcDigit>(digitId, hitTime + smearedTimeL, timeOverThreshold(rndEngine), true));
242  }
243  if (effiSignal1 || effiSignal2) {
244  ++(m_acceptedHits[false]);
245  return true;
246  }
247  return false;
248  }

◆ fetchCollection()

template<class DigitColl >
DigitColl* MuonR4::MuonDigitizationTool::fetchCollection ( const Identifier hitId,
OutDigitCache_t< DigitColl > &  digitCache 
) const
protectedinherited

Helper function that provides fetches the proper DigitCollection from the DigitCache for a given hit identifier If the Collection is fetched for the first time, it's inserted into the cache first.

◆ fillTimedHits()

StatusCode MuonR4::MuonDigitizationTool::fillTimedHits ( PileUpHits &&  hitColl,
TimedHits timedHits 
) const
privateinherited

Translates the PileUpHits into the timed hits format.

Definition at line 50 of file MuonDigitizationTool.cxx.

50  {
51  for (const auto& [timeIndex, simHitColl] : hitColl) {
52  timedHits.reserve(timedHits.capacity() + simHitColl->size());
53  for (const xAOD::MuonSimHit* simHit : *simHitColl) {
54  timedHits.emplace_back(timeIndex.time(), timeIndex.index(), simHit, timeIndex.type());
55  }
56  }
57  std::sort(timedHits.begin(), timedHits.end(),
58  [](const TimedHit& a, const TimedHit& b){
59  if (a->identify() != b->identify()){
60  return a->identify() < b->identify();
61  }
62  if (a.eventId() != b.eventId()) {
63  return a.eventId() < b.eventId();
64  }
65  return a.eventTime() < b.eventTime();
66  });
67  return StatusCode::SUCCESS;
68  }

◆ filterPassed()

virtual bool PileUpToolBase::filterPassed ( ) const
inlineoverridevirtualinherited

dummy implementation of passing filter

Definition at line 49 of file PileUpToolBase.h.

49 { return m_filterPassed; }

◆ finalize()

StatusCode MuonR4::RpcFastDigiTool::finalize ( )
finaloverride

Definition at line 28 of file RpcFastDigiTool.cxx.

28  {
29  ATH_MSG_INFO("Tried to convert "<<m_allHits[0]<<"/"<<m_allHits[1]<<" hits. In, "
30  <<percentage(m_acceptedHits[0], m_allHits[0]) <<"/"
31  <<percentage(m_acceptedHits[1], m_allHits[1]) <<"% of the cases, the conversion was successful");
32  return StatusCode::SUCCESS;
33  }

◆ getGeoCtx()

const ActsGeometryContext & MuonR4::MuonDigitizationTool::getGeoCtx ( const EventContext &  ctx) const
protectedinherited

Returns the reference to the ActsGeometryContext needed to fetch global positions from the Readout geometry.

Definition at line 141 of file MuonDigitizationTool.cxx.

141  {
142  const ActsGeometryContext* gctx{};
143  if (!retrieveContainer(ctx, m_geoCtxKey, gctx).isSuccess()) {
144  THROW_EXCEPTION("Failed to retrieve the geometry context "<<m_geoCtxKey.fullKey());
145  }
146  return *gctx;
147  }

◆ getRandomEngine()

CLHEP::HepRandomEngine * MuonR4::MuonDigitizationTool::getRandomEngine ( const EventContext &  ctx) const
protectedinherited

Definition at line 135 of file MuonDigitizationTool.cxx.

135  {
136  ATHRNG::RNGWrapper* rngWrapper = m_rndmSvc->getEngine(this, m_streamName);
137  std::string rngName = m_streamName;
138  rngWrapper->setSeed(rngName, ctx);
139  return rngWrapper->getEngine(ctx);
140  }

◆ hitTime()

double MuonR4::MuonDigitizationTool::hitTime ( const TimedHit hit)
staticprotectedinherited

Returns the global time of the hit which is the sum of eventTime & individual hit time.

Definition at line 69 of file MuonDigitizationTool.cxx.

69  {
70  return hit.eventTime() + hit->globalTime();
71  }

◆ initialize()

StatusCode MuonR4::RpcFastDigiTool::initialize ( )
finaloverridevirtual

Reimplemented from MuonR4::MuonDigitizationTool.

Definition at line 20 of file RpcFastDigiTool.cxx.

20  {
24  m_stIdxBIL = m_idHelperSvc->rpcIdHelper().stationNameIndex("BIL");
25  m_stIdxBIS = m_idHelperSvc->rpcIdHelper().stationNameIndex("BIS");
26  return StatusCode::SUCCESS;
27  }

◆ mergeEvent()

StatusCode MuonR4::MuonDigitizationTool::mergeEvent ( const EventContext &  ctx)
finaloverrideinherited

Definition at line 98 of file MuonDigitizationTool.cxx.

98  {
99  ATH_MSG_DEBUG("mergeEvent()");
100 
102  if (!m_sdoKey.empty()) {
104  ATH_CHECK(sdoContainer.record(std::make_unique<xAOD::MuonSimHitContainer>(),
105  std::make_unique<xAOD::MuonSimHitAuxContainer>()));
106  }
107  ATH_CHECK(digitize(ctx, m_timedHits, !m_sdoKey.empty() ? sdoContainer.ptr() : nullptr));
108  m_timedHits.clear();
109  m_simHits.clear();
110  return StatusCode::SUCCESS;
111  }

◆ passDeadTime()

bool MuonR4::MuonDigitizationTool::passDeadTime ( const Identifier channelId,
const double  hitTime,
const double  deadTimeWindow,
DeadTimeMap deadTimeMap 
)
staticprotectedinherited

Returns whether the new digit is within the dead time window.

channelId: Identifier of the fired channel

hitTime: Current hit time

deadTimeWindow: Dead time to pass before the next hit may be accepted

deadTimeMap: Map storing the last hit times from each Identifier

Channel not seen before

Update dead time map & accept hit

Definition at line 169 of file MuonDigitizationTool.cxx.

172  {
173  auto insertItr = deadTimeMap.insert(std::make_pair(channelId,hitTime));
175  if (insertItr.second) {
176  return true;
177  }
178  if (hitTime - insertItr.first->second < deadTimeWindow) {
179  return false;
180  }
182  insertItr.first->second = hitTime;
183  return true;
184  }

◆ prepareEvent()

StatusCode MuonR4::MuonDigitizationTool::prepareEvent ( const EventContext &  ctx,
const unsigned int  nInputEvents 
)
finaloverrideinherited

When being run from PileUpToolsAlgs, this method is called at the start of the subevts loop.

Not able to access SubEvents

Definition at line 41 of file MuonDigitizationTool.cxx.

42  {
43 
44  ATH_MSG_DEBUG("prepareEvent() called for " << nInputEvents << " input events");
45  m_timedHits.clear();
46  m_simHits.clear();
47  return StatusCode::SUCCESS;
48  }

◆ processAllSubEvents() [1/3]

StatusCode MuonR4::MuonDigitizationTool::processAllSubEvents ( const EventContext &  ctx) const
inherited

Reentrant version of the digitization tool.

In case of single hits container just load the collection using read handles

Definition at line 77 of file MuonDigitizationTool.cxx.

77  {
78  PileUpHits hitCollList{};
79  TimedHits timedHits{};
81  if (!m_onlyUseContainerName) {
82  const xAOD::MuonSimHitContainer* hitCollection{nullptr};
83  ATH_CHECK(retrieveContainer(ctx, m_simHitKey, hitCollection));
84  hitCollList.emplace_back(PileUpTimeEventIndex(0), hitCollection);
85  } else {
86  ATH_CHECK(m_mergeSvc->retrieveSubEvtsData(m_inputObjectName, hitCollList));
87  }
88  ATH_CHECK(fillTimedHits(std::move(hitCollList), timedHits));
90  if (!m_sdoKey.empty()) {
92  ATH_CHECK(sdoContainer.record(std::make_unique<xAOD::MuonSimHitContainer>(),
93  std::make_unique<xAOD::MuonSimHitAuxContainer>()));
94  }
95  ATH_CHECK(digitize(ctx, timedHits, !m_sdoKey.empty() ? sdoContainer.ptr() : nullptr));
96  return StatusCode::SUCCESS;
97  }

◆ processAllSubEvents() [2/3]

StatusCode MuonR4::MuonDigitizationTool::processAllSubEvents ( const EventContext &  ctx)
finaloverridevirtualinherited

alternative interface which uses the PileUpMergeSvc to obtain all the required SubEvents.

Reimplemented from PileUpToolBase.

Definition at line 72 of file MuonDigitizationTool.cxx.

72  {
73  const MuonDigitizationTool* digiTool = this;
74  return digiTool->processAllSubEvents(ctx);
75  }

◆ processAllSubEvents() [3/3]

virtual StatusCode IPileUpTool::processAllSubEvents
inherited

dummy implementation to allow compilation while all Digitization packages are migrated to use this new interface.

◆ processBunchXing()

StatusCode MuonR4::MuonDigitizationTool::processBunchXing ( int  bunchXing,
SubEventIterator  bSubEvents,
SubEventIterator  eSubEvents 
)
finaloverridevirtualinherited

Reimplemented from PileUpToolBase.

Definition at line 114 of file MuonDigitizationTool.cxx.

116  {
117  ATH_MSG_DEBUG("processBunchXing()" << bunchXing);
118  PileUpHits hitList{}, hitListPermanent{};
119  ATH_CHECK(m_mergeSvc->retrieveSubSetEvtData(m_inputObjectName, hitList, bunchXing, bSubEvents, eSubEvents));
120  ATH_MSG_VERBOSE(hitList.size() << " hits in xAODMuonSimHitContainer " << m_inputObjectName << " found");
121  for (auto& [hitPtr, hitContainer] : hitList) {
122  auto copyContainer = std::make_unique<xAOD::MuonSimHitContainer>();
123  auto copyAuxContainer = std::make_unique<xAOD::MuonSimHitAuxContainer>();
124  copyContainer->setStore(copyAuxContainer.get());
125  for (const xAOD::MuonSimHit* copyMe : *hitContainer) {
126  (*copyContainer->push_back(std::make_unique<xAOD::MuonSimHit>())) = (*copyMe);
127  }
128  hitListPermanent.emplace_back(hitPtr, copyContainer.get());
129  m_simHits.emplace_back(std::move(copyContainer), std::move(copyAuxContainer));
130  }
131  ATH_CHECK(fillTimedHits(std::move(hitListPermanent), m_timedHits));
132  return StatusCode::SUCCESS;
133  }

◆ resetFilter()

virtual void PileUpToolBase::resetFilter ( )
inlineoverridevirtualinherited

dummy implementation of filter reset

Reimplemented in MergeTruthJetsTool.

Definition at line 51 of file PileUpToolBase.h.

51 { m_filterPassed=true; }

◆ retrieveConditions()

template<class Container >
StatusCode MuonR4::MuonDigitizationTool::retrieveConditions ( const EventContext &  ctx,
const SG::ReadCondHandleKey< Container > &  key,
const Container *&  contPtr 
) const
protectedinherited

Helper function to access the conditions data.

If the key is empty, the conditions object is assigned to be a nullptr Otherwise, a failure is returned if the Conditions data are not available in the event.

◆ retrieveContainer()

template<class Container >
StatusCode MuonR4::MuonDigitizationTool::retrieveContainer ( const EventContext &  ctx,
const SG::ReadHandleKey< Container > &  key,
const Container *&  contPtr 
) const
protectedinherited

Helper function to retrieve a container from StoreGate.

If the readHandleKey is empty, the container is assigned to be a nullptr and the operation is marked as success. Otherwise, a failure is returned if the Container cannot be fetched from StoreGate

◆ timeOverThreshold()

double MuonR4::RpcFastDigiTool::timeOverThreshold ( CLHEP::HepRandomEngine *  rndmEngine)
staticprivate

Roll the time over threshold for each signal digit.

Definition at line 249 of file RpcFastDigiTool.cxx.

249  {
250  //mn Time-over-threshold modeled as a narrow and a wide gaussian
251  //mn based on the fit documented in https://its.cern.ch/jira/browse/ATLASRECTS-7820
252  constexpr double tot_mean_narrow = 16.;
253  constexpr double tot_sigma_narrow = 2.;
254  constexpr double tot_mean_wide = 15.;
255  constexpr double tot_sigma_wide = 4.5;
256 
257  double thetot = 0.;
258 
259  if (CLHEP::RandFlat::shoot(rndmEngine)<0.75) {
260  thetot = CLHEP::RandGaussZiggurat::shoot(rndmEngine, tot_mean_narrow, tot_sigma_narrow);
261  } else {
262  thetot = CLHEP::RandGaussZiggurat::shoot(rndmEngine, tot_mean_wide, tot_sigma_wide);
263  }
264 
265  return std::max(thetot, 0.);
266  }

◆ toProcess()

virtual bool PileUpToolBase::toProcess ( int  bunchXing) const
inlineoverridevirtualinherited

the method this base class helps implementing

Reimplemented in MergeHijingParsTool, and MergeTrackRecordCollTool.

Definition at line 32 of file PileUpToolBase.h.

32  {
33  //closed interval [m_firstXing,m_lastXing]
34  return !((m_firstXing > bunchXing) || (bunchXing > m_lastXing));
35  }

◆ writeDigitContainer()

template<class DigitCont , class DigitColl >
StatusCode MuonR4::MuonDigitizationTool::writeDigitContainer ( const EventContext &  ctx,
const SG::WriteHandleKey< DigitCont > &  key,
OutDigitCache_t< DigitColl > &&  digitCache,
unsigned int  hashMax 
) const
protectedinherited

Helper function to move the collected digits into the final DigitContainer.

The function needs the maximal size of the container in advance which is provided by calling the module_hash_max() function of the corresponding MuonIdHelper.

Member Data Documentation

◆ ATLAS_THREAD_SAFE [1/2]

std::array<std::atomic<unsigned>, 2> m_allHits MuonR4::RpcFastDigiTool::ATLAS_THREAD_SAFE {}
mutableprivate

Definition at line 80 of file RpcFastDigiTool.h.

◆ ATLAS_THREAD_SAFE [2/2]

std::array<std::atomic<unsigned>, 2> m_acceptedHits MuonR4::RpcFastDigiTool::ATLAS_THREAD_SAFE {}
mutableprivate

Definition at line 81 of file RpcFastDigiTool.h.

◆ m_deadTime

Gaudi::Property<double> MuonR4::RpcFastDigiTool::m_deadTime {this, "deadTime", 100.*Gaudi::Units::nanosecond}
private

Definition at line 89 of file RpcFastDigiTool.h.

◆ m_detMgr

const MuonGMR4::MuonDetectorManager* MuonR4::MuonDigitizationTool::m_detMgr {nullptr}
protectedinherited

Definition at line 140 of file MuonDigitizationTool.h.

◆ m_digitizeMuonOnly

Gaudi::Property<bool> MuonR4::RpcFastDigiTool::m_digitizeMuonOnly
private
Initial value:
{this, "ProcessTrueMuonsOnly", false,
"If set to true hit with pdgId != 13 are skipped"}

Definition at line 91 of file RpcFastDigiTool.h.

◆ m_effiDataKey

SG::ReadCondHandleKey<Muon::DigitEffiData> MuonR4::RpcFastDigiTool::m_effiDataKey
private
Initial value:
{this, "EffiDataKey", "RpcDigitEff",
"Efficiency constants of the individual Rpc gasGaps"}

Definition at line 77 of file RpcFastDigiTool.h.

◆ m_filterPassed

bool PileUpToolBase::m_filterPassed {true}
protectedinherited

Definition at line 60 of file PileUpToolBase.h.

◆ m_firstXing

Gaudi::Property<int> PileUpToolBase::m_firstXing
protectedinherited
Initial value:
{this, "FirstXing", -999,
"First bunch-crossing in which det is live"}

Definition at line 54 of file PileUpToolBase.h.

◆ m_geoCtxKey

SG::ReadHandleKey<ActsGeometryContext> MuonR4::MuonDigitizationTool::m_geoCtxKey
privateinherited
Initial value:
{this, "AlignmentKey", "ActsAlignment",
"Geometry context"}

Definition at line 152 of file MuonDigitizationTool.h.

◆ m_idHelperSvc

ServiceHandle<Muon::IMuonIdHelperSvc> MuonR4::MuonDigitizationTool::m_idHelperSvc
protectedinherited
Initial value:
{this, "MuonIdHelperSvc",
"Muon::MuonIdHelperSvc/MuonIdHelperSvc"}

Definition at line 142 of file MuonDigitizationTool.h.

◆ m_includePileUpTruth

Gaudi::Property<bool> MuonR4::MuonDigitizationTool::m_includePileUpTruth {this, "IncludePileUpTruth", true, "Include pile-up truth info"}
privateinherited

Definition at line 166 of file MuonDigitizationTool.h.

◆ m_inputObjectName

std::string MuonR4::MuonDigitizationTool::m_inputObjectName {""}
privateinherited

Definition at line 168 of file MuonDigitizationTool.h.

◆ m_lastXing

Gaudi::Property<int> PileUpToolBase::m_lastXing
protectedinherited
Initial value:
{this, "LastXing", 999,
"Last bunch-crossing in which det is live"}

Definition at line 56 of file PileUpToolBase.h.

◆ m_mergeSvc

ServiceHandle<PileUpMergeSvc> MuonR4::MuonDigitizationTool::m_mergeSvc {this, "PileUpMergeSvc", "PileUpMergeSvc", ""}
privateinherited

Definition at line 155 of file MuonDigitizationTool.h.

◆ m_onlyUseContainerName

Gaudi::Property<bool> MuonR4::MuonDigitizationTool::m_onlyUseContainerName
privateinherited
Initial value:
{this, "OnlyUseContainerName", false,
"Don't use the ReadHandleKey directly. Just extract the container name from it."}

Definition at line 163 of file MuonDigitizationTool.h.

◆ m_propagationVelocity

Gaudi::Property<double> MuonR4::RpcFastDigiTool::m_propagationVelocity
private
Initial value:
{this, "propSpeed", 0.5 * Gaudi::Units::c_light,
"Propagation speed of the signal inside the strip"}

Definition at line 83 of file RpcFastDigiTool.h.

◆ m_rndmSvc

ServiceHandle<IAthRNGSvc> MuonR4::MuonDigitizationTool::m_rndmSvc {this, "RndmSvc", "AthRNGSvc", ""}
privateinherited

Definition at line 159 of file MuonDigitizationTool.h.

◆ m_sdoKey

SG::WriteHandleKey<xAOD::MuonSimHitContainer> MuonR4::MuonDigitizationTool::m_sdoKey {this, "OutputSDOName", ""}
privateinherited

Definition at line 161 of file MuonDigitizationTool.h.

◆ m_simHitKey

SG::ReadHandleKey<xAOD::MuonSimHitContainer> MuonR4::MuonDigitizationTool::m_simHitKey {this, "SimHitKey", ""}
privateinherited

Definition at line 150 of file MuonDigitizationTool.h.

◆ m_simHits

std::vector<SimHitLocalCopy> MuonR4::MuonDigitizationTool::m_simHits {}
privateinherited

Definition at line 174 of file MuonDigitizationTool.h.

◆ m_stIdxBIL

int MuonR4::RpcFastDigiTool::m_stIdxBIL {-1}
private

Definition at line 30 of file RpcFastDigiTool.h.

◆ m_stIdxBIS

int MuonR4::RpcFastDigiTool::m_stIdxBIS {-1}
private

Definition at line 31 of file RpcFastDigiTool.h.

◆ m_streamName

Gaudi::Property<std::string> MuonR4::MuonDigitizationTool::m_streamName {this, "StreamName", ""}
privateinherited

Definition at line 157 of file MuonDigitizationTool.h.

◆ m_stripTimeResolution

Gaudi::Property<double> MuonR4::RpcFastDigiTool::m_stripTimeResolution
private
Initial value:
{this, "timeResolution", 0.6 * Gaudi::Units::nanosecond,
"Estimated time resolution of the strip readout"}

Definition at line 86 of file RpcFastDigiTool.h.

◆ m_timedHits

TimedHits MuonR4::MuonDigitizationTool::m_timedHits {}
privateinherited

Definition at line 170 of file MuonDigitizationTool.h.

◆ m_vetoPileUpTruthLinks

Gaudi::Property<int> PileUpToolBase::m_vetoPileUpTruthLinks
protectedinherited
Initial value:
{this, "VetoPileUpTruthLinks", true,
"Ignore links to suppressed pile-up truth"}

Definition at line 58 of file PileUpToolBase.h.

◆ m_writeKey

SG::WriteHandleKey<RpcDigitContainer> MuonR4::RpcFastDigiTool::m_writeKey {this, "OutputObjectName", "RPC_DIGITS"}
private

Definition at line 75 of file RpcFastDigiTool.h.


The documentation for this class was generated from the following files:
MuonR4::MuonDigitizationTool::m_inputObjectName
std::string m_inputObjectName
Definition: MuonDigitizationTool.h:168
MuonR4::MuonDigitizationTool::retrieveContainer
StatusCode retrieveContainer(const EventContext &ctx, const SG::ReadHandleKey< Container > &key, const Container *&contPtr) const
Helper function to retrieve a container from StoreGate.
ATHRNG::RNGWrapper::setSeed
void setSeed(const std::string &algName, const EventContext &ctx)
Set the random seed using a string (e.g.
Definition: RNGWrapper.h:169
MuonR4::MuonDigitizationTool::m_geoCtxKey
SG::ReadHandleKey< ActsGeometryContext > m_geoCtxKey
Definition: MuonDigitizationTool.h:152
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:169
xAOD::MuonSimHit_v1
Definition: MuonSimHit_v1.h:18
MuonR4::MuonDigitizationTool::m_simHitKey
SG::ReadHandleKey< xAOD::MuonSimHitContainer > m_simHitKey
Definition: MuonDigitizationTool.h:150
MuonGMR4::StripDesign
Definition: StripDesign.h:30
MuonR4::RpcFastDigiTool::m_effiDataKey
SG::ReadCondHandleKey< Muon::DigitEffiData > m_effiDataKey
Definition: RpcFastDigiTool.h:77
MuonR4::MuonDigitizationTool::fillTimedHits
StatusCode fillTimedHits(PileUpHits &&hitColl, TimedHits &timedHits) const
Translates the PileUpHits into the timed hits format.
Definition: MuonDigitizationTool.cxx:50
xAOD::MuonSimHit_v1::setIdentifier
void setIdentifier(const Identifier &id)
Sets the global ATLAS identifier.
Definition: xAODMuonSimHit_V1.cxx:43
MuonR4::RpcFastDigiTool::m_stripTimeResolution
Gaudi::Property< double > m_stripTimeResolution
Definition: RpcFastDigiTool.h:86
max
#define max(a, b)
Definition: cfImp.cxx:41
MuonR4::MuonDigitizationTool::m_streamName
Gaudi::Property< std::string > m_streamName
Definition: MuonDigitizationTool.h:157
MuonR4::MuonDigitizationTool::PileUpHits
PileUpMergeSvc::TimedList< xAOD::MuonSimHitContainer >::type PileUpHits
Definition: MuonDigitizationTool.h:145
PileUpToolBase::m_filterPassed
bool m_filterPassed
Definition: PileUpToolBase.h:60
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
python.SystemOfUnits.nanosecond
int nanosecond
Definition: SystemOfUnits.py:119
SG::Accessor< float >
Amg::Vector2D
Eigen::Matrix< double, 2, 1 > Vector2D
Definition: GeoPrimitives.h:48
RpcDigitCollection
Definition: RpcDigitCollection.h:17
MuonR4::MuonDigitizationTool::m_onlyUseContainerName
Gaudi::Property< bool > m_onlyUseContainerName
Definition: MuonDigitizationTool.h:163
MuonR4::MuonDigitizationTool::m_mergeSvc
ServiceHandle< PileUpMergeSvc > m_mergeSvc
Definition: MuonDigitizationTool.h:155
MuonR4::MuonDigitizationTool::TimedHit
TimedHitPtr< xAOD::MuonSimHit > TimedHit
Definition: MuonDigitizationTool.h:70
MuonR4::RpcFastDigiTool::m_stIdxBIL
int m_stIdxBIL
Definition: RpcFastDigiTool.h:30
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:68
MuonR4::MuonDigitizationTool::m_sdoKey
SG::WriteHandleKey< xAOD::MuonSimHitContainer > m_sdoKey
Definition: MuonDigitizationTool.h:161
MuonGMR4::RpcReadoutElement::parameterBook::etaDesign
StripDesignPtr etaDesign
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/RpcReadoutElement.h:39
xAOD::MuonSimHit_v1::setLocalPosition
void setLocalPosition(MeasVector< 3 > vec)
Sets the local position of the traversing particle.
Definition: xAODMuonSimHit_V1.cxx:55
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
isValid
bool isValid(const T &p)
Definition: AtlasPID.h:225
PileUpToolBase::m_lastXing
Gaudi::Property< int > m_lastXing
Definition: PileUpToolBase.h:56
THROW_EXCEPTION
#define THROW_EXCEPTION(MSG)
Definition: MMReadoutElement.cxx:48
SG::VarHandleKey::empty
bool empty() const
Test if the key is blank.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:150
HepMC::ignoreTruthLink
bool ignoreTruthLink(const T &p, bool vetoPileUp)
Helper function for SDO creation in PileUpTools.
Definition: MagicNumbers.h:332
MuonR4::RpcFastDigiTool::DigiCache
OutDigitCache_t< RpcDigitCollection > DigiCache
Definition: RpcFastDigiTool.h:74
MuonGMR4::RpcReadoutElement
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/RpcReadoutElement.h:17
RpcIdHelper
Definition: RpcIdHelper.h:51
MuonR4::MuonDigitizationTool::retrieveConditions
StatusCode retrieveConditions(const EventContext &ctx, const SG::ReadCondHandleKey< Container > &key, const Container *&contPtr) const
Helper function to access the conditions data.
keylayer_zslicemap.strip
strip
Definition: keylayer_zslicemap.py:151
MuonGMR4::RpcReadoutElement::getParameters
const parameterBook & getParameters() const
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/src/RpcReadoutElement.cxx:34
PileUpToolBase::m_vetoPileUpTruthLinks
Gaudi::Property< int > m_vetoPileUpTruthLinks
Definition: PileUpToolBase.h:58
MuonR4::RpcFastDigiTool::m_deadTime
Gaudi::Property< double > m_deadTime
Definition: RpcFastDigiTool.h:89
xAOD::ChamberViewer
Definition: ChamberViewer.h:65
MuonR4::MuonDigitizationTool::MuonDigitizationTool
MuonDigitizationTool(const std::string &type, const std::string &name, const IInterface *pIID)
Definition: MuonDigitizationTool.cxx:12
MuonR4::RpcFastDigiTool::m_digitizeMuonOnly
Gaudi::Property< bool > m_digitizeMuonOnly
Definition: RpcFastDigiTool.h:91
MuonR4::MuonDigitizationTool::m_timedHits
TimedHits m_timedHits
Definition: MuonDigitizationTool.h:170
Amg::toString
std::string toString(const Translation3D &translation, int precision=4)
GeoPrimitvesToStringConverter.
Definition: GeoPrimitivesToStringConverter.h:40
MuonGMR4::RpcReadoutElement::parameterBook::phiDesign
StripDesignPtr phiDesign
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/RpcReadoutElement.h:38
MuonR4::RpcFastDigiTool::digitizeHitBI
bool digitizeHitBI(const Identifier &gasGapId, const MuonGMR4::RpcReadoutElement &reEle, const double hitTime, const Amg::Vector2D &locPos, const Muon::DigitEffiData *effiMap, RpcDigitCollection &outContainer, CLHEP::HepRandomEngine *rndEngine, DeadTimeMap &deadTimes) const
Digitize the sim hit as Rpc strip 2D hit.
Definition: RpcFastDigiTool.cxx:159
MuonR4::MuonDigitizationTool::digitize
virtual StatusCode digitize(const EventContext &ctx, const TimedHits &hitsToDigit, xAOD::MuonSimHitContainer *sdoContainer) const =0
Digitize the time ordered hits and write them to the digit format specific for the detector technolog...
MuonR4::MuonDigitizationTool::getRandomEngine
CLHEP::HepRandomEngine * getRandomEngine(const EventContext &ctx) const
Definition: MuonDigitizationTool.cxx:135
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
MuonR4::RpcFastDigiTool::m_writeKey
SG::WriteHandleKey< RpcDigitContainer > m_writeKey
Definition: RpcFastDigiTool.h:75
MuonR4::RpcFastDigiTool::m_stIdxBIS
int m_stIdxBIS
Definition: RpcFastDigiTool.h:31
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
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
MuonGMR4::RpcReadoutElement::measurementHash
IdentifierHash measurementHash(const Identifier &measId) const override final
Constructs the identifier hash from the full measurement Identifier.
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
CaloCondBlobAlgs_fillNoiseFromASCII.channelId
channelId
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:122
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
ActsGeometryContext
Include the GeoPrimitives which need to be put first.
Definition: ActsGeometryContext.h:27
MuonR4::RpcFastDigiTool::m_propagationVelocity
Gaudi::Property< double > m_propagationVelocity
Definition: RpcFastDigiTool.h:83
Muon::DigitEffiData
Definition: DigitEffiData.h:23
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:148
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:221
ATHRNG::RNGWrapper
A wrapper class for event-slot-local random engines.
Definition: RNGWrapper.h:56
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
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:61
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)
MuonGMR4::RpcReadoutElement::layerHash
IdentifierHash layerHash(const Identifier &measId) const override final
python.PhysicalConstants.c_light
float c_light
Definition: PhysicalConstants.py:63
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
python.copyTCTOutput.locDir
locDir
Definition: copyTCTOutput.py:113
ATHRNG::RNGWrapper::getEngine
CLHEP::HepRandomEngine * getEngine(const EventContext &ctx) const
Retrieve the random engine corresponding to the provided EventContext.
Definition: RNGWrapper.h:134
MuonGMR4::RpcReadoutElement::distanceToEdge
double distanceToEdge(const IdentifierHash &layerHash, const Amg::Vector2D &posInStripPlane, const EdgeSide side) const
Returns the disance to the readout.
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/src/RpcReadoutElement.cxx:91
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::MuonDigitizationTool::initialize
StatusCode initialize() override
Definition: MuonDigitizationTool.cxx:17
MuonR4::MuonDigitizationTool::m_includePileUpTruth
Gaudi::Property< bool > m_includePileUpTruth
Definition: MuonDigitizationTool.h:166
MuonR4::MuonDigitizationTool::m_simHits
std::vector< SimHitLocalCopy > m_simHits
Definition: MuonDigitizationTool.h:174
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:76
a
TList * a
Definition: liststreamerinfos.cxx:10
MuonR4::MuonDigitizationTool::TimedHits
std::vector< TimedHitPtr< xAOD::MuonSimHit > > TimedHits
Definition: MuonDigitizationTool.h:71
std::sort
void sort(typename std::reverse_iterator< DataModel_detail::iterator< DVL > > beg, typename std::reverse_iterator< DataModel_detail::iterator< DVL > > end, const Compare &comp)
Specialization of sort for DataVector/List.
Definition: DVL_algorithms.h:623
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:142
PileUpToolBase::m_firstXing
Gaudi::Property< int > m_firstXing
Definition: PileUpToolBase.h:54
if
if(febId1==febId2)
Definition: LArRodBlockPhysicsV0.cxx:567
MuonR4::MuonDigitizationTool::m_rndmSvc
ServiceHandle< IAthRNGSvc > m_rndmSvc
Definition: MuonDigitizationTool.h:159
MuonR4::MuonDigitizationTool::m_detMgr
const MuonGMR4::MuonDetectorManager * m_detMgr
Definition: MuonDigitizationTool.h:140
MuonGMR4::RpcReadoutElement::EdgeSide::highVoltage
@ highVoltage
MuonR4::MuonDigitizationTool::DeadTimeMap
std::unordered_map< Identifier, double > DeadTimeMap
Definition: MuonDigitizationTool.h:129
MuonR4::RpcFastDigiTool::digitizeHit
bool digitizeHit(const Identifier &gasGapId, const bool measuresPhi, const MuonGMR4::RpcReadoutElement &reEle, const double hitTime, const Amg::Vector2D &locPos, const Muon::DigitEffiData *effiMap, RpcDigitCollection &outContainer, CLHEP::HepRandomEngine *rndEngine, DeadTimeMap &deadTimes) const
Digitize the sim hit as Rpc strip 1D hit.
Definition: RpcFastDigiTool.cxx:95
MuonGMR4::RpcReadoutElement::EdgeSide::readOut
@ readOut
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
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 ...
PileUpTimeEventIndex
a struct encapsulating the identifier of a pile-up event
Definition: PileUpTimeEventIndex.h:12
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
MuonR4::RpcFastDigiTool::timeOverThreshold
static double timeOverThreshold(CLHEP::HepRandomEngine *rndmEngine)
Roll the time over threshold for each signal digit.
Definition: RpcFastDigiTool.cxx:249
Identifier
Definition: IdentifierFieldParser.cxx:14