7 #include "GaudiKernel/ThreadLocalContext.h"
14 const IInterface*
p) :
22 ATH_CHECK( m_taus.initialize(m_streamName) );
23 ATH_CHECK( m_tauTracks.initialize(m_streamName) );
24 ATH_CHECK( m_trackParticles.initialize(m_streamName) );
25 ATH_CHECK( m_neutralPFOs.initialize(m_streamName) );
26 ATH_CHECK( m_secondaryVertices.initialize(m_streamName) );
29 if (!m_selectionString.empty()) {
30 ATH_MSG_INFO(
"Selection string for " << m_taus.key() <<
": " << m_selectionString);
31 ATH_CHECK( initializeParser(m_selectionString) );
33 return StatusCode::SUCCESS;
39 ATH_MSG_INFO(
"Processed " << m_ntot <<
" taus, " << m_npass <<
" were kept");
41 return StatusCode::SUCCESS;
47 const EventContext& ctx = Gaudi::Hive::currentContext();
52 size_t nTaus = taus->size();
67 std::vector<const xAOD::TauJet*> tausToKeep;
70 if (!m_selectionString.empty()) {
71 std::vector<int>
entries = m_parser->evaluateAsVector();
74 ATH_MSG_ERROR(
"Incompatible sizes: " << nTaus <<
" vs " <<
nEntries <<
"! Please check your selection string uses the appropriate tau container.");
75 return StatusCode::FAILURE;
78 for (
size_t i=0;
i<nTaus; ++
i)
if (
entries[
i]==1) tausToKeep.push_back(taus->at(
i));
82 for (
size_t i=0;
i<nTaus; ++
i) tausToKeep.push_back(taus->at(
i));
86 for (
const auto* tau : tausToKeep) {
88 taus.
keep(tau->index());
95 trackParticles.
keep(
track->track()->index());
99 for (
size_t i=0;
i<tau->nNeutralPFOs();
i++) {
100 neutralPFOs.
keep(tau->neutralPFO(
i)->index());
104 if (tau->secondaryVertex() !=
nullptr) {
105 secondaryVertices.
keep(tau->secondaryVertex()->index());
110 m_npass += tausToKeep.size();
113 return StatusCode::SUCCESS;