ATLAS Offline Software
Loading...
Searching...
No Matches
SUSY Namespace Reference

Classes

class  CrossSectionDB
class  CrossSectionDBPMG

Functions

unsigned int finalState (const int SUSY_Spart1_pdgId, const int SUSY_Spart2_pdgId)

Function Documentation

◆ finalState()

unsigned int SUSY::finalState ( const int SUSY_Spart1_pdgId,
const int SUSY_Spart2_pdgId )

Final classification

Definition at line 227 of file SUSYCrossSection.cxx.

228{
229 std::array<int, NUM_SPARTICLES> n{};
230 //Classification of the event follows (gg, sq...):
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) )){
237 ++n[idx2];
238 }
239
241 // gluino/squark + X
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 // Gaugino pair-production
277 // chi^{0}_1 + X
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 // chi^{0}_2 + X
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 // chi^{0}_3 + X
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 // chi^{0}_4 + X
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 // chi^{+}_1/2 + chi^{-}_1/2
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 // slepton
319 else if (n[nselecLplus] == 1 && n[nselecLminus] == 1) return 201; // sElectronLPair
320 else if (n[nselecRplus] == 1 && n[nselecRminus] == 1) return 202; // sElectronRPair
321 else if (n[nselnuL] == 2) return 203; // sElectron neutrino pair
322 else if (n[nselecLplus] == 1 && n[nselnuL] == 1) return 204; // sElectron+ sNutrino
323 else if (n[nselecLminus] == 1 && n[nselnuL] == 1) return 205; // sElectron- sNutrino
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; // sTau neutrino pair
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; // sMuonPair
334 else if (n[nsmuonRplus] == 1 && n[nsmuonRminus] == 1) return 217; // sMuonPair
335 else if (n[nsmunuL] == 2) return 218; // sMuon neutrino pair
336 else if (n[nsmuonLplus] == 1 && n[nsmunuL] == 1) return 219; // sMuon+ sNutrino
337 else if (n[nsmuonLminus] == 1 && n[nsmunuL] == 1) return 220; // sMuon- sNutrino
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}