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::MM_DigitizationTool Class Referencefinal

#include <MM_DigitizationTool.h>

Inheritance diagram for MuonR4::MM_DigitizationTool:
Collaboration diagram for MuonR4::MM_DigitizationTool:

Public Member Functions

 MM_DigitizationTool (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 NoiseCalibConstants = NswCalibDbTimeChargeData::CalibConstants
 
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

MM_ElectronicsToolInput combinedStripResponseAllHits (const std::vector< MM_ElectronicsToolInput > &v_stripDigitOutput) const
 
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 {this, "EffiDataKey", "MmDigitEff", "Efficiency constants of the individual MM gasGaps"}
 
SG::ReadCondHandleKey< NswErrorCalibDatam_uncertCalibKey {this, "ErrorCalibKey", "NswUncertData", "Key of the parametrized NSW uncertainties"}
 
SG::ReadCondHandleKey< NswCalibDbThresholdDatam_condThrshldsKey
 
SG::ReadCondHandleKey< AtlasFieldCacheCondObjm_fieldCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj"}
 
ToolHandle< Muon::INSWCalibSmearingToolm_smearingTool {this, "SmearingTool", "Muon::NSWCalibSmearingTool/MMCalibSmearingTool"}
 
ToolHandle< Muon::INSWCalibToolm_calibrationTool {this, "CalibrationTool", "Muon::NSWCalibTool/NSWCalibTool"}
 
Gaudi::Property< bool > m_digitizeMuonOnly {this, "ProcessTrueMuonsOnly", true, "If set to true hit with pdgId != 13 are skipped"}
 
Gaudi::Property< std::string > m_vmmReadoutMode {this, "vmmReadoutMode", "peak", "For readout (DAQ) path. Can be peak or threshold"}
 
Gaudi::Property< std::string > m_vmmARTMode {this, "vmmARTMode", "threshold", "For ART (trigger) path. Can be peak or threshold"}
 
Gaudi::Property< double > m_energyThreshold {this, "EnergyThreshold", 50, "Minimal energy to process an electron sim hit"}
 
Gaudi::Property< double > m_timeWindowLowerOffset
 
Gaudi::Property< double > m_timeWindowUpperOffset
 
Gaudi::Property< double > m_DiffMagSecondMuonHit {this, "DiffMagSecondMuonHit", 0.1}
 
Gaudi::Property< int > m_maskMultiplet {this, "MaskMultiplet", 0, "0: all, 1: first, 2: second, 3: both"}
 
Gaudi::Property< bool > m_writeOutputFile {this, "SaveInternalHistos", false}
 
Gaudi::Property< bool > m_needsMcEventCollHelper {this, "UseMcEventCollectionHelper", false}
 
Gaudi::Property< bool > m_checkMMSimHits {this, "CheckSimHits", true, "Control on the hit validity"}
 
Gaudi::Property< bool > m_useTimeWindow {this, "UseTimeWindow", true}
 
Gaudi::Property< bool > m_vmmNeighborLogic {this, "VMMNeighborLogic", false}
 
Gaudi::Property< bool > m_doSmearing
 
Gaudi::Property< float > m_qThreshold {this, "qThreshold", 0.001, "Charge Threshold"}
 
Gaudi::Property< float > m_driftGapWidth {this, "DriftGapWidth", 5.04, "Drift Gap Width of 5.04 mm"}
 
Gaudi::Property< float > m_crossTalk1 {this, "crossTalk1", 0.3, "Strip Cross Talk with Nearest Neighbor"}
 
Gaudi::Property< float > m_crossTalk2 {this, "crossTalk2", 0.09, "Strip Cross Talk with 2nd Nearest Neighbor"}
 
Gaudi::Property< float > m_avalancheGain {this, "AvalancheGain", 6.0e3, "avalanche Gain for rach gas mixture"}
 
Gaudi::Property< float > m_electronicsThreshold
 
Gaudi::Property< float > m_stripdeadtime {this, "StripDeadTime", 200, "dead-time for strip, default value 200 ns = 8 BCs"}
 
Gaudi::Property< float > m_ARTdeadtime {this, "ARTDeadTime", 200, "dead-time for ART, default value 200 ns = 8 BCs"}
 
Gaudi::Property< bool > m_useCondThresholds
 
Gaudi::Property< bool > m_useThresholdScaling
 
Gaudi::Property< float > m_thresholdScaleFactor
 
Gaudi::Property< float > m_vmmDeadtime {this, "vmmDeadtime", 200, "Specifies how much before the lower time limit the VMM simulation should start evaluating the signal"}
 
Gaudi::Property< float > m_vmmUpperGrazeWindow {this, "vmmUpperGrazeWindow", 150, "Specifies how much above the upper time window boundary the VMM sim evaluates the signal."}
 
Gaudi::Property< double > m_deadTime {this, "deadTime", 300. * Gaudi::Units::ns}
 
std::unique_ptr< MM_StripsResponseSimulationm_StripsResponseSimulation {}
 
std::unique_ptr< MM_ElectronicsResponseSimulationm_ElectronicsResponseSimulation {}
 
std::map< int, NoiseCalibConstantsm_noiseParams {}
 Define a map to cache the noise parameters individually Key: stationName * std::abs(stationEta) More...
 
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 33 of file MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h.

Member Typedef Documentation

◆ DeadTimeMap

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

Definition at line 129 of file MuonDigitizationTool.h.

◆ DigiCache

◆ NoiseCalibConstants

◆ 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

◆ MM_DigitizationTool()

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

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  }

◆ combinedStripResponseAllHits()

MM_ElectronicsToolInput MM_DigitizationTool::combinedStripResponseAllHits ( const std::vector< MM_ElectronicsToolInput > &  v_stripDigitOutput) const
private

Definition at line 427 of file MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.cxx.

427  {
428  // set up pointer to conditions object
429  const EventContext& ctx = Gaudi::Hive::currentContext();
430 
431  const MmIdHelper& idHelper{m_idHelperSvc->mmIdHelper()};
432 
433  const NswCalibDbThresholdData* thresholdData {nullptr};
436  if (!readThresholds.isValid()) { ATH_MSG_ERROR("Cannot find conditions data container for VMM thresholds!"); }
437  thresholdData = readThresholds.cptr();
438  }
439 
440  std::vector<int> v_stripStripResponseAllHits;
441  std::vector<std::vector<float>> v_timeStripResponseAllHits;
442  std::vector<std::vector<float>> v_qStripResponseAllHits;
443  std::vector<float> v_stripThresholdResponseAllHits;
444 
445  Identifier digitID = v_stripDigitOutput.at(0).digitID();
446  double max_kineticEnergy = 0.0;
447 
448  // Loop over strip digit output elements
449  for (auto& i_stripDigitOutput : v_stripDigitOutput) {
450  //--- Just to get Digit id with the largest kinetic energy, but the Digit id is no longer meaningful
451  if (i_stripDigitOutput.kineticEnergy() > max_kineticEnergy) {
452  digitID = i_stripDigitOutput.digitID();
453  max_kineticEnergy = i_stripDigitOutput.kineticEnergy();
454  }
455  //---
456  for (size_t i = 0; i < i_stripDigitOutput.NumberOfStripsPos().size(); ++i) {
457  int strip_id = i_stripDigitOutput.NumberOfStripsPos().at(i);
458  bool found = false;
459 
460  for (size_t ii = 0; ii < v_stripStripResponseAllHits.size(); ++ii) {
461  if (v_stripStripResponseAllHits.at(ii) == strip_id) {
462  for (size_t iii = 0; iii < i_stripDigitOutput.chipTime().at(i).size(); ++iii) {
463  v_timeStripResponseAllHits.at(ii).push_back(i_stripDigitOutput.chipTime().at(i).at(iii));
464  v_qStripResponseAllHits.at(ii).push_back(i_stripDigitOutput.chipCharge().at(i).at(iii));
465  }
466  found = true;
467  }
468  }
469  if (!found) { // strip id not in vector, add new entry
470  v_stripStripResponseAllHits.push_back(strip_id);
471  v_timeStripResponseAllHits.push_back(i_stripDigitOutput.chipTime().at(i));
472  v_qStripResponseAllHits.push_back(i_stripDigitOutput.chipCharge().at(i));
473  if (m_useCondThresholds) {
474  const Identifier id = idHelper.channelID(digitID,
475  idHelper.multilayer(digitID),
476  idHelper.gasGap(digitID), strip_id);
477  float threshold = 0;
478  if (!thresholdData->getThreshold(id, threshold))
479  ATH_MSG_ERROR("Cannot find retrieve VMM threshold from conditions data base!");
480  v_stripThresholdResponseAllHits.push_back(threshold);
481  } else if (m_useThresholdScaling) {
482  Identifier id = idHelper.channelID(digitID,
483  idHelper.multilayer(digitID),
484  idHelper.gasGap(digitID), strip_id);
485 
486  const MuonGMR4::MmReadoutElement* detectorReadoutElement = m_detMgr->getMmReadoutElement(id);
487  const MuonGMR4::StripDesign& design{detectorReadoutElement->stripLayer(id).design()};
488  double stripLength = design.stripLength(strip_id);
489  const int noise_id = m_idHelperSvc->stationName(digitID) * std::abs(m_idHelperSvc->stationEta(digitID));
490  const NoiseCalibConstants& noise = m_noiseParams.at(noise_id);
491  double threshold = (noise.slope * stripLength + noise.intercept) * m_thresholdScaleFactor;
492  v_stripThresholdResponseAllHits.push_back(threshold);
493  } else {
494  v_stripThresholdResponseAllHits.push_back(m_electronicsThreshold);
495  }
496  }
497  }
498  }
499 
500  MM_ElectronicsToolInput stripDigitOutputAllHits(v_stripStripResponseAllHits,
501  v_qStripResponseAllHits,
502  v_timeStripResponseAllHits,
503  v_stripThresholdResponseAllHits,
504  digitID,
505  max_kineticEnergy);
506 
507 
508  return stripDigitOutputAllHits;
509  }

◆ digitize()

StatusCode MM_DigitizationTool::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.

Reject hit within the dead time interval

Implements MuonR4::MuonDigitizationTool.

Definition at line 187 of file MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.cxx.

189  {
190 
191  const MmIdHelper& idHelper{m_idHelperSvc->mmIdHelper()};
192  CLHEP::HepRandomEngine* rndEngine = getRandomEngine(ctx);
193  const ActsGeometryContext& gctx{getGeoCtx(ctx)};
194 
195  // Prepare the temporary cache
196  DigiCache digitCache{};
197 
198  // Fetch the conditions for efficiency calculations
199  const Muon::DigitEffiData* efficiencyMap{nullptr};
200  ATH_CHECK(retrieveConditions(ctx, m_effiDataKey, efficiencyMap));
201 
202  const NswErrorCalibData* errorCalibDB{nullptr};
203  ATH_CHECK(retrieveConditions(ctx, m_uncertCalibKey, errorCalibDB));
204 
205  MagField::AtlasFieldCache fieldCache;
206  const AtlasFieldCacheCondObj* fieldCondObj{nullptr};
208  fieldCondObj->getInitializedCache(fieldCache);
209 
210  xAOD::ChamberViewer viewer{hitsToDigit, m_idHelperSvc.get()};
211  do {
212 
213  std::vector<MM_ElectronicsToolInput> v_stripDigitOutput;
214  DeadTimeMap deadTimes{};
215 
216  for (const TimedHit& simHit : hitsToDigit) {
217  // ignore radiation if you want
218  if (m_digitizeMuonOnly && std::abs(simHit->pdgId()) != 13) {
219  ATH_MSG_VERBOSE("Hit is not from a muon - skipping ");
220  continue;
221  }
222 
223  const Identifier hitId{simHit->identify()};
224 
225  const double hitKineticEnergy = simHit->kineticEnergy();
226 
227  // Don't consider electron hits below m_energyThreshold.
228  // Electrons aren't consider for now in any case due to the cut above.
229  // But this may change.
230  if (hitKineticEnergy < m_energyThreshold && std::abs(simHit->pdgId()) == 11) {
231  continue;
232  }
233  const MuonGMR4::MmReadoutElement* readOutEle = m_detMgr->getMmReadoutElement(hitId);
234  const MuonGMR4::StripDesign& design{readOutEle->stripLayer(hitId).design()};
235  const IdentifierHash idHash{readOutEle->layerHash(hitId)};
236 
237  const Amg::Vector3D locPos{xAOD::toEigen(simHit->localPosition())};
238  const Amg::Vector3D locDir{xAOD::toEigen(simHit->localDirection())};
239 
240  const Amg::Transform3D& locToGlobal{readOutEle->localToGlobalTrans(gctx, idHash)};
241  const Amg::Vector3D globalHitPosition{locToGlobal * locPos};
242 
243  // We could use the MuonDigitizationTool::hitTime which returns the global time
244  // of the hit which is the sum of eventTime & individual hit time,
245  // but we want to have access on both contributions.
246  const double globalHitTime = simHit->globalTime();
247  const double tofCorrection = globalHitPosition.mag() / CLHEP::c_light;
248  const double eventTime = simHit.eventTime();
249  const double bunchTime = globalHitTime - tofCorrection + eventTime;
250 
251  const HepMcParticleLink particleLink = simHit->genParticleLink();
252  // Print some information about the MicroMegas hit
253  ATH_MSG_DEBUG("hitID " << hitId << " Hit bunch time " << bunchTime << " tof/G4 hit time " << globalHitTime << " globalHitPosition " << globalHitPosition << " hit: r " << globalHitPosition.perp() << " z " << globalHitPosition.z() << " mclink " << particleLink << " gas gap " << m_idHelperSvc->toStringGasGap(hitId) << "Kinetic energy " << hitKineticEnergy);
254 
255  // Angles, Geometry, and Coordinates.
256  // This is not an incident angle yet. It's atan(z/x),
257  // ... so it's the complement of the angle w.r.t. a vector normal to the detector surface
258  double inAngleCompliment_XZ = std::atan2(locDir.z(), locDir.x()) / CLHEP::degree;
259  double inAngleCompliment_YZ = std::atan2(locDir.z(), locDir.y()) / CLHEP::degree;
260 
261  // This is basically to handle the atan ambiguity
262  if (inAngleCompliment_XZ < 0.0) inAngleCompliment_XZ += 180;
263  if (inAngleCompliment_YZ < 0.0) inAngleCompliment_YZ += 180;
264 
265  // This gets the actual incidence angle from its complement.
266  double inAngle_XZ = 90. - inAngleCompliment_XZ;
267  double inAngle_YZ = 90. - inAngleCompliment_YZ;
268 
269  const IdentifierHash measHash{readOutEle->measurementHash(hitId)};
270  int readoutSide = readOutEle->readoutSide(measHash);
271  if (readoutSide == 1) {
272  inAngle_XZ = (-inAngle_XZ);
273  }
274 
275  // Move the hit position to the readout plane
276  int gasGap = idHelper.gasGap(hitId);
277  // TO DO: THERE IS NO DESING THICKNESS, BUT HOW TO GET DIFFERENT THICKNESSES LIKE BEFORE?
278  // double shift = 0.5 * design.thickness();
279  double shift = 0.5 * m_driftGapWidth ;
280  std::optional<double> lambda;
281  if (gasGap == 1 || gasGap == 3) {
282  lambda = Amg::intersect<3>(locPos, locDir, Amg::Vector3D::UnitZ(), -shift);
283  } else if (gasGap == 2 || gasGap == 4) {
284  lambda = Amg::intersect<3>(locPos, locDir, Amg::Vector3D::UnitZ(), shift);
285  }
286 
287  const Amg::Vector3D hitOnSurface = locPos + lambda.value_or(0.) * locDir;
288  Amg::Vector2D positionOnSurface{hitOnSurface.x(), hitOnSurface.y()};
289 
290  // Account For Time Offset
291  double shiftTimeOffset = (globalHitTime - tofCorrection) * m_StripsResponseSimulation->getDriftVelocity();
292  Amg::Vector3D hitAfterTimeShift(hitOnSurface.x(), hitOnSurface.y(), shiftTimeOffset);
293  lambda = Amg::intersect<3>(hitAfterTimeShift, locDir, Amg::Vector3D::UnitZ(), -shiftTimeOffset);
294  Amg::Vector3D hitAfterTimeShiftOnSurface = hitAfterTimeShift + lambda.value_or(0.) * locDir;
295 
296  if (std::abs(hitAfterTimeShiftOnSurface.z()) > 0.1){
297  ATH_MSG_WARNING("Bad propagation to surface after time shift " << hitAfterTimeShiftOnSurface);
298  }
299 
300  // Calculate the index for the global hit counter
301  const unsigned int hitGapInNsw = (idHelper.multilayer(hitId) -1) * 4 + idHelper.gasGap(hitId) -1;
302  ++m_allHits[hitGapInNsw];
303 
304  bool isValid{false};
305 
306  int channelNumber = design.stripNumber(positionOnSurface);
307  // Checks if the hit is outside of the panel
308  if(channelNumber<0){
309  // Checks if the point is inside the trapezoid where the strips are mounted.
310  if (!design.insideTrapezoid(positionOnSurface)) {
311  ATH_MSG_WARNING("Hit "<<m_idHelperSvc->toString(hitId)<<" "<<Amg::toString(positionOnSurface)
312  <<" is outside bounds "<<std::endl<<design<<" rejecting it");
313  }
314  continue;
315  }
316  Identifier clusId = idHelper.channelID(hitId,
317  idHelper.multilayer(hitId),
318  idHelper.gasGap(hitId),
319  channelNumber, isValid);
320 
321  if(!isValid) {
322  ATH_MSG_WARNING("Invalid strip identifier for layer " << m_idHelperSvc->toStringGasGap(hitId)
323  << " channel " << channelNumber << " positionOnSurface " << Amg::toString(positionOnSurface));
324  continue;
325  }
326 
327  if(efficiencyMap && efficiencyMap->getEfficiency(clusId) < CLHEP::RandFlat::shoot(rndEngine, 0., 1.)){
328  ATH_MSG_VERBOSE("Simulated hit "<< locPos << " " << m_idHelperSvc->toString(hitId) << " hitting strip " << m_idHelperSvc->toString(clusId) << " is rejected because of effiency modelling");
329  continue;
330  }
331  if (!passDeadTime(clusId, hitTime(simHit), m_deadTime, deadTimes)) {
333  continue;
334  }
335 
336  double distToStrip = design.distanceToStrip(positionOnSurface, channelNumber);
337 
338  // Obtain Magnetic Field At Detector Surface
339  Amg::Vector3D hitOnSurfaceGlobal{locToGlobal * hitOnSurface};
340  Amg::Vector3D magneticField{Amg::Vector3D::Zero()};
341  fieldCache.getField(hitOnSurfaceGlobal.data(), magneticField.data());
342 
343  // B-field in local cordinate, X ~ #strip, increasing to outer R, Z ~ global Z but positive to IP
344  Amg::Vector3D localMagneticField{ locToGlobal.linear().inverse() * magneticField };
345  if (readoutSide == -1) {localMagneticField[Amg::y] = -localMagneticField[Amg::y];}
346 
347  // Strip Response Simulation For This Hit
348  const MM_DigitToolInput stripDigitInput(channelNumber, distToStrip, inAngle_XZ, inAngle_YZ, localMagneticField,
349  design.firstStripNumber(),
350  design.numStrips() + design.firstStripNumber() - 1,
351  idHelper.gasGap(hitId), eventTime + globalHitTime);
352 
353  double stripPitch = design.stripPitch();
354 
355  double gainFraction = 1.0;
356 
357  MM_StripToolOutput tmpStripOutput = m_StripsResponseSimulation->GetResponseFrom(stripDigitInput, gainFraction, stripPitch, rndEngine);
358 
359  MM_ElectronicsToolInput stripDigitOutput(tmpStripOutput.NumberOfStripsPos(),
360  tmpStripOutput.chipCharge(),
361  tmpStripOutput.chipTime(),
362  clusId,
363  hitKineticEnergy);
364 
365  v_stripDigitOutput.push_back(stripDigitOutput);
366 
367  addSDO(simHit, sdoContainer);
368  ++m_acceptedHits[hitGapInNsw];
369  } // end of loop over hits
370 
371  // Now at Detector Element Level (VMM)
372  if (v_stripDigitOutput.empty()) {
373  ATH_MSG_DEBUG("MM_DigitizationTool::doDigitization() -- there is no strip response on this VMM.");
374  continue;
375  }
376 
377  // VMM Simulation
378  // Combine all strips (for this VMM) into a single VMM-level object
379  MM_ElectronicsToolInput stripDigitOutputAllHits = combinedStripResponseAllHits(v_stripDigitOutput);
380 
381  if (!m_idHelperSvc->isMM(stripDigitOutputAllHits.digitID())) {
382  ATH_MSG_WARNING("Identifier from stripdigitOutputAllHits "
383  << m_idHelperSvc->toString(stripDigitOutputAllHits.digitID())
384  << " is not a MM Identifier, skipping");
385  continue;
386  }
387 
388  // Create Electronics Output with peak or threshold finding setting
389  MM_DigitToolOutput electronicsOutputForReadout { m_vmmReadoutMode == "peak"
390  ? m_ElectronicsResponseSimulation->getPeakResponseFrom(stripDigitOutputAllHits)
391  : m_ElectronicsResponseSimulation->getThresholdResponseFrom(stripDigitOutputAllHits)};
392  if (!electronicsOutputForReadout.isValid()) {
393  ATH_MSG_DEBUG("MM_DigitizationTool::doDigitization() -- "<<
394  " there is no electronics response (peak or threshold finding mode) even though there is a strip response.");
395  }
396 
397  for (unsigned int firedCh = 0; firedCh < electronicsOutputForReadout.stripPos().size(); ++firedCh) {
398 
399  const int channel = electronicsOutputForReadout.stripPos()[firedCh];
400  double time = electronicsOutputForReadout.stripTime()[firedCh];
401  double charge = electronicsOutputForReadout.stripCharge()[firedCh];
402  bool isValid{false};
403  const Identifier digitID = idHelper.channelID(stripDigitOutputAllHits.digitID(),
404  idHelper.multilayer(stripDigitOutputAllHits.digitID()),
405  idHelper.gasGap(stripDigitOutputAllHits.digitID()),
406  channel, isValid);
407 
408  if (!isValid) {
409  ATH_MSG_DEBUG("Ghost strip fired... Ghost busters... ");
410  continue;
411  }
412 
413  MmDigitCollection* outColl = fetchCollection(digitID, digitCache);
414  outColl->push_back(std::make_unique<MmDigit>(digitID, time, charge));
415 
416  }
417 
418  v_stripDigitOutput.clear();
419 
420  } while(viewer.next());
421  // Write everything at the end into the final digit container
422  ATH_CHECK(writeDigitContainer(ctx, m_writeKey, std::move(digitCache), idHelper.module_hash_max()));
423 
424  return StatusCode::SUCCESS;
425  }

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

Definition at line 173 of file MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.cxx.

173  {
174 
175  std::stringstream statstr{};
176  unsigned allHits{0};
177  for (unsigned int g = 0; g < m_allHits.size(); ++g) {
178  allHits += m_allHits[g];
179  statstr<<" *** Layer "<<(g+1)<<" "<<percentage(m_acceptedHits[g],m_allHits[g])
180  <<"% of "<<m_allHits[g]<<std::endl;
181  }
182  if(!allHits) return StatusCode::SUCCESS;
183  ATH_MSG_INFO("Tried to convert "<<allHits<<" hits. Successes rate per layer "<<std::endl<<statstr.str());
184  return StatusCode::SUCCESS;
185  }

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

Reimplemented from PileUpToolBase.

Definition at line 36 of file MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.cxx.

36  {
37  ATH_MSG_DEBUG("MM_DigitizationTool:: in initialize()");
38 
40 
46  ATH_CHECK(m_calibrationTool.retrieve());
47  ATH_CHECK(m_smearingTool.retrieve());
48 
49  // get gas properties from calibration tool
50  const NSWCalib::MicroMegaGas prop = m_calibrationTool->mmGasProperties();
51  const double peakTime = m_calibrationTool->mmPeakTime();
52 
54  strip_cfg.NSWCalib::MicroMegaGas::operator=(prop);
56  strip_cfg.qThreshold = m_qThreshold;
57  strip_cfg.driftGapWidth = m_driftGapWidth;
58  strip_cfg.crossTalk1 = m_crossTalk1;
59  strip_cfg.crossTalk2 = m_crossTalk2;
60  strip_cfg.avalancheGain = m_avalancheGain;
61  m_StripsResponseSimulation = std::make_unique<MM_StripsResponseSimulation>(std::move(strip_cfg));
62 
63 
64  m_timeWindowLowerOffset += peakTime; // account for peak time in time window
65  m_timeWindowUpperOffset += peakTime; // account for peak time in time window
66 
68  elec_sim_cfg.peakTime = peakTime;
69  elec_sim_cfg.timeWindowLowerOffset = m_timeWindowLowerOffset;
70  elec_sim_cfg.timeWindowUpperOffset = m_timeWindowUpperOffset;
71  elec_sim_cfg.vmmDeadtime = m_vmmDeadtime;
72  elec_sim_cfg.vmmUpperGrazeWindow = m_vmmUpperGrazeWindow;
73  elec_sim_cfg.stripDeadTime = m_stripdeadtime;
74  elec_sim_cfg.artDeadTime = m_ARTdeadtime;
75  elec_sim_cfg.useNeighborLogic = m_vmmNeighborLogic;
76  // ElectronicsResponseSimulation Creation
77  m_ElectronicsResponseSimulation = std::make_unique<MM_ElectronicsResponseSimulation>(std::move(elec_sim_cfg));
78 
79  // Configuring various VMM modes of signal readout
80  //
81  std::string vmmReadoutMode = m_vmmReadoutMode;
82  // convert vmmReadoutMode to lower case
83  std::for_each(vmmReadoutMode.begin(), vmmReadoutMode.end(), [](char& c) { c = ::tolower(c); });
84  if (vmmReadoutMode.find("peak") != std::string::npos)
85  m_vmmReadoutMode = "peak";
86  else if (vmmReadoutMode.find("threshold") != std::string::npos)
87  m_vmmReadoutMode = "threshold";
88  else {
89  ATH_MSG_ERROR("MM_DigitizationTool can't interperet vmmReadoutMode option! (Should be 'peak' or 'threshold'.) Contains: "
90  << m_vmmReadoutMode);
91  return StatusCode::FAILURE;
92  }
93  std::string vmmARTMode = m_vmmARTMode;
94  // convert vmmARTMode to lower case
95  std::for_each(vmmARTMode.begin(), vmmARTMode.end(), [](char& c) { c = ::tolower(c); });
96  if (vmmARTMode.find("peak") != std::string::npos){
97  m_vmmARTMode = "peak";
98  } else if (vmmARTMode.find("threshold") != std::string::npos){
99  m_vmmARTMode = "threshold";
100  } else {
101  ATH_MSG_ERROR("MM_DigitizationTool can't interperet vmmARTMode option! (Should be 'peak' or 'threshold'.) Contains: " << m_vmmARTMode);
102  }
103 
104  if (m_doSmearing){ ATH_MSG_INFO("Running in smeared mode!"); }
105 
106  // get shortest and longest strip length for threshold scaling
107  Identifier tmpId{0}; // temporary identifier to work with ReadoutElement
108  int stripNumberShortestStrip{-1}, stripNumberLongestStrip{-1};
109  Identifier tmpIdShortestStrip{0},tmpIdLongestStrip{0};
110  double shortestStripLength{FLT_MAX}, longestStripLength{0};
111  IdentifierHash tmpIdHashShortestStrip{0},tmpIdHashLongestStrip{0};
112  NoiseCalibConstants noise_smallEta1, noise_smallEta2, noise_largeEta1, noise_largeEta2;
113  //
114  for (std::string sectorType : {"MML", "MMS"}) {
115  for (int etaStation : {1, 2}) {
116 
117  // identifier for first gas gap in a MM sector, layer is eta layer
118  tmpId = m_idHelperSvc->mmIdHelper().channelID(sectorType, etaStation, 1, 1, 1, 1);
119  const MuonGMR4::MmReadoutElement* detectorReadoutElement = m_detMgr->getMmReadoutElement(tmpId);
120  const MuonGMR4::StripDesign& design{detectorReadoutElement->stripLayer(tmpId).design()};
121  stripNumberShortestStrip = design.firstStripNumber();
122  tmpIdShortestStrip = m_idHelperSvc->mmIdHelper().channelID(sectorType, etaStation, 1, 1, 1, stripNumberShortestStrip); // identifier for the shortest strip
123  tmpIdHashShortestStrip = detectorReadoutElement->measurementHash(tmpIdShortestStrip);
124  shortestStripLength = detectorReadoutElement->stripLength(tmpIdHashShortestStrip);
125  stripNumberLongestStrip = design.numStrips() + stripNumberShortestStrip - 1;
126  tmpIdLongestStrip = m_idHelperSvc->mmIdHelper().channelID(sectorType, etaStation, 1, 1, 1, stripNumberLongestStrip); // identifier for the longest strip
127  tmpIdHashLongestStrip = detectorReadoutElement->measurementHash(tmpIdLongestStrip);
128  longestStripLength = design.stripLength(tmpIdHashLongestStrip);
129 
130  // now get the slope and intercept for the threshold scaling
131  // function is m_noiseSlope * stripLength + m_noiseIntercept
132  if (sectorType == "MMS") {
133  if ( etaStation == 1){
134  noise_smallEta1 = m_noiseParams[m_idHelperSvc->stationName(tmpId)];
135  noise_smallEta1.slope = (maxNoiseSmall_eta1 - minNoiseSmall_eta1) / (longestStripLength - shortestStripLength);
136  noise_smallEta1.intercept = minNoiseSmall_eta1 - noise_smallEta1.slope* shortestStripLength;
137  } else if ( etaStation == 2){
138  noise_smallEta2 = m_noiseParams[m_idHelperSvc->stationName(tmpId)*2];
139  noise_smallEta2.slope = (maxNoiseSmall_eta2 - minNoiseSmall_eta2) / (longestStripLength - shortestStripLength);
140  noise_smallEta2.intercept = minNoiseSmall_eta2 - noise_smallEta2.slope * shortestStripLength;
141  }
142  } else if (sectorType == "MML") {
143  if ( etaStation == 1){
144  noise_largeEta1 = m_noiseParams[m_idHelperSvc->stationName(tmpId)];
145  noise_largeEta1.slope = (maxNoiseLarge_eta1 - minNoiseLarge_eta1) / (longestStripLength - shortestStripLength);
146  noise_largeEta1.intercept = minNoiseLarge_eta1 - noise_largeEta1.slope * shortestStripLength;
147  } else if ( etaStation == 2){
148  noise_largeEta2 = m_noiseParams[m_idHelperSvc->stationName(tmpId)*2];
149  noise_largeEta2.slope = (maxNoiseLarge_eta2 - minNoiseLarge_eta2) / (longestStripLength - shortestStripLength);
150  noise_largeEta2.intercept = minNoiseLarge_eta2 - noise_largeEta2.slope * shortestStripLength;
151  }
152  } //end of if over sector types
153  } // end of loop over eta stations
154  } // end of loop over sector types
155 
156  ATH_MSG_DEBUG("Configuration MM_DigitizationTool ");
157  ATH_MSG_DEBUG("OutputObjectName " << m_writeKey.key());
158  ATH_MSG_DEBUG("UseTimeWindow " << m_useTimeWindow);
159  ATH_MSG_DEBUG("CheckSimHits " << m_checkMMSimHits);
160  ATH_MSG_DEBUG("Threshold " << m_qThreshold);
161  ATH_MSG_DEBUG("TransverseDiffusSigma " << m_StripsResponseSimulation->getTransversDiffusionSigma());
162  ATH_MSG_DEBUG("LogitundinalDiffusSigma" << m_StripsResponseSimulation->getLongitudinalDiffusionSigma());
163  ATH_MSG_DEBUG("Interaction density mean: " << m_StripsResponseSimulation->getInteractionDensityMean());
164  ATH_MSG_DEBUG("Interaction density sigma: " << m_StripsResponseSimulation->getInteractionDensitySigma());
165  ATH_MSG_DEBUG("DriftVelocity stripResponse: " << m_StripsResponseSimulation->getDriftVelocity());
166  ATH_MSG_DEBUG("crossTalk1 " << m_crossTalk1);
167  ATH_MSG_DEBUG("crossTalk2 " << m_crossTalk2);
168  ATH_MSG_DEBUG("EnergyThreshold " << m_energyThreshold);
169 
170  return StatusCode::SUCCESS;
171  }

◆ 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

◆ 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::MM_DigitizationTool::ATLAS_THREAD_SAFE {}
mutableprivate

◆ ATLAS_THREAD_SAFE [2/2]

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

◆ m_ARTdeadtime

Gaudi::Property<float> MuonR4::MM_DigitizationTool::m_ARTdeadtime {this, "ARTDeadTime", 200, "dead-time for ART, default value 200 ns = 8 BCs"}
private

◆ m_avalancheGain

Gaudi::Property<float> MuonR4::MM_DigitizationTool::m_avalancheGain {this, "AvalancheGain", 6.0e3, "avalanche Gain for rach gas mixture"}
private

◆ m_calibrationTool

ToolHandle<Muon::INSWCalibTool> MuonR4::MM_DigitizationTool::m_calibrationTool {this, "CalibrationTool", "Muon::NSWCalibTool/NSWCalibTool"}
private

◆ m_checkMMSimHits

Gaudi::Property<bool> MuonR4::MM_DigitizationTool::m_checkMMSimHits {this, "CheckSimHits", true, "Control on the hit validity"}
private

◆ m_condThrshldsKey

SG::ReadCondHandleKey<NswCalibDbThresholdData> MuonR4::MM_DigitizationTool::m_condThrshldsKey
private
Initial value:
{ this, "CondThrshldsKey", "NswCalibDbThresholdData",
"Key of NswCalibDbThresholdData object containing calibration data (VMM thresholds)"}

Definition at line 55 of file MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h.

◆ m_crossTalk1

Gaudi::Property<float> MuonR4::MM_DigitizationTool::m_crossTalk1 {this, "crossTalk1", 0.3, "Strip Cross Talk with Nearest Neighbor"}
private

◆ m_crossTalk2

Gaudi::Property<float> MuonR4::MM_DigitizationTool::m_crossTalk2 {this, "crossTalk2", 0.09, "Strip Cross Talk with 2nd Nearest Neighbor"}
private

◆ m_deadTime

Gaudi::Property<double> MuonR4::MM_DigitizationTool::m_deadTime {this, "deadTime", 300. * Gaudi::Units::ns}
private

◆ m_detMgr

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

Definition at line 140 of file MuonDigitizationTool.h.

◆ m_DiffMagSecondMuonHit

Gaudi::Property<double> MuonR4::MM_DigitizationTool::m_DiffMagSecondMuonHit {this, "DiffMagSecondMuonHit", 0.1}
private

◆ m_digitizeMuonOnly

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

◆ m_doSmearing

Gaudi::Property<bool> MuonR4::MM_DigitizationTool::m_doSmearing
private
Initial value:
{this, "doSmearing", true,
"set the usage or not of the smearing tool for realistic detector performance"}

Definition at line 80 of file MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h.

◆ m_driftGapWidth

Gaudi::Property<float> MuonR4::MM_DigitizationTool::m_driftGapWidth {this, "DriftGapWidth", 5.04, "Drift Gap Width of 5.04 mm"}
private

◆ m_effiDataKey

SG::ReadCondHandleKey<Muon::DigitEffiData> MuonR4::MM_DigitizationTool::m_effiDataKey {this, "EffiDataKey", "MmDigitEff", "Efficiency constants of the individual MM gasGaps"}
private

◆ m_ElectronicsResponseSimulation

std::unique_ptr<MM_ElectronicsResponseSimulation> MuonR4::MM_DigitizationTool::m_ElectronicsResponseSimulation {}
private

◆ m_electronicsThreshold

Gaudi::Property<float> MuonR4::MM_DigitizationTool::m_electronicsThreshold
private
Initial value:
{this, "electronicsThreshold", 15000,
"threshold Voltage for histoBNL, 2*(Intrinsic noise ~3k e)"}

Definition at line 96 of file MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h.

◆ m_energyThreshold

Gaudi::Property<double> MuonR4::MM_DigitizationTool::m_energyThreshold {this, "EnergyThreshold", 50, "Minimal energy to process an electron sim hit"}
private

◆ m_fieldCondObjInputKey

SG::ReadCondHandleKey<AtlasFieldCacheCondObj> MuonR4::MM_DigitizationTool::m_fieldCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj"}
private

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

Gaudi::Property<int> MuonR4::MM_DigitizationTool::m_maskMultiplet {this, "MaskMultiplet", 0, "0: all, 1: first, 2: second, 3: both"}
private

◆ m_mergeSvc

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

Definition at line 155 of file MuonDigitizationTool.h.

◆ m_needsMcEventCollHelper

Gaudi::Property<bool> MuonR4::MM_DigitizationTool::m_needsMcEventCollHelper {this, "UseMcEventCollectionHelper", false}
private

◆ m_noiseParams

std::map<int, NoiseCalibConstants> MuonR4::MM_DigitizationTool::m_noiseParams {}
private

Define a map to cache the noise parameters individually Key: stationName * std::abs(stationEta)

Definition at line 122 of file MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.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_qThreshold

Gaudi::Property<float> MuonR4::MM_DigitizationTool::m_qThreshold {this, "qThreshold", 0.001, "Charge Threshold"}
private

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

ToolHandle<Muon::INSWCalibSmearingTool> MuonR4::MM_DigitizationTool::m_smearingTool {this, "SmearingTool", "Muon::NSWCalibSmearingTool/MMCalibSmearingTool"}
private

◆ m_streamName

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

Definition at line 157 of file MuonDigitizationTool.h.

◆ m_stripdeadtime

Gaudi::Property<float> MuonR4::MM_DigitizationTool::m_stripdeadtime {this, "StripDeadTime", 200, "dead-time for strip, default value 200 ns = 8 BCs"}
private

◆ m_StripsResponseSimulation

std::unique_ptr<MM_StripsResponseSimulation> MuonR4::MM_DigitizationTool::m_StripsResponseSimulation {}
private

◆ m_thresholdScaleFactor

Gaudi::Property<float> MuonR4::MM_DigitizationTool::m_thresholdScaleFactor
private
Initial value:
{this, "thresholdScaleFactor", 7.0,
"Use x times the strip length dependent noise as MM threshold"}

Definition at line 106 of file MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h.

◆ m_timedHits

TimedHits MuonR4::MuonDigitizationTool::m_timedHits {}
privateinherited

Definition at line 170 of file MuonDigitizationTool.h.

◆ m_timeWindowLowerOffset

Gaudi::Property<double> MuonR4::MM_DigitizationTool::m_timeWindowLowerOffset
private
Initial value:
{this, "WindowLowerOffset", -12.5,
"lower boundary of the time window in which digits are accepted"}

Definition at line 67 of file MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h.

◆ m_timeWindowUpperOffset

Gaudi::Property<double> MuonR4::MM_DigitizationTool::m_timeWindowUpperOffset
private
Initial value:
{this, "WindowUpperOffset", 187.5,
"upper boundary of the time window in which digits are accepted"}

Definition at line 69 of file MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h.

◆ m_uncertCalibKey

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

◆ m_useCondThresholds

Gaudi::Property<bool> MuonR4::MM_DigitizationTool::m_useCondThresholds
private
Initial value:
{this, "useCondThresholds", false,
"Use conditions data to get thresholds, overrules useThresholdScaling"}

Definition at line 102 of file MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h.

◆ m_useThresholdScaling

Gaudi::Property<bool> MuonR4::MM_DigitizationTool::m_useThresholdScaling
private
Initial value:
{this, "useThresholdScaling", true,
"Use a strip length dependent threshold in MM digitiation"}

Definition at line 104 of file MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h.

◆ m_useTimeWindow

Gaudi::Property<bool> MuonR4::MM_DigitizationTool::m_useTimeWindow {this, "UseTimeWindow", true}
private

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

Gaudi::Property<std::string> MuonR4::MM_DigitizationTool::m_vmmARTMode {this, "vmmARTMode", "threshold", "For ART (trigger) path. Can be peak or threshold"}
private

◆ m_vmmDeadtime

Gaudi::Property<float> MuonR4::MM_DigitizationTool::m_vmmDeadtime {this, "vmmDeadtime", 200, "Specifies how much before the lower time limit the VMM simulation should start evaluating the signal"}
private

◆ m_vmmNeighborLogic

Gaudi::Property<bool> MuonR4::MM_DigitizationTool::m_vmmNeighborLogic {this, "VMMNeighborLogic", false}
private

◆ m_vmmReadoutMode

Gaudi::Property<std::string> MuonR4::MM_DigitizationTool::m_vmmReadoutMode {this, "vmmReadoutMode", "peak", "For readout (DAQ) path. Can be peak or threshold"}
private

◆ m_vmmUpperGrazeWindow

Gaudi::Property<float> MuonR4::MM_DigitizationTool::m_vmmUpperGrazeWindow {this, "vmmUpperGrazeWindow", 150, "Specifies how much above the upper time window boundary the VMM sim evaluates the signal."}
private

◆ m_writeKey

SG::WriteHandleKey<MmDigitContainer> MuonR4::MM_DigitizationTool::m_writeKey {this, "OutputObjectName", "MM_DIGITS"}
private

◆ m_writeOutputFile

Gaudi::Property<bool> MuonR4::MM_DigitizationTool::m_writeOutputFile {this, "SaveInternalHistos", false}
private

The documentation for this class was generated from the following files:
MmDigitCollection
Definition: MmDigitCollection.h:18
MuonR4::MM_DigitizationTool::m_electronicsThreshold
Gaudi::Property< float > m_electronicsThreshold
Definition: MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h:96
MuonR4::MuonDigitizationTool::m_inputObjectName
std::string m_inputObjectName
Definition: MuonDigitizationTool.h:168
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: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
MuonGMR4::MmReadoutElement
Definition: MmReadoutElement.h:19
MuonGMR4::MmReadoutElement::stripLength
double stripLength(const IdentifierHash &measHash) const
Returns the strip length.
dumpTgcDigiDeadChambers.gasGap
list gasGap
Definition: dumpTgcDigiDeadChambers.py:33
MuonR4::MuonDigitizationTool::m_simHitKey
SG::ReadHandleKey< xAOD::MuonSimHitContainer > m_simHitKey
Definition: MuonDigitizationTool.h:150
MuonGMR4::StripDesign
Definition: StripDesign.h:30
NswCalibDbThresholdData
Definition: NswCalibDbThresholdData.h:17
MuonR4::MM_DigitizationTool::m_effiDataKey
SG::ReadCondHandleKey< Muon::DigitEffiData > m_effiDataKey
Definition: MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h:52
MuonR4::MM_DigitizationTool::m_ElectronicsResponseSimulation
std::unique_ptr< MM_ElectronicsResponseSimulation > m_ElectronicsResponseSimulation
Definition: MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h:117
MuonR4::MuonDigitizationTool::fillTimedHits
StatusCode fillTimedHits(PileUpHits &&hitColl, TimedHits &timedHits) const
Translates the PileUpHits into the timed hits format.
Definition: MuonDigitizationTool.cxx:50
plotting.yearwise_efficiency.channel
channel
Definition: yearwise_efficiency.py:24
MuonR4::MuonDigitizationTool::m_streamName
Gaudi::Property< std::string > m_streamName
Definition: MuonDigitizationTool.h:157
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
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
AtlasFieldCacheCondObj
Definition: AtlasFieldCacheCondObj.h:19
MuonR4::MM_DigitizationTool::m_StripsResponseSimulation
std::unique_ptr< MM_StripsResponseSimulation > m_StripsResponseSimulation
Definition: MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h:116
SG::Accessor< float >
MuonR4::MM_DigitizationTool::m_useTimeWindow
Gaudi::Property< bool > m_useTimeWindow
Definition: MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h:78
MuonR4::MM_DigitizationTool::m_vmmUpperGrazeWindow
Gaudi::Property< float > m_vmmUpperGrazeWindow
Definition: MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h:111
MuonGMR4::StripDesign::stripLength
virtual double stripLength(int stripNumb) const
Returns length of the strip.
MuonR4::MM_DigitizationTool::m_calibrationTool
ToolHandle< Muon::INSWCalibTool > m_calibrationTool
Definition: MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h:60
Amg::Vector2D
Eigen::Matrix< double, 2, 1 > Vector2D
Definition: GeoPrimitives.h:48
MM_StripToolOutput::NumberOfStripsPos
const std::vector< int > & NumberOfStripsPos() const
Definition: MM_StripToolOutput.h:17
MuonR4::MM_DigitizationTool::combinedStripResponseAllHits
MM_ElectronicsToolInput combinedStripResponseAllHits(const std::vector< MM_ElectronicsToolInput > &v_stripDigitOutput) const
Definition: MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.cxx:427
MuonR4::MM_DigitizationTool::m_uncertCalibKey
SG::ReadCondHandleKey< NswErrorCalibData > m_uncertCalibKey
Definition: MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h:53
MuonR4::MuonDigitizationTool::m_onlyUseContainerName
Gaudi::Property< bool > m_onlyUseContainerName
Definition: MuonDigitizationTool.h:163
Amg::y
@ y
Definition: GeoPrimitives.h:35
MuonR4::MuonDigitizationTool::m_mergeSvc
ServiceHandle< PileUpMergeSvc > m_mergeSvc
Definition: MuonDigitizationTool.h:155
MM_StripToolOutput::chipCharge
const std::vector< std::vector< float > > & chipCharge() const
Definition: MM_StripToolOutput.h:18
MuonR4::MuonDigitizationTool::TimedHit
TimedHitPtr< xAOD::MuonSimHit > TimedHit
Definition: MuonDigitizationTool.h:70
MuonR4::MM_DigitizationTool::m_crossTalk2
Gaudi::Property< float > m_crossTalk2
Definition: MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h:91
MuonR4::MM_DigitizationTool::m_doSmearing
Gaudi::Property< bool > m_doSmearing
Definition: MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h:80
MuonR4::MuonDigitizationTool::m_sdoKey
SG::WriteHandleKey< xAOD::MuonSimHitContainer > m_sdoKey
Definition: MuonDigitizationTool.h:161
MuonR4::MM_DigitizationTool::m_timeWindowUpperOffset
Gaudi::Property< double > m_timeWindowUpperOffset
Definition: MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h:69
MuonR4::MM_DigitizationTool::m_writeOutputFile
Gaudi::Property< bool > m_writeOutputFile
Definition: MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h:75
MM_StripsResponseSimulation::ConfigModule
Definition: MM_StripsResponseSimulation.h:64
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
MuonR4::MM_DigitizationTool::m_crossTalk1
Gaudi::Property< float > m_crossTalk1
Definition: MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h:90
isValid
bool isValid(const T &p)
Definition: AtlasPID.h:225
MuonR4::MM_DigitizationTool::m_vmmARTMode
Gaudi::Property< std::string > m_vmmARTMode
Definition: MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h:64
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
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
MM_DigitToolInput
Definition: MM_DigitToolInput.h:25
MuonR4::MM_DigitizationTool::m_smearingTool
ToolHandle< Muon::INSWCalibSmearingTool > m_smearingTool
Definition: MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h:59
MM_ElectronicsResponseSimulation::ConfigModule
Definition: MM_ElectronicsResponseSimulation.h:34
MuonR4::MM_DigitizationTool::m_useThresholdScaling
Gaudi::Property< bool > m_useThresholdScaling
Definition: MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h:104
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::MM_DigitizationTool::m_digitizeMuonOnly
Gaudi::Property< bool > m_digitizeMuonOnly
Definition: MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h:62
MM_DigitToolOutput
Definition: MM_DigitToolOutput.h:25
MuonR4::MM_DigitizationTool::DigiCache
OutDigitCache_t< MmDigitCollection > DigiCache
Definition: MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h:127
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
xAOD::ChamberViewer
Definition: ChamberViewer.h:65
MuonR4::MM_DigitizationTool::m_vmmNeighborLogic
Gaudi::Property< bool > m_vmmNeighborLogic
Definition: MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h:79
MuonR4::MuonDigitizationTool::MuonDigitizationTool
MuonDigitizationTool(const std::string &type, const std::string &name, const IInterface *pIID)
Definition: MuonDigitizationTool.cxx:12
MuonR4::MM_DigitizationTool::m_ARTdeadtime
Gaudi::Property< float > m_ARTdeadtime
Definition: MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h:99
MM_ElectronicsToolInput
Definition: MM_ElectronicsToolInput.h:9
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
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
lumiFormat.i
int i
Definition: lumiFormat.py:85
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
python.CaloCondTools.g
g
Definition: CaloCondTools.py:15
MuonR4::MM_DigitizationTool::m_vmmReadoutMode
Gaudi::Property< std::string > m_vmmReadoutMode
Definition: MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h:63
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
MuonR4::MM_DigitizationTool::m_deadTime
Gaudi::Property< double > m_deadTime
Definition: MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h:114
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
MuonR4::MM_DigitizationTool::m_thresholdScaleFactor
Gaudi::Property< float > m_thresholdScaleFactor
Definition: MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h:106
MuonGMR4::MmReadoutElement::readoutSide
int readoutSide(const IdentifierHash &measHash) const
Returns the readout side.
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
MuonGMR4::StripDesign::firstStripNumber
int firstStripNumber() const
Returns the number of the first strip.
CaloCondBlobAlgs_fillNoiseFromASCII.channelId
channelId
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:122
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
MuonR4::MM_DigitizationTool::m_writeKey
SG::WriteHandleKey< MmDigitContainer > m_writeKey
Definition: MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h:50
ActsGeometryContext
Include the GeoPrimitives which need to be put first.
Definition: ActsGeometryContext.h:27
MuonGMR4::MmReadoutElement::stripLayer
const StripLayer & stripLayer(const Identifier &measId) const
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
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
MuonR4::MM_DigitizationTool::m_fieldCondObjInputKey
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > m_fieldCondObjInputKey
Definition: MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h:58
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.
threshold
Definition: chainparser.cxx:74
MuonR4::MM_DigitizationTool::NoiseCalibConstants
NswCalibDbTimeChargeData::CalibConstants NoiseCalibConstants
Definition: MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h:119
MM_StripToolOutput::chipTime
const std::vector< std::vector< float > > & chipTime() const
Definition: MM_StripToolOutput.h:19
charge
double charge(const T &p)
Definition: AtlasPID.h:538
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)
MuonR4::MM_DigitizationTool::m_qThreshold
Gaudi::Property< float > m_qThreshold
Definition: MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h:88
python.PhysicalConstants.c_light
float c_light
Definition: PhysicalConstants.py:63
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
MuonR4::MM_DigitizationTool::m_stripdeadtime
Gaudi::Property< float > m_stripdeadtime
Definition: MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h:98
MuonR4::MM_DigitizationTool::m_noiseParams
std::map< int, NoiseCalibConstants > m_noiseParams
Define a map to cache the noise parameters individually Key: stationName * std::abs(stationEta)
Definition: MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h:122
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
MM_StripToolOutput
Definition: MM_StripToolOutput.h:9
MuonGMR4::StripLayer::design
const StripDesign & design() const
Returns the underlying strip design.
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
MM_StripsResponseSimulation::ConfigModule::writeOutputFile
bool writeOutputFile
Definition: MM_StripsResponseSimulation.h:80
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
MM_ElectronicsToolInput::digitID
const Identifier & digitID() const
Definition: MM_ElectronicsToolInput.h:35
MuonR4::MM_DigitizationTool::m_timeWindowLowerOffset
Gaudi::Property< double > m_timeWindowLowerOffset
Definition: MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h:67
MmIdHelper
Definition: MmIdHelper.h:54
CondAlgsOpts.found
int found
Definition: CondAlgsOpts.py:101
MuonGMR4::MmReadoutElement::measurementHash
IdentifierHash measurementHash(const Identifier &measId) const override final
Constructs the identifier hash from the full measurement Identifier.
CaloSwCorrections.time
def time(flags, cells_name, *args, **kw)
Definition: CaloSwCorrections.py:242
MuonGMR4::MmReadoutElement::layerHash
IdentifierHash layerHash(const Identifier &measId) const override final
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
MuonR4::MM_DigitizationTool::m_energyThreshold
Gaudi::Property< double > m_energyThreshold
Definition: MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h:66
MagField::AtlasFieldCache
Local cache for magnetic field (based on MagFieldServices/AtlasFieldSvcTLS.h)
Definition: AtlasFieldCache.h:43
if
if(febId1==febId2)
Definition: LArRodBlockPhysicsV0.cxx:567
MuonR4::MuonDigitizationTool::m_rndmSvc
ServiceHandle< IAthRNGSvc > m_rndmSvc
Definition: MuonDigitizationTool.h:159
MuonR4::MM_DigitizationTool::m_useCondThresholds
Gaudi::Property< bool > m_useCondThresholds
Definition: MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h:102
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
MagField::AtlasFieldCache::getField
void getField(const double *ATH_RESTRICT xyz, double *ATH_RESTRICT bxyz, double *ATH_RESTRICT deriv=nullptr)
get B field value at given position xyz[3] is in mm, bxyz[3] is in kT if deriv[9] is given,...
Definition: AtlasFieldCache.cxx:42
MuonR4::MuonDigitizationTool::m_detMgr
const MuonGMR4::MuonDetectorManager * m_detMgr
Definition: MuonDigitizationTool.h:140
MuonR4::MM_DigitizationTool::m_checkMMSimHits
Gaudi::Property< bool > m_checkMMSimHits
Definition: MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h:77
MuonR4::MM_DigitizationTool::m_vmmDeadtime
Gaudi::Property< float > m_vmmDeadtime
Definition: MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h:108
MuonR4::MuonDigitizationTool::DeadTimeMap
std::unordered_map< Identifier, double > DeadTimeMap
Definition: MuonDigitizationTool.h:129
MM_ElectronicsResponseSimulation::ConfigModule::peakTime
float peakTime
power of responce function
Definition: MM_ElectronicsResponseSimulation.h:36
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::MM_DigitizationTool::m_driftGapWidth
Gaudi::Property< float > m_driftGapWidth
Definition: MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h:89
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
python.compressB64.c
def c
Definition: compressB64.py:93
MuonR4::MM_DigitizationTool::m_condThrshldsKey
SG::ReadCondHandleKey< NswCalibDbThresholdData > m_condThrshldsKey
Definition: MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h:55
NSWCalib::MicroMegaGas
Definition: INSWCalibTool.h:32
python.SystemOfUnits.degree
tuple degree
Definition: SystemOfUnits.py:106
WriteCellNoiseToCool.noise
noise
Definition: WriteCellNoiseToCool.py:380
generate::Zero
void Zero(TH1D *hin)
Definition: generate.cxx:32
MuonR4::MM_DigitizationTool::m_avalancheGain
Gaudi::Property< float > m_avalancheGain
Definition: MuonPhaseII/MuonDigitization/MmDigitizationR4/src/MM_DigitizationTool.h:93
Identifier
Definition: IdentifierFieldParser.cxx:14