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 801 of file MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx.

802  {
803  // make the deformation
804  Amg::Vector3D hitAtGlobalFrame = element->nodeform_localToGlobalTransf(DigitId) * hit.localPosition();
805  Amg::Vector3D hitDeformed = element->globalToLocalTransf(DigitId) * hitAtGlobalFrame;
806  MDTSimHit simhit2(hit);
807  // apply the deformation
808  simhit2.setDriftRadius(hitDeformed.perp());
809  simhit2.setLocalPosition(hitDeformed);
810  return simhit2;
811 }

◆ checkMDTSimHit()

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

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

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

◆ correctGeometricalWireSag()

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

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

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

◆ createDigits()

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

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

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

◆ digitizeTime()

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

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

757  {
758  int tdcCount{0};
759  double tmpCount = isHPTDC ? time / m_ns2TDCHPTDC : time / m_ns2TDCAMT;
760  tdcCount = CLHEP::RandGaussZiggurat::shoot(rndmEngine, tmpCount, m_resTDC);
761  if (tdcCount < 0 || tdcCount > 4096) { ATH_MSG_DEBUG(" Count outside TDC window: " << tdcCount); }
762  return tdcCount;
763 }

◆ 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 736 of file MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx.

736  {
737  IdContext mdtContext = m_idHelperSvc->mdtIdHelper().module_context();
738  IdentifierHash coll_hash;
739  if (m_idHelperSvc->mdtIdHelper().get_hash(elementId, coll_hash, &mdtContext)) {
740  ATH_MSG_ERROR("Unable to get MDT hash id from MDT Digit collection "
741  << "context begin_index = " << mdtContext.begin_index() << " context end_index = " << mdtContext.end_index()
742  << " the identifier is ");
743  elementId.show();
744  }
745 
746  if (coll_hash >= collections.size()) {
747  collections.resize (coll_hash+1);
748  }
749 
750  auto& coll = collections[coll_hash];
751  if (!coll) {
752  coll = std::make_unique<MdtDigitCollection>(elementId, coll_hash);
753  }
754  return coll.get();
755 }

◆ 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  MdtDigiToolInput digiInput(std::abs(driftRadius), distRO, 0., 0., 0., 0., DigitId);
403  double qcharge = 1.;
404  double qgamma = -9999.;
405 
406  if (m_DoQballCharge) {
407  // chargeCalculator returns the value of electric charge for multicharged particle.
408  // particleGamma returns the value of gamma for multicharged particle.
409  const HepMcParticleLink trkParticle = HepMcParticleLink::getRedirectedLink(hit.particleLink(),phit.eventId(), ctx); // This link should now correctly resolve to the TruthEvent McEventCollection in the main StoreGateSvc.
410  HepMC::ConstGenParticlePtr genParticle = trkParticle.cptr();
411  if (genParticle) {
412  if ( MC::isGenericMultichargedParticle(genParticle) ) {
413  const double QE = genParticle->momentum().e();
414  const double QM2 = genParticle->momentum().m2();
415  if (QM2 >= 0.) {
416  qgamma = QE / std::sqrt(QM2);
417  }
418  }
419  qcharge = MC::fractionalCharge(genParticle);
420  }
421  digiInput = MdtDigiToolInput{std::abs(driftRadius), distRO, 0., 0., qcharge, qgamma, DigitId};
422  }
423 
424  // digitize input
425  MdtDigiToolOutput digiOutput(m_digiTool->digitize(ctx, digiInput, toolRndmEngine));
426  //-Implementation for RT_Relation_DB_Tool
427 
428  // simulate tube response, check if tube fired
429  if (digiOutput.wasEfficient()) {
430  double driftTime = digiOutput.driftTime();
431  double adc = digiOutput.adc();
432 
433  ATH_MSG_VERBOSE("Tube efficient: driftTime " << driftTime << " adc value " << adc);
434 
435  if (m_useProp) {
436  double position_along_wire = hit.localPosition().z();
437  if (m_useDeformations) { position_along_wire = newSimhit.localPosition().z(); }
438 
439  // prop delay calculated with respect to the center of the tube
440  double sign(-1.);
441  if (distRO < 0.) sign = 1.;
442  double propagation_delay = sign * (1. / m_signalSpeed) * position_along_wire;
443  //------------------------------------------------------------
444  // calculate propagation delay, as readout side the side with
445  // negative local
446  // position along the wire is taken
447 
448  driftTime += propagation_delay; // add prop time
449  ATH_MSG_VERBOSE("Position along wire: " << position_along_wire << " propagation delay: " << propagation_delay
450  << " new driftTime " << driftTime);
451  }
452 
453  // add tof + bunch time
454  if (m_useTof) {
455  driftTime += globalHitTime;
456  ATH_MSG_VERBOSE("Time off Flight + bunch offset: " << globalHitTime << " new driftTime " << driftTime);
457  }
458  ATH_MSG_DEBUG(m_idHelperSvc->mdtIdHelper().show_to_string(DigitId)
459  << " Drift time computation " << driftTime << " radius " << driftRadius << " adc " << adc);
460 
461  // add hit to hit collection
462  m_hits.insert(mdt_hit_info(DigitId, driftTime, adc, driftRadius, &phit));
463  ATH_MSG_VERBOSE(" handleMDTSimHit() phit-" << &phit << " hit.localPosition().z() = " << hit.localPosition().z()
464  << " driftRadius = " << driftRadius);
465 
466  // + TWIN TUBES (A. Koutsman)
467  if (m_useTwin) {
468  // two chambers in ATLAS are installed with Twin Tubes; in detector coordinates BOL4A13 & BOL4C13; only INNER multilayer(=1) is
469  // with twin tubes
470  bool BOL4X13 = false;
471  // find these two chambers in identifier scheme coordinates as in MdtIdHelper
472  if (stationName == "BOL" && std::abs(stationEta) == 4 && stationPhi == 7 && multilayer == 1) { BOL4X13 = true; }
473 
474  // implement twin tubes digitizing either for all BOL (m_useAllBOLTwin = true) _OR_ only for two chambers really installed
475  if ((m_useAllBOLTwin && stationName == "BOL") || BOL4X13) {
476  int twin_tube = 0;
477  Identifier twin_DigitId{0};
478  double twin_sign_driftTime = 0.;
479  // twinpair is connected via a HV-jumper with a delay of ~6ns
480  constexpr double HV_delay = 6.;
481  double twin_tubeLength{0.}, twin_geo_pos_along_wire{0.},
482  twin_sign_pos_along_wire{0.}, twin_sign{-1.};
483 
484  // twinpair is interconnected with one tube in between, so modulo 4 they are identical
485  if (tube % 4 == 1 || tube % 4 == 2)
486  twin_tube = tube + 2;
487  else if (tube % 4 == 0 || tube % 4 == 3)
488  twin_tube = tube - 2;
489  // construct Atlas identifier from components for the twin
490  twin_DigitId = m_idHelperSvc->mdtIdHelper().channelID(stationName, stationEta, stationPhi, multilayer, layer, twin_tube);
491  // get twin tube length for propagation delay
492  twin_tubeLength = element->tubeLength(twin_DigitId);
493 
494  // prop delay calculated with respect to the center of the tube
495  if (distRO < 0.) twin_sign = 1.;
496  twin_geo_pos_along_wire = hit.localPosition().z();
497  if (m_useDeformations) { twin_geo_pos_along_wire = newSimhit.localPosition().z(); }
498  twin_sign_pos_along_wire = twin_sign * twin_geo_pos_along_wire;
499  double twin_propagation_delay = twin_sign * (1. / m_signalSpeed) * twin_geo_pos_along_wire;
500 
501  // calculate drift-time for twin from prompt driftTime + propagation delay + length of tube + hv-delay
502  // ( -2* for propagation_delay, cause prop_delay already in driftTime)
503  twin_sign_driftTime = driftTime + twin_tubeLength / m_signalSpeed - 2 * twin_propagation_delay + HV_delay;
504 
505  // smear the twin time by a gaussian with a stDev given by m_resTwin
506  double rand = CLHEP::RandGaussZiggurat::shoot(twinRndmEngine, twin_sign_driftTime, m_resTwin);
507  twin_sign_driftTime = rand;
508 
509  ATH_MSG_DEBUG(" TWIN TUBE stname " << stationName << " steta " << stationEta << " stphi " << stationPhi << " mLayer "
510  << multilayer << " layer " << layer << " tube " << tube
511  << " signed position along wire = " << twin_sign_pos_along_wire
512  << " propagation delay = " << twin_propagation_delay << " drifttime = " << driftTime
513  << " twin_driftTime = " << twin_sign_driftTime
514  << " TWIN time-difference = " << (twin_sign_driftTime - driftTime));
515 
516  // add twin-hit to hit collection
517  m_hits.insert(mdt_hit_info(twin_DigitId, twin_sign_driftTime, adc, driftRadius, &phit));
518 
519  } // end select all BOLs or installed chambers
520  } // end if(m_useTwin){
521  // - TWIN TUBES (A. Koutsman)
522  } else {
523  ATH_MSG_DEBUG(m_idHelperSvc->mdtIdHelper().show_to_string(DigitId) << " Tube not efficient "
524  << " radius " << driftRadius);
525  }
526 
527  return true;
528 }

◆ 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 791 of file MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx.

791  {
792  if (m_useTimeWindow)
793  if (time < static_cast<double>(m_bunchCountOffset) - m_maskWindow || time > m_bunchCountOffset) {
794  ATH_MSG_VERBOSE("hit outside MaskWindow " << time);
795  return false;
796  }
797  return true;
798 }

◆ insideMatchingWindow()

bool MdtDigitizationTool::insideMatchingWindow ( double  time) const
private

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

782  {
783  if (m_useTimeWindow)
784  if (time < m_bunchCountOffset || time > static_cast<double>(m_bunchCountOffset) + m_matchingWindow) {
785  ATH_MSG_VERBOSE("hit outside MatchingWindow " << time);
786  return false;
787  }
788  return true;
789 }

◆ 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 765 of file MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx.

765  {
766  if (!m_useTof) return 0.;
767 
768  // get distance to vertex for tof correction before applying the time window
769  double distanceToVertex(0.);
770  const MuonGM::MdtReadoutElement* element = detMgr->getMdtReadoutElement(DigitId);
771 
772  if (!element) {
773  ATH_MSG_ERROR("MuonGeoManager does not return valid element for given id!");
774  } else {
775  distanceToVertex = element->tubePos(DigitId).mag();
776  }
777  // what about this? does this also need to be 1/m_signalSpeed ?
778  ATH_MSG_DEBUG("minimumTof calculated " << distanceToVertex * s_inv_c_light);
779  return distanceToVertex * s_inv_c_light;
780 }

◆ 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:20
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:158
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:791
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
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:70
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:33
skel.it
it
Definition: skel.GENtoEVGEN.py:396
MDTSimHitCollection
AtlasHitsVector< MDTSimHit > MDTSimHitCollection
Definition: MDTSimHitCollection.h:14
MDT_SortedHitVector::sort
void sort()
Definition: MDT_SortedHitVector.h:43
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:765
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:332
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:801
MuonCalib::MdtFullCalibData
class which holds the full set of calibration constants for a given tube
Definition: MdtFullCalibData.h:15
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
isGenericMultichargedParticle
bool isGenericMultichargedParticle(const T &p)
Definition: AtlasPID.h:216
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:75
MuonGM::MdtReadoutElement::globalToLocalTransf
Amg::Transform3D globalToLocalTransf(const int tubeLayer, const int tube) const
Definition: MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx:401
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:537
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:210
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:782
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:204
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:107
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:813
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:8
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
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:221
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:757
charge
double charge(const T &p)
Definition: AtlasPID.h:538
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:31
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:530
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:283
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:76
AthenaPoolExample_Copy.streamName
string streamName
Definition: AthenaPoolExample_Copy.py:39
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:45
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
LArCellConditions.geo
bool geo
Definition: LArCellConditions.py:46
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
MdtDigitizationTool::createDigits
bool createDigits(const EventContext &ctx, Collections_t &collections, MuonSimDataCollection *sdoContainer, CLHEP::HepRandomEngine *rndmEngine)
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx:591
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:891
MdtHitIdHelper::GetTube
int GetTube(const int &hid) const
Definition: MdtHitIdHelper.cxx:89
AtlasHitsVector::size
size_type size() const
Definition: AtlasHitsVector.h:143
MuonCalib::MdtTubeCalibContainer::SingleTubeCalib
Definition: MdtTubeCalibContainer.h:18
merge.status
status
Definition: merge.py:17
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:47
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:156
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:31
MdtDigitizationTool::getDigitCollection
MdtDigitCollection * getDigitCollection(Identifier elementId, Collections_t &collections)
Definition: MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx:736
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