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

#include <MmFastDigiTool.h>

Inheritance diagram for MuonR4::MmFastDigiTool:
Collaboration diagram for MuonR4::MmFastDigiTool:

Public Member Functions

 MmFastDigiTool (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...
 

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
 
void addSDO (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...
 

Protected Attributes

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

Private Types

using DigiCache = OutDigitCache_t< MmDigitCollection >
 
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

StatusCode fillTimedHits (PileUpHits &&hitColl, TimedHits &timedHits) const
 Translates the PileUpHits into the timed hits format. More...
 

Private Attributes

SG::WriteHandleKey< MmDigitContainerm_writeKey {this, "OutputObjectName", "MM_DIGITS"}
 
SG::ReadCondHandleKey< Muon::DigitEffiDatam_effiDataKey
 
SG::ReadCondHandleKey< NswErrorCalibDatam_uncertCalibKey
 
std::array< std::atomic< unsigned >, 8 > m_allHits ATLAS_THREAD_SAFE {}
 
std::array< std::atomic< unsigned >, 8 > m_acceptedHits ATLAS_THREAD_SAFE {}
 
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 18 of file MmFastDigiTool.h.

Member Typedef Documentation

◆ DigiCache

Definition at line 33 of file MmFastDigiTool.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 98 of file MuonDigitizationTool.h.

◆ PileUpHits

Definition at line 125 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 152 of file MuonDigitizationTool.h.

◆ TimedHit

Definition at line 59 of file MuonDigitizationTool.h.

◆ TimedHits

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

Definition at line 60 of file MuonDigitizationTool.h.

Constructor & Destructor Documentation

◆ MmFastDigiTool()

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

Definition at line 15 of file MmFastDigiTool.cxx.

15  :

Member Function Documentation

◆ addSDO()

void 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.

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

◆ digitize()

StatusCode MuonR4::MmFastDigiTool::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

ignore radiation for now

Calculate the index for the global hit counter

Pipe some dummy values to the digit to ensure that the pdo / tdo calibration does not reject any hit downstream. Or in other words how much do you want... All charge

We're using the NSW uncertainty DB to smear the truth-hit positions using the best known uncertainties. In the process of digit -> RDO -> PRD, the smeared hit position is gonna be lost However, recall that the simplest way to generate a MM prd from RAW hits is the clustering by means of center of gravity. On average, a muon passage makes 3-4 strips fire. Assuming 3 strips, the smeared position can be written as

        x = w_{1}*(c - p) + w_{2}*c + w_{3}*(c + p),

where c is the strip centre, p the pitch and w_{i} are the induced charge fractions on each strip

      1 =  w_{1} + w_{2} + w_{3}

      x = (w_{1} + w_{2} + w_{3}) * c + (w_{3} - w_{1})*p 

--> x = c + (w_{3} - w_{1}) *p --> (x-c) / p = (w_{3} - w_{1})
--> (x-c) / p + w_{1} = w_{3}

1 = 2 * w_{1} + w_{2} + (x-c) / p 1 - (x-c) /p - 2*w_{1} = w_{2}

0< w_{1} < 0.5 - (x-c) / 2p

Write everything at the end into the final digit container

Implements MuonR4::MuonDigitizationTool.

Definition at line 37 of file MmFastDigiTool.cxx.

39  {
40  const MmIdHelper& idHelper{m_idHelperSvc->mmIdHelper()};
41  // Prepare the temporary cache
42  DigiCache digitCache{};
44  const Muon::DigitEffiData* efficiencyMap{nullptr};
45  ATH_CHECK(retrieveConditions(ctx, m_effiDataKey, efficiencyMap));
46  const NswErrorCalibData* errorCalibDB{nullptr};
47  ATH_CHECK(retrieveConditions(ctx, m_uncertCalibKey, errorCalibDB));
48 
49  CLHEP::HepRandomEngine* rndEngine = getRandomEngine(ctx);
50  for (const TimedHit& simHit : hitsToDigit) {
51  const Identifier hitId{simHit->identify()};
53  if (std::abs(simHit->pdgId()) != 13) continue;
54 
55  const MuonGMR4::MmReadoutElement* readOutEle = m_detMgr->getMmReadoutElement(hitId);
56  const Amg::Vector2D locPos{xAOD::toEigen(simHit->localPosition()).block<2,1>(0,0)};
57 
59  const unsigned int hitGapInNsw = (idHelper.multilayer(hitId) -1) * 4 + idHelper.gasGap(hitId) -1;
60  ++m_allHits[hitGapInNsw];
61 
62  const MuonGMR4::StripDesign& design{readOutEle->stripLayer(hitId).design()};
63  bool isValid{false};
64 
65  int channelNumber = design.stripNumber(locPos);
66  if(channelNumber<0){
67  if (!design.insideTrapezoid(locPos)) {
68  ATH_MSG_WARNING("Hit "<<m_idHelperSvc->toString(hitId)<<" "<<Amg::toString(locPos)
69  <<" is outside bounds "<<std::endl<<design<<" rejecting it");
70  }
71  continue;
72  }
73  const Identifier clusId = idHelper.channelID(hitId,
74  idHelper.multilayer(hitId),
75  idHelper.gasGap(hitId),
76  channelNumber, isValid);
77  if(!isValid) {
78  ATH_MSG_WARNING("Invalid strip identifier for layer " << m_idHelperSvc->toStringGasGap(hitId)
79  << " channel " << channelNumber << " locPos " << Amg::toString(locPos));
80  continue;
81  }
82 
83  NswErrorCalibData::Input errorCalibInput{};
84  errorCalibInput.stripId = clusId;
85  errorCalibInput.locTheta = M_PI- simHit->localDirection().theta();
86  errorCalibInput.clusterAuthor=66; // cluster time projection method
87  const double uncert = errorCalibDB->clusterUncertainty(errorCalibInput);
88  ATH_MSG_VERBOSE("mm hit has theta " << errorCalibInput.locTheta / Gaudi::Units::deg << " and uncertainty " << uncert);
89 
90 
93  constexpr int dummyResponseTime = 100;
94  constexpr float dummyDepositedCharge = 66666;
95 
96  const double newLocalX = CLHEP::RandGaussZiggurat::shoot(rndEngine, locPos.x(), uncert);
97  const int newChannel = design.stripNumber(newLocalX * Amg::Vector2D::UnitX());
98  if (newChannel < 0) {
99  continue;
100  }
101 
102  const Identifier digitId = idHelper.channelID(hitId,
103  idHelper.multilayer(hitId),
104  idHelper.gasGap(hitId),
105  newChannel, isValid);
106 
107  if(!isValid) {
108  ATH_MSG_WARNING("Invalid strip identifier for layer " << m_idHelperSvc->toStringGasGap(hitId)
109  << " channel " << newChannel << " locPos " << Amg::toString(locPos));
110  continue;
111  }
125 
134  const double pull = (newLocalX - (*design.center(newChannel)).x()) / (design.stripPitch() * std::cos(design.stereoAngle()));
135  const double w1 = CLHEP::RandFlat::shoot(rndEngine, 0., 0.5 *(1. - pull));
136  const double w2 = 1 - pull -2*w1;
137  const double w3 = pull + w1;
138  MmDigitCollection* outColl = fetchCollection(hitId, digitCache);
139 
140  const Identifier digitIdB = idHelper.channelID(hitId,
141  idHelper.multilayer(hitId),
142  idHelper.gasGap(hitId),
143  newChannel - 1, isValid);
144 
145  if (isValid) {
146  outColl->push_back(std::make_unique<MmDigit>(digitIdB, dummyResponseTime, w1 * dummyDepositedCharge));
147  }
148  outColl->push_back(std::make_unique<MmDigit>(digitId,dummyResponseTime, w2 * dummyDepositedCharge));
149 
150  const Identifier digitIdA = idHelper.channelID(hitId,
151  idHelper.multilayer(hitId),
152  idHelper.gasGap(hitId),
153  newChannel + 1, isValid);
154  if (isValid) {
155  outColl->push_back(std::make_unique<MmDigit>(digitIdA, dummyResponseTime, w3 * dummyDepositedCharge));
156  }
157 
158  addSDO(simHit, sdoContainer);
159  ++m_acceptedHits[hitGapInNsw];
160  }
162  ATH_CHECK(writeDigitContainer(ctx, m_writeKey, std::move(digitCache), idHelper.module_hash_max()));
163  return StatusCode::SUCCESS;
164  }

◆ 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::MmFastDigiTool::finalize ( )
finaloverride

Definition at line 25 of file MmFastDigiTool.cxx.

25  {
26  std::stringstream statstr{};
27  unsigned allHits{0};
28  for (unsigned int g = 0; g < m_allHits.size(); ++g) {
29  allHits += m_allHits[g];
30  statstr<<" *** Layer "<<(g+1)<<" "<<percentage(m_acceptedHits[g],m_allHits[g])
31  <<"% of "<<m_allHits[g]<<std::endl;
32  }
33  if(!allHits) return StatusCode::SUCCESS;
34  ATH_MSG_INFO("Tried to convert "<<allHits<<" hits. Successes rate per layer "<<std::endl<<statstr.str());
35  return StatusCode::SUCCESS;
36  }

◆ 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::MmFastDigiTool::initialize ( )
finaloverridevirtual

Reimplemented from PileUpToolBase.

Definition at line 18 of file MmFastDigiTool.cxx.

◆ 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  }

◆ 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

◆ 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>, 8> m_allHits MuonR4::MmFastDigiTool::ATLAS_THREAD_SAFE {}
mutableprivate

Definition at line 43 of file MmFastDigiTool.h.

◆ ATLAS_THREAD_SAFE [2/2]

std::array<std::atomic<unsigned>, 8> m_acceptedHits MuonR4::MmFastDigiTool::ATLAS_THREAD_SAFE {}
mutableprivate

Definition at line 44 of file MmFastDigiTool.h.

◆ m_detMgr

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

Definition at line 120 of file MuonDigitizationTool.h.

◆ m_effiDataKey

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

Definition at line 36 of file MmFastDigiTool.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 132 of file MuonDigitizationTool.h.

◆ m_idHelperSvc

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

Definition at line 122 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 146 of file MuonDigitizationTool.h.

◆ m_inputObjectName

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

Definition at line 148 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 135 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 143 of file MuonDigitizationTool.h.

◆ m_rndmSvc

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

Definition at line 139 of file MuonDigitizationTool.h.

◆ m_sdoKey

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

Definition at line 141 of file MuonDigitizationTool.h.

◆ m_simHitKey

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

Definition at line 130 of file MuonDigitizationTool.h.

◆ m_simHits

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

Definition at line 154 of file MuonDigitizationTool.h.

◆ m_streamName

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

Definition at line 137 of file MuonDigitizationTool.h.

◆ m_timedHits

TimedHits MuonR4::MuonDigitizationTool::m_timedHits {}
privateinherited

Definition at line 150 of file MuonDigitizationTool.h.

◆ m_uncertCalibKey

SG::ReadCondHandleKey<NswErrorCalibData> MuonR4::MmFastDigiTool::m_uncertCalibKey
private
Initial value:
{this, "ErrorCalibKey", "NswUncertData",
"Key of the parametrized NSW uncertainties"}

Definition at line 39 of file MmFastDigiTool.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<MmDigitContainer> MuonR4::MmFastDigiTool::m_writeKey {this, "OutputObjectName", "MM_DIGITS"}
private

Definition at line 34 of file MmFastDigiTool.h.


The documentation for this class was generated from the following files:
MmDigitCollection
Definition: MmDigitCollection.h:18
MuonR4::MuonDigitizationTool::m_inputObjectName
std::string m_inputObjectName
Definition: MuonDigitizationTool.h:148
NswErrorCalibData
Definition: NswErrorCalibData.h:19
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:132
xAOD::MuonSimHit_v1
Definition: MuonSimHit_v1.h:18
MuonGMR4::MmReadoutElement
Definition: MmReadoutElement.h:20
MuonR4::MuonDigitizationTool::m_simHitKey
SG::ReadHandleKey< xAOD::MuonSimHitContainer > m_simHitKey
Definition: MuonDigitizationTool.h:130
MuonGMR4::StripDesign
Definition: StripDesign.h:30
MuonR4::MuonDigitizationTool::fillTimedHits
StatusCode fillTimedHits(PileUpHits &&hitColl, TimedHits &timedHits) const
Translates the PileUpHits into the timed hits format.
Definition: MuonDigitizationTool.cxx:50
MuonR4::MuonDigitizationTool::m_streamName
Gaudi::Property< std::string > m_streamName
Definition: MuonDigitizationTool.h:137
MuonR4::MuonDigitizationTool::PileUpHits
PileUpMergeSvc::TimedList< xAOD::MuonSimHitContainer >::type PileUpHits
Definition: MuonDigitizationTool.h:125
PileUpToolBase::m_filterPassed
bool m_filterPassed
Definition: PileUpToolBase.h:60
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
SG::Accessor< float >
Amg::Vector2D
Eigen::Matrix< double, 2, 1 > Vector2D
Definition: GeoPrimitives.h:48
MuonR4::MuonDigitizationTool::m_onlyUseContainerName
Gaudi::Property< bool > m_onlyUseContainerName
Definition: MuonDigitizationTool.h:143
MuonR4::MuonDigitizationTool::m_mergeSvc
ServiceHandle< PileUpMergeSvc > m_mergeSvc
Definition: MuonDigitizationTool.h:135
MuonR4::MuonDigitizationTool::TimedHit
TimedHitPtr< xAOD::MuonSimHit > TimedHit
Definition: MuonDigitizationTool.h:59
M_PI
#define M_PI
Definition: ActiveFraction.h:11
deg
#define deg
Definition: SbPolyhedron.cxx:17
MuonR4::MuonDigitizationTool::m_sdoKey
SG::WriteHandleKey< xAOD::MuonSimHitContainer > m_sdoKey
Definition: MuonDigitizationTool.h:141
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
isValid
bool isValid(const T &p)
Definition: AtlasPID.h:214
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:296
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.
PileUpToolBase::m_vetoPileUpTruthLinks
Gaudi::Property< int > m_vetoPileUpTruthLinks
Definition: PileUpToolBase.h:58
MuonR4::MuonDigitizationTool::MuonDigitizationTool
MuonDigitizationTool(const std::string &type, const std::string &name, const IInterface *pIID)
Definition: MuonDigitizationTool.cxx:12
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
MuonR4::MuonDigitizationTool::m_timedHits
TimedHits m_timedHits
Definition: MuonDigitizationTool.h:150
Amg::toString
std::string toString(const Translation3D &translation, int precision=4)
GeoPrimitvesToStringConverter.
Definition: GeoPrimitivesToStringConverter.h:40
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...
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
MuonR4::MuonDigitizationTool::getRandomEngine
CLHEP::HepRandomEngine * getRandomEngine(const EventContext &ctx) const
Definition: MuonDigitizationTool.cxx:135
python.CaloCondTools.g
g
Definition: CaloCondTools.py:15
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
MuonR4::MmFastDigiTool::DigiCache
OutDigitCache_t< MmDigitCollection > DigiCache
Definition: MmFastDigiTool.h:33
python.StandardJetMods.pull
pull
Definition: StandardJetMods.py:264
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
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::MmFastDigiTool::m_effiDataKey
SG::ReadCondHandleKey< Muon::DigitEffiData > m_effiDataKey
Definition: MmFastDigiTool.h:36
ActsGeometryContext
Include the GeoPrimitives which need to be put first.
Definition: ActsGeometryContext.h:27
NswErrorCalibData::Input::stripId
Identifier stripId
Identifier of the strip.
Definition: NswErrorCalibData.h:27
MuonGMR4::MmReadoutElement::stripLayer
const StripLayer & stripLayer(const Identifier &measId) const
Muon::DigitEffiData
Definition: DigitEffiData.h:23
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
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.
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)
ATHRNG::RNGWrapper::getEngine
CLHEP::HepRandomEngine * getEngine(const EventContext &ctx) const
Retrieve the random engine corresponding to the provided EventContext.
Definition: RNGWrapper.h:134
MuonGMR4::StripLayer::design
const StripDesign & design() const
Returns the underlying strip design.
MuonR4::MuonDigitizationTool::initialize
StatusCode initialize() override
Definition: MuonDigitizationTool.cxx:17
MuonR4::MuonDigitizationTool::m_includePileUpTruth
Gaudi::Property< bool > m_includePileUpTruth
Definition: MuonDigitizationTool.h:146
MuonR4::MuonDigitizationTool::m_simHits
std::vector< SimHitLocalCopy > m_simHits
Definition: MuonDigitizationTool.h:154
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:76
a
TList * a
Definition: liststreamerinfos.cxx:10
MmIdHelper
Definition: MmIdHelper.h:54
MuonR4::MuonDigitizationTool::TimedHits
std::vector< TimedHitPtr< xAOD::MuonSimHit > > TimedHits
Definition: MuonDigitizationTool.h:60
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
MuonR4::MmFastDigiTool::m_writeKey
SG::WriteHandleKey< MmDigitContainer > m_writeKey
Definition: MmFastDigiTool.h:34
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
MuonR4::MuonDigitizationTool::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: MuonDigitizationTool.h:122
PileUpToolBase::m_firstXing
Gaudi::Property< int > m_firstXing
Definition: PileUpToolBase.h:54
if
if(febId1==febId2)
Definition: LArRodBlockPhysicsV0.cxx:569
MuonR4::MuonDigitizationTool::m_rndmSvc
ServiceHandle< IAthRNGSvc > m_rndmSvc
Definition: MuonDigitizationTool.h:139
MuonR4::MuonDigitizationTool::m_detMgr
const MuonGMR4::MuonDetectorManager * m_detMgr
Definition: MuonDigitizationTool.h:120
NswErrorCalibData::Input
Helper struct to be parsed to the object to derive the specific error of the cluster.
Definition: NswErrorCalibData.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
MuonR4::MmFastDigiTool::m_uncertCalibKey
SG::ReadCondHandleKey< NswErrorCalibData > m_uncertCalibKey
Definition: MmFastDigiTool.h:39