ATLAS Offline Software
Classes | Public Member Functions | Protected Attributes | Private Types | Private Member Functions | Static Private Member Functions | Private Attributes | List of all members
MdtDigitizationTool Class Reference

#include <MdtDigitizationTool.h>

Inheritance diagram for MdtDigitizationTool:
Collaboration diagram for MdtDigitizationTool:

Classes

struct  GeoCorOut
 

Public Member Functions

 MdtDigitizationTool (const std::string &type, const std::string &name, const IInterface *pIID)
 
virtual ~MdtDigitizationTool ()=default
 
virtual StatusCode initialize () override final
 Initialize. More...
 
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...
 
virtual StatusCode processBunchXing (int bunchXing, SubEventIterator bSubEvents, SubEventIterator eSubEvents) override final
 When being run from PileUpToolsAlgs, this method is called for each active bunch-crossing to process current SubEvents bunchXing is in ns. More...
 
StatusCode mergeEvent (const EventContext &ctx) override final
 When being run from PileUpToolsAlgs, this method is called at the end of the subevts loop. More...
 
virtual StatusCode processAllSubEvents (const EventContext &ctx) override final
 alternative interface which uses the PileUpMergeSvc to obtain all the required SubEvents. More...
 

Protected Attributes

ServiceHandle< PileUpMergeSvcm_mergeSvc {this, "PileUpMergeSvc", "PileUpMergeSvc", ""}
 
BooleanProperty m_onlyUseContainerName
 
SG::ReadHandleKey< MDTSimHitCollectionm_hitsContainerKey {this, "InputObjectName", "MDT_Hits", ""}
 
std::string m_inputObjectName {""}
 
SG::WriteHandleKey< MdtDigitContainerm_outputObjectKey
 
SG::WriteHandleKey< MuonSimDataCollectionm_outputSDOKey
 
ServiceHandle< IAthRNGSvcm_rndmSvc {this, "RndmSvc", "AthRNGSvc", ""}
 
SG::ReadCondHandleKey< MuonCalib::MdtCalibDataContainerm_calibDbKey
 
SG::ReadCondHandleKey< MdtCondDbDatam_readKey {this, "ReadKey", "MdtCondDbData", "Key of MdtCondDbData"}
 

Private Types

using Collections_t = std::vector< std::unique_ptr< MdtDigitCollection > >
 

Private Member Functions

CLHEP::HepRandomEngine * getRandomEngine (const std::string &streamName, const EventContext &ctx) const
 
int digitizeTime (double time, bool isHPTDC, CLHEP::HepRandomEngine *rndmEngine) const
 
double minimumTof (Identifier DigitId, const MuonGM::MuonDetectorManager *detMgr) const
 
bool insideMatchingWindow (double time) const
 
bool insideMaskWindow (double time) const
 
bool checkMDTSimHit (const EventContext &ctx, const MDTSimHit &hit) const
 
bool handleMDTSimHit (const EventContext &ctx, const TimedHitPtr< MDTSimHit > &phit, CLHEP::HepRandomEngine *twinRndmEngine, CLHEP::HepRandomEngine *toolRndmEngine)
 
bool createDigits (const EventContext &ctx, Collections_t &collections, MuonSimDataCollection *sdoContainer, CLHEP::HepRandomEngine *rndmEngine)
 
GeoCorOut correctGeometricalWireSag (const MDTSimHit &hit, const Identifier &id, const MuonGM::MdtReadoutElement *element) const
 
StatusCode getNextEvent (const EventContext &ctx)
 
StatusCode doDigitization (const EventContext &ctx, Collections_t &collections, MuonSimDataCollection *sdoContainer)
 
MdtDigitCollectiongetDigitCollection (Identifier elementId, Collections_t &collections)
 
void fillMaps (const MDTSimHit *mdtHit, const Identifier digitId, const double driftR)
 

Static Private Member Functions

static MDTSimHit applyDeformations (const MDTSimHit &, const MuonGM::MdtReadoutElement *, const Identifier &)
 

Private Attributes

MDT_SortedHitVector m_hits
 
ServiceHandle< Muon::IMuonIdHelperSvcm_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"}
 
const MdtHitIdHelperm_muonHelper {}
 
const MuonGM::MuonDetectorManagerm_MuonGeoMgr {}
 
ToolHandle< IMDT_DigitizationToolm_digiTool
 
std::vector< MDTSimHitCollection * > m_MDTHitCollList
 
Gaudi::Property< double > m_offsetTDC {this, "OffsetTDC", 800., "TDC offset used if no calibration data is found"}
 
Gaudi::Property< double > m_signalSpeed {this, "SignalSpeed", 0.85*Gaudi::Units::c_light}
 
Gaudi::Property< double > m_ns2TDCAMT {this, "ns2TDCAMT", 0.78125, "Conversion factor TDC/ns for AMT chips"}
 
Gaudi::Property< double > m_ns2TDCHPTDC {this, "ns2TDCHPTDC", 0.1953125, "Conversion factor TDC/ns for HPTDC chips"}
 
Gaudi::Property< double > m_resTDC {this, "ResolutionTDC", 0.5, "TDC resolution"}
 
Gaudi::Property< double > m_t0ShiftTuning {this,"TunedT0Shift",-17.,"Fine tuned t0 shift value in ns"}
 
Gaudi::Property< bool > m_checkMDTSimHits {this, "CheckSimHits", true, "Control on the hit validity"}
 
Gaudi::Property< bool > m_useTof {this, "UseTof", true, "Option for the tof calculation"}
 
Gaudi::Property< bool > m_useAttenuation {this, "UseAttenuation", false, ""}
 
Gaudi::Property< bool > m_useProp {this, "UseProp", true, ""}
 
Gaudi::Property< bool > m_useTwin {this, "UseTwin", false, ""}
 
Gaudi::Property< bool > m_useAllBOLTwin {this, "UseAllBOLTwin", false, ""}
 
Gaudi::Property< double > m_resTwin {this, "ResolutionTwinTube", 1.05, "Twin Tube resolution"}
 
Gaudi::Property< bool > m_useTimeWindow {this, "UseTimeWindow", true, ""}
 
Gaudi::Property< double > m_bunchCountOffset {this, "BunchCountOffset", -200., "Bunch crossing offset"}
 
Gaudi::Property< double > m_matchingWindow {this, "MatchingWindow", 1000., "Matching window"}
 
Gaudi::Property< double > m_maskWindow {this, "MaskWindow", 250., "Masked window"}
 
Gaudi::Property< double > m_deadTime {this, "DeadTime", 700., "MDT drift tube dead time"}
 
Gaudi::Property< bool > m_DiscardEarlyHits {this, "DiscardEarlyHits", true, ""}
 
Gaudi::Property< bool > m_useOffSet1 {this, "UseOffSet1", true, ""}
 
Gaudi::Property< bool > m_useOffSet2 {this, "UseOffSet2", true, ""}
 
Gaudi::Property< bool > m_useDeformations {this, "UseDeformations", false, ""}
 
Gaudi::Property< bool > m_DoQballCharge {this, "DoQballCharge", false, "dEdx for Qballs with account of electric charge"}
 
std::unique_ptr< TimedHitCollection< MDTSimHit > > m_thpcMDT {}
 
Gaudi::Property< bool > m_includePileUpTruth {this, "IncludePileUpTruth", true, "Include pile-up truth info"}
 

structors and AlgTool implementation

Gaudi::Property< int > m_firstXing
 
Gaudi::Property< int > m_lastXing
 
Gaudi::Property< int > m_vetoPileUpTruthLinks
 
bool m_filterPassed {true}
 
virtual bool toProcess (int bunchXing) const override
 the method this base class helps implementing More...
 
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 filterPassed () const override
 dummy implementation of passing filter More...
 
virtual void resetFilter () override
 dummy implementation of filter reset More...
 

Detailed Description

In the initialize() method, the PileUpMerge and StoreGate services are initialized, and a pointer to an instance of the class MuonDetectorManager is retrieved from the detector store and used to obtain a MdtIdHelper.The MdtDigitContainer is initialized and the simulation identifier helper retrieved, together with the pointer to the digitization tool. Random numbers are obtained in the code from a dedicated stream via AtRndmSvc, which is also initialized in the initialize() method.

In the execute() method, the digits and the SDOs (Simulation Data Object, container for simulation data to be preserved after the digitization procedue, and persistified together with the RDOs) containers are created and recorded on StoreGate; the MDTSimHit collection are merged using the TimedHitCollection sorted container (done in handleMDTSimHit(TimedHitPtr <MDTSimHit>& hit)) method); into a loop over the TimedHitCollection for the given DetectorElement, the handleMDTSimHit() method converts the SimID into the Offline ID to be associated to the Digit and pass to the digitization tool the drift radius and the distance to the chamber RO side (for the propagation delay computation). The digitization tool returns a drift time and an ADC count which are used together with the Offline ID, to create the digit object (in createDigits() method).

The finalize() method returns a SUCCESS StatusCode if the digitization procedure ends succesfully.

Definition at line 87 of file MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h.

Member Typedef Documentation

◆ Collections_t

using MdtDigitizationTool::Collections_t = std::vector<std::unique_ptr<MdtDigitCollection> >
private

Constructor & Destructor Documentation

◆ MdtDigitizationTool()

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

Definition at line 64 of file MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx.

64  :
65  PileUpToolBase(type, name, pIID) {}

◆ ~MdtDigitizationTool()

virtual MdtDigitizationTool::~MdtDigitizationTool ( )
virtualdefault

Member Function Documentation

◆ applyDeformations()

MDTSimHit MdtDigitizationTool::applyDeformations ( const MDTSimHit hit,
const MuonGM::MdtReadoutElement element,
const Identifier DigitId 
)
staticprivate

Definition at line 811 of file MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx.

812  {
813  // make the deformation
814  Amg::Vector3D hitAtGlobalFrame = element->nodeform_localToGlobalTransf(DigitId) * hit.localPosition();
815  Amg::Vector3D hitDeformed = element->globalToLocalTransf(DigitId) * hitAtGlobalFrame;
816  MDTSimHit simhit2(hit);
817  // apply the deformation
818  simhit2.setDriftRadius(hitDeformed.perp());
819  simhit2.setLocalPosition(hitDeformed);
820  return simhit2;
821 }

◆ checkMDTSimHit()

bool MdtDigitizationTool::checkMDTSimHit ( const EventContext &  ctx,
const MDTSimHit hit 
) const
private

Definition at line 540 of file MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx.

540  {
541  // get the hit Identifier and info
542  const int id = hit.MDTid();
543  std::string stationName = m_muonHelper->GetStationName(id);
546  int multilayer = m_muonHelper->GetMultiLayer(id);
547  int layer = m_muonHelper->GetLayer(id);
548  int tube = m_muonHelper->GetTube(id);
549 
550  Identifier DigitId = m_idHelperSvc->mdtIdHelper().channelID(stationName, stationEta, stationPhi, multilayer, layer, tube);
551  ATH_MSG_DEBUG("Working on hit: " << m_idHelperSvc->mdtIdHelper().show_to_string(DigitId) << " "
552  << m_idHelperSvc->mdtIdHelper().stationNameString(m_idHelperSvc->mdtIdHelper().stationName(DigitId))
553  << " " << stationEta << " " << stationPhi);
554 
555  //+MASKING OF DEAD/MISSING CHAMBERS
556  if (!m_readKey.empty()) {
558  if (!readCdo.isValid()) {
559  ATH_MSG_WARNING(m_readKey.fullKey() << " is not available.");
560  return false;
561  }
562  if (!readCdo->isGood(DigitId)) return false;
563  }
564  //-MASKING OF DEAD/MISSING CHAMBERS
565 
566  double tubeL{0.}, tubeR{0.};
568 
569  if (!element) {
570  ATH_MSG_ERROR("MuonGeoManager does not return valid element for given id!");
571  } else {
572  tubeL = element->tubeLength(DigitId);
573  tubeR = element->innerTubeRadius();
574  }
575 
576  bool ok(true);
577 
578  if (std::abs(hit.driftRadius()) > tubeR) {
579  ok = false;
580  ATH_MSG_DEBUG("MDTSimHit has invalid radius: " << hit.driftRadius() << " tubeRadius " << tubeR);
581  }
582 
583  if (std::abs(hit.localPosition().z()) > 0.5 * tubeL) {
584  ok = false;
585  ATH_MSG_DEBUG("MDTSimHit has invalid position along tube: " << hit.localPosition().z() << " tubeLength " << tubeL);
586  }
587 
588  if (m_useTof) {
589  double minTof = minimumTof(DigitId, m_MuonGeoMgr);
590  if ((hit.globalTime() < 0 || hit.globalTime() > 10 * minTof) && m_DiscardEarlyHits) {
591  ok = false;
592  ATH_MSG_DEBUG("MDTSimHit has invalid global time: " << hit.globalTime() << " minimum Tof " << minTof);
593  }
594  } else {
595  ATH_MSG_DEBUG("MDTSimHit global time: " << hit.globalTime() << " accepted anyway as UseTof is false");
596  }
597 
598  return ok;
599 }

◆ correctGeometricalWireSag()

MdtDigitizationTool::GeoCorOut MdtDigitizationTool::correctGeometricalWireSag ( const MDTSimHit hit,
const Identifier id,
const MuonGM::MdtReadoutElement element 
) const
private

Definition at line 823 of file MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx.

824  {
825  Amg::Vector3D lpos = hit.localPosition();
826  Amg::Transform3D gToWireFrame = element->globalToLocalTransf(id);
827 
828  // local track direction in precision plane
829  Amg::Vector3D ldir(-lpos.y(), lpos.x(), 0.);
830  ldir.normalize();
831 
832  // calculate the position of the hit sagged wire frame
833  // transform to global coords
834  const Amg::Transform3D& transf{element->localToGlobalTransf(id)};
835  Amg::Vector3D gpos = transf*lpos;
836  Amg::Vector3D gdir = transf* ldir;
837 
838  // get wire surface
839  const Trk::StraightLineSurface& surface = element->surface(id);
840 
841  // check whether direction is pointing away from IP
842  double pointingCheck = gpos.dot(gdir) < 0 ? -1. : 1.;
843  if (pointingCheck < 0) { gdir *= pointingCheck; }
844 
845  double trackingSign = 1.;
846  double localSag = 0.0;
847 
848  // recalculate tracking sign
850  surface.globalToLocal(gpos, gdir, lpsag);
851  trackingSign = lpsag[Trk::locR] < 0 ? -1. : 1.;
852 
853 
854  // local gravity vector
855  Amg::Vector3D gravityDir =-1. * Amg::Vector3D::UnitY();
856  Amg::Vector3D lgravDir = gToWireFrame * gravityDir;
857 
858  // Project gravity vector onto X-Y plane, so the z-components (along the wire)
859  // don't contribute to the dot-product.
860  lgravDir.z() = 0.;
861 
862  // calculate whether hit above or below wire (using gravity direction
863  // 1 -> hit below wire (in same hemisphere as gravity vector)
864  //-1 -> hit above wire (in opposite hemisphere as gravity vector)
865  double sign = lpos.dot(lgravDir) < 0 ? -1. : 1.;
866 
867  return {sign, trackingSign, lpos, localSag};
868 }

◆ createDigits()

bool MdtDigitizationTool::createDigits ( const EventContext &  ctx,
Collections_t collections,
MuonSimDataCollection sdoContainer,
CLHEP::HepRandomEngine *  rndmEngine 
)
private

Definition at line 601 of file MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx.

603  {
604  Identifier currentDigitId{0}, currentElementId{0};
605 
606  double currentDeadTime = 0.;
607  MdtDigitCollection* digitCollection = nullptr;
608  // loop over sorted hits
609  m_hits.sort();
610  HitIt it = m_hits.begin();
611 
612  // +For Cosmics add
613  double timeOffsetEvent = 0.0;
614  double timeOffsetTotal = 0.0;
615 
616  // this offset emulates the timing spead of cosmics: +/- 1 BC
617  if (m_useTof == false && m_useOffSet2 == true) {
618  int inum = CLHEP::RandFlat::shootInt(rndmEngine, 0, 10);
619  if (inum == 8) {
620  timeOffsetEvent = -25.0;
621  } else if (inum == 9) {
622  timeOffsetEvent = 25.0;
623  }
624  ATH_MSG_DEBUG("Emulating timing spead of cosmics: +/- 1 BC. Adding " << timeOffsetEvent << " ns to time");
625  }
626  //-ForCosmics
627 
629  if (!mdtCalibConstants.isValid()) {
630  ATH_MSG_FATAL("Failed to retrieve set of calibration constants "<<mdtCalibConstants.fullKey());
631  return false;
632  }
633  for (; it != m_hits.end(); ++it) {
634  Identifier idDigit = it->id;
635  Identifier elementId = m_idHelperSvc->mdtIdHelper().elementID(idDigit);
637 
638  // Check if we are in a new chamber, if so get the DigitCollection
639  if (elementId != currentElementId) {
640  currentElementId = elementId;
641  digitCollection = getDigitCollection(elementId, collections);
642 
643  //+ForCosmics
644  // this offset emulates the time jitter of cosmic ray muons w.r.t LVL1 accept
645  if (m_useTof == false && m_useOffSet1 == true) {
646  timeOffsetTotal = timeOffsetEvent + CLHEP::RandFlat::shoot(rndmEngine, -12.5, 12.5);
647  ATH_MSG_DEBUG("Emulating time jitter of cosmic ray muons w.r.t LVL1 accept. Adding " << timeOffsetTotal << " ns to time");
648  }
649  //-ForCosmics
650  }
651  if (!digitCollection) {
652  ATH_MSG_ERROR("Trying to use nullptr digitCollection");
653  return false;
654  }
655 
656  float driftRadius = it->radius;
657  double driftTime = it->time;
658  double charge = it->adc;
659 
660  ATH_MSG_VERBOSE("New hit : driftTime " << driftTime << " adc " << charge);
661 
662  // check if we are in a new tube
663  if (idDigit != currentDigitId) {
664  currentDigitId = idDigit;
665  // set the deadTime
666  currentDeadTime = driftTime + charge + m_deadTime;
667  ATH_MSG_VERBOSE("New tube, setting dead time: " << currentDeadTime << " driftTime " << driftTime);
668  } else {
669  // check if tube is dead
670  if (driftTime > currentDeadTime) {
671  // tube produces a second hit, set the new deadtime
672  currentDeadTime = driftTime + charge + m_deadTime;
673  ATH_MSG_VERBOSE("Additional hit, setting dead time: " << currentDeadTime << " driftTime " << driftTime);
674  } else {
675  // tube is dead go to next hit
676  ATH_MSG_VERBOSE("Hit within dead time: " << currentDeadTime << " driftTime " << driftTime);
677  continue;
678  }
679  }
680 
681  const TimedHitPtr<MDTSimHit>& phit = *(it->simhit);
682  const MDTSimHit& hit(*phit);
683 
684  // check if the hits lies within the TDC time window
685  // subtrack the minimum Tof (= globalPosition().mag()/c) from the tof of the hit
686  double relativeTime = driftTime - minimumTof(idDigit, m_MuonGeoMgr);
687  bool insideMatch = insideMatchingWindow(relativeTime);
688  bool insideMask = insideMaskWindow(relativeTime);
689  if (insideMask && insideMatch) {
690  ATH_MSG_WARNING(" Digit in matching AND masking window, please check window definition: relative time " << relativeTime);
691  insideMask = false;
692  }
693  if (insideMatch || insideMask) {
694  // get calibration constants from DbTool
695  double t0 = m_offsetTDC;
696  const MuonCalib::MdtFullCalibData* data{mdtCalibConstants->getCalibData(idDigit, msgStream())};
697  if (data && data->tubeCalib) {
698  // extract calibration constants for single tube
699  const MuonCalib::MdtTubeCalibContainer::SingleTubeCalib* singleTubeData = data->tubeCalib->getCalib(idDigit);
700  if (singleTubeData) {
701  ATH_MSG_DEBUG("Extracted the following calibration constant for "<<m_idHelperSvc->toString(idDigit)<<" "<<singleTubeData->t0);
702  t0 = singleTubeData->t0 + m_t0ShiftTuning;
703  } else ATH_MSG_WARNING("No calibration data found, using t0=" << m_offsetTDC<<" "<<m_idHelperSvc->toString(idDigit));
704  } else {
705  ATH_MSG_WARNING("No calibration data found, using t0=" << m_offsetTDC<<" for "<<m_idHelperSvc->toString(idDigit));
706  }
707  bool isHPTDC = m_idHelperSvc->hasHPTDC(idDigit);
708  int tdc = digitizeTime(driftTime + t0 + timeOffsetTotal, isHPTDC, rndmEngine);
709  int adc = digitizeTime(it->adc, isHPTDC, rndmEngine);
710  ATH_MSG_DEBUG(" >> Digit Id = " << m_idHelperSvc->mdtIdHelper().show_to_string(idDigit) << " driftTime " << driftTime
711  << " driftRadius " << driftRadius << " TDC " << tdc << " ADC " << adc << " mask bit "
712  << insideMask);
713 
714  MdtDigit* newDigit = new MdtDigit(idDigit, tdc, adc, insideMask);
715  digitCollection->push_back(newDigit);
716 
717  ATH_MSG_VERBOSE(" createDigits() phit-" << &phit << " hit-" << hit.print() << " localZPos = " << hit.localPosition().z());
718 
719  // Do not store pile-up truth information
720  if (!m_includePileUpTruth && HepMC::ignoreTruthLink(phit->particleLink(), m_vetoPileUpTruthLinks)) { continue; }
721 
722  // Create the Deposit for MuonSimData
723  MuonSimData::Deposit deposit(HepMcParticleLink::getRedirectedLink(phit->particleLink(), phit.eventId(), ctx), // This link should now correctly resolve to the TruthEvent McEventCollection in the main StoreGateSvc.
724  MuonMCData(driftRadius, hit.localPosition().z()));
725 
726  // Record the SDO collection in StoreGate
727  std::vector<MuonSimData::Deposit> deposits;
728  deposits.push_back(deposit);
729  MuonSimData tempSDO(deposits, 0);
730  const Amg::Vector3D& tempLocPos = (*(it->simhit))->localPosition();
731  Amg::Vector3D p = geo->localToGlobalTransf(idDigit)*tempLocPos;
732  tempSDO.setPosition(p);
733  tempSDO.setTime(hitTime(phit));
734  sdoContainer->insert(std::make_pair(idDigit, tempSDO));
735 
736  } else {
737  ATH_MSG_DEBUG(" >> OUTSIDE TIME WINDOWS << "
738  << " Digit Id = " << m_idHelperSvc->toString(idDigit) << " driftTime " << driftTime
739  << " --> hit ignored");
740  }
741  } // for (; it != hits.end(); ++it)
742 
743  return true;
744 }

◆ digitizeTime()

int MdtDigitizationTool::digitizeTime ( double  time,
bool  isHPTDC,
CLHEP::HepRandomEngine *  rndmEngine 
) const
private

Definition at line 767 of file MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx.

767  {
768  int tdcCount{0};
769  double tmpCount = isHPTDC ? time / m_ns2TDCHPTDC : time / m_ns2TDCAMT;
770  tdcCount = CLHEP::RandGaussZiggurat::shoot(rndmEngine, tmpCount, m_resTDC);
771  if (tdcCount < 0 || tdcCount > 4096) { ATH_MSG_DEBUG(" Count outside TDC window: " << tdcCount); }
772  return tdcCount;
773 }

◆ doDigitization()

StatusCode MdtDigitizationTool::doDigitization ( const EventContext &  ctx,
Collections_t collections,
MuonSimDataCollection sdoContainer 
)
private

Definition at line 312 of file MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx.

313  {
314  // Set the RNGs to use for this event.
315  CLHEP::HepRandomEngine* rndmEngine = getRandomEngine("", ctx);
316  CLHEP::HepRandomEngine* twinRndmEngine = getRandomEngine("Twin", ctx);
317  CLHEP::HepRandomEngine* toolRndmEngine = getRandomEngine(m_digiTool->name(), ctx);
318 
319  // get the iterator infos for this DetEl
320  // iterate over hits and fill id-keyed drift time map
322 
323  // Perform null check on m_thpcMDT
324  if (!m_thpcMDT) {
325  ATH_MSG_ERROR("m_thpcMDT is null");
326  return StatusCode::FAILURE;
327  }
328 
329  while (m_thpcMDT->nextDetectorElement(i, e)) {
330  // Loop over the hits:
331  while (i != e) {
332  handleMDTSimHit(ctx, *i, twinRndmEngine, toolRndmEngine);
333  ++i;
334  }
335  }
336 
337  // loop over drift time map entries, convert to tdc value and construct/store the digit
338  createDigits(ctx, collections, sdoContainer, rndmEngine);
339 
340  // reset hits
341  m_hits.clear();
342 
343  // reset the pointer if it is not null
344  m_thpcMDT.reset();
345 
346  return StatusCode::SUCCESS;
347 }

◆ fillMaps()

void MdtDigitizationTool::fillMaps ( const MDTSimHit mdtHit,
const Identifier  digitId,
const double  driftR 
)
private

◆ filterPassed()

virtual bool PileUpToolBase::filterPassed ( ) const
inlineoverridevirtualinherited

dummy implementation of passing filter

Definition at line 49 of file PileUpToolBase.h.

49 { return m_filterPassed; }

◆ getDigitCollection()

MdtDigitCollection * MdtDigitizationTool::getDigitCollection ( Identifier  elementId,
Collections_t collections 
)
private

Definition at line 746 of file MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx.

746  {
747  IdContext mdtContext = m_idHelperSvc->mdtIdHelper().module_context();
748  IdentifierHash coll_hash;
749  if (m_idHelperSvc->mdtIdHelper().get_hash(elementId, coll_hash, &mdtContext)) {
750  ATH_MSG_ERROR("Unable to get MDT hash id from MDT Digit collection "
751  << "context begin_index = " << mdtContext.begin_index() << " context end_index = " << mdtContext.end_index()
752  << " the identifier is ");
753  elementId.show();
754  }
755 
756  if (coll_hash >= collections.size()) {
757  collections.resize (coll_hash+1);
758  }
759 
760  auto& coll = collections[coll_hash];
761  if (!coll) {
762  coll = std::make_unique<MdtDigitCollection>(elementId, coll_hash);
763  }
764  return coll.get();
765 }

◆ getNextEvent()

StatusCode MdtDigitizationTool::getNextEvent ( const EventContext &  ctx)
private

Definition at line 184 of file MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx.

184  {
185  ATH_MSG_DEBUG("MdtDigitizationTool::getNextEvent()");
186 
187  // get the container(s)
189 
190  // In case of single hits container just load the collection using read handles
191  if (!m_onlyUseContainerName) {
193  if (!hitCollection.isValid()) {
194  ATH_MSG_ERROR("Could not get MDTSimHitCollection container " << hitCollection.name() << " from store "
195  << hitCollection.store());
196  return StatusCode::FAILURE;
197  }
198 
199  // create a new hits collection
200  m_thpcMDT = std::make_unique<TimedHitCollection<MDTSimHit>>(1);
201  m_thpcMDT->insert(0, hitCollection.cptr());
202  ATH_MSG_DEBUG("MDTSimHitCollection found with " << hitCollection->size() << " hits");
203 
204  return StatusCode::SUCCESS;
205  }
206 
207  // this is a list<info<time_t, DataLink<MDTSimHitCollection> > >
208  TimedHitCollList hitCollList;
209 
210  if (!(m_mergeSvc->retrieveSubEvtsData(m_inputObjectName, hitCollList).isSuccess())) {
211  ATH_MSG_ERROR("Could not fill TimedHitCollList");
212  return StatusCode::FAILURE;
213  }
214  if (hitCollList.empty()) {
215  ATH_MSG_ERROR("TimedHitCollList has size 0");
216  return StatusCode::FAILURE;
217  } else {
218  ATH_MSG_DEBUG(hitCollList.size() << " MDTSimHitCollections with key " << m_inputObjectName << " found");
219  }
220 
221  // create a new hits collection
222  m_thpcMDT = std::make_unique<TimedHitCollection<MDTSimHit>>();
223 
224  // now merge all collections into one
225  TimedHitCollList::iterator iColl(hitCollList.begin());
226  TimedHitCollList::iterator endColl(hitCollList.end());
227  while (iColl != endColl) {
228  const MDTSimHitCollection* p_collection(iColl->second);
229  m_thpcMDT->insert(iColl->first, p_collection);
230  ATH_MSG_DEBUG("MDTSimHitCollection found with " << p_collection->size() << " hits");
231  ++iColl;
232  }
233  return StatusCode::SUCCESS;
234 }

◆ getRandomEngine()

CLHEP::HepRandomEngine * MdtDigitizationTool::getRandomEngine ( const std::string &  streamName,
const EventContext &  ctx 
) const
private

Definition at line 236 of file MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx.

236  {
237  ATHRNG::RNGWrapper* rngWrapper = m_rndmSvc->getEngine(this, streamName);
238  std::string rngName = name() + streamName;
239  rngWrapper->setSeed(rngName, ctx);
240  return rngWrapper->getEngine(ctx);
241 }

◆ handleMDTSimHit()

bool MdtDigitizationTool::handleMDTSimHit ( const EventContext &  ctx,
const TimedHitPtr< MDTSimHit > &  phit,
CLHEP::HepRandomEngine *  twinRndmEngine,
CLHEP::HepRandomEngine *  toolRndmEngine 
)
private

Definition at line 349 of file MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx.

351  {
352  const MDTSimHit& hit(*phit);
353  MDTSimHit newSimhit(*phit); // hit can be modified later
354 
355  double globalHitTime(hitTime(phit));
356 
357  // Important checks for hits (global time, position along tube, masked chambers etc..) DO NOT SET THIS CHECK TO FALSE IF YOU DON'T KNOW
358  // WHAT YOU'RE DOING !
359  if (m_checkMDTSimHits && !checkMDTSimHit(ctx, hit)) return false;
360 
361  const int id = hit.MDTid();
362  double driftRadius = hit.driftRadius();
363  ATH_MSG_DEBUG("Hit bunch time " << globalHitTime - hit.globalTime() << " tot " << globalHitTime << " tof " << hit.globalTime()
364  << " driftRadius " << driftRadius);
365 
366  std::string stationName = m_muonHelper->GetStationName(id);
369  int multilayer = m_muonHelper->GetMultiLayer(id);
370  int layer = m_muonHelper->GetLayer(id);
371  int tube = m_muonHelper->GetTube(id);
372 
373  // construct Atlas identifier from components
374  Identifier DigitId = m_idHelperSvc->mdtIdHelper().channelID(stationName, stationEta, stationPhi, multilayer, layer, tube);
375 
376  // get distance to readout
377  double distRO(0.);
378 
379  // find the detector element associated to the hit
381 
382  if (!element) {
383  ATH_MSG_ERROR("MuonGeoManager does not return valid element for given id!");
384  return false;
385  } else {
386  distRO = element->tubeFrame_localROPos(DigitId).z();
387  }
388 
389  if (m_useDeformations) {
390  newSimhit = applyDeformations(hit, element, DigitId);
391  driftRadius = newSimhit.driftRadius();
392  }
393 
394  // store local hit position + sign
395  GeoCorOut result = correctGeometricalWireSag(hit, DigitId, element);
396  if (m_useDeformations) { result = correctGeometricalWireSag(newSimhit, DigitId, element); }
397 
398  // correctly set sign of drift radius
399  driftRadius *= result.trackingSign;
400 
401  //+Implementation for RT_Relation_DB_Tool
402 
403  // total from the hit to the tube endplug
404  double distanceToRO = 0.;
405  if (distRO < 0. && hit.localPosition().z() > 0.) {
406  distanceToRO = -distRO + hit.localPosition().z();
407  }
408  else {
409  distanceToRO = distRO - hit.localPosition().z();
410  }
411  MdtDigiToolInput digiInput(std::abs(driftRadius), distanceToRO, 0., 0., 0., 0., DigitId);
412  double qcharge = 1.;
413  double qgamma = -9999.;
414 
415  if (m_DoQballCharge) {
416  // BSM particles need to be treated specially in digitization because in the default simulation the particle gamma and charge are set to the SM muon values
417  // For heavy or multi-charged BSM particles the qgamma and QE are required as inputs to obtain the correct MDT ADC counts
418  const HepMcParticleLink trkParticle = HepMcParticleLink::getRedirectedLink(hit.particleLink(),phit.eventId(), ctx); // This link should now correctly resolve to the TruthEvent McEventCollection in the main StoreGateSvc.
419  HepMC::ConstGenParticlePtr genParticle = trkParticle.cptr();
420  if (genParticle) {
421  if ( MC::isBSM(genParticle) ) {
422  const double QE = genParticle->momentum().e();
423  const double QM2 = genParticle->momentum().m2();
424  if (QM2 >= 0.) {
425  qgamma = QE / std::sqrt(QM2);
426  }
427  }
428  qcharge = MC::fractionalCharge(genParticle);
429  }
430  digiInput = MdtDigiToolInput{std::abs(driftRadius), distanceToRO, 0., 0., qcharge, qgamma, DigitId};
431  }
432 
433  // digitize input
434  MdtDigiToolOutput digiOutput(m_digiTool->digitize(ctx, digiInput, toolRndmEngine));
435  //-Implementation for RT_Relation_DB_Tool
436 
437  // simulate tube response, check if tube fired
438 
439  if (digiOutput.wasEfficient()) {
440  double driftTime = digiOutput.driftTime();
441  double adc = digiOutput.adc();
442 
443  ATH_MSG_VERBOSE("Tube efficient: driftTime " << driftTime << " adc value " << adc);
444 
445  if (m_useProp) {
446  double position_along_wire = hit.localPosition().z();
447  if (m_useDeformations) { position_along_wire = newSimhit.localPosition().z(); }
448 
449  // prop delay calculated with respect to the center of the tube
450  double sign(-1.);
451  if (distRO < 0.) sign = 1.;
452  double propagation_delay = sign * (1. / m_signalSpeed) * position_along_wire;
453  //------------------------------------------------------------
454  // calculate propagation delay, as readout side the side with
455  // negative local
456  // position along the wire is taken
457 
458  driftTime += propagation_delay; // add prop time
459  ATH_MSG_VERBOSE("Position along wire: " << position_along_wire << " propagation delay: " << propagation_delay
460  << " new driftTime " << driftTime);
461  }
462 
463  // add tof + bunch time
464  if (m_useTof) {
465  driftTime += globalHitTime;
466  ATH_MSG_VERBOSE("Time off Flight + bunch offset: " << globalHitTime << " new driftTime " << driftTime);
467  }
468  ATH_MSG_DEBUG(m_idHelperSvc->mdtIdHelper().show_to_string(DigitId)
469  << " Drift time computation " << driftTime << " radius " << driftRadius << " adc " << adc);
470 
471  // add hit to hit collection
472  m_hits.insert(mdt_hit_info(DigitId, driftTime, adc, driftRadius, &phit));
473  ATH_MSG_VERBOSE(" handleMDTSimHit() phit-" << &phit << " hit.localPosition().z() = " << hit.localPosition().z()
474  << " driftRadius = " << driftRadius);
475 
476  // + TWIN TUBES (A. Koutsman)
477  if (m_useTwin) {
478  // two chambers in ATLAS are installed with Twin Tubes; in detector coordinates BOL4A13 & BOL4C13; only INNER multilayer(=1) is
479  // with twin tubes
480  bool BOL4X13 = false;
481  // find these two chambers in identifier scheme coordinates as in MdtIdHelper
482  if (stationName == "BOL" && std::abs(stationEta) == 4 && stationPhi == 7 && multilayer == 1) { BOL4X13 = true; }
483 
484  // implement twin tubes digitizing either for all BOL (m_useAllBOLTwin = true) _OR_ only for two chambers really installed
485  if ((m_useAllBOLTwin && stationName == "BOL") || BOL4X13) {
486  int twin_tube = 0;
487  Identifier twin_DigitId{0};
488  double twin_sign_driftTime = 0.;
489  // twinpair is connected via a HV-jumper with a delay of ~6ns
490  constexpr double HV_delay = 6.;
491  double twin_tubeLength{0.}, twin_geo_pos_along_wire{0.},
492  twin_sign_pos_along_wire{0.}, twin_sign{-1.};
493 
494  // twinpair is interconnected with one tube in between, so modulo 4 they are identical
495  if (tube % 4 == 1 || tube % 4 == 2)
496  twin_tube = tube + 2;
497  else if (tube % 4 == 0 || tube % 4 == 3)
498  twin_tube = tube - 2;
499  // construct Atlas identifier from components for the twin
500  twin_DigitId = m_idHelperSvc->mdtIdHelper().channelID(stationName, stationEta, stationPhi, multilayer, layer, twin_tube);
501  // get twin tube length for propagation delay
502  twin_tubeLength = element->tubeLength(twin_DigitId);
503 
504  // prop delay calculated with respect to the center of the tube
505  if (distRO < 0.) twin_sign = 1.;
506  twin_geo_pos_along_wire = hit.localPosition().z();
507  if (m_useDeformations) { twin_geo_pos_along_wire = newSimhit.localPosition().z(); }
508  twin_sign_pos_along_wire = twin_sign * twin_geo_pos_along_wire;
509  double twin_propagation_delay = twin_sign * (1. / m_signalSpeed) * twin_geo_pos_along_wire;
510 
511  // calculate drift-time for twin from prompt driftTime + propagation delay + length of tube + hv-delay
512  // ( -2* for propagation_delay, cause prop_delay already in driftTime)
513  twin_sign_driftTime = driftTime + twin_tubeLength / m_signalSpeed - 2 * twin_propagation_delay + HV_delay;
514 
515  // smear the twin time by a gaussian with a stDev given by m_resTwin
516  double rand = CLHEP::RandGaussZiggurat::shoot(twinRndmEngine, twin_sign_driftTime, m_resTwin);
517  twin_sign_driftTime = rand;
518 
519  ATH_MSG_DEBUG(" TWIN TUBE stname " << stationName << " steta " << stationEta << " stphi " << stationPhi << " mLayer "
520  << multilayer << " layer " << layer << " tube " << tube
521  << " signed position along wire = " << twin_sign_pos_along_wire
522  << " propagation delay = " << twin_propagation_delay << " drifttime = " << driftTime
523  << " twin_driftTime = " << twin_sign_driftTime
524  << " TWIN time-difference = " << (twin_sign_driftTime - driftTime));
525 
526  // add twin-hit to hit collection
527  m_hits.insert(mdt_hit_info(twin_DigitId, twin_sign_driftTime, adc, driftRadius, &phit));
528 
529  } // end select all BOLs or installed chambers
530  } // end if(m_useTwin){
531  // - TWIN TUBES (A. Koutsman)
532  } else {
533  ATH_MSG_DEBUG(m_idHelperSvc->mdtIdHelper().show_to_string(DigitId) << " Tube not efficient "
534  << " radius " << driftRadius);
535  }
536 
537  return true;
538 }

◆ initialize()

StatusCode MdtDigitizationTool::initialize ( )
finaloverridevirtual

Initialize.

Reimplemented from PileUpToolBase.

Definition at line 67 of file MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx.

67  {
68  ATH_MSG_INFO("Configuration MdtDigitizationTool");
69  ATH_MSG_INFO("RndmSvc " << m_rndmSvc);
70  ATH_MSG_INFO("DigitizationTool " << m_digiTool);
71  ATH_MSG_INFO("OffsetTDC " << m_offsetTDC);
72  ATH_MSG_INFO("ns2TDCAMT " << m_ns2TDCAMT);
73  ATH_MSG_INFO("ns2TDCHPTDC " << m_ns2TDCHPTDC);
74  ATH_MSG_INFO("ResolutionTDC " << m_resTDC);
75  ATH_MSG_INFO("SignalSpeed " << m_signalSpeed);
76  ATH_MSG_INFO("InputObjectName " << m_inputObjectName);
77  ATH_MSG_INFO("OutputObjectName " << m_outputObjectKey.key());
78  ATH_MSG_INFO("OutputSDOName " << m_outputSDOKey.key());
79  ATH_MSG_INFO("UseAttenuation " << m_useAttenuation);
80  ATH_MSG_INFO("UseTof " << m_useTof);
81  ATH_MSG_INFO("UseProp " << m_useProp);
82  ATH_MSG_INFO("UseDeformations " << m_useDeformations);
83  ATH_MSG_INFO("UseTimeWindow " << m_useTimeWindow);
84  ATH_MSG_INFO("BunchCountOffset " << m_bunchCountOffset);
85  ATH_MSG_INFO("MatchingWindow " << m_matchingWindow);
86  ATH_MSG_INFO("MaskWindow " << m_maskWindow);
87  ATH_MSG_INFO("DeadTime " << m_deadTime);
88  ATH_MSG_INFO("DiscardEarlyHits " << m_DiscardEarlyHits);
89  ATH_MSG_INFO("CheckSimHits " << m_checkMDTSimHits);
90  ATH_MSG_INFO("UseTwin " << m_useTwin);
91  ATH_MSG_INFO("UseAllBOLTwin " << m_useAllBOLTwin);
92  ATH_MSG_INFO("ResolutionTwinTube " << m_resTwin);
93  ATH_MSG_INFO("DoQballCharge " << m_DoQballCharge);
94  if (!m_useTof) {
95  ATH_MSG_INFO("UseCosmicsOffSet1 " << m_useOffSet1);
96  ATH_MSG_INFO("UseCosmicsOffSet2 " << m_useOffSet2);
97  }
98  ATH_MSG_INFO("IncludePileUpTruth " << m_includePileUpTruth);
99  ATH_MSG_INFO("VetoPileUpTruthLinks " << m_vetoPileUpTruthLinks);
100 
101  // initialize transient detector store and MuonGeoModel OR MuonDetDescrManager
102  if (detStore()->contains<MuonGM::MuonDetectorManager>("Muon")) {
104  ATH_MSG_DEBUG("Retrieved MuonGeoModelDetectorManager from StoreGate");
105  }
106 
107  // initialize MuonIdHelperSvc
108  ATH_CHECK(m_idHelperSvc.retrieve());
109 
110  if (m_onlyUseContainerName) { ATH_CHECK(m_mergeSvc.retrieve()); }
111 
112  // check the input object name
113  if (m_hitsContainerKey.key().empty()) {
114  ATH_MSG_FATAL("Property InputObjectName not set !");
115  return StatusCode::FAILURE;
116  }
118  ATH_MSG_DEBUG("Input objects in container : '" << m_inputObjectName << "'");
119 
120  // Initialize ReadHandleKey
121  ATH_CHECK(m_hitsContainerKey.initialize());
123 
124  // initialize the output WriteHandleKeys
126  ATH_MSG_VERBOSE("Initialized WriteHandleKey: " << m_outputObjectKey);
128  ATH_MSG_VERBOSE("Initialized WriteHandleKey: " << m_outputSDOKey);
129  ATH_MSG_DEBUG("Output Digits: '" << m_outputObjectKey.key() << "'");
130 
131  // simulation identifier helper
132  m_muonHelper = MdtHitIdHelper::GetHelper(m_idHelperSvc->mdtIdHelper().tubeMax());
133 
134  // get the r->t conversion tool
135  ATH_CHECK(m_digiTool.retrieve());
136  ATH_MSG_DEBUG("Retrieved digitization tool!" << m_digiTool);
137 
138  ATH_CHECK(m_rndmSvc.retrieve());
140  return StatusCode::SUCCESS;
141 }

◆ insideMaskWindow()

bool MdtDigitizationTool::insideMaskWindow ( double  time) const
private

Definition at line 801 of file MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx.

801  {
802  if (m_useTimeWindow)
803  if (time < static_cast<double>(m_bunchCountOffset) - m_maskWindow || time > m_bunchCountOffset) {
804  ATH_MSG_VERBOSE("hit outside MaskWindow " << time);
805  return false;
806  }
807  return true;
808 }

◆ insideMatchingWindow()

bool MdtDigitizationTool::insideMatchingWindow ( double  time) const
private

Definition at line 792 of file MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx.

792  {
793  if (m_useTimeWindow)
794  if (time < m_bunchCountOffset || time > static_cast<double>(m_bunchCountOffset) + m_matchingWindow) {
795  ATH_MSG_VERBOSE("hit outside MatchingWindow " << time);
796  return false;
797  }
798  return true;
799 }

◆ mergeEvent()

StatusCode MdtDigitizationTool::mergeEvent ( const EventContext &  ctx)
finaloverride

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

Not (necessarily) able to access SubEvents

Definition at line 243 of file MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx.

243  {
244  ATH_MSG_DEBUG("MdtDigitizationTool::in mergeEvent()");
245 
246  // create and record the Digit container in StoreGate
248  ATH_CHECK(digitContainer.record(std::make_unique<MdtDigitContainer>(m_idHelperSvc->mdtIdHelper().module_hash_max())));
249  ATH_MSG_DEBUG("Recorded MdtDigitContainer called " << digitContainer.name() << " in store " << digitContainer.store());
250 
251  // create and record the SDO container in StoreGate
253  ATH_CHECK(sdoContainer.record(std::make_unique<MuonSimDataCollection>()));
254  ATH_MSG_DEBUG("Recorded MuonSimDataCollection called " << sdoContainer.name() << " in store " << sdoContainer.store());
255 
256  Collections_t collections;
257  StatusCode status = doDigitization(ctx, collections, sdoContainer.ptr());
258  if (status.isFailure()) { ATH_MSG_ERROR("doDigitization Failed"); }
259 
260  for (size_t coll_hash = 0; coll_hash < collections.size(); ++coll_hash) {
261  if (collections[coll_hash]) {
262  ATH_CHECK( digitContainer->addCollection (collections[coll_hash].release(), coll_hash) );
263  }
264  }
265 
266  // Clean-up
269  while (MDTHitColl != MDTHitCollEnd) {
270  delete (*MDTHitColl);
271  ++MDTHitColl;
272  }
273  m_MDTHitCollList.clear();
274 
275  return status;
276 }

◆ minimumTof()

double MdtDigitizationTool::minimumTof ( Identifier  DigitId,
const MuonGM::MuonDetectorManager detMgr 
) const
private

Definition at line 775 of file MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx.

775  {
776  if (!m_useTof) return 0.;
777 
778  // get distance to vertex for tof correction before applying the time window
779  double distanceToVertex(0.);
780  const MuonGM::MdtReadoutElement* element = detMgr->getMdtReadoutElement(DigitId);
781 
782  if (!element) {
783  ATH_MSG_ERROR("MuonGeoManager does not return valid element for given id!");
784  } else {
785  distanceToVertex = element->tubePos(DigitId).mag();
786  }
787  // what about this? does this also need to be 1/m_signalSpeed ?
788  ATH_MSG_DEBUG("minimumTof calculated " << distanceToVertex * s_inv_c_light);
789  return distanceToVertex * s_inv_c_light;
790 }

◆ prepareEvent()

StatusCode MdtDigitizationTool::prepareEvent ( const EventContext &  ctx,
const unsigned int  nInputEvents 
)
finaloverride

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

Not able to access SubEvents

Definition at line 143 of file MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx.

143  {
144  ATH_MSG_DEBUG("MdtDigitizationTool::prepareEvent() called for " << nInputEvents << " input events");
145 
146  m_MDTHitCollList.clear();
147  m_thpcMDT = std::make_unique<TimedHitCollection<MDTSimHit>>();
148 
149  return StatusCode::SUCCESS;
150 }

◆ processAllSubEvents() [1/2]

StatusCode MdtDigitizationTool::processAllSubEvents ( const EventContext &  ctx)
finaloverridevirtual

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

Reimplemented from PileUpToolBase.

Definition at line 278 of file MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx.

278  {
279  ATH_MSG_DEBUG("MdtDigitizationTool::processAllSubEvents()");
280 
281  // create and record the Digit container in StoreGate
283  ATH_CHECK(digitContainer.record(std::make_unique<MdtDigitContainer>(m_idHelperSvc->mdtIdHelper().module_hash_max())));
284  ATH_MSG_DEBUG("Recorded MdtDigitContainer called " << digitContainer.name() << " in store " << digitContainer.store());
285 
286  // create and record the SDO container in StoreGate
288  ATH_CHECK(sdoContainer.record(std::make_unique<MuonSimDataCollection>()));
289  ATH_MSG_DEBUG("Recorded MuonSimDataCollection called " << sdoContainer.name() << " in store " << sdoContainer.store());
290 
291  StatusCode status = StatusCode::SUCCESS;
292  if (!m_thpcMDT) {
293  status = getNextEvent(ctx);
294  if (StatusCode::FAILURE == status) {
295  ATH_MSG_INFO("There are no MDT hits in this event");
296  return status;
297  }
298  }
299 
300  Collections_t collections;
301  ATH_CHECK(doDigitization(ctx, collections, sdoContainer.ptr()));
302 
303  for (size_t coll_hash = 0; coll_hash < collections.size(); ++coll_hash) {
304  if (collections[coll_hash]) {
305  ATH_CHECK( digitContainer->addCollection (collections[coll_hash].release(), coll_hash) );
306  }
307  }
308 
309  return status;
310 }

◆ processAllSubEvents() [2/2]

virtual StatusCode IPileUpTool::processAllSubEvents
inherited

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

◆ processBunchXing()

StatusCode MdtDigitizationTool::processBunchXing ( int  bunchXing,
SubEventIterator  bSubEvents,
SubEventIterator  eSubEvents 
)
finaloverridevirtual

When being run from PileUpToolsAlgs, this method is called for each active bunch-crossing to process current SubEvents bunchXing is in ns.

Reimplemented from PileUpToolBase.

Definition at line 152 of file MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx.

152  {
153  ATH_MSG_DEBUG("MdtDigitizationTool::processBunchXing() " << bunchXing);
154 
156  TimedHitCollList hitCollList;
157 
158  if (!(m_mergeSvc->retrieveSubSetEvtData(m_inputObjectName, hitCollList, bunchXing, bSubEvents, eSubEvents).isSuccess()) &&
159  hitCollList.empty()) {
160  ATH_MSG_ERROR("Could not fill TimedHitCollList");
161  return StatusCode::FAILURE;
162  } else {
163  ATH_MSG_VERBOSE(hitCollList.size() << " MDTSimHitCollection with key " << m_inputObjectName << " found");
164  }
165 
166  TimedHitCollList::iterator iColl(hitCollList.begin());
167  TimedHitCollList::iterator endColl(hitCollList.end());
168 
169  // Iterating over the list of collections
170  for (; iColl != endColl; ++iColl) {
171  MDTSimHitCollection* hitCollPtr = new MDTSimHitCollection(*iColl->second);
172  PileUpTimeEventIndex timeIndex(iColl->first);
173 
174  ATH_MSG_DEBUG("MDTSimHitCollection found with " << hitCollPtr->size() << " hits");
175  ATH_MSG_VERBOSE("time index info. time: " << timeIndex.time() << " index: " << timeIndex.index() << " type: " << timeIndex.type());
176 
177  m_thpcMDT->insert(timeIndex, hitCollPtr);
178  m_MDTHitCollList.push_back(hitCollPtr);
179  }
180 
181  return StatusCode::SUCCESS;
182 }

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

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

Member Data Documentation

◆ m_bunchCountOffset

Gaudi::Property<double> MdtDigitizationTool::m_bunchCountOffset {this, "BunchCountOffset", -200., "Bunch crossing offset"}
private

◆ m_calibDbKey

SG::ReadCondHandleKey<MuonCalib::MdtCalibDataContainer> MdtDigitizationTool::m_calibDbKey
protected
Initial value:
{this, "CalibDataKey", "MdtCalibConstants",
"Conditions object containing the calibrations"}

Definition at line 215 of file MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h.

◆ m_checkMDTSimHits

Gaudi::Property<bool> MdtDigitizationTool::m_checkMDTSimHits {this, "CheckSimHits", true, "Control on the hit validity"}
private

◆ m_deadTime

Gaudi::Property<double> MdtDigitizationTool::m_deadTime {this, "DeadTime", 700., "MDT drift tube dead time"}
private

◆ m_digiTool

ToolHandle<IMDT_DigitizationTool> MdtDigitizationTool::m_digiTool
private
Initial value:
{this, "DigitizationTool", "MDT_Response_DigiTool",
"Tool which handle the digitization process"}

Definition at line 144 of file MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h.

◆ m_DiscardEarlyHits

Gaudi::Property<bool> MdtDigitizationTool::m_DiscardEarlyHits {this, "DiscardEarlyHits", true, ""}
private

◆ m_DoQballCharge

Gaudi::Property<bool> MdtDigitizationTool::m_DoQballCharge {this, "DoQballCharge", false, "dEdx for Qballs with account of electric charge"}
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_hits

MDT_SortedHitVector MdtDigitizationTool::m_hits
private

◆ m_hitsContainerKey

SG::ReadHandleKey<MDTSimHitCollection> MdtDigitizationTool::m_hitsContainerKey {this, "InputObjectName", "MDT_Hits", ""}
protected

◆ m_idHelperSvc

ServiceHandle<Muon::IMuonIdHelperSvc> MdtDigitizationTool::m_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"}
private

◆ m_includePileUpTruth

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

◆ m_inputObjectName

std::string MdtDigitizationTool::m_inputObjectName {""}
protected

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

Gaudi::Property<double> MdtDigitizationTool::m_maskWindow {this, "MaskWindow", 250., "Masked window"}
private

◆ m_matchingWindow

Gaudi::Property<double> MdtDigitizationTool::m_matchingWindow {this, "MatchingWindow", 1000., "Matching window"}
private

◆ m_MDTHitCollList

std::vector<MDTSimHitCollection*> MdtDigitizationTool::m_MDTHitCollList
private

◆ m_mergeSvc

ServiceHandle<PileUpMergeSvc> MdtDigitizationTool::m_mergeSvc {this, "PileUpMergeSvc", "PileUpMergeSvc", ""}
protected

◆ m_MuonGeoMgr

const MuonGM::MuonDetectorManager* MdtDigitizationTool::m_MuonGeoMgr {}
private

◆ m_muonHelper

const MdtHitIdHelper* MdtDigitizationTool::m_muonHelper {}
private

◆ m_ns2TDCAMT

Gaudi::Property<double> MdtDigitizationTool::m_ns2TDCAMT {this, "ns2TDCAMT", 0.78125, "Conversion factor TDC/ns for AMT chips"}
private

◆ m_ns2TDCHPTDC

Gaudi::Property<double> MdtDigitizationTool::m_ns2TDCHPTDC {this, "ns2TDCHPTDC", 0.1953125, "Conversion factor TDC/ns for HPTDC chips"}
private

◆ m_offsetTDC

Gaudi::Property<double> MdtDigitizationTool::m_offsetTDC {this, "OffsetTDC", 800., "TDC offset used if no calibration data is found"}
private

◆ m_onlyUseContainerName

BooleanProperty MdtDigitizationTool::m_onlyUseContainerName
protected
Initial value:
{this, "OnlyUseContainerName", true,
"Don't use the ReadHandleKey directly. Just extract the container name from it."}

Definition at line 204 of file MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h.

◆ m_outputObjectKey

SG::WriteHandleKey<MdtDigitContainer> MdtDigitizationTool::m_outputObjectKey
protected
Initial value:
{this, "OutputObjectName", "MDT_DIGITS",
"WriteHandleKey for Output MdtDigitContainer"}

Definition at line 208 of file MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h.

◆ m_outputSDOKey

SG::WriteHandleKey<MuonSimDataCollection> MdtDigitizationTool::m_outputSDOKey
protected
Initial value:
{this, "OutputSDOName", "MDT_SDO",
"WriteHandleKey for Output MuonSimDataCollection"}

Definition at line 210 of file MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h.

◆ m_readKey

SG::ReadCondHandleKey<MdtCondDbData> MdtDigitizationTool::m_readKey {this, "ReadKey", "MdtCondDbData", "Key of MdtCondDbData"}
protected

◆ m_resTDC

Gaudi::Property<double> MdtDigitizationTool::m_resTDC {this, "ResolutionTDC", 0.5, "TDC resolution"}
private

◆ m_resTwin

Gaudi::Property<double> MdtDigitizationTool::m_resTwin {this, "ResolutionTwinTube", 1.05, "Twin Tube resolution"}
private

◆ m_rndmSvc

ServiceHandle<IAthRNGSvc> MdtDigitizationTool::m_rndmSvc {this, "RndmSvc", "AthRNGSvc", ""}
protected

◆ m_signalSpeed

Gaudi::Property<double> MdtDigitizationTool::m_signalSpeed {this, "SignalSpeed", 0.85*Gaudi::Units::c_light}
private

◆ m_t0ShiftTuning

Gaudi::Property<double> MdtDigitizationTool::m_t0ShiftTuning {this,"TunedT0Shift",-17.,"Fine tuned t0 shift value in ns"}
private

◆ m_thpcMDT

std::unique_ptr<TimedHitCollection<MDTSimHit> > MdtDigitizationTool::m_thpcMDT {}
private

◆ m_useAllBOLTwin

Gaudi::Property<bool> MdtDigitizationTool::m_useAllBOLTwin {this, "UseAllBOLTwin", false, ""}
private

◆ m_useAttenuation

Gaudi::Property<bool> MdtDigitizationTool::m_useAttenuation {this, "UseAttenuation", false, ""}
private

◆ m_useDeformations

Gaudi::Property<bool> MdtDigitizationTool::m_useDeformations {this, "UseDeformations", false, ""}
private

◆ m_useOffSet1

Gaudi::Property<bool> MdtDigitizationTool::m_useOffSet1 {this, "UseOffSet1", true, ""}
private

◆ m_useOffSet2

Gaudi::Property<bool> MdtDigitizationTool::m_useOffSet2 {this, "UseOffSet2", true, ""}
private

◆ m_useProp

Gaudi::Property<bool> MdtDigitizationTool::m_useProp {this, "UseProp", true, ""}
private

◆ m_useTimeWindow

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

◆ m_useTof

Gaudi::Property<bool> MdtDigitizationTool::m_useTof {this, "UseTof", true, "Option for the tof calculation"}
private

◆ m_useTwin

Gaudi::Property<bool> MdtDigitizationTool::m_useTwin {this, "UseTwin", false, ""}
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.


The documentation for this class was generated from the following files:
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
MdtHitIdHelper::GetMultiLayer
int GetMultiLayer(const int &hid) const
Definition: MdtHitIdHelper.cxx:79
MuonCalib::MdtTubeCalibContainer::SingleTubeCalib::t0
float t0
< relative t0 in chamber (ns)
Definition: MdtTubeCalibContainer.h:21
AllowedVariables::e
e
Definition: AsgElectronSelectorTool.cxx:37
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
MdtDigitizationTool::m_bunchCountOffset
Gaudi::Property< double > m_bunchCountOffset
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h:170
MdtDigitizationTool::m_ns2TDCAMT
Gaudi::Property< double > m_ns2TDCAMT
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h:152
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
Muon::nsw::STGTPSegments::moduleIDBits::stationPhi
constexpr uint8_t stationPhi
station Phi 1 to 8
Definition: NSWSTGTPDecodeBitmaps.h:161
MdtDigiToolInput
Definition: MdtDigiToolInput.h:26
MuonSimData::Deposit
std::pair< HepMcParticleLink, MuonMCData > Deposit
Definition: MuonSimData.h:66
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
MdtDigitizationTool::getRandomEngine
CLHEP::HepRandomEngine * getRandomEngine(const std::string &streamName, const EventContext &ctx) const
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx:236
get_generator_info.result
result
Definition: get_generator_info.py:21
MuonGM::MdtReadoutElement::tubeLength
double tubeLength(const int tubeLayer, const int tube) const
MdtDigitizationTool::insideMaskWindow
bool insideMaskWindow(double time) const
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx:801
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
PileUpToolBase::m_filterPassed
bool m_filterPassed
Definition: PileUpToolBase.h:60
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
MDTSimHit::localPosition
const Amg::Vector3D & localPosition() const
Definition: MDTSimHit.h:54
MuonGM::MdtReadoutElement::innerTubeRadius
double innerTubeRadius() const
Returns the inner tube radius excluding the aluminium walls.
MdtDigitizationTool::m_outputSDOKey
SG::WriteHandleKey< MuonSimDataCollection > m_outputSDOKey
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h:210
isBSM
bool isBSM(const T &p)
APID: graviton and all Higgs extensions are BSM.
Definition: AtlasPID.h:841
dumpTgcDigiDeadChambers.stationName
dictionary stationName
Definition: dumpTgcDigiDeadChambers.py:30
MdtDigitizationTool::m_t0ShiftTuning
Gaudi::Property< double > m_t0ShiftTuning
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h:155
Amg::Vector2D
Eigen::Matrix< double, 2, 1 > Vector2D
Definition: GeoPrimitives.h:48
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:67
MdtDigit
Definition: MdtDigit.h:19
MDTSimHit
Definition: MDTSimHit.h:21
MdtDigitizationTool::m_useAllBOLTwin
Gaudi::Property< bool > m_useAllBOLTwin
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h:165
MdtDigitizationTool::m_maskWindow
Gaudi::Property< double > m_maskWindow
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h:172
MdtDigitizationTool::m_signalSpeed
Gaudi::Property< double > m_signalSpeed
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h:150
IdContext::end_index
size_type end_index() const
Definition: IdContext.h:46
ALFA_EventTPCnv_Dict::t0
std::vector< ALFA_RawData_p1 > t0
Definition: ALFA_EventTPCnvDict.h:42
AtlasHitsVector
Definition: AtlasHitsVector.h:32
skel.it
it
Definition: skel.GENtoEVGEN.py:407
MDTSimHitCollection
AtlasHitsVector< MDTSimHit > MDTSimHitCollection
Definition: MDTSimHitCollection.h:14
MDT_SortedHitVector::sort
void sort()
Definition: MDT_SortedHitVector.h:44
MuonGM::MdtReadoutElement::nodeform_localToGlobalTransf
Amg::Transform3D nodeform_localToGlobalTransf(const Identifier &id) const
MdtDigitizationTool::m_digiTool
ToolHandle< IMDT_DigitizationTool > m_digiTool
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h:144
MdtHitIdHelper::GetZSector
int GetZSector(const int &hid) const
Definition: MdtHitIdHelper.cxx:73
TimedHitPtr< MDTSimHit >
Trk::locR
@ locR
Definition: ParamDefs.h:44
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
MdtDigitizationTool::minimumTof
double minimumTof(Identifier DigitId, const MuonGM::MuonDetectorManager *detMgr) const
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx:775
MdtHitIdHelper::GetHelper
static const MdtHitIdHelper * GetHelper(unsigned int nTubes=78)
Definition: MdtHitIdHelper.cxx:24
PileUpToolBase::m_lastXing
Gaudi::Property< int > m_lastXing
Definition: PileUpToolBase.h:56
MdtDigitizationTool::m_matchingWindow
Gaudi::Property< double > m_matchingWindow
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h:171
HepMC::ignoreTruthLink
bool ignoreTruthLink(const T &p, bool vetoPileUp)
Helper function for SDO creation in PileUpTools.
Definition: MagicNumbers.h:344
SG::VarHandleKey::empty
bool empty() const
Test if the key is blank.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:150
MdtDigitizationTool::m_deadTime
Gaudi::Property< double > m_deadTime
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h:173
MdtDigitizationTool::applyDeformations
static MDTSimHit applyDeformations(const MDTSimHit &, const MuonGM::MdtReadoutElement *, const Identifier &)
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx:811
MuonCalib::MdtFullCalibData
class which holds the full set of calibration constants for a given tube
Definition: MdtFullCalibData.h:15
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
PileUpToolBase::m_vetoPileUpTruthLinks
Gaudi::Property< int > m_vetoPileUpTruthLinks
Definition: PileUpToolBase.h:58
MdtDigitizationTool::m_useProp
Gaudi::Property< bool > m_useProp
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h:161
MdtDigitizationTool::getNextEvent
StatusCode getNextEvent(const EventContext &ctx)
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx:184
MdtDigiToolOutput
Definition: MdtDigiToolOutput.h:19
PileUpMergeSvc::TimedList::type
std::list< value_t > type
type of the collection of timed data object
Definition: PileUpMergeSvc.h:73
MuonGM::MdtReadoutElement::globalToLocalTransf
Amg::Transform3D globalToLocalTransf(const int tubeLayer, const int tube) const
Definition: MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx:400
MdtDigitizationTool::m_useTof
Gaudi::Property< bool > m_useTof
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h:159
Trk::StraightLineSurface::globalToLocal
virtual bool globalToLocal(const Amg::Vector3D &glob, const Amg::Vector3D &mom, Amg::Vector2D &loc) const override final
Specified for StraightLineSurface: GlobalToLocal method without dynamic memory allocation This method...
Definition: StraightLineSurface.cxx:164
fractionalCharge
double fractionalCharge(const T &p)
Definition: AtlasPID.h:990
MdtHitIdHelper::GetPhiSector
int GetPhiSector(const int &hid) const
Definition: MdtHitIdHelper.cxx:68
MdtDigitizationTool::m_checkMDTSimHits
Gaudi::Property< bool > m_checkMDTSimHits
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h:158
MdtDigitizationTool::m_offsetTDC
Gaudi::Property< double > m_offsetTDC
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h:149
MdtHitIdHelper::GetStationName
std::string GetStationName(const int &hid) const
Definition: MdtHitIdHelper.cxx:57
IdContext::begin_index
size_type begin_index() const
Definition: IdContext.h:45
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:209
MdtDigitizationTool::m_DoQballCharge
Gaudi::Property< bool > m_DoQballCharge
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h:185
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
MdtDigitizationTool::insideMatchingWindow
bool insideMatchingWindow(double time) const
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx:792
TRT::Hit::driftTime
@ driftTime
Definition: HitInfo.h:43
MdtDigitizationTool::m_MDTHitCollList
std::vector< MDTSimHitCollection * > m_MDTHitCollList
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h:146
MuonGM::MuonDetectorManager::getMdtReadoutElement
const MdtReadoutElement * getMdtReadoutElement(const Identifier &id) const
access via extended identifier (requires unpacking)
Definition: MuonDetDescr/MuonReadoutGeometry/src/MuonDetectorManager.cxx:206
MdtDigitizationTool::m_inputObjectName
std::string m_inputObjectName
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h:207
LArG4FSStartPointFilter.rand
rand
Definition: LArG4FSStartPointFilter.py:80
MuonGM::MdtReadoutElement
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h:51
MdtDigitizationTool::m_resTDC
Gaudi::Property< double > m_resTDC
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h:154
lumiFormat.i
int i
Definition: lumiFormat.py:85
MdtDigitizationTool::m_calibDbKey
SG::ReadCondHandleKey< MuonCalib::MdtCalibDataContainer > m_calibDbKey
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h:215
MdtDigitizationTool::m_MuonGeoMgr
const MuonGM::MuonDetectorManager * m_MuonGeoMgr
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h:142
MdtDigitizationTool::m_resTwin
Gaudi::Property< double > m_resTwin
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h:166
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
Trk::driftRadius
@ driftRadius
trt, straws
Definition: ParamDefs.h:53
MdtDigitizationTool::m_useOffSet2
Gaudi::Property< bool > m_useOffSet2
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h:178
MdtDigitizationTool::m_outputObjectKey
SG::WriteHandleKey< MdtDigitContainer > m_outputObjectKey
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h:208
MdtDigitizationTool::m_mergeSvc
ServiceHandle< PileUpMergeSvc > m_mergeSvc
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h:203
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
MdtDigitizationTool::m_useTimeWindow
Gaudi::Property< bool > m_useTimeWindow
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h:169
sign
int sign(int a)
Definition: TRT_StrawNeighbourSvc.h:108
MdtDigitizationTool::m_useAttenuation
Gaudi::Property< bool > m_useAttenuation
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h:160
MdtDigitizationTool::m_useDeformations
Gaudi::Property< bool > m_useDeformations
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h:182
PileUpToolBase::PileUpToolBase
PileUpToolBase(const std::string &type, const std::string &name, const IInterface *parent)
Definition: PileUpToolBase.cxx:7
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
MdtDigitizationTool::m_thpcMDT
std::unique_ptr< TimedHitCollection< MDTSimHit > > m_thpcMDT
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h:188
MdtHitIdHelper::GetLayer
int GetLayer(const int &hid) const
Definition: MdtHitIdHelper.cxx:84
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
MdtDigitizationTool::m_readKey
SG::ReadCondHandleKey< MdtCondDbData > m_readKey
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h:218
MuonGM::MdtReadoutElement::localToGlobalTransf
const Amg::Transform3D & localToGlobalTransf(const Identifier &id) const
MdtDigitizationTool::correctGeometricalWireSag
GeoCorOut correctGeometricalWireSag(const MDTSimHit &hit, const Identifier &id, const MuonGM::MdtReadoutElement *element) const
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx:823
Identifier::show
void show() const
Print out in hex form.
Definition: Identifier.cxx:30
MDTSimHit::globalTime
double globalTime() const
Definition: MDTSimHit.h:48
mdt_hit_info
Definition: MDT_SortedHitVector.h:9
MDTSimHit::MDTid
HitID MDTid() const
Definition: MDTSimHit.h:62
python.PyKernel.detStore
detStore
Definition: PyKernel.py:41
HepMC::ConstGenParticlePtr
const GenParticle * ConstGenParticlePtr
Definition: GenParticle.h:38
MdtDigitizationTool::m_includePileUpTruth
Gaudi::Property< bool > m_includePileUpTruth
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h:191
WriteHiveWithMetaData.streamName
string streamName
Definition: WriteHiveWithMetaData.py:23
MdtDigitizationTool::m_onlyUseContainerName
BooleanProperty m_onlyUseContainerName
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h:204
MDTSimHit::driftRadius
double driftRadius() const
Definition: MDTSimHit.h:51
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
ATHRNG::RNGWrapper
A wrapper class for event-slot-local random engines.
Definition: RNGWrapper.h:56
MdtDigitCollection
Definition: MdtDigitCollection.h:18
MdtDigitizationTool::digitizeTime
int digitizeTime(double time, bool isHPTDC, CLHEP::HepRandomEngine *rndmEngine) const
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx:767
charge
double charge(const T &p)
Definition: AtlasPID.h:991
MdtDigitizationTool::m_hitsContainerKey
SG::ReadHandleKey< MDTSimHitCollection > m_hitsContainerKey
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h:206
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)
MuonSimData
Definition: MuonSimData.h:62
HitIt
HitVector::iterator HitIt
Definition: MDT_SortedHitVector.h:32
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
ATHRNG::RNGWrapper::getEngine
CLHEP::HepRandomEngine * getEngine(const EventContext &ctx) const
Retrieve the random engine corresponding to the provided EventContext.
Definition: RNGWrapper.h:134
MdtDigitizationTool::checkMDTSimHit
bool checkMDTSimHit(const EventContext &ctx, const MDTSimHit &hit) const
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx:540
MdtDigitizationTool::m_useOffSet1
Gaudi::Property< bool > m_useOffSet1
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h:177
MdtDigitizationTool::doDigitization
StatusCode doDigitization(const EventContext &ctx, Collections_t &collections, MuonSimDataCollection *sdoContainer)
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx:312
MdtDigitizationTool::m_useTwin
Gaudi::Property< bool > m_useTwin
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h:164
MdtDigitizationTool::m_hits
MDT_SortedHitVector m_hits
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h:135
MuonGM::MdtReadoutElement::tubeFrame_localROPos
Amg::Vector3D tubeFrame_localROPos(const int tubelayer, const int tube) const
Definition: MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx:282
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:73
MdtDigitizationTool::m_DiscardEarlyHits
Gaudi::Property< bool > m_DiscardEarlyHits
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h:174
MdtDigitizationTool::handleMDTSimHit
bool handleMDTSimHit(const EventContext &ctx, const TimedHitPtr< MDTSimHit > &phit, CLHEP::HepRandomEngine *twinRndmEngine, CLHEP::HepRandomEngine *toolRndmEngine)
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx:349
MuonGM::MdtReadoutElement::tubePos
Amg::Vector3D tubePos(const Identifier &id) const
Returns the global position of the given tube.
MdtDigitizationTool::m_ns2TDCHPTDC
Gaudi::Property< double > m_ns2TDCHPTDC
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h:153
CaloSwCorrections.time
def time(flags, cells_name, *args, **kw)
Definition: CaloSwCorrections.py:242
ReadFloatFromCool.adc
adc
Definition: ReadFloatFromCool.py:48
TimedHitPtr::eventId
unsigned short eventId() const
the index of the component event in PileUpEventInfo.
Definition: TimedHitPtr.h:47
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
LArCellConditions.geo
bool geo
Definition: LArCellConditions.py:46
MdtDigitizationTool::createDigits
bool createDigits(const EventContext &ctx, Collections_t &collections, MuonSimDataCollection *sdoContainer, CLHEP::HepRandomEngine *rndmEngine)
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx:601
PileUpToolBase::m_firstXing
Gaudi::Property< int > m_firstXing
Definition: PileUpToolBase.h:54
MdtDigitizationTool::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h:137
MuonGM::MdtReadoutElement::surface
virtual const Trk::Surface & surface() const override final
Return surface associated with this detector element.
Definition: MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx:885
MdtHitIdHelper::GetTube
int GetTube(const int &hid) const
Definition: MdtHitIdHelper.cxx:89
AtlasHitsVector::size
size_type size() const
Definition: AtlasHitsVector.h:142
MuonCalib::MdtTubeCalibContainer::SingleTubeCalib
Definition: MdtTubeCalibContainer.h:19
merge.status
status
Definition: merge.py:16
MdtDigitizationTool::m_rndmSvc
ServiceHandle< IAthRNGSvc > m_rndmSvc
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h:213
MDT_SortedHitVector::insert
void insert(const mdt_hit_info &hit)
Definition: MDT_SortedHitVector.h:48
hitTime
float hitTime(const AFP_SIDSimHit &hit)
Definition: AFP_SIDSimHit.h:39
Muon::nsw::STGTPSegments::moduleIDBits::stationEta
constexpr uint8_t stationEta
1 to 3
Definition: NSWSTGTPDecodeBitmaps.h:159
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
PileUpTimeEventIndex
a struct encapsulating the identifier of a pile-up event
Definition: PileUpTimeEventIndex.h:12
IdContext
This class saves the "context" of an expanded identifier (ExpandedIdentifier) for compact or hash ver...
Definition: IdContext.h:26
TimedHitCollection
Definition: TimedHitCollection.h:15
MdtDigitizationTool::m_muonHelper
const MdtHitIdHelper * m_muonHelper
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h:138
calibdata.tube
tube
Definition: calibdata.py:30
MdtDigitizationTool::getDigitCollection
MdtDigitCollection * getDigitCollection(Identifier elementId, Collections_t &collections)
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx:746
Trk::StraightLineSurface
Definition: StraightLineSurface.h:51
MuonMCData
Definition: MuonSimData.h:42
generate::Zero
void Zero(TH1D *hin)
Definition: generate.cxx:32
MdtDigitizationTool::Collections_t
std::vector< std::unique_ptr< MdtDigitCollection > > Collections_t
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.h:119
Identifier
Definition: IdentifierFieldParser.cxx:14