Source code for georges_core.particles
"""TODO
"""
from typing import Optional
import scipy.constants
from . import Q_ as _Q
from . import ureg as _ureg
[docs]
class Particule(metaclass=ParticuleType):
    """Particle characteristics."""
    M: Optional[_Q] = None
    Q: Optional[_Q] = None
    G: Optional[float] = None
    tau: Optional[float] = None
    @property
    def mass(self) -> Optional[_Q]:
        """Mass of the particle."""
        return self.M
    @property
    def charge(self) -> Optional[_Q]:
        """Charge of the particle."""
        return self.Q
    @property
    def lifetime(self) -> Optional[float]:
        """Lifetime constant of the particle."""
        return self.tau
    @property
    def gyro(self) -> Optional[float]:
        """Gyromagnetic factor of the particle."""
        return self.G
    @property
    def name(self) -> str:
        """Gyromagnetic factor of the particle."""
        return self.name
[docs]
class Electron(Particule):
    """An electron."""
    M = 0.5109989461 * _ureg.MeV_c2
    Q = -1.6021766208e-19 * _ureg.coulomb
    G = (-2.0023193043622 - 2) / 2
    name = "e-"
[docs]
class Proton(Particule):
    """A proton."""
    M = 938.27203 * _ureg.MeV_c2
    Q = 1.602176487e-19 * _ureg.coulomb
    G = (5.585694701 - 2) / 2
    name = "Proton"
[docs]
class AntiMuon(Particule):
    """An anti-muon particle."""
    M = scipy.constants.physical_constants["muon mass"][0] * _ureg.kg
    Q = scipy.constants.elementary_charge * _ureg.coulomb
    G = (scipy.constants.physical_constants["muon g factor"][0] - 2) / 2
    tau = 2.197029e-6 * _ureg.s
Posmuon = AntiMuon