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

#include <TauLRTThinningTool.h>

Inheritance diagram for DerivationFramework::TauLRTThinningTool:
Collaboration diagram for DerivationFramework::TauLRTThinningTool:

Public Member Functions

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

Private Attributes

std::atomic< unsigned int > m_ntot = 0
std::atomic< unsigned int > m_npass = 0
StringProperty m_streamName { this, "StreamName", "", "Name of the stream being thinned" }
Gaudi::Property< std::string > m_selectionString { this, "SelectionString", "", "" }
SG::ThinningHandleKey< xAOD::TauJetContainerm_taus { this, "Taus", "TauJetsLRT", "" }
SG::ThinningHandleKey< xAOD::TauTrackContainerm_tauTracks { this, "TauTracks", "TauTracksLRT", "" }
SG::ThinningHandleKey< xAOD::TrackParticleContainerm_trackParticles { this, "TrackParticles", "InDetTrackParticles", "" }
SG::ThinningHandleKey< xAOD::TrackParticleContainerm_trackLargeD0Particles { this, "TrackLargeD0Particles", "InDetLargeD0TrackParticles", "" }
SG::ThinningHandleKey< xAOD::PFOContainerm_neutralPFOs { this, "TauNeutralPFOs", "TauNeutralParticleFlowObjectsLRT", "" }
SG::ThinningHandleKey< xAOD::VertexContainerm_secondaryVertices { this, "TauSecondaryVertices", "TauSecondaryVerticesLRT", "" }

Detailed Description

Definition at line 24 of file TauLRTThinningTool.h.

Constructor & Destructor Documentation

◆ TauLRTThinningTool()

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

Definition at line 10 of file TauLRTThinningTool.cxx.

12 :
13 base_class(t,n,p)
14{
15}

◆ ~TauLRTThinningTool()

virtual DerivationFramework::TauLRTThinningTool::~TauLRTThinningTool ( )
virtualdefault

Member Function Documentation

◆ doThinning()

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

Definition at line 44 of file TauLRTThinningTool.cxx.

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::TrackParticleContainer> trackLargeD0Particles(m_trackLargeD0Particles, ctx);
59 trackLargeD0Particles.thinAll();
60
61 SG::ThinningHandle<xAOD::PFOContainer> neutralPFOs(m_neutralPFOs, ctx);
62 neutralPFOs.thinAll();
63
64 SG::ThinningHandle<xAOD::VertexContainer> secondaryVertices(m_secondaryVertices, ctx);
65 secondaryVertices.thinAll();
66
67
68 std::vector<const xAOD::TauJet*> tausToKeep;
69
70 // execute the text parser if requested
71 if (!m_selectionString.empty()) {
72 std::vector<int> entries = m_parser->evaluateAsVector();
73 size_t nEntries = entries.size();
74 if (nTaus != nEntries) {
75 ATH_MSG_ERROR("Incompatible sizes: " << nTaus << " vs " << nEntries << "! Please check your selection string uses the appropriate tau container.");
76 return StatusCode::FAILURE;
77 }
78 // identify which taus to keep
79 for (size_t i=0; i<nTaus; ++i) if (entries[i]==1) tausToKeep.push_back(taus->at(i));
80 }
81 // use all taus if no selection string is passed
82 else {
83 for (size_t i=0; i<nTaus; ++i) tausToKeep.push_back(taus->at(i));
84 }
85
86 // protection against duplicate taus -- built from different seed jets, but end up having same (eta,phi)
87 if( tausToKeep.size() > 0){
88 for(size_t i=0; i < tausToKeep.size()-1; i++){
89 const auto* aTau=tausToKeep[i];
90 auto it = std::remove_if(tausToKeep.begin()+i+1,tausToKeep.end(),[aTau](const xAOD::TauJet* bTau) {return aTau->p4().DeltaR(bTau->p4()) < 0.01;});
91 tausToKeep.erase (it, tausToKeep.end());
92 }
93 }
94
95 // keep the various tau-related objects for taus passing the selection
96 for (const auto* tau : tausToKeep) {
97 // tau
98 taus.keep(tau->index());
99
100 // classifiedCharged tau tracks
101 for (const xAOD::TauTrack* track : tau->tracks()) {
102 tauTracks.keep(track->index());
103
104 // associated ID track
106 if (!isTrackLRT) {
107 trackParticles.keep(track->track()->index());
108 } else {
109 trackLargeD0Particles.keep(track->track()->index());
110 }
111 }
112
113 // neutral PFOs
114 for (size_t i=0; i<tau->nNeutralPFOs(); i++) {
115 neutralPFOs.keep(tau->neutralPFO(i)->index());
116 }
117
118 // secondary vertex
119 if (tau->secondaryVertex() != nullptr) {
120 secondaryVertices.keep(tau->secondaryVertex()->index());
121 }
122 }
123
124 // increment counters
125 m_npass += tausToKeep.size();
126 m_ntot += nTaus;
127
128 return StatusCode::SUCCESS;
129}
#define ATH_MSG_ERROR(x)
static Double_t taus
SG::ThinningHandleKey< xAOD::VertexContainer > m_secondaryVertices
SG::ThinningHandleKey< xAOD::PFOContainer > m_neutralPFOs
SG::ThinningHandleKey< xAOD::TrackParticleContainer > m_trackLargeD0Particles
SG::ThinningHandleKey< xAOD::TauJetContainer > m_taus
SG::ThinningHandleKey< xAOD::TrackParticleContainer > m_trackParticles
SG::ThinningHandleKey< xAOD::TauTrackContainer > m_tauTracks
Gaudi::Property< std::string > m_selectionString
double entries
Definition listroot.cxx:49
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.
TauTrack_v1 TauTrack
Definition of the current version.
Definition TauTrack.h:16
TauJet_v3 TauJet
Definition of the current "tau version".

◆ finalize()

StatusCode DerivationFramework::TauLRTThinningTool::finalize ( )
overridevirtual

Definition at line 36 of file TauLRTThinningTool.cxx.

37{
38 ATH_MSG_INFO("Processed " << m_ntot << " taus, " << m_npass << " were kept");
39 ATH_CHECK( finalizeParser() );
40 return StatusCode::SUCCESS;
41}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_INFO(x)

◆ initialize()

StatusCode DerivationFramework::TauLRTThinningTool::initialize ( )
overridevirtual

Definition at line 18 of file TauLRTThinningTool.cxx.

19{
20 ATH_CHECK( m_taus.initialize(m_streamName) );
21 ATH_CHECK( m_tauTracks.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}

Member Data Documentation

◆ m_neutralPFOs

SG::ThinningHandleKey<xAOD::PFOContainer> DerivationFramework::TauLRTThinningTool::m_neutralPFOs { this, "TauNeutralPFOs", "TauNeutralParticleFlowObjectsLRT", "" }
private

Definition at line 41 of file TauLRTThinningTool.h.

41{ this, "TauNeutralPFOs", "TauNeutralParticleFlowObjectsLRT", "" };

◆ m_npass

std::atomic<unsigned int> DerivationFramework::TauLRTThinningTool::m_npass = 0
mutableprivate

Definition at line 34 of file TauLRTThinningTool.h.

◆ m_ntot

std::atomic<unsigned int> DerivationFramework::TauLRTThinningTool::m_ntot = 0
mutableprivate

Definition at line 33 of file TauLRTThinningTool.h.

◆ m_secondaryVertices

SG::ThinningHandleKey<xAOD::VertexContainer> DerivationFramework::TauLRTThinningTool::m_secondaryVertices { this, "TauSecondaryVertices", "TauSecondaryVerticesLRT", "" }
private

Definition at line 42 of file TauLRTThinningTool.h.

42{ this, "TauSecondaryVertices", "TauSecondaryVerticesLRT", "" };

◆ m_selectionString

Gaudi::Property<std::string> DerivationFramework::TauLRTThinningTool::m_selectionString { this, "SelectionString", "", "" }
private

Definition at line 36 of file TauLRTThinningTool.h.

36{ this, "SelectionString", "", "" };

◆ m_streamName

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

Definition at line 35 of file TauLRTThinningTool.h.

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

◆ m_taus

SG::ThinningHandleKey<xAOD::TauJetContainer> DerivationFramework::TauLRTThinningTool::m_taus { this, "Taus", "TauJetsLRT", "" }
private

Definition at line 37 of file TauLRTThinningTool.h.

37{ this, "Taus", "TauJetsLRT", "" };

◆ m_tauTracks

SG::ThinningHandleKey<xAOD::TauTrackContainer> DerivationFramework::TauLRTThinningTool::m_tauTracks { this, "TauTracks", "TauTracksLRT", "" }
private

Definition at line 38 of file TauLRTThinningTool.h.

38{ this, "TauTracks", "TauTracksLRT", "" };

◆ m_trackLargeD0Particles

SG::ThinningHandleKey<xAOD::TrackParticleContainer> DerivationFramework::TauLRTThinningTool::m_trackLargeD0Particles { this, "TrackLargeD0Particles", "InDetLargeD0TrackParticles", "" }
private

Definition at line 40 of file TauLRTThinningTool.h.

40{ this, "TrackLargeD0Particles", "InDetLargeD0TrackParticles", "" };

◆ m_trackParticles

SG::ThinningHandleKey<xAOD::TrackParticleContainer> DerivationFramework::TauLRTThinningTool::m_trackParticles { this, "TrackParticles", "InDetTrackParticles", "" }
private

Definition at line 39 of file TauLRTThinningTool.h.

39{ this, "TrackParticles", "InDetTrackParticles", "" };

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