13 const IInterface* p) :
32 return StatusCode::SUCCESS;
40 return StatusCode::SUCCESS;
50 size_t nTaus =
taus->size();
65 std::vector<const xAOD::TauJet*> tausToKeep;
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;
76 for (
size_t i=0; i<nTaus; ++i)
if (
entries[i]==1) tausToKeep.push_back(
taus->at(i));
80 for (
size_t i=0; i<nTaus; ++i) tausToKeep.push_back(
taus->at(i));
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());
93 for (
const auto* tau : tausToKeep) {
95 taus.keep(tau->index());
99 tauTracks.
keep(track->index());
102 trackParticles.
keep(track->track()->index());
106 for (
size_t i=0; i<tau->nNeutralPFOs(); i++) {
107 neutralPFOs.
keep(tau->neutralPFO(i)->index());
111 if (tau->secondaryVertex() !=
nullptr) {
112 secondaryVertices.
keep(tau->secondaryVertex()->index());
120 return StatusCode::SUCCESS;
#define ATH_CHECK
Evaluate an expression and check for errors.
Handle for requesting thinning for a data object.
void thinAll()
Mark that all elements should be thinned away.
void keep(size_t ndx)
Mark that index ndx in the container should be kept (not thinned away).
Handle for requesting thinning for a data object.
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".