ATLAS Offline Software
Loading...
Searching...
No Matches
DerivationFramework::UFOTrackParticleThinning Class Reference

#include <UFOTrackParticleThinning.h>

Inheritance diagram for DerivationFramework::UFOTrackParticleThinning:
Collaboration diagram for DerivationFramework::UFOTrackParticleThinning:

Public Member Functions

 UFOTrackParticleThinning (const std::string &t, const std::string &n, const IInterface *p)
virtual ~UFOTrackParticleThinning ()
virtual StatusCode initialize () override
virtual StatusCode finalize () override
virtual StatusCode doThinning (const EventContext &ctx) const override

Private Attributes

StringProperty m_streamName { this, "StreamName", "", "Name of the stream being thinned" }
SG::ThinningHandleKey< xAOD::TrackParticleContainerm_inDetSGKey { this, "InDetTrackParticlesKey", "InDetTrackParticles", "" }
Gaudi::Property< bool > m_thinTracks {this,"ThinTrackingContainer",true,"Toggle thinning of container with name InDetTrackParticlesKey"}
Gaudi::Property< std::string > m_PFOSGKey { this, "PFOCollectionSGKey", "Global", "" }
SG::ThinningHandleKey< xAOD::FlowElementContainerm_PFOChargedSGKey { this, "PFOChargedCollectionSGKey", "GlobalChargedParticleFlowObjects", "" }
SG::ThinningHandleKey< xAOD::FlowElementContainerm_PFONeutralSGKey { this, "PFONeutralCollectionSGKey", "GlobalNeutralParticleFlowObjects", "" }
Gaudi::Property< std::vector< std::string > > m_addPFOSGKey { this, "AdditionalPFOKey", {}, ""}
SG::ThinningHandleKey< xAOD::FlowElementContainerm_tmpAddPFOChargedSGKey { this, "TempAddPFOChargedKey","",""}
SG::ThinningHandleKey< xAOD::FlowElementContainerm_tmpAddPFONeutralSGKey { this, "TempAddPFONeutralKey","",""}
std::vector< SG::ThinningHandleKey< xAOD::FlowElementContainer > > m_addPFOChargedSGKey
std::vector< SG::ThinningHandleKey< xAOD::FlowElementContainer > > m_addPFONeutralSGKey
SG::ThinningHandleKey< xAOD::FlowElementContainerm_ufoSGKey { this, "UFOKey", "UFOCSSK", "" }
SG::ReadHandleKey< xAOD::JetContainerm_jetSGKey { this, "JetKey", "", ""}
StringProperty m_selectionString { this, "SelectionString", "", "" }

Detailed Description

Definition at line 30 of file UFOTrackParticleThinning.h.

Constructor & Destructor Documentation

◆ UFOTrackParticleThinning()

DerivationFramework::UFOTrackParticleThinning::UFOTrackParticleThinning ( const std::string & t,
const std::string & n,
const IInterface * p )

Definition at line 14 of file UFOTrackParticleThinning.cxx.

16 :
17base_class(t,n,p)
18{
19}

◆ ~UFOTrackParticleThinning()

DerivationFramework::UFOTrackParticleThinning::~UFOTrackParticleThinning ( )
virtualdefault

Member Function Documentation

◆ doThinning()

StatusCode DerivationFramework::UFOTrackParticleThinning::doThinning ( const EventContext & ctx) const
overridevirtual

Definition at line 67 of file UFOTrackParticleThinning.cxx.

68{
69
70
71 // Retrieve main TrackParticle collection
72 SG::ThinningHandle<xAOD::TrackParticleContainer> importedTrackParticles(m_inDetSGKey, ctx);
73
74 // Retrieve PFO collection if required
75 SG::ThinningHandle<xAOD::FlowElementContainer> importedPFONeutral(m_PFONeutralSGKey, ctx);
76 SG::ThinningHandle<xAOD::FlowElementContainer> importedPFOCharged(m_PFOChargedSGKey, ctx);
77
78 // Retrieve main jet collection
79 SG::ReadHandle<xAOD::JetContainer> importedJets(m_jetSGKey, ctx);
80 unsigned int nJets(importedJets->size());
81 std::vector<const xAOD::Jet*> jetToCheck; jetToCheck.clear();
82
83 // Check the event contains tracks
84 unsigned int nTracks = importedTrackParticles->size();
85 // Check the event contains calo clusters
86 const size_t nPFONeutral = importedPFONeutral->size();
87 const size_t nPFOCharged = importedPFOCharged->size() ;
88 unsigned int nPFOs = nPFOCharged + nPFONeutral;
89 if (nPFOs==0 && nTracks==0) return StatusCode::SUCCESS;
90
91 // Set up a mask with the same entries as the full TrackParticle collection
92 std::vector<bool> maskTracks;
93 maskTracks.assign(nTracks,false); // default: don't keep any tracks
94
95 // Set up a mask with the same entries as the full PFO collection(s)
96 std::vector< bool > pfomaskNeutral( nPFONeutral, false );
97 std::vector< bool > pfomaskCharged( nPFOCharged, false );
98
99 // Retrieve containers
100 // ... UFOs
101 SG::ThinningHandle<xAOD::FlowElementContainer> importedUFOs(m_ufoSGKey, ctx);
102 unsigned int nUFOs(importedUFOs->size());
103
104 // Set up a mask with the same entries as the full CaloCluster collection
105 std::vector<bool> maskUFOs;
106 maskUFOs.assign(nUFOs,false); // default: don't keep any tracks
107
108 // Execute the text parser if requested
109 if (m_selectionString!="") {
110 std::vector<int> entries = m_parser->evaluateAsVector();
111 unsigned int nEntries = entries.size();
112 // check the sizes are compatible
113 if (nJets != nEntries ) {
114 ATH_MSG_ERROR("Sizes incompatible! Are you sure your selection string used jets??");
115 return StatusCode::FAILURE;
116 } else {
117 // identify which jets to keep for the thinning check
118 for (unsigned int i=0; i<nJets; ++i) if (entries[i]==1) jetToCheck.push_back((*importedJets)[i]);
119 }
120 }
121
122 if (m_selectionString=="") { // check all jets as user didn't provide a selection string
123 for(const auto *jet : *importedJets){
124 for( size_t j = 0; j < jet->numConstituents(); ++j ) {
125 auto ufo = jet->constituentLinks().at(j);
126 int index = ufo.index();
127 maskUFOs[index] = true;
128 const xAOD::FlowElement* ufoO = dynamic_cast<const xAOD::FlowElement*>(*ufo);
129 if(!ufoO) continue;
130
131 // Retrieve the track if UFO is charged or combined object
133 int index_trk = ufoO->chargedObject(0)->index();
134 if(index_trk>=0) {
135 maskTracks[index_trk] = true;
136 }
137 }
138
139 // Loop over charged and neutral PFOs
140 for (size_t n = 0; n < ufoO->otherObjects().size(); ++n) {
141 int index_pfo = ufoO->otherObject(n)->index();
142 if(index_pfo<0) continue;
143
144 const xAOD::FlowElement* fe = dynamic_cast<const xAOD::FlowElement*>(ufoO->otherObject(n));
145
147 pfomaskCharged.at( index_pfo ) = true;
148 }
150 pfomaskNeutral.at( index_pfo ) = true;
151 }
152 }
153 }
154 }
155
156 } else {
157
158 for (auto & jetIt : jetToCheck) {
159 for( size_t j = 0; j < jetIt->numConstituents(); ++j ) {
160 auto ufo = jetIt->constituentLinks().at(j);
161 int index = ufo.index();
162 maskUFOs[index] = true;
163
164 const xAOD::FlowElement* ufoO = dynamic_cast<const xAOD::FlowElement*>(*ufo);
165 if(!ufoO) continue;
166
168 int index_trk = ufoO->chargedObject(0)->index();
169 if(index_trk>=0) {
170 maskTracks[index_trk] = true;
171 }
172 }
173
174 for (size_t n = 0; n < ufoO->otherObjects().size(); ++n) {
175 int index_pfo = ufoO->otherObject(n)->index();
176 if(index_pfo<0) continue;
177
178 const xAOD::FlowElement* fe = dynamic_cast<const xAOD::FlowElement*>(ufoO->otherObject(n));
179
181 pfomaskCharged.at( index_pfo ) = true;
182 }
184 pfomaskNeutral.at( index_pfo ) = true;
185 }
186 }
187 }
188 }
189 }
190
191 // Execute the thinning service based on the mask. Finish.
192 if(m_thinTracks){
193 importedTrackParticles.keep (maskTracks);
194 }
195 importedPFONeutral.keep (pfomaskNeutral);
196 importedPFOCharged.keep (pfomaskCharged);
197 importedUFOs.keep (maskUFOs);
198
199 for(unsigned int i = 0; i < m_addPFOChargedSGKey.size(); i++){
200 SG::ThinningHandle<xAOD::FlowElementContainer> tempPFOCharged(m_addPFOChargedSGKey[i], ctx);
201 SG::ThinningHandle<xAOD::FlowElementContainer> tempPFONeutral(m_addPFONeutralSGKey[i], ctx);
202
203 tempPFOCharged.keep(pfomaskCharged);
204 tempPFONeutral.keep(pfomaskNeutral);
205 }
206
207 return StatusCode::SUCCESS;
208}
#define ATH_MSG_ERROR(x)
size_t size() const
Number of registered mappings.
SG::ReadHandleKey< xAOD::JetContainer > m_jetSGKey
SG::ThinningHandleKey< xAOD::TrackParticleContainer > m_inDetSGKey
SG::ThinningHandleKey< xAOD::FlowElementContainer > m_PFOChargedSGKey
std::vector< SG::ThinningHandleKey< xAOD::FlowElementContainer > > m_addPFOChargedSGKey
SG::ThinningHandleKey< xAOD::FlowElementContainer > m_ufoSGKey
SG::ThinningHandleKey< xAOD::FlowElementContainer > m_PFONeutralSGKey
std::vector< SG::ThinningHandleKey< xAOD::FlowElementContainer > > m_addPFONeutralSGKey
std::vector< const xAOD::IParticle * > otherObjects() const
signal_t signalType() const
const xAOD::IParticle * chargedObject(std::size_t i) const
const xAOD::IParticle * otherObject(std::size_t i) const
double entries
Definition listroot.cxx:49
str index
Definition DeMoScan.py:362
float j(const xAOD::IParticle &, const xAOD::TrackMeasurementValidation &hit, const Eigen::Matrix3d &jab_inv)
FlowElement_v1 FlowElement
Definition of the current "pfo version".
Definition FlowElement.h:16

◆ finalize()

StatusCode DerivationFramework::UFOTrackParticleThinning::finalize ( )
overridevirtual

Definition at line 61 of file UFOTrackParticleThinning.cxx.

62{
63 return StatusCode::SUCCESS;
64}

◆ initialize()

StatusCode DerivationFramework::UFOTrackParticleThinning::initialize ( )
overridevirtual

Definition at line 25 of file UFOTrackParticleThinning.cxx.

26{
27 // Decide which collections need to be checked for ID TrackParticles
28 ATH_MSG_VERBOSE("initialize() ...");
29 ATH_CHECK( m_inDetSGKey.initialize(m_streamName) );
30 ATH_MSG_INFO("Using " << m_inDetSGKey.key() << " as the source collection for inner detector track particles");
31
32 m_PFOChargedSGKey = m_PFOSGKey+"ChargedParticleFlowObjects";
33 m_PFONeutralSGKey = m_PFOSGKey+"NeutralParticleFlowObjects";
36 ATH_MSG_INFO("Using " << m_PFONeutralSGKey.key() << "and " << m_PFOChargedSGKey.key() << " as the source collection for the PFlow collection");
37
38 for(unsigned int i = 0; i < m_addPFOSGKey.size(); i++){
39 m_tmpAddPFOChargedSGKey = m_addPFOSGKey[i]+"ChargedParticleFlowObjects";
42 m_tmpAddPFONeutralSGKey = m_addPFOSGKey[i]+"NeutralParticleFlowObjects";
45 }
46
47 ATH_CHECK( m_ufoSGKey.initialize(m_streamName));
48 ATH_MSG_INFO("Using " << m_ufoSGKey.key()<< " as the source collection for UFOs");
49
50 ATH_CHECK( m_jetSGKey.initialize());
51 ATH_MSG_INFO("Using " << m_jetSGKey.key() << " as the source collection for UFOs");
52
53 if (!m_selectionString.empty()){
54 // order must match enum order EJetTrPThinningParser
55 ATH_CHECK( initializeParser( m_selectionString ));
56 }
57
58 return StatusCode::SUCCESS;
59}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_INFO(x)
#define ATH_MSG_VERBOSE(x)
SG::ThinningHandleKey< xAOD::FlowElementContainer > m_tmpAddPFOChargedSGKey
Gaudi::Property< std::vector< std::string > > m_addPFOSGKey
SG::ThinningHandleKey< xAOD::FlowElementContainer > m_tmpAddPFONeutralSGKey

Member Data Documentation

◆ m_addPFOChargedSGKey

std::vector<SG::ThinningHandleKey<xAOD::FlowElementContainer> > DerivationFramework::UFOTrackParticleThinning::m_addPFOChargedSGKey
private

Definition at line 48 of file UFOTrackParticleThinning.h.

◆ m_addPFONeutralSGKey

std::vector<SG::ThinningHandleKey<xAOD::FlowElementContainer> > DerivationFramework::UFOTrackParticleThinning::m_addPFONeutralSGKey
private

Definition at line 49 of file UFOTrackParticleThinning.h.

◆ m_addPFOSGKey

Gaudi::Property<std::vector<std::string> > DerivationFramework::UFOTrackParticleThinning::m_addPFOSGKey { this, "AdditionalPFOKey", {}, ""}
private

Definition at line 45 of file UFOTrackParticleThinning.h.

45{ this, "AdditionalPFOKey", {}, ""};

◆ m_inDetSGKey

SG::ThinningHandleKey<xAOD::TrackParticleContainer> DerivationFramework::UFOTrackParticleThinning::m_inDetSGKey { this, "InDetTrackParticlesKey", "InDetTrackParticles", "" }
private

Definition at line 40 of file UFOTrackParticleThinning.h.

40{ this, "InDetTrackParticlesKey", "InDetTrackParticles", "" };

◆ m_jetSGKey

SG::ReadHandleKey<xAOD::JetContainer> DerivationFramework::UFOTrackParticleThinning::m_jetSGKey { this, "JetKey", "", ""}
private

Definition at line 51 of file UFOTrackParticleThinning.h.

51{ this, "JetKey", "", ""};

◆ m_PFOChargedSGKey

SG::ThinningHandleKey<xAOD::FlowElementContainer> DerivationFramework::UFOTrackParticleThinning::m_PFOChargedSGKey { this, "PFOChargedCollectionSGKey", "GlobalChargedParticleFlowObjects", "" }
private

Definition at line 43 of file UFOTrackParticleThinning.h.

43{ this, "PFOChargedCollectionSGKey", "GlobalChargedParticleFlowObjects", "" };

◆ m_PFONeutralSGKey

SG::ThinningHandleKey<xAOD::FlowElementContainer> DerivationFramework::UFOTrackParticleThinning::m_PFONeutralSGKey { this, "PFONeutralCollectionSGKey", "GlobalNeutralParticleFlowObjects", "" }
private

Definition at line 44 of file UFOTrackParticleThinning.h.

44{ this, "PFONeutralCollectionSGKey", "GlobalNeutralParticleFlowObjects", "" };

◆ m_PFOSGKey

Gaudi::Property<std::string> DerivationFramework::UFOTrackParticleThinning::m_PFOSGKey { this, "PFOCollectionSGKey", "Global", "" }
private

Definition at line 42 of file UFOTrackParticleThinning.h.

42{ this, "PFOCollectionSGKey", "Global", "" };

◆ m_selectionString

StringProperty DerivationFramework::UFOTrackParticleThinning::m_selectionString { this, "SelectionString", "", "" }
private

Definition at line 52 of file UFOTrackParticleThinning.h.

52{ this, "SelectionString", "", "" };

◆ m_streamName

StringProperty DerivationFramework::UFOTrackParticleThinning::m_streamName { this, "StreamName", "", "Name of the stream being thinned" }
private

Definition at line 39 of file UFOTrackParticleThinning.h.

39{ this, "StreamName", "", "Name of the stream being thinned" };

◆ m_thinTracks

Gaudi::Property<bool> DerivationFramework::UFOTrackParticleThinning::m_thinTracks {this,"ThinTrackingContainer",true,"Toggle thinning of container with name InDetTrackParticlesKey"}
private

Definition at line 41 of file UFOTrackParticleThinning.h.

41{this,"ThinTrackingContainer",true,"Toggle thinning of container with name InDetTrackParticlesKey"};

◆ m_tmpAddPFOChargedSGKey

SG::ThinningHandleKey<xAOD::FlowElementContainer> DerivationFramework::UFOTrackParticleThinning::m_tmpAddPFOChargedSGKey { this, "TempAddPFOChargedKey","",""}
private

Definition at line 46 of file UFOTrackParticleThinning.h.

46{ this, "TempAddPFOChargedKey","",""};

◆ m_tmpAddPFONeutralSGKey

SG::ThinningHandleKey<xAOD::FlowElementContainer> DerivationFramework::UFOTrackParticleThinning::m_tmpAddPFONeutralSGKey { this, "TempAddPFONeutralKey","",""}
private

Definition at line 47 of file UFOTrackParticleThinning.h.

47{ this, "TempAddPFONeutralKey","",""};

◆ m_ufoSGKey

SG::ThinningHandleKey<xAOD::FlowElementContainer> DerivationFramework::UFOTrackParticleThinning::m_ufoSGKey { this, "UFOKey", "UFOCSSK", "" }
private

Definition at line 50 of file UFOTrackParticleThinning.h.

50{ this, "UFOKey", "UFOCSSK", "" };

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