Notebook: https://github.com/eduardo-rodrigues/2019-10-16_PyHEP2019Workshop
It also provided an experimental file with extended information (spin, quark content, P and C parities, etc.) until 2008 only, see here (not widely known!).
But *anyone* wanting to use these data, the only readily available, has to parse the file programmatically.
Search and query ...
!python -m particle --version
particle 0.6.2
!python -m particle -h
usage: particle [-h] [--version] {search,pdgid} ... Particle command line display utility. Has two modes. positional arguments: {search,pdgid} Subcommands search Look up particles by PID or name (Ex.: python -m particle search D+ D-) pdgid Print info from PID (Ex.: python -m particle pdgid 11 13) optional arguments: -h, --help show this help message and exit --version show program's version number and exit
Print all information from a PDG ID:
!python -m particle pdgid 211
<PDGID: 211> A None C None J 0.0 L 0 P -1 S 0 Z None abspid 211 charge 1.0 has_bottom False has_charm False has_down True has_fundamental_anti False has_strange False has_top False has_up True is_Qball False is_Rhadron False is_SUSY False is_baryon False is_diquark False is_dyon False is_hadron True is_lepton False is_meson True is_nucleus False is_pentaquark False is_valid True j_spin 1 l_spin 1 s_spin 1 three_charge 3
Search a particle by its PDG ID - return description summary of particle:
!python -m particle search 211
Name: pi+ ID: 211 Latex: $\pi^{+}$ Mass = 139.57061 ± 0.00024 MeV Lifetime = 26.033 ± 0.005 ns Q (charge) = + J (total angular) = 0.0 P (space parity) = - C (charge parity) = ? I (isospin) = 1 G (G-parity) = - SpinType: SpinType.PseudoScalar Quarks: uD Antiparticle name: pi- (antiparticle status: ChargeInv)
Search a particle by its name - either return the description summary of matching particle ...
!python -m particle search "pi(1400)+"
Name: pi(1)(1400)+ ID: 9000213 Latex: $\pi_{1}(1400)^{+}$ Mass = 1354 ± 25 MeV Width = 330 ± 35 MeV Q (charge) = + J (total angular) = 1.0 P (space parity) = - C (charge parity) = ? I (isospin) = 1 G (G-parity) = - SpinType: SpinType.Vector Quarks: Maybe non-qQ Antiparticle name: pi(1)(1400)- (antiparticle status: ChargeInv)
... or a list of particles matching the keyword in their names:
!python -m particle search "pi+"
<Particle: name="pi+", pdgid=211, mass=139.57061 ± 0.00024 MeV> <Particle: name="pi(2)(1670)+", pdgid=10215, mass=1670.6 + 2.9 - 1.2 MeV> <Particle: name="pi(1300)+", pdgid=100211, mass=1300 ± 100 MeV> <Particle: name="pi(1)(1400)+", pdgid=9000213, mass=1354 ± 25 MeV> <Particle: name="pi(1800)+", pdgid=9010211, mass=1810 + 9 - 11 MeV> <Particle: name="pi(1)(1600)+", pdgid=9010213, mass=1660 + 15 - 11 MeV>
Package provides a zipapp version - one file that runs on any computer with Python, no other dependencies! Find it attached to releases.
Example:
./particle.pyz search gamma
All dependencies are installed inside the zipapp, and the data lookup is handled in a zip-safe way inside particle. Python 3 is used to make the zipapp, but including the backports makes it work on Python 2 as well.
PDGID
class and MC ID classes¶PDGID
, PythiaID
, GeantID
.particle.converters
: Geant2PDGIDBiMap
, etc.PDGID
for PDG IDs.from particle import PDGID
pid = PDGID(211)
pid
<PDGID: 211>
PDGID(99999999)
<PDGID: 99999999 (is_valid==False)>
from particle.pdgid import is_meson
pid.is_meson, is_meson(pid)
(True, True)
To print all PDGID
properties:
print(pid.info())
A None C None J 0.0 L 0 P -1 S 0 Z None abspid 211 charge 1.0 has_bottom False has_charm False has_down True has_fundamental_anti False has_strange False has_top False has_up True is_Qball False is_Rhadron False is_SUSY False is_baryon False is_diquark False is_dyon False is_hadron True is_lepton False is_meson True is_nucleus False is_pentaquark False is_valid True j_spin 1 l_spin 1 s_spin 1 three_charge 3
PythiaID
and GeantID
.particle.converters
: Geant2PDGIDBiMap
, etc.from particle import PythiaID, GeantID
pyid = PythiaID(10221)
pyid.to_pdgid()
<PDGID: 9010221>
Conversions are directly available via mapping classes.
E.g., bi-directional map Pythia ID - PDG ID:
from particle.converters import Pythia2PDGIDBiMap
Pythia2PDGIDBiMap[PDGID(9010221)]
<PythiaID: 10221>
Pythia2PDGIDBiMap[PythiaID(10221)]
<PDGID: 9010221>
Particle
class¶There are lots of ways to create a particle.
from particle import Particle
Particle.from_pdgid(211)
Particle.from_string('pi+')
Simple and natural API to deal with the PDG particle data table,
with powerful 1-line search and look-up utilities!
Particle.find(…)
– search a single match (exception raised if multiple particles match the search specifications).Particle.findall(…)
– search a list of candidates.
Search methods that can query any particle property!
Particle.find('J/psi')
You can specify search terms as keywords - any particle property:
Particle.find(latex_name=r'\phi(1020)')
Some properties have enums available. For example, you can directly check the numeric charge:
Particle.findall('pi', charge=-1)
[<Particle: name="pi-", pdgid=-211, mass=139.57061 ± 0.00024 MeV>, <Particle: name="pi(2)(1670)-", pdgid=-10215, mass=1670.6 + 2.9 - 1.2 MeV>, <Particle: name="pi(1300)-", pdgid=-100211, mass=1300 ± 100 MeV>, <Particle: name="pi(1)(1400)-", pdgid=-9000213, mass=1354 ± 25 MeV>, <Particle: name="pi(1800)-", pdgid=-9010211, mass=1810 + 9 - 11 MeV>, <Particle: name="pi(1)(1600)-", pdgid=-9010213, mass=1660 + 15 - 11 MeV>]
Or you can use the enum (for charge, this is 3 times the charge, hence the name three_charge
)
from particle import Charge
Particle.findall('pi', three_charge=Charge.p)
[<Particle: name="pi+", pdgid=211, mass=139.57061 ± 0.00024 MeV>, <Particle: name="pi(2)(1670)+", pdgid=10215, mass=1670.6 + 2.9 - 1.2 MeV>, <Particle: name="pi(1300)+", pdgid=100211, mass=1300 ± 100 MeV>, <Particle: name="pi(1)(1400)+", pdgid=9000213, mass=1354 ± 25 MeV>, <Particle: name="pi(1800)+", pdgid=9010211, mass=1810 + 9 - 11 MeV>, <Particle: name="pi(1)(1600)+", pdgid=9010213, mass=1660 + 15 - 11 MeV>]
Or use a lambda function for the ultimate in generality! For example, to find all the neutral particles with a bottom quark between 5.2 and 5.3 GeV:
from hepunits import GeV, s # Units are good. Use them.
Particle.findall(lambda p:
p.pdgid.has_bottom
and p.charge==0
and 5.2*GeV < p.mass < 5.3*GeV
)
[<Particle: name="B0", pdgid=511, mass=5279.64 ± 0.13 MeV>, <Particle: name="B~0", pdgid=-511, mass=5279.64 ± 0.13 MeV>]
Another lambda function example: You can use the width or the lifetime:
Particle.findall(lambda p: p.lifetime > 1000*s)
[<Particle: name="e-", pdgid=11, mass=0.510998946 ± 0.000000003 MeV>, <Particle: name="e+", pdgid=-11, mass=0.510998946 ± 0.000000003 MeV>, <Particle: name="nu(e)", pdgid=12, mass=0.0 MeV>, <Particle: name="nu(e)~", pdgid=-12, mass=0.0 MeV>, <Particle: name="nu(mu)", pdgid=14, mass=0.0 MeV>, <Particle: name="nu(mu)~", pdgid=-14, mass=0.0 MeV>, <Particle: name="nu(tau)", pdgid=16, mass=0.0 MeV>, <Particle: name="nu(tau)~", pdgid=-16, mass=0.0 MeV>, <Particle: name="g", pdgid=21, mass=0.0 MeV>, <Particle: name="gamma", pdgid=22, mass=0.0 MeV>, <Particle: name="H0", pdgid=25, mass=125100 ± 140 MeV>, <Particle: name="B*+", pdgid=523, mass=5324.70 ± 0.22 MeV>, <Particle: name="B*-", pdgid=-523, mass=5324.70 ± 0.22 MeV>, <Particle: name="p", pdgid=2212, mass=938.272081 ± 0.000006 MeV>, <Particle: name="p~", pdgid=-2212, mass=938.272081 ± 0.000006 MeV>, <Particle: name="h(b)(1P)", pdgid=10553, mass=9899.3 ± 0.8 MeV>, <Particle: name="Upsilon(2)(1D)", pdgid=20555, mass=10163.7 ± 1.4 MeV>, <Particle: name="Lambda(c)(2625)+", pdgid=104122, mass=2628.11 ± 0.19 MeV>, <Particle: name="Lambda(c)(2625)~-", pdgid=-104122, mass=2628.11 ± 0.19 MeV>, <Particle: name="Xi(1690)-", pdgid=203312, mass=1690 ± 10 MeV>, <Particle: name="Xi(1690)~+", pdgid=-203312, mass=1690 ± 10 MeV>, <Particle: name="Xi(1690)0", pdgid=203322, mass=1690 ± 10 MeV>, <Particle: name="Xi(1690)~0", pdgid=-203322, mass=1690 ± 10 MeV>]
If you want infinite lifetime, you could just use the keyword search instead:
Particle.findall(lifetime=float('inf'))
[<Particle: name="e-", pdgid=11, mass=0.510998946 ± 0.000000003 MeV>, <Particle: name="e+", pdgid=-11, mass=0.510998946 ± 0.000000003 MeV>, <Particle: name="nu(e)", pdgid=12, mass=0.0 MeV>, <Particle: name="nu(e)~", pdgid=-12, mass=0.0 MeV>, <Particle: name="nu(mu)", pdgid=14, mass=0.0 MeV>, <Particle: name="nu(mu)~", pdgid=-14, mass=0.0 MeV>, <Particle: name="nu(tau)", pdgid=16, mass=0.0 MeV>, <Particle: name="nu(tau)~", pdgid=-16, mass=0.0 MeV>, <Particle: name="g", pdgid=21, mass=0.0 MeV>, <Particle: name="gamma", pdgid=22, mass=0.0 MeV>, <Particle: name="H0", pdgid=25, mass=125100 ± 140 MeV>, <Particle: name="B*+", pdgid=523, mass=5324.70 ± 0.22 MeV>, <Particle: name="B*-", pdgid=-523, mass=5324.70 ± 0.22 MeV>, <Particle: name="p", pdgid=2212, mass=938.272081 ± 0.000006 MeV>, <Particle: name="p~", pdgid=-2212, mass=938.272081 ± 0.000006 MeV>, <Particle: name="h(b)(1P)", pdgid=10553, mass=9899.3 ± 0.8 MeV>, <Particle: name="Upsilon(2)(1D)", pdgid=20555, mass=10163.7 ± 1.4 MeV>, <Particle: name="Lambda(c)(2625)+", pdgid=104122, mass=2628.11 ± 0.19 MeV>, <Particle: name="Lambda(c)(2625)~-", pdgid=-104122, mass=2628.11 ± 0.19 MeV>, <Particle: name="Xi(1690)-", pdgid=203312, mass=1690 ± 10 MeV>, <Particle: name="Xi(1690)~+", pdgid=-203312, mass=1690 ± 10 MeV>, <Particle: name="Xi(1690)0", pdgid=203322, mass=1690 ± 10 MeV>, <Particle: name="Xi(1690)~0", pdgid=-203322, mass=1690 ± 10 MeV>]
Trivially find all pseudoscalar charm mesons:
from particle import SpinType
Particle.findall(lambda p: p.pdgid.is_meson and p.pdgid.has_charm and p.spin_type==SpinType.PseudoScalar)
[<Particle: name="D+", pdgid=411, mass=1869.65 ± 0.05 MeV>, <Particle: name="D-", pdgid=-411, mass=1869.65 ± 0.05 MeV>, <Particle: name="D0", pdgid=421, mass=1864.83 ± 0.05 MeV>, <Particle: name="D~0", pdgid=-421, mass=1864.83 ± 0.05 MeV>, <Particle: name="D(s)+", pdgid=431, mass=1968.34 ± 0.07 MeV>, <Particle: name="D(s)-", pdgid=-431, mass=1968.34 ± 0.07 MeV>, <Particle: name="eta(c)(1S)", pdgid=441, mass=2983.9 ± 0.5 MeV>, <Particle: name="B(c)+", pdgid=541, mass=6274.9 ± 0.8 MeV>, <Particle: name="B(c)-", pdgid=-541, mass=6274.9 ± 0.8 MeV>, <Particle: name="eta(c)(2S)", pdgid=100441, mass=3637.5 ± 1.1 MeV>]
Nice display in Jupyter notebooks, as well as str
and repr
support:
p = Particle.from_pdgid(-415)
p
print(p)
D(2)*(2460)-
print(repr(p))
<Particle: name="D(2)*(2460)-", pdgid=-415, mass=2465.4 ± 1.3 MeV>
Full descriptions:
print(p.describe())
Name: D(2)*(2460)- ID: -415 Latex: $D_{2}^{*}(2460)^{-}$ Mass = 2465.4 ± 1.3 MeV Width = 46.7 ± 1.2 MeV Q (charge) = - J (total angular) = 2.0 P (space parity) = + C (charge parity) = ? I (isospin) = 1/2 G (G-parity) = ? SpinType: SpinType.Tensor Quarks: Cd Antiparticle name: D(2)*(2460)+ (antiparticle status: ChargeInv)
You may find LaTeX or HTML to be more useful in your program; both are supported:
print(p.latex_name, '\n', p.html_name)
D_{2}^{*}(2460)^{-} D<SUB>2</SUB><SUP>*</SUP>(2460)<SUP>-</SUP>
It is easy to get hold of the whole list of particle (instances) as a list:
print('# of particles in loaded data table:', len(Particle.all()))
Particle.all()
# of particles in loaded data table: 536
[<Particle: name="d", pdgid=1, mass=4.67 + 0.50 - 0.20 MeV>, <Particle: name="d~", pdgid=-1, mass=4.67 + 0.50 - 0.20 MeV>, <Particle: name="u", pdgid=2, mass=2.2 + 0.5 - 0.3 MeV>, <Particle: name="u~", pdgid=-2, mass=2.2 + 0.5 - 0.3 MeV>, <Particle: name="s", pdgid=3, mass=93 + 11 - 5 MeV>, <Particle: name="s~", pdgid=-3, mass=93 + 11 - 5 MeV>, <Particle: name="c", pdgid=4, mass=1270 ± 20 MeV>, <Particle: name="c~", pdgid=-4, mass=1270 ± 20 MeV>, <Particle: name="b", pdgid=5, mass=4180 + 30 - 20 MeV>, <Particle: name="b~", pdgid=-5, mass=4180 + 30 - 20 MeV>, <Particle: name="t", pdgid=6, mass=173100 ± 900 MeV>, <Particle: name="t~", pdgid=-6, mass=173100 ± 900 MeV>, <Particle: name="e-", pdgid=11, mass=0.510998946 ± 0.000000003 MeV>, <Particle: name="e+", pdgid=-11, mass=0.510998946 ± 0.000000003 MeV>, <Particle: name="nu(e)", pdgid=12, mass=0.0 MeV>, <Particle: name="nu(e)~", pdgid=-12, mass=0.0 MeV>, <Particle: name="mu-", pdgid=13, mass=105.6583745 ± 0.0000024 MeV>, <Particle: name="mu+", pdgid=-13, mass=105.6583745 ± 0.0000024 MeV>, <Particle: name="nu(mu)", pdgid=14, mass=0.0 MeV>, <Particle: name="nu(mu)~", pdgid=-14, mass=0.0 MeV>, <Particle: name="tau-", pdgid=15, mass=1776.86 ± 0.12 MeV>, <Particle: name="tau+", pdgid=-15, mass=1776.86 ± 0.12 MeV>, <Particle: name="nu(tau)", pdgid=16, mass=0.0 MeV>, <Particle: name="nu(tau)~", pdgid=-16, mass=0.0 MeV>, <Particle: name="g", pdgid=21, mass=0.0 MeV>, <Particle: name="gamma", pdgid=22, mass=0.0 MeV>, <Particle: name="Z0", pdgid=23, mass=91187.6 ± 2.1 MeV>, <Particle: name="W+", pdgid=24, mass=80379 ± 12 MeV>, <Particle: name="W-", pdgid=-24, mass=80379 ± 12 MeV>, <Particle: name="H0", pdgid=25, mass=125100 ± 140 MeV>, <Particle: name="pi0", pdgid=111, mass=134.9770 ± 0.0005 MeV>, <Particle: name="rho(770)0", pdgid=113, mass=775.3 ± 0.2 MeV>, <Particle: name="a(2)(1320)0", pdgid=115, mass=1316.9 ± 0.9 MeV>, <Particle: name="rho(3)(1690)0", pdgid=117, mass=1688.8 ± 2.1 MeV>, <Particle: name="a(4)(1970)0", pdgid=119, mass=1967 ± 16 MeV>, <Particle: name="K(L)0", pdgid=130, mass=497.611 ± 0.013 MeV>, <Particle: name="pi+", pdgid=211, mass=139.57061 ± 0.00024 MeV>, <Particle: name="pi-", pdgid=-211, mass=139.57061 ± 0.00024 MeV>, <Particle: name="rho(770)+", pdgid=213, mass=775.3 ± 0.2 MeV>, <Particle: name="rho(770)-", pdgid=-213, mass=775.3 ± 0.2 MeV>, <Particle: name="a(2)(1320)+", pdgid=215, mass=1316.9 ± 0.9 MeV>, <Particle: name="a(2)(1320)-", pdgid=-215, mass=1316.9 ± 0.9 MeV>, <Particle: name="rho(3)(1690)+", pdgid=217, mass=1688.8 ± 2.1 MeV>, <Particle: name="rho(3)(1690)-", pdgid=-217, mass=1688.8 ± 2.1 MeV>, <Particle: name="a(4)(1970)+", pdgid=219, mass=1967 ± 16 MeV>, <Particle: name="a(4)(1970)-", pdgid=-219, mass=1967 ± 16 MeV>, <Particle: name="eta", pdgid=221, mass=547.862 ± 0.017 MeV>, <Particle: name="omega(782)", pdgid=223, mass=782.65 ± 0.12 MeV>, <Particle: name="f(2)(1270)", pdgid=225, mass=1275.5 ± 0.8 MeV>, <Particle: name="omega(3)(1670)", pdgid=227, mass=1667 ± 4 MeV>, <Particle: name="f(4)(2050)", pdgid=229, mass=2018 ± 11 MeV>, <Particle: name="K(S)0", pdgid=310, mass=497.611 ± 0.013 MeV>, <Particle: name="K0", pdgid=311, mass=497.611 ± 0.013 MeV>, <Particle: name="K~0", pdgid=-311, mass=497.611 ± 0.013 MeV>, <Particle: name="K*(892)0", pdgid=313, mass=895.55 ± 0.20 MeV>, <Particle: name="K*(892)~0", pdgid=-313, mass=895.55 ± 0.20 MeV>, <Particle: name="K(2)*(1430)0", pdgid=315, mass=1432.4 ± 1.3 MeV>, <Particle: name="K(2)*(1430)~0", pdgid=-315, mass=1432.4 ± 1.3 MeV>, <Particle: name="K(3)*(1780)0", pdgid=317, mass=1776 ± 7 MeV>, <Particle: name="K(3)*(1780)~0", pdgid=-317, mass=1776 ± 7 MeV>, <Particle: name="K(4)*(2045)0", pdgid=319, mass=2045 ± 9 MeV>, <Particle: name="K(4)*(2045)~0", pdgid=-319, mass=2045 ± 9 MeV>, <Particle: name="K+", pdgid=321, mass=493.677 ± 0.016 MeV>, <Particle: name="K-", pdgid=-321, mass=493.677 ± 0.016 MeV>, <Particle: name="K*(892)+", pdgid=323, mass=891.7 ± 0.3 MeV>, <Particle: name="K*(892)-", pdgid=-323, mass=891.7 ± 0.3 MeV>, <Particle: name="K(2)*(1430)+", pdgid=325, mass=1425.6 ± 1.5 MeV>, <Particle: name="K(2)*(1430)-", pdgid=-325, mass=1425.6 ± 1.5 MeV>, <Particle: name="K(3)*(1780)+", pdgid=327, mass=1776 ± 7 MeV>, <Particle: name="K(3)*(1780)-", pdgid=-327, mass=1776 ± 7 MeV>, <Particle: name="K(4)*(2045)+", pdgid=329, mass=2045 ± 9 MeV>, <Particle: name="K(4)*(2045)-", pdgid=-329, mass=2045 ± 9 MeV>, <Particle: name="eta'(958)", pdgid=331, mass=957.78 ± 0.06 MeV>, <Particle: name="phi(1020)", pdgid=333, mass=1019.461 ± 0.016 MeV>, <Particle: name="f(2)'(1525)", pdgid=335, mass=1525 ± 5 MeV>, <Particle: name="phi(3)(1850)", pdgid=337, mass=1854 ± 7 MeV>, <Particle: name="D+", pdgid=411, mass=1869.65 ± 0.05 MeV>, <Particle: name="D-", pdgid=-411, mass=1869.65 ± 0.05 MeV>, <Particle: name="D*(2010)+", pdgid=413, mass=2010.26 ± 0.05 MeV>, <Particle: name="D*(2010)-", pdgid=-413, mass=2010.26 ± 0.05 MeV>, <Particle: name="D(2)*(2460)+", pdgid=415, mass=2465.4 ± 1.3 MeV>, <Particle: name="D(2)*(2460)-", pdgid=-415, mass=2465.4 ± 1.3 MeV>, <Particle: name="D0", pdgid=421, mass=1864.83 ± 0.05 MeV>, <Particle: name="D~0", pdgid=-421, mass=1864.83 ± 0.05 MeV>, <Particle: name="D*(2007)0", pdgid=423, mass=2006.85 ± 0.05 MeV>, <Particle: name="D*(2007)~0", pdgid=-423, mass=2006.85 ± 0.05 MeV>, <Particle: name="D(2)*(2460)0", pdgid=425, mass=2460.7 ± 0.4 MeV>, <Particle: name="D(2)*(2460)~0", pdgid=-425, mass=2460.7 ± 0.4 MeV>, <Particle: name="D(s)+", pdgid=431, mass=1968.34 ± 0.07 MeV>, <Particle: name="D(s)-", pdgid=-431, mass=1968.34 ± 0.07 MeV>, <Particle: name="D(s)*+", pdgid=433, mass=2112.2 ± 0.4 MeV>, <Particle: name="D(s)*-", pdgid=-433, mass=2112.2 ± 0.4 MeV>, <Particle: name="D(s2)*(2573)+", pdgid=435, mass=2569.1 ± 0.8 MeV>, <Particle: name="D(s2)*(2573)-", pdgid=-435, mass=2569.1 ± 0.8 MeV>, <Particle: name="eta(c)(1S)", pdgid=441, mass=2983.9 ± 0.5 MeV>, <Particle: name="J/psi(1S)", pdgid=443, mass=3096.900 ± 0.006 MeV>, <Particle: name="chi(c2)(1P)", pdgid=445, mass=3556.17 ± 0.07 MeV>, <Particle: name="B0", pdgid=511, mass=5279.64 ± 0.13 MeV>, <Particle: name="B~0", pdgid=-511, mass=5279.64 ± 0.13 MeV>, <Particle: name="B*0", pdgid=513, mass=5324.70 ± 0.22 MeV>, <Particle: name="B*~0", pdgid=-513, mass=5324.70 ± 0.22 MeV>, <Particle: name="B(2)*(5747)0", pdgid=515, mass=5739.5 ± 0.7 MeV>, <Particle: name="B(2)*(5747)~0", pdgid=-515, mass=5739.5 ± 0.7 MeV>, <Particle: name="B+", pdgid=521, mass=5279.33 ± 0.13 MeV>, <Particle: name="B-", pdgid=-521, mass=5279.33 ± 0.13 MeV>, <Particle: name="B*+", pdgid=523, mass=5324.70 ± 0.22 MeV>, <Particle: name="B*-", pdgid=-523, mass=5324.70 ± 0.22 MeV>, <Particle: name="B(2)*(5747)+", pdgid=525, mass=5739.5 ± 0.7 MeV>, <Particle: name="B(2)*(5747)-", pdgid=-525, mass=5739.5 ± 0.7 MeV>, <Particle: name="B(s)0", pdgid=531, mass=5366.88 ± 0.17 MeV>, <Particle: name="B(s)~0", pdgid=-531, mass=5366.88 ± 0.17 MeV>, <Particle: name="B(s)*0", pdgid=533, mass=5415.4 + 1.8 - 1.5 MeV>, <Particle: name="B(s)*~0", pdgid=-533, mass=5415.4 + 1.8 - 1.5 MeV>, <Particle: name="B(s2)*(5840)0", pdgid=535, mass=5839.85 ± 0.12 MeV>, <Particle: name="B(s2)*(5840)~0", pdgid=-535, mass=5839.85 ± 0.12 MeV>, <Particle: name="B(c)+", pdgid=541, mass=6274.9 ± 0.8 MeV>, <Particle: name="B(c)-", pdgid=-541, mass=6274.9 ± 0.8 MeV>, <Particle: name="Upsilon(1S)", pdgid=553, mass=9460.3 ± 0.3 MeV>, <Particle: name="chi(b2)(1P)", pdgid=555, mass=9912.2 ± 0.3 MeV>, <Particle: name="Delta(1620)-", pdgid=1112, mass=1610 ± 20 MeV>, <Particle: name="Delta(1620)~+", pdgid=-1112, mass=1610 ± 20 MeV>, <Particle: name="Delta(1232)-", pdgid=1114, mass=1232.0 ± 2.0 MeV>, <Particle: name="Delta(1232)~+", pdgid=-1114, mass=1232.0 ± 2.0 MeV>, <Particle: name="Delta(1905)-", pdgid=1116, mass=1880 + 30 - 25 MeV>, <Particle: name="Delta(1905)~+", pdgid=-1116, mass=1880 + 30 - 25 MeV>, <Particle: name="Delta(1950)-", pdgid=1118, mass=1930 + 20 - 15 MeV>, <Particle: name="Delta(1950)~+", pdgid=-1118, mass=1930 + 20 - 15 MeV>, <Particle: name="Delta(1620)0", pdgid=1212, mass=1610 ± 20 MeV>, <Particle: name="Delta(1620)~0", pdgid=-1212, mass=1610 ± 20 MeV>, <Particle: name="N(1520)0", pdgid=1214, mass=1515 ± 5 MeV>, <Particle: name="N(1520)~0", pdgid=-1214, mass=1515 ± 5 MeV>, <Particle: name="Delta(1905)0", pdgid=1216, mass=1880 + 30 - 25 MeV>, <Particle: name="Delta(1905)~0", pdgid=-1216, mass=1880 + 30 - 25 MeV>, <Particle: name="N(2190)0", pdgid=1218, mass=2180 ± 40 MeV>, <Particle: name="N(2190)~0", pdgid=-1218, mass=2180 ± 40 MeV>, <Particle: name="n", pdgid=2112, mass=939.565413 ± 0.000006 MeV>, <Particle: name="n~", pdgid=-2112, mass=939.565413 ± 0.000006 MeV>, <Particle: name="Delta(1232)0", pdgid=2114, mass=1232.0 ± 2.0 MeV>, <Particle: name="Delta(1232)~0", pdgid=-2114, mass=1232.0 ± 2.0 MeV>, <Particle: name="N(1675)0", pdgid=2116, mass=1675 + 5 - 10 MeV>, <Particle: name="N(1675)~0", pdgid=-2116, mass=1675 + 5 - 10 MeV>, <Particle: name="Delta(1950)0", pdgid=2118, mass=1930 + 20 - 15 MeV>, <Particle: name="Delta(1950)~0", pdgid=-2118, mass=1930 + 20 - 15 MeV>, <Particle: name="Delta(1620)+", pdgid=2122, mass=1610 ± 20 MeV>, <Particle: name="Delta(1620)~-", pdgid=-2122, mass=1610 ± 20 MeV>, <Particle: name="N(1520)+", pdgid=2124, mass=1515 ± 5 MeV>, <Particle: name="N(1520)~-", pdgid=-2124, mass=1515 ± 5 MeV>, <Particle: name="Delta(1905)+", pdgid=2126, mass=1880 + 30 - 25 MeV>, <Particle: name="Delta(1905)~-", pdgid=-2126, mass=1880 + 30 - 25 MeV>, <Particle: name="N(2190)+", pdgid=2128, mass=2180 ± 40 MeV>, <Particle: name="N(2190)~-", pdgid=-2128, mass=2180 ± 40 MeV>, <Particle: name="p", pdgid=2212, mass=938.272081 ± 0.000006 MeV>, <Particle: name="p~", pdgid=-2212, mass=938.272081 ± 0.000006 MeV>, <Particle: name="Delta(1232)+", pdgid=2214, mass=1232.0 ± 2.0 MeV>, <Particle: name="Delta(1232)~-", pdgid=-2214, mass=1232.0 ± 2.0 MeV>, <Particle: name="N(1675)+", pdgid=2216, mass=1675 + 5 - 10 MeV>, <Particle: name="N(1675)~-", pdgid=-2216, mass=1675 + 5 - 10 MeV>, <Particle: name="Delta(1950)+", pdgid=2218, mass=1930 + 20 - 15 MeV>, <Particle: name="Delta(1950)~-", pdgid=-2218, mass=1930 + 20 - 15 MeV>, <Particle: name="Delta(1620)++", pdgid=2222, mass=1610 ± 20 MeV>, <Particle: name="Delta(1620)~--", pdgid=-2222, mass=1610 ± 20 MeV>, <Particle: name="Delta(1232)++", pdgid=2224, mass=1232.0 ± 2.0 MeV>, <Particle: name="Delta(1232)~--", pdgid=-2224, mass=1232.0 ± 2.0 MeV>, <Particle: name="Delta(1905)++", pdgid=2226, mass=1880 + 30 - 25 MeV>, <Particle: name="Delta(1905)~--", pdgid=-2226, mass=1880 + 30 - 25 MeV>, <Particle: name="Delta(1950)++", pdgid=2228, mass=1930 + 20 - 15 MeV>, <Particle: name="Delta(1950)~--", pdgid=-2228, mass=1930 + 20 - 15 MeV>, <Particle: name="Sigma-", pdgid=3112, mass=1197.45 ± 0.03 MeV>, <Particle: name="Sigma~+", pdgid=-3112, mass=1197.45 ± 0.03 MeV>, <Particle: name="Sigma(1385)-", pdgid=3114, mass=1387.2 ± 0.5 MeV>, <Particle: name="Sigma(1385)~+", pdgid=-3114, mass=1387.2 ± 0.5 MeV>, <Particle: name="Sigma(1775)-", pdgid=3116, mass=1775 ± 5 MeV>, <Particle: name="Sigma(1775)~+", pdgid=-3116, mass=1775 ± 5 MeV>, <Particle: name="Sigma(2030)-", pdgid=3118, mass=2030 + 10 - 5 MeV>, <Particle: name="Sigma(2030)~+", pdgid=-3118, mass=2030 + 10 - 5 MeV>, <Particle: name="Lambda", pdgid=3122, mass=1115.683 ± 0.006 MeV>, <Particle: name="Lambda~", pdgid=-3122, mass=1115.683 ± 0.006 MeV>, <Particle: name="Lambda(1520)", pdgid=3124, mass=1519.5 ± 1.0 MeV>, <Particle: name="Lambda(1520)~", pdgid=-3124, mass=1519.5 ± 1.0 MeV>, <Particle: name="Lambda(1820)", pdgid=3126, mass=1820 ± 5 MeV>, <Particle: name="Lambda(1820)~", pdgid=-3126, mass=1820 ± 5 MeV>, <Particle: name="Lambda(2100)", pdgid=3128, mass=2100 ± 10 MeV>, <Particle: name="Lambda(2100)~", pdgid=-3128, mass=2100 ± 10 MeV>, <Particle: name="Sigma0", pdgid=3212, mass=1192.642 ± 0.024 MeV>, <Particle: name="Sigma~0", pdgid=-3212, mass=1192.642 ± 0.024 MeV>, <Particle: name="Sigma(1385)0", pdgid=3214, mass=1383.7 ± 1.0 MeV>, <Particle: name="Sigma(1385)~0", pdgid=-3214, mass=1383.7 ± 1.0 MeV>, <Particle: name="Sigma(1775)0", pdgid=3216, mass=1775 ± 5 MeV>, <Particle: name="Sigma(1775)~0", pdgid=-3216, mass=1775 ± 5 MeV>, <Particle: name="Sigma(2030)0", pdgid=3218, mass=2030 + 10 - 5 MeV>, <Particle: name="Sigma(2030)~0", pdgid=-3218, mass=2030 + 10 - 5 MeV>, <Particle: name="Sigma+", pdgid=3222, mass=1189.37 ± 0.07 MeV>, <Particle: name="Sigma~-", pdgid=-3222, mass=1189.37 ± 0.07 MeV>, <Particle: name="Sigma(1385)+", pdgid=3224, mass=1382.8 ± 0.3 MeV>, <Particle: name="Sigma(1385)~-", pdgid=-3224, mass=1382.8 ± 0.3 MeV>, <Particle: name="Sigma(1775)+", pdgid=3226, mass=1775 ± 5 MeV>, <Particle: name="Sigma(1775)~-", pdgid=-3226, mass=1775 ± 5 MeV>, <Particle: name="Sigma(2030)+", pdgid=3228, mass=2030 + 10 - 5 MeV>, <Particle: name="Sigma(2030)~-", pdgid=-3228, mass=2030 + 10 - 5 MeV>, <Particle: name="Xi-", pdgid=3312, mass=1321.71 ± 0.07 MeV>, <Particle: name="Xi~+", pdgid=-3312, mass=1321.71 ± 0.07 MeV>, <Particle: name="Xi(1530)-", pdgid=3314, mass=1535.0 ± 0.6 MeV>, <Particle: name="Xi(1530)~+", pdgid=-3314, mass=1535.0 ± 0.6 MeV>, <Particle: name="Xi0", pdgid=3322, mass=1314.86 ± 0.20 MeV>, <Particle: name="Xi~0", pdgid=-3322, mass=1314.86 ± 0.20 MeV>, <Particle: name="Xi(1530)0", pdgid=3324, mass=1531.8 ± 0.3 MeV>, <Particle: name="Xi(1530)~0", pdgid=-3324, mass=1531.8 ± 0.3 MeV>, <Particle: name="Omega-", pdgid=3334, mass=1672.5 ± 0.3 MeV>, <Particle: name="Omega~+", pdgid=-3334, mass=1672.5 ± 0.3 MeV>, <Particle: name="Sigma(c)(2455)0", pdgid=4112, mass=2453.75 ± 0.14 MeV>, <Particle: name="Sigma(c)(2455)~0", pdgid=-4112, mass=2453.75 ± 0.14 MeV>, <Particle: name="Sigma(c)(2520)0", pdgid=4114, mass=2518.48 ± 0.20 MeV>, <Particle: name="Sigma(c)(2520)~0", pdgid=-4114, mass=2518.48 ± 0.20 MeV>, <Particle: name="Lambda(c)+", pdgid=4122, mass=2286.46 ± 0.14 MeV>, <Particle: name="Lambda(c)~-", pdgid=-4122, mass=2286.46 ± 0.14 MeV>, <Particle: name="Xi(c)0", pdgid=4132, mass=2470.9 ± 0.2 MeV>, <Particle: name="Xi(c)~0", pdgid=-4132, mass=2470.9 ± 0.2 MeV>, <Particle: name="Sigma(c)(2455)+", pdgid=4212, mass=2452.9 ± 0.4 MeV>, <Particle: name="Sigma(c)(2455)~-", pdgid=-4212, mass=2452.9 ± 0.4 MeV>, <Particle: name="Sigma(c)(2520)+", pdgid=4214, mass=2517.5 ± 2.3 MeV>, <Particle: name="Sigma(c)(2520)~-", pdgid=-4214, mass=2517.5 ± 2.3 MeV>, <Particle: name="Sigma(c)(2455)++", pdgid=4222, mass=2453.97 ± 0.14 MeV>, <Particle: name="Sigma(c)(2455)~--", pdgid=-4222, mass=2453.97 ± 0.14 MeV>, <Particle: name="Sigma(c)(2520)++", pdgid=4224, mass=2518.41 + 0.21 - 0.19 MeV>, <Particle: name="Sigma(c)(2520)~--", pdgid=-4224, mass=2518.41 + 0.21 - 0.19 MeV>, <Particle: name="Xi(c)+", pdgid=4232, mass=2467.93 ± 0.18 MeV>, <Particle: name="Xi(c)~-", pdgid=-4232, mass=2467.93 ± 0.18 MeV>, <Particle: name="Xi(c)'0", pdgid=4312, mass=2579.2 ± 0.5 MeV>, <Particle: name="Xi(c)'~0", pdgid=-4312, mass=2579.2 ± 0.5 MeV>, <Particle: name="Xi(c)(2645)0", pdgid=4314, mass=2646.38 ± 0.21 MeV>, <Particle: name="Xi(c)(2645)~0", pdgid=-4314, mass=2646.38 ± 0.21 MeV>, <Particle: name="Xi(c)'+", pdgid=4322, mass=2578.4 ± 0.5 MeV>, <Particle: name="Xi(c)'~-", pdgid=-4322, mass=2578.4 ± 0.5 MeV>, <Particle: name="Xi(c)(2645)+", pdgid=4324, mass=2645.6 ± 0.3 MeV>, <Particle: name="Xi(c)(2645)~-", pdgid=-4324, mass=2645.6 ± 0.3 MeV>, <Particle: name="Omega(c)0", pdgid=4332, mass=2695.2 ± 1.7 MeV>, <Particle: name="Omega(c)~0", pdgid=-4332, mass=2695.2 ± 1.7 MeV>, <Particle: name="Omega(c)(2770)0", pdgid=4334, mass=2765.9 ± 2.0 MeV>, <Particle: name="Omega(c)(2770)~0", pdgid=-4334, mass=2765.9 ± 2.0 MeV>, <Particle: name="Sigma(b)-", pdgid=5112, mass=5815.6 ± 0.3 MeV>, <Particle: name="Sigma(b)~+", pdgid=-5112, mass=5815.6 ± 0.3 MeV>, <Particle: name="Sigma(b)*-", pdgid=5114, mass=5834.7 ± 0.3 MeV>, <Particle: name="Sigma(b)*~+", pdgid=-5114, mass=5834.7 ± 0.3 MeV>, <Particle: name="Lambda(b)0", pdgid=5122, mass=5619.60 ± 0.17 MeV>, <Particle: name="Lambda(b)~0", pdgid=-5122, mass=5619.60 ± 0.17 MeV>, <Particle: name="Xi(b)-", pdgid=5132, mass=5797.0 ± 0.9 MeV>, <Particle: name="Xi(b)~+", pdgid=-5132, mass=5797.0 ± 0.9 MeV>, <Particle: name="Sigma(b)+", pdgid=5222, mass=5810.6 ± 0.2 MeV>, <Particle: name="Sigma(b)~-", pdgid=-5222, mass=5810.6 ± 0.2 MeV>, <Particle: name="Sigma(b)*+", pdgid=5224, mass=5830.3 ± 0.3 MeV>, <Particle: name="Sigma(b)*~-", pdgid=-5224, mass=5830.3 ± 0.3 MeV>, <Particle: name="Xi(b)0", pdgid=5232, mass=5791.9 ± 0.5 MeV>, <Particle: name="Xi(b)~0", pdgid=-5232, mass=5791.9 ± 0.5 MeV>, <Particle: name="Omega(b)-", pdgid=5332, mass=6046.1 ± 1.7 MeV>, <Particle: name="Omega(b)~+", pdgid=-5332, mass=6046.1 ± 1.7 MeV>, <Particle: name="a(0)(1450)0", pdgid=10111, mass=1467 ± 14 MeV>, <Particle: name="b(1)(1235)0", pdgid=10113, mass=1230 ± 3 MeV>, <Particle: name="pi(2)(1670)0", pdgid=10115, mass=1670.6 + 2.9 - 1.2 MeV>, <Particle: name="a(0)(1450)+", pdgid=10211, mass=1467 ± 14 MeV>, <Particle: name="a(0)(1450)-", pdgid=-10211, mass=1467 ± 14 MeV>, <Particle: name="b(1)(1235)+", pdgid=10213, mass=1230 ± 3 MeV>, <Particle: name="b(1)(1235)-", pdgid=-10213, mass=1230 ± 3 MeV>, <Particle: name="pi(2)(1670)+", pdgid=10215, mass=1670.6 + 2.9 - 1.2 MeV>, <Particle: name="pi(2)(1670)-", pdgid=-10215, mass=1670.6 + 2.9 - 1.2 MeV>, <Particle: name="f(0)(1370)", pdgid=10221, mass=1350 ± 150 MeV>, <Particle: name="h(1)(1170)", pdgid=10223, mass=1170 ± 20 MeV>, <Particle: name="eta(2)(1645)", pdgid=10225, mass=1617 ± 5 MeV>, <Particle: name="K(0)*(1430)0", pdgid=10311, mass=1430 ± 50 MeV>, <Particle: name="K(0)*(1430)~0", pdgid=-10311, mass=1430 ± 50 MeV>, <Particle: name="K(1)(1270)0", pdgid=10313, mass=1272 ± 7 MeV>, <Particle: name="K(1)(1270)~0", pdgid=-10313, mass=1272 ± 7 MeV>, <Particle: name="K(2)(1770)0", pdgid=10315, mass=1773 ± 8 MeV>, <Particle: name="K(2)(1770)~0", pdgid=-10315, mass=1773 ± 8 MeV>, <Particle: name="K(0)*(1430)+", pdgid=10321, mass=1430 ± 50 MeV>, <Particle: name="K(0)*(1430)-", pdgid=-10321, mass=1430 ± 50 MeV>, <Particle: name="K(1)(1270)+", pdgid=10323, mass=1272 ± 7 MeV>, <Particle: name="K(1)(1270)-", pdgid=-10323, mass=1272 ± 7 MeV>, <Particle: name="K(2)(1770)+", pdgid=10325, mass=1773 ± 8 MeV>, <Particle: name="K(2)(1770)-", pdgid=-10325, mass=1773 ± 8 MeV>, <Particle: name="f(0)(1710)", pdgid=10331, mass=1704 ± 12 MeV>, <Particle: name="h(1)(1415)", pdgid=10333, mass=1416 ± 8 MeV>, <Particle: name="D(0)*(2300)+", pdgid=10411, mass=2300 ± 19 MeV>, <Particle: name="D(0)*(2300)-", pdgid=-10411, mass=2300 ± 19 MeV>, <Particle: name="D(0)*(2300)0", pdgid=10421, mass=2300 ± 19 MeV>, <Particle: name="D(0)*(2300)~0", pdgid=-10421, mass=2300 ± 19 MeV>, <Particle: name="D(1)(2420)0", pdgid=10423, mass=2420.8 ± 0.5 MeV>, <Particle: name="D(1)(2420)~0", pdgid=-10423, mass=2420.8 ± 0.5 MeV>, <Particle: name="D(s0)*(2317)+", pdgid=10431, mass=2317.8 ± 0.5 MeV>, <Particle: name="D(s0)*(2317)-", pdgid=-10431, mass=2317.8 ± 0.5 MeV>, <Particle: name="D(s1)(2536)+", pdgid=10433, mass=2535.11 ± 0.06 MeV>, <Particle: name="D(s1)(2536)-", pdgid=-10433, mass=2535.11 ± 0.06 MeV>, <Particle: name="chi(c0)(1P)", pdgid=10441, mass=3414.7 ± 0.3 MeV>, <Particle: name="h(c)(1P)", pdgid=10443, mass=3525.38 ± 0.11 MeV>, <Particle: name="chi(b0)(1P)", pdgid=10551, mass=9859.4 ± 0.5 MeV>, <Particle: name="h(b)(1P)", pdgid=10553, mass=9899.3 ± 0.8 MeV>, <Particle: name="Delta(1900)-", pdgid=11112, mass=1860 + 60 - 20 MeV>, <Particle: name="Delta(1900)~+", pdgid=-11112, mass=1860 + 60 - 20 MeV>, <Particle: name="Delta(1700)-", pdgid=11114, mass=1710 ± 20 MeV>, <Particle: name="Delta(1700)~+", pdgid=-11114, mass=1710 ± 20 MeV>, <Particle: name="Delta(1930)-", pdgid=11116, mass=1950 ± 50 MeV>, <Particle: name="Delta(1930)~+", pdgid=-11116, mass=1950 ± 50 MeV>, <Particle: name="Delta(1900)0", pdgid=11212, mass=1860 + 60 - 20 MeV>, <Particle: name="Delta(1900)~0", pdgid=-11212, mass=1860 + 60 - 20 MeV>, <Particle: name="Delta(1930)0", pdgid=11216, mass=1950 ± 50 MeV>, <Particle: name="Delta(1930)~0", pdgid=-11216, mass=1950 ± 50 MeV>, <Particle: name="N(1440)0", pdgid=12112, mass=1440 ± 30 MeV>, <Particle: name="N(1440)~0", pdgid=-12112, mass=1440 ± 30 MeV>, <Particle: name="Delta(1700)0", pdgid=12114, mass=1710 ± 20 MeV>, <Particle: name="Delta(1700)~0", pdgid=-12114, mass=1710 ± 20 MeV>, <Particle: name="N(1680)0", pdgid=12116, mass=1685 ± 5 MeV>, <Particle: name="N(1680)~0", pdgid=-12116, mass=1685 ± 5 MeV>, <Particle: name="Delta(1900)+", pdgid=12122, mass=1860 + 60 - 20 MeV>, <Particle: name="Delta(1900)~-", pdgid=-12122, mass=1860 + 60 - 20 MeV>, <Particle: name="Delta(1930)+", pdgid=12126, mass=1950 ± 50 MeV>, <Particle: name="Delta(1930)~-", pdgid=-12126, mass=1950 ± 50 MeV>, <Particle: name="N(1440)+", pdgid=12212, mass=1440 ± 30 MeV>, <Particle: name="N(1440)~-", pdgid=-12212, mass=1440 ± 30 MeV>, <Particle: name="Delta(1700)+", pdgid=12214, mass=1710 ± 20 MeV>, <Particle: name="Delta(1700)~-", pdgid=-12214, mass=1710 ± 20 MeV>, <Particle: name="N(1680)+", pdgid=12216, mass=1685 ± 5 MeV>, <Particle: name="N(1680)~-", pdgid=-12216, mass=1685 ± 5 MeV>, <Particle: name="Delta(1900)++", pdgid=12222, mass=1860 + 60 - 20 MeV>, <Particle: name="Delta(1900)~--", pdgid=-12222, mass=1860 + 60 - 20 MeV>, <Particle: name="Delta(1700)++", pdgid=12224, mass=1710 ± 20 MeV>, <Particle: name="Delta(1700)~--", pdgid=-12224, mass=1710 ± 20 MeV>, <Particle: name="Delta(1930)++", pdgid=12226, mass=1950 ± 50 MeV>, <Particle: name="Delta(1930)~--", pdgid=-12226, mass=1950 ± 50 MeV>, <Particle: name="Sigma(1660)-", pdgid=13112, mass=1660 ± 30 MeV>, <Particle: name="Sigma(1660)~+", pdgid=-13112, mass=1660 ± 30 MeV>, <Particle: name="Sigma(1670)-", pdgid=13114, mass=1670 + 15 - 5 MeV>, <Particle: name="Sigma(1670)~+", pdgid=-13114, mass=1670 + 15 - 5 MeV>, <Particle: name="Sigma(1915)-", pdgid=13116, mass=1915 + 20 - 15 MeV>, <Particle: name="Sigma(1915)~+", pdgid=-13116, mass=1915 + 20 - 15 MeV>, <Particle: name="Lambda(1405)", pdgid=13122, mass=1405.1 + 1.3 - 1.0 MeV>, <Particle: name="Lambda(1405)~", pdgid=-13122, mass=1405.1 + 1.3 - 1.0 MeV>, <Particle: name="Lambda(1690)", pdgid=13124, mass=1690 ± 5 MeV>, <Particle: name="Lambda(1690)~", pdgid=-13124, mass=1690 ± 5 MeV>, <Particle: name="Lambda(1830)", pdgid=13126, mass=1830.0 MeV>, <Particle: name="Lambda(1830)~", pdgid=-13126, mass=1830.0 MeV>, <Particle: name="Sigma(1660)0", pdgid=13212, mass=1660 ± 30 MeV>, <Particle: name="Sigma(1660)~0", pdgid=-13212, mass=1660 ± 30 MeV>, <Particle: name="Sigma(1670)0", pdgid=13214, mass=1670 + 15 - 5 MeV>, <Particle: name="Sigma(1670)~0", pdgid=-13214, mass=1670 + 15 - 5 MeV>, <Particle: name="Sigma(1915)0", pdgid=13216, mass=1915 + 20 - 15 MeV>, <Particle: name="Sigma(1915)~0", pdgid=-13216, mass=1915 + 20 - 15 MeV>, <Particle: name="Sigma(1660)+", pdgid=13222, mass=1660 ± 30 MeV>, <Particle: name="Sigma(1660)~-", pdgid=-13222, mass=1660 ± 30 MeV>, <Particle: name="Sigma(1670)+", pdgid=13224, mass=1670 + 15 - 5 MeV>, <Particle: name="Sigma(1670)~-", pdgid=-13224, mass=1670 + 15 - 5 MeV>, <Particle: name="Sigma(1915)+", pdgid=13226, mass=1915 + 20 - 15 MeV>, <Particle: name="Sigma(1915)~-", pdgid=-13226, mass=1915 + 20 - 15 MeV>, <Particle: name="Xi(1820)-", pdgid=13314, mass=1823 ± 5 MeV>, <Particle: name="Xi(1820)~+", pdgid=-13314, mass=1823 ± 5 MeV>, <Particle: name="Xi(1820)0", pdgid=13324, mass=1823 ± 5 MeV>, <Particle: name="Xi(1820)~0", pdgid=-13324, mass=1823 ± 5 MeV>, <Particle: name="Lambda(c)(2595)+", pdgid=14122, mass=2592.2 ± 0.3 MeV>, <Particle: name="Lambda(c)(2595)~-", pdgid=-14122, mass=2592.2 ± 0.3 MeV>, <Particle: name="a(1)(1260)0", pdgid=20113, mass=1230 ± 40 MeV>, <Particle: name="a(1)(1260)+", pdgid=20213, mass=1230 ± 40 MeV>, <Particle: name="a(1)(1260)-", pdgid=-20213, mass=1230 ± 40 MeV>, <Particle: name="f(1)(1285)", pdgid=20223, mass=1281.9 ± 0.5 MeV>, <Particle: name="K(1)(1400)0", pdgid=20313, mass=1403 ± 7 MeV>, <Particle: name="K(1)(1400)~0", pdgid=-20313, mass=1403 ± 7 MeV>, <Particle: name="K(2)(1820)0", pdgid=20315, mass=1819 ± 12 MeV>, <Particle: name="K(2)(1820)~0", pdgid=-20315, mass=1819 ± 12 MeV>, <Particle: name="K(1)(1400)+", pdgid=20323, mass=1403 ± 7 MeV>, <Particle: name="K(1)(1400)-", pdgid=-20323, mass=1403 ± 7 MeV>, <Particle: name="K(2)(1820)+", pdgid=20325, mass=1819 ± 12 MeV>, <Particle: name="K(2)(1820)-", pdgid=-20325, mass=1819 ± 12 MeV>, <Particle: name="f(1)(1420)", pdgid=20333, mass=1426.4 ± 0.9 MeV>, <Particle: name="D(s1)(2460)+", pdgid=20433, mass=2459.5 ± 0.6 MeV>, <Particle: name="D(s1)(2460)-", pdgid=-20433, mass=2459.5 ± 0.6 MeV>, <Particle: name="chi(c1)(1P)", pdgid=20443, mass=3510.67 ± 0.05 MeV>, <Particle: name="chi(b1)(1P)", pdgid=20553, mass=9892.9 ± 0.3 MeV>, <Particle: name="Upsilon(2)(1D)", pdgid=20555, mass=10163.7 ± 1.4 MeV>, <Particle: name="Delta(1910)-", pdgid=21112, mass=1900 ± 50 MeV>, <Particle: name="Delta(1910)~+", pdgid=-21112, mass=1900 ± 50 MeV>, <Particle: name="Delta(1920)-", pdgid=21114, mass=1920 ± 50 MeV>, <Particle: name="Delta(1920)~+", pdgid=-21114, mass=1920 ± 50 MeV>, <Particle: name="Delta(1910)0", pdgid=21212, mass=1900 ± 50 MeV>, <Particle: name="Delta(1910)~0", pdgid=-21212, mass=1900 ± 50 MeV>, <Particle: name="N(1700)0", pdgid=21214, mass=1720 + 80 - 70 MeV>, <Particle: name="N(1700)~0", pdgid=-21214, mass=1720 + 80 - 70 MeV>, <Particle: name="N(1535)0", pdgid=22112, mass=1530 ± 15 MeV>, <Particle: name="N(1535)~0", pdgid=-22112, mass=1530 ± 15 MeV>, <Particle: name="Delta(1920)0", pdgid=22114, mass=1920 ± 50 MeV>, <Particle: name="Delta(1920)~0", pdgid=-22114, mass=1920 ± 50 MeV>, <Particle: name="Delta(1910)+", pdgid=22122, mass=1900 ± 50 MeV>, <Particle: name="Delta(1910)~-", pdgid=-22122, mass=1900 ± 50 MeV>, <Particle: name="N(1700)+", pdgid=22124, mass=1720 + 80 - 70 MeV>, <Particle: name="N(1700)~-", pdgid=-22124, mass=1720 + 80 - 70 MeV>, <Particle: name="N(1535)+", pdgid=22212, mass=1530 ± 15 MeV>, <Particle: name="N(1535)~-", pdgid=-22212, mass=1530 ± 15 MeV>, <Particle: name="Delta(1920)+", pdgid=22214, mass=1920 ± 50 MeV>, <Particle: name="Delta(1920)~-", pdgid=-22214, mass=1920 ± 50 MeV>, <Particle: name="Delta(1910)++", pdgid=22222, mass=1900 ± 50 MeV>, <Particle: name="Delta(1910)~--", pdgid=-22222, mass=1900 ± 50 MeV>, <Particle: name="Delta(1920)++", pdgid=22224, mass=1920 ± 50 MeV>, <Particle: name="Delta(1920)~--", pdgid=-22224, mass=1920 ± 50 MeV>, <Particle: name="Sigma(1750)-", pdgid=23112, mass=1750 + 50 - 20 MeV>, <Particle: name="Sigma(1750)~+", pdgid=-23112, mass=1750 + 50 - 20 MeV>, <Particle: name="Sigma(1940)-", pdgid=23114, mass=1940 + 10 - 40 MeV>, <Particle: name="Sigma(1940)~+", pdgid=-23114, mass=1940 + 10 - 40 MeV>, <Particle: name="Lambda(1600)", pdgid=23122, mass=1600 + 100 - 40 MeV>, <Particle: name="Lambda(1600)~", pdgid=-23122, mass=1600 + 100 - 40 MeV>, <Particle: name="Lambda(1890)", pdgid=23124, mass=1890 + 20 - 40 MeV>, <Particle: name="Lambda(1890)~", pdgid=-23124, mass=1890 + 20 - 40 MeV>, <Particle: name="Lambda(2110)", pdgid=23126, mass=2110 + 30 - 20 MeV>, <Particle: name="Lambda(2110)~", pdgid=-23126, mass=2110 + 30 - 20 MeV>, <Particle: name="Sigma(1750)0", pdgid=23212, mass=1750 + 50 - 20 MeV>, <Particle: name="Sigma(1750)~0", pdgid=-23212, mass=1750 + 50 - 20 MeV>, <Particle: name="Sigma(1940)0", pdgid=23214, mass=1940 + 10 - 40 MeV>, <Particle: name="Sigma(1940)~0", pdgid=-23214, mass=1940 + 10 - 40 MeV>, <Particle: name="Sigma(1750)+", pdgid=23222, mass=1750 + 50 - 20 MeV>, <Particle: name="Sigma(1750)~-", pdgid=-23222, mass=1750 + 50 - 20 MeV>, <Particle: name="Sigma(1940)+", pdgid=23224, mass=1940 + 10 - 40 MeV>, <Particle: name="Sigma(1940)~-", pdgid=-23224, mass=1940 + 10 - 40 MeV>, <Particle: name="rho(1700)0", pdgid=30113, mass=1720 ± 20 MeV>, <Particle: name="rho(1700)+", pdgid=30213, mass=1720 ± 20 MeV>, <Particle: name="rho(1700)-", pdgid=-30213, mass=1720 ± 20 MeV>, <Particle: name="omega(1650)", pdgid=30223, mass=1670 ± 30 MeV>, <Particle: name="K*(1680)0", pdgid=30313, mass=1718 ± 18 MeV>, <Particle: name="K*(1680)~0", pdgid=-30313, mass=1718 ± 18 MeV>, <Particle: name="K*(1680)+", pdgid=30323, mass=1718 ± 18 MeV>, <Particle: name="K*(1680)-", pdgid=-30323, mass=1718 ± 18 MeV>, <Particle: name="psi(3770)", pdgid=30443, mass=3773.1 ± 0.3 MeV>, <Particle: name="Delta(1600)-", pdgid=31114, mass=1570 ± 70 MeV>, <Particle: name="Delta(1600)~+", pdgid=-31114, mass=1570 ± 70 MeV>, <Particle: name="N(1720)0", pdgid=31214, mass=1720 + 30 - 40 MeV>, <Particle: name="N(1720)~0", pdgid=-31214, mass=1720 + 30 - 40 MeV>, <Particle: name="N(1650)0", pdgid=32112, mass=1650 ± 15 MeV>, <Particle: name="N(1650)~0", pdgid=-32112, mass=1650 ± 15 MeV>, <Particle: name="Delta(1600)0", pdgid=32114, mass=1570 ± 70 MeV>, <Particle: name="Delta(1600)~0", pdgid=-32114, mass=1570 ± 70 MeV>, <Particle: name="N(1720)+", pdgid=32124, mass=1720 + 30 - 40 MeV>, <Particle: name="N(1720)~-", pdgid=-32124, mass=1720 + 30 - 40 MeV>, <Particle: name="N(1650)+", pdgid=32212, mass=1650 ± 15 MeV>, <Particle: name="N(1650)~-", pdgid=-32212, mass=1650 ± 15 MeV>, <Particle: name="Delta(1600)+", pdgid=32214, mass=1570 ± 70 MeV>, <Particle: name="Delta(1600)~-", pdgid=-32214, mass=1570 ± 70 MeV>, <Particle: name="Delta(1600)++", pdgid=32224, mass=1570 ± 70 MeV>, <Particle: name="Delta(1600)~--", pdgid=-32224, mass=1570 ± 70 MeV>, <Particle: name="Lambda(1670)", pdgid=33122, mass=1670 ± 10 MeV>, <Particle: name="Lambda(1670)~", pdgid=-33122, mass=1670 ± 10 MeV>, <Particle: name="N(1710)0", pdgid=42112, mass=1710 ± 30 MeV>, <Particle: name="N(1710)~0", pdgid=-42112, mass=1710 ± 30 MeV>, <Particle: name="N(1710)+", pdgid=42212, mass=1710 ± 30 MeV>, <Particle: name="N(1710)~-", pdgid=-42212, mass=1710 ± 30 MeV>, <Particle: name="Lambda(1800)", pdgid=43122, mass=1800 + 50 - 80 MeV>, <Particle: name="Lambda(1800)~", pdgid=-43122, mass=1800 + 50 - 80 MeV>, <Particle: name="Lambda(1810)", pdgid=53122, mass=1810 + 40 - 60 MeV>, <Particle: name="Lambda(1810)~", pdgid=-53122, mass=1810 + 40 - 60 MeV>, <Particle: name="pi(1300)0", pdgid=100111, mass=1300 ± 100 MeV>, <Particle: name="rho(1450)0", pdgid=100113, mass=1465 ± 25 MeV>, <Particle: name="pi(1300)+", pdgid=100211, mass=1300 ± 100 MeV>, <Particle: name="pi(1300)-", pdgid=-100211, mass=1300 ± 100 MeV>, <Particle: name="rho(1450)+", pdgid=100213, mass=1465 ± 25 MeV>, <Particle: name="rho(1450)-", pdgid=-100213, mass=1465 ± 25 MeV>, <Particle: name="eta(1295)", pdgid=100221, mass=1294 ± 4 MeV>, <Particle: name="K*(1410)0", pdgid=100313, mass=1421 ± 9 MeV>, <Particle: name="K*(1410)~0", pdgid=-100313, mass=1421 ± 9 MeV>, <Particle: name="K*(1410)+", pdgid=100323, mass=1421 ± 9 MeV>, <Particle: name="K*(1410)-", pdgid=-100323, mass=1421 ± 9 MeV>, <Particle: name="eta(1475)", pdgid=100331, mass=1475 ± 4 MeV>, <Particle: name="phi(1680)", pdgid=100333, mass=1680 ± 20 MeV>, <Particle: name="eta(c)(2S)", pdgid=100441, mass=3637.5 ± 1.1 MeV>, <Particle: name="psi(2S)", pdgid=100443, mass=3686.10 ± 0.03 MeV>, <Particle: name="chi(c2)(3930)", pdgid=100445, mass=3927 ± 3 MeV>, <Particle: name="Upsilon(2S)", pdgid=100553, mass=10023.3 ± 0.3 MeV>, <Particle: name="chi(b2)(2P)", pdgid=100555, mass=10268.65 + 0.20 - 0.50 MeV>, <Particle: name="Xi(1950)-", pdgid=103316, mass=1950 ± 15 MeV>, <Particle: name="Xi(1950)~+", pdgid=-103316, mass=1950 ± 15 MeV>, <Particle: name="Xi(1950)0", pdgid=103326, mass=1950 ± 15 MeV>, <Particle: name="Xi(1950)~0", pdgid=-103326, mass=1950 ± 15 MeV>, <Particle: name="Lambda(c)(2625)+", pdgid=104122, mass=2628.11 ± 0.19 MeV>, <Particle: name="Lambda(c)(2625)~-", pdgid=-104122, mass=2628.11 ± 0.19 MeV>, <Particle: name="Xi(c)(2815)0", pdgid=104312, mass=2820.3 ± 0.3 MeV>, <Particle: name="Xi(c)(2815)~0", pdgid=-104312, mass=2820.3 ± 0.3 MeV>, <Particle: name="Xi(c)(2790)0", pdgid=104314, mass=2794.1 ± 0.5 MeV>, <Particle: name="Xi(c)(2790)~0", pdgid=-104314, mass=2794.1 ± 0.5 MeV>, <Particle: name="Xi(c)(2815)+", pdgid=104322, mass=2816.73 ± 0.21 MeV>, <Particle: name="Xi(c)(2815)~-", pdgid=-104322, mass=2816.73 ± 0.21 MeV>, <Particle: name="Xi(c)(2790)+", pdgid=104324, mass=2792.4 ± 0.5 MeV>, <Particle: name="Xi(c)(2790)~-", pdgid=-104324, mass=2792.4 ± 0.5 MeV>, <Particle: name="chi(b0)(2P)", pdgid=110551, mass=10232.5 + 0.4 - 0.5 MeV>, <Particle: name="chi(b1)(2P)", pdgid=120553, mass=10255.46 + 0.20 - 0.50 MeV>, <Particle: name="Upsilon(3S)", pdgid=200553, mass=10355.2 ± 0.5 MeV>, <Particle: name="Xi(1690)-", pdgid=203312, mass=1690 ± 10 MeV>, <Particle: name="Xi(1690)~+", pdgid=-203312, mass=1690 ± 10 MeV>, <Particle: name="Xi(2030)-", pdgid=203316, mass=2025 ± 5 MeV>, <Particle: name="Xi(2030)~+", pdgid=-203316, mass=2025 ± 5 MeV>, <Particle: name="Xi(1690)0", pdgid=203322, mass=1690 ± 10 MeV>, <Particle: name="Xi(1690)~0", pdgid=-203322, mass=1690 ± 10 MeV>, <Particle: name="Xi(2030)0", pdgid=203326, mass=2025 ± 5 MeV>, <Particle: name="Xi(2030)~0", pdgid=-203326, mass=2025 ± 5 MeV>, <Particle: name="Omega(2250)-", pdgid=203338, mass=2252 ± 9 MeV>, <Particle: name="Omega(2250)~+", pdgid=-203338, mass=2252 ± 9 MeV>, <Particle: name="Lambda(c)(2880)+", pdgid=204126, mass=2881.63 ± 0.24 MeV>, <Particle: name="Lambda(c)(2880)~-", pdgid=-204126, mass=2881.63 ± 0.24 MeV>, <Particle: name="Upsilon(4S)", pdgid=300553, mass=10579.4 ± 1.2 MeV>, <Particle: name="omega(1420)", pdgid=1000223, mass=1425 ± 25 MeV>, <Particle: name="a(0)(980)0", pdgid=9000111, mass=980 ± 20 MeV>, <Particle: name="pi(1)(1400)", pdgid=9000113, mass=1354 ± 25 MeV>, <Particle: name="a(2)(1700)0", pdgid=9000115, mass=1700 ± 40 MeV>, <Particle: name="a(0)(980)+", pdgid=9000211, mass=980 ± 20 MeV>, <Particle: name="a(0)(980)-", pdgid=-9000211, mass=980 ± 20 MeV>, <Particle: name="pi(1)(1400)+", pdgid=9000213, mass=1354 ± 25 MeV>, <Particle: name="pi(1)(1400)-", pdgid=-9000213, mass=1354 ± 25 MeV>, <Particle: name="a(2)(1700)+", pdgid=9000215, mass=1700 ± 40 MeV>, <Particle: name="a(2)(1700)-", pdgid=-9000215, mass=1700 ± 40 MeV>, <Particle: name="f(0)(500)", pdgid=9000221, mass=475 ± 75 MeV>, <Particle: name="K(0)*(700)0", pdgid=9000311, mass=824 ± 30 MeV>, <Particle: name="K(0)*(700)~0", pdgid=-9000311, mass=824 ± 30 MeV>, <Particle: name="K(0)*(700)+", pdgid=9000321, mass=824 ± 30 MeV>, <Particle: name="K(0)*(700)-", pdgid=-9000321, mass=824 ± 30 MeV>, <Particle: name="psi(4040)", pdgid=9000443, mass=4039.0 ± 1.0 MeV>, <Particle: name="Upsilon(10860)", pdgid=9000553, mass=10890 + 3 - 3 MeV>, <Particle: name="pi(1800)0", pdgid=9010111, mass=1810 + 9 - 11 MeV>, <Particle: name="pi(1)(1600)", pdgid=9010113, mass=1660 + 15 - 11 MeV>, <Particle: name="pi(1800)+", pdgid=9010211, mass=1810 + 9 - 11 MeV>, <Particle: name="pi(1800)-", pdgid=-9010211, mass=1810 + 9 - 11 MeV>, <Particle: name="pi(1)(1600)+", pdgid=9010213, mass=1660 + 15 - 11 MeV>, <Particle: name="pi(1)(1600)-", pdgid=-9010213, mass=1660 + 15 - 11 MeV>, <Particle: name="f(0)(980)", pdgid=9010221, mass=990 ± 20 MeV>, <Particle: name="psi(4160)", pdgid=9010443, mass=4191 ± 5 MeV>, <Particle: name="Upsilon(11020)", pdgid=9010553, mass=10993 + 10 - 3 MeV>, <Particle: name="a(1)(1640)0", pdgid=9020113, mass=1655 ± 16 MeV>, <Particle: name="a(1)(1640)+", pdgid=9020213, mass=1655 ± 16 MeV>, <Particle: name="a(1)(1640)-", pdgid=-9020213, mass=1655 ± 16 MeV>, <Particle: name="eta(1405)", pdgid=9020221, mass=1408.8 ± 2.0 MeV>, <Particle: name="psi(4415)", pdgid=9020443, mass=4421 ± 4 MeV>, <Particle: name="f(0)(1500)", pdgid=9030221, mass=1506 ± 6 MeV>, <Particle: name="f(2)(1950)", pdgid=9050225, mass=1936 ± 12 MeV>, <Particle: name="f(2)(2010)", pdgid=9060225, mass=2010 + 60 - 80 MeV>, <Particle: name="f(2)(2300)", pdgid=9080225, mass=2297 ± 28 MeV>, <Particle: name="f(2)(2340)", pdgid=9090225, mass=2350 + 50 - 40 MeV>]
You can do things to particles, like invert them:
~p
There are a plethora of properties you can access:
p.spin_type
<SpinType.Tensor: 3>
You can quickly access the PDGID of a particle:
p.pdgid
<PDGID: -415>
PDGID(p)
<PDGID: -415>
They provide a handy way to manipulate things with human-readable names!
Package defines literals for most common particles, with easily recognisable names.
PDGID
and Particle
classes.PDGID literals
from particle.pdgid import literals as lid
lid.phi_1020
<PDGID: 333>
Particle literals
from particle.particle import literals as lpart
lpart.phi_1020
particle/data/
¶PDG particle data files
Other data files
The Particle.dump_table(...)
method is rather flexible.
(No need to dig into the package installation directory to inspect the particle data table ;-).)
help(Particle.dump_table)
Help on method dump_table in module particle.particle.particle: dump_table(exclusive_fields=[], exclude_fields=[], n_rows=-1, filter_fn=None, filename=None, tablefmt='simple', floatfmt='.12g', numalign='decimal') method of builtins.type instance Dump the internal particle data CSV table, loading it from the default location if no table has yet been loaded. The table attributes are those of the class. By default all attributes are used as table fields. Their complete list is: pdgid pdg_name mass mass_upper mass_lower width width_upper width_lower three_charge I G P C anti_flag rank status quarks latex_name Optionally dump to a file. Parameters ---------- exclusive_fields: list, optional, default is [] Exclusive list of fields to print out. exclude_fields: list, optional, default is [] List of table fields to exclude in the printout. Relevant only when exclusive_fields is not given. n_rows: int, optional, defaults to all rows Number of table rows to print out. filter_fn: function, optional, default is None Apply a filter to each particle. See findall(...) for typical use cases. filename: str, optional, default is None Name of file where to dump the table. By default the table is dumped to stdout. tablefmt: str, optional, default is 'simple' Table formatting option, see the tabulate's package tabulate function for a description of available options. The most common options are: 'plain', 'simple', 'grid', 'rst', 'html', 'latex'. floatfmt: str, optional, default is '.12g' Number formatting, see the tabulate's package tabulate function for a description of available options. numalign: str or None, oprional, default is 'decimal' Column alignment for numbers, see the tabulate's package tabulate function for a description of available options. Note ---- Uses the `tabulate` package. Examples -------- Particle.dump_table() Particle.dump_table(n_rows=5) Particle.dump_table(exclusive_fields=['pdgid', 'pdg_name']) Particle.dump_table(filter_fn=lambda p: p.pdgid.has_bottom) Particle.dump_table(filename='output.txt', tablefmt='rst')
fields = ['pdgid', 'pdg_name', 'mass', 'mass_upper', 'mass_lower', 'three_charge']
Particle.dump_table(exclusive_fields=fields, n_rows=10)
pdgid pdg_name mass mass_upper mass_lower three_charge ------- ---------- ------- ------------ ------------ -------------- 1 d 4.67 0.5 0.2 -1 -1 d 4.67 0.5 0.2 1 2 u 2.16 0.5 0.3 2 -2 u 2.16 0.5 0.3 -2 3 s 93 11 5 -1 -3 s 93 11 5 1 4 c 1270 20 20 2 -4 c 1270 20 20 -2 5 b 4180 30 20 -1 -5 b 4180 30 20 1
Table with all b-flavoured hadrons (in reStructuredText format):
Particle.dump_table(filter_fn=lambda p: p.pdgid.has_bottom, exclusive_fields=fields, tablefmt='rst')
======= ============== ========= ============ ============ ============== pdgid pdg_name mass mass_upper mass_lower three_charge ======= ============== ========= ============ ============ ============== 511 B 5279.64 0.13 0.13 0 -511 B 5279.64 0.13 0.13 0 513 B* 5324.7 0.22 0.22 0 -513 B* 5324.7 0.22 0.22 0 515 B(2)*(5747) 5739.5 0.7 0.7 0 -515 B(2)*(5747) 5739.5 0.7 0.7 0 521 B 5279.33 0.13 0.13 3 -521 B 5279.33 0.13 0.13 -3 523 B* 5324.7 0.22 0.22 3 -523 B* 5324.7 0.22 0.22 -3 525 B(2)*(5747) 5739.5 0.7 0.7 3 -525 B(2)*(5747) 5739.5 0.7 0.7 -3 531 B(s) 5366.88 0.17 0.17 0 -531 B(s) 5366.88 0.17 0.17 0 533 B(s)* 5415.4 1.8 1.5 0 -533 B(s)* 5415.4 1.8 1.5 0 535 B(s2)*(5840) 5839.85 0.12 0.12 0 -535 B(s2)*(5840) 5839.85 0.12 0.12 0 541 B(c) 6274.9 0.8 0.8 3 -541 B(c) 6274.9 0.8 0.8 -3 553 Upsilon(1S) 9460.3 0.26 0.26 0 555 chi(b2)(1P) 9912.21 0.3 0.3 0 5112 Sigma(b) 5815.64 0.27 0.27 -3 -5112 Sigma(b) 5815.64 0.27 0.27 3 5114 Sigma(b)* 5834.74 0.3 0.3 -3 -5114 Sigma(b)* 5834.74 0.3 0.3 3 5122 Lambda(b) 5619.6 0.17 0.17 0 -5122 Lambda(b) 5619.6 0.17 0.17 0 5132 Xi(b) 5797 0.9 0.9 -3 -5132 Xi(b) 5797 0.9 0.9 3 5222 Sigma(b) 5810.56 0.25 0.25 3 -5222 Sigma(b) 5810.56 0.25 0.25 -3 5224 Sigma(b)* 5830.32 0.27 0.27 3 -5224 Sigma(b)* 5830.32 0.27 0.27 -3 5232 Xi(b) 5791.9 0.5 0.5 0 -5232 Xi(b) 5791.9 0.5 0.5 0 5332 Omega(b) 6046.1 1.7 1.7 -3 -5332 Omega(b) 6046.1 1.7 1.7 3 10551 chi(b0)(1P) 9859.4 0.5 0.5 0 10553 h(b)(1P) 9899.3 0.8 0.8 0 20553 chi(b1)(1P) 9892.878 0.3 0.3 0 20555 Upsilon(2)(1D) 10163.7 1.4 1.4 0 100553 Upsilon(2S) 10023.26 0.31 0.31 0 100555 chi(b2)(2P) 10268.65 0.2 0.5 0 110551 chi(b0)(2P) 10232.5 0.4 0.5 0 120553 chi(b1)(2P) 10255.46 0.2 0.5 0 200553 Upsilon(3S) 10355.2 0.5 0.5 0 300553 Upsilon(4S) 10579.4 1.2 1.2 0 9000553 Upsilon(10860) 10889.9 3.2 2.6 0 9010553 Upsilon(11020) 10992.9 10 3.1 0 ======= ============== ========= ============ ============ ==============
You can:
Particle
.DecayLanguage
is designed for the manipulation of decay structures in Python. The current package has:
Provide a translation of decay amplitude models from AmpGen to GooFit
Idea is to generalise this to other decay descriptions
Any experiment uses event generators which, among many things, need to describe particle decay chains
Example user decay file:
Decay file for [B_c+ -> (B_s0 -> K+ K-) pi+]cc¶
Alias B_c+sig B_c+ Alias B_c-sig B_c- ChargeConj B_c+sig B_c-sig Alias MyB_s0 B_s0 Alias Myanti-B_s0 anti-B_s0 ChargeConj MyB_s0 Myanti-B_s0
Decay B_c+sig 1.000 MyB_s0 pi+ PHOTOS PHSP; Enddecay CDecay B_c-sig
Decay MyB_s0 1.000 K+ K- SSD_CP 20.e12 0.1 1.0 0.04 9.6 -0.8 8.4 -0.6; Enddecay CDecay Myanti-B_s0 </pre> </small>
After parsing, many queries are possible!
from decaylanguage import DecFileParser
It's a big file! ~ 450 particle decays defined, thousands of decay modes, over 11k lines in total.
dfp = DecFileParser('data/DECAY_LHCB.DEC')
%%time
dfp.parse()
Wall time: 2.37 s
dfp
<DecFileParser: decfile(s)=['data/DECAY_LHCB.DEC'], n_decays=506>
Let's parse and play with a small decay file:
with open('data/Dst.dec') as f:
print(f.read())
# Example decay chain for testing purposes # Considered by itself, this file in in fact incomplete, # as there are no instructions on how to decay the anti-D0 and the D-! Decay D*+ 0.6770 D0 pi+ VSS; 0.3070 D+ pi0 VSS; 0.0160 D+ gamma VSP_PWAVE; Enddecay Decay D*- 0.6770 anti-D0 pi- VSS; 0.3070 D- pi0 VSS; 0.0160 D- gamma VSP_PWAVE; Enddecay Decay D0 1.0 K- pi+ PHSP; Enddecay Decay D+ 1.0 K- pi+ pi+ pi0 PHSP; Enddecay Decay pi0 0.988228297 gamma gamma PHSP; 0.011738247 e+ e- gamma PI0_DALITZ; 0.000033392 e+ e+ e- e- PHSP; 0.000000065 e+ e- PHSP; Enddecay
dfp_Dst = DecFileParser('data/Dst.dec')
dfp_Dst
<DecFileParser: decfile(s)=['data/Dst.dec']>
dfp_Dst.parse()
dfp_Dst
<DecFileParser: decfile(s)=['data/Dst.dec'], n_decays=5>
It can be handy to parse from a multi-line string rather than a file:
s = """
# Decay file for [B_c+ -> (B_s0 -> K+ K-) pi+]cc
Alias B_c+sig B_c+
Alias B_c-sig B_c-
ChargeConj B_c+sig B_c-sig
Alias MyB_s0 B_s0
Alias Myanti-B_s0 anti-B_s0
ChargeConj MyB_s0 Myanti-B_s0
Decay B_c+sig
1.000 MyB_s0 pi+ PHOTOS PHSP;
Enddecay
CDecay B_c-sig
Decay MyB_s0
1.000 K+ K- SSD_CP 20.e12 0.1 1.0 0.04 9.6 -0.8 8.4 -0.6;
Enddecay
CDecay Myanti-B_s0
"""
dfp = DecFileParser.from_string(s)
dfp.parse()
dfp
<DecFileParser: decfile(s)=<dec file input as a string>, n_decays=4>
dfp_Dst.print_decay_modes('D*+')
0.677 : D0 pi+ VSS 0.307 : D+ pi0 VSS 0.016 : D+ gamma VSP_PWAVE
dfp_Dst.list_decay_mother_names()
['D*+', 'D*-', 'D0', 'D+', 'pi0']
dfp_Dst.list_decay_modes('D*+')
[['D0', 'pi+'], ['D+', 'pi0'], ['D+', 'gamma']]
dfp.dict_aliases()
{'B_c+sig': 'B_c+', 'B_c-sig': 'B_c-', 'MyB_s0': 'B_s0', 'Myanti-B_s0': 'anti-B_s0'}
dfp.dict_charge_conjugates()
{'B_c+sig': 'B_c-sig', 'MyB_s0': 'Myanti-B_s0'}
The parser can provide a simple representation of any decay chain found in the input decay file(s).
dc = dfp_Dst.build_decay_chains('D+')
dc
{'D+': [{'bf': 1.0, 'fs': ['K-', 'pi+', 'pi+', {'pi0': [{'bf': 0.988228297, 'fs': ['gamma', 'gamma'], 'm': 'PHSP', 'mp': ''}, {'bf': 0.011738247, 'fs': ['e+', 'e-', 'gamma'], 'm': 'PI0_DALITZ', 'mp': ''}, {'bf': 3.3392e-05, 'fs': ['e+', 'e+', 'e-', 'e-'], 'm': 'PHSP', 'mp': ''}, {'bf': 6.5e-08, 'fs': ['e+', 'e-'], 'm': 'PHSP', 'mp': ''}]}], 'm': 'PHSP', 'mp': ''}]}
from decaylanguage import DecayChainViewer
DecayChainViewer(dc)
dc = dfp_Dst.build_decay_chains('D*+')
DecayChainViewer(dc)
dc = dfp_Dst.build_decay_chains('D*+', stable_particles=['D+', 'D0', 'pi0'])
DecayChainViewer(dc)
dc_cc = dfp_Dst.build_decay_chains('D*-', stable_particles=['D-', 'anti-D0', 'pi0'])
DecayChainViewer(dc_cc)
Typically useful when the user decay file needs information from the master decay file.
s = u"""
Alias MyXic+ Xi_c+
Alias MyantiXic- anti-Xi_c-
ChargeConj MyXic+ MyantiXic-
Decay Xi_cc+sig
1.000 MyXic+ pi- pi+ PHSP;
Enddecay
CDecay anti-Xi_cc-sig
Decay MyXic+
1.000 p+ K- pi+ PHSP;
Enddecay
CDecay MyantiXic-
End
"""
dfp = DecFileParser.from_string(s)
dfp.parse()
dfp
C:\home\sw\Anaconda3\lib\site-packages\decaylanguage\dec\dec.py:445: UserWarning: Corresponding 'Decay' statement for 'CDecay' statement(s) of following particle(s) not found: anti-Xi_cc-sig. Skipping creation of these charge-conjugate decay trees. warnings.warn(msg)
<DecFileParser: decfile(s)=<dec file input as a string>, n_decays=3>
Note the subtletly: 3, not 4 decays, are found! This is because the file contains no statement
ChargeConj anti-Xi_cc-sigXi_cc+sig
, hence the parser cannot know to which particle (matching Decay
statement) the charge-conjugate decay of anti-Xi_cc-sig
relates to (code does not rely on position of statements to guess ;-)).
d = dfp.build_decay_chains('Xi_cc+sig')
DecayChainViewer(d)
As said in the warning, the information provided is not enough for the anti-Xi_cc-sig to make sense:
from decaylanguage.dec.dec import DecayNotFound
try:
d = dfp.build_decay_chains('anti-Xi_cc-sig')
except DecayNotFound:
print("Decays of particle 'anti-Xi_cc-sig' not found in .dec file!")
Decays of particle 'anti-Xi_cc-sig' not found in .dec file!
But the missing information is easily providing parsing two files simultaneously ...! (Any number of files is allowed.)
from tempfile import NamedTemporaryFile
with NamedTemporaryFile(delete=False) as tf:
tf.write(s.encode('utf-8'))
dfp = DecFileParser(tf.name, 'data/DECAY_LHCB.DEC')
dfp.parse()
dc = dfp.build_decay_chains('Xi_cc+sig')
DecayChainViewer(dc)
dc_cc = dfp.build_decay_chains('anti-Xi_cc-sig')
DecayChainViewer(dc_cc)
The universal (and digital) representation of decay chains is of interest well outside the context of decay file parsing!
from decaylanguage.decay.decay import DaughtersDict, DecayMode, DecayChain
Daughters list (actually a Counter
dictionary, internally):
# Constructor from a dictionary
dd = DaughtersDict({'K+': 1, 'K-': 2, 'pi+': 1, 'pi0': 1})
# Constructor from a list of particle names
dd = DaughtersDict(['K+', 'K-', 'K-', 'pi+', 'pi0'])
# Constructor from a string representing the final state
dd = DaughtersDict('K+ K- pi0')
dd
<DaughtersDict: ['K+', 'K-', 'pi0']>
# A 'default' and hence empty, decay mode
dm = DecayMode()
# Decay mode with minimal input information
dd = DaughtersDict('K+ K-')
dm = DecayMode(0.5, dd)
# Decay mode with decay model information and user metadata
dm = DecayMode(0.2551, # branching fraction
'pi- pi0 nu_tau', # final-state particles
model='TAUHADNU', # decay model
model_params=[-0.108, 0.775, 0.149, 1.364, 0.400], # decay-model parameters
study='toy', year=2019 # user metadata
)
dm
<DecayMode: daughters=nu_tau pi- pi0, BF=0.2551>
print(dm.describe())
Daughters: pi- pi0 nu_tau , BF: 0.2551 Decay model: TAUHADNU [-0.108, 0.775, 0.149, 1.364, 0.4] Extra info: study: toy year: 2019
Various manipulations are available:
dm = DecayMode.from_pdgids(0.5, [321, -321])
print(dm)
dm = DecayMode(1.0, 'K+ K+ pi-')
dm.charge_conjugate()
<DecayMode: daughters=K+ K-, BF=0.5>
<DecayMode: daughters=K- K- pi+, BF=1.0>
dm1 = DecayMode(0.0124, 'K_S0 pi0', model='PHSP')
dm2 = DecayMode(0.692, 'pi+ pi-')
dm3 = DecayMode(0.98823, 'gamma gamma')
dc = DecayChain('D0', {'D0':dm1, 'K_S0':dm2, 'pi0':dm3})
dc
<DecayChain: D0 -> K_S0 pi0 (2 sub-decays), BF=0.0124>
Flatten the decay chain, i.e. replace all intermediate, decaying particles, with their final states:
dc.flatten()
<DecayChain: D0 -> gamma gamma pi+ pi- (0 sub-decays), BF=0.008479803984>
dc.print_as_tree()
D0 +--> K_S0 | +--> pi+ | +--> pi- +--> pi0 +--> gamma +--> gamma
#dcv = DecayChainViewer(dc.to_dict())
#dcv.graph.write_pdf('test.pdf')
DecayChainViewer(dc.to_dict())