22 const IInterface* p ) :
39 return StatusCode::FAILURE;
40 }
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");}
44 ATH_MSG_FATAL(
"No tau tracks collection provided for thinning, despite this option being requested.");
45 return StatusCode::FAILURE;
56 return StatusCode::SUCCESS;
64 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 nTaus(importedTaus->size());
92 std::vector<const xAOD::TauJet*> tauToCheck; tauToCheck.clear();
96 std::vector<int>
entries = m_parser->evaluateAsVector();
97 unsigned int nEntries =
entries.size();
99 if (nTaus != nEntries ) {
100 ATH_MSG_ERROR(
"Sizes incompatible! Are you sure your selection string used taus??");
101 return StatusCode::FAILURE;
104 for (
unsigned int i=0; i<nTaus; ++i)
if (
entries[i]==1) tauToCheck.push_back((*importedTaus)[i]);
108 for (
unsigned int i=0; i<nTaus; ++i) tauToCheck.push_back((*importedTaus)[i]);
115 for (
const auto *tauIt : *importedTaus) {
117 for (
unsigned int i=0; i<tauIt->nTracks(); ++i) {
123 for (
auto & tauIt : tauToCheck) {
125 for (
unsigned int i=0; i<tauIt->nTracks(); ++i) {
133 unsigned int n_pass=0;
134 for (
unsigned int i=0; i<nTracks; ++i) {
135 if (mask[i]) ++n_pass;
140 importedTrackParticles.
keep (mask);
146 if( importedTauTracks->empty() ) {
147 return StatusCode::SUCCESS;
149 std::vector< bool > mask_tautracks( importedTauTracks->size(),
false );
155 for(
const auto& ttLink : ttLinks ) {
156 if( ! ttLink.isValid() ) {
162 return StatusCode::FAILURE;
165 mask_tautracks.at( ttLink.index() ) =
true;
173 importedTauTracks.
keep(mask_tautracks);
177 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 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
virtual StatusCode doThinning(const EventContext &ctx) const override
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)