94 unsigned int nParticles = importedTruthParticles->size();
95 unsigned int nVertices = importedTruthVertices->size();
96 std::vector<bool> partMask, vertMask;
97 partMask.assign(nParticles,
false);
98 vertMask.assign(nVertices,
false);
103 std::vector<int>
entries = m_parser->evaluateAsVector();
104 unsigned int nEntries =
entries.size();
106 if (nParticles != nEntries ) {
107 ATH_MSG_ERROR(
"Sizes incompatible! Are you sure your selection string used TruthParticles?");
108 return StatusCode::FAILURE;
111 for (
unsigned int i=0; i<nParticles; ++i)
if (
entries[i]==1) partMask[i]=
true;
119 for (
unsigned int i=0; i<nParticles; ++i) {
123 std::vector<int> tauDecayProducts;
124 std::unordered_set<int> tauDecayEncounteredUniqueIDs;
125 tauDecayHelper.
descendants(particle,tauDecayProducts,tauDecayEncounteredUniqueIDs);
126 for (
unsigned int tauDecIt=0; tauDecIt<tauDecayProducts.size(); ++tauDecIt) {
127 if (std::abs(tauDecayProducts[tauDecIt])==15) {
132 if (!last) partMask[i]=
false;
144 std::unordered_set<int> encounteredUniqueIDs;
146 for (
unsigned int i=0; i<nParticles; ++i) {
147 bool toKeep = partMask[i];
148 if (!toKeep)
continue;
150 encounteredUniqueIDs.clear();
152 encounteredUniqueIDs.clear();
154 encounteredUniqueIDs.clear();
156 encounteredUniqueIDs.clear();
167 m_npasspart += std::count (partMask.begin(), partMask.end(),
true);
168 m_npassvtx += std::count (vertMask.begin(), vertMask.end(),
true);
171 importedTruthParticles.
keep (partMask);
172 importedTruthVertices.
keep (vertMask);
174 return StatusCode::SUCCESS;