ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
PhysicsAnalysis
DerivationFramework
DerivationFrameworkTau
src
TauThinningTool.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#include "
DerivationFrameworkTau/TauThinningTool.h
"
6
#include "
StoreGate/ThinningHandle.h
"
7
#include <vector>
8
#include <string>
9
10
11
DerivationFramework::TauThinningTool::TauThinningTool
(
const
std::string& t,
12
const
std::string& n,
13
const
IInterface* p) :
14
base_class(t,n,p)
15
{
16
}
17
18
19
StatusCode
DerivationFramework::TauThinningTool::initialize
()
20
{
21
ATH_CHECK
(
m_taus
.initialize(
m_streamName
) );
22
ATH_CHECK
(
m_tauTracks
.initialize(
m_streamName
) );
23
ATH_CHECK
(
m_trackParticles
.initialize(
m_streamName
) );
24
ATH_CHECK
(
m_neutralPFOs
.initialize(
m_streamName
) );
25
ATH_CHECK
(
m_secondaryVertices
.initialize(
m_streamName
) );
26
27
// set up the text-parsing machinery for selecting taus according to user cuts
28
if
(!
m_selectionString
.empty()) {
29
ATH_MSG_INFO
(
"Selection string for "
<<
m_taus
.key() <<
": "
<<
m_selectionString
);
30
ATH_CHECK
( initializeParser(
m_selectionString
) );
31
}
32
return
StatusCode::SUCCESS;
33
}
34
35
36
StatusCode
DerivationFramework::TauThinningTool::finalize
()
37
{
38
ATH_MSG_INFO
(
"Processed "
<<
m_ntot
<<
" taus, "
<<
m_npass
<<
" were kept"
);
39
ATH_CHECK
( finalizeParser() );
40
return
StatusCode::SUCCESS;
41
}
42
43
44
StatusCode
DerivationFramework::TauThinningTool::doThinning
(
const
EventContext& ctx)
const
45
{
46
47
// retrieve containers and thin them
48
SG::ThinningHandle<xAOD::TauJetContainer>
taus
(
m_taus
, ctx);
49
taus
.thinAll();
50
size_t
nTaus =
taus
->size();
51
52
SG::ThinningHandle<xAOD::TauTrackContainer>
tauTracks(
m_tauTracks
, ctx);
53
tauTracks.
thinAll
();
54
55
SG::ThinningHandle<xAOD::TrackParticleContainer>
trackParticles(
m_trackParticles
, ctx);
56
trackParticles.
thinAll
();
57
58
SG::ThinningHandle<xAOD::PFOContainer>
neutralPFOs(
m_neutralPFOs
, ctx);
59
neutralPFOs.
thinAll
();
60
61
SG::ThinningHandle<xAOD::VertexContainer>
secondaryVertices(
m_secondaryVertices
, ctx);
62
secondaryVertices.
thinAll
();
63
64
65
std::vector<const xAOD::TauJet*> tausToKeep;
66
67
// execute the text parser if requested
68
if
(!
m_selectionString
.empty()) {
69
std::vector<int>
entries
= m_parser->evaluateAsVector();
70
size_t
nEntries =
entries
.size();
71
if
(nTaus != nEntries) {
72
ATH_MSG_ERROR
(
"Incompatible sizes: "
<< nTaus <<
" vs "
<< nEntries <<
"! Please check your selection string uses the appropriate tau container."
);
73
return
StatusCode::FAILURE;
74
}
75
// identify which taus to keep
76
for
(
size_t
i=0; i<nTaus; ++i)
if
(
entries
[i]==1) tausToKeep.push_back(
taus
->at(i));
77
}
78
// use all taus if no selection string is passed
79
else
{
80
for
(
size_t
i=0; i<nTaus; ++i) tausToKeep.push_back(
taus
->at(i));
81
}
82
83
// protection against duplicate taus -- built from different seed jets, but end up having same (eta,phi)
84
if
( tausToKeep.size() > 0){
85
for
(
size_t
i=0; i < tausToKeep.size()-1; i++){
86
const
auto
* aTau=tausToKeep[i];
87
auto
it =
std::remove_if
(tausToKeep.begin()+i+1,tausToKeep.end(),[aTau](
const
xAOD::TauJet
* bTau) {return aTau->p4().DeltaR(bTau->p4()) < 0.01;});
88
tausToKeep.erase (it, tausToKeep.end());
89
}
90
}
91
92
// keep the various tau-related objects for taus passing the selection
93
for
(
const
auto
* tau : tausToKeep) {
94
// tau
95
taus
.keep(tau->index());
96
97
// classifiedCharged tau tracks
98
for
(
const
xAOD::TauTrack
* track : tau->tracks()) {
99
tauTracks.
keep
(track->index());
100
101
// associated ID track
102
trackParticles.
keep
(track->track()->index());
103
}
104
105
// neutral PFOs
106
for
(
size_t
i=0; i<tau->nNeutralPFOs(); i++) {
107
neutralPFOs.
keep
(tau->neutralPFO(i)->index());
108
}
109
110
// secondary vertex
111
if
(tau->secondaryVertex() !=
nullptr
) {
112
secondaryVertices.
keep
(tau->secondaryVertex()->index());
113
}
114
}
115
116
// increment counters
117
m_npass
+= tausToKeep.size();
118
m_ntot
+= nTaus;
119
120
return
StatusCode::SUCCESS;
121
}
ATH_CHECK
#define ATH_CHECK
Evaluate an expression and check for errors.
Definition
AthCheckMacros.h:40
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition
AthMsgStreamMacros.h:33
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition
AthMsgStreamMacros.h:31
taus
static Double_t taus
Definition
LArPhysWaveHECTool.cxx:37
TauThinningTool.h
ThinningHandle.h
Handle for requesting thinning for a data object.
DerivationFramework::TauThinningTool::finalize
virtual StatusCode finalize() override
Definition
TauThinningTool.cxx:36
DerivationFramework::TauThinningTool::m_neutralPFOs
SG::ThinningHandleKey< xAOD::PFOContainer > m_neutralPFOs
Definition
TauThinningTool.h:40
DerivationFramework::TauThinningTool::m_npass
std::atomic< unsigned int > m_npass
Definition
TauThinningTool.h:34
DerivationFramework::TauThinningTool::m_streamName
StringProperty m_streamName
Definition
TauThinningTool.h:35
DerivationFramework::TauThinningTool::m_selectionString
Gaudi::Property< std::string > m_selectionString
Definition
TauThinningTool.h:36
DerivationFramework::TauThinningTool::TauThinningTool
TauThinningTool(const std::string &t, const std::string &n, const IInterface *p)
Definition
TauThinningTool.cxx:11
DerivationFramework::TauThinningTool::initialize
virtual StatusCode initialize() override
Definition
TauThinningTool.cxx:19
DerivationFramework::TauThinningTool::m_taus
SG::ThinningHandleKey< xAOD::TauJetContainer > m_taus
Definition
TauThinningTool.h:37
DerivationFramework::TauThinningTool::m_ntot
std::atomic< unsigned int > m_ntot
Definition
TauThinningTool.h:33
DerivationFramework::TauThinningTool::m_tauTracks
SG::ThinningHandleKey< xAOD::TauTrackContainer > m_tauTracks
Definition
TauThinningTool.h:38
DerivationFramework::TauThinningTool::m_secondaryVertices
SG::ThinningHandleKey< xAOD::VertexContainer > m_secondaryVertices
Definition
TauThinningTool.h:41
DerivationFramework::TauThinningTool::m_trackParticles
SG::ThinningHandleKey< xAOD::TrackParticleContainer > m_trackParticles
Definition
TauThinningTool.h:39
DerivationFramework::TauThinningTool::doThinning
virtual StatusCode doThinning(const EventContext &ctx) const override
Definition
TauThinningTool.cxx:44
SG::ThinningHandleBase::thinAll
void thinAll()
Mark that all elements should be thinned away.
Definition
ThinningHandleBase.cxx:143
SG::ThinningHandleBase::keep
void keep(size_t ndx)
Mark that index ndx in the container should be kept (not thinned away).
Definition
ThinningHandleBase.cxx:75
SG::ThinningHandle
Handle for requesting thinning for a data object.
Definition
ThinningHandle.h:84
entries
double entries
Definition
listroot.cxx:49
std::remove_if
DataModel_detail::iterator< DVL > remove_if(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end, Predicate pred)
Specialization of remove_if for DataVector/List.
Definition
DVL_algorithms.h:70
xAOD::TauTrack
TauTrack_v1 TauTrack
Definition of the current version.
Definition
TauTrack.h:16
xAOD::TauJet
TauJet_v3 TauJet
Definition of the current "tau version".
Definition
TauJet.h:17
Generated on
for ATLAS Offline Software by
1.17.0