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

#include <OldSpclMcFilterTool.h>

Inheritance diagram for OldSpclMcFilterTool:
Collaboration diagram for OldSpclMcFilterTool:

Public Member Functions

 OldSpclMcFilterTool (const std::string &type, const std::string &name, const IInterface *parent)
 Constructor with parameters:
virtual ~OldSpclMcFilterTool ()
 Destructor:
StatusCode buildMcAod (const McEventCollection *in, McEventCollection *out)
 This method will check the validity of the input McEventCollection and build a filtered one from the strategy implemented by this concrete tool.
StatusCode initialize ()
 Athena Algorithm's Hooks.
StatusCode execute ()
StatusCode finalize ()
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysInitialize () override
 Perform system initialization for an algorithm.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const

Static Public Member Functions

static const InterfaceID & interfaceID ()
 Inline methods:

Protected Types

typedef ToolHandle< IMcVtxFilterToolMcVtxFilterTool_t
typedef ToolHandle< ITruthIsolationToolIsolTool_t

Protected Member Functions

 OldSpclMcFilterTool ()
 Default constructor:
StatusCode selectSpclMcBarcodes ()
 Retrieve the GenParticles from the GenEvent object (located into the McEventCollection container), filter them and store their barcode into the list of barcodes of particles to keep.
StatusCode shapeGenEvent (McEventCollection *outEvt)
 Build the out McEventCollection by removing all the GenParticles whose barcode is not in the list of barcodes to keep.
StatusCode reconnectParticles (const McEventCollection *inEvt, McEventCollection *out)
 Reconnect the particles of the filtered McEventCollection.
StatusCode rebuildLinks (const HepMC::GenEvent *mcEvent, HepMC::GenEvent *outEvt, const HepMC::GenParticlePtr &mcPart)
 Rebuild the links between particles which were connected, eg by a long FSR chain.
StatusCode initializeTool ()
 to get tesIO
virtual StatusCode finalizeTool ()
void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed.

Protected Attributes

std::set< int > m_barcodes
 List of particles (in fact their unique barcode) which have been labelled as "special".
DoubleProperty m_rIsol
 deltaR isolation energy cut for electrons, muons, taus and photons
DoubleProperty m_ptGamMin
 Minimum threshold for transverse momentum of photons.
DoubleProperty m_ptMin
 Minimum threshold for transverse momentum for all particles.
DoubleProperty m_etaRange
 Eta acceptance cut applied on all stable particles.
BooleanProperty m_includeSimul
 Switch to include or not particles from detector simulation (Geant4)
BooleanProperty m_includePartonShowers
 Switch to include or not parton showers.
TruthHelper::GenAccessIOm_tesIO
 Pointer to a StoreGateSvc helper (Mc particle retrieval with predicates)
BooleanProperty m_removeDecayToSelf
 Switch to remove particles which decay into themselves (t->tg) but only for generated particles, not the ones from the Geant4 interactions.
McVtxFilterTool_t m_mcVtxFilterTool
 Pointer to the McVtxFilterTool to be able to select additional vertices on some decay pattern criterion.
IsolTool_t m_isolationTool
 Pointer to the TruthIsolationTool to be able to compute transverse energy isolations for various isolation cones cuts.
BooleanProperty m_doEtIsolation
 Switch to compute or not the Et-isolations for TruthParticle (and their underlying HepMC::GenParticle).
SG::ReadHandleKey< McEventCollectionm_mcEventsReadHandleKey {this,"McEvents","TruthEvent","ReadHandleKey for input McEventCollection one wants to filter"}
 ReadHandleKey for the input McEventCollection one wants to filter.
SG::WriteHandleKey< McEventCollectionm_mcEventsOutputWriteHandleKey {this,"McEventsOutput","GEN_AOD","WriteHandleKey for the output McEventCollection which has been filtered"}
 Location of the output McEventCollection which has been filtered.

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default)
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared

Detailed Description

Definition at line 29 of file OldSpclMcFilterTool.h.

Member Typedef Documentation

◆ IsolTool_t

typedef ToolHandle<ITruthIsolationTool> TruthParticleFilterBaseTool::IsolTool_t
protectedinherited

Definition at line 80 of file TruthParticleFilterBaseTool.h.

◆ McVtxFilterTool_t

typedef ToolHandle<IMcVtxFilterTool> TruthParticleFilterBaseTool::McVtxFilterTool_t
protectedinherited

Definition at line 74 of file TruthParticleFilterBaseTool.h.

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< AlgTool > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ OldSpclMcFilterTool() [1/2]

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

Constructor with parameters:

Definition at line 41 of file OldSpclMcFilterTool.cxx.

43 :
44 TruthParticleFilterBaseTool( type, name, parent ),
45 m_tesIO( nullptr )
46{
47 //
48 // Property declaration
49 //
50 //declareProperty( "Property", m_nProperty );
51
52 declareProperty( "rIsolation",
53 m_rIsol = 0.45,
54 "DeltaR isolation energy cut for electrons, muons, "
55 "taus and photons" );
56
57 declareProperty( "ptGammaMin",
58 m_ptGamMin = 0.5*GeV,
59 "Minimum threshold for transverse momentum of photons" );
60
61 declareProperty( "ptMin",
62 m_ptMin = 0.5*GeV,
63 "Minimum threshold for transverse momentum for all particles.\n"
64 "Warning: this cut is applied *before* Pt photon cut !" );
65
66 declareProperty( "etaRange",
67 m_etaRange = 5.0,
68 "Eta acceptance cut applied on all stable particles" );
69
70 // switches
71
72 declareProperty( "IncludeSimul",
73 m_includeSimul = true,
74 "Switch to include or not particles from detector simulation "
75 "(Geant 4)" );
76
77 declareProperty( "IncludePartonShowers",
79 "Switch to include or not parton showers" );
80
81 declareProperty( "RemoveDecayToSelf",
83 "Switch to remove particles which decay into themselves (t->tg) "
84 "*but* only for generated particles, not the ones from the "
85 "Geant4 interactions" );
86
87}
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
DoubleProperty m_rIsol
deltaR isolation energy cut for electrons, muons, taus and photons
BooleanProperty m_removeDecayToSelf
Switch to remove particles which decay into themselves (t->tg) but only for generated particles,...
TruthHelper::GenAccessIO * m_tesIO
Pointer to a StoreGateSvc helper (Mc particle retrieval with predicates)
DoubleProperty m_ptGamMin
Minimum threshold for transverse momentum of photons.
BooleanProperty m_includeSimul
Switch to include or not particles from detector simulation (Geant4)
DoubleProperty m_etaRange
Eta acceptance cut applied on all stable particles.
BooleanProperty m_includePartonShowers
Switch to include or not parton showers.
DoubleProperty m_ptMin
Minimum threshold for transverse momentum for all particles.
TruthParticleFilterBaseTool()
Default constructor:

◆ ~OldSpclMcFilterTool()

OldSpclMcFilterTool::~OldSpclMcFilterTool ( )
virtual

Destructor:

Definition at line 91 of file OldSpclMcFilterTool.cxx.

92{
93 delete m_tesIO; m_tesIO = nullptr;
94 ATH_MSG_DEBUG("Calling destructor");
95}
#define ATH_MSG_DEBUG(x)

◆ OldSpclMcFilterTool() [2/2]

OldSpclMcFilterTool::OldSpclMcFilterTool ( )
protected

Default constructor:

Member Function Documentation

◆ buildMcAod()

StatusCode OldSpclMcFilterTool::buildMcAod ( const McEventCollection * in,
McEventCollection * out )
virtual

This method will check the validity of the input McEventCollection and build a filtered one from the strategy implemented by this concrete tool.

Implements ITruthParticleFilterTool.

Definition at line 101 of file OldSpclMcFilterTool.cxx.

103{
104 if ( nullptr == in || nullptr == out ) {
105 ATH_MSG_ERROR("Invalid pointer to McEventCollection !" << endmsg
106 << " in: " << in << endmsg
107 << " out: " << out);
108 return StatusCode::FAILURE;
109 }
110
111 // we just copy the input McEventCollection and put it into the output one
112 out->operator=( *in );
113
114 // select the barcodes of the "special" particles from the input GenEvent
115 if ( selectSpclMcBarcodes().isFailure() ) {
116 ATH_MSG_ERROR("Could not select the \"special\" barcodes !!");
117 return StatusCode::FAILURE;
118 }
119
120 // remove the not "special" particles from the filtered McEventCollection
121 if ( shapeGenEvent(out).isFailure() ) {
122 ATH_MSG_ERROR("Could not remove the not \"special\" particles from the "\
123 "filtered McEventCollection !!");
124 return StatusCode::FAILURE;
125 }
126
127 // reconnect the particles
128 if ( reconnectParticles(in, out).isFailure() ) {
129 ATH_MSG_ERROR("Could not reconnect the particles in the filtered "\
130 "McEventCollection !!");
131 return StatusCode::FAILURE;
132 }
133
134 return StatusCode::SUCCESS;
135}
#define endmsg
#define ATH_MSG_ERROR(x)
StatusCode reconnectParticles(const McEventCollection *inEvt, McEventCollection *out)
Reconnect the particles of the filtered McEventCollection.
StatusCode selectSpclMcBarcodes()
Retrieve the GenParticles from the GenEvent object (located into the McEventCollection container),...
StatusCode shapeGenEvent(McEventCollection *outEvt)
Build the out McEventCollection by removing all the GenParticles whose barcode is not in the list of ...

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T, V, H > & hndl,
const SG::VarHandleKeyType &  )
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158 {
160 hndl.value(),
161 hndl.documentation());
162
163 }

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( Gaudi::Property< T, V, H > & t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145 {
146 typedef typename SG::HandleClassifier<T>::type htype;
148 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>

◆ detStore()

const ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

◆ evtStore()

ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

◆ execute()

StatusCode TruthParticleFilterBaseTool::execute ( )
virtualinherited

Implements ITruthParticleFilterTool.

Definition at line 120 of file TruthParticleFilterBaseTool.cxx.

121{
122 ATH_MSG_DEBUG("Executing " << name() << "...");
123
124 //Setup Handle to read input container
125 SG::ReadHandle<McEventCollection> mcEventsReadHandle(m_mcEventsReadHandleKey);
126
127 if (!mcEventsReadHandle.isValid()){
128 ATH_MSG_ERROR("Invalid ReadHandle to McEventColleciton with key: " << m_mcEventsReadHandleKey.key());
129 return StatusCode::FAILURE;
130 }
131
132 //Setup WriteHandle, and then record new McEventCollection.
133 SG::WriteHandle<McEventCollection> mcEventsOutputWriteHandle(m_mcEventsOutputWriteHandleKey);
134 ATH_CHECK(mcEventsOutputWriteHandle.record(std::make_unique<McEventCollection>()));
135
136 if (!mcEventsOutputWriteHandle.isValid()){
137 ATH_MSG_ERROR("Invalid WriteHamdle for McEventCollection with key ["
138 <<m_mcEventsOutputWriteHandleKey.key() << "] !!");
139 return StatusCode::FAILURE;
140 }
141
142 // Compute isolation for gamma/lepton.
143 if ( m_doEtIsolation.value() ) {
144 ATH_MSG_VERBOSE("Computing Et isolations...");
145 if ( m_isolationTool->buildEtIsolations(m_mcEventsReadHandleKey.key()).isFailure() ) {
146 ATH_MSG_ERROR("Could not compute Et isolations !!");
147 return StatusCode::FAILURE;
148 }
149 } //> end do Et-isolation
150
151 if ( this->buildMcAod( mcEventsReadHandle.ptr(), mcEventsOutputWriteHandle.ptr() ).isFailure() ) {
152 ATH_MSG_ERROR("Could not buildMcAod(in,out) !!");
153 return StatusCode::FAILURE;
154 }
155
156 // We have slimmed the mcEventsOutputWriteHandle.
157 // To not bias the map of isolation energies for this GenEvent, we alias
158 // it to its original one
159 if ( m_doEtIsolation.value() &&
160 !m_isolationTool->registerAlias( m_mcEventsOutputWriteHandleKey.key(),
162 ).isSuccess() ) {
163 ATH_MSG_WARNING("Could not create an alias in the map of "\
164 "isolation energies !");
165 }
166
167 return StatusCode::SUCCESS;
168}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
virtual StatusCode buildMcAod(const McEventCollection *in, McEventCollection *filtered)=0
This method will check the validity of the input McEventCollection and build a filtered one from the ...
BooleanProperty m_doEtIsolation
Switch to compute or not the Et-isolations for TruthParticle (and their underlying HepMC::GenParticle...
SG::ReadHandleKey< McEventCollection > m_mcEventsReadHandleKey
ReadHandleKey for the input McEventCollection one wants to filter.
SG::WriteHandleKey< McEventCollection > m_mcEventsOutputWriteHandleKey
Location of the output McEventCollection which has been filtered.
IsolTool_t m_isolationTool
Pointer to the TruthIsolationTool to be able to compute transverse energy isolations for various isol...

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase & ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ finalize()

StatusCode TruthParticleFilterBaseTool::finalize ( )
virtualinherited

Implements ITruthParticleFilterTool.

Definition at line 105 of file TruthParticleFilterBaseTool.cxx.

106{
107 ATH_MSG_INFO("Finalizing " << name() << "...");
108
109 m_mcVtxFilterTool->stats();
110
111 // Give the concrete (derived) tool a chance to finalize itself
112 if ( finalizeTool().isFailure() ) {
113 ATH_MSG_ERROR("Could not finalize concrete tool !");
114 return StatusCode::FAILURE;
115 }
116
117 return StatusCode::SUCCESS;
118}
#define ATH_MSG_INFO(x)
McVtxFilterTool_t m_mcVtxFilterTool
Pointer to the McVtxFilterTool to be able to select additional vertices on some decay pattern criteri...

◆ finalizeTool()

StatusCode TruthParticleFilterBaseTool::finalizeTool ( )
inlineprotectedvirtualinherited

Definition at line 124 of file TruthParticleFilterBaseTool.h.

125{
126 return StatusCode::SUCCESS;
127}

◆ initialize()

StatusCode TruthParticleFilterBaseTool::initialize ( )
virtualinherited

Athena Algorithm's Hooks.

Retrieves a private AlgTool to filter a McEventCollection

Retrieves the isolation tool (public, to be used also in TruthParticleCnvTool)

Implements ITruthParticleFilterTool.

Definition at line 65 of file TruthParticleFilterBaseTool.cxx.

66{
67 ATH_MSG_INFO("Initializing " << name() << "...");
68
70 if ( !m_mcVtxFilterTool.retrieve().isSuccess() ) {
71 ATH_MSG_ERROR("Creation of algTool IMcVtxFilterTool FAILED !");
72 return StatusCode::FAILURE;
73 }
74
76 if( m_doEtIsolation.value()) {
77 ATH_CHECK(m_isolationTool.retrieve());
78 }
79 else {
80 m_isolationTool.disable();
81 }
82
83 //initialize DataHandleKeys
86
88 (" DoEtIsolations: [" << std::boolalpha << m_doEtIsolation.value()
89 << "]" << endmsg
90 << " McEvents: [" << m_mcEventsReadHandleKey.key() << "]" << endmsg
91 << " McEventsOutput: [" << m_mcEventsOutputWriteHandleKey.key() << "]");
92
93 // Give the concrete (derived) tool a chance to initialize itself
94 if ( initializeTool().isFailure() ) {
95 ATH_MSG_ERROR("Could not initialize concrete tool !");
96 return StatusCode::FAILURE;
97 }
98
99 ATH_MSG_INFO("Options of the McVtxFilterTool:");
100 m_mcVtxFilterTool->displayOptions();
101
102 return StatusCode::SUCCESS;
103}
virtual StatusCode initializeTool()
I/O operators.

◆ initializeTool()

StatusCode OldSpclMcFilterTool::initializeTool ( )
protectedvirtual

to get tesIO

Reimplemented from TruthParticleFilterBaseTool.

Definition at line 626 of file OldSpclMcFilterTool.cxx.

627{
628 ATH_MSG_DEBUG("Calling initializeTool");
629 delete m_tesIO; m_tesIO = nullptr;
630 // accessor for particles
631 m_tesIO = new GenAccessIO();
632 if( m_tesIO == nullptr ) {
633 ATH_MSG_ERROR("Unable to retrieve GenAccessIO pointer");
634 return StatusCode::FAILURE;
635 }
636 return StatusCode::SUCCESS;
637}

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< AlgTool > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ interfaceID()

const InterfaceID & ITruthParticleFilterTool::interfaceID ( )
inlinestaticinherited

Inline methods:

Definition at line 70 of file ITruthParticleFilterTool.h.

71{
73}
static const InterfaceID IID_ITruthParticleFilterTool("ITruthParticleFilterTool", 1, 0)

◆ msg()

MsgStream & AthCommonMsg< AlgTool >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24 {
25 return this->msgStream();
26 }

◆ msgLvl()

bool AthCommonMsg< AlgTool >::msgLvl ( const MSG::Level lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30 {
31 return this->msgLevel(lvl);
32 }

◆ outputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< AlgTool > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ rebuildLinks()

StatusCode OldSpclMcFilterTool::rebuildLinks ( const HepMC::GenEvent * mcEvent,
HepMC::GenEvent * outEvt,
const HepMC::GenParticlePtr & mcPart )
protected

Rebuild the links between particles which were connected, eg by a long FSR chain.

Definition at line 485 of file OldSpclMcFilterTool.cxx.

488{
489
490 if ( !mcPart ) {
491 ATH_MSG_WARNING("Null GenParticle: can not rebuildLinks");
492 return StatusCode::FAILURE;
493 }
494
495 if ( mcPart->end_vertex() ) {
496 ATH_MSG_VERBOSE("GenParticle has already a decay vertex : nothing to do");
497 return StatusCode::SUCCESS;
498 }
499
500 if ( !mcEvt ) {
501 ATH_MSG_WARNING("Null input HepMC::GenEvent : can not rebuildLinks");
502 return StatusCode::FAILURE;
503 }
504
505 if ( !outEvt ) {
506 ATH_MSG_WARNING("Null output HepMC::GenEvent: can not rebuildLinks");
507 return StatusCode::FAILURE;
508 }
509#ifdef HEPMC3
510 return StatusCode::SUCCESS;
511#else
512 // Cache some useful infos
513 const int pdgId = mcPart->pdg_id();
514 const int bc = HepMC::barcode(mcPart);
515
516//AV: Const correctness is broken for HepMC2.
518 HepMC::GenVertexPtr dcyVtx = inPart->end_vertex();
519
520 if ( !dcyVtx ) {
521 ATH_MSG_VERBOSE("No decay vertex for the particle #" << bc << " : " << "No link to rebuild...");
522 return StatusCode::SUCCESS;
523 }
524
525 std::list<int> bcChildPart;
526 std::list<int> bcChildVert;
527
528 //
529 // Loop over all descendants of the GenParticle
530 // Store the barcode of the GenParticles entering into each GenVertex
531 //
532 const HepMC::GenVertex::vertex_iterator endVtx = dcyVtx->vertices_end(HepMC::descendants);
533 for ( HepMC::GenVertex::vertex_iterator itrVtx = dcyVtx->vertices_begin( HepMC::descendants );
534 itrVtx != endVtx;
535 ++itrVtx ) {
536 bool foundPdgId = false;
537 HepMC::GenVertex::particles_in_const_iterator endPart = (*itrVtx)->particles_in_const_end();
538 for ( HepMC::GenVertex::particles_in_const_iterator itrPart = (*itrVtx)->particles_in_const_begin();
539 itrPart != endPart;
540 ++itrPart ) {
541
542 // because the vertices are traversed in POST ORDER !!
543 // (quoting GenVertex::vertex_iterator)
544 bcChildPart.push_front( (*itrPart)->barcode() );
545
546 if ( (*itrPart)->pdg_id() == pdgId ) {
547 foundPdgId = true;
548 }
549 }//> loop over in-going particles of this vertex
550
551 if ( foundPdgId ) {
552 bcChildVert.push_front( (*itrVtx)->barcode() );
553 }
554
555 }//> loop over descendants of decay vertex
556
557 //
558 // Now we loop over the previously stored barcodes and
559 // we connect our GenParticle to the first found barcode
560 //
561 std::list<int>::const_iterator bcVtxEnd = bcChildVert.end();
562 for ( std::list<int>::const_iterator itrBcVtx = bcChildVert.begin();
563 itrBcVtx != bcVtxEnd;
564 ++itrBcVtx ) {
565 HepMC::GenVertex * childVtx = outEvt->barcode_to_vertex(*itrBcVtx);
566 if ( childVtx ) {
567 if ( childVtx->particles_in_size() > 0 ) {
568 HepMC::GenVertex::particles_in_const_iterator endPart = childVtx->particles_in_const_end();
569 for ( HepMC::GenVertex::particles_in_const_iterator itrPart = childVtx->particles_in_const_begin();
570 itrPart != endPart;
571 ++itrPart ) {
572 if ( (*itrPart)->pdg_id() == pdgId ) {
573 HepMC::GenVertex * prodVtx = (*itrPart)->production_vertex();
574 if ( prodVtx ) {
575 if ( prodVtx->particles_in_size() > 0 ) {
576 // Humm... This is not what we'd have expected
577 // so we skip it
578 if ( msgLvl(MSG::VERBOSE) ) {
579 msg(MSG::VERBOSE)
580 << "found a particle = "
581 << (*itrPart) << ", "
582 << "but its production vertex has incoming particles !"
583 << endmsg;
584 continue;
585 }
586 // create a GenVertex which will be the decay vertex of our
587 // GenParticle and the production vertex of the GenParticle
588 // we just found
590 outEvt->add_vertex( linkVtx );
591 linkVtx->add_particle_in( mcPart );
592 linkVtx->add_particle_out( *itrPart );
593
594 msg(MSG::ERROR)
595 << "====================================================="
596 << endmsg
597 << "Created a GenVertex - link !"
598 << std::endl;
599 std::stringstream vtxLink("");
600 linkVtx->print(vtxLink);
601 msg(MSG::ERROR)
602 << vtxLink.str()
603 << endmsg
604 << "====================================================="
605 << endmsg;
606 }
607 }
608 }
609 }//> loop over incoming particles
610 } else {
611 // no incoming particle : so we just add this particle
612 // a bit odd though : FIXME ?
613 childVtx->add_particle_in(mcPart);
614 msg(MSG::WARNING) << "Odd situation:" << std::endl;
615 std::stringstream vtxDump( "" );
616 childVtx->print(vtxDump);
617 msg(MSG::WARNING) << vtxDump.str() << endmsg;
618 return StatusCode::SUCCESS;
619 }//> end if incoming particles
620 }//> found a child-vertex
621 }//> loop over child-vertex-barcodes
622 return StatusCode::FAILURE;
623#endif
624}
bool msgLvl(const MSG::Level lvl) const
GenParticle * barcode_to_particle(const GenEvent *e, int id)
Definition GenEvent.h:630
int barcode(const T *p)
Definition Barcode.h:16
HepMC::GenVertex * GenVertexPtr
Definition GenVertex.h:59
GenVertexPtr newGenVertexPtr(const HepMC::FourVector &pos=HepMC::FourVector(0.0, 0.0, 0.0, 0.0), const int i=0)
Definition GenVertex.h:64
GenParticle * GenParticlePtr
Definition GenParticle.h:37
MsgStream & msg
Definition testRead.cxx:32

◆ reconnectParticles()

StatusCode OldSpclMcFilterTool::reconnectParticles ( const McEventCollection * inEvt,
McEventCollection * out )
protected

Reconnect the particles of the filtered McEventCollection.

We need the original McEventCollection to know if 2 particles were connected

Definition at line 429 of file OldSpclMcFilterTool.cxx.

431{
432 if ( nullptr == in || nullptr == out ) {
433 ATH_MSG_ERROR("Invalid pointer to McEventCollection !!" << endmsg
434 << " in: " << in << endmsg
435 << " out: " << out);
436 return StatusCode::FAILURE;
437 }
438#ifdef HEPMC3
439 return StatusCode::SUCCESS;
440#else
441 for ( unsigned int iEvt = 0; iEvt != in->size(); ++iEvt) {
442 const HepMC::GenEvent * evt = (*in)[iEvt];
443 HepMC::GenEvent * outEvt = (*out)[iEvt];
444
445 // Reconnect the particles
446 ATH_MSG_VERBOSE("Reconnecting particles...");
447 for (const auto& itrPart: *outEvt) {
448 if ( itrPart->end_vertex() ) {
449 continue;
450 }
451 if ( rebuildLinks( evt, outEvt, itrPart ).isFailure() ) {
452 ATH_MSG_WARNING("Could not rebuild links for this particle = "<< itrPart);
453 } else if ( msgLvl(MSG::VERBOSE) ) {
454 msg(MSG::VERBOSE)
455 << "==========================================================="
456 << endmsg << "Production vertex for particle " << itrPart << " : ";
457 if ( itrPart->production_vertex() ) {
458 std::stringstream prodVtx("");
459 HepMC::Print::line(prodVtx,itrPart->production_vertex());
460 msg(MSG::VERBOSE) << std::endl << prodVtx.str() << endmsg;
461 } else {
462 msg(MSG::VERBOSE) << "[No production vertex]" << endmsg;
463 }
464
465 msg(MSG::VERBOSE) << "Decay vertex for particle "
466 << itrPart << " : ";
467 if ( itrPart->end_vertex() ) {
468 std::stringstream dcyVtx("");
469 HepMC::Print::line(dcyVtx, itrPart->end_vertex());
470 msg(MSG::VERBOSE) << std::endl
471 << dcyVtx.str()
472 << endmsg;
473 } else {
474 msg(MSG::VERBOSE) << endmsg << "[No decay vertex]" << endmsg;
475 }
476 }//> end VERBOSE messages
477
478 }//> loop over particles
479 }//> loop over GenEvents
480
481 return StatusCode::SUCCESS;
482#endif
483}
StatusCode rebuildLinks(const HepMC::GenEvent *mcEvent, HepMC::GenEvent *outEvt, const HepMC::GenParticlePtr &mcPart)
Rebuild the links between particles which were connected, eg by a long FSR chain.
void line(std::ostream &os, const GenEvent &e)
Definition GenEvent.h:678

◆ renounce()

std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > AthCommonDataStore< AthCommonMsg< AlgTool > >::renounce ( T & h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381 {
382 h.renounce();
384 }
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ selectSpclMcBarcodes()

StatusCode OldSpclMcFilterTool::selectSpclMcBarcodes ( )
protected

Retrieve the GenParticles from the GenEvent object (located into the McEventCollection container), filter them and store their barcode into the list of barcodes of particles to keep.

skip stuff with no end-vertex

stable particles

Save photons

Save photon only if it does not decay (ie no end_vertex)

ask McVtxFilterTool for its decision ie: final word is given to the user

Definition at line 140 of file OldSpclMcFilterTool.cxx.

141{
142 StatusCode sc = StatusCode::SUCCESS;
143
144 // Get all of the generated particles (does not have Geant secondaries)
145
146 std::vector<HepMC::ConstGenParticlePtr> particles;
147 if ( m_includeSimul ) {
148 sc = m_tesIO->getMC(particles, false, m_mcEventsReadHandleKey.key());
149 } else {
150 sc = m_tesIO->getMC(particles, true, m_mcEventsReadHandleKey.key());
151 }
152 if ( sc.isFailure() ) {
153 ATH_MSG_ERROR("Could not get Monte Carlo particles from TDS at : "
154 << m_mcEventsReadHandleKey.key());
155 return StatusCode::FAILURE;
156 }
157
158 m_barcodes.clear();
159
160 // Loop over all particles, selecting special ones
161 // keep track of them using their barcodes
162
163 for (const auto& part : particles) {
164
165 const int id = part->pdg_id();
166 const int ida = std::abs(id);
167 const HepMC::FourVector hlv = part->momentum();
168 const double pt = hlv.perp();
169 const double eta = hlv.pseudoRapidity();
170 const double mass = hlv.m();
171 const int barcode = HepMC::barcode(part);
172
173 HepMC::ConstGenVertexPtr decayVtx = part->end_vertex();
174 HepMC::ConstGenVertexPtr prodVtx = part->production_vertex();
175
176 bool isSpcl = false;
177
179 if( !MC::isStable(part) && !decayVtx ) continue;
180
181 const bool accept = pt > m_ptMin;
182
184 // Select special particles
186
188 if (m_includeSimul ) {
189 if ( MC::isSimStable(part) && accept && std::abs(eta) < m_etaRange ) isSpcl = true;
190 } else {
191 if ( MC::isGenStable(part) && accept && std::abs(eta) < m_etaRange ) isSpcl = true;
192 }
193 // e, mu, tau, neutrino
194 // Hard coded cut pt>2GeV to remove beam-jet Dalitz decays, etc.
195 if( MC::isSMLepton(part) && pt>2.*GeV && std::abs(eta) < m_etaRange ) isSpcl = true;
196
199 if ( MC::isPhoton(part) && pt>m_ptGamMin && std::abs(eta) < m_etaRange ) {
201 if ( nullptr == part->end_vertex() ) {
202 isSpcl=true;
203 }
204 }
205
206 // Any long-lived B meson or baryon 5x1 or 5xx2
207 int ifl=0;
208 if( ida>100 && ida<1000) ifl=ida/100;
209 if( ida>1000 && ida<10000) ifl=ida/1000;
210 int jj1 = ida%10;
211 if( (ifl==5 && jj1<3 && mass<9.0*GeV) || ( ifl==4 && jj1<3 && mass<2.4*GeV) ) {
212 if (accept) isSpcl = true;
213 }
214
215 // Any heavy particle other than quarks or gluons.
216 // M > 9.0GeV excludes B hadrons but includes Upsilon, W, Z, t, ...
217 if( ida>5 && ida!=21 && ida!=9 && mass>9.*GeV && accept ) isSpcl=true;
218
219 // save the quarks
220 if (ida >= 1 && ida <= 5 && accept ) isSpcl = true;
221
222 // save the gluons
223 if ( ida == 21 && accept ) isSpcl = true;
224
225 // save the double charged Higgs
226 if ( (ida == 9900041 || ida == 9900042) && accept ) isSpcl = true;
227
228 // SUSY particles -- relies on PDG codes
229 if( ida>1000000 && ida<3000000 && accept ) isSpcl = true;
230
232 // Exclude invalid special particles
234
235 // Monte Carlo internal particles per PDG
236 if( ida>80 && ida<101 ) isSpcl=false;
237
238 // Particles decaying into itself
239 // This prevents documentaries from being reported twice and
240 // eliminates (if asked to) parton showers like q -> qg.
241 // But should not delete particle if child is from GEANT.
242 if( isSpcl && decayVtx ) {
243 auto dcyVtx = part->end_vertex();
244 for(const auto& child: *dcyVtx) {
245 if( child->pdg_id()==id && //> looking for parton showers or documentaries
246 HepMC::barcode(child) !=barcode && //> just to be sure that merging GEN_EVENT/G4Truth is OK
247 !HepMC::is_simulation_particle(child) //> child is not from GEANT
248 ) {
250 // we keep the parent particle
251 // this could be vertices of the form :
252 // q -> q + g + b + bbar(hence the outgoing quark isn't decaying:documentary)
253 // t -> t + W + b (with outgoing top being a documentary)
254 // q -> q + g (real parton shower)
255 isSpcl = true;
256 } else {
257 isSpcl = false;
258 }
259 }
260 }
261 }
262
267 if ( ( decayVtx && m_mcVtxFilterTool->isAccepted(decayVtx) ) ||
268 ( prodVtx && m_mcVtxFilterTool->isAccepted(prodVtx) ) ) {
269 isSpcl = true;
270 }
271
273 // Save special particles and children
275 if( !isSpcl ) continue;
276 m_barcodes.insert(barcode); // add it to list
277
278 // Children
279 if( isSpcl && decayVtx ) {
280 for(const auto& child: *(part->end_vertex())) {
282 m_barcodes.insert(HepMC::barcode(child));// its not there already
283 }
284 }
285 }
286
287 }
288 ATH_MSG_DEBUG("Read " << particles.size()
289 << " and selected " << m_barcodes.size() << " particles");
290
291 return StatusCode::SUCCESS;
292}
Scalar eta() const
pseudorapidity method
static Double_t sc
std::set< int > m_barcodes
List of particles (in fact their unique barcode) which have been labelled as "special".
StatusCode accept(const xAOD::Muon *mu)
::StatusCode StatusCode
StatusCode definition for legacy code.
bool is_simulation_particle(const T &p)
Method to establish if a particle (or barcode) was created during the simulation (TODO update to be s...
const HepMC::GenVertex * ConstGenVertexPtr
Definition GenVertex.h:60
bool isSMLepton(const T &p)
APID: the fourth generation leptons are not standard model leptons.
bool isPhoton(const T &p)
bool isStable(const T &p)
Identify if the particle is stable, i.e. has not decayed.
bool isGenStable(const T &p)
Determine if the particle is stable at the generator (not det-sim) level,.
bool isSimStable(const T &p)
Identify if the particle is considered stable at the post-detector-sim stage.

◆ shapeGenEvent()

StatusCode OldSpclMcFilterTool::shapeGenEvent ( McEventCollection * outEvt)
protected

Build the out McEventCollection by removing all the GenParticles whose barcode is not in the list of barcodes to keep.

Remove also the dead vertices.

Definition at line 294 of file OldSpclMcFilterTool.cxx.

295{
296 //now remove all the particles except those whose barcodes are marked
297 for ( McEventCollection::iterator evt = genAod->begin(); evt != genAod->end();++evt) {
298 std::vector<HepMC::GenParticlePtr> going_out;
299
300#ifdef HEPMC3
301 for ( auto & p : ((HepMC::GenEvent*)(*evt))->particles()) {
302//AV: We modify event
303 int pBC = HepMC::barcode(p);
304 ATH_MSG_DEBUG("[pdg,bc]= " << p->pdg_id() << ", " << pBC);
305 if ( m_barcodes.count(pBC) != 0 ) continue;
306 going_out.push_back(p); // list of useless particles
307 auto pvtx = p->production_vertex();
308 auto evtx = p->end_vertex();
309 if (pvtx) pvtx->remove_particle_out(p); //remove from production vertex from useless partilcle
310 if (evtx) { // if it has end vertex, may need to move the out partilces
311 if(pvtx){ // move the partilces back
312 for (auto& pp: evtx->particles_out()) {
313 pvtx->add_particle_out(pp);
314 }
315 }
316 evtx->remove_particle_out(p); // disconnect from end vertex
317 }
318 }//> loop over particles
319#else
320 std::list<int> evtBarcodes;
321 for ( const auto& p: **evt ) {
322 evtBarcodes.push_back( HepMC::barcode(p) );
323 }
324 for ( std::list<int>::const_iterator itrBc = evtBarcodes.begin();itrBc != evtBarcodes.end(); ++itrBc ) {
325//AV: We modify event
326 HepMC::GenParticlePtr p = HepMC::barcode_to_particle((HepMC::GenEvent*)(*evt),*itrBc);
327 int pBC = HepMC::barcode(p);
328 ATH_MSG_DEBUG("[pdg,bc]= " << p->pdg_id() << ", " << pBC);
329 if ( m_barcodes.count(pBC) == 0 ) {
330 going_out.push_back(p); // list of useless particles
331 auto pvtx = p->production_vertex();
332 auto evtx = p->end_vertex();
333 if (pvtx) pvtx->remove_particle(p); //remove from production vertex from useless partilcle
334 if (evtx) { // if it has end vertex, may need to move the out partilces
335 if(pvtx){ // move the partilces back
336 if ( msgLvl(MSG::DEBUG) ) {
337 msg(MSG::DEBUG) << "\tin endVtx "<< endmsg;
338 }
339 while ( evtx->particles_out_const_begin() != evtx->particles_out_const_end()) {
340 HepMC::GenVertex::particles_out_const_iterator np = evtx->particles_out_const_begin();
341 pvtx->add_particle_out(*np); // note that this really is a MOVE!!! it get taken off evtx by magic
342 }
343 }//> end if [prod vertex]
344 evtx->remove_particle(p); // disconnect from end vertex
345 }//> end if [decay vertex]
346 }//> particle has to be removed
347 }//> loop over particles (via their barcode)
348#endif
349
350
351#ifdef HEPMC3
352 // there may be a bunch of vertices with no particles connected to them:
353 // ==> Get rid of them //AV: Not sure if this is needed
354 std::vector<HepMC::ConstGenVertexPtr> going_out_again;
355 for ( auto& v: (*evt)->vertices()) {
356 if ( v->particles_in().empty() && v->particles_out().empty() ){
357 going_out_again.push_back(v);
358 }
359 }//> loop over vertices
360//HepMC3 uses smart pointers
361#else
362 // now get rid of all dead particles
363 for ( std::vector<HepMC::GenParticle*>::iterator d = going_out.begin();
364 d != going_out.end();
365 ++d ){
366 delete *d;
367 }
368
369 // there may be a bunch of vertices with no particles connected to them:
370 // ==> Get rid of them
371 std::vector<HepMC::GenVertex*> going_out_again;
372 for ( HepMC::GenEvent::vertex_const_iterator v = (*evt)->vertices_begin();
373 v != (*evt)->vertices_end(); ++v ) {
374 if ( (*v)->particles_in_size() == 0 && (*v)->particles_out_size() == 0 ){
375 going_out_again.push_back(*v);
376 }
377 }//> loop over vertices
378
379 // now get rid of all dead vertices
380 for ( std::vector<HepMC::GenVertex*>::iterator d = going_out_again.begin();
381 d != going_out_again.end();
382 ++d ){
383 delete *d;
384 }
385#endif
386
387 }//> loop over GenEvents in McEventCollection
388
389 // Set the signal_process_vertex to NULL if not to be recorded
390 for ( McEventCollection::iterator evt = genAod->begin(); evt != genAod->end(); ++evt) {
391#ifdef HEPMC3
392 auto sigProcVtx = HepMC::signal_process_vertex(*evt);
393 if (!sigProcVtx) continue;
394 const int sigProcBC = HepMC::barcode(sigProcVtx);
395 bool isInColl = false;
396 for ( const auto& itrVtx: (*evt)->vertices() ) {
397 if ( sigProcBC == HepMC::barcode(itrVtx) ) {
398 isInColl = true;
399 break;
400 }
401 } //> loop over vertices
402//AV: We don't set nullptr as signal vertex in HepMC3
403 if ( !isInColl ) {
404 (*evt)->remove_attribute("signal_process_vertex");
405 }
406#else
407 const HepMC::GenVertex * sigProcVtx = (*evt)->signal_process_vertex();
408 if ( 0 != sigProcVtx ) {
409 const int sigProcBC = sigProcVtx->barcode();
410 bool isInColl = false;
411 for ( HepMC::GenEvent::vertex_const_iterator itrVtx = (*evt)->vertices_begin();
412 itrVtx != (*evt)->vertices_end();
413 ++itrVtx ) {
414 if ( sigProcBC == (*itrVtx)->barcode() ) {
415 isInColl = true;
416 break;
417 }
418 } //> loop over vertices
419 if ( !isInColl ) {
420 (*evt)->set_signal_process_vertex(0);
421 }
422 }//> a signal_process_vertex has been setup
423#endif
424 }//> loop over GenEvent's
425
426 return StatusCode::SUCCESS;
427}
DataModel_detail::iterator< DataVector > iterator
Definition DataVector.h:842
GenVertex * signal_process_vertex(const GenEvent *e)
Definition GenEvent.h:627

◆ sysInitialize()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysInitialize ( )
overridevirtualinherited

Perform system initialization for an algorithm.

We override this to declare all the elements of handle key arrays at the end of initialization. See comments on updateVHKA.

Reimplemented in asg::AsgMetadataTool, AthCheckedComponent< AthAlgTool >, AthCheckedComponent<::AthAlgTool >, and DerivationFramework::CfAthAlgTool.

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::updateVHKA ( Gaudi::Details::PropertyBase & )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308 {
309 // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310 // << " size: " << m_vhka.size() << endmsg;
311 for (auto &a : m_vhka) {
313 for (auto k : keys) {
314 k->setOwner(this);
315 }
316 }
317 }
std::vector< SG::VarHandleKeyArray * > m_vhka

Member Data Documentation

◆ m_barcodes

std::set<int> OldSpclMcFilterTool::m_barcodes
protected

List of particles (in fact their unique barcode) which have been labelled as "special".

Definition at line 103 of file OldSpclMcFilterTool.h.

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_doEtIsolation

BooleanProperty TruthParticleFilterBaseTool::m_doEtIsolation
protectedinherited

Switch to compute or not the Et-isolations for TruthParticle (and their underlying HepMC::GenParticle).

Default is to not compute these Et-isolations (and save CPU)

Definition at line 94 of file TruthParticleFilterBaseTool.h.

◆ m_etaRange

DoubleProperty OldSpclMcFilterTool::m_etaRange
protected

Eta acceptance cut applied on all stable particles.

Definition at line 120 of file OldSpclMcFilterTool.h.

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_includePartonShowers

BooleanProperty OldSpclMcFilterTool::m_includePartonShowers
protected

Switch to include or not parton showers.

Definition at line 128 of file OldSpclMcFilterTool.h.

◆ m_includeSimul

BooleanProperty OldSpclMcFilterTool::m_includeSimul
protected

Switch to include or not particles from detector simulation (Geant4)

Definition at line 124 of file OldSpclMcFilterTool.h.

◆ m_isolationTool

IsolTool_t TruthParticleFilterBaseTool::m_isolationTool
protectedinherited

Pointer to the TruthIsolationTool to be able to compute transverse energy isolations for various isolation cones cuts.

See McParticleEvent/TruthParticleParameters.h for cone cuts.

Definition at line 85 of file TruthParticleFilterBaseTool.h.

◆ m_mcEventsOutputWriteHandleKey

SG::WriteHandleKey<McEventCollection> TruthParticleFilterBaseTool::m_mcEventsOutputWriteHandleKey {this,"McEventsOutput","GEN_AOD","WriteHandleKey for the output McEventCollection which has been filtered"}
protectedinherited

Location of the output McEventCollection which has been filtered.

Definition at line 104 of file TruthParticleFilterBaseTool.h.

104{this,"McEventsOutput","GEN_AOD","WriteHandleKey for the output McEventCollection which has been filtered"};

◆ m_mcEventsReadHandleKey

SG::ReadHandleKey<McEventCollection> TruthParticleFilterBaseTool::m_mcEventsReadHandleKey {this,"McEvents","TruthEvent","ReadHandleKey for input McEventCollection one wants to filter"}
protectedinherited

ReadHandleKey for the input McEventCollection one wants to filter.

Definition at line 100 of file TruthParticleFilterBaseTool.h.

100{this,"McEvents","TruthEvent","ReadHandleKey for input McEventCollection one wants to filter"};

◆ m_mcVtxFilterTool

McVtxFilterTool_t TruthParticleFilterBaseTool::m_mcVtxFilterTool
protectedinherited

Pointer to the McVtxFilterTool to be able to select additional vertices on some decay pattern criterion.

Definition at line 78 of file TruthParticleFilterBaseTool.h.

◆ m_ptGamMin

DoubleProperty OldSpclMcFilterTool::m_ptGamMin
protected

Minimum threshold for transverse momentum of photons.

Definition at line 111 of file OldSpclMcFilterTool.h.

◆ m_ptMin

DoubleProperty OldSpclMcFilterTool::m_ptMin
protected

Minimum threshold for transverse momentum for all particles.

Warning: this cut is applied before Pt photon cut !

Definition at line 116 of file OldSpclMcFilterTool.h.

◆ m_removeDecayToSelf

BooleanProperty OldSpclMcFilterTool::m_removeDecayToSelf
protected

Switch to remove particles which decay into themselves (t->tg) but only for generated particles, not the ones from the Geant4 interactions.

Definition at line 137 of file OldSpclMcFilterTool.h.

◆ m_rIsol

DoubleProperty OldSpclMcFilterTool::m_rIsol
protected

deltaR isolation energy cut for electrons, muons, taus and photons

Definition at line 107 of file OldSpclMcFilterTool.h.

◆ m_tesIO

TruthHelper::GenAccessIO* OldSpclMcFilterTool::m_tesIO
protected

Pointer to a StoreGateSvc helper (Mc particle retrieval with predicates)

Definition at line 132 of file OldSpclMcFilterTool.h.

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< AlgTool > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< AlgTool > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.


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