85{
86
87
88 SG::ThinningHandle<xAOD::TruthParticleContainer> importedTruthParticles
90 SG::ThinningHandle<xAOD::TruthVertexContainer> importedTruthVertices
92
93
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);
100
101
103 std::vector<int>
entries = m_parser->evaluateAsVector();
105
106 if (nParticles != nEntries ) {
107 ATH_MSG_ERROR(
"Sizes incompatible! Are you sure your selection string used TruthParticles?");
108 return StatusCode::FAILURE;
109 } else {
110
111 for (
unsigned int i=0;
i<nParticles; ++
i)
if (
entries[i]==1) partMask[
i]=
true;
112 }
113 }
114
115
116
118 DerivationFramework::DecayGraphHelper tauDecayHelper;
119 for (
unsigned int i=0;
i<nParticles; ++
i) {
122 bool last(true);
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) {
128 last = false;
129 break;
130 }
131 }
132 if (!last) partMask[
i]=
false;
133 }
134 }
135 }
136
137
138
139
140
141
142
143 DerivationFramework::DecayGraphHelper decayHelper;
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();
157 }
158 }
159
160
161
162
163
164
165
166
167 m_npasspart += std::count (partMask.begin(), partMask.end(),
true);
168 m_npassvtx += std::count (vertMask.begin(), vertMask.end(),
true);
169
170
171 importedTruthParticles.keep (partMask);
172 importedTruthVertices.keep (vertMask);
173
174 return StatusCode::SUCCESS;
175}
SG::ThinningHandleKey< xAOD::TruthVertexContainer > m_verticesKey
SG::ThinningHandleKey< xAOD::TruthParticleContainer > m_particlesKey
constexpr ParticleHypothesis particle[PARTICLEHYPOTHESES]
the array of masses
TruthParticle_v1 TruthParticle
Typedef to implementation.
void descendants(const xAOD::TruthParticle *pHead, std::vector< int > &particleList, std::unordered_set< int > &encounteredUniqueIDs)
void ancestors(const xAOD::TruthParticle *pHead, std::vector< bool > &particleMask, std::vector< bool > &vertexMask, std::unordered_set< int > &encounteredUniqueIDs)