46{
47 const EventContext& ctx = Gaudi::Hive::currentContext();
48
49
50 SG::ThinningHandle<xAOD::TauJetContainer>
taus(
m_taus, ctx);
52 size_t nTaus =
taus->size();
53
54 SG::ThinningHandle<xAOD::TauTrackContainer> tauTracks(
m_tauTracks, ctx);
55 tauTracks.thinAll();
56
57 SG::ThinningHandle<xAOD::TrackParticleContainer> trackParticles(
m_trackParticles, ctx);
58 trackParticles.thinAll();
59
60 SG::ThinningHandle<xAOD::PFOContainer> neutralPFOs(
m_neutralPFOs, ctx);
61 neutralPFOs.thinAll();
62
64 secondaryVertices.thinAll();
65
66
67 std::vector<const xAOD::TauJet*> tausToKeep;
68
69
71 std::vector<int>
entries = m_parser->evaluateAsVector();
73 if (nTaus != nEntries) {
74 ATH_MSG_ERROR(
"Incompatible sizes: " << nTaus <<
" vs " << nEntries <<
"! Please check your selection string uses the appropriate tau container.");
75 return StatusCode::FAILURE;
76 }
77
78 for (
size_t i=0;
i<nTaus; ++
i)
if (
entries[i]==1) tausToKeep.push_back(
taus->at(i));
79 }
80
81 else {
82 for (
size_t i=0;
i<nTaus; ++
i) tausToKeep.push_back(
taus->at(i));
83 }
84
85
86 if( tausToKeep.size() > 0){
87 for(
size_t i=0;
i < tausToKeep.size()-1;
i++){
88 const auto* aTau=tausToKeep[
i];
89 auto it =
std::remove_if(tausToKeep.begin()+i+1,tausToKeep.end(),[aTau](
const xAOD::TauJet* bTau) {return aTau->p4().DeltaR(bTau->p4()) < 0.01;});
90 tausToKeep.erase (it, tausToKeep.end());
91 }
92 }
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 for (
size_t i=0;
i<tau->nNeutralPFOs();
i++) {
109 neutralPFOs.keep(tau->neutralPFO(i)->index());
110 }
111
112
113 if (tau->secondaryVertex() != nullptr) {
114 secondaryVertices.keep(tau->secondaryVertex()->index());
115 }
116 }
117
118
121
122 return StatusCode::SUCCESS;
123}
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".