87 const EventContext& ctx = Gaudi::Hive::currentContext();
96 unsigned int nParticles = importedTruthParticles->size();
97 unsigned int nVertices = importedTruthVertices->size();
98 std::vector<bool> partMask, vertMask;
99 partMask.assign(nParticles,
false);
100 vertMask.assign(nVertices,
false);
105 std::vector<int>
entries = m_parser->evaluateAsVector();
106 unsigned int nEntries =
entries.size();
108 if (nParticles != nEntries ) {
109 ATH_MSG_ERROR(
"Sizes incompatible! Are you sure your selection string used TruthParticles?");
110 return StatusCode::FAILURE;
113 for (
unsigned int i=0; i<nParticles; ++i)
if (
entries[i]==1) partMask[i]=
true;
121 for (
unsigned int i=0; i<nParticles; ++i) {
125 std::vector<int> tauDecayProducts;
126 std::unordered_set<int> tauDecayEncounteredUniqueIDs;
127 tauDecayHelper.
descendants(particle,tauDecayProducts,tauDecayEncounteredUniqueIDs);
128 for (
unsigned int tauDecIt=0; tauDecIt<tauDecayProducts.size(); ++tauDecIt) {
129 if (std::abs(tauDecayProducts[tauDecIt])==15) {
134 if (!last) partMask[i]=
false;
146 std::unordered_set<int> encounteredUniqueIDs;
148 for (
unsigned int i=0; i<nParticles; ++i) {
149 bool toKeep = partMask[i];
150 if (!toKeep)
continue;
152 encounteredUniqueIDs.clear();
154 encounteredUniqueIDs.clear();
156 encounteredUniqueIDs.clear();
158 encounteredUniqueIDs.clear();
169 m_npasspart += std::count (partMask.begin(), partMask.end(),
true);
170 m_npassvtx += std::count (vertMask.begin(), vertMask.end(),
true);
173 importedTruthParticles.
keep (partMask);
174 importedTruthVertices.
keep (vertMask);
176 return StatusCode::SUCCESS;