ATLAS Offline Software
Classes | Functions
SUSY Namespace Reference

Classes

class  CrossSectionDB
 
class  CrossSectionDBPMG
 

Functions

template<class T >
bool isRGlueball (const T &p)
 PDG rule 11g: Within several scenarios of new physics, it is possible to have colored particles sufficiently long-lived for color-singlet hadronic states to form around them. More...
 
template<>
bool isRGlueball (const DecodedPID &p)
 
template<>
bool isRGlueball (const int &p)
 
template<class T >
bool isRHadron (const T &p)
 
template<>
bool isRHadron (const DecodedPID &p)
 
template<>
bool isRHadron (const int &p)
 
template<class T >
bool isRMeson (const T &p)
 
template<>
bool isRMeson (const DecodedPID &p)
 
template<>
bool isRMeson (const int &p)
 
template<class T >
bool isRBaryon (const T &p)
 
template<>
bool isRBaryon (const DecodedPID &p)
 
template<>
bool isRBaryon (const int &p)
 
template<class T >
bool isSLepton (const T &p)
 
template<>
bool isSLepton (const DecodedPID &p)
 
template<>
bool isSLepton (const int &p)
 
template<class T >
bool isSBaryon (const T &p)
 
template<>
bool isSBaryon (const DecodedPID &p)
 
template<>
bool isSBaryon (const int &p)
 
template<class T >
bool isSMeson (const T &p)
 
template<>
bool isSMeson (const DecodedPID &p)
 
template<>
bool isSMeson (const int &p)
 
template<class T >
bool spin (const T &p)
 
template<>
bool spin (const int &p)
 
std::vector< int > containedQuarks (int p)
 
template<class T >
bool isSquark (const T &p)
 
template<>
bool isSquark (const DecodedPID &p)
 
template<>
bool isSquark (const int &p)
 
template<class T >
bool hasSquark (const T &p, const int &q)
 
template<>
bool hasSquark (const DecodedPID &p, const int &q)
 
template<>
bool hasSquark (const int &p, const int &q)
 
unsigned int finalState (const int SUSY_Spart1_pdgId, const int SUSY_Spart2_pdgId)
 

Function Documentation

◆ containedQuarks()

std::vector<int> SUSY::containedQuarks ( int  p)
inline

Definition at line 662 of file AtlasPID.h.

662  {
663  auto pp = DecodedPID(p);
664  if (isSUSY(pp)) {
665  pp = pp.shift(1);
666  if (pp.ndigits() > 2) pp = pp.shift(1);
667  }
668  std::vector<int> quarks;
669  for (int i = 1; i<=6; ++i)
670  if (hasQuark(pp, i)) quarks.push_back(i);
671  return quarks;
672  }

◆ 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 }

◆ hasSquark() [1/3]

template<>
bool SUSY::hasSquark ( const DecodedPID p,
const int &  q 
)
inline

Definition at line 685 of file AtlasPID.h.

685  {
686  if (p.ndigits() == 7 && (p(0) == 1 || p(0) == 2)) { // APID SUSY case
687  auto pp = p.shift(1);
688  if ( pp.ndigits() == 2) { return false; } // skip boson super-partners
689  return (pp(0) == q); // The second non-zero digit in the pdg_id represents the flavour of the Squark in Squark and RHadron pdg_ids
690  }
691  return false;
692  }

◆ hasSquark() [2/3]

template<>
bool SUSY::hasSquark ( const int &  p,
const int &  q 
)
inline

Definition at line 693 of file AtlasPID.h.

693 { auto value_digits = DecodedPID(p); return hasSquark(value_digits, q);}

◆ hasSquark() [3/3]

template<class T >
bool SUSY::hasSquark ( const T &  p,
const int &  q 
)
inline

◆ isRBaryon() [1/3]

template<>
bool SUSY::isRBaryon ( const DecodedPID p)
inline

Definition at line 643 of file AtlasPID.h.

643 { if (!isSUSY(p)) return false; auto pp = p.shift(1); if (pp.ndigits() < 2) return false; if ( pp(1) == 7 || pp(1) == 8 ) return false; if (pp.ndigits() > 2) pp = pp.shift(1); return isBaryon(pp); }

◆ isRBaryon() [2/3]

template<>
bool SUSY::isRBaryon ( const int &  p)
inline

Definition at line 644 of file AtlasPID.h.

644 { auto value_digits = DecodedPID(p); return isRBaryon(value_digits); }

◆ isRBaryon() [3/3]

template<class T >
bool SUSY::isRBaryon ( const T &  p)
inline

Definition at line 642 of file AtlasPID.h.

642 { return isRBaryon(p->pdg_id()); }

◆ isRGlueball() [1/3]

template<>
bool SUSY::isRGlueball ( const DecodedPID p)
inline

Definition at line 628 of file AtlasPID.h.

628  {
629  if (p.ndigits() != 7) return false;
630  auto pp = p.shift(2);
631  return isGlueball(pp);
632  }

◆ isRGlueball() [2/3]

template<>
bool SUSY::isRGlueball ( const int &  p)
inline

Definition at line 633 of file AtlasPID.h.

633 { auto value_digits = DecodedPID(p); return isRGlueball(value_digits); }

◆ isRGlueball() [3/3]

template<class T >
bool SUSY::isRGlueball ( const T &  p)
inline

PDG rule 11g: Within several scenarios of new physics, it is possible to have colored particles sufficiently long-lived for color-singlet hadronic states to form around them.

In the context of supersymmetric scenarios, these states are called R-hadrons, since they carry odd R- parity. R-hadron codes, defined here, should be viewed as templates for corresponding codes also in other scenarios, for any long-lived particle that is either an unflavored color octet or a flavored color triplet. The R-hadron code is obtained by combining the SUSY particle code with a code for the light degrees of freedom, with as many intermediate zeros removed from the former as required to make place for the latter at the end. (To exemplify, a sparticle n00000n˜q combined with quarks q1 and q2 obtains code n00n˜qnq1 nq2 nJ .) Specifically, the new-particle spin decouples in the limit of large masses, so that the final nJ digit is defined by the spin state of the light-quark system alone. An appropriate number of nq digits is used to define the ordinary-quark content. As usual, 9 rather than 21 is used to denote a gluon/gluino in composite states. The sign of the hadron agrees with that of the constituent new particle (a color triplet) where there is a distinct new antiparticle, and else is defined as for normal hadrons. Particle names are R with the flavor content as lower index. APID: NB In the current numbering scheme, there is no way to distinguish between 2 gluinos + gluon and 2 gluons + gluino.

Definition at line 627 of file AtlasPID.h.

627 { return isRGlueball(p->pdg_id()); }

◆ isRHadron() [1/3]

template<>
bool SUSY::isRHadron ( const DecodedPID p)
inline

Definition at line 635 of file AtlasPID.h.

635 { if (!isSUSY(p)) return false; auto pp = p.shift(1); if (pp.ndigits() < 2) return false; if ( pp(1) == 7 || pp(1) == 8 ) return false; if (pp.ndigits() > 2) pp = pp.shift(1); return (isHadron(pp) || isRGlueball(p)); }

◆ isRHadron() [2/3]

template<>
bool SUSY::isRHadron ( const int &  p)
inline

Definition at line 636 of file AtlasPID.h.

636 { auto value_digits = DecodedPID(p); return isRHadron(value_digits); }

◆ isRHadron() [3/3]

template<class T >
bool SUSY::isRHadron ( const T &  p)
inline

Definition at line 634 of file AtlasPID.h.

634 { return isRHadron(p->pdg_id()); }

◆ isRMeson() [1/3]

template<>
bool SUSY::isRMeson ( const DecodedPID p)
inline

Definition at line 639 of file AtlasPID.h.

639 { if (!isSUSY(p)) return false; auto pp = p.shift(1); if (pp.ndigits() < 2) return false;if ( pp(1) == 7 || pp(1) == 8 ) return false; if (pp.ndigits() > 2) pp = pp.shift(1); return isMeson(pp); }

◆ isRMeson() [2/3]

template<>
bool SUSY::isRMeson ( const int &  p)
inline

Definition at line 640 of file AtlasPID.h.

640 { auto value_digits = DecodedPID(p); return isRMeson(value_digits); }

◆ isRMeson() [3/3]

template<class T >
bool SUSY::isRMeson ( const T &  p)
inline

Definition at line 638 of file AtlasPID.h.

638 { return isRMeson(p->pdg_id()); }

◆ isSBaryon() [1/3]

template<>
bool SUSY::isSBaryon ( const DecodedPID p)
inline

Definition at line 651 of file AtlasPID.h.

651 { auto pp = p.shift(1); return isSUSY(p) && isBaryon(pp);}

◆ isSBaryon() [2/3]

template<>
bool SUSY::isSBaryon ( const int &  p)
inline

Definition at line 652 of file AtlasPID.h.

652 { auto value_digits = DecodedPID(p); return isSBaryon(value_digits);}

◆ isSBaryon() [3/3]

template<class T >
bool SUSY::isSBaryon ( const T &  p)
inline

Definition at line 650 of file AtlasPID.h.

650 { return isSBaryon(p->pdg_id()); }

◆ isSLepton() [1/3]

template<>
bool SUSY::isSLepton ( const DecodedPID p)
inline

Definition at line 647 of file AtlasPID.h.

647 { auto pp = p.shift(1); return isSUSY(p) && isLepton(pp);}

◆ isSLepton() [2/3]

template<>
bool SUSY::isSLepton ( const int &  p)
inline

Definition at line 648 of file AtlasPID.h.

648 { auto value_digits = DecodedPID(p); return isSLepton(value_digits);}

◆ isSLepton() [3/3]

template<class T >
bool SUSY::isSLepton ( const T &  p)
inline

Definition at line 646 of file AtlasPID.h.

646 { return isSLepton(p->pdg_id()); }

◆ isSMeson() [1/3]

template<>
bool SUSY::isSMeson ( const DecodedPID p)
inline

Definition at line 656 of file AtlasPID.h.

656 { auto pp = p.shift(1); return isSUSY(p) && isMeson(pp);}

◆ isSMeson() [2/3]

template<>
bool SUSY::isSMeson ( const int &  p)
inline

Definition at line 657 of file AtlasPID.h.

657 { auto value_digits = DecodedPID(p); return isSMeson(value_digits);}

◆ isSMeson() [3/3]

template<class T >
bool SUSY::isSMeson ( const T &  p)
inline

Definition at line 655 of file AtlasPID.h.

655 { return isSMeson(p->pdg_id()); }

◆ isSquark() [1/3]

template<>
bool SUSY::isSquark ( const DecodedPID p)
inline

Definition at line 675 of file AtlasPID.h.

675  {
676  if (p.ndigits() == 7 && (p(0) == 1 || p(0) == 2)) { // APID SUSY case
677  auto pp = p.shift(1);
678  return ( pp.ndigits() == 1 && isQuark(pp) );
679  }
680  return false;
681  }

◆ isSquark() [2/3]

template<>
bool SUSY::isSquark ( const int &  p)
inline

Definition at line 682 of file AtlasPID.h.

682 { auto value_digits = DecodedPID(p); return isSquark(value_digits);}

◆ isSquark() [3/3]

template<class T >
bool SUSY::isSquark ( const T &  p)
inline

◆ spin() [1/2]

template<>
bool SUSY::spin ( const int &  p)
inline

Definition at line 660 of file AtlasPID.h.

660 { return p%10; }

◆ spin() [2/2]

template<class T >
bool SUSY::spin ( const T &  p)
inline

Definition at line 659 of file AtlasPID.h.

659 { return spin(p->pdg_id()); }
isMeson
bool isMeson(const T &p)
Definition: AtlasPID.h:219
hasQuark
bool hasQuark(const T &p, const int &q)
SUSY::spin
bool spin(const int &p)
Definition: AtlasPID.h:660
isQuark
bool isQuark(const T &p)
PDG rule 2: Quarks and leptons are numbered consecutively starting from 1 and 11 respectively; to dot...
Definition: AtlasPID.h:122
SUSY::isSBaryon
bool isSBaryon(const int &p)
Definition: AtlasPID.h:652
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
lumiFormat.i
int i
Definition: lumiFormat.py:85
beamspotman.n
n
Definition: beamspotman.py:731
isGlueball
bool isGlueball(const T &p)
APID: Definition of Glueballs: SM glueballs 99X (X=1,3,5), 999Y (Y=3,5,7)
Definition: AtlasPID.h:248
SUSY::isRGlueball
bool isRGlueball(const int &p)
Definition: AtlasPID.h:633
SUSY::isRMeson
bool isRMeson(const int &p)
Definition: AtlasPID.h:640
SUSY::isSMeson
bool isSMeson(const int &p)
Definition: AtlasPID.h:657
isSUSY
bool isSUSY(const T &p)
Definition: AtlasPID.h:210
DecodedPID
Implementation of classification functions according to PDG2022.
Definition: AtlasPID.h:16
SUSY::isRHadron
bool isRHadron(const int &p)
Definition: AtlasPID.h:636
isHadron
bool isHadron(const T &p)
Definition: AtlasPID.h:218
isBaryon
bool isBaryon(const T &p)
Definition: AtlasPID.h:220
SUSY::hasSquark
bool hasSquark(const int &p, const int &q)
Definition: AtlasPID.h:693
SUSY::isRBaryon
bool isRBaryon(const int &p)
Definition: AtlasPID.h:644
isLepton
bool isLepton(const T &p)
APID: the fourth generation leptons are leptons.
Definition: AtlasPID.h:139
LArNewCalib_DelayDump_OFC_Cali.idx
idx
Definition: LArNewCalib_DelayDump_OFC_Cali.py:69
SUSY::isSLepton
bool isSLepton(const int &p)
Definition: AtlasPID.h:648
extractSporadic.q
list q
Definition: extractSporadic.py:98
SUSY::isSquark
bool isSquark(const int &p)
Definition: AtlasPID.h:682