28 const IInterface* p ) :
46 return StatusCode::FAILURE;
49 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");
56 return StatusCode::SUCCESS;
63 return StatusCode::SUCCESS;
76 unsigned int nTracks = importedTrackParticles->size();
77 if (nTracks==0)
return StatusCode::SUCCESS;
80 std::vector<bool> mask;
81 mask.assign(nTracks,
false);
89 return StatusCode::FAILURE;
91 unsigned int nJets(importedJets->size());
92 std::vector<const xAOD::Jet*> jetToCheck; jetToCheck.clear();
97 unsigned int nEntries =
entries.size();
99 if (nJets != nEntries ) {
100 ATH_MSG_ERROR(
"Sizes incompatible! Are you sure your selection string used jets??");
101 return StatusCode::FAILURE;
104 for (
unsigned int i=0; i<nJets; ++i)
if (
entries[i]==1) jetToCheck.push_back((*importedJets)[i]);
110 static const SG::AuxElement::ConstAccessor<std::vector<ElementLink<DataVector<xAOD::IParticle> > > > ghostTrackLRT (
"GhostTrackLRT");
114 const std::vector< ElementLink<DataVector<xAOD::IParticle> > > &jetTrackLinks = ghostTrackLRT( **jetIt );
115 for (
const auto &jetTrkIt : jetTrackLinks) {
117 int index = trackPart->index();
122 for (std::vector<const xAOD::Jet*>::const_iterator jetIt=jetToCheck.begin(); jetIt!=jetToCheck.end(); ++jetIt) {
123 const std::vector< ElementLink<DataVector<xAOD::IParticle> > > &jetTrackLinks = ghostTrackLRT( **jetIt );
124 for (
const auto &jetTrkIt : jetTrackLinks) {
126 int index = trackPart->index();
135 unsigned int nEntries =
entries.size();
137 if (nTracks != nEntries ) {
138 ATH_MSG_ERROR(
"Sizes incompatible! Are you sure your track selection string used tracks??");
139 return StatusCode::FAILURE;
142 for (
unsigned int i=0; i<nEntries; ++i) {
143 if (!
entries[i]) mask[i] =
false;
149 unsigned int n_pass=0;
150 for (
unsigned int i=0; i<nTracks; ++i) {
151 if (mask[i]) ++n_pass;
156 importedTrackParticles.
keep (mask);
158 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.
DataModel_detail::const_iterator< DataVector > const_iterator
std::atomic< unsigned int > m_npass
virtual ~JetLargeD0TrackParticleThinning()
std::atomic< unsigned int > m_ntot
StringProperty m_streamName
virtual StatusCode initialize() override
JetLargeD0TrackParticleThinning(const std::string &t, const std::string &n, const IInterface *p)
virtual StatusCode finalize() override
StringProperty m_selectionString
SG::ThinningHandleKey< xAOD::TrackParticleContainer > m_inDetSGKey
SG::ReadHandleKey< xAOD::JetContainer > m_jetKey
StringProperty m_trackSelectionString
virtual StatusCode doThinning(const EventContext &ctx) const override
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.
TrackParticle_v1 TrackParticle
Reference the current persistent version: