70{
71 const EventContext& ctx = Gaudi::Hive::currentContext();
72
73
74 SG::ThinningHandle<xAOD::TrackParticleContainer> importedTrackParticles
76
77
78 unsigned int nTracks = importedTrackParticles->size();
79 if (nTracks==0) return StatusCode::SUCCESS;
80
81
82 std::vector<bool>
mask;
83 mask.assign(nTracks,
false);
85
86
87
88 SG::ReadHandle<xAOD::TauJetContainer> importedTaus(
m_tauKey,ctx);
89 if (!importedTaus.isValid()) {
91 return StatusCode::FAILURE;
92 }
93 unsigned int nTaus(importedTaus->size());
94 std::vector<const xAOD::TauJet*> tauToCheck; tauToCheck.clear();
95
96
98 std::vector<int>
entries = m_parser->evaluateAsVector();
100
101 if (nTaus != nEntries ) {
102 ATH_MSG_ERROR(
"Sizes incompatible! Are you sure your selection string used taus??");
103 return StatusCode::FAILURE;
104 } else {
105
106 for (
unsigned int i=0;
i<nTaus; ++
i)
if (
entries[i]==1) tauToCheck.push_back((*importedTaus)[i]);
107 }
108 } else {
109
110 for (
unsigned int i=0;
i<nTaus; ++
i) tauToCheck.push_back((*importedTaus)[i]);
111 }
112
113
114
115 DerivationFramework::TracksInCone trIC;
117 for (const auto *tauIt : *importedTaus) {
119 for (
unsigned int i=0;
i<tauIt->nTracks(); ++
i) {
122 }
123 }
124 } else {
125 for (auto & tauIt : tauToCheck) {
127 for (
unsigned int i=0;
i<tauIt->nTracks(); ++
i) {
130 }
131 }
132 }
133
134
135 unsigned int n_pass=0;
136 for (
unsigned int i=0;
i<nTracks; ++
i) {
137 if (mask[i]) ++n_pass;
138 }
140
141
142 importedTrackParticles.keep (mask);
143
144
146 SG::ThinningHandle<xAOD::TauTrackContainer> importedTauTracks
148 if( importedTauTracks->empty() ) {
149 return StatusCode::SUCCESS;
150 }
151 std::vector< bool > mask_tautracks( importedTauTracks->size(), false );
152
154
156
157 for( const auto& ttLink : ttLinks ) {
158 if( ! ttLink.isValid() ) {
159 continue;
160 }
164 return StatusCode::FAILURE;
165 }
166
167 mask_tautracks.at( ttLink.index() ) = true;
168 }
169
172 }
173 }
174
175 importedTauTracks.keep(mask_tautracks);
176
177 }
178
179 return StatusCode::SUCCESS;
180
181}
Gaudi::Property< std::string > m_selectionString
Gaudi::Property< bool > m_doTauTracksThinning
SG::ThinningHandleKey< xAOD::TrackParticleContainer > m_inDetSGKey
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
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)