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 INDIUM = 1000491150
static const int KRYPTON = 1000360840
static const int CALCIUM = 1000200400
static const int ARGON = 1000180400
static const int MAGNESIUM = 1000120240
static const int NEON = 1000100200
static const int OXYGEN = 1000080160
static const int BORON = 1000050110
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 780 of file AtlasPID.h.

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

◆ baryonNumber() [2/3]

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

Definition at line 781 of file AtlasPID.h.

781{ 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 779 of file AtlasPID.h.

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

◆ baryonNumber3() [1/3]

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

Definition at line 755 of file AtlasPID.h.

755 {
756 if (isQuark(p.pid())) { return (p.pid() > 0) ? 1 : - 1;}
757 if (isDiquark(p)) { return (p.pid() > 0) ? 2 : -2; }
758 if (isMeson(p) || isTetraquark(p)) { return 0; }
759 if (isBaryon(p) || isPentaquark(p)){ return (p.pid() > 0) ? 3 : -3; }
760 if (isNucleus(p)) {
761 const int result = 3*p(8) + 30*p(7) + 300*p(6);
762 return (p.pid() > 0) ? result : -result;
763 }
764 if (isSUSY(p)) {
765 auto pp = p.shift(1);
766 if (pp.ndigits() < 3 ) { return baryonNumber3(pp); } // super-partners of fundamental particles
767 if (pp(0) == COMPOSITEGLUON) {
768 if (pp(1) == COMPOSITEGLUON) { return 0; } // R-Glueballs
769 if ( pp.ndigits() == 4 ) { return 0; } // states with gluino-quark-antiquark
770 if ( pp.ndigits() == 5) { return (p.pid() > 0) ? 3 : -3; } // states with gluino-quark-quark-quark
771 }
772 if (pp.ndigits() == 3) { return 0; } // squark-antiquark
773 if (pp.ndigits() == 4) { return (p.pid() > 0) ? 3 : -3; } // states with squark-quark-quark
774 }
775 return 0;
776}
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:348
bool isTetraquark(const T &p)
PDG rule 14 The 9-digit tetra-quark codes are ±1nrnLnq1nq20nq3nq4nJ.
Definition AtlasPID.h:331
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:173
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:250
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:233
static const int COMPOSITEGLUON
Definition AtlasPID.h:86
bool isSUSY(const T &p)
Definition AtlasPID.h:629
bool isBaryon(const T &p)
Table 43.2 APID: states with fourth generation quarks are not baryons.
Definition AtlasPID.h:288
bool isNucleus(const T &p)
PDG rule 16 Nuclear codes are given as 10-digit numbers ±10LZZZAAAI.
Definition AtlasPID.h:708

◆ baryonNumber3() [2/3]

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

Definition at line 777 of file AtlasPID.h.

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

◆ baryonNumber3() [3/3]

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

Definition at line 754 of file AtlasPID.h.

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

◆ charge()

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

Definition at line 1003 of file AtlasPID.h.

1003 {
1004 if (isGenericMultichargedParticle(p)) // BSM multi-charged particles might have a fractional charge that's not a multiple of 1/3
1005 return fractionalCharge(p);
1006 else
1007 return 1.0*charge3(p)/3.0;
1008}
int charge3(const T &p)
Definition AtlasPID.h:1001
double fractionalCharge(const T &p)
Definition AtlasPID.h:1002
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:690

◆ 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 1013 of file AtlasPID.h.

1013 {
1014 auto ap = std::abs(p.pid());
1015 if (ap < TABLESIZE ) return p.pid() > 0 ? triple_charge.at(ap) : -triple_charge.at(ap);
1016 if (ap == K0) return 0;
1017 if (ap == GEANTINO0) return 0;
1018 if (ap == GEANTINOPLUS) return p.pid() > 0 ? 3 : -3;
1019 if (ap == MAVTOP) return p.pid() > 0 ? 2 : -2;
1020 size_t nq = 0;
1021 int sign = 1;
1022 int signmult = 1;
1023 int result=0;
1024 bool classified = false;
1025 if (!classified && isMeson(p)) { classified = true; nq = 2; if ((*(p.second.rbegin()+2)) == 2||(*(p.second.rbegin()+2)) == 4 ) { sign=-1;} signmult =-1; }
1026 if (!classified && isDiquark(p)) {return triple_charge.at(p(0))+triple_charge.at(p(1)); }
1027 if (!classified && isBaryon(p)) { classified = true; nq = 3; }
1028 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)); }
1029 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)); }
1030 if (!classified && isNucleus(p)) { return 3*numberOfProtons(p);}
1031 if (!classified && isSUSY(p)) {
1032 nq = 0;
1033 auto pp = p.shift(1);
1034 if (pp.ndigits() < 3 ) { return charge3(pp); } // super-partners of fundamental particles
1035 if (pp(0) == COMPOSITEGLUON) {
1036 if (pp(1) == COMPOSITEGLUON) { return 0; } // R-Glueballs
1037 if ( pp.ndigits() == 4 || pp.ndigits() == 5) {
1038 pp = pp.shift(1); // Remove gluino
1039 }
1040 }
1041 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
1042 if (pp.ndigits() == 4) { classified = true; nq = 3; } // states with squark-quark-quark or quark-quark-quark
1043 }
1044 if (!classified && isHiddenValley(p)) { // Hidden Valley particles
1045 auto pp = p.shift(2);
1046 if (!classified && isMeson(pp)) { classified = true; nq = 2; if ((*(pp.second.rbegin()+2)) == 2||(*(pp.second.rbegin()+2)) == 4 ) { sign=-1;} signmult =-1; }
1047 if (!classified && isDiquark(pp)) {return triple_charge.at(pp(0))+triple_charge.at(pp(1)); }
1048 if (!classified && isBaryon(pp)) { classified = true; nq = 3; }
1049 }
1050 if (!classified && isExcited(p)) { //Excited/composite leptons/quarks
1051 auto pp = p.shift(2);
1052 auto ap = std::abs(pp.pid());
1053 if (ap < TABLESIZE ) return pp.pid() > 0 ? triple_charge.at(ap) : -triple_charge.at(ap);
1054 }
1055 if (!classified && isKK(p)) { // Kaluza-Klein particles
1056 auto pp = p.shift(2);
1057 auto ap = std::abs(pp.pid());
1058 if (ap < TABLESIZE ) return pp.pid() > 0 ? triple_charge.at(ap) : -triple_charge.at(ap);
1059
1060 }
1061 if (!classified && isDM(p.pid())) { //Dark Matter Particles
1062 if (p.ndigits() == 7){ // Determining the charges for the more elaborate, 7-digit DM codes
1063 auto pp = p.shift(3); // The first two digits indicate the particle is DM, the third indicates left/right-handedness (see 11(j))
1064 auto ap = std::abs(pp.pid());
1065 if (ap < TABLESIZE ) return pp.pid() > 0 ? triple_charge.at(ap) : -triple_charge.at(ap);
1066 }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
1067 }
1068 if (!classified && isMonopole(p)) {
1071 result = 3*(p(3)*100 + p(4)*10 + p(5));
1072 return ( (p.pid() > 0 && p(2) == 1) || (p.pid() < 0 && p(2) == 2) ) ? result : -result;
1073 }
1074 if (!classified && isGenericMultichargedParticle(p)) {
1075 double abs_charge = 0.0;
1076 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
1077 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
1078 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
1079 return p.pid() > 0 ? abs_threecharge : -1 * abs_threecharge;
1080 }
1081 for (auto r = p.second.rbegin() + 1; r != p.second.rbegin() + 1 + nq; ++r) {
1082 result += triple_charge.at(*r)*sign;
1083 sign*=signmult;
1084 }
1085 return p.pid() > 0 ? result : -result;
1086}
int numberOfProtons(const T &p)
Definition AtlasPID.h:839
static const int TABLESIZE
Definition AtlasPID.h:34
static const int K0
Definition AtlasPID.h:115
static const int MAVTOP
Definition AtlasPID.h:107
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:542
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:651
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:674
static const int GEANTINOPLUS
PDG rule 10: Codes 81–100 are reserved for generator-specific pseudoparticles and concepts.
Definition AtlasPID.h:164
static const int GEANTINO0
Definition AtlasPID.h:165
bool isKK(const T &p)
PDG rule 11h A black hole in models with extra dimensions has code 5000040.
Definition AtlasPID.h:641
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:664
int sign(int a)
int r
Definition globals.cxx:22

◆ charge3() [2/3]

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

Definition at line 1087 of file AtlasPID.h.

1087 {
1088 int ap = std::abs(p);
1089 if (ap < TABLESIZE) return p > 0 ? triple_charge.at(ap):-triple_charge.at(ap);
1090 auto value_digits = DecodedPID(p);
1091 return charge3(value_digits);
1092}

◆ charge3() [3/3]

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

Definition at line 1001 of file AtlasPID.h.

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

◆ containedQuarks() [1/3]

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

Definition at line 1186 of file AtlasPID.h.

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

◆ containedQuarks() [2/3]

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

Definition at line 1164 of file AtlasPID.h.

1164 {
1165 auto pp = DecodedPID(p);
1166 std::vector<int> quarks;
1167 if (isQuark(pp.pid())) { quarks.push_back(std::abs(pp.pid())); }
1168 else if (isDiquark(pp)) { quarks.push_back(pp(0)); quarks.push_back(pp(1)); }
1169 else if (isMeson(pp)) { quarks.push_back(*(pp.second.rbegin() + 1)); quarks.push_back(*(pp.second.rbegin()+2)); }
1170 else if (isBaryon(pp)) { for (size_t digit = 1; digit < 4; ++digit) { quarks.push_back(*(pp.second.rbegin() + digit)); } }
1171 else if (isTetraquark(pp)) { for (size_t digit = 1; digit < 5; ++digit) { quarks.push_back(*(pp.second.rbegin() + digit)); } }
1172 else if (isPentaquark(pp)) { for (size_t digit = 1; digit < 6; ++digit) { quarks.push_back(*(pp.second.rbegin() + digit)); } }
1173 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));
1174 const int n_uquarks = A + Z; const int n_dquarks = 2*A - Z - L; const int n_squarks = L;
1175 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); }
1176 else if (isSUSY(pp)) { // APID SUSY case
1177 pp = pp.shift(1);
1178 if ( pp.ndigits() > 1 ) { // skip squarks
1179 if ( pp.ndigits() == 3 ) { pp = DecodedPID(pp(1)); } // Handle ~q qbar pairs
1180 if ( pp.ndigits() > 3 ) { pp = pp.shift(1); } // Drop gluinos and squarks
1181 return containedQuarks(pp.pid());
1182 }
1183 }
1184 return quarks;
1185}
int numberOfLambdas(const T &p)
Definition AtlasPID.h:830
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 1163 of file AtlasPID.h.

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

◆ fractionalCharge() [1/3]

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

Definition at line 1100 of file AtlasPID.h.

1100 {
1101 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
1102 double abs_charge = 0;
1103 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
1104 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
1105 return p.pid() > 0 ? abs_charge : -1 * abs_charge;
1106}

◆ fractionalCharge() [2/3]

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

Definition at line 1107 of file AtlasPID.h.

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

◆ fractionalCharge() [3/3]

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

Definition at line 1002 of file AtlasPID.h.

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

◆ hasBottom()

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

Definition at line 744 of file AtlasPID.h.

744{ 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 743 of file AtlasPID.h.

743{ 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 722 of file AtlasPID.h.

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

◆ hasQuark() [2/3]

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

Definition at line 740 of file AtlasPID.h.

740{ 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 617 of file AtlasPID.h.

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

◆ hasSquark() [2/3]

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

Definition at line 624 of file AtlasPID.h.

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

◆ hasSquark() [3/3]

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

Definition at line 616 of file AtlasPID.h.

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

◆ hasStrange()

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

Definition at line 742 of file AtlasPID.h.

742{ 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 745 of file AtlasPID.h.

745{ 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 289 of file AtlasPID.h.

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

◆ isBaryon() [2/3]

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

Definition at line 322 of file AtlasPID.h.

322{ 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 288 of file AtlasPID.h.

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

◆ isBBbarMeson() [1/3]

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

Definition at line 933 of file AtlasPID.h.

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

◆ isBBbarMeson() [2/3]

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

Definition at line 934 of file AtlasPID.h.

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

◆ isBBbarMeson() [3/3]

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

Definition at line 932 of file AtlasPID.h.

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

◆ isBoson() [1/3]

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

Definition at line 377 of file AtlasPID.h.

377{ 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:375

◆ isBoson() [2/3]

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

Definition at line 376 of file AtlasPID.h.

376{ 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 375 of file AtlasPID.h.

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

◆ isBottom() [1/2]

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

Definition at line 189 of file AtlasPID.h.

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

◆ isBottom() [2/2]

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

Definition at line 188 of file AtlasPID.h.

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

◆ isBottomBaryon()

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

Definition at line 941 of file AtlasPID.h.

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

◆ isBottomHadron()

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

Definition at line 918 of file AtlasPID.h.

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

◆ isBottomMeson()

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

Definition at line 925 of file AtlasPID.h.

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

◆ isBSM() [1/3]

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

Definition at line 853 of file AtlasPID.h.

853 {
854 if (p.pid() == GRAVITON || std::abs(p.pid()) == MAVTOP || p.pid() == DARKPHOTON) return true;
855 if (std::abs(p.pid()) > 16 && std::abs(p.pid()) < 19) return true;
856 if (std::abs(p.pid()) > 31 && std::abs(p.pid()) < 39) return true;
857 if (std::abs(p.pid()) > 39 && std::abs(p.pid()) < 81) return true;
858 if (std::abs(p.pid()) > 6 && std::abs(p.pid()) < 9) return true;
859 if (isSUSY(p)) return true;
860 if (isNeutrinoRH(p.pid())) return true;
861 if (isGenericMultichargedParticle(p)) return true;
862 if (isTechnicolor(p)) return true;
863 if (isExcited(p)) return true;
864 if (isKK(p)) return true;
865 if (isHiddenValley(p)) return true;
866 if (isMonopole(p)) return true;
867 if (isDM(p.pid())) return true;
868 return false;
869}
static const int GRAVITON
Definition AtlasPID.h:98
bool isTechnicolor(const T &p)
PDG rule 11e Technicolor states have n = 3, with technifermions treated like ordinary fermions.
Definition AtlasPID.h:530
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:426
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 870 of file AtlasPID.h.

870 {
871 if (p == GRAVITON || std::abs(p) == MAVTOP || p == DARKPHOTON) return true;
872 if (std::abs(p) > 16 && std::abs(p) < 19) return true;
873 if (std::abs(p) > 31 && std::abs(p) < 38) return true;
874 if (std::abs(p) > 39 && std::abs(p) < 81) return true;
875 if (std::abs(p) > 6 && std::abs(p) < 9) return true;
876 auto value_digits = DecodedPID(p); return isBSM(value_digits);
877}
bool isBSM(const T &p)
APID: graviton and all Higgs extensions are BSM.
Definition AtlasPID.h:852

◆ isBSM() [3/3]

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

APID: graviton and all Higgs extensions are BSM.

Definition at line 852 of file AtlasPID.h.

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

◆ isCCbarMeson() [1/3]

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

Definition at line 929 of file AtlasPID.h.

929{ 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 930 of file AtlasPID.h.

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

◆ isCCbarMeson() [3/3]

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

Definition at line 928 of file AtlasPID.h.

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

◆ isCharged()

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

Definition at line 1010 of file AtlasPID.h.

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

◆ isCharm() [1/2]

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

Definition at line 186 of file AtlasPID.h.

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

◆ isCharm() [2/2]

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

Definition at line 185 of file AtlasPID.h.

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

◆ isCharmBaryon()

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

Definition at line 940 of file AtlasPID.h.

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

◆ isCharmHadron()

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

Definition at line 917 of file AtlasPID.h.

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

◆ isCharmMeson()

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

Definition at line 924 of file AtlasPID.h.

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

◆ isChLepton() [1/2]

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

Definition at line 206 of file AtlasPID.h.

206{ 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 205 of file AtlasPID.h.

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

◆ isDiquark() [1/3]

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

Definition at line 234 of file AtlasPID.h.

234 {
235 if ( p.ndigits() == 4 && p(0) >= p(1) && p(1) !=0 && p(2) == 0 && (p.last() == 1 || p.last() == 3)
236 && p.max_digit(2,4) < QUARK_LIMIT
237 ) return true;
238 return false;
239}

◆ isDiquark() [2/3]

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

Definition at line 240 of file AtlasPID.h.

240{ 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 233 of file AtlasPID.h.

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

◆ isDM() [1/2]

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

Definition at line 665 of file AtlasPID.h.

665 {
666 auto sp = std::abs(p);
667 auto value_digits = DecodedPID(p);
668 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 664 of file AtlasPID.h.

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

◆ isElectron() [1/2]

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

Definition at line 209 of file AtlasPID.h.

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

◆ isElectron() [2/2]

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

Definition at line 208 of file AtlasPID.h.

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

◆ isEMInteracting() [1/2]

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

Definition at line 1111 of file AtlasPID.h.

1111{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:1003
bool isZ(const T &p)
Definition AtlasPID.h:385
bool isPhoton(const T &p)
Definition AtlasPID.h:382

◆ isEMInteracting() [2/2]

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

Definition at line 1110 of file AtlasPID.h.

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

◆ isExcited() [1/3]

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

Definition at line 544 of file AtlasPID.h.

544 {
545 const auto& pp = (p.ndigits() == 7) ? p.shift(2) : DecodedPID(0);
546 return (p.ndigits() == 7 && (p(0) == 4 && p(1) == 0) &&
547 (isLepton(pp) || isQuark(pp)));
548}
bool isLepton(const T &p)
APID: the fourth generation leptons are leptons.
Definition AtlasPID.h:195

◆ isExcited() [2/3]

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

Definition at line 549 of file AtlasPID.h.

549{ 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 542 of file AtlasPID.h.

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

◆ isFourthGeneration() [1/2]

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

Definition at line 227 of file AtlasPID.h.

227{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 226 of file AtlasPID.h.

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

◆ isGaugino() [1/3]

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

Definition at line 511 of file AtlasPID.h.

511 {
512 auto pp = p.shift(1); return (p.ndigits() == 7 && p(0) == 1 && isBoson(pp.pid()));
513}

◆ isGaugino() [2/3]

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

Definition at line 514 of file AtlasPID.h.

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

◆ isGaugino() [3/3]

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

Definition at line 510 of file AtlasPID.h.

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

◆ isGeantino() [1/2]

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

Definition at line 444 of file AtlasPID.h.

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

◆ isGeantino() [2/2]

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

Definition at line 443 of file AtlasPID.h.

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

◆ isGenericMultichargedParticle() [1/3]

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

Definition at line 691 of file AtlasPID.h.

691{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 692 of file AtlasPID.h.

692{ 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 690 of file AtlasPID.h.

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

◆ isGenSpecific() [1/2]

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

Definition at line 432 of file AtlasPID.h.

432 {
433 int ap = std::abs(p);
434 if (ap >= 81 && ap <= 100) return true;
435 if (ap >= 901 && ap <= 930) return true;
436 if (ap >= 998 && ap <= 999) return true;
437 if (ap >= 1901 && ap <= 1930) return true;
438 if (ap >= 2901 && ap <= 2930) return true;
439 if (ap >= 3901 && ap <= 3930) return true;
440 return false;
441}

◆ 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 431 of file AtlasPID.h.

431{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:431

◆ isGlueball() [1/3]

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

Definition at line 448 of file AtlasPID.h.

448 {
449 if (p.ndigits() > 4) return false; // APID avoid classifying R-Glueballs as SM Glueballs
450 return
451 ( ( p.ndigits() == 3 && p(0) == COMPOSITEGLUON && p(1) == COMPOSITEGLUON && (p.last() == 1 || p.last() == 5) ) ||
452 ( p.ndigits() == 4 && p(0) == COMPOSITEGLUON && p(1) == COMPOSITEGLUON && p(2) == COMPOSITEGLUON && (p.last() == 3 || p.last() == 7) ) );
453}

◆ isGlueball() [2/3]

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

Definition at line 454 of file AtlasPID.h.

454{ 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:447

◆ 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 447 of file AtlasPID.h.

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

◆ isGluon() [1/2]

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

Definition at line 380 of file AtlasPID.h.

380{ 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 379 of file AtlasPID.h.

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

◆ isGraviton() [1/2]

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

Definition at line 404 of file AtlasPID.h.

404{ return p == GRAVITON; }

◆ isGraviton() [2/2]

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

Definition at line 403 of file AtlasPID.h.

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

◆ isHadron() [1/3]

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

Definition at line 358 of file AtlasPID.h.

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

◆ isHadron() [2/3]

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

Definition at line 359 of file AtlasPID.h.

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

◆ isHadron() [3/3]

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

Definition at line 357 of file AtlasPID.h.

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

◆ isHeavyBaryon()

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

Definition at line 938 of file AtlasPID.h.

938{ 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 393 of file AtlasPID.h.

393{ 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 392 of file AtlasPID.h.

392{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:392

◆ isHeavyHadron()

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

Definition at line 915 of file AtlasPID.h.

915{ 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 922 of file AtlasPID.h.

922{ 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 676 of file AtlasPID.h.

676 {
677 const auto& pp = (p.ndigits() == 7) ? p.shift(2) : DecodedPID(0);
678 return (p.ndigits() == 7 && p(0) == 4 && p(1) == 9 &&
679 (isQuark(pp) || isLepton(pp) || isBoson(pp) || isGlueball(pp) ||
680 isDiquark(pp) || isHadron(pp)));
681}

◆ isHiddenValley() [2/3]

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

Definition at line 682 of file AtlasPID.h.

682{ 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 674 of file AtlasPID.h.

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

◆ isHiggs() [1/2]

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

Definition at line 397 of file AtlasPID.h.

397{ 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 396 of file AtlasPID.h.

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

◆ isKK() [1/3]

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

Definition at line 642 of file AtlasPID.h.

642{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 643 of file AtlasPID.h.

643{ 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 641 of file AtlasPID.h.

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

◆ isLepton() [1/3]

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

Definition at line 197 of file AtlasPID.h.

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

◆ isLepton() [2/3]

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

Definition at line 196 of file AtlasPID.h.

196{ 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 195 of file AtlasPID.h.

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

◆ isLeptoQuark() [1/2]

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

Definition at line 415 of file AtlasPID.h.

415{ 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 414 of file AtlasPID.h.

414{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:414

◆ isLightBaryon()

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

Definition at line 937 of file AtlasPID.h.

937{ 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 914 of file AtlasPID.h.

914{ 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 921 of file AtlasPID.h.

921{ 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 251 of file AtlasPID.h.

251 {
252 if (p.ndigits() < 3 ) return false;
253 if (p.ndigits() == 7 && (p(0) == 1 || p(0) == 2)) return false; // APID don't match SUSY particles
254 if (std::abs(p.pid()) == K0S) return true;
255 if (std::abs(p.pid()) == K0L) return true;
256 if (std::abs(p.pid()) == K0) return true;
257 if (p.last() % 2 != 1 ) return false;
258 if (p.max_digit(1,3) >= QUARK_LIMIT ) return false; // Ignore pdg_ids which would describe states including fourth generation quarks
259 if (p.min_digit(1,3) == 0 ) return false;
260 if (*(p.second.rbegin() + 2) < *(p.second.rbegin() + 1) ) return false; // Quark ordering (nq2 >= nq3)
261 if (*(p.second.rbegin() + 2) == *(p.second.rbegin() + 1) && p.pid() < 0 ) return false; // Illegal antiparticle check (nq2 == nq3)
262 if (p.ndigits() == 3 ) return true;
263 if (*(p.second.rbegin() + 3) != 0 ) return false; // Only two quarks! (nq1 == 0)
264 if (p.ndigits() == 5 && p(0) == 1 ) return true;
265 if (p.ndigits() == 5 && p(0) == 2 && p.last() > 1 ) return true;
266 if (p.ndigits() == 5 && p(0) == 3 && p.last() > 1 ) return true;
267 if (p.ndigits() == 6 && p.last() % 2 == 1 ) return true;
268 if (p.ndigits() == 7 && p(0) == 9 && p(1) == 0 ) return true;
269
270 return false;
271}
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 272 of file AtlasPID.h.

272{ 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 250 of file AtlasPID.h.

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

◆ isMonopole() [1/3]

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

Definition at line 652 of file AtlasPID.h.

652{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 653 of file AtlasPID.h.

653{ 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 651 of file AtlasPID.h.

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

◆ isMSSMHiggs() [1/2]

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

Definition at line 401 of file AtlasPID.h.

401{ 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 400 of file AtlasPID.h.

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

◆ isMuon() [1/2]

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

Definition at line 212 of file AtlasPID.h.

212{ 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 211 of file AtlasPID.h.

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

◆ isNeutral() [1/3]

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

Definition at line 1096 of file AtlasPID.h.

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

◆ isNeutral() [2/3]

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

Definition at line 1097 of file AtlasPID.h.

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

◆ isNeutral() [3/3]

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

Definition at line 1095 of file AtlasPID.h.

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

◆ isNeutrino() [1/2]

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

Definition at line 219 of file AtlasPID.h.

219{ 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 218 of file AtlasPID.h.

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

◆ isNeutrinoRH() [1/2]

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

Definition at line 427 of file AtlasPID.h.

427{ 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 426 of file AtlasPID.h.

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

◆ isNucleus() [1/3]

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

Definition at line 709 of file AtlasPID.h.

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

◆ isNucleus() [2/3]

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

Definition at line 718 of file AtlasPID.h.

718{ 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 708 of file AtlasPID.h.

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

◆ isParton()

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

Definition at line 1113 of file AtlasPID.h.

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

◆ isPentaquark() [1/3]

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

Definition at line 349 of file AtlasPID.h.

349 {
350 return (p.ndigits() == 9 && p(0) == 1 &&
351 p.max_digit(1,6) < QUARK_LIMIT && p.min_digit(1,6) > 0 && // ignore 4th generation (anti-)quarks
352 ( p(3) >= p(4) && p(4) >= p(5) && p(5) >= p(6)) );
353}

◆ isPentaquark() [2/3]

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

Definition at line 354 of file AtlasPID.h.

354{ 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 348 of file AtlasPID.h.

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

◆ isPhoton() [1/2]

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

Definition at line 383 of file AtlasPID.h.

383{ 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 382 of file AtlasPID.h.

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

◆ isPythia8Specific() [1/3]

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

Definition at line 418 of file AtlasPID.h.

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

◆ isPythia8Specific() [2/3]

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

Definition at line 419 of file AtlasPID.h.

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

◆ isPythia8Specific() [3/3]

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

Definition at line 417 of file AtlasPID.h.

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

◆ isQuark() [1/3]

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

Definition at line 175 of file AtlasPID.h.

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

◆ isQuark() [2/3]

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

Definition at line 174 of file AtlasPID.h.

174{ 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 173 of file AtlasPID.h.

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

◆ isQuarkonium() [1/3]

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

Definition at line 280 of file AtlasPID.h.

280 {
281 if (!isMeson(p)) return false; //< all quarkonia are mesons
282 return (*(p.second.rbegin() + 2) > SQUARK && p.last() > 0 && *(p.second.rbegin() + 1) == *(p.second.rbegin() + 2));
283}

◆ isQuarkonium() [2/3]

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

Definition at line 284 of file AtlasPID.h.

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

◆ 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 279 of file AtlasPID.h.

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

◆ isRBaryon() [1/3]

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

Definition at line 596 of file AtlasPID.h.

596 {
597 if (!(p.ndigits() == 7 && (p(0) == 1 || p(0) == 2))) return false;
598 auto pp = p.shift(1);
599 return (
600 // Handle ~gluino-quark-quark-quark states
601 (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)) ||
602 // Handle squark-quark-quark states (previously called Sbaryons)
603 (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))
604 );
605}

◆ isRBaryon() [2/3]

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

Definition at line 606 of file AtlasPID.h.

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

◆ isRBaryon() [3/3]

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

Definition at line 595 of file AtlasPID.h.

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

◆ isResonance()

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

Definition at line 406 of file AtlasPID.h.

406{ 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:388
bool isTop(const T &p)
Definition AtlasPID.h:191

◆ isRGlueball() [1/3]

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

Definition at line 569 of file AtlasPID.h.

569 {
570 if (p.ndigits() != 7 || p(0) != 1) return false;
571 auto pp = p.shift(1);
572 return
573 ( ( pp.ndigits() == 3 && pp(0) == COMPOSITEGLUON && pp(1) == COMPOSITEGLUON && (pp.last() == 1 || pp.last() == 3) ) ||
574 ( pp.ndigits() == 4 && pp(0) == COMPOSITEGLUON && pp(1) == COMPOSITEGLUON && pp(2) == COMPOSITEGLUON && (pp.last() == 1 || pp.last() == 5) ) );
575}

◆ isRGlueball() [2/3]

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

Definition at line 576 of file AtlasPID.h.

576{ 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:568

◆ 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 568 of file AtlasPID.h.

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

◆ isRHadron() [1/3]

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

Definition at line 610 of file AtlasPID.h.

610 {
611 return (isRBaryon(p) || isRMeson(p) || isRGlueball(p));
612}
bool isRMeson(const T &p)
Definition AtlasPID.h:580

◆ isRHadron() [2/3]

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

Definition at line 613 of file AtlasPID.h.

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

◆ isRHadron() [3/3]

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

Definition at line 609 of file AtlasPID.h.

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

◆ isRMeson() [1/3]

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

Definition at line 581 of file AtlasPID.h.

581 {
582 if (!(p.ndigits() == 7 && (p(0) == 1 || p(0) == 2))) return false;
583 auto pp = p.shift(1);
584 return (
585 // Handle ~gluino-quark-antiquark states
586 (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)) ||
587 // Handle squark-antiquark states (previously called Smeson/mesoninos)
588 (pp.ndigits() == 3 && pp.min_digit(1,3) > 0 && pp.max_digit(1,3) < QUARK_LIMIT && pp(1) <= pp(0) && pp.last() == 2)
589 );
590}

◆ isRMeson() [2/3]

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

Definition at line 591 of file AtlasPID.h.

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

◆ isRMeson() [3/3]

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

Definition at line 580 of file AtlasPID.h.

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

◆ isSlepton() [1/3]

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

Definition at line 489 of file AtlasPID.h.

489{ 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:200

◆ isSlepton() [2/3]

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

Definition at line 490 of file AtlasPID.h.

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

◆ isSlepton() [3/3]

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

Definition at line 488 of file AtlasPID.h.

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

◆ isSleptonLH() [1/3]

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

Definition at line 495 of file AtlasPID.h.

495 {
496 auto pp = p.shift(1); return (p.ndigits() == 7 && p(0) == 1 && isSMLepton(pp));
497}

◆ isSleptonLH() [2/3]

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

Definition at line 498 of file AtlasPID.h.

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

◆ isSleptonLH() [3/3]

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

Definition at line 494 of file AtlasPID.h.

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

◆ isSleptonRH() [1/3]

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

Definition at line 503 of file AtlasPID.h.

503 {
504 auto pp = p.shift(1); return (p.ndigits() == 7 && p(0) == 2 && isSMLepton(pp));
505}

◆ isSleptonRH() [2/3]

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

Definition at line 506 of file AtlasPID.h.

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

◆ isSleptonRH() [3/3]

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

Definition at line 502 of file AtlasPID.h.

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

◆ isSMLepton() [1/3]

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

Definition at line 202 of file AtlasPID.h.

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

◆ isSMLepton() [2/3]

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

Definition at line 201 of file AtlasPID.h.

201{ 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 200 of file AtlasPID.h.

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

◆ isSMNeutrino() [1/2]

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

Definition at line 222 of file AtlasPID.h.

222{ 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 221 of file AtlasPID.h.

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

◆ isSMQuark() [1/3]

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

Definition at line 180 of file AtlasPID.h.

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

◆ isSMQuark() [2/3]

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

Definition at line 179 of file AtlasPID.h.

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

◆ isSMQuark() [3/3]

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

Definition at line 178 of file AtlasPID.h.

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

◆ isSquark() [1/3]

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

Definition at line 465 of file AtlasPID.h.

465 {
466 auto pp = p.shift(1); return (p.ndigits() == 7 && (p(0) == 1 || p(0) == 2) && isSMQuark(pp));
467}

◆ isSquark() [2/3]

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

Definition at line 468 of file AtlasPID.h.

468{ 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 464 of file AtlasPID.h.

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

◆ isSquarkLH() [1/3]

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

Definition at line 473 of file AtlasPID.h.

473 {
474 auto pp = p.shift(1); return (p.ndigits() == 7 && p(0) == 1 && isSMQuark(pp));
475}

◆ isSquarkLH() [2/3]

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

Definition at line 476 of file AtlasPID.h.

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

◆ isSquarkLH() [3/3]

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

Definition at line 472 of file AtlasPID.h.

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

◆ isSquarkRH() [1/3]

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

Definition at line 481 of file AtlasPID.h.

481 {
482 auto pp = p.shift(1); return (p.ndigits() == 7 && p(0) == 2 && isSMQuark(pp));
483}

◆ isSquarkRH() [2/3]

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

Definition at line 484 of file AtlasPID.h.

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

◆ isSquarkRH() [3/3]

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

Definition at line 480 of file AtlasPID.h.

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

◆ isStrange() [1/2]

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

Definition at line 183 of file AtlasPID.h.

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

◆ isStrange() [2/2]

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

Definition at line 182 of file AtlasPID.h.

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

◆ isStrangeBaryon()

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

Definition at line 939 of file AtlasPID.h.

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

◆ isStrangeHadron()

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

Definition at line 916 of file AtlasPID.h.

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

◆ isStrangeMeson()

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

Definition at line 923 of file AtlasPID.h.

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

◆ isStrongInteracting() [1/2]

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

Definition at line 1189 of file AtlasPID.h.

1189{ 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 1188 of file AtlasPID.h.

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

◆ isSuperpartner() [1/3]

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

Definition at line 519 of file AtlasPID.h.

519 {
520 return isSlepton(p) || isSquark(p) || isGaugino(p);
521}

◆ isSuperpartner() [2/3]

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

Definition at line 522 of file AtlasPID.h.

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

◆ isSuperpartner() [3/3]

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

Definition at line 518 of file AtlasPID.h.

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

◆ isSUSY() [1/3]

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

Definition at line 630 of file AtlasPID.h.

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

◆ isSUSY() [2/3]

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

Definition at line 631 of file AtlasPID.h.

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

◆ isSUSY() [3/3]

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

Definition at line 629 of file AtlasPID.h.

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

◆ isTau() [1/2]

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

Definition at line 215 of file AtlasPID.h.

215{ 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 214 of file AtlasPID.h.

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

◆ isTechnicolor() [1/3]

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

Definition at line 532 of file AtlasPID.h.

532 {
533 const auto& pp = (p.ndigits() == 7) ? p.shift(2) : DecodedPID(0);
534 return (p.ndigits() == 7 && p(0) == 3 && (p(1) == 0 || p(1) == 1) &&
535 (isQuark(pp) || isLepton(pp) || isBoson(pp) || isGlueball(pp) ||
536 isDiquark(pp) || isHadron(pp)));
537}

◆ isTechnicolor() [2/3]

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

Definition at line 538 of file AtlasPID.h.

538{ 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 530 of file AtlasPID.h.

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

◆ isTetraquark() [1/3]

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

Definition at line 332 of file AtlasPID.h.

332 {
333 return (p.ndigits() == 9 && p(0) == 1 && p(5) == 0 &&
334 p.max_digit(1,3) < QUARK_LIMIT && p.min_digit(1,3) > 0 && // ignore 4th generation quarks for nq3 and nq4
335 p.max_digit(4,6) < QUARK_LIMIT && p.min_digit(4,6) > 0 && // ignore 4th generation quarks for nq1 and nq2
336 ( p(3) >= p(4) && p(6) >= p(7) ) && ( ( p(3) > p(6) ) || ( p(3) == p(6) && (p(4) >= p(7))))
337 );
338}

◆ isTetraquark() [2/3]

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

Definition at line 339 of file AtlasPID.h.

339{ 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 331 of file AtlasPID.h.

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

◆ isTop() [1/2]

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

Definition at line 192 of file AtlasPID.h.

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

◆ isTop() [2/2]

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

Definition at line 191 of file AtlasPID.h.

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

◆ isTopBaryon()

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

Definition at line 942 of file AtlasPID.h.

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

◆ isTopHadron()

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

Definition at line 919 of file AtlasPID.h.

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

◆ isTopMeson()

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

Definition at line 926 of file AtlasPID.h.

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

◆ isTrajectory() [1/2]

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

Definition at line 366 of file AtlasPID.h.

366{ return std::abs(p) == POMERON || std::abs(p) == ODDERON || std::abs(p) == REGGEON; }
static const int REGGEON
Definition AtlasPID.h:157
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:155
static const int ODDERON
Definition AtlasPID.h:156

◆ 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 365 of file AtlasPID.h.

365{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:365

◆ isTransportable() [1/3]

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

Definition at line 880 of file AtlasPID.h.

880{ 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 881 of file AtlasPID.h.

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

◆ isTransportable() [3/3]

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

Definition at line 879 of file AtlasPID.h.

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

◆ isValid() [1/3]

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

Definition at line 885 of file AtlasPID.h.

885 {
886 return p.pid() !=0 && ( isQuark(p) || isLepton(p) || isBoson(p) || isGlueball(p) ||
887 isTrajectory(p.pid()) || isGenSpecific(p.pid()) || isDiquark(p) ||
888 isBSM(p) || isHadron(p) || isNucleus(p) || isGeantino(p.pid()) ||
889 isPythia8Specific(p) ); }

◆ isValid() [2/3]

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

Definition at line 890 of file AtlasPID.h.

890 { if (!p) return false; if (std::abs(p) < 42) return true;
891 if (isGenSpecific(p)) return true;
892 auto value_digits = DecodedPID(p); return isValid(value_digits);
893}

◆ 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 884 of file AtlasPID.h.

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

◆ isW() [1/2]

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

Definition at line 389 of file AtlasPID.h.

389{ 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 388 of file AtlasPID.h.

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

◆ isWeaklyDecayingBHadron() [1/3]

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

Definition at line 974 of file AtlasPID.h.

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

◆ isWeaklyDecayingBHadron() [2/3]

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

Definition at line 949 of file AtlasPID.h.

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

◆ isWeaklyDecayingBHadron() [3/3]

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

Definition at line 948 of file AtlasPID.h.

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

◆ isWeaklyDecayingCHadron() [1/3]

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

Definition at line 998 of file AtlasPID.h.

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

◆ isWeaklyDecayingCHadron() [2/3]

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

Definition at line 984 of file AtlasPID.h.

984 {
985 const int pid = std::abs(p);
986 return ( pid == 411 || // D+
987 pid == 421 || // D0
988 pid == 431 || // Ds+
989 pid == 4122 || // Lambda_c+
990 pid == 4132 || // Xi_c0
991 pid == 4232 || // Xi_c+
992 pid == 4212 || // Xi_c0
993 pid == 4332 || // Omega_c0
994 pid == 4412 || // Xi_cc+
995 pid == 4422 || // Xi_cc++
996 pid == 4432 ); // Omega_cc+
997}

◆ isWeaklyDecayingCHadron() [3/3]

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

Definition at line 983 of file AtlasPID.h.

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

◆ isZ() [1/2]

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

Definition at line 386 of file AtlasPID.h.

386{ 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 385 of file AtlasPID.h.

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

◆ leadingQuark() [1/3]

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

Definition at line 896 of file AtlasPID.h.

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

◆ leadingQuark() [2/3]

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

Definition at line 912 of file AtlasPID.h.

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

◆ leadingQuark() [3/3]

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

Definition at line 895 of file AtlasPID.h.

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

◆ numberOfLambdas() [1/3]

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

Definition at line 831 of file AtlasPID.h.

831 {
832 if (std::abs(p.pid()) == LAMBDA0) { return (p.pid() > 0) ? 1 : -1; }
833 if (isNucleus(p) && p.ndigits() == 10) { return (p.pid() > 0) ? p(2) : -p(2); }
834 return 0;
835}
static const int LAMBDA0
Definition AtlasPID.h:126

◆ numberOfLambdas() [2/3]

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

Definition at line 836 of file AtlasPID.h.

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

◆ numberOfLambdas() [3/3]

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

Definition at line 830 of file AtlasPID.h.

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

◆ numberOfProtons() [1/3]

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

Definition at line 840 of file AtlasPID.h.

840 {
841 if (std::abs(p.pid()) == PROTON) { return (p.pid() > 0) ? 1 : -1; }
842 if (isNucleus(p)) {
843 const int result = p(5) + 10*p(4) + 100*p(3);
844 return (p.pid() > 0) ? result : -result;
845 }
846 return 0;
847}

◆ numberOfProtons() [2/3]

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

Definition at line 848 of file AtlasPID.h.

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

◆ numberOfProtons() [3/3]

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

Definition at line 839 of file AtlasPID.h.

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

◆ spin() [1/3]

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

Definition at line 1158 of file AtlasPID.h.

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

◆ spin() [2/3]

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

Definition at line 1159 of file AtlasPID.h.

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

◆ spin() [3/3]

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

Definition at line 1157 of file AtlasPID.h.

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

◆ spin2() [1/3]

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

Definition at line 1118 of file AtlasPID.h.

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

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

◆ spin2() [3/3]

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

Definition at line 1117 of file AtlasPID.h.

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

◆ strangeness() [1/3]

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

Definition at line 793 of file AtlasPID.h.

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

◆ strangeness() [2/3]

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

Definition at line 827 of file AtlasPID.h.

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

◆ strangeness() [3/3]

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

Definition at line 792 of file AtlasPID.h.

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

◆ threeCharge()

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

Definition at line 1009 of file AtlasPID.h.

1009{ return charge3(p);}

Variable Documentation

◆ ARGON

const int ARGON = 1000180400
static

Definition at line 145 of file AtlasPID.h.

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

◆ BORON

const int BORON = 1000050110
static

Definition at line 149 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.

◆ CALCIUM

const int CALCIUM = 1000200400
static

Definition at line 144 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 165 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 164 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 150 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.

◆ INDIUM

const int INDIUM = 1000491150
static

Definition at line 142 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 790 of file AtlasPID.h.

790 {
791 +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.

◆ KRYPTON

const int KRYPTON = 1000360840
static

Definition at line 143 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.

◆ MAGNESIUM

const int MAGNESIUM = 1000120240
static

Definition at line 146 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 147 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 156 of file AtlasPID.h.

◆ OXYGEN

const int OXYGEN = 1000080160
static

Definition at line 148 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 155 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 157 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.