ATLAS Offline Software
Loading...
Searching...
No Matches
SoftElectronTruthDecoratorAlg.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
5
8
11
13
16
19
21
22namespace FlavorTagDiscriminants {
23
25 const std::string& name, ISvcLocator* loc )
26 : AthReentrantAlgorithm(name, loc) {}
27
29 ATH_MSG_DEBUG( "Initializing " << name() << "... " );
30
31 // Initialize Container keys
32 ATH_MSG_DEBUG( "Initializing containers:" );
34
35 ATH_CHECK( m_ElectronContainerKey.initialize() );
37
38 // Initialise accessors
39 ATH_CHECK( m_acc_origin_label.initialize() );
40 ATH_CHECK( m_acc_type_label.initialize() );
41 ATH_CHECK( m_acc_source_label.initialize() );
42 ATH_CHECK( m_acc_vertex_index.initialize() );
43 ATH_CHECK( m_acc_parent_uniqueID.initialize() );
44
45 // Initialise decorators
46 ATH_CHECK( m_dec_origin_label.initialize() );
47 ATH_CHECK( m_dec_type_label.initialize() );
48 ATH_CHECK( m_dec_source_label.initialize() );
49 ATH_CHECK( m_dec_vertex_index.initialize() );
50 ATH_CHECK( m_dec_uniqueID.initialize() );
51 ATH_CHECK( m_dec_parent_uniqueID.initialize() );
52
53 ATH_CHECK( m_truthParticleLinkKey.initialize() );
55 // ATLASRECTS-8290: this is for backward compatability, remove eventually
56 if (m_use_barcode) {
57 m_uidKey = "TruthParticles.barcode";
58 }
59 ATH_CHECK( m_uidKey.initialize() );
60
61 return StatusCode::SUCCESS;
62 }
63
64 StatusCode SoftElectronTruthDecoratorAlg::execute(const EventContext& ctx) const {
65 ATH_MSG_DEBUG( "Executing " << name() << "... " );
66
67 using EC = xAOD::ElectronContainer;
68
69 // read collections
71 ATH_CHECK( electrons.isValid() );
72 ATH_MSG_DEBUG( "Retrieved " << electrons->size() << " electrons..." );
73
74 // instantiate accessors
76 RDH acc_origin_label(m_acc_origin_label, ctx);
77 RDH acc_type_label(m_acc_type_label, ctx);
78 RDH acc_source_label(m_acc_source_label, ctx);
79 RDH acc_vertex_index(m_acc_vertex_index, ctx);
80 RDH acc_parent_uniqueID(m_acc_parent_uniqueID, ctx);
81
85
86 // instantiate decorators
88 WDH dec_origin_label(m_dec_origin_label, ctx);
89 WDH dec_type_label(m_dec_type_label, ctx);
90 WDH dec_source_label(m_dec_source_label, ctx);
91 WDH dec_vertex_index(m_dec_vertex_index, ctx);
92 WDH dec_uniqueID(m_dec_uniqueID, ctx);
93 WDH dec_parent_uniqueID(m_dec_parent_uniqueID, ctx);
94
95 std::vector<const xAOD::Electron*> el_vector(electrons->begin(), electrons->end());
96 for ( const auto& electron : el_vector ) {
97
98 // get the linked truth particle
99 const auto truth_link = truthParticleLink(*electron);
100
101 if (!truth_link || !truth_link.isValid()) {
102 // if the truth link is broken, assume PU
103 dec_origin_label(*electron) = InDet::ExclusiveOrigin::Pileup;
104 dec_type_label(*electron) = TruthDecoratorHelpers::TruthType::Label::NoTruth;
105 dec_source_label(*electron) = TruthDecoratorHelpers::TruthSource::Label::NoTruth;
106 dec_vertex_index(*electron) = -2;
107 dec_uniqueID(*electron) = HepMC::UNDEFINED_ID;
108 dec_parent_uniqueID(*electron) = HepMC::UNDEFINED_ID;
109 } else {
110 const auto *truth = *truth_link;
111 int electron_type = classifierParticleType(*truth);
112
113 if (m_valid_types.count(electron_type)) {
114 dec_origin_label(*electron) = acc_origin_label(*truth);
115 }
116 else {
117 dec_origin_label(*electron) = InDet::ExclusiveOrigin::Fake;
118 }
119
120 dec_vertex_index(*electron) = acc_vertex_index(*truth);
121 dec_type_label(*electron) = acc_type_label(*truth);
122 dec_source_label(*electron) = acc_source_label(*truth);
123 // ATLASRECTS-8290: replace uid with ->uid() eventually
124 dec_uniqueID(*electron) = uid(*truth);
125 dec_parent_uniqueID(*electron) = acc_parent_uniqueID(*truth);
126 }
127 }
128 return StatusCode::SUCCESS;
129 }
130}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_DEBUG(x)
Handle class for reading a decoration on an object.
Handle class for adding a decoration to an object.
An algorithm that can be simultaneously executed in multiple threads.
SG::ReadDecorHandleKey< xAOD::TruthParticleContainer > m_uidKey
SG::ReadDecorHandleKey< xAOD::TruthParticleContainer > m_classifierParticleTypeKey
SG::ReadHandleKey< xAOD::ElectronContainer > m_ElectronContainerKey
SG::ReadHandleKey< xAOD::TruthParticleContainer > m_truthParticleContainerKey
virtual StatusCode execute(const EventContext &) const override
SoftElectronTruthDecoratorAlg(const std::string &name, ISvcLocator *pSvcLocator)
SG::ReadDecorHandleKey< xAOD::ElectronContainer > m_truthParticleLinkKey
Handle class for reading a decoration on an object.
Handle class for adding a decoration to an object.
constexpr int UNDEFINED_ID
ElectronContainer_v1 ElectronContainer
Definition of the current "electron container version".