69{
70
71
72 SG::ThinningHandle<xAOD::TrackParticleContainer> importedTrackParticles
74
75
76 unsigned int nTracks = importedTrackParticles->size();
77 if (nTracks==0) return StatusCode::SUCCESS;
78
79
80 std::vector<bool>
mask;
81 mask.assign(nTracks,
false);
83
84
85
86 SG::ReadHandle<xAOD::TauJetContainer> importedTaus(
m_tauKey,ctx);
87 if (!importedTaus.isValid()) {
89 return StatusCode::FAILURE;
90 }
91 unsigned int nTaus(importedTaus->size());
92 std::vector<const xAOD::TauJet*> tauToCheck; tauToCheck.clear();
93
94
96 std::vector<int>
entries = m_parser->evaluateAsVector();
98
99 if (nTaus != nEntries ) {
100 ATH_MSG_ERROR(
"Sizes incompatible! Are you sure your selection string used taus??");
101 return StatusCode::FAILURE;
102 } else {
103
104 for (
unsigned int i=0;
i<nTaus; ++
i)
if (
entries[i]==1) tauToCheck.push_back((*importedTaus)[i]);
105 }
106 } else {
107
108 for (
unsigned int i=0;
i<nTaus; ++
i) tauToCheck.push_back((*importedTaus)[i]);
109 }
110
111
112
113 DerivationFramework::TracksInCone trIC;
115 for (const auto *tauIt : *importedTaus) {
117 for (
unsigned int i=0;
i<tauIt->nTracks(); ++
i) {
120 }
121 }
122 } else {
123 for (auto & tauIt : tauToCheck) {
125 for (
unsigned int i=0;
i<tauIt->nTracks(); ++
i) {
128 }
129 }
130 }
131
132
133 unsigned int n_pass=0;
134 for (
unsigned int i=0;
i<nTracks; ++
i) {
135 if (mask[i]) ++n_pass;
136 }
138
139
140 importedTrackParticles.keep (mask);
141
142
144 SG::ThinningHandle<xAOD::TauTrackContainer> importedTauTracks
146 if( importedTauTracks->empty() ) {
147 return StatusCode::SUCCESS;
148 }
149 std::vector< bool > mask_tautracks( importedTauTracks->size(), false );
150
152
154
155 for( const auto& ttLink : ttLinks ) {
156 if( ! ttLink.isValid() ) {
157 continue;
158 }
162 return StatusCode::FAILURE;
163 }
164
165 mask_tautracks.at( ttLink.index() ) = true;
166 }
167
170 }
171 }
172
173 importedTauTracks.keep(mask_tautracks);
174
175 }
176
177 return StatusCode::SUCCESS;
178
179}
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)