17#include "GaudiKernel/ThreadLocalContext.h"
24 const IInterface* p ) :
41 return StatusCode::FAILURE;
42 }
else {
ATH_MSG_INFO(
"Inner detector track particles associated with objects in " <<
m_muonKey.key() <<
" will be retained in this format with the rest being thinned away");}
48 return StatusCode::SUCCESS;
56 return StatusCode::SUCCESS;
68 unsigned int nTracks = importedTrackParticles->size();
69 if (nTracks==0)
return StatusCode::SUCCESS;
72 std::vector<bool> mask;
73 mask.assign(nTracks,
false);
81 return StatusCode::FAILURE;
83 unsigned int nMuons(importedMuons->size());
84 std::vector<const xAOD::Muon*> muToCheck; muToCheck.clear();
87 std::vector<int>
entries = m_parser->evaluateAsVector();
88 unsigned int nEntries =
entries.size();
90 if (nMuons != nEntries ) {
91 ATH_MSG_ERROR(
"Sizes incompatible! Are you sure your selection string used muons??");
92 return StatusCode::FAILURE;
95 for (
unsigned int i=0; i<nMuons; ++i)
if (
entries[i]==1) muToCheck.push_back((*importedMuons)[i]);
101 for (
const auto *muIt : *importedMuons) {
102 if (muIt->inDetTrackParticleLink().isValid()) {
105 if (muIt->muonType()==xAOD::Muon::SiliconAssociatedForwardMuon &&
m_inDetSGKey.key() !=
"InDetForwardTrackParticles")
107 ATH_MSG_DEBUG(
"Skipping Forward Muon since we are not skimming InDetForwardParticles");
111 int index = muIt->inDetTrackParticleLink().index();
118 for (
auto & muIt : muToCheck) {
119 if (muIt->inDetTrackParticleLink().isValid()) {
121 if (muIt->muonType()==xAOD::Muon::SiliconAssociatedForwardMuon &&
m_inDetSGKey.key() !=
"InDetForwardTrackParticles")
123 ATH_MSG_DEBUG(
"Skipping Forward Muon since we are not skimming InDetForwardParticles");
127 int index = muIt->inDetTrackParticleLink().index();
136 unsigned int n_pass=0;
137 for (
unsigned int i=0; i<nTracks; ++i) {
138 if (mask[i]) ++n_pass;
142 importedTrackParticles.
keep (mask);
144 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 StatusCode doThinning(const EventContext &ctx) const override
Gaudi::Property< std::string > m_selectionString
std::atomic< unsigned int > m_ntot
SG::ReadHandleKey< xAOD::MuonContainer > m_muonKey
MuonTrackParticleThinning(const std::string &t, const std::string &n, const IInterface *p)
virtual ~MuonTrackParticleThinning()
Gaudi::Property< float > m_coneSize
virtual StatusCode initialize() override
std::atomic< unsigned int > m_npass
SG::ThinningHandleKey< xAOD::TrackParticleContainer > m_inDetSGKey
virtual StatusCode finalize() override
StringProperty m_streamName
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.
void select(const xAOD::IParticle *particle, float coneSize, const xAOD::TrackParticleContainer *tracks, std::vector< bool > &mask)