16#include "GaudiKernel/ThreadLocalContext.h"
23 const IInterface* p ) :
40 return StatusCode::FAILURE;
43 ATH_MSG_INFO(
"Inner detector track particles associated with objects in " <<
m_jetKey.key() <<
" will be retained in this format with the rest being thinned away");
50 return StatusCode::SUCCESS;
57 return StatusCode::SUCCESS;
63 const EventContext& ctx = Gaudi::Hive::currentContext();
70 unsigned int nTracks = importedTrackParticles->size();
71 if (nTracks==0)
return StatusCode::SUCCESS;
74 std::vector<bool> mask;
75 mask.assign(nTracks,
false);
83 return StatusCode::FAILURE;
85 unsigned int nJets(importedJets->size());
86 std::vector<const xAOD::Jet*> jetToCheck; jetToCheck.clear();
91 unsigned int nEntries =
entries.size();
93 if (nJets != nEntries ) {
94 ATH_MSG_ERROR(
"Sizes incompatible! Are you sure your selection string used jets??");
95 return StatusCode::FAILURE;
98 for (
unsigned int i=0; i<nJets; ++i)
if (
entries[i]==1) jetToCheck.push_back((*importedJets)[i]);
105 for (
const auto *jetIt : *importedJets) {
106 std::vector<const xAOD::TrackParticle*> jetTracks;
108 if ( !haveJetTracks ) {
ATH_MSG_WARNING(
"Associated tracks not found");}
110 for (
auto & jetTrack : jetTracks) {
111 int index = jetTrack->index();
117 for (
auto & jetIt : jetToCheck) {
118 std::vector<const xAOD::TrackParticle*> jetTracks;
120 if ( !haveJetTracks ) {
ATH_MSG_WARNING(
"Associated tracks not found");}
122 for (
auto & jetTrack : jetTracks) {
123 int index = jetTrack->index();
133 unsigned int nEntries =
entries.size();
135 if (nTracks != nEntries ) {
136 ATH_MSG_ERROR(
"Sizes incompatible! Are you sure your track selection string used tracks??");
137 return StatusCode::FAILURE;
140 for (
unsigned int i=0; i<nEntries; ++i) {
141 if (!
entries[i]) mask[i] =
false;
147 unsigned int n_pass=0;
148 for (
unsigned int i=0; i<nTracks; ++i) {
149 if (mask[i]) ++n_pass;
154 importedTrackParticles.
keep (mask);
156 return StatusCode::SUCCESS;
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
Handle for requesting thinning for a data object.
virtual StatusCode doThinning() const override
JetTrackParticleThinning(const std::string &t, const std::string &n, const IInterface *p)
SG::ReadHandleKey< xAOD::JetContainer > m_jetKey
virtual StatusCode finalize() override
std::atomic< unsigned int > m_ntot
StringProperty m_streamName
std::atomic< unsigned int > m_npass
StringProperty m_trackSelectionString
SG::ThinningHandleKey< xAOD::TrackParticleContainer > m_inDetSGKey
virtual StatusCode initialize() override
StringProperty m_selectionString
virtual ~JetTrackParticleThinning()
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.