228{
229 std::array<int, NUM_SPARTICLES> n{};
230
231 int idx = classifyOne(SUSY_Spart1_pdgId);
232 if ( (idx>=0) and (idx<std::ssize(n) )){
233 ++n[idx];
234 }
235 int idx2 = classifyOne(SUSY_Spart2_pdgId);
236 if ( (idx2>=0) and (idx2<std::ssize(n) )){
238 }
239
241
242 auto nanysquark=[&
n](
int i)->
bool {
243 return (n[nsquark] == i) or (n[nantisquark] == i);
244 };
245 if (n[ngluino] == 1 && nanysquark(1)) return 1;
246 else if (n[ngluino] == 2) return 2;
247 else if (nanysquark(2)) return 3;
248 else if (n[nsquark] == 1 && n[nantisquark] == 1) return 4;
249
250 else if (n[nsbottom] == 1 && n[nantisbottom] == 1) return 51;
251 else if (n[nsbottom2] == 1 && n[nantisbottom2] == 1) return 52;
252 else if (n[nstop] == 1 && n[nantistop] == 1) return 61;
253 else if (n[nstop2] == 1 && n[nantistop2] == 1) return 62;
254
255 else if (n[ngluino] == 1 && n[nchi01] == 1) return 71;
256 else if (n[ngluino] == 1 && n[nchi02] == 1) return 72;
257 else if (n[ngluino] == 1 && n[nchi03] == 1) return 73;
258 else if (n[ngluino] == 1 && n[nchi04] == 1) return 74;
259
260 else if (n[ngluino] == 1 && n[nch1plus] == 1) return 75;
261 else if (n[ngluino] == 1 && n[nch2plus] == 1) return 76;
262 else if (n[ngluino] == 1 && n[nch1minus] == 1) return 77;
263 else if (n[ngluino] == 1 && n[nch2minus] == 1) return 78;
264
265 else if (nanysquark(1) && n[nchi01] == 1) return 81;
266 else if (nanysquark(1) && n[nchi02] == 1) return 82;
267 else if (nanysquark(1) && n[nchi03] == 1) return 83;
268 else if (nanysquark(1) && n[nchi04] == 1) return 84;
269
270 else if (nanysquark(1) && n[nch1plus] == 1) return 85;
271 else if (nanysquark(1) && n[nch2plus] == 1) return 86;
272 else if (nanysquark(1) && n[nch1minus] == 1) return 87;
273 else if (nanysquark(1) && n[nch2minus] == 1) return 88;
274
275
276
277
278 else if (n[nchi01] == 2) return 111;
279 else if (n[nchi01] == 1 && n[nchi02] == 1) return 112;
280 else if (n[nchi01] == 1 && n[nchi03] == 1) return 113;
281 else if (n[nchi01] == 1 && n[nchi04] == 1) return 114;
282 else if (n[nchi01] == 1 && n[nch1plus] == 1) return 115;
283 else if (n[nchi01] == 1 && n[nch2plus] == 1) return 116;
284 else if (n[nchi01] == 1 && n[nch1minus] == 1) return 117;
285 else if (n[nchi01] == 1 && n[nch2minus] == 1) return 118;
286
287
288 else if (n[nchi02] == 2) return 122;
289 else if (n[nchi02] == 1 && n[nchi03] == 1) return 123;
290 else if (n[nchi02] == 1 && n[nchi04] == 1) return 124;
291 else if (n[nchi02] == 1 && n[nch1plus] == 1) return 125;
292 else if (n[nchi02] == 1 && n[nch2plus] == 1) return 126;
293 else if (n[nchi02] == 1 && n[nch1minus] == 1) return 127;
294 else if (n[nchi02] == 1 && n[nch2minus] == 1) return 128;
295
296
297 else if (n[nchi03] == 2) return 133;
298 else if (n[nchi03] == 1 && n[nchi04] == 1) return 134;
299 else if (n[nchi03] == 1 && n[nch1plus] == 1) return 135;
300 else if (n[nchi03] == 1 && n[nch2plus] == 1) return 136;
301 else if (n[nchi03] == 1 && n[nch1minus] == 1) return 137;
302 else if (n[nchi03] == 1 && n[nch2minus] == 1) return 138;
303
304
305 else if (n[nchi04] == 2) return 144;
306 else if (n[nchi04] == 1 && n[nch1plus] == 1) return 145;
307 else if (n[nchi04] == 1 && n[nch2plus] == 1) return 146;
308 else if (n[nchi04] == 1 && n[nch1minus] == 1) return 147;
309 else if (n[nchi04] == 1 && n[nch2minus] == 1) return 148;
310
311
312 else if (n[nch1plus] == 1 && n[nch1minus] == 1) return 157;
313 else if (n[nch1plus] == 1 && n[nch2minus] == 1) return 158;
314
315 else if (n[nch2plus] == 1 && n[nch1minus] == 1) return 167;
316 else if (n[nch2plus] == 1 && n[nch2minus] == 1) return 168;
317
318
319 else if (n[nselecLplus] == 1 && n[nselecLminus] == 1) return 201;
320 else if (n[nselecRplus] == 1 && n[nselecRminus] == 1) return 202;
321 else if (n[nselnuL] == 2) return 203;
322 else if (n[nselecLplus] == 1 && n[nselnuL] == 1) return 204;
323 else if (n[nselecLminus] == 1 && n[nselnuL] == 1) return 205;
324 else if (n[nstau1plus] == 1 && n[nstau1minus] == 1) return 206;
325 else if (n[nstau2plus] == 1 && n[nstau2minus] == 1) return 207;
326 else if ((n[nstau1plus] == 1 || n[nstau1minus] == 1) && (n[nstau2plus] == 1 || n[nstau2minus] == 1)) return 208;
327 else if (n[nstaunuL] == 2) return 209;
328 else if (n[nstau1plus] == 1 && n[nstaunuL] == 1) return 210;
329 else if (n[nstau1minus] == 1 && n[nstaunuL] == 1) return 211;
330 else if (n[nstau2plus] == 1 && n[nstaunuL] == 1) return 212;
331 else if (n[nstau2minus] == 1 && n[nstaunuL] == 1) return 213;
332
333 else if (n[nsmuonLplus] == 1 && n[nsmuonLminus] == 1) return 216;
334 else if (n[nsmuonRplus] == 1 && n[nsmuonRminus] == 1) return 217;
335 else if (n[nsmunuL] == 2) return 218;
336 else if (n[nsmuonLplus] == 1 && n[nsmunuL] == 1) return 219;
337 else if (n[nsmuonLminus] == 1 && n[nsmunuL] == 1) return 220;
338
339 std::cerr << "ERROR. could not determine finalState for:" << std::endl;
340 std::cerr << " SUSY_Spart1_pdgId: " << SUSY_Spart1_pdgId << std::endl;
341 std::cerr << " SUSY_Spart2_pdgId: " << SUSY_Spart2_pdgId << std::endl;
342 std::cerr << "Returning 0" << std::endl;
343
344 return 0;
345}