ATLAS Offline Software
Loading...
Searching...
No Matches
AtlasPID.h File Reference
#include <vector>
#include <cmath>
#include <algorithm>
#include <array>
#include <cstdlib>
Include dependency graph for AtlasPID.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  DecodedPID
 Implementation of classification functions according to PDG2022. More...

Functions

template<class T>
bool isQuark (const T &p)
 PDG rule 2: Quarks and leptons are numbered consecutively starting from 1 and 11 respectively; to do this they are first ordered by family and within families by weak isospin.
template<>
bool isQuark (const int &p)
template<>
bool isQuark (const DecodedPID &p)
template<class T>
bool isSMQuark (const T &p)
template<>
bool isSMQuark (const int &p)
template<>
bool isSMQuark (const DecodedPID &p)
template<class T>
bool isStrange (const T &p)
template<>
bool isStrange (const int &p)
template<class T>
bool isCharm (const T &p)
template<>
bool isCharm (const int &p)
template<class T>
bool isBottom (const T &p)
template<>
bool isBottom (const int &p)
template<class T>
bool isTop (const T &p)
template<>
bool isTop (const int &p)
template<class T>
bool isLepton (const T &p)
 APID: the fourth generation leptons are leptons.
template<>
bool isLepton (const int &p)
template<>
bool isLepton (const DecodedPID &p)
template<class T>
bool isSMLepton (const T &p)
 APID: the fourth generation leptons are not standard model leptons.
template<>
bool isSMLepton (const int &p)
template<>
bool isSMLepton (const DecodedPID &p)
template<class T>
bool isChLepton (const T &p)
 APID: the fourth generation leptons are leptons.
template<>
bool isChLepton (const int &p)
template<class T>
bool isElectron (const T &p)
template<>
bool isElectron (const int &p)
template<class T>
bool isMuon (const T &p)
template<>
bool isMuon (const int &p)
template<class T>
bool isTau (const T &p)
template<>
bool isTau (const int &p)
template<class T>
bool isNeutrino (const T &p)
 APID: the fourth generation neutrinos are neutrinos.
template<>
bool isNeutrino (const int &p)
template<class T>
bool isSMNeutrino (const T &p)
template<>
bool isSMNeutrino (const int &p)
template<class T>
bool isFourthGeneration (const T &p)
 Is this a 4th generation fermion?
template<>
bool isFourthGeneration (const int &p)
template<class T>
bool isDiquark (const T &p)
 PDG rule 4 Diquarks have 4-digit numbers with nq1 >= nq2 and nq3 = 0 APID: states with top quarks are diquarks APID: states with fourth generation quarks are not diquarks.
template<>
bool isDiquark (const DecodedPID &p)
template<>
bool isDiquark (const int &p)
template<class T>
bool isMeson (const T &p)
 Table 43.1 PDG rule 5a: The numbers specifying the meson’s quark content conform to the convention nq1= 0 and nq2 >= nq3.
template<>
bool isMeson (const DecodedPID &p)
template<>
bool isMeson (const int &p)
template<class T>
bool isQuarkonium (const T &p)
 Is this a heavy-flavour quarkonium meson?
template<>
bool isQuarkonium (const DecodedPID &p)
template<>
bool isQuarkonium (const int &p)
template<class T>
bool isBaryon (const T &p)
 Table 43.2 APID: states with fourth generation quarks are not baryons.
template<>
bool isBaryon (const DecodedPID &p)
template<>
bool isBaryon (const int &p)
template<class T>
bool isTetraquark (const T &p)
 PDG rule 14 The 9-digit tetra-quark codes are ±1nrnLnq1nq20nq3nq4nJ.
template<>
bool isTetraquark (const DecodedPID &p)
template<>
bool isTetraquark (const int &p)
template<class T>
bool isPentaquark (const T &p)
 PDG rule 15 The 9-digit penta-quark codes are ±1nrnLnq1nq2nq3nq4nq5nJ, sorted such that nq1≥nq2≥nq3≥nq4.
template<>
bool isPentaquark (const DecodedPID &p)
template<>
bool isPentaquark (const int &p)
template<class T>
bool isHadron (const T &p)
template<>
bool isHadron (const DecodedPID &p)
template<>
bool isHadron (const int &p)
template<class T>
bool isTrajectory (const T &p)
 PDG rule 8: The pomeron and odderon trajectories and a generic reggeon trajectory of states in QCD areassigned codes 990, 9990, and 110 respectively.
template<>
bool isTrajectory (const int &p)
template<class T>
bool isBoson (const T &p)
 PDG rule 9: Two-digit numbers in the range 21–30 are provided for the Standard Model gauge and Higgs bosons.
template<>
bool isBoson (const int &p)
template<>
bool isBoson (const DecodedPID &p)
template<class T>
bool isGluon (const T &p)
template<>
bool isGluon (const int &p)
template<class T>
bool isPhoton (const T &p)
template<>
bool isPhoton (const int &p)
template<class T>
bool isZ (const T &p)
template<>
bool isZ (const int &p)
template<class T>
bool isW (const T &p)
template<>
bool isW (const int &p)
template<class T>
bool isHeavyBoson (const T &p)
 APID: Additional "Heavy"/"prime" versions of W and Z bosons (Used in MCTruthClassifier)
template<>
bool isHeavyBoson (const int &p)
template<class T>
bool isHiggs (const T &p)
 APID: HIGGS boson is only one particle.
template<>
bool isHiggs (const int &p)
template<class T>
bool isMSSMHiggs (const T &p)
 APID: Additional Higgs bosons for MSSM (Used in MCTruthClassifier)
template<>
bool isMSSMHiggs (const int &p)
template<class T>
bool isGraviton (const T &p)
template<>
bool isGraviton (const int &p)
template<class T>
bool isResonance (const T &p)
template<class T>
bool isLeptoQuark (const T &p)
 PDG rule 11c: “One-of-a-kind” exotic particles are assigned numbers in the range 41–80.
template<>
bool isLeptoQuark (const int &p)
template<class T>
bool isPythia8Specific (const T &p)
template<>
bool isPythia8Specific (const DecodedPID &p)
template<>
bool isPythia8Specific (const int &p)
template<class T>
bool isNeutrinoRH (const T &p)
 PDG Rule 12: APID: Helper function for right-handed neutrino states These are generator defined PDG ID values for right handed neutrinos.
template<>
bool isNeutrinoRH (const int &p)
template<class T>
bool isGenSpecific (const T &p)
 Main Table for MC internal use 81–100,901–930,998-999,1901–1930,2901–2930, and 3901–3930.
template<>
bool isGenSpecific (const int &p)
template<class T>
bool isGeantino (const T &p)
template<>
bool isGeantino (const int &p)
template<class T>
bool isGlueball (const T &p)
 APID: Definition of Glueballs: SM glueballs 99X (X=1,5), 999Y (Y=3,7)
template<>
bool isGlueball (const DecodedPID &p)
template<>
bool isGlueball (const int &p)
template<class T>
bool isSquark (const T &p)
 PDG rule 11d Fundamental supersymmetric particles are identified by adding a nonzero n to the particle number.
template<>
bool isSquark (const DecodedPID &p)
template<>
bool isSquark (const int &p)
template<class T>
bool isSquarkLH (const T &p)
template<>
bool isSquarkLH (const DecodedPID &p)
template<>
bool isSquarkLH (const int &p)
template<class T>
bool isSquarkRH (const T &p)
template<>
bool isSquarkRH (const DecodedPID &p)
template<>
bool isSquarkRH (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 isSleptonLH (const T &p)
template<>
bool isSleptonLH (const DecodedPID &p)
template<>
bool isSleptonLH (const int &p)
template<class T>
bool isSleptonRH (const T &p)
template<>
bool isSleptonRH (const DecodedPID &p)
template<>
bool isSleptonRH (const int &p)
template<class T>
bool isGaugino (const T &p)
template<>
bool isGaugino (const DecodedPID &p)
template<>
bool isGaugino (const int &p)
template<class T>
bool isSuperpartner (const T &p)
template<>
bool isSuperpartner (const DecodedPID &p)
template<>
bool isSuperpartner (const int &p)
template<class T>
bool isTechnicolor (const T &p)
 PDG rule 11e Technicolor states have n = 3, with technifermions treated like ordinary fermions.
template<>
bool isTechnicolor (const DecodedPID &p)
template<>
bool isTechnicolor (const int &p)
template<class T>
bool isExcited (const T &p)
 PDG rule 11f Excited (composite) quarks and leptons are identified by setting n= 4 and nr= 0.
template<>
bool isExcited (const DecodedPID &p)
template<>
bool isExcited (const int &p)
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.
template<>
bool isRGlueball (const DecodedPID &p)
template<>
bool isRGlueball (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 isRHadron (const T &p)
template<>
bool isRHadron (const DecodedPID &p)
template<>
bool isRHadron (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)
template<class T>
bool isSUSY (const T &p)
template<>
bool isSUSY (const DecodedPID &p)
template<>
bool isSUSY (const int &p)
template<class T>
bool isKK (const T &p)
 PDG rule 11h A black hole in models with extra dimensions has code 5000040.
template<>
bool isKK (const DecodedPID &p)
template<>
bool isKK (const int &p)
template<class T>
bool isMonopole (const T &p)
 PDG rule 11i Magnetic monopoles and dyons are assumed to have one unit of Dirac monopole charge and a variable integer number nq1nq2 nq3 units of electric charge.
template<>
bool isMonopole (const DecodedPID &p)
template<>
bool isMonopole (const int &p)
template<class T>
bool isDM (const T &p)
 PDG rule 11j: The nature of Dark Matter (DM) is not known, and therefore a definitive classificationis too early.
template<>
bool isDM (const int &p)
template<class T>
bool isHiddenValley (const T &p)
 PDG rule 11k Hidden Valley particles have n = 4 and n_r = 9, and trailing numbers in agreement with their nearest-analog standard particles, as far as possible.
template<>
bool isHiddenValley (const DecodedPID &p)
template<>
bool isHiddenValley (const int &p)
template<class T>
bool isGenericMultichargedParticle (const T &p)
 In addition, there is a need to identify ”Q-ball” and similar very exotic (multi-charged) particles which may have large, non-integer charge.
template<>
bool isGenericMultichargedParticle (const DecodedPID &p)
template<>
bool isGenericMultichargedParticle (const int &p)
template<class T>
bool isNucleus (const T &p)
 PDG rule 16 Nuclear codes are given as 10-digit numbers ±10LZZZAAAI.
template<>
bool isNucleus (const DecodedPID &p)
template<>
bool isNucleus (const int &p)
template<class T>
bool hasQuark (const T &p, const int &q)
template<>
bool hasQuark (const DecodedPID &p, const int &q)
template<>
bool hasQuark (const int &p, const int &q)
template<class T>
bool hasStrange (const T &p)
template<class T>
bool hasCharm (const T &p)
template<class T>
bool hasBottom (const T &p)
template<class T>
bool hasTop (const T &p)
template<class T>
int baryonNumber3 (const T &p)
template<>
int baryonNumber3 (const DecodedPID &p)
template<>
int baryonNumber3 (const int &p)
template<class T>
double baryonNumber (const T &p)
template<>
double baryonNumber (const DecodedPID &p)
template<>
double baryonNumber (const int &p)
template<class T>
int strangeness (const T &p)
template<>
int strangeness (const DecodedPID &p)
template<>
int strangeness (const int &p)
template<class T>
int numberOfLambdas (const T &p)
template<>
int numberOfLambdas (const DecodedPID &p)
template<>
int numberOfLambdas (const int &p)
template<class T>
int numberOfProtons (const T &p)
template<>
int numberOfProtons (const DecodedPID &p)
template<>
int numberOfProtons (const int &p)
template<class T>
bool isBSM (const T &p)
 APID: graviton and all Higgs extensions are BSM.
template<>
bool isBSM (const DecodedPID &p)
template<>
bool isBSM (const int &p)
template<class T>
bool isTransportable (const T &p)
template<>
bool isTransportable (const DecodedPID &p)
template<>
bool isTransportable (const int &p)
template<class T>
bool isValid (const T &p)
 Av: we implement here an ATLAS-sepcific convention: all particles which are 99xxxxx are fine.
template<>
bool isValid (const DecodedPID &p)
template<>
bool isValid (const int &p)
template<class T>
int leadingQuark (const T &p)
template<>
int leadingQuark (const DecodedPID &p)
template<>
int leadingQuark (const int &p)
template<class T>
bool isLightHadron (const T &p)
template<class T>
bool isHeavyHadron (const T &p)
template<class T>
bool isStrangeHadron (const T &p)
template<class T>
bool isCharmHadron (const T &p)
template<class T>
bool isBottomHadron (const T &p)
template<class T>
bool isTopHadron (const T &p)
template<class T>
bool isLightMeson (const T &p)
template<class T>
bool isHeavyMeson (const T &p)
template<class T>
bool isStrangeMeson (const T &p)
template<class T>
bool isCharmMeson (const T &p)
template<class T>
bool isBottomMeson (const T &p)
template<class T>
bool isTopMeson (const T &p)
template<class T>
bool isCCbarMeson (const T &p)
template<>
bool isCCbarMeson (const DecodedPID &p)
template<>
bool isCCbarMeson (const int &p)
template<class T>
bool isBBbarMeson (const T &p)
template<>
bool isBBbarMeson (const DecodedPID &p)
template<>
bool isBBbarMeson (const int &p)
template<class T>
bool isLightBaryon (const T &p)
template<class T>
bool isHeavyBaryon (const T &p)
template<class T>
bool isStrangeBaryon (const T &p)
template<class T>
bool isCharmBaryon (const T &p)
template<class T>
bool isBottomBaryon (const T &p)
template<class T>
bool isTopBaryon (const T &p)
template<class T>
bool isWeaklyDecayingBHadron (const T &p)
template<>
bool isWeaklyDecayingBHadron (const int &p)
template<>
bool isWeaklyDecayingBHadron (const DecodedPID &p)
template<class T>
bool isWeaklyDecayingCHadron (const T &p)
template<>
bool isWeaklyDecayingCHadron (const int &p)
template<>
bool isWeaklyDecayingCHadron (const DecodedPID &p)
template<class T>
int charge3 (const T &p)
template<class T>
double fractionalCharge (const T &p)
template<class T>
double charge (const T &p)
template<class T>
double threeCharge (const T &p)
template<class T>
bool isCharged (const T &p)
template<>
int charge3 (const DecodedPID &p)
template<>
int charge3 (const int &p)
template<class T>
bool isNeutral (const T &p)
template<>
bool isNeutral (const DecodedPID &p)
template<>
bool isNeutral (const int &p)
template<>
double fractionalCharge (const DecodedPID &p)
template<>
double fractionalCharge (const int &p)
template<class T>
bool isEMInteracting (const T &p)
template<>
bool isEMInteracting (const int &p)
template<class T>
bool isParton (const T &p)
template<class T>
int spin2 (const T &p)
template<>
int spin2 (const DecodedPID &p)
template<>
int spin2 (const int &p)
template<class T>
double spin (const T &p)
template<>
double spin (const DecodedPID &p)
template<>
double spin (const int &p)
template<class T>
std::vector< int > containedQuarks (const T &p)
template<>
std::vector< int > containedQuarks (const int &p)
template<>
std::vector< int > containedQuarks (const DecodedPID &p)
template<class T>
bool isStrongInteracting (const T &p)
template<>
bool isStrongInteracting (const int &p)

Variables

static const int TABLESIZE = 100
static const std::array< int, TABLESIZEtriple_charge
static const std::array< int, TABLESIZEdouble_spin
static const int DQUARK = 1
static const int UQUARK = 2
static const int SQUARK = 3
static const int CQUARK = 4
static const int BQUARK = 5
static const int TQUARK = 6
static const int BPRIME = 7
static const int TPRIME = 8
static const int QUARK_LIMIT = BPRIME
static const int ELECTRON = 11
static const int POSITRON = -ELECTRON
static const int NU_E = 12
static const int MUON = 13
static const int NU_MU = 14
static const int TAU = 15
static const int NU_TAU = 16
static const int LPRIME = 17
static const int NUPRIME = 18
static const int GLUON = 21
static const int COMPOSITEGLUON = 9
static const int PHOTON = 22
static const int Z0BOSON = 23
static const int WPLUSBOSON = 24
static const int HIGGSBOSON = 25
static const int ZPRIME = 32
static const int ZDBLPRIME = 33
static const int WPLUSPRIME = 34
static const int HIGGS2 = 35
static const int HIGGS3 = 36
static const int HIGGSPLUS = 37
static const int HIGGSPLUSPLUS = 38
static const int GRAVITON = 39
static const int HIGGS4 = 40
static const int LEPTOQUARK = 42
static const int DARKPHOTON = 60000
 PDG Ids for Mavtop madgraph UFO model found under DarkX.
static const int MAVTOP = 60001
static const int PIPLUS = 211
static const int PIMINUS = -PIPLUS
static const int PI0 = 111
static const int K0L = 130
static const int K0S = 310
static const int K0 = 311
static const int KPLUS = 321
static const int DPLUS = 411
static const int DSTAR = 413
static const int D0 = 421
static const int DSPLUS = 431
static const int JPSI = 443
static const int B0 = 511
static const int BCPLUS = 541
static const int PROTON = 2212
static const int NEUTRON = 2112
static const int LAMBDA0 = 3122
static const int LAMBDACPLUS = 4122
static const int LAMBDAB0 = 5122
static const int PSI2S = 20443
static const int RH_NU_E = 9900012
 PDG Rule 12: Generator defined PDG ID values for right handed neutrinos and corresponding W+ boson from a Left-Right symmetric Standard Model extension.
static const int RH_NU_MU = 9900014
static const int RH_NU_TAU = 9900016
static const int WBOSON_LRSM = 9900024
static const int LEAD = 1000822080
static const int OXYGEN = 1000080160
static const int NEON = 1000100200
static const int HELIUM = 1000020040
static const int POMERON = 990
 PDG rule 8: The pomeron and odderon trajectories and a generic reggeon trajectory of states in QCD areassigned codes 990, 9990, and 110 respectively.
static const int ODDERON = 9990
static const int REGGEON = 110
static const int GEANTINOPLUS = 998
 PDG rule 10: Codes 81–100 are reserved for generator-specific pseudoparticles and concepts.
static const int GEANTINO0 = 999
static const std::array< int, 10 > is_strange

Function Documentation

◆ baryonNumber() [1/3]

template<>
double baryonNumber ( const DecodedPID & p)
inline

Definition at line 774 of file AtlasPID.h.

774{ return static_cast<double>(baryonNumber3(p))/3.0;}
int baryonNumber3(const T &p)
Definition AtlasPID.h:748

◆ baryonNumber() [2/3]

template<>
double baryonNumber ( const int & p)
inline

Definition at line 775 of file AtlasPID.h.

775{ auto value_digits = DecodedPID(p); return static_cast<double>(baryonNumber3(value_digits))/3.0;}
Implementation of classification functions according to PDG2022.
Definition AtlasPID.h:16

◆ baryonNumber() [3/3]

template<class T>
double baryonNumber ( const T & p)
inline

Definition at line 773 of file AtlasPID.h.

773{return baryonNumber(p->pdg_id());}
double baryonNumber(const T &p)
Definition AtlasPID.h:773

◆ baryonNumber3() [1/3]

template<>
int baryonNumber3 ( const DecodedPID & p)
inline

Definition at line 749 of file AtlasPID.h.

749 {
750 if (isQuark(p.pid())) { return (p.pid() > 0) ? 1 : - 1;}
751 if (isDiquark(p)) { return (p.pid() > 0) ? 2 : -2; }
752 if (isMeson(p) || isTetraquark(p)) { return 0; }
753 if (isBaryon(p) || isPentaquark(p)){ return (p.pid() > 0) ? 3 : -3; }
754 if (isNucleus(p)) {
755 const int result = 3*p(8) + 30*p(7) + 300*p(6);
756 return (p.pid() > 0) ? result : -result;
757 }
758 if (isSUSY(p)) {
759 auto pp = p.shift(1);
760 if (pp.ndigits() < 3 ) { return baryonNumber3(pp); } // super-partners of fundamental particles
761 if (pp(0) == COMPOSITEGLUON) {
762 if (pp(1) == COMPOSITEGLUON) { return 0; } // R-Glueballs
763 if ( pp.ndigits() == 4 ) { return 0; } // states with gluino-quark-antiquark
764 if ( pp.ndigits() == 5) { return (p.pid() > 0) ? 3 : -3; } // states with gluino-quark-quark-quark
765 }
766 if (pp.ndigits() == 3) { return 0; } // squark-antiquark
767 if (pp.ndigits() == 4) { return (p.pid() > 0) ? 3 : -3; } // states with squark-quark-quark
768 }
769 return 0;
770}
bool isPentaquark(const T &p)
PDG rule 15 The 9-digit penta-quark codes are ±1nrnLnq1nq2nq3nq4nq5nJ, sorted such that nq1≥nq2≥nq3≥n...
Definition AtlasPID.h:342
bool isTetraquark(const T &p)
PDG rule 14 The 9-digit tetra-quark codes are ±1nrnLnq1nq20nq3nq4nJ.
Definition AtlasPID.h:325
bool isQuark(const T &p)
PDG rule 2: Quarks and leptons are numbered consecutively starting from 1 and 11 respectively; to do ...
Definition AtlasPID.h:167
bool isMeson(const T &p)
Table 43.1 PDG rule 5a: The numbers specifying the meson’s quark content conform to the convention nq...
Definition AtlasPID.h:244
bool isDiquark(const T &p)
PDG rule 4 Diquarks have 4-digit numbers with nq1 >= nq2 and nq3 = 0 APID: states with top quarks are...
Definition AtlasPID.h:227
static const int COMPOSITEGLUON
Definition AtlasPID.h:86
bool isSUSY(const T &p)
Definition AtlasPID.h:623
bool isBaryon(const T &p)
Table 43.2 APID: states with fourth generation quarks are not baryons.
Definition AtlasPID.h:282
bool isNucleus(const T &p)
PDG rule 16 Nuclear codes are given as 10-digit numbers ±10LZZZAAAI.
Definition AtlasPID.h:702

◆ baryonNumber3() [2/3]

template<>
int baryonNumber3 ( const int & p)
inline

Definition at line 771 of file AtlasPID.h.

771{ auto value_digits = DecodedPID(p); return baryonNumber3(value_digits);}

◆ baryonNumber3() [3/3]

template<class T>
int baryonNumber3 ( const T & p)
inline

Definition at line 748 of file AtlasPID.h.

748{return baryonNumber3(p->pdg_id());}

◆ charge()

template<class T>
double charge ( const T & p)
inline

Definition at line 997 of file AtlasPID.h.

997 {
998 if (isGenericMultichargedParticle(p)) // BSM multi-charged particles might have a fractional charge that's not a multiple of 1/3
999 return fractionalCharge(p);
1000 else
1001 return 1.0*charge3(p)/3.0;
1002}
int charge3(const T &p)
Definition AtlasPID.h:995
double fractionalCharge(const T &p)
Definition AtlasPID.h:996
bool isGenericMultichargedParticle(const T &p)
In addition, there is a need to identify ”Q-ball” and similar very exotic (multi-charged) particles w...
Definition AtlasPID.h:684

◆ charge3() [1/3]

template<>
int charge3 ( const DecodedPID & p)
inline

Codes 411nq1nq2 nq3 0 are then used when the magnetic and electrical charge sign agree and 412nq1nq2 nq3 0 when they disagree, with the overall sign of the particle set by the magnetic charge.

Definition at line 1007 of file AtlasPID.h.

1007 {
1008 auto ap = std::abs(p.pid());
1009 if (ap < TABLESIZE ) return p.pid() > 0 ? triple_charge.at(ap) : -triple_charge.at(ap);
1010 if (ap == K0) return 0;
1011 if (ap == GEANTINO0) return 0;
1012 if (ap == GEANTINOPLUS) return p.pid() > 0 ? 3 : -3;
1013 if (ap == MAVTOP) return p.pid() > 0 ? 2 : -2;
1014 size_t nq = 0;
1015 int sign = 1;
1016 int signmult = 1;
1017 int result=0;
1018 bool classified = false;
1019 if (!classified && isMeson(p)) { classified = true; nq = 2; if ((*(p.second.rbegin()+2)) == 2||(*(p.second.rbegin()+2)) == 4 ) { sign=-1;} signmult =-1; }
1020 if (!classified && isDiquark(p)) {return triple_charge.at(p(0))+triple_charge.at(p(1)); }
1021 if (!classified && isBaryon(p)) { classified = true; nq = 3; }
1022 if (!classified && isTetraquark(p)){ return triple_charge.at(p(3)) + triple_charge.at(p(4)) - triple_charge.at(p(6)) - triple_charge.at(p(7)); }
1023 if (!classified && isPentaquark(p)){ return triple_charge.at(p(3)) + triple_charge.at(p(4)) + triple_charge.at(p(5)) + triple_charge.at(p(6)) - triple_charge.at(p(7)); }
1024 if (!classified && isNucleus(p)) { return 3*numberOfProtons(p);}
1025 if (!classified && isSUSY(p)) {
1026 nq = 0;
1027 auto pp = p.shift(1);
1028 if (pp.ndigits() < 3 ) { return charge3(pp); } // super-partners of fundamental particles
1029 if (pp(0) == COMPOSITEGLUON) {
1030 if (pp(1) == COMPOSITEGLUON) { return 0; } // R-Glueballs
1031 if ( pp.ndigits() == 4 || pp.ndigits() == 5) {
1032 pp = pp.shift(1); // Remove gluino
1033 }
1034 }
1035 if (pp.ndigits() == 3) { classified = true; nq = 2; if (p.last()%2==0) {sign = -1;} signmult = -1; } // states with squark-antiquark or quark-anti-quark
1036 if (pp.ndigits() == 4) { classified = true; nq = 3; } // states with squark-quark-quark or quark-quark-quark
1037 }
1038 if (!classified && isHiddenValley(p)) { // Hidden Valley particles
1039 auto pp = p.shift(2);
1040 if (!classified && isMeson(pp)) { classified = true; nq = 2; if ((*(pp.second.rbegin()+2)) == 2||(*(pp.second.rbegin()+2)) == 4 ) { sign=-1;} signmult =-1; }
1041 if (!classified && isDiquark(pp)) {return triple_charge.at(pp(0))+triple_charge.at(pp(1)); }
1042 if (!classified && isBaryon(pp)) { classified = true; nq = 3; }
1043
1044 }
1045 if (!classified && isKK(p)) { // Kaluza-Klein particles
1046 auto pp = p.shift(2);
1047 auto ap = std::abs(pp.pid());
1048 if (ap < TABLESIZE ) return pp.pid() > 0 ? triple_charge.at(ap) : -triple_charge.at(ap);
1049
1050 }
1051 if (!classified && isDM(p.pid())) { //Dark Matter Particles
1052 if (p.ndigits() == 7){ // Determining the charges for the more elaborate, 7-digit DM codes
1053 auto pp = p.shift(3); // The first two digits indicate the particle is DM, the third indicates left/right-handedness (see 11(j))
1054 auto ap = std::abs(pp.pid());
1055 if (ap < TABLESIZE ) return pp.pid() > 0 ? triple_charge.at(ap) : -triple_charge.at(ap);
1056 }else if (std::abs(p.pid()) < TABLESIZE) return p.pid() > 0 ? triple_charge.at(ap) : -triple_charge.at(ap); // Just to make sure the correct charge is returned for DM 51-60
1057 }
1058 if (!classified && isMonopole(p)) {
1061 result = 3*(p(3)*100 + p(4)*10 + p(5));
1062 return ( (p.pid() > 0 && p(2) == 1) || (p.pid() < 0 && p(2) == 2) ) ? result : -result;
1063 }
1064 if (!classified && isGenericMultichargedParticle(p)) {
1065 double abs_charge = 0.0;
1066 if (p(0) == 1) abs_charge = p(3)*100. + p(4)*10. + p(5)*1 + p(6)*0.1; // multi-charged particle PDG ID is +/-100XXXY0, where the charge is XXX.Y
1067 if (p(0) == 2) abs_charge = (p(3)*10. + p(4))/(p(5)*10.0 + p(6)); // multi-charged particle PDG ID is +/-200XXYY0, where the charge is XX/YY
1068 int abs_threecharge = static_cast<int>(std::round(abs_charge * 3.)); // the multi-charged particles might have a fractional charge that's not a multiple of 1/3, in that case round to the closest multiple of 1/3 for charge3 and threecharge
1069 return p.pid() > 0 ? abs_threecharge : -1 * abs_threecharge;
1070 }
1071 for (auto r = p.second.rbegin() + 1; r != p.second.rbegin() + 1 + nq; ++r) {
1072 result += triple_charge.at(*r)*sign;
1073 sign*=signmult;
1074 }
1075 return p.pid() > 0 ? result : -result;
1076}
int numberOfProtons(const T &p)
Definition AtlasPID.h:833
static const int TABLESIZE
Definition AtlasPID.h:34
static const int K0
Definition AtlasPID.h:115
static const int MAVTOP
Definition AtlasPID.h:107
static const std::array< int, TABLESIZE > triple_charge
Definition AtlasPID.h:35
bool isMonopole(const T &p)
PDG rule 11i Magnetic monopoles and dyons are assumed to have one unit of Dirac monopole charge and a...
Definition AtlasPID.h:645
bool isHiddenValley(const T &p)
PDG rule 11k Hidden Valley particles have n = 4 and n_r = 9, and trailing numbers in agreement with t...
Definition AtlasPID.h:668
static const int GEANTINOPLUS
PDG rule 10: Codes 81–100 are reserved for generator-specific pseudoparticles and concepts.
Definition AtlasPID.h:158
static const int GEANTINO0
Definition AtlasPID.h:159
bool isKK(const T &p)
PDG rule 11h A black hole in models with extra dimensions has code 5000040.
Definition AtlasPID.h:635
bool isDM(const T &p)
PDG rule 11j: The nature of Dark Matter (DM) is not known, and therefore a definitive classificationi...
Definition AtlasPID.h:658
int sign(int a)
int r
Definition globals.cxx:22

◆ charge3() [2/3]

template<>
int charge3 ( const int & p)
inline

Definition at line 1077 of file AtlasPID.h.

1077 {
1078 int ap = std::abs(p);
1079 if (ap < TABLESIZE) return p > 0 ? triple_charge.at(ap):-triple_charge.at(ap);
1080 auto value_digits = DecodedPID(p);
1081 return charge3(value_digits);
1082}

◆ charge3() [3/3]

template<class T>
int charge3 ( const T & p)
inline

Definition at line 995 of file AtlasPID.h.

995{return charge3(p->pdg_id());}

◆ containedQuarks() [1/3]

template<>
std::vector< int > containedQuarks ( const DecodedPID & p)
inline

Definition at line 1176 of file AtlasPID.h.

1176{ return containedQuarks(p.pid()); }
std::vector< int > containedQuarks(const T &p)
Definition AtlasPID.h:1153

◆ containedQuarks() [2/3]

template<>
std::vector< int > containedQuarks ( const int & p)
inline

Definition at line 1154 of file AtlasPID.h.

1154 {
1155 auto pp = DecodedPID(p);
1156 std::vector<int> quarks;
1157 if (isQuark(pp.pid())) { quarks.push_back(std::abs(pp.pid())); }
1158 else if (isDiquark(pp)) { quarks.push_back(pp(0)); quarks.push_back(pp(1)); }
1159 else if (isMeson(pp)) { quarks.push_back(*(pp.second.rbegin() + 1)); quarks.push_back(*(pp.second.rbegin()+2)); }
1160 else if (isBaryon(pp)) { for (size_t digit = 1; digit < 4; ++digit) { quarks.push_back(*(pp.second.rbegin() + digit)); } }
1161 else if (isTetraquark(pp)) { for (size_t digit = 1; digit < 5; ++digit) { quarks.push_back(*(pp.second.rbegin() + digit)); } }
1162 else if (isPentaquark(pp)) { for (size_t digit = 1; digit < 6; ++digit) { quarks.push_back(*(pp.second.rbegin() + digit)); } }
1163 else if (isNucleus(pp)) { const int A = std::abs(baryonNumber3(pp)/3); const int Z = std::abs(numberOfProtons(pp)); const int L = std::abs(numberOfLambdas(pp));
1164 const int n_uquarks = A + Z; const int n_dquarks = 2*A - Z - L; const int n_squarks = L;
1165 quarks.reserve(3*A); quarks.insert(quarks.end(), n_dquarks, 1); quarks.insert(quarks.end(), n_uquarks, 2); quarks.insert(quarks.end(), n_squarks, 3); }
1166 else if (isSUSY(pp)) { // APID SUSY case
1167 pp = pp.shift(1);
1168 if ( pp.ndigits() > 1 ) { // skip squarks
1169 if ( pp.ndigits() == 3 ) { pp = DecodedPID(pp(1)); } // Handle ~q qbar pairs
1170 if ( pp.ndigits() > 3 ) { pp = pp.shift(1); } // Drop gluinos and squarks
1171 return containedQuarks(pp.pid());
1172 }
1173 }
1174 return quarks;
1175}
int numberOfLambdas(const T &p)
Definition AtlasPID.h:824
hold the test vectors and ease the comparison

◆ containedQuarks() [3/3]

template<class T>
std::vector< int > containedQuarks ( const T & p)
inline

Definition at line 1153 of file AtlasPID.h.

1153{ return containedQuarks(p->pdg_id()); }

◆ fractionalCharge() [1/3]

template<>
double fractionalCharge ( const DecodedPID & p)
inline

Definition at line 1090 of file AtlasPID.h.

1090 {
1091 if(!isGenericMultichargedParticle(p)) return 1.0*charge3(p)/3.0; // this method is written for multi-charged particles, still make sure other cases are handled properly
1092 double abs_charge = 0;
1093 if (p(0) == 1) abs_charge = p(3)*100. + p(4)*10. + p(5)*1 + p(6)*0.1; // multi-charged particle PDG ID is +/-100XXXY0, where the charge is XXX.Y
1094 if (p(0) == 2) abs_charge = (p(3)*10. + p(4))/(p(5)*10.0 + p(6)); // multi-charged particle PDG ID is +/-200XXYY0, where the charge is XX/YY
1095 return p.pid() > 0 ? abs_charge : -1 * abs_charge;
1096}

◆ fractionalCharge() [2/3]

template<>
double fractionalCharge ( const int & p)
inline

Definition at line 1097 of file AtlasPID.h.

1097{auto value_digits = DecodedPID(p); return fractionalCharge(value_digits);}

◆ fractionalCharge() [3/3]

template<class T>
double fractionalCharge ( const T & p)
inline

Definition at line 996 of file AtlasPID.h.

996{return fractionalCharge(p->pdg_id());}

◆ hasBottom()

template<class T>
bool hasBottom ( const T & p)
inline

Definition at line 738 of file AtlasPID.h.

738{ return hasQuark(p,BQUARK); }
static const int BQUARK
Definition AtlasPID.h:68
bool hasQuark(const T &p, const int &q)

◆ hasCharm()

template<class T>
bool hasCharm ( const T & p)
inline

Definition at line 737 of file AtlasPID.h.

737{ return hasQuark(p,CQUARK); }
static const int CQUARK
Definition AtlasPID.h:67

◆ hasQuark() [1/3]

template<>
bool hasQuark ( const DecodedPID & p,
const int & q )
inline

Definition at line 716 of file AtlasPID.h.

716 {
717 if (isQuark(p.pid())) { return (std::abs(p.pid()) == q );}
718 if (isMeson(p)) { return *(p.second.rbegin() + 1) == q ||*(p.second.rbegin()+2) ==q;}
719 if (isDiquark(p)) { auto i = std::find(p.second.rbegin() + 2,p.second.rbegin()+4,q); return (i!=p.second.rbegin()+4);}
720 if (isBaryon(p)) { auto i = std::find(p.second.rbegin() + 1,p.second.rbegin()+4,q); return (i!=p.second.rbegin()+4);}
721 if (isTetraquark(p)) { auto i = std::find(p.second.rbegin() + 1,p.second.rbegin()+5,q); return (i!=p.second.rbegin()+5);}
722 if (isPentaquark(p)) { auto i = std::find(p.second.rbegin() + 1,p.second.rbegin()+6,q); return (i!=p.second.rbegin()+6);}
723 if (isNucleus(p) && std::abs(p.pid()) != PROTON) { return (q == 1 || q == 2 || (q==3 && p(2) > 0));}
724 if (isSUSY(p)) { // APID SUSY case
725 auto pp = p.shift(1);
726 if ( pp.ndigits() == 1 ) { return false; } // Handle squarks
727 if ( pp.ndigits() == 3 ) { return (pp(1) == q); } // Handle ~q qbar pairs
728 if ( pp.ndigits() == 4 ) { return (pp(1) == q || pp(2) == q); } // Ignore gluinos and squarks
729 if ( pp.ndigits() == 5 ) { return (pp(1) == q || pp(2) == q || pp(3) == q); } // Ignore gluinos and squarks
730 if ( pp.ndigits() > 5 ) { pp = pp.shift(1); } // Drop gluinos and squarks
731 return hasQuark(pp, q); }
732 return false;
733}
static const int PROTON
Definition AtlasPID.h:124

◆ hasQuark() [2/3]

template<>
bool hasQuark ( const int & p,
const int & q )
inline

Definition at line 734 of file AtlasPID.h.

734{ auto value_digits = DecodedPID(p); return hasQuark(value_digits, q);}

◆ hasQuark() [3/3]

template<class T>
bool hasQuark ( const T & p,
const int & q )
inline

◆ hasSquark() [1/3]

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

Definition at line 611 of file AtlasPID.h.

611 {
612 auto pp = p.shift(1); return (
613 (isSquark(p) || isRHadron(p))
614 && pp.ndigits() != 2 // skip lepton and boson super-partners by vetoing ndigits==2
615 && pp(0) == q // After shifting, the first digit will always represent the squark in R-Hadron (and squark) PIDs
616 );
617}
bool isSquark(const T &p)
PDG rule 11d Fundamental supersymmetric particles are identified by adding a nonzero n to the particl...
Definition AtlasPID.h:458
bool isRHadron(const T &p)
Definition AtlasPID.h:603

◆ hasSquark() [2/3]

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

Definition at line 618 of file AtlasPID.h.

618{ auto value_digits = DecodedPID(p); return hasSquark(value_digits, q);}
bool hasSquark(const T &p, const int &q)
Definition AtlasPID.h:610

◆ hasSquark() [3/3]

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

Definition at line 610 of file AtlasPID.h.

610{ return hasSquark(p->pdg_id(), q); }

◆ hasStrange()

template<class T>
bool hasStrange ( const T & p)
inline

Definition at line 736 of file AtlasPID.h.

736{ return hasQuark(p,SQUARK); }
static const int SQUARK
Definition AtlasPID.h:66

◆ hasTop()

template<class T>
bool hasTop ( const T & p)
inline

Definition at line 739 of file AtlasPID.h.

739{ return hasQuark(p,TQUARK); }
static const int TQUARK
Definition AtlasPID.h:69

◆ isBaryon() [1/3]

template<>
bool isBaryon ( const DecodedPID & p)
inline

Definition at line 283 of file AtlasPID.h.

283 {
284 if (p.ndigits() < 4 ) return false;
285 if (p.max_digit(1,4) >= QUARK_LIMIT ) return false; // Ignore pdg_ids which would describe states including fourth generation quarks
286 if (p.min_digit(1,4) == 0) return false; // Ignore pdg_ids with zero for nq1, nq2, nq3
287 if (p.ndigits() == 4 && (p.last() == 2 || p.last() == 4|| p.last() == 6|| p.last() == 8) ) return true;
288
289 if (p.ndigits() == 5 && p(0) == 1 && (p.last() == 2 || p.last() == 4) ) return true;
290 if (p.ndigits() == 5 && p(0) == 3 && (p.last() == 2 || p.last() == 4) ) return true;
291
292 if (p.ndigits() == 6 ) {
293 if (p(0) == 1 && p(1) == 0 && p.last() == 2 ) return true;
294 if (p(0) == 1 && p(1) == 0 && p.last() == 4 ) return true;
295 if (p(0) == 1 && p(1) == 0 && p.last() == 6 ) return true;
296 if (p(0) == 1 && p(1) == 1 && p.last() == 2 ) return true;
297 if (p(0) == 1 && p(1) == 2 && p.last() == 4 ) return true;
298
299 if (p(0) == 2 && p(1) == 0 && p.last() == 2 ) return true;
300 if (p(0) == 2 && p(1) == 0 && p.last() == 4 ) return true;
301 if (p(0) == 2 && p(1) == 0 && p.last() == 6 ) return true;
302 if (p(0) == 2 && p(1) == 0 && p.last() == 8 ) return true;
303 if (p(0) == 2 && p(1) == 1 && p.last() == 2 ) return true;
304 }
305
306 if (p.ndigits() == 5 ) {
307 if (p(0) == 2 && p.last() == 2 ) return true;
308 if (p(0) == 2 && p.last() == 4 ) return true;
309 if (p(0) == 2 && p.last() == 6 ) return true;
310 if (p(0) == 5 && p.last() == 2 ) return true;
311 if (p(0) == 1 && p.last() == 6 ) return true;
312 if (p(0) == 4 && p.last() == 2 ) return true;
313 }
314 return false;
315}
static const int QUARK_LIMIT
Definition AtlasPID.h:72

◆ isBaryon() [2/3]

template<>
bool isBaryon ( const int & p)
inline

Definition at line 316 of file AtlasPID.h.

316{ auto value_digits = DecodedPID(p); return isBaryon(value_digits);}

◆ isBaryon() [3/3]

template<class T>
bool isBaryon ( const T & p)
inline

Table 43.2 APID: states with fourth generation quarks are not baryons.

Definition at line 282 of file AtlasPID.h.

282{return isBaryon(p->pdg_id());}

◆ isBBbarMeson() [1/3]

template<>
bool isBBbarMeson ( const DecodedPID & p)
inline

Definition at line 927 of file AtlasPID.h.

927{ return leadingQuark(p) == BQUARK && isMeson(p) && (*(p.second.rbegin()+2)) == BQUARK && (*(p.second.rbegin()+1)) == BQUARK; }
int leadingQuark(const T &p)
Definition AtlasPID.h:889

◆ isBBbarMeson() [2/3]

template<>
bool isBBbarMeson ( const int & p)
inline

Definition at line 928 of file AtlasPID.h.

928{ return isBBbarMeson(DecodedPID(p)); }
bool isBBbarMeson(const T &p)
Definition AtlasPID.h:926

◆ isBBbarMeson() [3/3]

template<class T>
bool isBBbarMeson ( const T & p)
inline

Definition at line 926 of file AtlasPID.h.

926{ return isBBbarMeson(p->pdg_id());}

◆ isBoson() [1/3]

template<>
bool isBoson ( const DecodedPID & p)
inline

Definition at line 371 of file AtlasPID.h.

371{ return isBoson(p.pid()); }
bool isBoson(const T &p)
PDG rule 9: Two-digit numbers in the range 21–30 are provided for the Standard Model gauge and Higgs ...
Definition AtlasPID.h:369

◆ isBoson() [2/3]

template<>
bool isBoson ( const int & p)
inline

Definition at line 370 of file AtlasPID.h.

370{ auto sp = std::abs(p); return sp > 20 && sp < 41; }
static Double_t sp

◆ isBoson() [3/3]

template<class T>
bool isBoson ( const T & p)
inline

PDG rule 9: Two-digit numbers in the range 21–30 are provided for the Standard Model gauge and Higgs bosons.

PDG rule 11b: The graviton and the boson content of a two-Higgs-doublet scenario and of additional SU(2)×U(1) groups are found in the range 31–40.

Definition at line 369 of file AtlasPID.h.

369{return isBoson(p->pdg_id());}

◆ isBottom() [1/2]

template<>
bool isBottom ( const int & p)
inline

Definition at line 183 of file AtlasPID.h.

183{ return std::abs(p) == BQUARK;}

◆ isBottom() [2/2]

template<class T>
bool isBottom ( const T & p)
inline

Definition at line 182 of file AtlasPID.h.

182{return isBottom(p->pdg_id());}
bool isBottom(const T &p)
Definition AtlasPID.h:182

◆ isBottomBaryon()

template<class T>
bool isBottomBaryon ( const T & p)
inline

Definition at line 935 of file AtlasPID.h.

935{ return leadingQuark(p) == BQUARK && isBaryon(p); }

◆ isBottomHadron()

template<class T>
bool isBottomHadron ( const T & p)
inline

Definition at line 912 of file AtlasPID.h.

912{ return leadingQuark(p) == BQUARK && isHadron(p); }
bool isHadron(const T &p)
Definition AtlasPID.h:351

◆ isBottomMeson()

template<class T>
bool isBottomMeson ( const T & p)
inline

Definition at line 919 of file AtlasPID.h.

919{ return leadingQuark(p) == BQUARK && isMeson(p); }

◆ isBSM() [1/3]

template<>
bool isBSM ( const DecodedPID & p)
inline

Definition at line 847 of file AtlasPID.h.

847 {
848 if (p.pid() == GRAVITON || std::abs(p.pid()) == MAVTOP || p.pid() == DARKPHOTON) return true;
849 if (std::abs(p.pid()) > 16 && std::abs(p.pid()) < 19) return true;
850 if (std::abs(p.pid()) > 31 && std::abs(p.pid()) < 39) return true;
851 if (std::abs(p.pid()) > 39 && std::abs(p.pid()) < 81) return true;
852 if (std::abs(p.pid()) > 6 && std::abs(p.pid()) < 9) return true;
853 if (isSUSY(p)) return true;
854 if (isNeutrinoRH(p.pid())) return true;
855 if (isGenericMultichargedParticle(p)) return true;
856 if (isTechnicolor(p)) return true;
857 if (isExcited(p)) return true;
858 if (isKK(p)) return true;
859 if (isHiddenValley(p)) return true;
860 if (isMonopole(p)) return true;
861 if (isDM(p.pid())) return true;
862 return false;
863}
static const int GRAVITON
Definition AtlasPID.h:98
bool isExcited(const T &p)
PDG rule 11f Excited (composite) quarks and leptons are identified by setting n= 4 and nr= 0.
Definition AtlasPID.h:536
bool isTechnicolor(const T &p)
PDG rule 11e Technicolor states have n = 3, with technifermions treated like ordinary fermions.
Definition AtlasPID.h:524
bool isNeutrinoRH(const T &p)
PDG Rule 12: APID: Helper function for right-handed neutrino states These are generator defined PDG I...
Definition AtlasPID.h:420
static const int DARKPHOTON
PDG Ids for Mavtop madgraph UFO model found under DarkX.
Definition AtlasPID.h:106

◆ isBSM() [2/3]

template<>
bool isBSM ( const int & p)
inline

Definition at line 864 of file AtlasPID.h.

864 {
865 if (p == GRAVITON || std::abs(p) == MAVTOP || p == DARKPHOTON) return true;
866 if (std::abs(p) > 16 && std::abs(p) < 19) return true;
867 if (std::abs(p) > 31 && std::abs(p) < 38) return true;
868 if (std::abs(p) > 39 && std::abs(p) < 81) return true;
869 if (std::abs(p) > 6 && std::abs(p) < 9) return true;
870 auto value_digits = DecodedPID(p); return isBSM(value_digits);
871}
bool isBSM(const T &p)
APID: graviton and all Higgs extensions are BSM.
Definition AtlasPID.h:846

◆ isBSM() [3/3]

template<class T>
bool isBSM ( const T & p)
inline

APID: graviton and all Higgs extensions are BSM.

Definition at line 846 of file AtlasPID.h.

846{return isBSM(p->pdg_id());}

◆ isCCbarMeson() [1/3]

template<>
bool isCCbarMeson ( const DecodedPID & p)
inline

Definition at line 923 of file AtlasPID.h.

923{ return leadingQuark(p) == CQUARK && isMeson(p) && (*(p.second.rbegin()+2)) == CQUARK && (*(p.second.rbegin()+1)) == CQUARK; }

◆ isCCbarMeson() [2/3]

template<>
bool isCCbarMeson ( const int & p)
inline

Definition at line 924 of file AtlasPID.h.

924{ return isCCbarMeson(DecodedPID(p)); }
bool isCCbarMeson(const T &p)
Definition AtlasPID.h:922

◆ isCCbarMeson() [3/3]

template<class T>
bool isCCbarMeson ( const T & p)
inline

Definition at line 922 of file AtlasPID.h.

922{ return isCCbarMeson(p->pdg_id());}

◆ isCharged()

template<class T>
bool isCharged ( const T & p)
inline

Definition at line 1004 of file AtlasPID.h.

1004{ return charge3(p) != 0;}

◆ isCharm() [1/2]

template<>
bool isCharm ( const int & p)
inline

Definition at line 180 of file AtlasPID.h.

180{ return std::abs(p) == CQUARK;}

◆ isCharm() [2/2]

template<class T>
bool isCharm ( const T & p)
inline

Definition at line 179 of file AtlasPID.h.

179{return isCharm(p->pdg_id());}
bool isCharm(const T &p)
Definition AtlasPID.h:179

◆ isCharmBaryon()

template<class T>
bool isCharmBaryon ( const T & p)
inline

Definition at line 934 of file AtlasPID.h.

934{ return leadingQuark(p) == CQUARK && isBaryon(p); }

◆ isCharmHadron()

template<class T>
bool isCharmHadron ( const T & p)
inline

Definition at line 911 of file AtlasPID.h.

911{ return leadingQuark(p) == CQUARK && isHadron(p); }

◆ isCharmMeson()

template<class T>
bool isCharmMeson ( const T & p)
inline

Definition at line 918 of file AtlasPID.h.

918{ return leadingQuark(p) == CQUARK && isMeson(p); }

◆ isChLepton() [1/2]

template<>
bool isChLepton ( const int & p)
inline

Definition at line 200 of file AtlasPID.h.

200{ auto sp = std::abs(p); return sp >= ELECTRON && sp <= LPRIME && sp%2 == 1; }
static const int ELECTRON
Definition AtlasPID.h:74
static const int LPRIME
Definition AtlasPID.h:81

◆ isChLepton() [2/2]

template<class T>
bool isChLepton ( const T & p)
inline

APID: the fourth generation leptons are leptons.

Definition at line 199 of file AtlasPID.h.

199{return isChLepton(p->pdg_id());}
bool isChLepton(const T &p)
APID: the fourth generation leptons are leptons.
Definition AtlasPID.h:199

◆ isDiquark() [1/3]

template<>
bool isDiquark ( const DecodedPID & p)
inline

Definition at line 228 of file AtlasPID.h.

228 {
229 if ( p.ndigits() == 4 && p(0) >= p(1) && p(1) !=0 && p(2) == 0 && (p.last() == 1 || p.last() == 3)
230 && p.max_digit(2,4) < QUARK_LIMIT
231 ) return true;
232 return false;
233}

◆ isDiquark() [2/3]

template<>
bool isDiquark ( const int & p)
inline

Definition at line 234 of file AtlasPID.h.

234{ auto value_digits = DecodedPID(p); return isDiquark(value_digits);}

◆ isDiquark() [3/3]

template<class T>
bool isDiquark ( const T & p)
inline

PDG rule 4 Diquarks have 4-digit numbers with nq1 >= nq2 and nq3 = 0 APID: states with top quarks are diquarks APID: states with fourth generation quarks are not diquarks.

Definition at line 227 of file AtlasPID.h.

227{return isDiquark(p->pdg_id());}

◆ isDM() [1/2]

template<>
bool isDM ( const int & p)
inline

Definition at line 659 of file AtlasPID.h.

659 {
660 auto sp = std::abs(p);
661 auto value_digits = DecodedPID(p);
662 return (sp >= 51 && sp <= 60) || (value_digits.ndigits() == 7 && value_digits(0) == 5 && value_digits(1) == 9) || sp == DARKPHOTON; }

◆ isDM() [2/2]

template<class T>
bool isDM ( const T & p)
inline

PDG rule 11j: The nature of Dark Matter (DM) is not known, and therefore a definitive classificationis too early.

Candidates within specific scenarios are classified therein, such as 1000022 for the lightest neutralino. Generic fundamental states can be given temporary codes in the range 51 - 60, with 51, 52 and 53 reserved for spin 0, 1/2 and 1 ones (this could also be an axion state). Generic mediators of s-channel DM pair creation of annihilation can be given codes 54 and 55 for spin 0 or 1 ones. Separate antiparticles, with negativecodes, may or may not exist. More elaborate new scenarios should be constructed with n= 5 and nr = 9.

Definition at line 658 of file AtlasPID.h.

658{return isDM(p->pdg_id());}

◆ isElectron() [1/2]

template<>
bool isElectron ( const int & p)
inline

Definition at line 203 of file AtlasPID.h.

203{ return std::abs(p) == ELECTRON;}

◆ isElectron() [2/2]

template<class T>
bool isElectron ( const T & p)
inline

Definition at line 202 of file AtlasPID.h.

202{return isElectron(p->pdg_id());}
bool isElectron(const T &p)
Definition AtlasPID.h:202

◆ isEMInteracting() [1/2]

template<>
bool isEMInteracting ( const int & p)
inline

Definition at line 1101 of file AtlasPID.h.

1101{return (isPhoton(p) || isZ(p) || p == ZPRIME || p == ZDBLPRIME || std::abs(charge(p))>std::numeric_limits<double>::epsilon() || isMonopole(p));}
static const int ZDBLPRIME
Definition AtlasPID.h:92
static const int ZPRIME
Definition AtlasPID.h:91
double charge(const T &p)
Definition AtlasPID.h:997
bool isZ(const T &p)
Definition AtlasPID.h:379
bool isPhoton(const T &p)
Definition AtlasPID.h:376

◆ isEMInteracting() [2/2]

template<class T>
bool isEMInteracting ( const T & p)
inline

Definition at line 1100 of file AtlasPID.h.

1100{return isEMInteracting(p->pdg_id());}
bool isEMInteracting(const T &p)
Definition AtlasPID.h:1100

◆ isExcited() [1/3]

template<>
bool isExcited ( const DecodedPID & p)
inline

Definition at line 538 of file AtlasPID.h.

538 {
539 const auto& pp = (p.ndigits() == 7) ? p.shift(2) : DecodedPID(0);
540 return (p.ndigits() == 7 && (p(0) == 4 && p(1) == 0) &&
541 (isLepton(pp) || isQuark(pp)));
542}
bool isLepton(const T &p)
APID: the fourth generation leptons are leptons.
Definition AtlasPID.h:189

◆ isExcited() [2/3]

template<>
bool isExcited ( const int & p)
inline

Definition at line 543 of file AtlasPID.h.

543{ auto value_digits = DecodedPID(p); return isExcited(value_digits);}

◆ isExcited() [3/3]

template<class T>
bool isExcited ( const T & p)
inline

PDG rule 11f Excited (composite) quarks and leptons are identified by setting n= 4 and nr= 0.

Definition at line 536 of file AtlasPID.h.

536{return isExcited(p->pdg_id());}

◆ isFourthGeneration() [1/2]

template<>
bool isFourthGeneration ( const int & p)
inline

Definition at line 221 of file AtlasPID.h.

221{return std::abs(p) == BPRIME || std::abs(p) == TPRIME || std::abs(p) == LPRIME || std::abs(p) == NUPRIME;}
static const int BPRIME
Definition AtlasPID.h:70
static const int NUPRIME
Definition AtlasPID.h:82
static const int TPRIME
Definition AtlasPID.h:71

◆ isFourthGeneration() [2/2]

template<class T>
bool isFourthGeneration ( const T & p)
inline

Is this a 4th generation fermion?

APID: 4th generation fermions are not standard model particles

Definition at line 220 of file AtlasPID.h.

220{return isFourthGeneration(p->pdg_id());}
bool isFourthGeneration(const T &p)
Is this a 4th generation fermion?
Definition AtlasPID.h:220

◆ isGaugino() [1/3]

template<>
bool isGaugino ( const DecodedPID & p)
inline

Definition at line 505 of file AtlasPID.h.

505 {
506 auto pp = p.shift(1); return (p.ndigits() == 7 && p(0) == 1 && isBoson(pp.pid()));
507}

◆ isGaugino() [2/3]

template<>
bool isGaugino ( const int & p)
inline

Definition at line 508 of file AtlasPID.h.

508{ auto value_digits = DecodedPID(p); return isGaugino(value_digits);}
bool isGaugino(const T &p)
Definition AtlasPID.h:504

◆ isGaugino() [3/3]

template<class T>
bool isGaugino ( const T & p)
inline

Definition at line 504 of file AtlasPID.h.

504{ return isGaugino(p->pdg_id()); }

◆ isGeantino() [1/2]

template<>
bool isGeantino ( const int & p)
inline

Definition at line 438 of file AtlasPID.h.

438{ return (std::abs(p) == GEANTINO0 || std::abs(p) == GEANTINOPLUS);}

◆ isGeantino() [2/2]

template<class T>
bool isGeantino ( const T & p)
inline

Definition at line 437 of file AtlasPID.h.

437{return isGeantino(p->pdg_id());}
bool isGeantino(const T &p)
Definition AtlasPID.h:437

◆ isGenericMultichargedParticle() [1/3]

template<>
bool isGenericMultichargedParticle ( const DecodedPID & p)
inline

Definition at line 685 of file AtlasPID.h.

685{return (p.ndigits() == 8 && (p(0) == 1 || p(0) == 2) && p(1) == 0 && p(2) == 0 && p(7) == 0);}

◆ isGenericMultichargedParticle() [2/3]

template<>
bool isGenericMultichargedParticle ( const int & p)
inline

Definition at line 686 of file AtlasPID.h.

686{ auto value_digits = DecodedPID(p); return isGenericMultichargedParticle(value_digits);}

◆ isGenericMultichargedParticle() [3/3]

template<class T>
bool isGenericMultichargedParticle ( const T & p)
inline

In addition, there is a need to identify ”Q-ball” and similar very exotic (multi-charged) particles which may have large, non-integer charge.

These particles are assigned the ad-hoc numbering +/-100XXXY0, where the charge is XXX.Y. or +/-200XXYY0, where the charge is XX/YY. The case of +/-200XXYY0 is legacy, see https://gitlab.cern.ch/atlas/athena/-/merge_requests/25862 Note that no other quantum numbers besides the charge are considered for these generic multi-charged particles (e.g. isSUSY() is false for them). Such a model was used in previous Run-1 (1301.5272,1504.04188) and Run-2 (1812.03673,2303.13613) ATLAS searches.

Definition at line 684 of file AtlasPID.h.

684{return isGenericMultichargedParticle(p->pdg_id());}

◆ isGenSpecific() [1/2]

template<>
bool isGenSpecific ( const int & p)
inline

Definition at line 426 of file AtlasPID.h.

426 {
427 int ap = std::abs(p);
428 if (ap >= 81 && ap <= 100) return true;
429 if (ap >= 901 && ap <= 930) return true;
430 if (ap >= 998 && ap <= 999) return true;
431 if (ap >= 1901 && ap <= 1930) return true;
432 if (ap >= 2901 && ap <= 2930) return true;
433 if (ap >= 3901 && ap <= 3930) return true;
434 return false;
435}

◆ isGenSpecific() [2/2]

template<class T>
bool isGenSpecific ( const T & p)
inline

Main Table for MC internal use 81–100,901–930,998-999,1901–1930,2901–2930, and 3901–3930.

Definition at line 425 of file AtlasPID.h.

425{return isGenSpecific(p->pdg_id());}
bool isGenSpecific(const T &p)
Main Table for MC internal use 81–100,901–930,998-999,1901–1930,2901–2930, and 3901–3930.
Definition AtlasPID.h:425

◆ isGlueball() [1/3]

template<>
bool isGlueball ( const DecodedPID & p)
inline

Definition at line 442 of file AtlasPID.h.

442 {
443 if (p.ndigits() > 4) return false; // APID avoid classifying R-Glueballs as SM Glueballs
444 return
445 ( ( p.ndigits() == 3 && p(0) == COMPOSITEGLUON && p(1) == COMPOSITEGLUON && (p.last() == 1 || p.last() == 5) ) ||
446 ( p.ndigits() == 4 && p(0) == COMPOSITEGLUON && p(1) == COMPOSITEGLUON && p(2) == COMPOSITEGLUON && (p.last() == 3 || p.last() == 7) ) );
447}

◆ isGlueball() [2/3]

template<>
bool isGlueball ( const int & p)
inline

Definition at line 448 of file AtlasPID.h.

448{ auto value_digits = DecodedPID(p); return isGlueball(value_digits); }
bool isGlueball(const T &p)
APID: Definition of Glueballs: SM glueballs 99X (X=1,5), 999Y (Y=3,7)
Definition AtlasPID.h:441

◆ isGlueball() [3/3]

template<class T>
bool isGlueball ( const T & p)
inline

APID: Definition of Glueballs: SM glueballs 99X (X=1,5), 999Y (Y=3,7)

Definition at line 441 of file AtlasPID.h.

441{ return isGlueball(p->pdg_id()); }

◆ isGluon() [1/2]

template<>
bool isGluon ( const int & p)
inline

Definition at line 374 of file AtlasPID.h.

374{ return p == GLUON; }
static const int GLUON
Definition AtlasPID.h:84

◆ isGluon() [2/2]

template<class T>
bool isGluon ( const T & p)
inline

Definition at line 373 of file AtlasPID.h.

373{return isGluon(p->pdg_id());}
bool isGluon(const T &p)
Definition AtlasPID.h:373

◆ isGraviton() [1/2]

template<>
bool isGraviton ( const int & p)
inline

Definition at line 398 of file AtlasPID.h.

398{ return p == GRAVITON; }

◆ isGraviton() [2/2]

template<class T>
bool isGraviton ( const T & p)
inline

Definition at line 397 of file AtlasPID.h.

397{return isGraviton(p->pdg_id());}
bool isGraviton(const T &p)
Definition AtlasPID.h:397

◆ isHadron() [1/3]

template<>
bool isHadron ( const DecodedPID & p)
inline

Definition at line 352 of file AtlasPID.h.

352{ return isMeson(p) || isBaryon(p) || isTetraquark(p) || isPentaquark(p); }

◆ isHadron() [2/3]

template<>
bool isHadron ( const int & p)
inline

Definition at line 353 of file AtlasPID.h.

353{ auto value_digits = DecodedPID(p); return isHadron(value_digits);}

◆ isHadron() [3/3]

template<class T>
bool isHadron ( const T & p)
inline

Definition at line 351 of file AtlasPID.h.

351{return isHadron(p->pdg_id());}

◆ isHeavyBaryon()

template<class T>
bool isHeavyBaryon ( const T & p)
inline

Definition at line 932 of file AtlasPID.h.

932{ auto lq = leadingQuark(p); return (lq == CQUARK || lq == BQUARK || lq == TQUARK) && isBaryon(p); }

◆ isHeavyBoson() [1/2]

template<>
bool isHeavyBoson ( const int & p)
inline

Definition at line 387 of file AtlasPID.h.

387{ return p == ZPRIME || p == ZDBLPRIME || std::abs(p) == WPLUSPRIME; }
static const int WPLUSPRIME
Definition AtlasPID.h:93

◆ isHeavyBoson() [2/2]

template<class T>
bool isHeavyBoson ( const T & p)
inline

APID: Additional "Heavy"/"prime" versions of W and Z bosons (Used in MCTruthClassifier)

Definition at line 386 of file AtlasPID.h.

386{return isHeavyBoson(p->pdg_id());}
bool isHeavyBoson(const T &p)
APID: Additional "Heavy"/"prime" versions of W and Z bosons (Used in MCTruthClassifier)
Definition AtlasPID.h:386

◆ isHeavyHadron()

template<class T>
bool isHeavyHadron ( const T & p)
inline

Definition at line 909 of file AtlasPID.h.

909{ auto lq = leadingQuark(p); return (lq == CQUARK || lq == BQUARK || lq == TQUARK ) && isHadron(p); }

◆ isHeavyMeson()

template<class T>
bool isHeavyMeson ( const T & p)
inline

Definition at line 916 of file AtlasPID.h.

916{ auto lq = leadingQuark(p); return (lq == CQUARK || lq == BQUARK || lq == TQUARK) && isMeson(p); }

◆ isHiddenValley() [1/3]

template<>
bool isHiddenValley ( const DecodedPID & p)
inline

Definition at line 670 of file AtlasPID.h.

670 {
671 const auto& pp = (p.ndigits() == 7) ? p.shift(2) : DecodedPID(0);
672 return (p.ndigits() == 7 && p(0) == 4 && p(1) == 9 &&
673 (isQuark(pp) || isLepton(pp) || isBoson(pp) || isGlueball(pp) ||
674 isDiquark(pp) || isHadron(pp)));
675}

◆ isHiddenValley() [2/3]

template<>
bool isHiddenValley ( const int & p)
inline

Definition at line 676 of file AtlasPID.h.

676{ auto value_digits = DecodedPID(p); return isHiddenValley(value_digits);}

◆ isHiddenValley() [3/3]

template<class T>
bool isHiddenValley ( const T & p)
inline

PDG rule 11k Hidden Valley particles have n = 4 and n_r = 9, and trailing numbers in agreement with their nearest-analog standard particles, as far as possible.

Thus 4900021 is the gauge boson g_v of a confining gauge field, 490000n_{q_v} and 490001n_{l_v} fundamental constituents charged or not under this, 4900022 is the γ_v of a non-confining field, and 4900n_{q_{v1}}n_{q_{v2}}n_J a Hidden Valley meson.

Definition at line 668 of file AtlasPID.h.

668{return isHiddenValley(p->pdg_id());}

◆ isHiggs() [1/2]

template<>
bool isHiggs ( const int & p)
inline

Definition at line 391 of file AtlasPID.h.

391{ return p == HIGGSBOSON; }
static const int HIGGSBOSON
Definition AtlasPID.h:90

◆ isHiggs() [2/2]

template<class T>
bool isHiggs ( const T & p)
inline

APID: HIGGS boson is only one particle.

Definition at line 390 of file AtlasPID.h.

390{return isHiggs(p->pdg_id());}
bool isHiggs(const T &p)
APID: HIGGS boson is only one particle.
Definition AtlasPID.h:390

◆ isKK() [1/3]

template<>
bool isKK ( const DecodedPID & p)
inline

Definition at line 636 of file AtlasPID.h.

636{return (p.ndigits() == 7 && (p(0) == 5 || p(0) == 6 ) && (p(1) != 9) );}

◆ isKK() [2/3]

template<>
bool isKK ( const int & p)
inline

Definition at line 637 of file AtlasPID.h.

637{ auto value_digits = DecodedPID(p); return isKK(value_digits);}

◆ isKK() [3/3]

template<class T>
bool isKK ( const T & p)
inline

PDG rule 11h A black hole in models with extra dimensions has code 5000040.

Kaluza-Klein excitations in models with extra dimensions have n = 5 or n = 6, to distinguish excitations of left-or right-handed fermions or, in case of mixing, the lighter or heavier state (cf. 11d). The non zero nr digit gives the radial excitation number, in scenarios where the level spacing allows these to be distinguished. Should the model also contain supersymmetry, excited SUSY states would be denoted by a nn_r > 0, with n = 1 or 2 as usual. Should some colored states be long-lived enough that hadrons would form around them, the coding strategy of 11g applies, with the initial two nnr digits preserved in the combined code.

Definition at line 635 of file AtlasPID.h.

635{return isKK(p->pdg_id());}

◆ isLepton() [1/3]

template<>
bool isLepton ( const DecodedPID & p)
inline

Definition at line 191 of file AtlasPID.h.

191{ return isLepton(p.pid()); }

◆ isLepton() [2/3]

template<>
bool isLepton ( const int & p)
inline

Definition at line 190 of file AtlasPID.h.

190{ auto sp = std::abs(p); return sp >= ELECTRON && sp <= NUPRIME; }

◆ isLepton() [3/3]

template<class T>
bool isLepton ( const T & p)
inline

APID: the fourth generation leptons are leptons.

Definition at line 189 of file AtlasPID.h.

189{return isLepton(p->pdg_id());}

◆ isLeptoQuark() [1/2]

template<>
bool isLeptoQuark ( const int & p)
inline

Definition at line 409 of file AtlasPID.h.

409{ return std::abs(p) == LEPTOQUARK; }
static const int LEPTOQUARK
Definition AtlasPID.h:100

◆ isLeptoQuark() [2/2]

template<class T>
bool isLeptoQuark ( const T & p)
inline

PDG rule 11c: “One-of-a-kind” exotic particles are assigned numbers in the range 41–80.

The subrange 61-80 can be used for new heavier fermions in generic models, where partners to the SM fermions would have codes offset by 60. If required, however, other assignments could be made.

Definition at line 408 of file AtlasPID.h.

408{return isLeptoQuark(p->pdg_id());}
bool isLeptoQuark(const T &p)
PDG rule 11c: “One-of-a-kind” exotic particles are assigned numbers in the range 41–80.
Definition AtlasPID.h:408

◆ isLightBaryon()

template<class T>
bool isLightBaryon ( const T & p)
inline

Definition at line 931 of file AtlasPID.h.

931{ auto lq = leadingQuark(p); return (lq == DQUARK || lq == UQUARK||lq == SQUARK) && isBaryon(p); }
static const int DQUARK
Definition AtlasPID.h:64
static const int UQUARK
Definition AtlasPID.h:65

◆ isLightHadron()

template<class T>
bool isLightHadron ( const T & p)
inline

Definition at line 908 of file AtlasPID.h.

908{ auto lq = leadingQuark(p); return (lq == DQUARK || lq == UQUARK||lq == SQUARK) && isHadron(p); }

◆ isLightMeson()

template<class T>
bool isLightMeson ( const T & p)
inline

Definition at line 915 of file AtlasPID.h.

915{ auto lq = leadingQuark(p); return (lq == DQUARK || lq == UQUARK||lq == SQUARK) && isMeson(p); }

◆ isMeson() [1/3]

template<>
bool isMeson ( const DecodedPID & p)
inline

Definition at line 245 of file AtlasPID.h.

245 {
246 if (p.ndigits() < 3 ) return false;
247 if (p.ndigits() == 7 && (p(0) == 1 || p(0) == 2)) return false; // APID don't match SUSY particles
248 if (std::abs(p.pid()) == K0S) return true;
249 if (std::abs(p.pid()) == K0L) return true;
250 if (std::abs(p.pid()) == K0) return true;
251 if (p.last() % 2 != 1 ) return false;
252 if (p.max_digit(1,3) >= QUARK_LIMIT ) return false; // Ignore pdg_ids which would describe states including fourth generation quarks
253 if (p.min_digit(1,3) == 0 ) return false;
254 if (*(p.second.rbegin() + 2) < *(p.second.rbegin() + 1) ) return false; // Quark ordering (nq2 >= nq3)
255 if (*(p.second.rbegin() + 2) == *(p.second.rbegin() + 1) && p.pid() < 0 ) return false; // Illegal antiparticle check (nq2 == nq3)
256 if (p.ndigits() == 3 ) return true;
257 if (*(p.second.rbegin() + 3) != 0 ) return false; // Only two quarks! (nq1 == 0)
258 if (p.ndigits() == 5 && p(0) == 1 ) return true;
259 if (p.ndigits() == 5 && p(0) == 2 && p.last() > 1 ) return true;
260 if (p.ndigits() == 5 && p(0) == 3 && p.last() > 1 ) return true;
261 if (p.ndigits() == 6 && p.last() % 2 == 1 ) return true;
262 if (p.ndigits() == 7 && p(0) == 9 && p(1) == 0 ) return true;
263
264 return false;
265}
static const int K0L
Definition AtlasPID.h:112
static const int K0S
Definition AtlasPID.h:114

◆ isMeson() [2/3]

template<>
bool isMeson ( const int & p)
inline

Definition at line 266 of file AtlasPID.h.

266{ auto value_digits = DecodedPID(p); return isMeson(value_digits);}

◆ isMeson() [3/3]

template<class T>
bool isMeson ( const T & p)
inline

Table 43.1 PDG rule 5a: The numbers specifying the meson’s quark content conform to the convention nq1= 0 and nq2 >= nq3.

The special case K0L is the sole exception to this rule. PDG rule 5C: The special numbers 310 and 130 are given to the K0S and K0L respectively. APID: The special code K0 is used when a generator uses K0S/K0L APID: states with fourth generation quarks are not mesons

Definition at line 244 of file AtlasPID.h.

244{return isMeson(p->pdg_id());}

◆ isMonopole() [1/3]

template<>
bool isMonopole ( const DecodedPID & p)
inline

Definition at line 646 of file AtlasPID.h.

646{return (p.ndigits() == 7 && p(0) == 4 && p(1) == 1 && (p(2) == 1 || p(2) == 2 ) && p(6) == 0);}

◆ isMonopole() [2/3]

template<>
bool isMonopole ( const int & p)
inline

Definition at line 647 of file AtlasPID.h.

647{ auto value_digits = DecodedPID(p); return isMonopole(value_digits);}

◆ isMonopole() [3/3]

template<class T>
bool isMonopole ( const T & p)
inline

PDG rule 11i Magnetic monopoles and dyons are assumed to have one unit of Dirac monopole charge and a variable integer number nq1nq2 nq3 units of electric charge.

Codes 411nq1nq2 nq3 0 are then used when the magnetic and electrical charge sign agree and 412nq1nq2 nq3 0 when they disagree, with the overall sign of the particle set by the magnetic charge. For now no spin information is provided.

Definition at line 645 of file AtlasPID.h.

645{return isMonopole(p->pdg_id());}

◆ isMSSMHiggs() [1/2]

template<>
bool isMSSMHiggs ( const int & p)
inline

Definition at line 395 of file AtlasPID.h.

395{ return p == HIGGS2 || p == HIGGS3 || std::abs(p) == HIGGSPLUS; }
static const int HIGGSPLUS
Definition AtlasPID.h:96
static const int HIGGS3
Definition AtlasPID.h:95
static const int HIGGS2
Definition AtlasPID.h:94

◆ isMSSMHiggs() [2/2]

template<class T>
bool isMSSMHiggs ( const T & p)
inline

APID: Additional Higgs bosons for MSSM (Used in MCTruthClassifier)

Definition at line 394 of file AtlasPID.h.

394{return isMSSMHiggs(p->pdg_id());}
bool isMSSMHiggs(const T &p)
APID: Additional Higgs bosons for MSSM (Used in MCTruthClassifier)
Definition AtlasPID.h:394

◆ isMuon() [1/2]

template<>
bool isMuon ( const int & p)
inline

Definition at line 206 of file AtlasPID.h.

206{ return std::abs(p) == MUON;}
xAOD::Muon MUON
D3PD INCLUDES.

◆ isMuon() [2/2]

template<class T>
bool isMuon ( const T & p)
inline

Definition at line 205 of file AtlasPID.h.

205{return isMuon(p->pdg_id());}
bool isMuon(const T &p)
Definition AtlasPID.h:205

◆ isNeutral() [1/3]

template<>
bool isNeutral ( const DecodedPID & p)
inline

Definition at line 1086 of file AtlasPID.h.

1086{ return p.pid() != 0 && charge3(p) == 0;}

◆ isNeutral() [2/3]

template<>
bool isNeutral ( const int & p)
inline

Definition at line 1087 of file AtlasPID.h.

1087{ auto value_digits = DecodedPID(p); return isNeutral(value_digits);}
bool isNeutral(const T &p)
Definition AtlasPID.h:1085

◆ isNeutral() [3/3]

template<class T>
bool isNeutral ( const T & p)
inline

Definition at line 1085 of file AtlasPID.h.

1085{ return p->pdg_id() != 0 && charge3(p) == 0;}

◆ isNeutrino() [1/2]

template<>
bool isNeutrino ( const int & p)
inline

Definition at line 213 of file AtlasPID.h.

213{ auto sp = std::abs(p); return sp == NU_E || sp == NU_MU || sp == NU_TAU || sp == NUPRIME; }
static const int NU_E
Definition AtlasPID.h:76
static const int NU_MU
Definition AtlasPID.h:78
static const int NU_TAU
Definition AtlasPID.h:80

◆ isNeutrino() [2/2]

template<class T>
bool isNeutrino ( const T & p)
inline

APID: the fourth generation neutrinos are neutrinos.

Definition at line 212 of file AtlasPID.h.

212{return isNeutrino(p->pdg_id());}
bool isNeutrino(const T &p)
APID: the fourth generation neutrinos are neutrinos.
Definition AtlasPID.h:212

◆ isNeutrinoRH() [1/2]

template<>
bool isNeutrinoRH ( const int & p)
inline

Definition at line 421 of file AtlasPID.h.

421{ return (std::abs(p) == RH_NU_E || std::abs(p) == RH_NU_MU|| std::abs(p) == RH_NU_TAU);}
static const int RH_NU_MU
Definition AtlasPID.h:137
static const int RH_NU_E
PDG Rule 12: Generator defined PDG ID values for right handed neutrinos and corresponding W+ boson fr...
Definition AtlasPID.h:136
static const int RH_NU_TAU
Definition AtlasPID.h:138

◆ isNeutrinoRH() [2/2]

template<class T>
bool isNeutrinoRH ( const T & p)
inline

PDG Rule 12: APID: Helper function for right-handed neutrino states These are generator defined PDG ID values for right handed neutrinos.

(Defined for some MadGraph+Pythia8 samples and referenced in MCTruthClassifierGen.cxx)

Definition at line 420 of file AtlasPID.h.

420{return isNeutrinoRH(p->pdg_id());}

◆ isNucleus() [1/3]

template<>
bool isNucleus ( const DecodedPID & p)
inline

Definition at line 703 of file AtlasPID.h.

703 {
704 if (std::abs(p.pid()) == PROTON) return true;
705 if (p.ndigits() != 10) return false;
706 // charge should always be less than or equal to baryon number
707 // the following line is A >= Z
708 const int A = p(8) + 10*p(7) + 100*p(6);
709 const int Z = p(5) + 10*p(4) + 100*p(3);
710 return ( A >= Z && p(0) == 1 && p(1) == 0 );
711}

◆ isNucleus() [2/3]

template<>
bool isNucleus ( const int & p)
inline

Definition at line 712 of file AtlasPID.h.

712{ auto value_digits = DecodedPID(p); return isNucleus(value_digits);}

◆ isNucleus() [3/3]

template<class T>
bool isNucleus ( const T & p)
inline

PDG rule 16 Nuclear codes are given as 10-digit numbers ±10LZZZAAAI.

For a (hyper)nucleus consisting of n_p protons, n_n neutrons and n_Λ Λ’s: A = n_p + n_n + n_Λ gives the total baryon number, Z = n_p gives the total charge, L = n_Λ gives the total number of strange quarks. I gives the isomer level, with I= 0 corresponding to the ground state and I > 0 to excitations, see [http://www.nndc.bnl.gov/amdc/web/nubase en.html], where states denoted m, n, p ,q translate to I= 1–4. As examples, the deuteron is 1000010020 and 235U is 1000922350. To avoid ambiguities, nuclear codes should not be applied to a single hadron, like p, n or Λ^0, where quark-contents-based codes already exist.

Definition at line 702 of file AtlasPID.h.

702{return isNucleus(p->pdg_id());}

◆ isParton()

template<class T>
bool isParton ( const T & p)
inline

Definition at line 1103 of file AtlasPID.h.

1103{ return isQuark(p)||isGluon(p);}

◆ isPentaquark() [1/3]

template<>
bool isPentaquark ( const DecodedPID & p)
inline

Definition at line 343 of file AtlasPID.h.

343 {
344 return (p.ndigits() == 9 && p(0) == 1 &&
345 p.max_digit(1,6) < QUARK_LIMIT && p.min_digit(1,6) > 0 && // ignore 4th generation (anti-)quarks
346 ( p(3) >= p(4) && p(4) >= p(5) && p(5) >= p(6)) );
347}

◆ isPentaquark() [2/3]

template<>
bool isPentaquark ( const int & p)
inline

Definition at line 348 of file AtlasPID.h.

348{ auto value_digits = DecodedPID(p); return isPentaquark(value_digits);}

◆ isPentaquark() [3/3]

template<class T>
bool isPentaquark ( const T & p)
inline

PDG rule 15 The 9-digit penta-quark codes are ±1nrnLnq1nq2nq3nq4nq5nJ, sorted such that nq1≥nq2≥nq3≥nq4.

In the particle the first four are quarks and the fifth an antiquark while the opposite holds in the antiparticle, which is given with a negative sign. The nr, nL, and nJ numbers have the same meaning as for ordinary hadrons.

Definition at line 342 of file AtlasPID.h.

342{return isPentaquark(p->pdg_id());}

◆ isPhoton() [1/2]

template<>
bool isPhoton ( const int & p)
inline

Definition at line 377 of file AtlasPID.h.

377{ return p == PHOTON; }
static const int PHOTON
Definition AtlasPID.h:87

◆ isPhoton() [2/2]

template<class T>
bool isPhoton ( const T & p)
inline

Definition at line 376 of file AtlasPID.h.

376{return isPhoton(p->pdg_id());}

◆ isPythia8Specific() [1/3]

template<>
bool isPythia8Specific ( const DecodedPID & p)
inline

Definition at line 412 of file AtlasPID.h.

412{ return (p.ndigits() == 7 && p(0) == 9 && p(1) == 9);}

◆ isPythia8Specific() [2/3]

template<>
bool isPythia8Specific ( const int & p)
inline

Definition at line 413 of file AtlasPID.h.

413{ auto value_digits = DecodedPID(p); return isPythia8Specific(value_digits);}
bool isPythia8Specific(const T &p)
Definition AtlasPID.h:411

◆ isPythia8Specific() [3/3]

template<class T>
bool isPythia8Specific ( const T & p)
inline

Definition at line 411 of file AtlasPID.h.

411{return isPythia8Specific(p->pdg_id());}

◆ isQuark() [1/3]

template<>
bool isQuark ( const DecodedPID & p)
inline

Definition at line 169 of file AtlasPID.h.

169{ return isQuark(p.pid()); }

◆ isQuark() [2/3]

template<>
bool isQuark ( const int & p)
inline

Definition at line 168 of file AtlasPID.h.

168{ return p != 0 && (std::abs(p) <= TPRIME || std::abs(p) == MAVTOP);}

◆ isQuark() [3/3]

template<class T>
bool isQuark ( const T & p)
inline

PDG rule 2: Quarks and leptons are numbered consecutively starting from 1 and 11 respectively; to do this they are first ordered by family and within families by weak isospin.

APID: the fourth generation quarks are quarks.

Definition at line 167 of file AtlasPID.h.

167{return isQuark(p->pdg_id());}

◆ isQuarkonium() [1/3]

template<>
bool isQuarkonium ( const DecodedPID & p)
inline

Definition at line 274 of file AtlasPID.h.

274 {
275 if (!isMeson(p)) return false; //< all quarkonia are mesons
276 return (*(p.second.rbegin() + 2) > SQUARK && p.last() > 0 && *(p.second.rbegin() + 1) == *(p.second.rbegin() + 2));
277}

◆ isQuarkonium() [2/3]

template<>
bool isQuarkonium ( const int & p)
inline

Definition at line 278 of file AtlasPID.h.

278{ auto value_digits = DecodedPID(p); return isQuarkonium(value_digits);}
bool isQuarkonium(const T &p)
Is this a heavy-flavour quarkonium meson?
Definition AtlasPID.h:273

◆ isQuarkonium() [3/3]

template<class T>
bool isQuarkonium ( const T & p)
inline

Is this a heavy-flavour quarkonium meson?

Note
Original by LHCb in Rivet analysis LHCB_2016_I1504058
phi = s,sbar is not considered quarkonium

Definition at line 273 of file AtlasPID.h.

273{return isQuarkonium(p->pdg_id());}

◆ isRBaryon() [1/3]

template<>
bool isRBaryon ( const DecodedPID & p)
inline

Definition at line 590 of file AtlasPID.h.

590 {
591 if (!(p.ndigits() == 7 && (p(0) == 1 || p(0) == 2))) return false;
592 auto pp = p.shift(1);
593 return (
594 // Handle ~gluino-quark-quark-quark states
595 (pp.ndigits() == 5 && p(0) == 1 && pp(0) == COMPOSITEGLUON && pp.min_digit(1,4) > 0 && pp.max_digit(1,4) < QUARK_LIMIT && pp(2) <= pp(1) && pp(3) <= pp(2) && (pp.last() == 2 || pp.last() == 4)) ||
596 // Handle squark-quark-quark states (previously called Sbaryons)
597 (pp.ndigits() == 4 && pp.min_digit(1,4) > 0 && pp.max_digit(1,4) < QUARK_LIMIT && pp(1) <= pp(0) && pp(2) <= pp(1) && (pp.last() == 1 || pp.last() == 3))
598 );
599}

◆ isRBaryon() [2/3]

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

Definition at line 600 of file AtlasPID.h.

600{ auto value_digits = DecodedPID(p); return isRBaryon(value_digits); }
bool isRBaryon(const T &p)
Definition AtlasPID.h:589

◆ isRBaryon() [3/3]

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

Definition at line 589 of file AtlasPID.h.

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

◆ isResonance()

template<class T>
bool isResonance ( const T & p)
inline

Definition at line 400 of file AtlasPID.h.

400{ return isZ(p) || isW(p) || isHiggs(p) || isTop(p); } // APID: not including t' (pdg_id=8), Z', Z'' and W'+ or BSM Higgs bosons
bool isW(const T &p)
Definition AtlasPID.h:382
bool isTop(const T &p)
Definition AtlasPID.h:185

◆ isRGlueball() [1/3]

template<>
bool isRGlueball ( const DecodedPID & p)
inline

Definition at line 563 of file AtlasPID.h.

563 {
564 if (p.ndigits() != 7 || p(0) != 1) return false;
565 auto pp = p.shift(1);
566 return
567 ( ( pp.ndigits() == 3 && pp(0) == COMPOSITEGLUON && pp(1) == COMPOSITEGLUON && (pp.last() == 1 || pp.last() == 3) ) ||
568 ( pp.ndigits() == 4 && pp(0) == COMPOSITEGLUON && pp(1) == COMPOSITEGLUON && pp(2) == COMPOSITEGLUON && (pp.last() == 1 || pp.last() == 5) ) );
569}

◆ isRGlueball() [2/3]

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

Definition at line 570 of file AtlasPID.h.

570{ auto value_digits = DecodedPID(p); return isRGlueball(value_digits); }
bool isRGlueball(const T &p)
PDG rule 11g: Within several scenarios of new physics, it is possible to have colored particles suffici...
Definition AtlasPID.h:562

◆ isRGlueball() [3/3]

template<class T>
bool 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: Definition of R-Glueballs: 100099X (X=1,3), 100999Y (Y=1,5) APID: NB In the current numbering scheme, some states with 2 gluinos + gluon or 2 gluons + gluino could have degenerate PDG_IDs.

Definition at line 562 of file AtlasPID.h.

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

◆ isRHadron() [1/3]

template<>
bool isRHadron ( const DecodedPID & p)
inline

Definition at line 604 of file AtlasPID.h.

604 {
605 return (isRBaryon(p) || isRMeson(p) || isRGlueball(p));
606}
bool isRMeson(const T &p)
Definition AtlasPID.h:574

◆ isRHadron() [2/3]

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

Definition at line 607 of file AtlasPID.h.

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

◆ isRHadron() [3/3]

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

Definition at line 603 of file AtlasPID.h.

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

◆ isRMeson() [1/3]

template<>
bool isRMeson ( const DecodedPID & p)
inline

Definition at line 575 of file AtlasPID.h.

575 {
576 if (!(p.ndigits() == 7 && (p(0) == 1 || p(0) == 2))) return false;
577 auto pp = p.shift(1);
578 return (
579 // Handle ~gluino-quark-antiquark states
580 (pp.ndigits() == 4 && p(0) == 1 && pp(0) == COMPOSITEGLUON && pp.min_digit(1,3) > 0 && pp.max_digit(1,3) < QUARK_LIMIT && pp(2) <= pp(1) && (pp.last() == 1 || pp.last() == 3)) ||
581 // Handle squark-antiquark states (previously called Smeson/mesoninos)
582 (pp.ndigits() == 3 && pp.min_digit(1,3) > 0 && pp.max_digit(1,3) < QUARK_LIMIT && pp(1) <= pp(0) && pp.last() == 2)
583 );
584}

◆ isRMeson() [2/3]

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

Definition at line 585 of file AtlasPID.h.

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

◆ isRMeson() [3/3]

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

Definition at line 574 of file AtlasPID.h.

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

◆ isSlepton() [1/3]

template<>
bool isSlepton ( const DecodedPID & p)
inline

Definition at line 483 of file AtlasPID.h.

483{ auto pp = p.shift(1); return (p.ndigits() == 7 && (p(0) == 1 || p(0) == 2) && isSMLepton(pp));}
bool isSMLepton(const T &p)
APID: the fourth generation leptons are not standard model leptons.
Definition AtlasPID.h:194

◆ isSlepton() [2/3]

template<>
bool isSlepton ( const int & p)
inline

Definition at line 484 of file AtlasPID.h.

484{ auto value_digits = DecodedPID(p); return isSlepton(value_digits);}
bool isSlepton(const T &p)
Definition AtlasPID.h:482

◆ isSlepton() [3/3]

template<class T>
bool isSlepton ( const T & p)
inline

Definition at line 482 of file AtlasPID.h.

482{ return isSlepton(p->pdg_id()); }

◆ isSleptonLH() [1/3]

template<>
bool isSleptonLH ( const DecodedPID & p)
inline

Definition at line 489 of file AtlasPID.h.

489 {
490 auto pp = p.shift(1); return (p.ndigits() == 7 && p(0) == 1 && isSMLepton(pp));
491}

◆ isSleptonLH() [2/3]

template<>
bool isSleptonLH ( const int & p)
inline

Definition at line 492 of file AtlasPID.h.

492{ auto value_digits = DecodedPID(p); return isSleptonLH(value_digits);}
bool isSleptonLH(const T &p)
Definition AtlasPID.h:488

◆ isSleptonLH() [3/3]

template<class T>
bool isSleptonLH ( const T & p)
inline

Definition at line 488 of file AtlasPID.h.

488{ return isSleptonLH(p->pdg_id()); }

◆ isSleptonRH() [1/3]

template<>
bool isSleptonRH ( const DecodedPID & p)
inline

Definition at line 497 of file AtlasPID.h.

497 {
498 auto pp = p.shift(1); return (p.ndigits() == 7 && p(0) == 2 && isSMLepton(pp));
499}

◆ isSleptonRH() [2/3]

template<>
bool isSleptonRH ( const int & p)
inline

Definition at line 500 of file AtlasPID.h.

500{ auto value_digits = DecodedPID(p); return isSleptonRH(value_digits);}
bool isSleptonRH(const T &p)
Definition AtlasPID.h:496

◆ isSleptonRH() [3/3]

template<class T>
bool isSleptonRH ( const T & p)
inline

Definition at line 496 of file AtlasPID.h.

496{ return isSleptonRH(p->pdg_id()); }

◆ isSMLepton() [1/3]

template<>
bool isSMLepton ( const DecodedPID & p)
inline

Definition at line 196 of file AtlasPID.h.

196{ return isSMLepton(p.pid()); }

◆ isSMLepton() [2/3]

template<>
bool isSMLepton ( const int & p)
inline

Definition at line 195 of file AtlasPID.h.

195{ auto sp = std::abs(p); return sp >= ELECTRON && sp <= NU_TAU; }

◆ isSMLepton() [3/3]

template<class T>
bool isSMLepton ( const T & p)
inline

APID: the fourth generation leptons are not standard model leptons.

Definition at line 194 of file AtlasPID.h.

194{return isSMLepton(p->pdg_id());}

◆ isSMNeutrino() [1/2]

template<>
bool isSMNeutrino ( const int & p)
inline

Definition at line 216 of file AtlasPID.h.

216{ auto sp = std::abs(p); return sp == NU_E || sp == NU_MU || sp == NU_TAU; }

◆ isSMNeutrino() [2/2]

template<class T>
bool isSMNeutrino ( const T & p)
inline

Definition at line 215 of file AtlasPID.h.

215{return isSMNeutrino(p->pdg_id());}
bool isSMNeutrino(const T &p)
Definition AtlasPID.h:215

◆ isSMQuark() [1/3]

template<>
bool isSMQuark ( const DecodedPID & p)
inline

Definition at line 174 of file AtlasPID.h.

174{ return isSMQuark(p.pid()); }
bool isSMQuark(const T &p)
Definition AtlasPID.h:172

◆ isSMQuark() [2/3]

template<>
bool isSMQuark ( const int & p)
inline

Definition at line 173 of file AtlasPID.h.

173{ return p != 0 && std::abs(p) <= TQUARK;}

◆ isSMQuark() [3/3]

template<class T>
bool isSMQuark ( const T & p)
inline

Definition at line 172 of file AtlasPID.h.

172{return isSMQuark(p->pdg_id());}

◆ isSquark() [1/3]

template<>
bool isSquark ( const DecodedPID & p)
inline

Definition at line 459 of file AtlasPID.h.

459 {
460 auto pp = p.shift(1); return (p.ndigits() == 7 && (p(0) == 1 || p(0) == 2) && isSMQuark(pp));
461}

◆ isSquark() [2/3]

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

Definition at line 462 of file AtlasPID.h.

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

◆ isSquark() [3/3]

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

PDG rule 11d Fundamental supersymmetric particles are identified by adding a nonzero n to the particle number.

The superpartner of a boson or a left-handed fermion has n = 1 while the superpartner of a right-handed fermion has n = 2. When mixing occurs, such as between the winos and charged Higgsinos to give charginos, or between left and right sfermions, the lighter physical state is given the smaller basis state number.

Definition at line 458 of file AtlasPID.h.

458{ return isSquark(p->pdg_id()); }

◆ isSquarkLH() [1/3]

template<>
bool isSquarkLH ( const DecodedPID & p)
inline

Definition at line 467 of file AtlasPID.h.

467 {
468 auto pp = p.shift(1); return (p.ndigits() == 7 && p(0) == 1 && isSMQuark(pp));
469}

◆ isSquarkLH() [2/3]

template<>
bool isSquarkLH ( const int & p)
inline

Definition at line 470 of file AtlasPID.h.

470{ auto value_digits = DecodedPID(p); return isSquarkLH(value_digits);}
bool isSquarkLH(const T &p)
Definition AtlasPID.h:466

◆ isSquarkLH() [3/3]

template<class T>
bool isSquarkLH ( const T & p)
inline

Definition at line 466 of file AtlasPID.h.

466{ return isSquarkLH(p->pdg_id()); }

◆ isSquarkRH() [1/3]

template<>
bool isSquarkRH ( const DecodedPID & p)
inline

Definition at line 475 of file AtlasPID.h.

475 {
476 auto pp = p.shift(1); return (p.ndigits() == 7 && p(0) == 2 && isSMQuark(pp));
477}

◆ isSquarkRH() [2/3]

template<>
bool isSquarkRH ( const int & p)
inline

Definition at line 478 of file AtlasPID.h.

478{ auto value_digits = DecodedPID(p); return isSquarkRH(value_digits);}
bool isSquarkRH(const T &p)
Definition AtlasPID.h:474

◆ isSquarkRH() [3/3]

template<class T>
bool isSquarkRH ( const T & p)
inline

Definition at line 474 of file AtlasPID.h.

474{ return isSquarkRH(p->pdg_id()); }

◆ isStrange() [1/2]

template<>
bool isStrange ( const int & p)
inline

Definition at line 177 of file AtlasPID.h.

177{ return std::abs(p) == SQUARK;}

◆ isStrange() [2/2]

template<class T>
bool isStrange ( const T & p)
inline

Definition at line 176 of file AtlasPID.h.

176{return isStrange(p->pdg_id());}
bool isStrange(const T &p)
Definition AtlasPID.h:176

◆ isStrangeBaryon()

template<class T>
bool isStrangeBaryon ( const T & p)
inline

Definition at line 933 of file AtlasPID.h.

933{ return leadingQuark(p) == SQUARK && isBaryon(p); }

◆ isStrangeHadron()

template<class T>
bool isStrangeHadron ( const T & p)
inline

Definition at line 910 of file AtlasPID.h.

910{ return leadingQuark(p) == SQUARK && isHadron(p); }

◆ isStrangeMeson()

template<class T>
bool isStrangeMeson ( const T & p)
inline

Definition at line 917 of file AtlasPID.h.

917{ return leadingQuark(p) == SQUARK && isMeson(p); }

◆ isStrongInteracting() [1/2]

template<>
bool isStrongInteracting ( const int & p)
inline

Definition at line 1179 of file AtlasPID.h.

1179{ return (isGluon(p) || isQuark(p) || isDiquark(p) || isGlueball(p) || isLeptoQuark(p) || isHadron(p) || isRHadron(p));} // APID: Glueballs and R-Hadrons are also strong-interacting

◆ isStrongInteracting() [2/2]

template<class T>
bool isStrongInteracting ( const T & p)
inline

Definition at line 1178 of file AtlasPID.h.

1178{return isStrongInteracting(p->pdg_id());}
bool isStrongInteracting(const T &p)
Definition AtlasPID.h:1178

◆ isSuperpartner() [1/3]

template<>
bool isSuperpartner ( const DecodedPID & p)
inline

Definition at line 513 of file AtlasPID.h.

513 {
514 return isSlepton(p) || isSquark(p) || isGaugino(p);
515}

◆ isSuperpartner() [2/3]

template<>
bool isSuperpartner ( const int & p)
inline

Definition at line 516 of file AtlasPID.h.

516{ auto value_digits = DecodedPID(p); return isSuperpartner(value_digits);}
bool isSuperpartner(const T &p)
Definition AtlasPID.h:512

◆ isSuperpartner() [3/3]

template<class T>
bool isSuperpartner ( const T & p)
inline

Definition at line 512 of file AtlasPID.h.

512{ return isSuperpartner(p->pdg_id()); }

◆ isSUSY() [1/3]

template<>
bool isSUSY ( const DecodedPID & p)
inline

Definition at line 624 of file AtlasPID.h.

624{return (isSuperpartner(p) || isRHadron(p));}

◆ isSUSY() [2/3]

template<>
bool isSUSY ( const int & p)
inline

Definition at line 625 of file AtlasPID.h.

625{ auto value_digits = DecodedPID(p); return isSUSY(value_digits);}

◆ isSUSY() [3/3]

template<class T>
bool isSUSY ( const T & p)
inline

Definition at line 623 of file AtlasPID.h.

623{return isSUSY(p->pdg_id());}

◆ isTau() [1/2]

template<>
bool isTau ( const int & p)
inline

Definition at line 209 of file AtlasPID.h.

209{ return std::abs(p) == TAU;}
static const int TAU
Definition AtlasPID.h:79

◆ isTau() [2/2]

template<class T>
bool isTau ( const T & p)
inline

Definition at line 208 of file AtlasPID.h.

208{return isTau(p->pdg_id());}
bool isTau(const T &p)
Definition AtlasPID.h:208

◆ isTechnicolor() [1/3]

template<>
bool isTechnicolor ( const DecodedPID & p)
inline

Definition at line 526 of file AtlasPID.h.

526 {
527 const auto& pp = (p.ndigits() == 7) ? p.shift(2) : DecodedPID(0);
528 return (p.ndigits() == 7 && p(0) == 3 && (p(1) == 0 || p(1) == 1) &&
529 (isQuark(pp) || isLepton(pp) || isBoson(pp) || isGlueball(pp) ||
530 isDiquark(pp) || isHadron(pp)));
531}

◆ isTechnicolor() [2/3]

template<>
bool isTechnicolor ( const int & p)
inline

Definition at line 532 of file AtlasPID.h.

532{ auto value_digits = DecodedPID(p); return isTechnicolor(value_digits);}

◆ isTechnicolor() [3/3]

template<class T>
bool isTechnicolor ( const T & p)
inline

PDG rule 11e Technicolor states have n = 3, with technifermions treated like ordinary fermions.

States which are ordinary color singlets have n_r = 0. Color octets have n_r = 1. If a state has non-trivial quantum numbers under the topcolor groups SU(3)1×SU(3)2, the quantum numbers are specified by tech, ij, where i and j are 1 or 2. nLis then 2i+j. The coloron V8, is a heavy gluon color octet and thus is 3100021

Definition at line 524 of file AtlasPID.h.

524{return isTechnicolor(p->pdg_id());}

◆ isTetraquark() [1/3]

template<>
bool isTetraquark ( const DecodedPID & p)
inline

Definition at line 326 of file AtlasPID.h.

326 {
327 return (p.ndigits() == 9 && p(0) == 1 && p(5) == 0 &&
328 p.max_digit(1,3) < QUARK_LIMIT && p.min_digit(1,3) > 0 && // ignore 4th generation quarks for nq3 and nq4
329 p.max_digit(4,6) < QUARK_LIMIT && p.min_digit(4,6) > 0 && // ignore 4th generation quarks for nq1 and nq2
330 ( p(3) >= p(4) && p(6) >= p(7) ) && ( ( p(3) > p(6) ) || ( p(3) == p(6) && (p(4) >= p(7))))
331 );
332}

◆ isTetraquark() [2/3]

template<>
bool isTetraquark ( const int & p)
inline

Definition at line 333 of file AtlasPID.h.

333{ auto value_digits = DecodedPID(p); return isTetraquark(value_digits);}

◆ isTetraquark() [3/3]

template<class T>
bool isTetraquark ( const T & p)
inline

PDG rule 14 The 9-digit tetra-quark codes are ±1nrnLnq1nq20nq3nq4nJ.

For the particle q1q2 is a diquark and ̄q3 ̄q4 an antidiquark, sorted such that nq1≥nq2, nq3≥nq4, nq1≥nq3, and nq2≥nq4 if nq1=nq3. For the antiparticle, given with a negative sign, ̄q1 ̄q2 is an antidiquark and q3q4 a diquark, with the same sorting except that either nq1>nq3 or nq2>nq4 (so that flavour-diagonal states are particles). The nr, nL, and nJ numbers have the same meaning as for ordinary hadrons. APID: states with fourth generation quarks are not tetraquarks

Definition at line 325 of file AtlasPID.h.

325{return isTetraquark(p->pdg_id());}

◆ isTop() [1/2]

template<>
bool isTop ( const int & p)
inline

Definition at line 186 of file AtlasPID.h.

186{ return std::abs(p) == TQUARK;}

◆ isTop() [2/2]

template<class T>
bool isTop ( const T & p)
inline

Definition at line 185 of file AtlasPID.h.

185{return isTop(p->pdg_id());}

◆ isTopBaryon()

template<class T>
bool isTopBaryon ( const T & p)
inline

Definition at line 936 of file AtlasPID.h.

936{ return leadingQuark(p) == TQUARK && isBaryon(p); }

◆ isTopHadron()

template<class T>
bool isTopHadron ( const T & p)
inline

Definition at line 913 of file AtlasPID.h.

913{ return leadingQuark(p) == TQUARK && isHadron(p); }

◆ isTopMeson()

template<class T>
bool isTopMeson ( const T & p)
inline

Definition at line 920 of file AtlasPID.h.

920{ return leadingQuark(p) == TQUARK && isMeson(p); }

◆ isTrajectory() [1/2]

template<>
bool isTrajectory ( const int & p)
inline

Definition at line 360 of file AtlasPID.h.

360{ return std::abs(p) == POMERON || std::abs(p) == ODDERON || std::abs(p) == REGGEON; }
static const int REGGEON
Definition AtlasPID.h:151
static const int POMERON
PDG rule 8: The pomeron and odderon trajectories and a generic reggeon trajectory of states in QCD ar...
Definition AtlasPID.h:149
static const int ODDERON
Definition AtlasPID.h:150

◆ isTrajectory() [2/2]

template<class T>
bool isTrajectory ( const T & p)
inline

PDG rule 8: The pomeron and odderon trajectories and a generic reggeon trajectory of states in QCD areassigned codes 990, 9990, and 110 respectively.

Definition at line 359 of file AtlasPID.h.

359{return isTrajectory(p->pdg_id());}
bool isTrajectory(const T &p)
PDG rule 8: The pomeron and odderon trajectories and a generic reggeon trajectory of states in QCD ar...
Definition AtlasPID.h:359

◆ isTransportable() [1/3]

template<>
bool isTransportable ( const DecodedPID & p)
inline

Definition at line 874 of file AtlasPID.h.

874{ return isPhoton(p.pid()) || isGeantino(p.pid()) || isHadron(p) || isLepton(p.pid()) || p.pid() == DARKPHOTON;}

◆ isTransportable() [2/3]

template<>
bool isTransportable ( const int & p)
inline

Definition at line 875 of file AtlasPID.h.

875{ auto value_digits = DecodedPID(p); return isTransportable(value_digits);}
bool isTransportable(const T &p)
Definition AtlasPID.h:873

◆ isTransportable() [3/3]

template<class T>
bool isTransportable ( const T & p)
inline

Definition at line 873 of file AtlasPID.h.

873{return isTransportable(p->pdg_id());}

◆ isValid() [1/3]

template<>
bool isValid ( const DecodedPID & p)
inline

Definition at line 879 of file AtlasPID.h.

879 {
880 return p.pid() !=0 && ( isQuark(p) || isLepton(p) || isBoson(p) || isGlueball(p) ||
881 isTrajectory(p.pid()) || isGenSpecific(p.pid()) || isDiquark(p) ||
882 isBSM(p) || isHadron(p) || isNucleus(p) || isGeantino(p.pid()) ||
883 isPythia8Specific(p) ); }

◆ isValid() [2/3]

template<>
bool isValid ( const int & p)
inline

Definition at line 884 of file AtlasPID.h.

884 { if (!p) return false; if (std::abs(p) < 42) return true;
885 if (isGenSpecific(p)) return true;
886 auto value_digits = DecodedPID(p); return isValid(value_digits);
887}
bool isValid(const T &p)
Av: we implement here an ATLAS-sepcific convention: all particles which are 99xxxxx are fine.
Definition AtlasPID.h:878

◆ isValid() [3/3]

template<class T>
bool isValid ( const T & p)
inline

Av: we implement here an ATLAS-sepcific convention: all particles which are 99xxxxx are fine.

Definition at line 878 of file AtlasPID.h.

878{return isValid(p->pdg_id());}

◆ isW() [1/2]

template<>
bool isW ( const int & p)
inline

Definition at line 383 of file AtlasPID.h.

383{ return std::abs(p) == WPLUSBOSON; }
static const int WPLUSBOSON
Definition AtlasPID.h:89

◆ isW() [2/2]

template<class T>
bool isW ( const T & p)
inline

Definition at line 382 of file AtlasPID.h.

382{return isW(p->pdg_id());}

◆ isWeaklyDecayingBHadron() [1/3]

template<>
bool isWeaklyDecayingBHadron ( const DecodedPID & p)
inline

Definition at line 968 of file AtlasPID.h.

968{ return isWeaklyDecayingBHadron(p.pid()); }
bool isWeaklyDecayingBHadron(const T &p)
Definition AtlasPID.h:942

◆ isWeaklyDecayingBHadron() [2/3]

template<>
bool isWeaklyDecayingBHadron ( const int & p)
inline

Definition at line 943 of file AtlasPID.h.

943 {
944 const int pid = std::abs(p);
945 return ( pid == 511 || // B0
946 pid == 521 || // B+
947 pid == 531 || // B_s0
948 pid == 541 || // B_c+
949 pid == 5122 || // Lambda_b0
950 pid == 5132 || // Xi_b-
951 pid == 5232 || // Xi_b0
952 pid == 5112 || // Sigma_b-
953 pid == 5212 || // Sigma_b0
954 pid == 5222 || // Sigma_b+
955 pid == 5332 || // Omega_b-
956 pid == 5142 || // Xi_bc0
957 pid == 5242 || // Xi_bc+
958 pid == 5412 || // Xi'_bc0
959 pid == 5422 || // Xi'_bc+
960 pid == 5342 || // Omega_bc0
961 pid == 5432 || // Omega'_bc0
962 pid == 5442 || // Omega_bcc+
963 pid == 5512 || // Xi_bb-
964 pid == 5522 || // Xi_bb0
965 pid == 5532 || // Omega_bb-
966 pid == 5542 ); // Omega_bbc0
967}

◆ isWeaklyDecayingBHadron() [3/3]

template<class T>
bool isWeaklyDecayingBHadron ( const T & p)
inline

Definition at line 942 of file AtlasPID.h.

942{return isWeaklyDecayingBHadron(p->pdg_id());}

◆ isWeaklyDecayingCHadron() [1/3]

template<>
bool isWeaklyDecayingCHadron ( const DecodedPID & p)
inline

Definition at line 992 of file AtlasPID.h.

992{ return isWeaklyDecayingCHadron(p.pid()); }
bool isWeaklyDecayingCHadron(const T &p)
Definition AtlasPID.h:977

◆ isWeaklyDecayingCHadron() [2/3]

template<>
bool isWeaklyDecayingCHadron ( const int & p)
inline

Definition at line 978 of file AtlasPID.h.

978 {
979 const int pid = std::abs(p);
980 return ( pid == 411 || // D+
981 pid == 421 || // D0
982 pid == 431 || // Ds+
983 pid == 4122 || // Lambda_c+
984 pid == 4132 || // Xi_c0
985 pid == 4232 || // Xi_c+
986 pid == 4212 || // Xi_c0
987 pid == 4332 || // Omega_c0
988 pid == 4412 || // Xi_cc+
989 pid == 4422 || // Xi_cc++
990 pid == 4432 ); // Omega_cc+
991}

◆ isWeaklyDecayingCHadron() [3/3]

template<class T>
bool isWeaklyDecayingCHadron ( const T & p)
inline

Definition at line 977 of file AtlasPID.h.

977{return isWeaklyDecayingCHadron(p->pdg_id());}

◆ isZ() [1/2]

template<>
bool isZ ( const int & p)
inline

Definition at line 380 of file AtlasPID.h.

380{ return p == Z0BOSON; }
static const int Z0BOSON
Definition AtlasPID.h:88

◆ isZ() [2/2]

template<class T>
bool isZ ( const T & p)
inline

Definition at line 379 of file AtlasPID.h.

379{return isZ(p->pdg_id());}

◆ leadingQuark() [1/3]

template<>
int leadingQuark ( const DecodedPID & p)
inline

Definition at line 890 of file AtlasPID.h.

890 {
891 if (isQuark(p.pid())) { return std::abs(p.pid());}
892 if (isMeson(p)) { return p.max_digit(1,3);}
893 if (isDiquark(p)) { return p.max_digit(2,4);}
894 if (isBaryon(p)) { return p.max_digit(1,4);}
895 if (isTetraquark(p)) { return p.max_digit(1,5);}
896 if (isPentaquark(p)) { return p.max_digit(1,6);}
897 if (isSUSY(p)) { // APID SUSY case
898 auto pp = p.shift(1);
899 if ( pp.ndigits() == 1 ) { return 0; } // Handle squarks
900 if ( pp.ndigits() == 3 ) { pp = DecodedPID(pp(1)); } // Handle ~q qbar pairs
901 if ( pp.ndigits() > 3 ) { pp = pp.shift(1); } // Drop gluinos and squarks
902 return leadingQuark(pp); }
903 return 0;
904}

◆ leadingQuark() [2/3]

template<>
int leadingQuark ( const int & p)
inline

Definition at line 906 of file AtlasPID.h.

906{ auto value_digits = DecodedPID(p); return leadingQuark(value_digits);}

◆ leadingQuark() [3/3]

template<class T>
int leadingQuark ( const T & p)
inline

Definition at line 889 of file AtlasPID.h.

889{return leadingQuark(p->pdg_id());}

◆ numberOfLambdas() [1/3]

template<>
int numberOfLambdas ( const DecodedPID & p)
inline

Definition at line 825 of file AtlasPID.h.

825 {
826 if (std::abs(p.pid()) == LAMBDA0) { return (p.pid() > 0) ? 1 : -1; }
827 if (isNucleus(p) && p.ndigits() == 10) { return (p.pid() > 0) ? p(2) : -p(2); }
828 return 0;
829}
static const int LAMBDA0
Definition AtlasPID.h:126

◆ numberOfLambdas() [2/3]

template<>
int numberOfLambdas ( const int & p)
inline

Definition at line 830 of file AtlasPID.h.

830{ auto value_digits = DecodedPID(p); return numberOfLambdas(value_digits);}

◆ numberOfLambdas() [3/3]

template<class T>
int numberOfLambdas ( const T & p)
inline

Definition at line 824 of file AtlasPID.h.

824{return numberOfLambdas(p->pdg_id());}

◆ numberOfProtons() [1/3]

template<>
int numberOfProtons ( const DecodedPID & p)
inline

Definition at line 834 of file AtlasPID.h.

834 {
835 if (std::abs(p.pid()) == PROTON) { return (p.pid() > 0) ? 1 : -1; }
836 if (isNucleus(p)) {
837 const int result = p(5) + 10*p(4) + 100*p(3);
838 return (p.pid() > 0) ? result : -result;
839 }
840 return 0;
841}

◆ numberOfProtons() [2/3]

template<>
int numberOfProtons ( const int & p)
inline

Definition at line 842 of file AtlasPID.h.

842{ auto value_digits = DecodedPID(p); return numberOfProtons(value_digits);}

◆ numberOfProtons() [3/3]

template<class T>
int numberOfProtons ( const T & p)
inline

Definition at line 833 of file AtlasPID.h.

833{return numberOfProtons(p->pdg_id());}

◆ spin() [1/3]

template<>
double spin ( const DecodedPID & p)
inline

Definition at line 1148 of file AtlasPID.h.

1148{ return 1.0*spin2(p)/2.0; }
int spin2(const T &p)
Definition AtlasPID.h:1107

◆ spin() [2/3]

template<>
double spin ( const int & p)
inline

Definition at line 1149 of file AtlasPID.h.

1149{ auto value_digits = DecodedPID(p); return spin(value_digits);}
double spin(const T &p)
Definition AtlasPID.h:1147

◆ spin() [3/3]

template<class T>
double spin ( const T & p)
inline

Definition at line 1147 of file AtlasPID.h.

1147{ return spin(p->pdg_id()); }

◆ spin2() [1/3]

template<>
int spin2 ( const DecodedPID & p)
inline

Definition at line 1108 of file AtlasPID.h.

1108 {
1109 if (isSUSY(p)) {
1110 auto pp = p.shift(1);
1111 auto ap = std::abs(pp.pid());
1112 if (ap < TABLESIZE ) { return std::abs(double_spin.at(ap)-1); } // sparticles (0->1, 1 -> 0, 2->1, 4->3)
1113 return p.last()-1; // R-Hadrons (p.last() == 2J +1)
1114 }
1115 if (isHiddenValley(p)) { //Hidden Valley spins
1116 auto pp = p.shift(2);
1117 if (isHadron(pp)) { return pp.last()-1; } // Hadrons (p.last == 2J+1 - special cases handled above)
1118 }
1119 if (isKK(p)) { // Kaluza-Klein spins
1120 auto pp = p.shift(2);
1121 auto ap = std::abs(pp.pid());
1122 if (ap < TABLESIZE ) { return double_spin.at(ap); } // fundamental particles
1123 }
1124 if (isDM(std::abs(p.pid()))) { //DM spins
1125 if (p.ndigits() == 7) { // Determining the spins for the more elaborate, 7-digit DM codes
1126 auto pp = p.shift(3); // The first two digits indicate the particle is DM, the third indicates left/right-handedness (see 11(j))
1127 auto ap = std::abs(pp.pid());
1128 if (ap < TABLESIZE) { return double_spin.at(ap); } // fundamental particles
1129 }else if (std::abs(p.pid()) < TABLESIZE) { // Just to make sure the correct spin is returned for DM 51-60
1130 return std::abs(double_spin.at(std::abs(p.pid())));
1131 }
1132 }
1133 auto ap = std::abs(p.pid());
1134 if (ap == K0S) { return 0; }
1135 if (ap == K0L) { return 0; }
1136 if (ap == MAVTOP) { return 1; } // TODO check this
1137 if (ap == DARKPHOTON) { return 2; } // TODO check this
1138 if (ap < TABLESIZE ) { return double_spin.at(ap); } // fundamental particles
1139 if (isHadron(p)) { return p.last()-1; } // Hadrons (p.last == 2J+1 - special cases handled above)
1140 if (isMonopole(p)) { return 0; } // PDG 11i - For now no spin information is provided. Also matches the definition in the G4Extensions/Monopole package.
1141 if (isGenericMultichargedParticle(p)) { return 0; } // APID Matches the definition in the G4Extensions/Monopole package.
1142 if (isNucleus(p)) { return 1; } // TODO need to explicitly deal with nuclei
1143 return p.last() > 0 ? 1 : 0; // Anything else - best guess
1144}
static const std::array< int, TABLESIZE > double_spin
Definition AtlasPID.h:50

◆ spin2() [2/3]

template<>
int spin2 ( const int & p)
inline

Definition at line 1145 of file AtlasPID.h.

1145{ auto value_digits = DecodedPID(p); return spin2(value_digits);}

◆ spin2() [3/3]

template<class T>
int spin2 ( const T & p)
inline

Definition at line 1107 of file AtlasPID.h.

1107{ return spin2(p->pdg_id()); }

◆ strangeness() [1/3]

template<>
int strangeness ( const DecodedPID & p)
inline

Definition at line 787 of file AtlasPID.h.

787 {
788 if (isNucleus(p) && p.ndigits() == 10) { return (p.pid() > 0) ? -p(2) : p(2); }
789 if (isStrange(p.pid())) { return (p.pid() > 0) ? -1 : 1; }
790 if (!hasStrange(p) && !hasSquark(p,SQUARK)) { return 0; }
791 if (std::abs(p.pid()) == K0) { return (p.pid() > 0) ? 1 : -1; }
792 size_t nq = 0;
793 int sign = 1;
794 int signmult = 1;
795 int result=0;
796 bool classified = false;
797 if (!classified && isMeson(p)) { classified = true; nq = 2; if ((*(p.second.rbegin()+2)) == 2||(*(p.second.rbegin()+2)) == 4 ) { sign=-1;} signmult =-1; }
798 if (!classified && isDiquark(p)) {return is_strange.at(p(0))+is_strange.at(p(1)); }
799 if (!classified && isBaryon(p)) { classified = true; nq = 3; }
800 if (!classified && isTetraquark(p)){ return is_strange.at(p(3)) + is_strange.at(p(4)) - is_strange.at(p(6)) - is_strange.at(p(7)); }
801 if (!classified && isPentaquark(p)){ return is_strange.at(p(3)) + is_strange.at(p(4)) + is_strange.at(p(5)) + is_strange.at(p(6)) - is_strange.at(p(7)); }
802 if (!classified && isSUSY(p)) {
803 nq = 0;
804 auto pp = p.shift(1);
805 if (pp.ndigits() < 3 ) { return strangeness(pp); } // super-partners of fundamental particles
806 if (pp(0) == COMPOSITEGLUON) {
807 if (pp(1) == COMPOSITEGLUON) { return 0; } // R-Glueballs
808 if ( pp.ndigits() == 4 || pp.ndigits() == 5) {
809 pp = pp.shift(1); // Remove gluino
810 }
811 }
812 if (pp.ndigits() == 3) { classified = true; nq = 2; if (p.last()%2==0) {sign = -1;} signmult = -1; } // states with quark-antiquark or squark-antiquark
813 if (pp.ndigits() == 4) { classified = true; nq = 3; } // states with quark-quark-quark or squark-quark-quark
814 }
815 for (auto r = p.second.rbegin() + 1; r != p.second.rbegin() + 1 + nq; ++r) {
816 result += is_strange.at(*r)*sign;
817 sign*=signmult;
818 }
819 return p.pid() > 0 ? result : -result;
820}
bool hasStrange(const T &p)
Definition AtlasPID.h:736
int strangeness(const T &p)
Definition AtlasPID.h:786
static const std::array< int, 10 > is_strange
Definition AtlasPID.h:784

◆ strangeness() [2/3]

template<>
int strangeness ( const int & p)
inline

Definition at line 821 of file AtlasPID.h.

821{ auto value_digits = DecodedPID(p); return strangeness(value_digits);}

◆ strangeness() [3/3]

template<class T>
int strangeness ( const T & p)
inline

Definition at line 786 of file AtlasPID.h.

786{return strangeness(p->pdg_id());}

◆ threeCharge()

template<class T>
double threeCharge ( const T & p)
inline

Definition at line 1003 of file AtlasPID.h.

1003{ return charge3(p);}

Variable Documentation

◆ B0

const int B0 = 511
static

Definition at line 122 of file AtlasPID.h.

◆ BCPLUS

const int BCPLUS = 541
static

Definition at line 123 of file AtlasPID.h.

◆ BPRIME

const int BPRIME = 7
static

Definition at line 70 of file AtlasPID.h.

◆ BQUARK

const int BQUARK = 5
static

Definition at line 68 of file AtlasPID.h.

◆ COMPOSITEGLUON

const int COMPOSITEGLUON = 9
static

Definition at line 86 of file AtlasPID.h.

◆ CQUARK

const int CQUARK = 4
static

Definition at line 67 of file AtlasPID.h.

◆ D0

const int D0 = 421
static

Definition at line 119 of file AtlasPID.h.

◆ DARKPHOTON

const int DARKPHOTON = 60000
static

PDG Ids for Mavtop madgraph UFO model found under DarkX.

The mavtop is a vector-like top partner with coupling to a dark photon. Theory paper: https://arxiv.org/abs/1904.05893 Pheno paper: https://arxiv.org/pdf/2112.08425

Definition at line 106 of file AtlasPID.h.

◆ double_spin

const std::array<int,TABLESIZE> double_spin
static
Initial value:
= {
+0, +1, +1, +1, +1, +1, +1, +1, +1, +0,
+0, +1, +1, +1, +1, +1, +1, +1, +1, +0,
+2, +2, +2, +2, +2, +0, +0, +0, +0, +0,
+0, +0, +2, +2, +2, +0, +0, +0, +0, +4,
+0, +0, +0, +0, +0, +0, +0, +0, +0, +0,
+0, +0, +1, +2, +0, +2, +0, +1, +2, +0,
+0, +0, +0, +0, +0, +0, +0, +0, +0, +0,
+0, +0, +0, +0, +0, +0, +0, +0, +0, +0,
+0, +0, +0, +0, +0, +0, +0, +0, +0, +0,
+0, +0, +0, +0, +0, +0, +0, +0, +0, +0
}

Definition at line 50 of file AtlasPID.h.

50 {
51 +0, +1, +1, +1, +1, +1, +1, +1, +1, +0,
52 +0, +1, +1, +1, +1, +1, +1, +1, +1, +0,
53 +2, +2, +2, +2, +2, +0, +0, +0, +0, +0,
54 +0, +0, +2, +2, +2, +0, +0, +0, +0, +4,
55 +0, +0, +0, +0, +0, +0, +0, +0, +0, +0,
56 +0, +0, +1, +2, +0, +2, +0, +1, +2, +0,
57 +0, +0, +0, +0, +0, +0, +0, +0, +0, +0,
58 +0, +0, +0, +0, +0, +0, +0, +0, +0, +0,
59 +0, +0, +0, +0, +0, +0, +0, +0, +0, +0,
60 +0, +0, +0, +0, +0, +0, +0, +0, +0, +0
61};

◆ DPLUS

const int DPLUS = 411
static

Definition at line 117 of file AtlasPID.h.

◆ DQUARK

const int DQUARK = 1
static

Definition at line 64 of file AtlasPID.h.

◆ DSPLUS

const int DSPLUS = 431
static

Definition at line 120 of file AtlasPID.h.

◆ DSTAR

const int DSTAR = 413
static

Definition at line 118 of file AtlasPID.h.

◆ ELECTRON

const int ELECTRON = 11
static

Definition at line 74 of file AtlasPID.h.

◆ GEANTINO0

const int GEANTINO0 = 999
static

Definition at line 159 of file AtlasPID.h.

◆ GEANTINOPLUS

const int GEANTINOPLUS = 998
static

PDG rule 10: Codes 81–100 are reserved for generator-specific pseudoparticles and concepts.

Codes 901–930, 1901–1930, 2901–2930, and 3901–3930 are for additional components of Standard Modelparton distribution functions, where the latter three ranges are intended to distinguish left/right/ longitudinal components. Codes 998 and 999 are reserved for GEANT tracking purposes.

Definition at line 158 of file AtlasPID.h.

◆ GLUON

const int GLUON = 21
static

Definition at line 84 of file AtlasPID.h.

◆ GRAVITON

const int GRAVITON = 39
static

Definition at line 98 of file AtlasPID.h.

◆ HELIUM

const int HELIUM = 1000020040
static

Definition at line 144 of file AtlasPID.h.

◆ HIGGS2

const int HIGGS2 = 35
static

Definition at line 94 of file AtlasPID.h.

◆ HIGGS3

const int HIGGS3 = 36
static

Definition at line 95 of file AtlasPID.h.

◆ HIGGS4

const int HIGGS4 = 40
static

Definition at line 99 of file AtlasPID.h.

◆ HIGGSBOSON

const int HIGGSBOSON = 25
static

Definition at line 90 of file AtlasPID.h.

◆ HIGGSPLUS

const int HIGGSPLUS = 37
static

Definition at line 96 of file AtlasPID.h.

◆ HIGGSPLUSPLUS

const int HIGGSPLUSPLUS = 38
static

Definition at line 97 of file AtlasPID.h.

◆ is_strange

const std::array<int,10> is_strange
static
Initial value:
= {
+0, +0, +0, -1, +0, +0, +0, +0, +0, +0 }

Definition at line 784 of file AtlasPID.h.

784 {
785 +0, +0, +0, -1, +0, +0, +0, +0, +0, +0 };

◆ JPSI

const int JPSI = 443
static

Definition at line 121 of file AtlasPID.h.

◆ K0

const int K0 = 311
static

Definition at line 115 of file AtlasPID.h.

◆ K0L

const int K0L = 130
static

Definition at line 112 of file AtlasPID.h.

◆ K0S

const int K0S = 310
static

Definition at line 114 of file AtlasPID.h.

◆ KPLUS

const int KPLUS = 321
static

Definition at line 116 of file AtlasPID.h.

◆ LAMBDA0

const int LAMBDA0 = 3122
static

Definition at line 126 of file AtlasPID.h.

◆ LAMBDAB0

const int LAMBDAB0 = 5122
static

Definition at line 128 of file AtlasPID.h.

◆ LAMBDACPLUS

const int LAMBDACPLUS = 4122
static

Definition at line 127 of file AtlasPID.h.

◆ LEAD

const int LEAD = 1000822080
static

Definition at line 141 of file AtlasPID.h.

◆ LEPTOQUARK

const int LEPTOQUARK = 42
static

Definition at line 100 of file AtlasPID.h.

◆ LPRIME

const int LPRIME = 17
static

Definition at line 81 of file AtlasPID.h.

◆ MAVTOP

const int MAVTOP = 60001
static

Definition at line 107 of file AtlasPID.h.

◆ MUON

const int MUON = 13
static

Definition at line 77 of file AtlasPID.h.

◆ NEON

const int NEON = 1000100200
static

Definition at line 143 of file AtlasPID.h.

◆ NEUTRON

const int NEUTRON = 2112
static

Definition at line 125 of file AtlasPID.h.

◆ NU_E

const int NU_E = 12
static

Definition at line 76 of file AtlasPID.h.

◆ NU_MU

const int NU_MU = 14
static

Definition at line 78 of file AtlasPID.h.

◆ NU_TAU

const int NU_TAU = 16
static

Definition at line 80 of file AtlasPID.h.

◆ NUPRIME

const int NUPRIME = 18
static

Definition at line 82 of file AtlasPID.h.

◆ ODDERON

const int ODDERON = 9990
static

Definition at line 150 of file AtlasPID.h.

◆ OXYGEN

const int OXYGEN = 1000080160
static

Definition at line 142 of file AtlasPID.h.

◆ PHOTON

const int PHOTON = 22
static

Definition at line 87 of file AtlasPID.h.

◆ PI0

const int PI0 = 111
static

Definition at line 111 of file AtlasPID.h.

◆ PIMINUS

const int PIMINUS = -PIPLUS
static

Definition at line 110 of file AtlasPID.h.

◆ PIPLUS

const int PIPLUS = 211
static

Definition at line 109 of file AtlasPID.h.

◆ POMERON

const int POMERON = 990
static

PDG rule 8: The pomeron and odderon trajectories and a generic reggeon trajectory of states in QCD areassigned codes 990, 9990, and 110 respectively.

Definition at line 149 of file AtlasPID.h.

◆ POSITRON

const int POSITRON = -ELECTRON
static

Definition at line 75 of file AtlasPID.h.

◆ PROTON

const int PROTON = 2212
static

Definition at line 124 of file AtlasPID.h.

◆ PSI2S

const int PSI2S = 20443
static

Definition at line 129 of file AtlasPID.h.

◆ QUARK_LIMIT

const int QUARK_LIMIT = BPRIME
static

Definition at line 72 of file AtlasPID.h.

◆ REGGEON

const int REGGEON = 110
static

Definition at line 151 of file AtlasPID.h.

◆ RH_NU_E

const int RH_NU_E = 9900012
static

PDG Rule 12: Generator defined PDG ID values for right handed neutrinos and corresponding W+ boson from a Left-Right symmetric Standard Model extension.

(Defined for some MadGraph+Pythia8 samples and referenced in MCTruthClassifierGen.cxx)

Definition at line 136 of file AtlasPID.h.

◆ RH_NU_MU

const int RH_NU_MU = 9900014
static

Definition at line 137 of file AtlasPID.h.

◆ RH_NU_TAU

const int RH_NU_TAU = 9900016
static

Definition at line 138 of file AtlasPID.h.

◆ SQUARK

const int SQUARK = 3
static

Definition at line 66 of file AtlasPID.h.

◆ TABLESIZE

const int TABLESIZE = 100
static

Definition at line 34 of file AtlasPID.h.

◆ TAU

const int TAU = 15
static

Definition at line 79 of file AtlasPID.h.

◆ TPRIME

const int TPRIME = 8
static

Definition at line 71 of file AtlasPID.h.

◆ TQUARK

const int TQUARK = 6
static

Definition at line 69 of file AtlasPID.h.

◆ triple_charge

const std::array<int,TABLESIZE> triple_charge
static
Initial value:
= {
+0, -1, +2, -1, +2, -1, +2, -1, +2, +0,
+0, -3, +0, -3, +0, -3, +0, -3, +0, +0,
+0, +0, +0, +0, +3, +0, +0, +0, +0, +0,
+0, +0, +0, +0, +3, +0, +0, +3, +6, +0,
+0, +0, -1, +0, +0, +0, +0, +0, +0, +0,
+0, +0, +0, +0, +0, +0, +0, +0, +0, +0,
+0, +0, +0, +0, +0, +0, +0, +0, +0, +0,
+0, +0, +0, +0, +0, +0, +0, +0, +0, +0,
+0, +0, +0, +0, +0, +0, +0, +0, +0, +0,
+0, +0, +0, +0, +0, +0, +0, +0, +0, +0
}

Definition at line 35 of file AtlasPID.h.

35 {
36 +0, -1, +2, -1, +2, -1, +2, -1, +2, +0,
37 +0, -3, +0, -3, +0, -3, +0, -3, +0, +0,
38 +0, +0, +0, +0, +3, +0, +0, +0, +0, +0,
39 +0, +0, +0, +0, +3, +0, +0, +3, +6, +0,
40 +0, +0, -1, +0, +0, +0, +0, +0, +0, +0,
41 +0, +0, +0, +0, +0, +0, +0, +0, +0, +0,
42 +0, +0, +0, +0, +0, +0, +0, +0, +0, +0,
43 +0, +0, +0, +0, +0, +0, +0, +0, +0, +0,
44 +0, +0, +0, +0, +0, +0, +0, +0, +0, +0,
45 +0, +0, +0, +0, +0, +0, +0, +0, +0, +0
46};

◆ UQUARK

const int UQUARK = 2
static

Definition at line 65 of file AtlasPID.h.

◆ WBOSON_LRSM

const int WBOSON_LRSM = 9900024
static

Definition at line 139 of file AtlasPID.h.

◆ WPLUSBOSON

const int WPLUSBOSON = 24
static

Definition at line 89 of file AtlasPID.h.

◆ WPLUSPRIME

const int WPLUSPRIME = 34
static

Definition at line 93 of file AtlasPID.h.

◆ Z0BOSON

const int Z0BOSON = 23
static

Definition at line 88 of file AtlasPID.h.

◆ ZDBLPRIME

const int ZDBLPRIME = 33
static

Definition at line 92 of file AtlasPID.h.

◆ ZPRIME

const int ZPRIME = 32
static

Definition at line 91 of file AtlasPID.h.