ATLAS Offline Software
Loading...
Searching...
No Matches
MdtDigitizationTool Class Reference

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

#include <MdtDigitizationTool.h>

Inheritance 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.
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.
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.
StatusCode mergeEvent (const EventContext &ctx) override final
 When being run from PileUpToolsAlgs, this method is called at the end of the subevts loop.
virtual StatusCode processAllSubEvents (const EventContext &ctx) override final
 alternative interface which uses the PileUpMergeSvc to obtain all the required SubEvents.

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
virtual bool filterPassed () const override
 dummy implementation of passing filter
virtual void resetFilter () override
 dummy implementation of filter reset

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) {}
PileUpToolBase(const std::string &type, const std::string &name, const IInterface *parent)

◆ ~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}
const Amg::Vector3D & localPosition() const
Definition MDTSimHit.h:54
Amg::Transform3D nodeform_localToGlobalTransf(const Identifier &id) const
Amg::Transform3D globalToLocalTransf(const int tubeLayer, const int tube) const
Eigen::Matrix< double, 3, 1 > Vector3D

◆ 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);
544 int stationEta = m_muonHelper->GetZSector(id);
545 int stationPhi = m_muonHelper->GetPhiSector(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()) {
557 SG::ReadCondHandle<MdtCondDbData> readCdo{m_readKey, ctx};
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.};
567 const MuonGM::MdtReadoutElement* element = m_MuonGeoMgr->getMdtReadoutElement(DigitId);
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}
#define ATH_MSG_ERROR(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
double driftRadius() const
Definition MDTSimHit.h:51
HitID MDTid() const
Definition MDTSimHit.h:62
double globalTime() const
Definition MDTSimHit.h:48
double minimumTof(Identifier DigitId, const MuonGM::MuonDetectorManager *detMgr) const
double innerTubeRadius() const
Returns the inner tube radius excluding the aluminium walls.
double tubeLength(const int tubeLayer, const int tube) const
constexpr uint8_t stationPhi
station Phi 1 to 8
@ layer
Definition HitInfo.h:79

◆ 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
849 Amg::Vector2D lpsag{Amg::Vector2D::Zero()};
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}
int sign(int a)
virtual const Trk::Surface & surface() const override final
Return surface associated with this detector element.
const Amg::Transform3D & localToGlobalTransf(const Identifier &id) const
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...
Eigen::Affine3d Transform3D
Eigen::Matrix< double, 2, 1 > Vector2D
@ locR
Definition ParamDefs.h:44

◆ 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
628 SG::ReadCondHandle<MuonCalib::MdtCalibDataContainer> mdtCalibConstants{m_calibDbKey, ctx};
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);
636 const MuonGM::MdtReadoutElement* geo = m_MuonGeoMgr->getMdtReadoutElement(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}
float hitTime(const AFP_SIDSimHit &hit)
#define ATH_MSG_FATAL(x)
#define ATH_MSG_VERBOSE(x)
double charge(const T &p)
Definition AtlasPID.h:997
char data[hepevt_bytes_allocation_ATLAS]
Definition HepEvt.cxx:11
static Double_t t0
HitVector::iterator HitIt
value_type push_back(value_type pElem)
Add an element to the end of the collection.
SG::ReadCondHandleKey< MuonCalib::MdtCalibDataContainer > m_calibDbKey
MdtDigitCollection * getDigitCollection(Identifier elementId, Collections_t &collections)
int digitizeTime(double time, bool isHPTDC, CLHEP::HepRandomEngine *rndmEngine) const
std::pair< HepMcParticleLink, MuonMCData > Deposit
Definition MuonSimData.h:66
Gaudi::Property< int > m_vetoPileUpTruthLinks
const DataObjID & fullKey() const
unsigned short eventId() const
the index of the component event in PileUpEventInfo.
Definition TimedHitPtr.h:47
bool ignoreTruthLink(const T &p, bool vetoPileUp)
Helper function for SDO creation in PileUpTools.
@ driftTime
Definition HitInfo.h:43
@ driftRadius
trt, straws
Definition ParamDefs.h:53

◆ 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}
time(flags, cells_name, *args, **kw)

◆ 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}
bool handleMDTSimHit(const EventContext &ctx, const TimedHitPtr< MDTSimHit > &phit, CLHEP::HepRandomEngine *twinRndmEngine, CLHEP::HepRandomEngine *toolRndmEngine)
CLHEP::HepRandomEngine * getRandomEngine(const std::string &streamName, const EventContext &ctx) const
bool createDigits(const EventContext &ctx, Collections_t &collections, MuonSimDataCollection *sdoContainer, CLHEP::HepRandomEngine *rndmEngine)
std::unique_ptr< TimedHitCollection< MDTSimHit > > m_thpcMDT
TimedVector::const_iterator const_iterator

◆ 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}
size_type begin_index() const
Definition IdContext.h:45
size_type end_index() const
Definition IdContext.h:46
void show() const
Print out in hex form.

◆ 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
192 SG::ReadHandle<MDTSimHitCollection> hitCollection(m_hitsContainerKey, ctx);
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}
AtlasHitsVector< MDTSimHit > MDTSimHitCollection
SG::ReadHandleKey< MDTSimHitCollection > m_hitsContainerKey
std::list< value_t > type
type of the collection of timed data object

◆ 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}
void setSeed(const std::string &algName, const EventContext &ctx)
Set the random seed using a string (e.g.
Definition RNGWrapper.h:169
CLHEP::HepRandomEngine * getEngine(const EventContext &ctx) const
Retrieve the random engine corresponding to the provided EventContext.
Definition RNGWrapper.h:134

◆ 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);
367 int stationEta = m_muonHelper->GetZSector(id);
368 int stationPhi = m_muonHelper->GetPhiSector(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
380 const MuonGM::MdtReadoutElement* element = m_MuonGeoMgr->getMdtReadoutElement(DigitId);
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}
static MDTSimHit applyDeformations(const MDTSimHit &, const MuonGM::MdtReadoutElement *, const Identifier &)
bool checkMDTSimHit(const EventContext &ctx, const MDTSimHit &hit) const
GeoCorOut correctGeometricalWireSag(const MDTSimHit &hit, const Identifier &id, const MuonGM::MdtReadoutElement *element) const
Amg::Vector3D tubeFrame_localROPos(const int tubelayer, const int tube) const
const GenParticle * ConstGenParticlePtr
Definition GenParticle.h:38
double fractionalCharge(const T &p)
bool isBSM(const T &p)
APID: graviton and all Higgs extensions are BSM.

◆ 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
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());
122 ATH_CHECK(m_calibDbKey.initialize());
123
124 // initialize the output WriteHandleKeys
125 ATH_CHECK(m_outputObjectKey.initialize());
126 ATH_MSG_VERBOSE("Initialized WriteHandleKey: " << m_outputObjectKey);
127 ATH_CHECK(m_outputSDOKey.initialize());
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());
139 ATH_CHECK(m_readKey.initialize(!m_readKey.empty()));
140 return StatusCode::SUCCESS;
141}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_INFO(x)
SG::WriteHandleKey< MdtDigitContainer > m_outputObjectKey
SG::WriteHandleKey< MuonSimDataCollection > m_outputSDOKey
static const MdtHitIdHelper * GetHelper(unsigned int nTubes=78)
bool contains(const std::string &s, const std::string &regx)
does a string contain the substring
Definition hcg.cxx:114
retrieve(aClass, aKey=None)
Definition PyKernel.py:110

◆ 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
247 SG::WriteHandle<MdtDigitContainer> digitContainer(m_outputObjectKey, ctx);
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
252 SG::WriteHandle<MuonSimDataCollection> sdoContainer(m_outputSDOKey, ctx);
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
267 std::vector<MDTSimHitCollection*>::iterator MDTHitColl = m_MDTHitCollList.begin();
268 std::vector<MDTSimHitCollection*>::iterator MDTHitCollEnd = m_MDTHitCollList.end();
269 while (MDTHitColl != MDTHitCollEnd) {
270 delete (*MDTHitColl);
271 ++MDTHitColl;
272 }
273 m_MDTHitCollList.clear();
274
275 return status;
276}
std::vector< std::unique_ptr< MdtDigitCollection > > Collections_t
StatusCode doDigitization(const EventContext &ctx, Collections_t &collections, MuonSimDataCollection *sdoContainer)
::StatusCode StatusCode
StatusCode definition for legacy code.
status
Definition merge.py:16

◆ 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}
Amg::Vector3D tubePos(const Identifier &id) const
Returns the global position of the given tube.
const MdtReadoutElement * getMdtReadoutElement(const Identifier &id) const
access via extended identifier (requires unpacking)

◆ 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()

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
282 SG::WriteHandle<MdtDigitContainer> digitContainer(m_outputObjectKey, ctx);
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
287 SG::WriteHandle<MuonSimDataCollection> sdoContainer(m_outputSDOKey, ctx);
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}

◆ 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}
size_type size() const

◆ 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 }
Gaudi::Property< int > m_firstXing
Gaudi::Property< int > m_lastXing

Member Data Documentation

◆ m_bunchCountOffset

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

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

170{this, "BunchCountOffset", -200., "Bunch crossing offset"};

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

215 {this, "CalibDataKey", "MdtCalibConstants",
216 "Conditions object containing the calibrations"};

◆ m_checkMDTSimHits

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

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

158{this, "CheckSimHits", true, "Control on the hit validity"};

◆ m_deadTime

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

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

173{this, "DeadTime", 700., "MDT drift tube dead time"};

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

144 {this, "DigitizationTool", "MDT_Response_DigiTool",
145 "Tool which handle the digitization process"};

◆ m_DiscardEarlyHits

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

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

174{this, "DiscardEarlyHits", true, ""};

◆ m_DoQballCharge

Gaudi::Property<bool> MdtDigitizationTool::m_DoQballCharge {this, "DoQballCharge", false, "dEdx for Qballs with account of electric charge"}
private

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

185{this, "DoQballCharge", false, "dEdx for Qballs with account of electric charge"};

◆ m_filterPassed

bool PileUpToolBase::m_filterPassed {true}
protectedinherited

Definition at line 60 of file PileUpToolBase.h.

60{true};

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

54 {this, "FirstXing", -999,
55 "First bunch-crossing in which det is live"};

◆ m_hits

MDT_SortedHitVector MdtDigitizationTool::m_hits
private

◆ m_hitsContainerKey

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

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

206{this, "InputObjectName", "MDT_Hits", ""}; // name of the input objects

◆ m_idHelperSvc

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

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

137{this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"};

◆ m_includePileUpTruth

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

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

191{this, "IncludePileUpTruth", true, "Include pile-up truth info"};

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

56 {this, "LastXing", 999,
57 "Last bunch-crossing in which det is live"};

◆ m_maskWindow

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

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

172{this, "MaskWindow", 250., "Masked window"};

◆ m_matchingWindow

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

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

171{this, "MatchingWindow", 1000., "Matching window"};

◆ m_MDTHitCollList

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

◆ m_mergeSvc

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

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

203{this, "PileUpMergeSvc", "PileUpMergeSvc", ""}; // Pile up service

◆ 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

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

152{this, "ns2TDCAMT", 0.78125, "Conversion factor TDC/ns for AMT chips"};

◆ m_ns2TDCHPTDC

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

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

153{this, "ns2TDCHPTDC", 0.1953125, "Conversion factor TDC/ns for HPTDC chips"};

◆ m_offsetTDC

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

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

149{this, "OffsetTDC", 800., "TDC offset used if no calibration data is found"};

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

204 {this, "OnlyUseContainerName", true,
205 "Don't use the ReadHandleKey directly. Just extract the container name from it."};

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

208 {this, "OutputObjectName", "MDT_DIGITS",
209 "WriteHandleKey for Output MdtDigitContainer"};

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

210 {this, "OutputSDOName", "MDT_SDO",
211 "WriteHandleKey for Output MuonSimDataCollection"};

◆ m_readKey

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

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

218{this, "ReadKey", "MdtCondDbData", "Key of MdtCondDbData"};

◆ m_resTDC

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

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

154{this, "ResolutionTDC", 0.5, "TDC resolution"};

◆ m_resTwin

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

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

166{this, "ResolutionTwinTube", 1.05, "Twin Tube resolution"};

◆ m_rndmSvc

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

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

213{this, "RndmSvc", "AthRNGSvc", ""}; // Random number service

◆ m_signalSpeed

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

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

150{this, "SignalSpeed", 0.85*Gaudi::Units::c_light};

◆ m_t0ShiftTuning

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

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

155{this,"TunedT0Shift",-17.,"Fine tuned t0 shift value in ns"};

◆ m_thpcMDT

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

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

188{}; // the hits

◆ m_useAllBOLTwin

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

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

165{this, "UseAllBOLTwin", false, ""};

◆ m_useAttenuation

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

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

160{this, "UseAttenuation", false, ""};

◆ m_useDeformations

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

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

182{this, "UseDeformations", false, ""};

◆ m_useOffSet1

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

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

177{this, "UseOffSet1", true, ""};

◆ m_useOffSet2

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

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

178{this, "UseOffSet2", true, ""};

◆ m_useProp

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

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

161{this, "UseProp", true, ""};

◆ m_useTimeWindow

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

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

169{this, "UseTimeWindow", true, ""};

◆ m_useTof

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

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

159{this, "UseTof", true, "Option for the tof calculation"};

◆ m_useTwin

Gaudi::Property<bool> MdtDigitizationTool::m_useTwin {this, "UseTwin", false, ""}
private

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

164{this, "UseTwin", false, ""};

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

58 {this, "VetoPileUpTruthLinks", true,
59 "Ignore links to suppressed pile-up truth"};

The documentation for this class was generated from the following files: