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
59 trackLargeD0Particles.thinAll();
60
61 SG::ThinningHandle<xAOD::PFOContainer> neutralPFOs(
m_neutralPFOs, ctx);
62 neutralPFOs.thinAll();
63
65 secondaryVertices.thinAll();
66
67
68 std::vector<const xAOD::TauJet*> tausToKeep;
69
70
72 std::vector<int>
entries = m_parser->evaluateAsVector();
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
79 for (
size_t i=0;
i<nTaus; ++
i)
if (
entries[i]==1) tausToKeep.push_back(
taus->at(i));
80 }
81
82 else {
83 for (
size_t i=0;
i<nTaus; ++
i) tausToKeep.push_back(
taus->at(i));
84 }
85
86
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
96 for (const auto* tau : tausToKeep) {
97
98 taus.keep(tau->index());
99
100
102 tauTracks.keep(
track->index());
103
104
106 if (!isTrackLRT) {
107 trackParticles.keep(
track->track()->index());
108 } else {
109 trackLargeD0Particles.keep(
track->track()->index());
110 }
111 }
112
113
114 for (
size_t i=0;
i<tau->nNeutralPFOs();
i++) {
115 neutralPFOs.keep(tau->neutralPFO(i)->index());
116 }
117
118
119 if (tau->secondaryVertex() != nullptr) {
120 secondaryVertices.keep(tau->secondaryVertex()->index());
121 }
122 }
123
124
127
128 return StatusCode::SUCCESS;
129}
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".