A collection of particle info containers.

The particle module is the starting point of qrules. Its main interface is the ParticleCollection, which is a collection of immutable Particle instances that are uniquely defined by their properties. As such, it can be used stand-alone as a database of quantum numbers (see Particle database).

The transition module uses the properties of Particle instances when it computes which StateTransitionGraph s are allowed between an initial state and final state.

class Spin(magnitude: SupportsFloat, projection: SupportsFloat)[source]#

Bases: object

Safe, immutable data container for spin with projection.

magnitude: float#
projection: float#
class Particle(*, name: str, pid: int, latex: Optional[str] = None, spin, mass, width=0.0, charge: int = 0, isospin: Optional[Union[Spin, Tuple[float, float]]] = None, strangeness: int = 0, charmness: int = 0, bottomness: int = 0, topness: int = 0, baryon_number: int = 0, electron_lepton_number: int = 0, muon_lepton_number: int = 0, tau_lepton_number: int = 0, parity: Optional[Union[Parity, int]] = None, c_parity: Optional[Union[Parity, int]] = None, g_parity: Optional[Union[Parity, int]] = None)[source]#

Bases: object

Immutable container of data defining a physical particle.

A Particle is defined by the minimum set of the quantum numbers that every possible instances of that particle have in common (the β€œstatic” quantum numbers of the particle). A β€œnon-static” quantum number is the spin projection. Hence Particle instances do not contain spin projection information.

Particle instances are uniquely defined by their quantum numbers and properties like mass. The name and pid are therefore just labels that are not taken into account when checking if two Particle instances are equal.


As opposed to classes such as EdgeQuantumNumbers and NodeQuantumNumbers, the Particle class serves as an interface to the user (see Particle database).

name: str#
pid: int#
latex: Optional[str]#
spin: float#
mass: float#
width: float#
charge: int#
isospin: Optional[Spin]#
strangeness: int#
charmness: int#
bottomness: int#
topness: int#
baryon_number: int#
electron_lepton_number: int#
muon_lepton_number: int#
tau_lepton_number: int#
parity: Optional[Parity]#
c_parity: Optional[Parity]#
g_parity: Optional[Parity]#
is_lepton() β†’ bool[source]#
class ParticleCollection(particles: Optional[Iterable[Particle]] = None)[source]#

Bases: MutableSet

Searchable collection of immutable Particle instances.

__getitem__(particle_name: str) β†’ Particle[source]#
add(value: Particle) β†’ None[source]#

Add an element.

discard(value: Union[Particle, str]) β†’ None[source]#

Remove an element. Do not raise an exception if absent.

find(search_term: Union[int, str]) β†’ Particle[source]#

Search for a particle by either name (str) or PID (int).

filter(function: Callable[[Particle], bool]) β†’ ParticleCollection[source]#

Search by Particle properties using a lambda function.

For example:

>>> from qrules.particle import load_pdg
>>> pdg = load_pdg()
>>> subset = pdg.filter(
...     lambda p: p.mass > 1.8
...     and p.mass < 2.0
...     and p.spin == 2
...     and p.strangeness == 1
... )
>>> sorted(subset.names)
['K(2)(1820)+', 'K(2)(1820)0', 'K(2)*(1980)+', 'K(2)*(1980)0']
update(other: Iterable[Particle]) β†’ None[source]#
property names: List[str]#
create_particle(template_particle: Particle, name: Optional[str] = None, latex: Optional[str] = None, pid: Optional[int] = None, mass: Optional[float] = None, width: Optional[float] = None, charge: Optional[int] = None, spin: Optional[float] = None, isospin: Optional[Spin] = None, strangeness: Optional[int] = None, charmness: Optional[int] = None, bottomness: Optional[int] = None, topness: Optional[int] = None, baryon_number: Optional[int] = None, electron_lepton_number: Optional[int] = None, muon_lepton_number: Optional[int] = None, tau_lepton_number: Optional[int] = None, parity: Optional[int] = None, c_parity: Optional[int] = None, g_parity: Optional[int] = None) β†’ Particle[source]#
create_antiparticle(template_particle: Particle, new_name: Optional[str] = None, new_latex: Optional[str] = None) β†’ Particle[source]#
load_pdg() β†’ ParticleCollection[source]#

Create a ParticleCollection with all entries from the PDG.

PDG info is imported from the scikit-hep/particle package.