45{
46
47
48 SG::ThinningHandle<xAOD::TauJetContainer>
taus(
m_taus, ctx);
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
62 secondaryVertices.thinAll();
63
64
65 std::vector<const xAOD::TauJet*> tausToKeep;
66
67
69 std::vector<int>
entries = m_parser->evaluateAsVector();
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
76 for (
size_t i=0;
i<nTaus; ++
i)
if (
entries[i]==1) tausToKeep.push_back(
taus->at(i));
77 }
78
79 else {
80 for (
size_t i=0;
i<nTaus; ++
i) tausToKeep.push_back(
taus->at(i));
81 }
82
83
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
93
94
95 for (const auto* tau : tausToKeep) {
96
97 taus.keep(tau->index());
98
99
101 tauTracks.keep(
track->index());
102
103
104 trackParticles.keep(
track->track()->index());
105 }
106
107
108 auto nPFOs = neutralPFOAcc(*tau);
109 for (
size_t i=0;
i<nPFOs.size();
i++) {
110 auto pfoLink = nPFOs.at(i);
111
112 if (pfoLink.isValid()) {
113 neutralPFOs.keep(tau->neutralPFO(i)->index());
114 }
115 }
116
117
118 if (tau->secondaryVertex() != nullptr) {
119 secondaryVertices.keep(tau->secondaryVertex()->index());
120 }
121 }
122
123
126
127 return StatusCode::SUCCESS;
128}
#define ATH_MSG_ERROR(x,...)
SG::ConstAccessor< T, ALLOC > ConstAccessor
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.
TauJet_v3 TauJet
Definition of the current "tau version".