ATLAS Offline Software
Loading...
Searching...
No Matches
TRTDigitizationTool Class Referenceabstract

#include <TRTDigitizationTool.h>

Inheritance diagram for TRTDigitizationTool:

Public Member Functions

 TRTDigitizationTool (const std::string &type, const std::string &name, const IInterface *parent)
 ~TRTDigitizationTool ()
 Destructor.
virtual StatusCode initialize () override final
 Initialize.
virtual StatusCode finalize () override final
 Finalize.
virtual StatusCode mergeEvent (const EventContext &ctx) override final
 called at the end of the subevts loop. Not (necessarily) able to access SubEvents
virtual StatusCode processBunchXing (int bunchXing, SubEventIterator bSubEvents, SubEventIterator eSubEvents) override final
 called for each active bunch-crossing to process current SubEvents bunchXing is in ns
virtual StatusCode prepareEvent (const EventContext &ctx, const unsigned int nInputEvents) override final
 return false if not interested in certain xing times (in ns) implemented by default in PileUpToolBase as FirstXing<=bunchXing<=LastXing
virtual StatusCode processAllSubEvents (const EventContext &ctx) override final
 Perform digitization:
virtual bool toProcess (int bunchXing) const =0
 flags whether this tool is "live" for bunchXing (time in ns) implemented by default in PileUpToolBase as FirstXing<=bunchXing<=LastXing
virtual bool filterPassed () const =0
 flags whether the event should be removed or not
virtual void resetFilter ()=0
 reset the filter
 DeclareInterfaceID (IPileUpTool, 1, 0)
 Creates the InterfaceID and interfaceID() method.

Private Member Functions

CLHEP::HepRandomEngine * getRandomEngine (const std::string &streamName, const EventContext &ctx) const
CLHEP::HepRandomEngine * getRandomEngine (const std::string &streamName, unsigned long int randomSeedOffset, const EventContext &ctx) const
Identifier getIdentifier (int hitID, IdentifierHash &hashId, Identifier &layerID, bool &statusok) const
StatusCode lateInitialize (const EventContext &ctx)
StatusCode processStraws (const EventContext &ctx, TimedHitCollection< TRTUncompressedHit > &thpctrt, std::set< int > &sim_hitids, std::set< Identifier > &simhitsIdentifiers, CLHEP::HepRandomEngine *rndmEngine, CLHEP::HepRandomEngine *strawRndmEngine, CLHEP::HepRandomEngine *elecProcRndmEngine, CLHEP::HepRandomEngine *elecNoiseRndmEngine, CLHEP::HepRandomEngine *paiRndmEngine)
StatusCode createAndStoreRDOs ()

Static Private Member Functions

static double getCosmicEventPhase (CLHEP::HepRandomEngine *rndmEngine)

Private Attributes

ToolHandle< ITRT_PAIToolm_TRTpaiToolXe {this, "PAI_Tool_Xe", "TRT_PAI_Process_Xe", "The PAI model for ionisation in the TRT Xe gas"}
 Configurable properties.
ToolHandle< ITRT_PAIToolm_TRTpaiToolAr {this, "PAI_Tool_Ar", "TRT_PAI_Process_Ar", "The PAI model for ionisation in the TRT Ar gas"}
ToolHandle< ITRT_PAIToolm_TRTpaiToolKr {this, "PAI_Tool_Kr", "TRT_PAI_Process_Kr", "The PAI model for ionisation in the TRT Kr gas"}
ToolHandle< ITRT_SimDriftTimeToolm_TRTsimdrifttimetool {this, "SimDriftTimeTool", "TRT_SimDriftTimeTool", "Drift time versus distance (r-t-relation) for TRT straws"}
ToolHandle< ITRT_StrawStatusSummaryToolm_sumTool {this, "InDetTRTStrawStatusSummaryTool", "TRT_StrawStatusSummaryTool", ""}
ToolHandle< ITRT_CalDbToolm_calDbTool {this, "InDetTRTCalDbTool", "TRT_CalDbTool", ""}
ServiceHandle< PileUpMergeSvcm_mergeSvc {this, "MergeSvc", "PileUpMergeSvc", "Merge service"}
ServiceHandle< IAthRNGSvcm_rndmSvc {this, "RndmSvc", "AthRNGSvc", ""}
 Random number service.
ServiceHandle< ITRT_StrawNeighbourSvcm_TRTStrawNeighbourSvc {this, "TRT_StrawNeighbourSvc", "TRT_StrawNeighbourSvc", ""}
SG::ReadCondHandleKey< AtlasFieldCacheCondObjm_fieldCacheCondObjInputKey
Gaudi::Property< bool > m_onlyUseContainerName {this, "OnlyUseContainerName", true, "Don't use the ReadHandleKey directly. Just extract the container name from it."}
SG::ReadHandleKey< TRTUncompressedHitCollectionm_hitsContainerKey {this, "DataObjectName", "TRTUncompressedHits", "Data Object Name"}
std::string m_dataObjectName {""}
SG::WriteHandleKey< TRT_RDO_Containerm_outputRDOCollName {this,"OutputObjectName","TRT_RDOs","WHK Output Object name"}
 name of the output RDOs.
SG::WriteHandleKey< InDetSimDataCollectionm_outputSDOCollName {this,"OutputSDOName","TRT_SDO_Map","WHK Output SDO container name"}
 name of the output SDOs.
SG::WriteHandle< TRT_RDO_Containerm_trtrdo_container
Gaudi::Property< bool > m_printOverrideableSettings {this, "PrintOverrideableSettings", false, "Print overrideable settings"}
Gaudi::Property< bool > m_printUsedDigSettings {this, "PrintDigSettings", true, "Print ditigization settings"}
Gaudi::Property< int > m_HardScatterSplittingMode {this, "HardScatterSplittingMode", 0, ""}
Gaudi::Property< int > m_UseGasMix {this, "UseGasMix", 0, ""}
Gaudi::Property< unsigned long int > m_randomSeedOffset {this, "RandomSeedOffset", 678910, ""}
TRTDigSettingsm_settings {}
std::vector< std::pair< unsigned int, int > > m_seen
std::vector< TRTDigitm_vDigits
 Vector of all digits.
TRTElectronicsProcessingm_pElectronicsProcessing {}
TRTProcessingOfStrawm_pProcessingOfStraw {}
TRTDigCondBasem_pDigConditions {}
TRTNoisem_pNoise {}
const InDetDD::TRT_DetectorManagerm_manager {}
const TRT_IDm_trt_id {}
 TRT Id Helper.
std::vector< TRTUncompressedHitCollection * > m_trtHitCollList
TimedHitCollection< TRTUncompressedHit > * m_thpctrt {}
bool m_alreadyPrintedPDGcodeWarning {false}
double m_minCrossingTimeSDO {0.0}
double m_maxCrossingTimeSDO {0.0}
double m_minpileuptruthEkin {0.0}
double m_cosmicEventPhase {0.0}
ServiceHandle< IPartPropSvc > m_ppSvc {this, "PartPropSvc", "PartPropSvc"}
 Handle on the particle property service.
const HepPDT::ParticleDataTable * m_particleTable {}
bool m_first_event {true}
bool m_HardScatterSplittingSkipper {false}

structors and AlgTool implementation

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
Gaudi::Property< int > m_firstXing
Gaudi::Property< int > m_lastXing
Gaudi::Property< int > m_vetoPileUpTruthLinks
bool m_filterPassed {true}

Detailed Description

Definition at line 63 of file TRTDigitizationTool.h.

Constructor & Destructor Documentation

◆ TRTDigitizationTool()

TRTDigitizationTool::TRTDigitizationTool ( const std::string & type,
const std::string & name,
const IInterface * parent )

Definition at line 53 of file TRTDigitizationTool.cxx.

56: PileUpToolBase(type, name, parent)
57{
58 m_settings = new TRTDigSettings();
59 m_settings->addPropertiesForOverrideableParameters(static_cast<AlgTool*>(this));
60}
PileUpToolBase(const std::string &type, const std::string &name, const IInterface *parent)
TRTDigSettings * m_settings

◆ ~TRTDigitizationTool()

TRTDigitizationTool::~TRTDigitizationTool ( )

Destructor.

Definition at line 63 of file TRTDigitizationTool.cxx.

63 {
64
65 ATH_MSG_VERBOSE ( "Begin TRTDigitizationTool::Destructor");
68 delete m_pDigConditions;
69 delete m_pNoise;
70 delete m_settings;
71 ATH_MSG_VERBOSE ( "End TRTDigitizationTool::Destructor");
72
73}
#define ATH_MSG_VERBOSE(x)
TRTProcessingOfStraw * m_pProcessingOfStraw
TRTDigCondBase * m_pDigConditions
TRTElectronicsProcessing * m_pElectronicsProcessing

Member Function Documentation

◆ createAndStoreRDOs()

StatusCode TRTDigitizationTool::createAndStoreRDOs ( )
private

Definition at line 684 of file TRTDigitizationTool.cxx.

685{
686
687 std::vector<TRTDigit>::const_iterator TRTDigitIter(m_vDigits.begin());
688 std::vector<TRTDigit>::const_iterator endOfTRTDigits(m_vDigits.end());
689
690 // for testing
691 IdentifierHash IdHash; // default value is 0xFFFFFFFF
692 IdentifierHash IdHashOld; // default value is 0xFFFFFFFF
693 TRT_RDO_Collection *RDOColl(nullptr);
694
695 Identifier idStraw;
696
697 while (TRTDigitIter != endOfTRTDigits) {
698 ATH_MSG_DEBUG ( "Digit ID " << TRTDigitIter->GetStrawID() << " Digit " << TRTDigitIter->GetDigit() );
699
700 Identifier layer_id;
701 bool identifierOK(false);
702 idStraw = getIdentifier(TRTDigitIter->GetStrawID(), IdHash, layer_id, identifierOK);
703 if (!identifierOK) {
704 ATH_MSG_ERROR ( "Ignoring simhits with suspicious identifier (2)" );
705 ++TRTDigitIter;
706 continue;
707 };
708
709 // Create new TRT RDO Collection
710 ATH_MSG_DEBUG ( " RDO ID " << m_trt_id->print_to_string(idStraw) );
711
712 //TK: wauv - we are really betting the farm on the fact that the
713 //ordering of digits will result in a similar ordering of the
714 //idhash'es here... (this is not immediately the case when noise
715 //hits are appended afterwards).
716
717 if (IdHash != IdHashOld) {
718 RDOColl = new TRT_RDO_Collection(IdHash);
719 ATH_MSG_DEBUG ( "New TRT RDO Collection created with IdHash " << static_cast<int>(IdHash) );
720 IdHashOld = IdHash;
721 RDOColl->setIdentifier(layer_id);
722
723 // Add to the container
724 if (m_trtrdo_container->addCollection(RDOColl, RDOColl->identifyHash()).isFailure()) {
725 ATH_MSG_FATAL ( "Container " << m_outputRDOCollName.key() << " could not be registered in StoreGate !" );
726 return StatusCode::FAILURE;
727 } else {
728 ATH_MSG_DEBUG ( "Container " << m_outputRDOCollName.key() << " registered in StoreGate" );
729 }
730 }
731
732 // Put RDO into Collection
733 TRT_LoLumRawData *p_rdo(new TRT_LoLumRawData(idStraw, TRTDigitIter->GetDigit()));
734 if (RDOColl) {
735 RDOColl->push_back(p_rdo);
736 } else {
737 ATH_MSG_FATAL ( "Failed to create the TRT_RDO_Collection before trying to add an RDO to it! IdHash = " << static_cast<int>(IdHash) );
738 delete p_rdo;
739 return StatusCode::FAILURE;
740 }
741 ++TRTDigitIter;
742 }
743
744 m_vDigits.clear();
745 return StatusCode::SUCCESS;
746}
#define ATH_MSG_ERROR(x)
#define ATH_MSG_FATAL(x)
#define ATH_MSG_DEBUG(x)
InDetRawDataCollection< TRT_RDORawData > TRT_RDO_Collection
std::vector< TRTDigit > m_vDigits
Vector of all digits.
SG::WriteHandle< TRT_RDO_Container > m_trtrdo_container
Identifier getIdentifier(int hitID, IdentifierHash &hashId, Identifier &layerID, bool &statusok) const
const TRT_ID * m_trt_id
TRT Id Helper.
SG::WriteHandleKey< TRT_RDO_Container > m_outputRDOCollName
name of the output RDOs.

◆ DeclareInterfaceID()

IPileUpTool::DeclareInterfaceID ( IPileUpTool ,
1 ,
0  )
inherited

Creates the InterfaceID and interfaceID() method.

◆ filterPassed() [1/2]

virtual bool IPileUpTool::filterPassed ( ) const
pure virtualinherited

flags whether the event should be removed or not

◆ filterPassed() [2/2]

virtual bool PileUpToolBase::filterPassed ( ) const
inlineoverridevirtualinherited

dummy implementation of passing filter

Definition at line 49 of file PileUpToolBase.h.

49{ return m_filterPassed; }

◆ finalize()

StatusCode TRTDigitizationTool::finalize ( )
finaloverridevirtual

Finalize.

Definition at line 825 of file TRTDigitizationTool.cxx.

825 {
826
828 m_settings->print("TRTDigSettings Settings : ");
829 }
830
831 ATH_MSG_INFO ( "TRTDigitizationTool::finalize()" );
832
833 return StatusCode::SUCCESS;
834}
#define ATH_MSG_INFO(x)
Gaudi::Property< bool > m_printUsedDigSettings

◆ getCosmicEventPhase()

double TRTDigitizationTool::getCosmicEventPhase ( CLHEP::HepRandomEngine * rndmEngine)
staticprivate

Definition at line 837 of file TRTDigitizationTool.cxx.

837 {
838 // 13th February 2015: replace ComTime with a hack (fixme) based on an
839 // event phase distribution from Alex (alejandro.alonso@cern.ch) that
840 // is modelled as a Guassian of mean 5.48 ns and sigma 8.91 ns.
841 return CLHEP::RandGaussZiggurat::shoot(rndmEngine, 5.48, 8.91);
842}

◆ getIdentifier()

Identifier TRTDigitizationTool::getIdentifier ( int hitID,
IdentifierHash & hashId,
Identifier & layerID,
bool & statusok ) const
private

Definition at line 750 of file TRTDigitizationTool.cxx.

754{
755 statusok = true;
756
757 Identifier IdStraw;
758
759 const int mask(0x0000001F);
760 const int word_shift(5);
761 int trtID, ringID, moduleID, layerID, strawID;
762 int wheelID, planeID, sectorID;
763
764 const InDetDD::TRT_BarrelElement *barrelElement;
765 const InDetDD::TRT_EndcapElement *endcapElement;
766
767 if ( !(hitID & 0x00200000) ) { // barrel
768 strawID = hitID & mask;
769 hitID >>= word_shift;
770 layerID = hitID & mask;
771 hitID >>= word_shift;
772 moduleID = hitID & mask;
773 hitID >>= word_shift;
774 ringID = hitID & mask;
775 trtID = hitID >> word_shift;
776
777 barrelElement = m_manager->getBarrelElement(trtID, ringID, moduleID, layerID);
778 if ( barrelElement ) {
779 hashId = barrelElement->identifyHash();
780 IdLayer = barrelElement->identify();
781 IdStraw = m_trt_id->straw_id(IdLayer, strawID);
782 } else {
783 ATH_MSG_ERROR ( "Could not find detector element for barrel identifier with "
784 << "(ipos,iring,imod,ilayer,istraw) = ("
785 << trtID << ", " << ringID << ", " << moduleID << ", "
786 << layerID << ", " << strawID << ")" );
787 statusok = false;
788 }
789 } else { // endcap
790 strawID = hitID & mask;
791 hitID >>= word_shift;
792 planeID = hitID & mask;
793 hitID >>= word_shift;
794 sectorID = hitID & mask;
795 hitID >>= word_shift;
796 wheelID = hitID & mask;
797 trtID = hitID >> word_shift;
798
799 // change trtID (which is 2/3 for endcaps) to use 0/1 in getEndcapElement
800 if (trtID == 3) { trtID = 0; }
801 else { trtID = 1; }
802
803 endcapElement = m_manager->getEndcapElement(trtID, wheelID, planeID, sectorID);
804
805 if ( endcapElement ) {
806 hashId = endcapElement->identifyHash();
807 IdLayer = endcapElement->identify();
808 IdStraw = m_trt_id->straw_id(IdLayer, strawID);
809 } else {
810 ATH_MSG_ERROR ( "Could not find detector element for endcap identifier with "
811 << "(ipos,iwheel,isector,iplane,istraw) = ("
812 << trtID << ", " << wheelID << ", " << sectorID << ", "
813 << planeID << ", " << strawID << ")" );
814 ATH_MSG_ERROR ( "If this happens very rarely, don't be alarmed (it is a Geant4 'feature')" );
815 ATH_MSG_ERROR ( "If it happens a lot, you probably have misconfigured geometry in the sim. job." );
816 statusok = false;
817 }
818
819 }
820
821 return IdStraw;
822}
virtual IdentifierHash identifyHash() const override final
identifier hash
virtual Identifier identify() const override final
identifier of this detector element:
const InDetDD::TRT_DetectorManager * m_manager

◆ getRandomEngine() [1/2]

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

Definition at line 583 of file TRTDigitizationTool.cxx.

585{
586 ATHRNG::RNGWrapper* rngWrapper = m_rndmSvc->getEngine(this, streamName);
587 std::string rngName = name()+streamName;
588 rngWrapper->setSeed( rngName, ctx );
589 return rngWrapper->getEngine(ctx);
590}
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
ServiceHandle< IAthRNGSvc > m_rndmSvc
Random number service.

◆ getRandomEngine() [2/2]

CLHEP::HepRandomEngine * TRTDigitizationTool::getRandomEngine ( const std::string & streamName,
unsigned long int randomSeedOffset,
const EventContext & ctx ) const
private

Definition at line 593 of file TRTDigitizationTool.cxx.

595{
596 ATHRNG::RNGWrapper* rngWrapper = m_rndmSvc->getEngine(this, streamName);
597 rngWrapper->setSeed( streamName, ctx.slot(), randomSeedOffset, ctx.eventID().run_number() );
598 return rngWrapper->getEngine(ctx);
599}

◆ initialize()

StatusCode TRTDigitizationTool::initialize ( )
finaloverridevirtual

Initialize.

Get the PAI Tool for Xe, Ar, Kr gas mixtures:

Get the Sim-DriftTime Tool:

Reimplemented from PileUpToolBase.

Definition at line 76 of file TRTDigitizationTool.cxx.

77{
78
79 ATH_MSG_DEBUG ( name()<<"::initialize() begin" );
80
81 // Get the TRT Detector Manager
83 ATH_MSG_DEBUG ( "Retrieved TRT_DetectorManager with version " << m_manager->getVersion().majorNum() );
84
85 ATH_CHECK(detStore()->retrieve(m_trt_id, "TRT_ID"));
86
87 // Fill setting defaults and process joboption overrides:
88 m_settings->initialize(m_manager);
89
91 m_settings->printFlagsForOverrideableParameters("TRTDigSettings Overrideables : ");
92 }
93
95
96 ATH_CHECK(m_TRTpaiToolXe.retrieve());
97 ATH_MSG_DEBUG ( "Retrieved the PAI Tool for Xe straws" );
98
99 ATH_CHECK(m_TRTpaiToolAr.retrieve());
100 ATH_MSG_DEBUG ( "Retrieved the PAI Tool for Ar straws" );
101
102 ATH_CHECK(m_TRTpaiToolKr.retrieve());
103 ATH_MSG_DEBUG ( "Retrieved the PAI Tool for Kr straws" );
104
107 ATH_MSG_DEBUG ( "Retrieved the Sim. Drifttime Tool" );
108
109 // Check data object name
110 if (m_hitsContainerKey.key().empty()) {
111 ATH_MSG_FATAL ( "Property DataObjectName not set!" );
112 return StatusCode::FAILURE;
113 }
115 ATH_MSG_DEBUG ( "Input hits: " << m_dataObjectName );
116
117 // Initialize ReadHandleKey
118 ATH_CHECK(m_hitsContainerKey.initialize(true));
119
120 // Initialize data handle keys
121 ATH_CHECK(m_outputRDOCollName.initialize());
122 ATH_CHECK(m_outputSDOCollName.initialize());
123
124 // Get Random Service
125 ATH_CHECK(m_rndmSvc.retrieve());
126
127 // Get the Particle Properties Service
128 ATH_CHECK(m_ppSvc.retrieve());
129 m_particleTable = m_ppSvc->PDT();
130
131 //locate the PileUpMergeSvc and initialize our local ptr
133 ATH_CHECK(m_mergeSvc.retrieve());
134 }
135
136 //Retrieve TRT_StrawNeighbourService.
138
139 //Retrieve TRT_CalDbTool
140 if (m_settings->getT0FromData()) {
141 ATH_CHECK(m_calDbTool.retrieve());
142 }
143 else {
144 m_calDbTool.disable();
145 }
146
147 m_minpileuptruthEkin = m_settings->pileUpSDOsMinEkin();
148
149 // Set SDO readout range
150 const double intervalBetweenCrossings(m_settings->timeInterval() / 3.);
151
152 switch ( (m_settings->storeSDO() )) {
153 case 0: m_minCrossingTimeSDO = -1.*CLHEP::ns; m_maxCrossingTimeSDO = -1.*CLHEP::ns; break;
154 case 1: m_minCrossingTimeSDO = -1.*CLHEP::ns; m_maxCrossingTimeSDO = (intervalBetweenCrossings * 2. + 1.*CLHEP::ns); break;
155 case 2: m_minCrossingTimeSDO = -(intervalBetweenCrossings * 2. + 1.*CLHEP::ns); m_maxCrossingTimeSDO = (intervalBetweenCrossings * 2. + 1.*CLHEP::ns); break;
156 default:
157 ATH_MSG_ERROR ( "storeSDO is out of range:"<<m_settings->storeSDO()<<"allowed values are: 0,1,2. Setting storeSDO = 2 " );
158 m_minCrossingTimeSDO = -51.*CLHEP::ns; m_maxCrossingTimeSDO = 51.*CLHEP::ns;
159 break;
160 }
161
165
166 return StatusCode::SUCCESS;
167}
#define ATH_CHECK
Evaluate an expression and check for errors.
const HepPDT::ParticleDataTable * m_particleTable
ToolHandle< ITRT_CalDbTool > m_calDbTool
ToolHandle< ITRT_PAITool > m_TRTpaiToolXe
Configurable properties.
ToolHandle< ITRT_SimDriftTimeTool > m_TRTsimdrifttimetool
SG::ReadHandleKey< TRTUncompressedHitCollection > m_hitsContainerKey
ServiceHandle< IPartPropSvc > m_ppSvc
Handle on the particle property service.
ServiceHandle< ITRT_StrawNeighbourSvc > m_TRTStrawNeighbourSvc
Gaudi::Property< bool > m_onlyUseContainerName
Gaudi::Property< bool > m_printOverrideableSettings
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > m_fieldCacheCondObjInputKey
ToolHandle< ITRT_PAITool > m_TRTpaiToolKr
SG::WriteHandleKey< InDetSimDataCollection > m_outputSDOCollName
name of the output SDOs.
ServiceHandle< PileUpMergeSvc > m_mergeSvc
ToolHandle< ITRT_PAITool > m_TRTpaiToolAr
retrieve(aClass, aKey=None)
Definition PyKernel.py:110

◆ lateInitialize()

StatusCode TRTDigitizationTool::lateInitialize ( const EventContext & ctx)
private

Definition at line 225 of file TRTDigitizationTool.cxx.

225 {
226
227 // setup the RNGs which are only used in the first event
228 CLHEP::HepRandomEngine *fakeCondRndmEngine = getRandomEngine("TRT_FakeConditions", m_randomSeedOffset, ctx);
229 CLHEP::HepRandomEngine *noiseInitRndmEngine = getRandomEngine("TRT_Noise", m_randomSeedOffset, ctx);
230 CLHEP::HepRandomEngine *noiseElecRndmEngine = getRandomEngine("TRT_Noise_Electronics", m_randomSeedOffset, ctx);
231 CLHEP::HepRandomEngine *noiseThreshRndmEngine = getRandomEngine("TRT_Noise_ThresholdFluctuations", m_randomSeedOffset, ctx);
232 CLHEP::HepRandomEngine *noiseElecResetRndmEngine = getRandomEngine("TRT_ElectronicsNoiseReset", m_randomSeedOffset, ctx);
233 m_first_event=false;
234
235 //Resuming initialiazation. Section below had to be moved into event loop due to dependence on conditions data
236
237 TRTElectronicsNoise *electronicsNoise(nullptr);
238 if ( m_settings->noiseInUnhitStraws() || m_settings->noiseInSimhits() ) {
239 electronicsNoise = new TRTElectronicsNoise(m_settings, noiseElecRndmEngine);
240 }
241 // ElectronicsProcessing is needed for the regular straw processing,
242 // but also for the noise (it assumes ownership of electronicsnoise )
243 m_pElectronicsProcessing = new TRTElectronicsProcessing( m_settings, electronicsNoise );
244
245 m_pDigConditions = new TRTDigCondFakeMap(m_settings,
246 m_manager,
247 m_trt_id,
249 m_sumTool);
250
251 m_pDigConditions->initialize(fakeCondRndmEngine);
252
253 if ( m_settings->noiseInUnhitStraws() || m_settings->noiseInSimhits() ) {
254
255 // In short this next constructor does 3 things;
256 // i) tunes the amplitude of the electronics noise,
257 // ii) creates a pool of noise digits,
258 // iii) figures out exact low thresholds needed to reproduce actual
259 // straw noise-frequencies:
260 m_pNoise = new TRTNoise( m_settings,
261 m_manager,
262 noiseInitRndmEngine,
263 noiseElecRndmEngine,
264 noiseThreshRndmEngine,
265 noiseElecResetRndmEngine,
268 electronicsNoise,
269 m_trt_id,
271 m_sumTool);
272
273 ATH_MSG_DEBUG ( "Average straw noise level is " << m_pDigConditions->strawAverageNoiseLevel() );
274
275 } else {
276 m_pNoise = nullptr;
277 }
278
279 ITRT_PAITool *TRTpaiToolXe = &(* m_TRTpaiToolXe);
280 ITRT_PAITool *TRTpaiToolAr = &(* m_TRTpaiToolAr);
281 ITRT_PAITool *TRTpaiToolKr = &(* m_TRTpaiToolKr);
282
283 ITRT_SimDriftTimeTool *pTRTsimdrifttimetool = &(*m_TRTsimdrifttimetool);
284
285 const ITRT_CalDbTool* calDbTool = nullptr;
286 if (m_settings->getT0FromData()) {
287 calDbTool = m_calDbTool.get();
288 }
290 new TRTProcessingOfStraw( m_settings,
291 m_manager,
292 TRTpaiToolXe,
293 pTRTsimdrifttimetool,
295 m_pNoise,
298 m_trt_id,
299 TRTpaiToolAr,
300 TRTpaiToolKr,
301 calDbTool);
302
303 ATH_MSG_INFO ( "Gas Property: UseGasMix is " << m_UseGasMix );
304
305 return StatusCode::SUCCESS;
306}
Gaudi::Property< unsigned long int > m_randomSeedOffset
Gaudi::Property< int > m_UseGasMix
CLHEP::HepRandomEngine * getRandomEngine(const std::string &streamName, const EventContext &ctx) const
ToolHandle< ITRT_StrawStatusSummaryTool > m_sumTool

◆ mergeEvent()

StatusCode TRTDigitizationTool::mergeEvent ( const EventContext & ctx)
finaloverridevirtual

called at the end of the subevts loop. Not (necessarily) able to access SubEvents

Reimplemented from IPileUpTool.

Definition at line 602 of file TRTDigitizationTool.cxx.

602 {
603 std::vector<std::pair<unsigned int, int> >::iterator ii(m_seen.begin());
604 std::vector<std::pair<unsigned int, int> >::iterator ee(m_seen.end());
605 while (ii != ee) {
606 ATH_MSG_DEBUG( "mergeEvent: there are " << ii->first << " events in bunch xing " << ii->second );
607 ++ii;
608 }
609
610 // Set the RNGs to use for this event.
611 CLHEP::HepRandomEngine *rndmEngine = getRandomEngine("", ctx);
612 CLHEP::HepRandomEngine *elecNoiseRndmEngine = getRandomEngine("TRT_ElectronicsNoise", ctx);
613 CLHEP::HepRandomEngine *noiseRndmEngine = getRandomEngine("TRT_NoiseDigitPool", ctx);
614 CLHEP::HepRandomEngine *strawRndmEngine = getRandomEngine("TRT_ProcessStraw", ctx);
615 CLHEP::HepRandomEngine *elecProcRndmEngine = getRandomEngine("TRT_ThresholdFluctuations", ctx);
616 CLHEP::HepRandomEngine *paiRndmEngine = getRandomEngine("TRT_PAI", ctx);
617
618 if (m_first_event) {
619 if(this->lateInitialize(ctx).isFailure()) {
620 ATH_MSG_FATAL ( "lateInitialize method failed!" );
621 return StatusCode::FAILURE;
622 }
623 }
624
626
627 ATH_MSG_DEBUG ( "TRTDigitization::execute()" );
628
630 ATH_CHECK(m_trtrdo_container.record(std::make_unique<TRT_RDO_Container>(m_trt_id->straw_layer_hash_max())));
631 ATH_MSG_DEBUG ( " TRT_RDO_Container created " );
632 if (not m_trtrdo_container.isValid()) {
633 ATH_MSG_FATAL ( "Container " << m_outputRDOCollName.key() << " could not be registered in StoreGate !" );
634 return StatusCode::FAILURE;
635 } else {
636 ATH_MSG_DEBUG ( "Container " << m_outputRDOCollName.key() << " registered in StoreGate" );
637 }
638
639 //Set of all hitid's with simhits (used for noise simulation).
640 std::set<int> sim_hitids;
641 std::set<Identifier> simhitsIdentifiers;
642
643 // Process the Hits straw by straw:
644 // get the iterator pairs for given straw
645 ATH_CHECK(this->processStraws(ctx, *m_thpctrt, sim_hitids, simhitsIdentifiers, rndmEngine, strawRndmEngine, elecProcRndmEngine, elecNoiseRndmEngine,paiRndmEngine));
646
647 delete m_thpctrt;
649 m_trtHitCollList.clear();
650 // no more hits
651
652 //Noise in straws without simhits:
653 if (m_settings->noiseInUnhitStraws()) {
654 const unsigned int numberOfDigitsBeforeNoise(m_vDigits.size());
655
656 m_pNoise->appendPureNoiseToProperDigits(m_vDigits, sim_hitids, noiseRndmEngine);
657 if (m_settings->doCrosstalk()) {
658 m_pNoise->appendCrossTalkNoiseToProperDigits(m_vDigits, simhitsIdentifiers,m_TRTStrawNeighbourSvc, noiseRndmEngine);
659 }
660
661 ATH_MSG_DEBUG ( " Number of digits " << m_vDigits.size() << " (" << m_vDigits.size()-numberOfDigitsBeforeNoise << " of those are pure noise)" );
662
664
665 } else {
666 ATH_MSG_DEBUG ( " Number of digits " << m_vDigits.size() );
667 };
668
669 // All digits are ready.
670 // We just need to convert to relevant identifiers and output to storegate.
671
672 if (createAndStoreRDOs().isFailure()) {
673 ATH_MSG_FATAL ( "createAndStoreRDOs() failed!" );
674 return StatusCode::FAILURE;
675 }
676 else {
677 ATH_MSG_DEBUG ( "createAndStoreRDOs() succeeded" );
678 }
679
680 return StatusCode::SUCCESS;
681}
AtlasHitsVector< TRTUncompressedHit > TRTUncompressedHitCollection
std::vector< std::pair< unsigned int, int > > m_seen
StatusCode processStraws(const EventContext &ctx, TimedHitCollection< TRTUncompressedHit > &thpctrt, std::set< int > &sim_hitids, std::set< Identifier > &simhitsIdentifiers, CLHEP::HepRandomEngine *rndmEngine, CLHEP::HepRandomEngine *strawRndmEngine, CLHEP::HepRandomEngine *elecProcRndmEngine, CLHEP::HepRandomEngine *elecNoiseRndmEngine, CLHEP::HepRandomEngine *paiRndmEngine)
TimedHitCollection< TRTUncompressedHit > * m_thpctrt
StatusCode lateInitialize(const EventContext &ctx)
std::vector< TRTUncompressedHitCollection * > m_trtHitCollList
static void sortDigits(std::vector< TRTDigit > &digitVect)
Definition TRTNoise.cxx:447
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
void * ptr(T *p)
Definition SGImplSvc.cxx:74

◆ prepareEvent()

StatusCode TRTDigitizationTool::prepareEvent ( const EventContext & ctx,
const unsigned int nInputEvents )
finaloverridevirtual

return false if not interested in certain xing times (in ns) implemented by default in PileUpToolBase as FirstXing<=bunchXing<=LastXing

Reimplemented from IPileUpTool.

Definition at line 170 of file TRTDigitizationTool.cxx.

171{
172 m_vDigits.clear();
173 m_trtHitCollList.clear();
174 m_thpctrt = new TimedHitCollection<TRTUncompressedHit>();
176 return StatusCode::SUCCESS;
177}

◆ processAllSubEvents()

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

Perform digitization:

  • Get G4 hits
  • Process hits straw by straw [call ProcessStraw() ]
  • Add noise
  • Create RDO collection

Implements IPileUpTool.

Definition at line 461 of file TRTDigitizationTool.cxx.

461 {
462
463 // Set the RNGs to use for this event.
464 CLHEP::HepRandomEngine *rndmEngine = getRandomEngine("", ctx);
465 CLHEP::HepRandomEngine *elecNoiseRndmEngine = getRandomEngine("TRT_ElectronicsNoise", ctx);
466 CLHEP::HepRandomEngine *noiseRndmEngine = getRandomEngine("TRT_NoiseDigitPool", ctx);
467 CLHEP::HepRandomEngine *strawRndmEngine = getRandomEngine("TRT_ProcessStraw", ctx);
468 CLHEP::HepRandomEngine *elecProcRndmEngine = getRandomEngine("TRT_ThresholdFluctuations", ctx);
469 CLHEP::HepRandomEngine *paiRndmEngine = getRandomEngine("TRT_PAI", ctx);
470
471 if (m_first_event) {
472 if(this->lateInitialize(ctx).isFailure()) {
473 ATH_MSG_FATAL ( "lateInitialize method failed!" );
474 return StatusCode::FAILURE;
475 }
476 }
477
479
480 ATH_MSG_DEBUG ( "TRTDigitizationTool::processAllSubEvents()" );
481
483 ATH_CHECK(m_trtrdo_container.record(std::make_unique<TRT_RDO_Container>(m_trt_id->straw_layer_hash_max())));
484 ATH_MSG_DEBUG ( " TRT_RDO_Container created " );
485
486 if (not m_trtrdo_container.isValid()) {
487 ATH_MSG_FATAL ( "Container " << m_outputRDOCollName.key() << " could not be registered in StoreGate !" );
488 return StatusCode::FAILURE;
489 }else {
490 ATH_MSG_DEBUG ( "Container " << m_outputRDOCollName.key() << " registered in StoreGate" );
491 }
492
493 m_vDigits.clear();
494
495 // get the container(s)
497 TimedHitCollection<TRTUncompressedHit> thpctrt;
498 // In case of single hits container just load the collection using read handles
500 SG::ReadHandle<TRTUncompressedHitCollection> hitCollection(m_hitsContainerKey, ctx);
501 if (!hitCollection.isValid()) {
502 ATH_MSG_ERROR("Could not get TRTUncompressedHitCollection container " << hitCollection.name() << " from store " << hitCollection.store());
503 return StatusCode::FAILURE;
504 }
505
506 // Define Hit Collection
507 thpctrt.reserve(1);
508
509 // create a new hits collection
510 thpctrt.insert(0, hitCollection.cptr());
511 ATH_MSG_DEBUG("TRTUncompressedHitCollection found with " << hitCollection->size() << " hits");
512 }
513 else {
514 TimedHitCollList hitCollList; // this is a list<pair<time_t, DataLink<TRTUncompressedHitCollection> > >
515 unsigned int numberOfSimHits(0);
516 if ( !(m_mergeSvc->retrieveSubEvtsData(m_dataObjectName, hitCollList, numberOfSimHits).isSuccess()) && hitCollList.empty() ) {
517 ATH_MSG_ERROR ( "Could not fill TimedHitCollList" );
518 return StatusCode::FAILURE;
519 } else {
520 ATH_MSG_DEBUG ( hitCollList.size() << " TRTUncompressedHitCollections with key " << m_dataObjectName << " found" );
521 }
522
523 // Define Hit Collection
524 thpctrt.reserve(numberOfSimHits);
525
526 //now merge all collections into one
527 TimedHitCollList::iterator iColl(hitCollList.begin());
528 TimedHitCollList::iterator endColl(hitCollList.end() );
530 // loop on the hit collections
531 while ( iColl != endColl ) {
532 //decide if this event will be processed depending on HardScatterSplittingMode & bunchXing
534 if (m_HardScatterSplittingMode == 1 && m_HardScatterSplittingSkipper ) { ++iColl; continue; }
536 const TRTUncompressedHitCollection* p_collection(iColl->second);
537 thpctrt.insert(iColl->first, p_collection);
538 ATH_MSG_DEBUG ( "TRTUncompressedHitCollection found with " << p_collection->size() << " hits" );
539 ++iColl;
540 }
541 }
542
543 //Set of all hitid's with simhits (used for noise simulation).
544 std::set<int> sim_hitids;
545 std::set<Identifier> simhitsIdentifiers;
546
547 // Process the Hits straw by straw: get the iterator pairs for given straw
548 ATH_CHECK(this->processStraws(ctx, thpctrt, sim_hitids, simhitsIdentifiers, rndmEngine, strawRndmEngine, elecProcRndmEngine, elecNoiseRndmEngine,paiRndmEngine));
549
550 // no more hits
551
552 //Noise in straws without simhits:
553 if (m_settings->noiseInUnhitStraws()) {
554 const int numberOfDigitsBeforeNoise(m_vDigits.size());
555
556 m_pNoise->appendPureNoiseToProperDigits(m_vDigits, sim_hitids, noiseRndmEngine);
557 if (m_settings->doCrosstalk()) {
558 m_pNoise->appendCrossTalkNoiseToProperDigits(m_vDigits, simhitsIdentifiers,m_TRTStrawNeighbourSvc, noiseRndmEngine);
559 }
560
561 ATH_MSG_DEBUG ( " Number of digits " << m_vDigits.size() << " (" << m_vDigits.size()-numberOfDigitsBeforeNoise << " of those are pure noise)" );
562
564
565 } else {
566 ATH_MSG_DEBUG ( " Number of digits " << m_vDigits.size() );
567 }
568
569 // All digits are ready.
570 // We just need to convert to relevant identifiers and output to storegate.
571
572 if (createAndStoreRDOs().isFailure()) {
573 ATH_MSG_FATAL ( "createAndStoreRDOs() failed!" );
574 return StatusCode::FAILURE;
575 }
576 else {
577 ATH_MSG_DEBUG ( "createAndStoreRDOs() succeeded" );
578 }
579
580 return StatusCode::SUCCESS;
581}
Gaudi::Property< int > m_HardScatterSplittingMode
void reserve(unsigned int numberOfHits)
reserve a timed vector numberOfHits in size.
void insert(const PileUpTimeEventIndex &timeEventIndex, const AtlasHitsVector< HIT > *inputCollection)
std::list< value_t > type
type of the collection of timed data object

◆ processBunchXing()

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

called for each active bunch-crossing to process current SubEvents bunchXing is in ns

Implements IPileUpTool.

Definition at line 180 of file TRTDigitizationTool.cxx.

182 {
183
184 m_seen.emplace_back(std::distance(bSubEvents,eSubEvents), bunchXing);
185 //decide if this event will be processed depending on HardScatterSplittingMode & bunchXing
186 if (m_HardScatterSplittingMode == 2 && !m_HardScatterSplittingSkipper ) { m_HardScatterSplittingSkipper = true; return StatusCode::SUCCESS; }
187 if (m_HardScatterSplittingMode == 1 && m_HardScatterSplittingSkipper ) { return StatusCode::SUCCESS; }
189
190
191 //TRTUncompressedHit
192
194 TimedHitCollList hitCollList;
195
196 if (!(m_mergeSvc->retrieveSubSetEvtData(m_dataObjectName, hitCollList, bunchXing,
197 bSubEvents, eSubEvents).isSuccess()) &&
198 hitCollList.empty()) {
199 ATH_MSG_ERROR("Could not fill TimedHitCollList");
200 return StatusCode::FAILURE;
201 } else {
202 ATH_MSG_VERBOSE(hitCollList.size() << " TRTUncompressedHitCollection with key " <<
203 m_dataObjectName << " found");
204 }
205
206 TimedHitCollList::iterator iColl(hitCollList.begin());
207 TimedHitCollList::iterator endColl(hitCollList.end());
208
209 for( ; iColl != endColl; ++iColl){
210 TRTUncompressedHitCollection *hitCollPtr = new TRTUncompressedHitCollection(*iColl->second);
211 PileUpTimeEventIndex timeIndex(iColl->first);
212 ATH_MSG_DEBUG("TRTUncompressedHitCollection found with " << hitCollPtr->size() <<
213 " hits");
214 ATH_MSG_VERBOSE("time index info. time: " << timeIndex.time()
215 << " index: " << timeIndex.index()
216 << " type: " << timeIndex.type());
217 m_thpctrt->insert(timeIndex, hitCollPtr);
218 m_trtHitCollList.push_back(hitCollPtr);
219 }
220
221 return StatusCode::SUCCESS;
222}
size_type size() const

◆ processStraws()

StatusCode TRTDigitizationTool::processStraws ( const EventContext & ctx,
TimedHitCollection< TRTUncompressedHit > & thpctrt,
std::set< int > & sim_hitids,
std::set< Identifier > & simhitsIdentifiers,
CLHEP::HepRandomEngine * rndmEngine,
CLHEP::HepRandomEngine * strawRndmEngine,
CLHEP::HepRandomEngine * elecProcRndmEngine,
CLHEP::HepRandomEngine * elecNoiseRndmEngine,
CLHEP::HepRandomEngine * paiRndmEngine )
private

Definition at line 309 of file TRTDigitizationTool.cxx.

316 {
317
318 // Create a map for the SDO
319 SG::WriteHandle<InDetSimDataCollection> simDataMap(m_outputSDOCollName, ctx);
320
322 MagField::AtlasFieldCache fieldCache;
323 if (m_settings->useMagneticFieldMap()) {
324
325 // Get field cache object
326 SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx};
327 const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
328
329 if (fieldCondObj == nullptr) {
330 ATH_MSG_ERROR("Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
331 return StatusCode::FAILURE;
332 }
333 fieldCondObj->getInitializedCache (fieldCache);
334 }
335
337
338
339 ATH_CHECK(simDataMap.record(std::make_unique<InDetSimDataCollection>() ));
340
341 // Register the map into StoreGate
342 if (not simDataMap.isValid()) {
343 ATH_MSG_FATAL ( "InDetSimData map " << m_outputSDOCollName.key() << " could not be registered in StoreGate !" );
344 return StatusCode::FAILURE;
345 } else {
346 ATH_MSG_DEBUG ( "InDetSimData map " << m_outputSDOCollName.key() << " registered in StoreGate" );
347 }
348
349 m_cosmicEventPhase = 0.0;
350 if (m_settings->doCosmicTimingPit()) {
352 };
353
354 // Create a vector of deposits
355 std::vector<InDetSimData::Deposit> depositVector(100);
356
357 // loop over all straws
359 while (thpctrt.nextDetectorElement(i, e)) {
360
361 int hitID((*i)->GetHitID()); // Get hitID
362
363 // evtIndex should be 0 for main event and 1,2,3,... for pileup events:
364 // (event Id is a property of the TimedHitPtr)
365 HepMcParticleLink::index_type evtIndex(i->eventId());
366
367 if ( m_settings->noiseInUnhitStraws() ) {
368 sim_hitids.insert(hitID);
369 }
370 //Safeguard against a rare case of hitID corruption found by Davide:
371 if ( hitID & 0xc0000000 ) {
372 ATH_MSG_ERROR ( "Hit ID not Valid (" << MSG::hex << hitID << ")" << MSG::dec );
373 continue;
374 }
375
376 // Convert hitID to Identifier
377 IdentifierHash IdHash;
378 Identifier idLayer;
379 bool identifierOK;
380 Identifier idStraw(getIdentifier(hitID, IdHash, idLayer, identifierOK));
381 if ( !identifierOK ) {
382 ATH_MSG_ERROR ( "Ignoring simhits with suspicious identifier (1)" );
383 continue;
384 }
385
386 //For crosstalk sim
387 simhitsIdentifiers.insert(idStraw);
388
390 // Fill a vector of deposits
391 depositVector.clear();
392 depositVector.reserve(std::distance(i,e));
393 for (TimedHitCollection<TRTUncompressedHit>::const_iterator hit_iter(i); hit_iter != e; ++hit_iter ) {
394 // create a new deposit
395 InDetSimData::Deposit deposit( HepMcParticleLink::getRedirectedLink((*hit_iter)->particleLink(), hit_iter->eventId(), ctx), // This link should now correctly resolve to the TruthEvent McEventCollection in the main StoreGateSvc.
396 (*hit_iter)->GetEnergyDeposit() );
398 continue;
399 }
400 ATH_MSG_VERBOSE ( "Deposit: trackID " << deposit.first << " energyDeposit " << deposit.second );
401 depositVector.emplace_back(std::move(deposit));
402 }
403
404 const TimedHitPtr<TRTUncompressedHit>& theHit(*i);
405 const double bunchCrossingTime(hitTime(theHit) - static_cast<double>(theHit->GetGlobalTime()));
406
407 // Add the simdata object to the map.
408 if ( !depositVector.empty() &&
409 (evtIndex == 0 || ((*i)->GetKineticEnergy()>m_minpileuptruthEkin)) &&
410 (bunchCrossingTime < m_maxCrossingTimeSDO) && (bunchCrossingTime > m_minCrossingTimeSDO) ) {
411 simDataMap->try_emplace(idStraw, std::move(depositVector));
412 }
414
415 // Digitization for the given straw
416 TRTDigit digit_straw;
417
419 //if (m_settings->doCosmicTimingPit()) {
420 // if ( StatusCode::SUCCESS == evtStore()->retrieve(m_ComTime,"ComTime")) {
421 // ATH_MSG_VERBOSE ( "Found tool for cosmic timing: ComTime" );
422 // } else {
423 // ATH_MSG_ERROR ( "Did not find tool needed for cosmic timing: ComTime" );
424 // }
425 //}
426
427 // if StatusHT == 6 thats emulate argon, ==7 that's emulate krypton
428 bool emulateArFlag = m_sumTool->getStatusHT(idStraw, ctx) == 6;
429 bool emulateKrFlag = m_sumTool->getStatusHT(idStraw, ctx) == 7;
430 const int statusHT = m_sumTool->getStatusHT(idStraw, ctx);
431 m_pProcessingOfStraw->ProcessStraw(fieldCache, i, e, digit_straw,
433 m_cosmicEventPhase, //m_ComTime,
435 emulateArFlag,
436 emulateKrFlag,
437 strawRndmEngine,
438 elecProcRndmEngine,
439 elecNoiseRndmEngine,
440 paiRndmEngine);
441
442 // Print out the digits etc (for debugging)
443 //int mstrw = digit_straw.GetStrawID();
444 //unsigned int mword = digit_straw.GetDigit();
445 //std::cout << "AJB " << mstrw << ":" << mword << std::endl;
446 //print_mword_properties(mword);
447 //std::cout << "AJB "; bits24(mword);
448 //std::cout << "AJB "; bits27(mword);
449
450 // finally push back the output digit.
451 if ( digit_straw.GetDigit() ) {
452 m_vDigits.push_back(digit_straw);
453 }
454
455 } // end of straw loop
456
457 return StatusCode::SUCCESS;
458}
float hitTime(const AFP_SIDSimHit &hit)
void getInitializedCache(MagField::AtlasFieldCache &cache) const
get B field cache for evaluation as a function of 2-d or 3-d position.
std::pair< HepMcParticleLink, float > Deposit
Gaudi::Property< int > m_vetoPileUpTruthLinks
unsigned GetDigit() const
Get digit.
Definition TRTDigit.h:27
static double getCosmicEventPhase(CLHEP::HepRandomEngine *rndmEngine)
bool nextDetectorElement(const_iterator &b, const_iterator &e)
sets an iterator range with the hits of current detector element returns a bool when done
TimedVector::const_iterator const_iterator
bool ignoreTruthLink(const T &p, bool vetoPileUp)
Helper function for SDO creation in PileUpTools.
int StrawGasType(int statusHT, int useGasMix, MsgStream *log)
MsgStream & msg
Definition testRead.cxx:32

◆ resetFilter() [1/2]

virtual void IPileUpTool::resetFilter ( )
pure virtualinherited

reset the filter

◆ resetFilter() [2/2]

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() [1/2]

virtual bool IPileUpTool::toProcess ( int bunchXing) const
pure virtualinherited

flags whether this tool is "live" for bunchXing (time in ns) implemented by default in PileUpToolBase as FirstXing<=bunchXing<=LastXing

◆ toProcess() [2/2]

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_alreadyPrintedPDGcodeWarning

bool TRTDigitizationTool::m_alreadyPrintedPDGcodeWarning {false}
private

Definition at line 160 of file TRTDigitizationTool.h.

160{false};

◆ m_calDbTool

ToolHandle<ITRT_CalDbTool> TRTDigitizationTool::m_calDbTool {this, "InDetTRTCalDbTool", "TRT_CalDbTool", ""}
private

Definition at line 127 of file TRTDigitizationTool.h.

127{this, "InDetTRTCalDbTool", "TRT_CalDbTool", ""};

◆ m_cosmicEventPhase

double TRTDigitizationTool::m_cosmicEventPhase {0.0}
private

Definition at line 165 of file TRTDigitizationTool.h.

165{0.0}; // local replacement for the comTime service

◆ m_dataObjectName

std::string TRTDigitizationTool::m_dataObjectName {""}
private

Definition at line 136 of file TRTDigitizationTool.h.

136{""};

◆ m_fieldCacheCondObjInputKey

SG::ReadCondHandleKey<AtlasFieldCacheCondObj> TRTDigitizationTool::m_fieldCacheCondObjInputKey
private
Initial value:
{this, "AtlasFieldCacheCondObj", "fieldCondObj",
"Name of the Magnetic Field conditions object key"}

Definition at line 132 of file TRTDigitizationTool.h.

132 {this, "AtlasFieldCacheCondObj", "fieldCondObj",
133 "Name of the Magnetic Field conditions object key"};

◆ m_filterPassed

bool PileUpToolBase::m_filterPassed {true}
protectedinherited

Definition at line 60 of file PileUpToolBase.h.

60{true};

◆ m_first_event

bool TRTDigitizationTool::m_first_event {true}
private

Definition at line 171 of file TRTDigitizationTool.h.

171{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_HardScatterSplittingMode

Gaudi::Property<int> TRTDigitizationTool::m_HardScatterSplittingMode {this, "HardScatterSplittingMode", 0, ""}
private

Definition at line 143 of file TRTDigitizationTool.h.

143{this, "HardScatterSplittingMode", 0, ""};

◆ m_HardScatterSplittingSkipper

bool TRTDigitizationTool::m_HardScatterSplittingSkipper {false}
private

Definition at line 173 of file TRTDigitizationTool.h.

173{false};

◆ m_hitsContainerKey

SG::ReadHandleKey<TRTUncompressedHitCollection> TRTDigitizationTool::m_hitsContainerKey {this, "DataObjectName", "TRTUncompressedHits", "Data Object Name"}
private

Definition at line 135 of file TRTDigitizationTool.h.

135{this, "DataObjectName", "TRTUncompressedHits", "Data Object Name"};

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

const InDetDD::TRT_DetectorManager* TRTDigitizationTool::m_manager {}
private

Definition at line 156 of file TRTDigitizationTool.h.

156{};

◆ m_maxCrossingTimeSDO

double TRTDigitizationTool::m_maxCrossingTimeSDO {0.0}
private

Definition at line 162 of file TRTDigitizationTool.h.

162{0.0};

◆ m_mergeSvc

ServiceHandle<PileUpMergeSvc> TRTDigitizationTool::m_mergeSvc {this, "MergeSvc", "PileUpMergeSvc", "Merge service"}
private

Definition at line 128 of file TRTDigitizationTool.h.

128{this, "MergeSvc", "PileUpMergeSvc", "Merge service"};

◆ m_minCrossingTimeSDO

double TRTDigitizationTool::m_minCrossingTimeSDO {0.0}
private

Definition at line 161 of file TRTDigitizationTool.h.

161{0.0};

◆ m_minpileuptruthEkin

double TRTDigitizationTool::m_minpileuptruthEkin {0.0}
private

Definition at line 163 of file TRTDigitizationTool.h.

163{0.0};

◆ m_onlyUseContainerName

Gaudi::Property<bool> TRTDigitizationTool::m_onlyUseContainerName {this, "OnlyUseContainerName", true, "Don't use the ReadHandleKey directly. Just extract the container name from it."}
private

Definition at line 134 of file TRTDigitizationTool.h.

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

◆ m_outputRDOCollName

SG::WriteHandleKey<TRT_RDO_Container> TRTDigitizationTool::m_outputRDOCollName {this,"OutputObjectName","TRT_RDOs","WHK Output Object name"}
private

name of the output RDOs.

Definition at line 137 of file TRTDigitizationTool.h.

137{this,"OutputObjectName","TRT_RDOs","WHK Output Object name"};

◆ m_outputSDOCollName

SG::WriteHandleKey<InDetSimDataCollection> TRTDigitizationTool::m_outputSDOCollName {this,"OutputSDOName","TRT_SDO_Map","WHK Output SDO container name"}
private

name of the output SDOs.

Definition at line 138 of file TRTDigitizationTool.h.

138{this,"OutputSDOName","TRT_SDO_Map","WHK Output SDO container name"};

◆ m_particleTable

const HepPDT::ParticleDataTable* TRTDigitizationTool::m_particleTable {}
private

Definition at line 169 of file TRTDigitizationTool.h.

169{};

◆ m_pDigConditions

TRTDigCondBase* TRTDigitizationTool::m_pDigConditions {}
private

Definition at line 153 of file TRTDigitizationTool.h.

153{};

◆ m_pElectronicsProcessing

TRTElectronicsProcessing* TRTDigitizationTool::m_pElectronicsProcessing {}
private

Definition at line 151 of file TRTDigitizationTool.h.

151{};

◆ m_pNoise

TRTNoise* TRTDigitizationTool::m_pNoise {}
private

Definition at line 154 of file TRTDigitizationTool.h.

154{};

◆ m_pProcessingOfStraw

TRTProcessingOfStraw* TRTDigitizationTool::m_pProcessingOfStraw {}
private

Definition at line 152 of file TRTDigitizationTool.h.

152{};

◆ m_ppSvc

ServiceHandle<IPartPropSvc> TRTDigitizationTool::m_ppSvc {this, "PartPropSvc", "PartPropSvc"}
private

Handle on the particle property service.

Definition at line 168 of file TRTDigitizationTool.h.

168{this, "PartPropSvc", "PartPropSvc"};

◆ m_printOverrideableSettings

Gaudi::Property<bool> TRTDigitizationTool::m_printOverrideableSettings {this, "PrintOverrideableSettings", false, "Print overrideable settings"}
private

Definition at line 141 of file TRTDigitizationTool.h.

141{this, "PrintOverrideableSettings", false, "Print overrideable settings"};

◆ m_printUsedDigSettings

Gaudi::Property<bool> TRTDigitizationTool::m_printUsedDigSettings {this, "PrintDigSettings", true, "Print ditigization settings"}
private

Definition at line 142 of file TRTDigitizationTool.h.

142{this, "PrintDigSettings", true, "Print ditigization settings"};

◆ m_randomSeedOffset

Gaudi::Property<unsigned long int> TRTDigitizationTool::m_randomSeedOffset {this, "RandomSeedOffset", 678910, ""}
private

Definition at line 145 of file TRTDigitizationTool.h.

145{this, "RandomSeedOffset", 678910, ""};

◆ m_rndmSvc

ServiceHandle<IAthRNGSvc> TRTDigitizationTool::m_rndmSvc {this, "RndmSvc", "AthRNGSvc", ""}
private

Random number service.

Definition at line 129 of file TRTDigitizationTool.h.

129{this, "RndmSvc", "AthRNGSvc", ""};

◆ m_seen

std::vector<std::pair<unsigned int, int> > TRTDigitizationTool::m_seen
private

Definition at line 149 of file TRTDigitizationTool.h.

◆ m_settings

TRTDigSettings* TRTDigitizationTool::m_settings {}
private

Definition at line 147 of file TRTDigitizationTool.h.

147{};

◆ m_sumTool

ToolHandle<ITRT_StrawStatusSummaryTool> TRTDigitizationTool::m_sumTool {this, "InDetTRTStrawStatusSummaryTool", "TRT_StrawStatusSummaryTool", ""}
private

Definition at line 126 of file TRTDigitizationTool.h.

126{this, "InDetTRTStrawStatusSummaryTool", "TRT_StrawStatusSummaryTool", ""};

◆ m_thpctrt

TimedHitCollection<TRTUncompressedHit>* TRTDigitizationTool::m_thpctrt {}
private

Definition at line 159 of file TRTDigitizationTool.h.

159{};

◆ m_trt_id

const TRT_ID* TRTDigitizationTool::m_trt_id {}
private

TRT Id Helper.

Definition at line 157 of file TRTDigitizationTool.h.

157{};

◆ m_trtHitCollList

std::vector<TRTUncompressedHitCollection*> TRTDigitizationTool::m_trtHitCollList
private

Definition at line 158 of file TRTDigitizationTool.h.

◆ m_TRTpaiToolAr

ToolHandle<ITRT_PAITool> TRTDigitizationTool::m_TRTpaiToolAr {this, "PAI_Tool_Ar", "TRT_PAI_Process_Ar", "The PAI model for ionisation in the TRT Ar gas"}
private

Definition at line 123 of file TRTDigitizationTool.h.

123{this, "PAI_Tool_Ar", "TRT_PAI_Process_Ar", "The PAI model for ionisation in the TRT Ar gas"};

◆ m_TRTpaiToolKr

ToolHandle<ITRT_PAITool> TRTDigitizationTool::m_TRTpaiToolKr {this, "PAI_Tool_Kr", "TRT_PAI_Process_Kr", "The PAI model for ionisation in the TRT Kr gas"}
private

Definition at line 124 of file TRTDigitizationTool.h.

124{this, "PAI_Tool_Kr", "TRT_PAI_Process_Kr", "The PAI model for ionisation in the TRT Kr gas"};

◆ m_TRTpaiToolXe

ToolHandle<ITRT_PAITool> TRTDigitizationTool::m_TRTpaiToolXe {this, "PAI_Tool_Xe", "TRT_PAI_Process_Xe", "The PAI model for ionisation in the TRT Xe gas"}
private

Configurable properties.

Definition at line 122 of file TRTDigitizationTool.h.

122{this, "PAI_Tool_Xe", "TRT_PAI_Process_Xe", "The PAI model for ionisation in the TRT Xe gas"};

◆ m_trtrdo_container

SG::WriteHandle<TRT_RDO_Container> TRTDigitizationTool::m_trtrdo_container
private

Definition at line 139 of file TRTDigitizationTool.h.

◆ m_TRTsimdrifttimetool

ToolHandle<ITRT_SimDriftTimeTool> TRTDigitizationTool::m_TRTsimdrifttimetool {this, "SimDriftTimeTool", "TRT_SimDriftTimeTool", "Drift time versus distance (r-t-relation) for TRT straws"}
private

Definition at line 125 of file TRTDigitizationTool.h.

125{this, "SimDriftTimeTool", "TRT_SimDriftTimeTool", "Drift time versus distance (r-t-relation) for TRT straws"};

◆ m_TRTStrawNeighbourSvc

ServiceHandle<ITRT_StrawNeighbourSvc> TRTDigitizationTool::m_TRTStrawNeighbourSvc {this, "TRT_StrawNeighbourSvc", "TRT_StrawNeighbourSvc", ""}
private

Definition at line 130 of file TRTDigitizationTool.h.

130{this, "TRT_StrawNeighbourSvc", "TRT_StrawNeighbourSvc", ""};

◆ m_UseGasMix

Gaudi::Property<int> TRTDigitizationTool::m_UseGasMix {this, "UseGasMix", 0, ""}
private

Definition at line 144 of file TRTDigitizationTool.h.

144{this, "UseGasMix", 0, ""};

◆ m_vDigits

std::vector<TRTDigit> TRTDigitizationTool::m_vDigits
private

Vector of all digits.

Definition at line 150 of file TRTDigitizationTool.h.

◆ m_vetoPileUpTruthLinks

Gaudi::Property<int> PileUpToolBase::m_vetoPileUpTruthLinks
protectedinherited
Initial value:
{this, "VetoPileUpTruthLinks", true,
"Ignore links to suppressed pile-up truth"}

Definition at line 58 of file PileUpToolBase.h.

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

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