16#include "GaudiKernel/ThreadLocalContext.h"
23 const IInterface* p ) :
40 return StatusCode::FAILURE;
41 }
else {
ATH_MSG_INFO(
"Inner detector track particles associated with objects in " <<
m_tauKey.key() <<
" will be retained in this format with the rest being thinned away");}
45 ATH_MSG_FATAL(
"No tau tracks collection provided for thinning, despite this option being requested.");
46 return StatusCode::FAILURE;
57 return StatusCode::SUCCESS;
65 return StatusCode::SUCCESS;
71 const EventContext& ctx = Gaudi::Hive::currentContext();
78 unsigned int nTracks = importedTrackParticles->size();
79 if (nTracks==0)
return StatusCode::SUCCESS;
82 std::vector<bool> mask;
83 mask.assign(nTracks,
false);
91 return StatusCode::FAILURE;
93 unsigned int nTaus(importedTaus->size());
94 std::vector<const xAOD::TauJet*> tauToCheck; tauToCheck.clear();
98 std::vector<int>
entries = m_parser->evaluateAsVector();
99 unsigned int nEntries =
entries.size();
101 if (nTaus != nEntries ) {
102 ATH_MSG_ERROR(
"Sizes incompatible! Are you sure your selection string used taus??");
103 return StatusCode::FAILURE;
106 for (
unsigned int i=0; i<nTaus; ++i)
if (
entries[i]==1) tauToCheck.push_back((*importedTaus)[i]);
110 for (
unsigned int i=0; i<nTaus; ++i) tauToCheck.push_back((*importedTaus)[i]);
117 for (
const auto *tauIt : *importedTaus) {
119 for (
unsigned int i=0; i<tauIt->nTracks(); ++i) {
125 for (
auto & tauIt : tauToCheck) {
127 for (
unsigned int i=0; i<tauIt->nTracks(); ++i) {
135 unsigned int n_pass=0;
136 for (
unsigned int i=0; i<nTracks; ++i) {
137 if (mask[i]) ++n_pass;
142 importedTrackParticles.
keep (mask);
148 if( importedTauTracks->empty() ) {
149 return StatusCode::SUCCESS;
151 std::vector< bool > mask_tautracks( importedTauTracks->size(),
false );
157 for(
const auto& ttLink : ttLinks ) {
158 if( ! ttLink.isValid() ) {
164 return StatusCode::FAILURE;
167 mask_tautracks.at( ttLink.index() ) =
true;
175 importedTauTracks.
keep(mask_tautracks);
179 return StatusCode::SUCCESS;
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_VERBOSE(x)
Handle for requesting thinning for a data object.
virtual ~TauTrackParticleThinning()
virtual StatusCode doThinning() const override
virtual StatusCode initialize() override
Gaudi::Property< std::string > m_selectionString
TauTrackParticleThinning(const std::string &t, const std::string &n, const IInterface *p)
Gaudi::Property< bool > m_doTauTracksThinning
virtual StatusCode finalize() override
SG::ThinningHandleKey< xAOD::TrackParticleContainer > m_inDetSGKey
StringProperty m_streamName
SG::ReadHandleKey< xAOD::TauJetContainer > m_tauKey
std::atomic< unsigned int > m_npass
std::atomic< unsigned int > m_ntot
Gaudi::Property< float > m_coneSize
SG::ThinningHandleKey< xAOD::TauTrackContainer > m_tauTracksSGKey
virtual bool isValid() override final
Can the handle be successfully dereferenced?
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.
std::vector< ElementLink< xAOD::TrackParticleContainer > > trackParticleLinks(const xAOD::TauJet *tau, xAOD::TauJetParameters::TauTrackFlag flag=xAOD::TauJetParameters::TauTrackFlag::classifiedCharged)
TauJet_v3 TauJet
Definition of the current "tau version".
void select(const xAOD::IParticle *particle, float coneSize, const xAOD::TrackParticleContainer *tracks, std::vector< bool > &mask)