Deprecated since version 0.7.3: Use QRules and AmpForm instead

import expertsystem.reaction.particle

A collection of particle info containers.

The particle module is the starting point of the expertsystem. 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 reaction module uses the properties of Particle instances when it computes which StateTransitionGraph s are allowed between an initial state and final state.

class Particle(*, name: str, pid: int, latex: Optional[str] = None, spin, mass, width=0.0, charge: int = 0, isospin=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=None, c_parity=None, g_parity=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).


Method generated by attrs for class Particle.

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


Searchable collection of immutable Particle instances.

__eq__(other: object)bool[source]

Return self==value.

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

filter(function: Callable[[Particle], bool])ParticleCollection[source]

Search by Particle properties using a lambda function.

For example:

>>> from expertsystem.reaction.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(list(subset.names))
['K(2)(1820)+', 'K(2)(1820)0']
find(search_term: Union[int, str])Particle[source]

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

property names
update(other: Iterable[Particle])None[source]
class Spin(magnitude, projection)[source]

Bases: object

Safe, immutable data container for spin with projection.

__eq__(other: object)bool[source]

Return self==value.

magnitude: float
projection: float
create_antiparticle(template_particle: Particle, new_name: Optional[str] = None, new_latex: Optional[str] = None)Particle[source]
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 a ParticleCollection with all entries from the PDG.

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