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

#include <TRTFastDigitizationTool.h>

Inheritance diagram for TRTFastDigitizationTool:

Public Member Functions

 TRTFastDigitizationTool (const std::string &type, const std::string &name, const IInterface *parent)
StatusCode mergeEvent (const EventContext &ctx)
 called at the end of the subevts loop.
StatusCode processBunchXing (int bunchXing, SubEventIterator bSubEvents, SubEventIterator eSubEvents)
 called for each active bunch-crossing to process current SubEvents bunchXing is in ns
StatusCode prepareEvent (const EventContext &ctx, const unsigned int)
 return false if not interested in certain xing times (in ns) implemented by default in PileUpToolBase as FirstXing<=bunchXing<=LastXing
StatusCode processAllSubEvents (const EventContext &ctx)
 alternative interface which uses the PileUpMergeSvc to obtain all the required SubEvents.
virtual StatusCode initialize ()
 Initialize.
StatusCode finalize ()
 Finalize.

Private Member Functions

StatusCode initializeNumericalConstants ()
StatusCode setNumericalConstants ()
StatusCode produceDriftCircles (const EventContext &ctx, CLHEP::HepRandomEngine *rndmEngine, TimedHitCollection< TRTUncompressedHit > &thpctrt)
Identifier getIdentifier (int hitID, IdentifierHash &hash, Identifier &layer_id, bool &status) const
StatusCode createAndStoreRIOs (const EventContext &ctx, CLHEP::HepRandomEngine *rndmEngine)
HepGeom::Point3D< double > getGlobalPosition (const TimedHitPtr< TRTUncompressedHit > &hit)
bool isArgonStraw (const Identifier &straw_id) const
int gasType (const Identifier &straw_id) const
double getProbHT (const EventContext &ctx, int particleEncoding, float kineticEnergy, const Identifier &straw_id, double driftRadiusLoc, double hitGlobalPosition) const
double particleMass (int i) const

Static Private Member Functions

static double getDriftRadiusFromXYZ (const TimedHitPtr< TRTUncompressedHit > &hit)
static double HTProbabilityElectron_high_pt (double eta)
static double HTProbabilityElectron_low_pt (double eta)
static double HTProbabilityMuon_5_20 (double eta)
static double HTProbabilityMuon_60 (double eta)
static double strawEfficiency (double driftRadius, int BEC=0)
static double correctionHT (double momentum, Trk::ParticleHypothesis hypothesis)

Private Attributes

PublicToolHandle< ITRT_DriftFunctionToolm_trtDriftFunctionTool {this, "TRT_DriftFunctionTool", "TRT_DriftFunctionTool/FatrasTrtDriftFunctionTool"}
bool m_useTrtElectronPidTool {true}
PublicToolHandle< Trk::ITRT_ElectronPidToolm_trtElectronPidTool {this, "TRT_ElectronPidTool", "InDet::TRT_ElectronPidToolRun2/InDetTRT_ElectronPidTool"}
ToolHandle< ITRT_StrawStatusSummaryToolm_trtStrawStatusSummaryTool {this, "TRT_StrawStatusSummaryTool", "InDetTRTStrawStatusSummaryTool"}
ServiceHandle< PileUpMergeSvcm_mergeSvc {this, "MergeSvc", "PileUpMergeSvc"}
ServiceHandle< IAthRNGSvcm_rndmSvc {this, "RndmSvc", "AthRNGSvc", ""}
 Random number service.
StringProperty m_randomEngineName {this, "RandomStreamName", "FatrasRnd"}
StringProperty m_trtHitCollectionKey {this, "trtHitCollectionName", "TRTUncompressedHits"}
std::vector< TRTUncompressedHitCollection * > m_trtHitCollList
SG::WriteHandleKey< InDet::TRT_DriftCircleContainer > m_trtDriftCircleContainerKey {this, "trtDriftCircleContainer", "TRT_DriftCircles"}
SG::WriteHandleKey< PRD_MultiTruthCollectionm_trtPrdTruthKey {this, "trtPrdMultiTruthCollection", "PRD_MultiTruthTRT"}
TimedHitCollection< TRTUncompressedHit > * m_thpctrt {}
std::multimap< Identifier, InDet::TRT_DriftCircle * > m_driftCircleMap
const InDetDD::TRT_DetectorManagerm_trt_manager {}
const TRT_IDm_trt_id {}
IntegerProperty m_HardScatterSplittingMode {this, "HardScatterSplittingMode", 0, "Control pileup & signal splitting"}
bool m_HardScatterSplittingSkipper {false}
BooleanProperty m_useEventInfo {this, "useEventInfo", false}
SG::ReadHandleKey< xAOD::EventInfom_EventInfoKey { this, "EventInfoKey", "EventInfo", "SG key for EventInfo" }
FloatProperty m_NCollPerEvent {this, "NCollPerEvent", 30}
double m_trtTailFraction {0.0}
double m_trtSigmaDriftRadiusTail {0.0}
double m_trtHighProbabilityBoostBkg {1.}
double m_trtHighProbabilityBoostEle {1.}
double m_cFit [8][5] {}

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 59 of file TRTFastDigitizationTool.h.

Constructor & Destructor Documentation

◆ TRTFastDigitizationTool()

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

Definition at line 53 of file TRTFastDigitizationTool.cxx.

56 : PileUpToolBase( type, name, parent )
57{
58}
PileUpToolBase(const std::string &type, const std::string &name, const IInterface *parent)

Member Function Documentation

◆ correctionHT()

double TRTFastDigitizationTool::correctionHT ( double momentum,
Trk::ParticleHypothesis hypothesis )
staticprivate

Definition at line 1029 of file TRTFastDigitizationTool.cxx.

1030{
1031 const double par[][ 6 ] = { { 5.96038, 0.797671, 1.28832, -2.02763, -2.24630, 21.6857 }, // pion
1032 { 0.522755, 0.697029, -3.90787, 6.32952, 1.06347, 3.51847 } // electron
1033 };
1034
1035 int j = ( hypothesis == Trk::electron ? 1 : 0 );
1036 double x0 = momentum * 1.e-3;
1037 double x1 = 1. / ( x0 + par[ j ][ 0 ] );
1038 double x2 = log( x0 ) * x1;
1039 double value = par[ j ][ 1 ] + par[ j ][ 2 ] * x1 + par[ j ][ 3 ] * x1 * x1 + par[ j ][ 4 ] * x2 + par[ j ][ 5 ] * x1 * x2;
1040 return ( momentum > 1500. ? value : 1. );
1041}
float j(const xAOD::IParticle &, const xAOD::TrackMeasurementValidation &hit, const Eigen::Matrix3d &jab_inv)

◆ createAndStoreRIOs()

StatusCode TRTFastDigitizationTool::createAndStoreRIOs ( const EventContext & ctx,
CLHEP::HepRandomEngine * rndmEngine )
private

Definition at line 493 of file TRTFastDigitizationTool.cxx.

494{
495 // Create OUTPUT TRT_DriftCircleContainer and register it in StoreGate
496 SG::WriteHandle<InDet::TRT_DriftCircleContainer > trtDriftCircleContainer(m_trtDriftCircleContainerKey, ctx);
497 trtDriftCircleContainer = std::make_unique< InDet::TRT_DriftCircleContainer >( m_trt_id->straw_layer_hash_max() );
498 if ( !trtDriftCircleContainer.isValid() ) {
499 ATH_MSG_FATAL( "Could not create TRT_DriftCircleContainer" );
500 return StatusCode::FAILURE;
501 }
502 ATH_MSG_DEBUG( "InDet::TRT_DriftCircleContainer " << trtDriftCircleContainer.name() << " registered in StoreGate" );
503
504 using DriftCircleMapItr = std::multimap<Identifier, InDet::TRT_DriftCircle *>::iterator;
505 using HashMapItr = std::multimap<IdentifierHash, InDet::TRT_DriftCircle *>::iterator;
506
507 // empiric parameterization of the probability to merge to LT hits into a HT hit as a function of the number of collisions
508 // TL - I first determined the value of highTRMergeProb which gives a good
509 // agreeement with full simulation as being 0.04 for mu=10 and 0.12 for mu=60;
510 // I decided to use the functional form a*pow(mu,b) to describe the mu
511 // dependence; solving the 2x2 system gives a=0.01 and b=0.61.
512 float highTRMergeProb = 0.012*pow(m_NCollPerEvent,0.61);
513
514 std::multimap< IdentifierHash, InDet::TRT_DriftCircle * > idHashMap;
515
516 for ( DriftCircleMapItr itr = m_driftCircleMap.begin() ; itr != m_driftCircleMap.end(); itr = m_driftCircleMap.upper_bound( itr->first ) ) {
517
518 const Identifier trtid = itr->first;
519 std::pair< DriftCircleMapItr, DriftCircleMapItr > hitsInOneStraw = m_driftCircleMap.equal_range( trtid );
520 unsigned int numberOfHitsInOneStraw = m_driftCircleMap.count( itr->first );
521 InDet::TRT_DriftCircle *trtDriftCircle = ( hitsInOneStraw.first )->second;
522 if (!trtDriftCircle) continue;
523 IdentifierHash hash = trtDriftCircle->detectorElement()->identifyHash();
524
525 // delete all driftCircles in TRT straw excert the first one, see ATLPHYSVAL-395
526 bool isHT=false;
527 for ( DriftCircleMapItr itr2 = ++( hitsInOneStraw.first ); itr2 != hitsInOneStraw.second; ++itr2 ) {
528 InDet::TRT_DriftCircle *trtDriftCircle2 = itr2->second;
529 if (!trtDriftCircle2) continue;
530 if(trtDriftCircle2->getWord() & maskHT) isHT = true;
531 delete trtDriftCircle2;
532 }
533
534 // set the word of the first hit to high threshold with some probability, unless any of the hits is HT already
535 if( !(trtDriftCircle->getWord() & maskHT) && !isHT && numberOfHitsInOneStraw > 1) {
536 unsigned int newword = 0;
537 if(highTRMergeProb*(numberOfHitsInOneStraw-1) > CLHEP::RandFlat::shoot( rndmEngine )) newword += 1 << (26-9);
538 const unsigned int newword2 = newword;
539 const Amg::Vector2D locpos = trtDriftCircle->localPosition();
540 const std::vector<Identifier> &rdolist = trtDriftCircle->rdoList();
541 const InDetDD::TRT_BaseElement* detEl = trtDriftCircle->detectorElement();
542 InDet::TRT_DriftCircle* trtDriftCircle2 = new InDet::TRT_DriftCircle(
543 trtid,
544 locpos,
545 std::vector<Identifier>(rdolist),
546 Amg::MatrixX(trtDriftCircle->localCovariance()),
547 detEl,
548 newword2);
549 idHashMap.insert(
550 std::multimap<IdentifierHash, InDet::TRT_DriftCircle*>::value_type(
551 hash, trtDriftCircle2));
552 delete trtDriftCircle;
553 }
554 else{
555 idHashMap.insert( std::multimap<IdentifierHash, InDet::TRT_DriftCircle * >::value_type( hash, trtDriftCircle ) );
556 }
557
558 }
559
560 for ( HashMapItr itr = idHashMap.begin(); itr != idHashMap.end(); itr = idHashMap.upper_bound( itr->first ) ) {
561
562 std::pair< HashMapItr, HashMapItr > itrPair = idHashMap.equal_range( itr->first );
563
564 const InDetDD::TRT_BaseElement *trtBaseElement = ( itrPair.first )->second->detectorElement();
565 IdentifierHash hash = trtBaseElement->identifyHash();
566
567 InDet::TRT_DriftCircleCollection *trtDriftCircleCollection = new InDet::TRT_DriftCircleCollection( hash );
568 trtDriftCircleCollection->setIdentifier( trtBaseElement->identify() );
569
570 for ( HashMapItr itr2 = itrPair.first; itr2 != itrPair.second; ++itr2 ) {
571 InDet::TRT_DriftCircle *trtDriftCircle = itr2->second;
572 trtDriftCircle->setHashAndIndex( trtDriftCircleCollection->identifyHash(), trtDriftCircleCollection->size() );
573 trtDriftCircleCollection->push_back( trtDriftCircle );
574 }
575
576 if ( trtDriftCircleContainer->addCollection( trtDriftCircleCollection, hash ).isFailure() ) {
577 ATH_MSG_WARNING( "Could not add collection to Identifyable container" );
578 }
579 }
580
581 idHashMap.clear();
582 m_driftCircleMap.clear();
583
584 return StatusCode::SUCCESS;
585}
#define ATH_MSG_FATAL(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
static const unsigned int maskHT
virtual IdentifierHash identifyHash() const override final
identifier hash
virtual Identifier identify() const override final
identifier of this detector element:
unsigned int getWord() const
returns the TRT dataword
virtual const InDetDD::TRT_BaseElement * detectorElement() const override final
return the detector element corresponding to this PRD
Trk::PrepRawDataCollection< TRT_DriftCircle > TRT_DriftCircleCollection
SG::WriteHandleKey< InDet::TRT_DriftCircleContainer > m_trtDriftCircleContainerKey
std::multimap< Identifier, InDet::TRT_DriftCircle * > m_driftCircleMap
const Amg::Vector2D & localPosition() const
return the local position reference
void setHashAndIndex(unsigned short collHash, unsigned short objIndex)
TEMP for testing: might make some classes friends later ...
const Amg::MatrixX & localCovariance() const
return const ref to the error matrix
const std::vector< Identifier > & rdoList() const
return the List of rdo identifiers (pointers)
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
Eigen::Matrix< double, 2, 1 > Vector2D
constexpr int pow(int x)
Definition conifer.h:27

◆ filterPassed()

virtual bool PileUpToolBase::filterPassed ( ) const
inlineoverridevirtualinherited

dummy implementation of passing filter

Definition at line 49 of file PileUpToolBase.h.

49{ return m_filterPassed; }

◆ finalize()

StatusCode TRTFastDigitizationTool::finalize ( )

Finalize.

Definition at line 1044 of file TRTFastDigitizationTool.cxx.

1045{
1046 ATH_MSG_DEBUG( "TRTFastDigitizationTool::finalize()" );
1047
1048 return StatusCode::SUCCESS;
1049}

◆ gasType()

int TRTFastDigitizationTool::gasType ( const Identifier & straw_id) const
private

Definition at line 727 of file TRTFastDigitizationTool.cxx.

728{
729 // getStatusHT returns enum EStatus { Undefined, Dead, Good, Xenon, Argon, Krypton } // from 20.7.1
730 // see InnerDetector/InDetConditions/TRT_ConditionsData/TRT_ConditionsData/StrawStatus.h
731 // TRT representation of gasType = Xenon: 0, Argon: 1, Krypton: 2
732
733 int status = m_trtStrawStatusSummaryTool->getStatusHT( straw_id, Gaudi::Hive::currentContext());
734
735 if ( status == 2 || status == 3 )
736 return 0;
737 else if ( status == 1 || status == 4 )
738 return 1;
739 else if ( status == 5 )
740 return 2;
741 else {
742 ATH_MSG_WARNING( "TRTFastDigitizationTool::gasType() getStatusHT = " << status << ", must be in [1..5] range" );
743 return -1;
744 }
745
746}
ToolHandle< ITRT_StrawStatusSummaryTool > m_trtStrawStatusSummaryTool
status
Definition merge.py:16

◆ getDriftRadiusFromXYZ()

double TRTFastDigitizationTool::getDriftRadiusFromXYZ ( const TimedHitPtr< TRTUncompressedHit > & hit)
staticprivate

Definition at line 588 of file TRTFastDigitizationTool.cxx.

589{
590 HepGeom::Vector3D< double > vecEnter( hit->GetPreStepX(), hit->GetPreStepY(), hit->GetPreStepZ() );
591 HepGeom::Vector3D< double > vecExit( hit->GetPostStepX(), hit->GetPostStepY(), hit->GetPostStepZ() );
592
593 HepGeom::Vector3D< double > vecDir = vecExit - vecEnter;
594 static const HepGeom::Vector3D< double > vecStraw( 0., 0., 1. );
595
596 vecDir = vecDir.unit();
597
598 double driftRadius = 0.;
599 if ( std::abs( vecDir.x() ) < 1.0e-6 && std::abs( vecDir.y() ) < 1.0e-6 ) {
600 driftRadius = vecEnter.perp();
601 }
602 else {
603 double a = vecEnter.dot( vecStraw );
604 double b = vecEnter.dot( vecDir );
605 double c = vecDir.dot( vecStraw );
606
607 double paramStraw = ( a - b*c ) / ( 1. - c*c );
608 double paramTrack = -( b - a*c ) / ( 1. - c*c );
609
610 HepGeom::Vector3D<double> vecClosestAppr = vecEnter + paramTrack * vecDir - paramStraw * vecStraw;
611 driftRadius = vecClosestAppr.mag();
612 }
613
614 return driftRadius;
615}
static Double_t a
float GetPostStepY() const
float GetPostStepZ() const
float GetPreStepZ() const
float GetPreStepY() const
float GetPreStepX() const
float GetPostStepX() const
@ driftRadius
trt, straws
Definition ParamDefs.h:53

◆ getGlobalPosition()

HepGeom::Point3D< double > TRTFastDigitizationTool::getGlobalPosition ( const TimedHitPtr< TRTUncompressedHit > & hit)
private

Definition at line 676 of file TRTFastDigitizationTool.cxx.

677{
678 int hitID = hit->GetHitID();
679 const HepGeom::Point3D< double > hitPreStep( hit->GetPreStepX(), hit->GetPreStepY(), hit->GetPreStepZ() );
680
681 const int mask( 0x0000001F );
682 const int word_shift( 5 );
683
684 if ( hitID & 0x00200000 ) { // endcap
685 int strawID = hitID & mask;
686 int planeID = ( hitID >> word_shift ) & mask;
687 int sectorID = ( hitID >> 2 * word_shift ) & mask;
688 int wheelID = ( hitID >> 3 * word_shift ) & mask;
689 int trtID = ( hitID >> 4 * word_shift );
690
691 // change trtID (which is 2/3 for endcaps) to use 0/1 in getEndcapElement
692 trtID = ( trtID == 3 ? 0 : 1 );
693
694 const InDetDD::TRT_EndcapElement *endcapElement = m_trt_manager->getEndcapElement( trtID, wheelID, planeID, sectorID );
695 if ( endcapElement ) {
696 return endcapElement->getAbsoluteTransform( strawID ) * hitPreStep;
697 }
698
699 }
700 else { // barrel
701 int strawID = hitID & mask;
702 int layerID = ( hitID >> word_shift ) & mask;
703 int moduleID = ( hitID >> 2 * word_shift ) & mask;
704 int ringID = ( hitID >> 3 * word_shift ) & mask;
705 int trtID = ( hitID >> 4 * word_shift );
706
707 const InDetDD::TRT_BarrelElement *barrelElement = m_trt_manager->getBarrelElement( trtID, ringID, moduleID, layerID );
708 if ( barrelElement ) {
709 return barrelElement->getAbsoluteTransform( strawID ) * hitPreStep;
710 }
711
712 }
713
714 ATH_MSG_WARNING( "Could not find global coordinate of a straw - drifttime calculation will be inaccurate" );
715 return { 0., 0., 0. };
716}
const HepGeom::Transform3D getAbsoluteTransform(int straw) const
This is an alias to strawTransform(int straw).
const InDetDD::TRT_DetectorManager * m_trt_manager

◆ getIdentifier()

Identifier TRTFastDigitizationTool::getIdentifier ( int hitID,
IdentifierHash & hash,
Identifier & layer_id,
bool & status ) const
private

Definition at line 618 of file TRTFastDigitizationTool.cxx.

619{
620 status = true;
621
622 Identifier straw_id;
623
624 const int mask( 0x0000001F );
625 const int word_shift( 5 );
626
627 if ( hitID & 0x00200000 ) { // endcap
628 int strawID = hitID & mask;
629 int planeID = ( hitID >> word_shift ) & mask;
630 int sectorID = ( hitID >> 2 * word_shift ) & mask;
631 int wheelID = ( hitID >> 3 * word_shift ) & mask;
632 int trtID = ( hitID >> 4 * word_shift );
633
634 // change trtID (which is 2/3 for endcaps) to use 0/1 in getEndcapElement
635 trtID = ( trtID == 3 ? 0 : 1 );
636
637 const InDetDD::TRT_EndcapElement *endcapElement = m_trt_manager->getEndcapElement( trtID, wheelID, planeID, sectorID );
638 if ( endcapElement ) {
639 hash = endcapElement->identifyHash();
640 layer_id = endcapElement->identify();
641 straw_id = m_trt_id->straw_id( layer_id, strawID );
642 }
643 else {
644 ATH_MSG_ERROR( "Could not find detector element for endcap identifier with (ipos,iwheel,isector,iplane,istraw) = ("
645 << trtID << ", " << wheelID << ", " << sectorID << ", " << planeID << ", " << strawID << ")" << endmsg
646 << "If this happens very rarely, don't be alarmed (it is a Geant4 'feature')" << endmsg
647 << "If it happens a lot, you probably have misconfigured geometry in the sim. job." );
648 status = false;
649 }
650
651 }
652 else { // barrel
653 int strawID = hitID & mask;
654 int layerID = ( hitID >> word_shift ) & mask;
655 int moduleID = ( hitID >> 2 * word_shift ) & mask;
656 int ringID = ( hitID >> 3 * word_shift ) & mask;
657 int trtID = ( hitID >> 4 * word_shift );
658
659 const InDetDD::TRT_BarrelElement *barrelElement = m_trt_manager->getBarrelElement( trtID, ringID, moduleID, layerID );
660 if ( barrelElement ) {
661 hash = barrelElement->identifyHash();
662 layer_id = barrelElement->identify();
663 straw_id = m_trt_id->straw_id( layer_id, strawID );
664 } else {
665 ATH_MSG_ERROR( "Could not find detector element for barrel identifier with (ipos,iring,imod,ilayer,istraw) = ("
666 << trtID << ", " << ringID << ", " << moduleID << ", " << layerID << ", " << strawID << ")" );
667 status = false;
668 }
669
670 }
671
672 return straw_id;
673}
#define endmsg
#define ATH_MSG_ERROR(x)

◆ getProbHT()

double TRTFastDigitizationTool::getProbHT ( const EventContext & ctx,
int particleEncoding,
float kineticEnergy,
const Identifier & straw_id,
double driftRadiusLoc,
double hitGlobalPosition ) const
private

Definition at line 749 of file TRTFastDigitizationTool.cxx.

749 {
750
752
753 switch( abs( particleEncoding ) ) {
754
755 case 11:
756 hypothesis = Trk::electron;
757 break;
758
759 case 13:
760 hypothesis = Trk::muon;
761 break;
762
763 case 321:
764 hypothesis = Trk::kaon;
765 break;
766
767 case 211:
768 default:
769 hypothesis = Trk::pion;
770 break;
771
772 } // end of switch
773
774 float pTrk = sqrt( kineticEnergy * kineticEnergy + 2. * kineticEnergy * Trk::ParticleMasses::mass[ hypothesis ] );
775 if ( pTrk < 250. || pTrk > 7000000. ) return 0.;
776
777 int layerOrWheel = m_trt_id->layer_or_wheel( straw_id );
778 int strawLayer = m_trt_id->straw_layer( straw_id );
779
780 // trtPart = Barrel: 0, EndcapA: 1, EndcapB: 2
781 int trtPart = 0;
782 if ( abs( m_trt_id->barrel_ec( straw_id ) ) == 2 ) trtPart = ( ( layerOrWheel < 6 ) ? 1 : 2 );
783
784 // strawLayer = Barrel: 0-72, Endcap A-side: 0-95 (16 layers in 6 modules), EndcapB: 0-63 (8 layers in 8 modules)
785 if ( trtPart == 0 ) { // Barrel
786 if ( layerOrWheel ) strawLayer += 19 + ( layerOrWheel == 1 ? 0 : 24 );
787 }
788 else if ( trtPart == 1 ) { // EndcapA
789 strawLayer += 16 * layerOrWheel;
790 }
791 else { // EndcapB
792 strawLayer += 8 * ( layerOrWheel - 6 );
793 }
794
795 const int strawLayerMax[] = { 72, 95, 63 };
796 if ( strawLayer > strawLayerMax[ trtPart ] || strawLayer < 0 ) {
797 ATH_MSG_WARNING( "strawLayer was outside allowed range: trtPart = " << trtPart << ", strawLayer = " << strawLayer );
798 return 0.;
799 }
800
801 const double hitGlobalPositionMin[] = { 0., 630., 630. };
802 const double hitGlobalPositionMax[] = { 720., 1030., 1030. };
803
804 if ( std::abs(hitGlobalPosition) < hitGlobalPositionMin[ trtPart ] ) {
805 ATH_MSG_WARNING( "hitGlobalPosition was below allowed range (will be adjusted): trtPart = " << trtPart << ", hitGlobalPosition = " << hitGlobalPosition );
806 hitGlobalPosition = copysign(hitGlobalPositionMin[ trtPart ] + 0.001,hitGlobalPosition);
807 }
808 if ( std::abs(hitGlobalPosition) > hitGlobalPositionMax[ trtPart ] ) {
809 ATH_MSG_WARNING( "hitGlobalPosition was above allowed range (will be adjusted): trtPart = " << trtPart << ", hitGlobalPosition = " << hitGlobalPosition );
810 hitGlobalPosition = copysign(hitGlobalPositionMax[ trtPart ] - 0.001,hitGlobalPosition);
811 }
812
813 if ( rTrkWire > 2.2 ) rTrkWire = 2.175;
814
815 double Occupancy = 0.11+0.014*m_NCollPerEvent;
816
817 double probHT = m_trtElectronPidTool->probHTRun2( ctx, pTrk, hypothesis, trtPart, gasType( straw_id ), strawLayer, hitGlobalPosition, rTrkWire, Occupancy );
818 if ( probHT == 0.5 || probHT == 1. ) probHT = 0.;
819 if(hypothesis == Trk::electron) probHT *= 1.3;
820
821 return probHT;
822}
int gasType(const Identifier &straw_id) const
PublicToolHandle< Trk::ITRT_ElectronPidTool > m_trtElectronPidTool
@ strawLayer
Definition HitInfo.h:81
constexpr double mass[PARTICLEHYPOTHESES]
the array of masses
ParticleHypothesis
Enumeration for Particle hypothesis respecting the interaction with material.

◆ HTProbabilityElectron_high_pt()

double TRTFastDigitizationTool::HTProbabilityElectron_high_pt ( double eta)
staticprivate

Definition at line 825 of file TRTFastDigitizationTool.cxx.

826{
827 constexpr std::array< double, 14 > bins = { 0.05, 0.15, 0.25, 0.35, 0.45, 0.55, 0.65, 0.75, 0.85, 1.05, 1.4, 1.5, 1.6, 1.82 };
828 constexpr std::array< double, 15 > probability = { 0.210, // [ 0., 0.05 ]
829 0.218, // [ 0.05, 0.15 ]
830 0.226, // [ 0.15, 0.25 ]
831 0.234, // [ 0.25, 0.35 ]
832 0.242, // [ 0.35, 0.45 ]
833 0.250, // [ 0.45, 0.55 ]
834 0.258, // [ 0.55, 0.65 ]
835 0.266, // [ 0.65, 0.75 ]
836 0.274, // [ 0.75, 0.85 ]
837 0.280, // [ 0.85, 1.05 ]
838 0.265, // [ 1.05, 1.40 ]
839 0.275, // [ 1.40, 1.50 ]
840 0.295, // [ 1.50, 1.60 ]
841 0.330, // [ 1.60, 1.82 ]
842 0.365 // > 1.82
843 };
844
845 return probability[ std::distance( bins.begin(), std::lower_bound( bins.begin(), bins.end(), std::abs( eta ) ) ) ];
846}
Scalar eta() const
pseudorapidity method
static const std::vector< std::string > bins

◆ HTProbabilityElectron_low_pt()

double TRTFastDigitizationTool::HTProbabilityElectron_low_pt ( double eta)
staticprivate

Definition at line 849 of file TRTFastDigitizationTool.cxx.

850{
851 constexpr std::array< double, 14 > bins = { 0.05, 0.15, 0.25, 0.35, 0.45, 0.55, 0.65, 0.75, 0.85, 1.05, 1.4, 1.5, 1.6, 1.82 };
852 constexpr std::array< double, 15 > probability = { 0.210, // [ 0., 0.05 ]
853 0.218, // [ 0.05, 0.15 ]
854 0.226, // [ 0.15, 0.25 ]
855 0.234, // [ 0.25, 0.35 ]
856 0.242, // [ 0.35, 0.45 ]
857 0.250*0.88, // [ 0.45, 0.55 ]
858 0.258*0.88, // [ 0.55, 0.65 ]
859 0.266*0.88, // [ 0.65, 0.75 ]
860 0.274*0.88, // [ 0.75, 0.85 ]
861 0.280*0.88, // [ 0.85, 1.05 ]
862 0.265*0.88, // [ 1.05, 1.40 ]
863 0.275*0.88, // [ 1.40, 1.50 ]
864 0.295*0.88, // [ 1.50, 1.60 ]
865 0.330*0.88, // [ 1.60, 1.82 ]
866 0.365 // > 1.82
867 };
868
869 return probability[ std::distance( bins.begin(), std::lower_bound( bins.begin(), bins.end(), std::abs( eta ) ) ) ];
870}

◆ HTProbabilityMuon_5_20()

double TRTFastDigitizationTool::HTProbabilityMuon_5_20 ( double eta)
staticprivate

Definition at line 873 of file TRTFastDigitizationTool.cxx.

874{
875 constexpr std::array< double, 41 > bins = { -2.05, -1.95, -1.85, -1.75, -1.65, -1.55, -1.45, -1.35, -1.25, -1.15, -1.05, -0.95, -0.85,
876 -0.75, -0.65, -0.55, -0.45, -0.35, -0.25, -0.15, -0.05, 0.05, 0.15, 0.25, 0.35, 0.45, 0.55, 0.65,
877 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95
878 };
879
880 constexpr std::array< double, 42 > probability = { 0.04466501, // < -2.05
881 0.05624099, // [ -2.05, -1.95 ]
882 0.05715916, // [ -1.95, -1.85 ]
883 0.05758092, // [ -1.85, -1.75 ]
884 0.05713670, // [ -1.75, -1.65 ]
885 0.05320733, // [ -1.65, -1.55 ]
886 0.05447418, // [ -1.55, -1.45 ]
887 0.05460775, // [ -1.45, -1.35 ]
888 0.05443998, // [ -1.35, -1.25 ]
889 0.05671015, // [ -1.25, -1.15 ]
890 0.06043842, // [ -1.15, -1.05 ]
891 0.06098093, // [ -1.05, -0.95 ]
892 0.06124813, // [ -0.95, -0.85 ]
893 0.05757168, // [ -0.85, -0.75 ]
894 0.05230566, // [ -0.75, -0.65 ]
895 0.05136644, // [ -0.65, -0.55 ]
896 0.05021782, // [ -0.55, -0.45 ]
897 0.05046960, // [ -0.45, -0.35 ]
898 0.04935652, // [ -0.35, -0.25 ]
899 0.05074021, // [ -0.25, -0.15 ]
900 0.04959613, // [ -0.15, -0.05 ]
901 0.05090863, // [ -0.05, 0.05 ]
902 0.05185448, // [ 0.05, 0.15 ]
903 0.05083610, // [ 0.15, 0.25 ]
904 0.05113032, // [ 0.25, 0.35 ]
905 0.05158703, // [ 0.35, 0.45 ]
906 0.05255587, // [ 0.45, 0.55 ]
907 0.05343067, // [ 0.55, 0.65 ]
908 0.05695859, // [ 0.65, 0.75 ]
909 0.06233243, // [ 0.75, 0.85 ]
910 0.06418306, // [ 0.85, 0.95 ]
911 0.06027916, // [ 0.95, 1.05 ]
912 0.05693816, // [ 1.05, 1.15 ]
913 0.05514142, // [ 1.15, 1.25 ]
914 0.05557067, // [ 1.25, 1.35 ]
915 0.05436613, // [ 1.35, 1.45 ]
916 0.05360627, // [ 1.45, 1.55 ]
917 0.05266918, // [ 1.55, 1.65 ]
918 0.05237728, // [ 1.65, 1.75 ]
919 0.05439599, // [ 1.75, 1.85 ]
920 0.05630533, // [ 1.85, 1.95 ]
921 0.06067052 // > 1.95
922 };
923
924 return probability[ std::distance( bins.begin(), std::lower_bound( bins.begin(), bins.end(), eta ) ) ];
925}

◆ HTProbabilityMuon_60()

double TRTFastDigitizationTool::HTProbabilityMuon_60 ( double eta)
staticprivate

Definition at line 928 of file TRTFastDigitizationTool.cxx.

929{
930 constexpr std::array< double, 41 > bins = { -2.05, -1.95, -1.85, -1.75, -1.65, -1.55, -1.45, -1.35, -1.25, -1.15, -1.05, -0.95, -0.85,
931 -0.75, -0.65, -0.55, -0.45, -0.35, -0.25, -0.15, -0.05, 0.05, 0.15, 0.25, 0.35, 0.45, 0.55, 0.65,
932 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65, 1.75, 1.85, 1.95
933 };
934
935 constexpr std::array< double, 42 > probability = { 0.058, // < -2.05
936 0.06316120, // [ -2.05, -1.95 ]
937 0.06552401, // [ -1.95, -1.85 ]
938 0.06462226, // [ -1.85, -1.75 ]
939 0.06435722, // [ -1.75, -1.65 ]
940 0.06404993, // [ -1.65, -1.55 ]
941 0.06324595, // [ -1.55, -1.45 ]
942 0.06318947, // [ -1.45, -1.35 ]
943 0.06381197, // [ -1.35, -1.25 ]
944 0.06366957, // [ -1.25, -1.15 ]
945 0.06561866, // [ -1.15, -1.05 ]
946 0.07307306, // [ -1.05, -0.95 ]
947 0.07682944, // [ -0.95, -0.85 ]
948 0.07430728, // [ -0.85, -0.75 ]
949 0.06897150, // [ -0.75, -0.65 ]
950 0.06393667, // [ -0.65, -0.55 ]
951 0.06049334, // [ -0.55, -0.45 ]
952 0.05774767, // [ -0.45, -0.35 ]
953 0.05544898, // [ -0.35, -0.25 ]
954 0.05456561, // [ -0.25, -0.15 ]
955 0.05378204, // [ -0.15, -0.05 ]
956 0.05196537, // [ -0.05, 0.05 ]
957 0.05391259, // [ 0.05, 0.15 ]
958 0.05474811, // [ 0.15, 0.25 ]
959 0.05734638, // [ 0.25, 0.35 ]
960 0.05959219, // [ 0.35, 0.45 ]
961 0.06266565, // [ 0.45, 0.55 ]
962 0.06806432, // [ 0.55, 0.65 ]
963 0.07347304, // [ 0.65, 0.75 ]
964 0.07654586, // [ 0.75, 0.85 ]
965 0.07328693, // [ 0.85, 0.95 ]
966 0.06541597, // [ 0.95, 1.05 ]
967 0.06348016, // [ 1.05, 1.15 ]
968 0.06322222, // [ 1.15, 1.25 ]
969 0.06428555, // [ 1.25, 1.35 ]
970 0.06299531, // [ 1.35, 1.45 ]
971 0.06469499, // [ 1.45, 1.55 ]
972 0.06560785, // [ 1.55, 1.65 ]
973 0.06777871, // [ 1.65, 1.75 ]
974 0.06843851, // [ 1.75, 1.85 ]
975 0.06727150, // [ 1.85, 1.95 ]
976 0.05935051 // > 1.95
977 };
978
979 return probability[ std::distance( bins.begin(), std::lower_bound( bins.begin(), bins.end(), eta ) ) ];
980}

◆ initialize()

StatusCode TRTFastDigitizationTool::initialize ( )
virtual

Initialize.

Reimplemented from PileUpToolBase.

Definition at line 61 of file TRTFastDigitizationTool.cxx.

62{
63 ATH_MSG_DEBUG( "TRTFastDigitizationTool::initialize()" );
64
65 // Get Random Service
66 CHECK( m_rndmSvc.retrieve() );
67
68 // Get the TRT Detector Manager
69 CHECK( detStore()->retrieve( m_trt_manager, "TRT" ) );
70 ATH_MSG_DEBUG( "Retrieved TRT_DetectorManager with version " << m_trt_manager->getVersion().majorNum() );
71
72 CHECK( detStore()->retrieve( m_trt_id, "TRT_ID" ) );
73
74 // PileUp Merge Service
75 CHECK( m_mergeSvc.retrieve() );
76
77 // Argon / Xenon
79 ATH_MSG_DEBUG( "Retrieved TRT_StrawStatusSummaryTool " << m_trtStrawStatusSummaryTool );
80
81 // Check data object name
82 if ( m_trtHitCollectionKey == "" ) {
83 ATH_MSG_FATAL( "Property trtHitCollectionName not set!" );
84 return StatusCode::FAILURE;
85 } else {
86 ATH_MSG_DEBUG( "Input hits: " << m_trtHitCollectionKey );
87 }
88
89 ATH_CHECK(m_trtPrdTruthKey.initialize());
91
92 CHECK( m_trtDriftFunctionTool.retrieve() );
93
95 CHECK( m_trtElectronPidTool.retrieve() );
96 }
97
99
101
102 return sc;
103}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define CHECK(...)
Evaluate an expression and check for errors.
static Double_t sc
SG::WriteHandleKey< PRD_MultiTruthCollection > m_trtPrdTruthKey
PublicToolHandle< ITRT_DriftFunctionTool > m_trtDriftFunctionTool
SG::ReadHandleKey< xAOD::EventInfo > m_EventInfoKey
ServiceHandle< IAthRNGSvc > m_rndmSvc
Random number service.
ServiceHandle< PileUpMergeSvc > m_mergeSvc
::StatusCode StatusCode
StatusCode definition for legacy code.

◆ initializeNumericalConstants()

StatusCode TRTFastDigitizationTool::initializeNumericalConstants ( )
private

Definition at line 161 of file TRTFastDigitizationTool.cxx.

161 {
162
163 m_trtTailFraction = 4.7e-4; // part of the fraction in Tails
164 m_trtSigmaDriftRadiusTail = 4./sqrt(12.); // sigma of one TRT straw in R (Tail) [mm]
165
166 return StatusCode::SUCCESS;
167}

◆ isArgonStraw()

bool TRTFastDigitizationTool::isArgonStraw ( const Identifier & straw_id) const
private

Definition at line 719 of file TRTFastDigitizationTool.cxx.

720{
721 // TRTCond::StrawStatus::Good == Xenon
722 // return ( m_trtStrawStatusSummarySvc->getStatusHT( straw_id ) != TRTCond::StrawStatus::Good ? true : false );
723 return ( gasType( straw_id ) == 1 );
724}

◆ mergeEvent()

StatusCode TRTFastDigitizationTool::mergeEvent ( const EventContext & ctx)

called at the end of the subevts loop.

Not (necessarily) able to access SubEvents

Definition at line 466 of file TRTFastDigitizationTool.cxx.

466 {
467
468 ATH_MSG_DEBUG( "TRTFastDigitizationTool::mergeEvent()" );
469
470 // Set the RNG to use for this event.
471 ATHRNG::RNGWrapper* rngWrapper = m_rndmSvc->getEngine(this, m_randomEngineName);
472 const std::string rngName = name()+m_randomEngineName;
473 rngWrapper->setSeed( rngName, ctx );
474 CLHEP::HepRandomEngine *rndmEngine = rngWrapper->getEngine(ctx);
475
476 // Process the Hits straw by straw: get the iterator pairs for given straw
477 if ( m_thpctrt != nullptr ) {
478 CHECK( this->produceDriftCircles(ctx, rndmEngine, *m_thpctrt) );
479 }
480
481 // Clean up temporary containers
482 delete m_thpctrt;
484 m_trtHitCollList.clear();
485
486 CHECK( this->createAndStoreRIOs(ctx, rndmEngine) );
487 ATH_MSG_DEBUG ( "createAndStoreRIOs() succeeded" );
488
489 return StatusCode::SUCCESS;
490}
AtlasHitsVector< TRTUncompressedHit > TRTUncompressedHitCollection
void setSeed(const std::string &algName, const EventContext &ctx)
Set the random seed using a string (e.g.
Definition RNGWrapper.h:154
CLHEP::HepRandomEngine * getEngine(const EventContext &ctx) const
Retrieve the random engine corresponding to the provided EventContext.
Definition RNGWrapper.h:108
StatusCode produceDriftCircles(const EventContext &ctx, CLHEP::HepRandomEngine *rndmEngine, TimedHitCollection< TRTUncompressedHit > &thpctrt)
TimedHitCollection< TRTUncompressedHit > * m_thpctrt
std::vector< TRTUncompressedHitCollection * > m_trtHitCollList
StatusCode createAndStoreRIOs(const EventContext &ctx, CLHEP::HepRandomEngine *rndmEngine)
void * ptr(T *p)
Definition SGImplSvc.cxx:74

◆ particleMass()

double TRTFastDigitizationTool::particleMass ( int i) const
private

◆ prepareEvent()

StatusCode TRTFastDigitizationTool::prepareEvent ( const EventContext & ctx,
const unsigned int  )

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

Definition at line 106 of file TRTFastDigitizationTool.cxx.

107{
108 m_trtHitCollList.clear();
109 m_thpctrt = new TimedHitCollection< TRTUncompressedHit >();
111
113
114 return sc;
115
116}

◆ processAllSubEvents()

StatusCode TRTFastDigitizationTool::processAllSubEvents ( const EventContext & ctx)
virtual

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

Reimplemented from PileUpToolBase.

Definition at line 424 of file TRTFastDigitizationTool.cxx.

424 {
425
426 ATH_MSG_DEBUG( "TRTFastDigitizationTool::processAllSubEvents()" );
427
429
430 HitCollectionTimedList hitCollectionTimedList;
431 unsigned int numberOfSimHits = 0;
432 if ( m_mergeSvc->retrieveSubEvtsData( m_trtHitCollectionKey.value(), hitCollectionTimedList, numberOfSimHits ).isFailure() && hitCollectionTimedList.empty() ) {
433 ATH_MSG_ERROR( "Could not fill HitCollectionTimedList" );
434 return StatusCode::FAILURE;
435 }
436 else {
437 ATH_MSG_DEBUG( hitCollectionTimedList.size() << " TRTUncompressedHitCollections with key " << m_trtHitCollectionKey << " found" );
438 }
439
441 TimedHitCollection< TRTUncompressedHit > timedHitCollection( numberOfSimHits );
442 for (auto & itr : hitCollectionTimedList) {
443 // decide if this event will be processed depending on HardScatterSplittingMode & bunchXing
447 timedHitCollection.insert( itr.first, static_cast< const TRTUncompressedHitCollection * >( itr.second ) );
448 }
449
450 // Set the RNG to use for this event.
451 ATHRNG::RNGWrapper* rngWrapper = m_rndmSvc->getEngine(this, m_randomEngineName);
452 const std::string rngName = name()+m_randomEngineName;
453 rngWrapper->setSeed( rngName, ctx );
454 CLHEP::HepRandomEngine *rndmEngine = rngWrapper->getEngine(ctx);
455
456 // Process the Hits straw by straw: get the iterator pairs for given straw
457 CHECK( this->produceDriftCircles(ctx, rndmEngine, timedHitCollection ) );
458
459 CHECK( this->createAndStoreRIOs(ctx, rndmEngine) );
460 ATH_MSG_DEBUG ( "createAndStoreRIOs() succeeded" );
461
462 return StatusCode::SUCCESS;
463}
std::list< value_t > type
type of the collection of timed data object

◆ processBunchXing()

StatusCode TRTFastDigitizationTool::processBunchXing ( int bunchXing,
SubEventIterator bSubEvents,
SubEventIterator eSubEvents )
virtual

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

Reimplemented from PileUpToolBase.

Definition at line 119 of file TRTFastDigitizationTool.cxx.

121 {
122
123 // decide if this event will be processed depending on HardScatterSplittingMode & bunchXing
124 if ( m_HardScatterSplittingMode == 2 && !m_HardScatterSplittingSkipper ) { m_HardScatterSplittingSkipper = true; return StatusCode::SUCCESS; }
125 if ( m_HardScatterSplittingMode == 1 && m_HardScatterSplittingSkipper ) { return StatusCode::SUCCESS; }
127
129 TimedHitCollList hitCollList;
130
131 if (!(m_mergeSvc->retrieveSubSetEvtData(m_trtHitCollectionKey.value(), hitCollList, bunchXing,
132 bSubEvents, eSubEvents).isSuccess()) &&
133 hitCollList.empty()) {
134 ATH_MSG_ERROR("Could not fill TimedHitCollList");
135 return StatusCode::FAILURE;
136 } else {
137 ATH_MSG_VERBOSE(hitCollList.size() << " TRTUncompressedHitCollections with key " <<
138 m_trtHitCollectionKey << " found");
139 }
140
141 TimedHitCollList::iterator iColl(hitCollList.begin());
142 TimedHitCollList::iterator endColl(hitCollList.end());
143
144 for( ; iColl != endColl; ++iColl) {
145 TRTUncompressedHitCollection *hitCollPtr = new TRTUncompressedHitCollection(*iColl->second);
146 PileUpTimeEventIndex timeIndex(iColl->first);
147 ATH_MSG_DEBUG("TRTUncompressedHitCollection found with " << hitCollPtr->size() <<
148 " hits");
149 ATH_MSG_VERBOSE("time index info. time: " << timeIndex.time()
150 << " index: " << timeIndex.index()
151 << " type: " << timeIndex.type());
152 m_thpctrt->insert(timeIndex, hitCollPtr);
153 m_trtHitCollList.push_back(hitCollPtr);
154 }
155
156 return StatusCode::SUCCESS;
157}
#define ATH_MSG_VERBOSE(x)
size_type size() const

◆ produceDriftCircles()

StatusCode TRTFastDigitizationTool::produceDriftCircles ( const EventContext & ctx,
CLHEP::HepRandomEngine * rndmEngine,
TimedHitCollection< TRTUncompressedHit > & thpctrt )
private

Definition at line 253 of file TRTFastDigitizationTool.cxx.

256{
257 // Create OUTPUT PRD_MultiTruthCollection for TRT measurements
258 SG::WriteHandle< PRD_MultiTruthCollection > trtPrdTruth(m_trtPrdTruthKey, ctx);
259 trtPrdTruth = std::make_unique< PRD_MultiTruthCollection >();
260 if ( !trtPrdTruth.isValid() ) {
261 ATH_MSG_FATAL( "Could not record collection " << trtPrdTruth.name() );
262 return StatusCode::FAILURE;
263 }
264 ATH_MSG_DEBUG( "PRD_MultiTruthCollection " << trtPrdTruth.name() << " registered in StoreGate" );
265
266 if(m_useEventInfo){
267
268 SG::ReadHandle<xAOD::EventInfo> eventInfoContainer(m_EventInfoKey, ctx);
269 if(eventInfoContainer.isValid()){
270 m_NCollPerEvent = (float) eventInfoContainer->averageInteractionsPerCrossing();
271 }
272 else{
273 ATH_MSG_INFO("Cannot retrieve event info");
274 }
275 }
276
278 if(sc != StatusCode::SUCCESS) return sc;
279
280 m_driftCircleMap.clear();
281
283 while ( thpctrt.nextDetectorElement( itr1, itr2 ) ) {
284
285 for ( ; itr1 != itr2; ++itr1 ) {
286
287 const TimedHitPtr< TRTUncompressedHit > &hit = *itr1;
288
289 // Get hitID
290 int hitID = hit->GetHitID();
291
292 if ( hitID & 0xc0000000 ) {
293 ATH_MSG_ERROR( "Hit ID not Valid (" << MSG::hex << hitID << ")" << MSG::dec );
294 continue;
295 }
296
297 // Convert hitID to Identifier
298 IdentifierHash hash;
299 Identifier layer_id;
300 bool status;
301 Identifier straw_id = getIdentifier( hitID, hash, layer_id, status );
302 if ( !status ) {
303 ATH_MSG_ERROR( "Ignoring simhits with suspicious identifier (1)" );
304 continue;
305 }
306
307 const InDetDD::TRT_BaseElement *trtBaseElement = m_trt_manager->getElement( hash );
308 Identifier hit_id = trtBaseElement->identify();
309
310 int BEC = m_trt_id->barrel_ec( hit_id );
311 bool isArgon = isArgonStraw( straw_id );
312 int idx = ( BEC > 0 ? BEC : 2 - BEC ) + 4 * isArgon - 1;
313
314 // Get 'track-to-wire' distance
315 double driftRadiusLoc = getDriftRadiusFromXYZ( hit );
316
317 double efficiency = strawEfficiency( driftRadiusLoc, abs( BEC ) );
318 efficiency *= m_cFit[ idx ][ 0 ];
319
320 // Decide wether to throw away this cluster or not
321 if ( CLHEP::RandFlat::shoot( rndmEngine ) < ( 1. - efficiency ) ) continue;
322
323 // Decide core/tail fraction
324 bool isTail = ( CLHEP::RandFlat::shoot( rndmEngine ) < m_trtTailFraction );
325
326 double sigmaTrt = m_trtSigmaDriftRadiusTail;
327 if ( !isTail ) {
328 double driftTime = m_trtDriftFunctionTool->approxDriftTime( std::abs( driftRadiusLoc ) );
329 sigmaTrt = m_trtDriftFunctionTool->errorOfDriftRadius( driftTime, hit_id, m_NCollPerEvent );
330 }
331
332 // driftRadiusLoc smearing procedure
333 double dR = 0;
334 int ii = 0;
335 do {
336 double tailSmearing = CLHEP::RandFlat::shoot( rndmEngine );
337 dR = CLHEP::RandGaussZiggurat::shoot( rndmEngine, 0., ( tailSmearing < m_cFit[ idx ][ 2 ] ? m_cFit[ idx ][ 3 ] : m_cFit[ idx ][ 4 ] ) ) * sigmaTrt;
338 ++ii;
339 if ( ii > 50 ) { // should not appear in simulation
340 dR = 2. - driftRadiusLoc;
341 break;
342 }
343 }
344 while ( driftRadiusLoc + dR > 2. || driftRadiusLoc + dR < 0. );
345 double smearedRadius = driftRadiusLoc + dR;
346
347 Amg::Vector2D hitLocalPosition( smearedRadius, 0. );
348 std::vector< Identifier > rdoList = { straw_id };
349
350 auto hitErrorMatrix = Amg::MatrixX(1, 1);
351 (hitErrorMatrix)(Trk::driftRadius, Trk::driftRadius) =
352 sigmaTrt * sigmaTrt * m_cFit[idx][1] * m_cFit[idx][1];
353
354 // the TRT word simulate only TR information for the moment
355 // consult TRTElectronicsProcessing::EncodeDigit() in TRT_Digitization/src/TRTElectronicsProcessing.cxx
356 unsigned int word = 0x00007c00; // set to a standard low threshold hit: word = 0; for ( unsigned int j = 10; j < 15; ++j ) word += 1 << ( 25 - j - j / 8 );
357
358 // set High Threshold bit
359 HepGeom::Point3D< double > hitGlobalPosition = getGlobalPosition( hit );
360 int particleEncoding = hit->GetParticleEncoding();
361 float kineticEnergy = hit->GetKineticEnergy();
362
364
365 double position = ( std::abs(BEC) == 1 ? hitGlobalPosition.z() : hitGlobalPosition.perp() );
366
367 double probability;
368 if ( abs( particleEncoding ) == 11 && kineticEnergy > 5000. ) { // electron
369 probability = m_trtHighProbabilityBoostEle*getProbHT( ctx, particleEncoding, kineticEnergy, straw_id, smearedRadius, position);
370 }
371 else{
372 probability = m_trtHighProbabilityBoostBkg*getProbHT( ctx, particleEncoding, kineticEnergy, straw_id, smearedRadius, position);
373 }
374
375 if ( CLHEP::RandFlat::shoot( rndmEngine ) < probability ) word |= maskHT;
376 }
377 else {
378
379 double eta = hitGlobalPosition.pseudoRapidity();
380 // double mass = particleMass( particle );
381 // double p = sqrt( kineticEnergy * kineticEnergy + 2. * kineticEnergy * mass );
382 float p = kineticEnergy; // like in TRT_Digitization ( previously we also use zero mass due to bug in particleMass routine )
383
384 if ( abs( particleEncoding ) == 11 && p > 5000. ) { // electron
385 double probability = ( p < 20000. ? HTProbabilityElectron_low_pt( eta ) : HTProbabilityElectron_high_pt( eta ) );
386 if ( CLHEP::RandFlat::shoot( rndmEngine ) < probability ) word |= maskHT;
387 }
388 else if ( abs( particleEncoding ) == 13 || abs( particleEncoding ) > 100 ) { // muon or other particle
389 double probability = ( p < 20000. ? HTProbabilityMuon_5_20( eta ) : HTProbabilityMuon_60( eta ) );
390 if ( CLHEP::RandFlat::shoot( rndmEngine ) < probability ) word |= maskHT;
391 }
392
393 }
394
395 InDet::TRT_DriftCircle* trtDriftCircle =
396 new InDet::TRT_DriftCircle(straw_id,
397 hitLocalPosition,
398 std::move(rdoList),
399 std::move(hitErrorMatrix),
400 trtBaseElement,
401 word);
402 if (!trtDriftCircle)
403 continue;
404
405 m_driftCircleMap.insert( std::multimap< Identifier, InDet::TRT_DriftCircle * >::value_type( straw_id, trtDriftCircle ) );
406 const HepMcParticleLink particleLink = HepMcParticleLink::getRedirectedLink(hit->particleLink(), hit.eventId(), ctx); // This link should now correctly resolve to the TruthEvent McEventCollection in the main StoreGateSvc.
407 if ( particleLink.isValid() ) {
409 trtPrdTruth->insert( std::make_pair( trtDriftCircle->identify(), particleLink ) );
410 ATH_MSG_DEBUG( "Truth map filled with cluster " << trtDriftCircle << " and link = " << particleLink );
411 }
412 }
413 else {
414 ATH_MSG_DEBUG( "Particle link NOT valid!! Truth map NOT filled with cluster " << trtDriftCircle << " and link = " << particleLink );
415 }
416
417 }
418 }
419
420 return StatusCode::SUCCESS;
421}
#define ATH_MSG_INFO(x)
Gaudi::Property< int > m_vetoPileUpTruthLinks
bool isArgonStraw(const Identifier &straw_id) const
static double HTProbabilityMuon_60(double eta)
static double getDriftRadiusFromXYZ(const TimedHitPtr< TRTUncompressedHit > &hit)
HepGeom::Point3D< double > getGlobalPosition(const TimedHitPtr< TRTUncompressedHit > &hit)
static double strawEfficiency(double driftRadius, int BEC=0)
Identifier getIdentifier(int hitID, IdentifierHash &hash, Identifier &layer_id, bool &status) const
static double HTProbabilityMuon_5_20(double eta)
double getProbHT(const EventContext &ctx, int particleEncoding, float kineticEnergy, const Identifier &straw_id, double driftRadiusLoc, double hitGlobalPosition) const
static double HTProbabilityElectron_high_pt(double eta)
static double HTProbabilityElectron_low_pt(double eta)
const HepMcParticleLink & particleLink() const
int GetParticleEncoding() const
float GetKineticEnergy() const
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
unsigned short eventId() const
the index of the component event in PileUpEventInfo.
Definition TimedHitPtr.h:47
Identifier identify() const
return the identifier
void efficiency(std::vector< double > &bins, std::vector< double > &values, const std::vector< std::string > &files, const std::string &histname, const std::string &tplotname, const std::string &label="")
bool ignoreTruthLink(const T &p, bool vetoPileUp)
Helper function for SDO creation in PileUpTools.
@ driftTime
Definition HitInfo.h:43
const Amg::Vector3D & position() const
Method to retrieve the position of the Intersection.

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

◆ setNumericalConstants()

StatusCode TRTFastDigitizationTool::setNumericalConstants ( )
private

Definition at line 170 of file TRTFastDigitizationTool.cxx.

170 {
171
172 // Efficiency and resolution dependence on pileup
173 // Resolution is parametrized with a double gaussian so there are two parameters (res1 = core, res2= tail)
174
175 static const float eff_corr_pileup_dependence = -0.0005; // variation of efficiency with the number of Xing
176 static const float res1_corr_pileup_dependence = 0.005; // variation of core resolution (fractional) with the number of Xing
177 static const float res2_corr_pileup_dependence = 0.015; // variation of tail resolution (fractional) with the number of Xing
178 // scale factors relative to the value for mu=20
179 float effcorr = 1+eff_corr_pileup_dependence*(m_NCollPerEvent-20);
180 float res1corr = 1+res1_corr_pileup_dependence*(m_NCollPerEvent-20);
181 float res2corr = 1+res2_corr_pileup_dependence*(m_NCollPerEvent-20);
182
183 // Now the numerical parameters for efficiency and resolution
184 static const float tailRes = 3.600; // scale factor for tail resolution
185 static const float coreFracEndcap_Xe = 0.40; // fraction of events in resolution core (Xe)
186 static const float coreFracEndcap_Ar = 0.40; // fraction of events in resolution core (Ar)
187 static const float coreFracBarrel_Xe = 0.250; // fraction of events in resolution core (Xe)
188 static const float coreFracBarrel_Ar = 0.250; // fraction of events in resolution core (Ar)
189
190
191 static const float eff_BarrelA_Xe = 0.840; // efficiency scale factor
192 static const float eff_EndcapA_Xe = 0.875;
193 static const float eff_BarrelC_Xe = 0.833;
194 static const float eff_EndcapC_Xe = 0.894;
195 static const float eff_BarrelA_Ar = 0.933;
196 static const float eff_EndcapA_Ar = 0.949;
197 static const float eff_BarrelC_Ar = 0.937;
198 static const float eff_EndcapC_Ar = 0.977;
199 static const float err_Barrel_Xe = 0.997; // scale factor for the error as returned by the drift function tool
200 static const float err_Endcap_Xe = 1.065;
201 static const float err_Barrel_Ar = 1.020;
202 static const float err_Endcap_Ar = 1.040;
203
204 static const float coreRes_Barrel_Xe = 0.4; // scale factor for core resolution
205 static const float coreRes_Endcap_Xe = 0.5;
206 static const float coreRes_Barrel_Ar = 0.4;
207 static const float coreRes_Endcap_Ar = 0.5;
208
209 m_cFit[ 0 ][ 0 ] = effcorr*eff_BarrelA_Xe; // Barrel A-side Xenon
210 m_cFit[ 0 ][ 1 ] = err_Barrel_Xe;
211 m_cFit[ 0 ][ 2 ] = coreFracBarrel_Xe;
212 m_cFit[ 0 ][ 3 ] = res1corr*coreRes_Barrel_Xe;
213 m_cFit[ 0 ][ 4 ] = res2corr*tailRes;
214 m_cFit[ 1 ][ 0 ] = effcorr*eff_EndcapA_Xe; // Endcap A-side Xenon
215 m_cFit[ 1 ][ 1 ] = err_Endcap_Xe;
216 m_cFit[ 1 ][ 2 ] = coreFracEndcap_Xe;
217 m_cFit[ 1 ][ 3 ] = res1corr*coreRes_Endcap_Xe;
218 m_cFit[ 1 ][ 4 ] = res2corr*tailRes;
219 m_cFit[ 2 ][ 0 ] = effcorr*eff_BarrelC_Xe; // Barrel C-side Xenon
220 m_cFit[ 2 ][ 1 ] = err_Barrel_Xe;
221 m_cFit[ 2 ][ 2 ] = coreFracBarrel_Xe;
222 m_cFit[ 2 ][ 3 ] = res1corr*coreRes_Barrel_Xe;
223 m_cFit[ 2 ][ 4 ] = res2corr*tailRes;
224 m_cFit[ 3 ][ 0 ] = effcorr*eff_EndcapC_Xe; // Endcap C-side Xenon
225 m_cFit[ 3 ][ 1 ] = err_Endcap_Xe;
226 m_cFit[ 3 ][ 2 ] = coreFracEndcap_Xe;
227 m_cFit[ 3 ][ 3 ] = res1corr*coreRes_Endcap_Xe;
228 m_cFit[ 3 ][ 4 ] = res2corr*tailRes;
229 m_cFit[ 4 ][ 0 ] = effcorr*eff_BarrelA_Ar; // Barrel A-side Argon
230 m_cFit[ 4 ][ 1 ] = err_Barrel_Ar;
231 m_cFit[ 4 ][ 2 ] = coreFracBarrel_Ar;
232 m_cFit[ 4 ][ 3 ] = res1corr*coreRes_Barrel_Ar;
233 m_cFit[ 4 ][ 4 ] = res2corr*tailRes;
234 m_cFit[ 5 ][ 0 ] = effcorr*eff_EndcapA_Ar; // Endcap A-side Argon
235 m_cFit[ 5 ][ 1 ] = err_Endcap_Ar;
236 m_cFit[ 5 ][ 2 ] = coreFracEndcap_Ar;
237 m_cFit[ 5 ][ 3 ] = res1corr*coreRes_Endcap_Ar;
238 m_cFit[ 5 ][ 4 ] = res2corr*tailRes;
239 m_cFit[ 6 ][ 0 ] = effcorr*eff_BarrelC_Ar; // Barrel C-side Argon
240 m_cFit[ 6 ][ 1 ] = err_Barrel_Ar;
241 m_cFit[ 6 ][ 2 ] = coreFracBarrel_Ar;
242 m_cFit[ 6 ][ 3 ] = res1corr*coreRes_Barrel_Ar;
243 m_cFit[ 6 ][ 4 ] = res2corr*tailRes;
244 m_cFit[ 7 ][ 0 ] = effcorr*eff_EndcapC_Ar; // Endcap C-side Argon
245 m_cFit[ 7 ][ 1 ] = err_Endcap_Ar;
246 m_cFit[ 7 ][ 2 ] = coreFracEndcap_Ar;
247 m_cFit[ 7 ][ 3 ] = res1corr*coreRes_Endcap_Ar;
248 m_cFit[ 7 ][ 4 ] = res2corr*tailRes;
249
250 return StatusCode::SUCCESS;
251}

◆ strawEfficiency()

double TRTFastDigitizationTool::strawEfficiency ( double driftRadius,
int BEC = 0 )
staticprivate

Definition at line 984 of file TRTFastDigitizationTool.cxx.

985{
986 const double p[][ 5 ] = { { 0.478, 0.9386, 0.9325, 0.2509, 0.03232 }, // old parametrization
987 { 0.477001, 1.02865, 1.02910, 0.185082, 0. }, // Barrel
988 { 0.482528, 1.03601, 1.03693, 0.182581, 0. } // EndCap
989 };
990
991 const double &trtFitAmplitude = p[ BEC ][ 0 ];
992 const double &trtFitMu = p[ BEC ][ 1 ];
993 const double &trtFitR = p[ BEC ][ 2 ];
994 const double &trtFitSigma = p[ BEC ][ 3 ];
995 const double &trtFitConstant = p[ BEC ][ 4 ];
996
997 double efficiency = trtFitAmplitude * ( erf( ( trtFitMu + trtFitR - driftRadius ) / ( std::sqrt( 2 ) * trtFitSigma ) )
998 + erf( ( trtFitMu + trtFitR + driftRadius ) / ( std::sqrt( 2 ) * trtFitSigma ) )
999 - erf( ( trtFitMu - trtFitR - driftRadius ) / ( std::sqrt( 2 ) * trtFitSigma ) )
1000 - erf( ( trtFitMu - trtFitR + driftRadius ) / ( std::sqrt( 2 ) * trtFitSigma ) )
1001 )
1002 + trtFitConstant;
1003
1004 return efficiency;
1005
1006 /*
1007 static const std::vector< double > bins = { 0.05, 1.43, 1.48, 1.53, 1.58, 1.63, 1.68, 1.73, 1.78, 1.83, 1.88, 1.93, 1.99 };
1008 static const std::vector< double > efficiency = { 0.94, // [ 0., 0.05 ]
1009 0.96, // [ 0.05, 1.43 ]
1010 0.955, // [ 1.43, 1.48 ]
1011 0.95, // [ 1.48, 1.53 ]
1012 0.945, // [ 1.53, 1.58 ]
1013 0.94, // [ 1.58, 1.63 ]
1014 0.93, // [ 1.63, 1.68 ]
1015 0.92, // [ 1.68, 1.73 ]
1016 0.89, // [ 1.73, 1.78 ]
1017 0.86, // [ 1.78, 1.83 ]
1018 0.8, // [ 1.83, 1.88 ]
1019 0.74, // [ 1.88, 1.93 ]
1020 0.695, // [ 1.93, 1.99 ]
1021 0.65 // > 1.99
1022 };
1023
1024 return efficiency[ std::distance( bins.begin(), std::lower_bound( bins.begin(), bins.end(), driftRadius ) ) ];
1025 */
1026}

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

double TRTFastDigitizationTool::m_cFit[8][5] {}
private

Definition at line 153 of file TRTFastDigitizationTool.h.

153{}; // efficiency and resolution

◆ m_driftCircleMap

std::multimap< Identifier, InDet::TRT_DriftCircle * > TRTFastDigitizationTool::m_driftCircleMap
private

Definition at line 133 of file TRTFastDigitizationTool.h.

◆ m_EventInfoKey

SG::ReadHandleKey<xAOD::EventInfo> TRTFastDigitizationTool::m_EventInfoKey { this, "EventInfoKey", "EventInfo", "SG key for EventInfo" }
private

Definition at line 144 of file TRTFastDigitizationTool.h.

145{ this, "EventInfoKey", "EventInfo", "SG key for EventInfo" };

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

IntegerProperty TRTFastDigitizationTool::m_HardScatterSplittingMode {this, "HardScatterSplittingMode", 0, "Control pileup & signal splitting"}
private

Definition at line 140 of file TRTFastDigitizationTool.h.

140{this, "HardScatterSplittingMode", 0, "Control pileup & signal splitting"}; // Process all TRT_Hits or just those from signal or background events

◆ m_HardScatterSplittingSkipper

bool TRTFastDigitizationTool::m_HardScatterSplittingSkipper {false}
private

Definition at line 141 of file TRTFastDigitizationTool.h.

141{false};

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

ServiceHandle< PileUpMergeSvc > TRTFastDigitizationTool::m_mergeSvc {this, "MergeSvc", "PileUpMergeSvc"}
private

Definition at line 120 of file TRTFastDigitizationTool.h.

120{this, "MergeSvc", "PileUpMergeSvc"}; // PileUp Merge service

◆ m_NCollPerEvent

FloatProperty TRTFastDigitizationTool::m_NCollPerEvent {this, "NCollPerEvent", 30}
private

Definition at line 146 of file TRTFastDigitizationTool.h.

146{this, "NCollPerEvent", 30};

◆ m_randomEngineName

StringProperty TRTFastDigitizationTool::m_randomEngineName {this, "RandomStreamName", "FatrasRnd"}
private

Definition at line 122 of file TRTFastDigitizationTool.h.

122{this, "RandomStreamName", "FatrasRnd"}; // Name of the random number stream

◆ m_rndmSvc

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

Random number service.

Definition at line 121 of file TRTFastDigitizationTool.h.

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

◆ m_thpctrt

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

Definition at line 132 of file TRTFastDigitizationTool.h.

132{};

◆ m_trt_id

const TRT_ID* TRTFastDigitizationTool::m_trt_id {}
private

Definition at line 137 of file TRTFastDigitizationTool.h.

137{}; // TRT Id Helper

◆ m_trt_manager

const InDetDD::TRT_DetectorManager* TRTFastDigitizationTool::m_trt_manager {}
private

Definition at line 136 of file TRTFastDigitizationTool.h.

136{};

◆ m_trtDriftCircleContainerKey

SG::WriteHandleKey< InDet::TRT_DriftCircleContainer > TRTFastDigitizationTool::m_trtDriftCircleContainerKey {this, "trtDriftCircleContainer", "TRT_DriftCircles"}
private

Definition at line 129 of file TRTFastDigitizationTool.h.

129{this, "trtDriftCircleContainer", "TRT_DriftCircles"};

◆ m_trtDriftFunctionTool

PublicToolHandle< ITRT_DriftFunctionTool > TRTFastDigitizationTool::m_trtDriftFunctionTool {this, "TRT_DriftFunctionTool", "TRT_DriftFunctionTool/FatrasTrtDriftFunctionTool"}
private

Definition at line 116 of file TRTFastDigitizationTool.h.

116{this, "TRT_DriftFunctionTool", "TRT_DriftFunctionTool/FatrasTrtDriftFunctionTool"};

◆ m_trtElectronPidTool

PublicToolHandle< Trk::ITRT_ElectronPidTool > TRTFastDigitizationTool::m_trtElectronPidTool {this, "TRT_ElectronPidTool", "InDet::TRT_ElectronPidToolRun2/InDetTRT_ElectronPidTool"}
private

Definition at line 118 of file TRTFastDigitizationTool.h.

118{this, "TRT_ElectronPidTool", "InDet::TRT_ElectronPidToolRun2/InDetTRT_ElectronPidTool"};

◆ m_trtHighProbabilityBoostBkg

double TRTFastDigitizationTool::m_trtHighProbabilityBoostBkg {1.}
private

Definition at line 151 of file TRTFastDigitizationTool.h.

151{1.};

◆ m_trtHighProbabilityBoostEle

double TRTFastDigitizationTool::m_trtHighProbabilityBoostEle {1.}
private

Definition at line 152 of file TRTFastDigitizationTool.h.

152{1.};

◆ m_trtHitCollectionKey

StringProperty TRTFastDigitizationTool::m_trtHitCollectionKey {this, "trtHitCollectionName", "TRTUncompressedHits"}
private

Definition at line 125 of file TRTFastDigitizationTool.h.

125{this, "trtHitCollectionName", "TRTUncompressedHits"};

◆ m_trtHitCollList

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

Definition at line 126 of file TRTFastDigitizationTool.h.

◆ m_trtPrdTruthKey

SG::WriteHandleKey< PRD_MultiTruthCollection > TRTFastDigitizationTool::m_trtPrdTruthKey {this, "trtPrdMultiTruthCollection", "PRD_MultiTruthTRT"}
private

Definition at line 130 of file TRTFastDigitizationTool.h.

130{this, "trtPrdMultiTruthCollection", "PRD_MultiTruthTRT"};

◆ m_trtSigmaDriftRadiusTail

double TRTFastDigitizationTool::m_trtSigmaDriftRadiusTail {0.0}
private

Definition at line 150 of file TRTFastDigitizationTool.h.

150{0.0}; // sigma of one TRT straw in R

◆ m_trtStrawStatusSummaryTool

ToolHandle< ITRT_StrawStatusSummaryTool > TRTFastDigitizationTool::m_trtStrawStatusSummaryTool {this, "TRT_StrawStatusSummaryTool", "InDetTRTStrawStatusSummaryTool"}
private

Definition at line 119 of file TRTFastDigitizationTool.h.

119{this, "TRT_StrawStatusSummaryTool", "InDetTRTStrawStatusSummaryTool"}; // Argon / Xenon

◆ m_trtTailFraction

double TRTFastDigitizationTool::m_trtTailFraction {0.0}
private

Definition at line 149 of file TRTFastDigitizationTool.h.

149{0.0}; // fraction in tails

◆ m_useEventInfo

BooleanProperty TRTFastDigitizationTool::m_useEventInfo {this, "useEventInfo", false}
private

Definition at line 143 of file TRTFastDigitizationTool.h.

143{this, "useEventInfo", false}; // get mu from EventInfo ?

◆ m_useTrtElectronPidTool

bool TRTFastDigitizationTool::m_useTrtElectronPidTool {true}
private

Definition at line 117 of file TRTFastDigitizationTool.h.

117{true}; // false: use Tina's parametrization

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