Ejemplo n.º 1
0
    def sterile_quark_neutral(theta=1., sterile=None, active=None, quark=None, kind=None):
        """ \begin{align}
                N_S + \overline{\nu} &\to q + \overline{q}
            \end{align}
        """


        if quark.Q == 2./3.:
            g_R = CONST.g_R
        if quark.Q == -1./3.:
            g_R = CONST.g_R / 2.

        x = (3 - 4 * g_R)

        return CrossGeneratingInteraction(
            name="Sterile-quarks neutral channel interaction",
            particles=((sterile, active), (quark, quark)),
            antiparticles=((False, True), (False, True)),
            Ms=(
                SterileM(theta=theta, K1=16. / 9. * g_R**2, order=(0, 2, 1, 3)),
                SterileM(theta=theta, K1=1. / 9. * x**2, order=(0, 3, 1, 2)),
                SterileM(theta=theta, K2=-4. / 9. * g_R * x, order=(2, 3, 0, 1)),
            ),
            integral_type=FourParticleIntegral,
            kind=kind
        )
Ejemplo n.º 2
0
    def neutrinos_to_leptons(neutrino=None,
                             lepton=None,
                             g_L=CONST.g_R + 0.5,
                             kind=None):
        """ \begin{align}
                \nu_\alpha + \overline{\nu_\alpha} &\to e^- + e^+
            \end{align}

            \begin{align}
                |\mathcal{M}|^2 = 32 G_F^2 \left(
                \\ 4 \, g_L^2 \, (p_0 \cdot p_3) (p_1 \cdot p_2) +
                \\ +4 \, g_R^2 \, (p_0 \cdot p_2) (p_1 \cdot p_3) +
                \\ +4 \, g_L g_R \, m_2 m_3 (p_0 \cdot p_1)
                \\ \right)
            \end{align}

            Depending of the neutrino generations involved, $g_L$ can either be equal to \
            $g_R + \frac12$ (for $\nu_e$) or $g_R - \frac12$ (for others).
        """
        return CrossGeneratingInteraction(
            name="Neutrino pair annihilation into lepton pair",
            particles=((neutrino, neutrino), (lepton, lepton)),
            antiparticles=((False, True), (False, True)),
            washout_temperature=0 * UNITS.MeV,
            Ms=(
                WeakM(K1=4 * CONST.g_R**2, order=(0, 3, 1, 2)),
                WeakM(K1=4 * g_L**2, order=(0, 2, 1, 3)),
                WeakM(K2=4 * g_L * CONST.g_R, order=(2, 3, 0, 1)),
            ),
            integral_type=FourParticleIntegral,
            kind=kind)
Ejemplo n.º 3
0
    def neutral_vector_meson(theta=1., sterile=None, active=None, meson=None, kind=None):
        """ \begin{align}
                N \to \nu + meson
            \end{align}
        """

        if meson.name == 'Neutral rho':
            kappa = 1. - 2. * CONST.sin_theta_w_2
        if meson.name == 'Omega':
            kappa = 4. * CONST.sin_theta_w_2 / 3.
        if meson.name == 'Phi':
            kappa = 4. * CONST.sin_theta_w_2 / 3. - 1.

        return [CrossGeneratingInteraction(
            name="Sterile neutrino decay to neutral vector meson and neutrino",
            particles=((sterile, ), (active, meson)),
            antiparticles=antiparticles,
            Ms=(ThreeParticleM(K=(CONST.G_F * theta * meson.decay_constant * kappa)**2
                                * sterile.mass**4 * (1 + 2 * (meson.mass / sterile.mass)**2)
                                * (1 - (meson.mass / sterile.mass)**2)), ),
            integral_type=ThreeParticleIntegral,
            kind=kind
        ) for antiparticles in [
            ((False, ), (False, False)),
            ((True, ), (True, False))
        ]]
Ejemplo n.º 4
0
    def decay_neutral_pion(meson=None, photon=None, kind=None):

        return [
            CrossGeneratingInteraction(
                name="Neutral pion decay into two photons",
                particles=((meson, ), (photon, photon)),
                antiparticles=((False, ), (False, False)),
                Ms=(ThreeParticleM(
                    K=CONST.alpha**2 * meson.mass**4 /
                    (2 * np.pi**2 * meson.decay_constant**2)), ),
                integral_type=ThreeParticleIntegral,
                kind=kind)
        ]
Ejemplo n.º 5
0
    def leptons_CC(active1=None,
                   active2=None,
                   lepton1=None,
                   lepton2=None,
                   kind=None):

        return CrossGeneratingInteraction(
            name="Charged current lepton-neutrino interactions",
            particles=((lepton1, lepton2), (active1, active2)),
            antiparticles=((False, True), (False, True)),
            Ms=(WeakM(K1=4., order=(0, 3, 1, 2)), ),
            integral_type=FourParticleIntegral,
            kind=kind)
Ejemplo n.º 6
0
    def three_particle_meson_decay(parts=None,
                                   antiparts=None,
                                   ME=None,
                                   kind=None):

        return [
            CrossGeneratingInteraction(
                name="Meson decay",
                particles=((parts[0], ), (parts[1], parts[2])),
                antiparticles=((antiparts[0], ), (antiparts[1], antiparts[2])),
                Ms=(ThreeParticleM(K=ME), ),
                integral_type=ThreeParticleIntegral,
                kind=kind)
        ]
Ejemplo n.º 7
0
    def baryons_interaction(cls,
                            neutron=None,
                            proton=None,
                            neutrino=None,
                            electron=None):

        return CrossGeneratingInteraction(
            name="Baryons interaction",
            particles=((neutron, ), (proton, electron, neutrino)),
            antiparticles=((False, ), (False, False, True)),
            washout_temperature=0 * UNITS.MeV,
            Ms=(WeakM(K1=2. * particles.quarks.CKM[(1, 1)]**2,
                      order=(0, 1, 2, 3)), ),
            integral_type=FourParticleIntegral)
Ejemplo n.º 8
0
    def four_particle_meson_decay(parts=None,
                                  antiparts=None,
                                  ME=None,
                                  kind=None):

        return [
            CrossGeneratingInteraction(
                name="Meson decay",
                particles=((parts[0], parts[1]), (parts[2], parts[3])),
                antiparticles=((antiparts[0], antiparts[1]), (antiparts[2],
                                                              antiparts[3])),
                Ms=(WeakM(K=ME), ),
                integral_type=FourParticleIntegral,
                kind=kind)
        ]
Ejemplo n.º 9
0
    def decay_charged_pion(meson=None, lepton=None, neutrino=None, kind=None):

        CKM = particles.quarks.CKM[(1, 1)]

        return [
            CrossGeneratingInteraction(
                name="Charged pion decay into neutrino and charged lepton",
                particles=((meson, ), (lepton, neutrino)),
                antiparticles=antiparticles,
                Ms=(ThreeParticleM(
                    K=2 * (CONST.G_F * meson.decay_constant * CKM)**2 *
                    lepton.mass**4 * (((meson.mass / lepton.mass)**2 - 1))), ),
                integral_type=ThreeParticleIntegral,
                kind=kind)
            for antiparticles in [((False, ),
                                   (False, True)), ((True, ), (True, False))]
        ]
Ejemplo n.º 10
0
    def leptons_leptons_NC(lepton1=None,
                           lepton2=None,
                           g_L=CONST.g_R - 0.5,
                           kind=None):

        return CrossGeneratingInteraction(
            name="Neutral current lepton-lepton interactions",
            particles=((lepton1, lepton2), (lepton1, lepton2)),
            antiparticles=((False, False), (False, False)),
            Ms=(
                WeakM(K1=4 * (g_L**4 + CONST.g_R**4), order=(0, 1, 2, 3)),
                WeakM(K1=4 * 2 * g_L**2 * CONST.g_R**2, order=(0, 3, 1, 2)),
                WeakM(K2=4 * -g_L * CONST.g_R * (g_L**2 + CONST.g_R**2),
                      order=(0, 2, 1, 3)),
            ),
            integral_type=FourParticleIntegral,
            kind=kind)
Ejemplo n.º 11
0
 def neutral_scalar_meson(theta=1., sterile=None, active=None, meson=None, kind=None):
     """ \begin{align}
             N \to \nu + meson
         \end{align}
     """
     return [CrossGeneratingInteraction(
         name="Sterile neutrino decay to neutral scalar meson and neutrino",
         particles=((sterile, ), (active, meson)),
         antiparticles=antiparticles,
         Ms=(
             ThreeParticleM(K=(CONST.G_F * theta * meson.decay_constant)**2
                               * sterile.mass**4 * np.abs(1 - (meson.mass / sterile.mass)**2)), ),
         integral_type=ThreeParticleIntegral,
         kind=kind
     ) for antiparticles in [
         ((False, ), (False, False)),
         ((True, ), (True, False))
     ]]
Ejemplo n.º 12
0
    def sterile_quark_charged(theta=1., sterile=None, lepton=None, up=None, down=None, kind=None):
        """ \begin{align}
                N_S + l^+ &\to u + \overline{d}
            \end{align}
        """

        CKM = SM_particles.quarks.CKM[(up.family, down.family)]

        return CrossGeneratingInteraction(
            name="Sterile-quarks charged channel interaction",
            particles=((sterile, lepton), (up, down)),
            antiparticles=((False, True), (False, True)),
            Ms=(
                SterileM(theta=theta, K1=4. * CKM**2, order=(0, 3, 1, 2)),
            ),
            integral_type=FourParticleIntegral,
            kind=kind
        )
Ejemplo n.º 13
0
    def sterile_active_to_leptons_CC(theta=1., sterile=None,
                                     active=None, lepton1=None, lepton2=None, kind=None):
        """ \begin{align}
                N_S + \overline{\nu_{\alpha}} \to l1^+ + l2^-
            \end{align}
        """

        return [CrossGeneratingInteraction(
            name="Charged current sterile-lepton interactions",
            particles=particles,
            antiparticles=((False, True), (True, False)),
            Ms=(
                SterileM(theta=theta, K1=4., order=(0, 2, 1, 3)),
            ),
            integral_type=FourParticleIntegral,
            kind=kind
        ) for particles in [
        ((sterile, active), (lepton2, lepton1)),
        ((active, sterile), (lepton1, lepton2))
        ]]
Ejemplo n.º 14
0
    def neutrino_scattering(neutrino_a, neutrino_b, kind=None):
        """ \begin{align}
                \nu_\alpha + \nu_\beta &\to \nu_\alpha + \nu_\beta
            \end{align}

            \begin{equation}
                |\mathcal{M}|^2 = 32 G_F^2 (p_0 \cdot p_1) (p_2 \cdot p_3)
            \end{equation}
        """

        return CrossGeneratingInteraction(name="Neutrino species scattering",
                                          particles=((neutrino_a, neutrino_b),
                                                     (neutrino_a, neutrino_b)),
                                          antiparticles=((False, False),
                                                         (False, False)),
                                          washout_temperature=0 * UNITS.MeV,
                                          Ms=(WeakM(K1=1.,
                                                    order=(0, 1, 2, 3)), ),
                                          integral_type=FourParticleIntegral,
                                          kind=kind)
Ejemplo n.º 15
0
    def sterile_active_to_leptons_NC(theta=1., g_L=CONST.g_R+0.5, sterile=None,
                                     active=None, lepton=None, kind=None):
        """ \begin{align}
                N_S + \overline{\nu_{\alpha}} \to l^+ + l^-
            \end{align}
        """

        return [CrossGeneratingInteraction(
            name="Neutral current sterile-lepton interactions",
            particles=((sterile, active), (lepton, lepton)),
            antiparticles=antiparticles,
            Ms=(
                SterileM(theta=theta, K1=4. * g_L**2, order=(0, 2, 1, 3)),
                SterileM(theta=theta, K1=4. * CONST.g_R**2, order=(0, 3, 1, 2)),
                SterileM(theta=theta, K2=4. * CONST.g_R * g_L, order=(2, 3, 0, 1))
            ),
            integral_type=FourParticleIntegral,
            kind=kind
        ) for antiparticles in
            [((False, True), (True, False)),
            ((True, False), (False, True))
        ]]
Ejemplo n.º 16
0
    def sterile_active_scattering(theta=1., sterile=None, active_a=None,
                                 active_b=None, kind=None):
        """ \begin{align}
                N_S + \nu_{\beta} &\to \nu_{\alpha} + \nu_{\beta}
            \end{align}
        """

        # SOMETHING IS CLEARLY NOT RIGHT
        K1 = 2. if active_a == active_b else 1

        return [CrossGeneratingInteraction(
            name="Sterile-active neutrino scattering",
            particles=particles,
            antiparticles=((False, False), (False, False)),
            Ms=Ms,
            integral_type=FourParticleIntegral,
            kind=kind
        ) for particles, Ms in zip(
            [((sterile, active_b), (active_a, active_b)),
            ((active_a, active_b), (sterile, active_b))],
            [(SterileM(theta=theta, K1=K1, order=(0, 1, 2, 3)), ),
            (SterileM(theta=theta, K1=K1, order=(2, 3, 0, 1)), )]
        )]
Ejemplo n.º 17
0
    def charged_vector_meson(theta=1., sterile=None, lepton=None, meson=None, kind=None):
        """ \begin{align}
                N \to l + meson
            \end{align}
        """

        CKM = SM_particles.quarks.CKM[(1, 1)]
        # Only charged rho for now
        return [CrossGeneratingInteraction(
            name="Sterile neutrino decay to charged vector meson and lepton",
            particles=((sterile, ), (lepton, meson)),
            antiparticles=antiparticles,
            Ms=(ThreeParticleM(
                K=2 * (CONST.G_F * theta * meson.decay_constant * CKM)**2 * sterile.mass**4 * (
                    (1 - (lepton.mass / sterile.mass)**2)**2 + (meson.mass / sterile.mass)**2
                    * (1 + (lepton.mass / sterile.mass)**2) - 2 * (meson.mass / sterile.mass)**4
                )
            ),),
            integral_type=ThreeParticleIntegral,
            kind=kind
        ) for antiparticles in [
            ((False, ), (False, True)),
            ((True, ), (True, False))
        ]]
Ejemplo n.º 18
0
from library.SM import particles as SMP
from interactions import CrossGeneratingInteraction
from interactions.four_particle import FourParticleM, FourParticleIntegral
from particles import Particle
from evolution import Universe
from common import CONST, UNITS, Params

params = Params(T=2 * UNITS.MeV, dy=0.025)

photon = Particle(**SMP.photon)
neutrino = Particle(**SMP.leptons.neutrino_e)

neutrino_scattering = CrossGeneratingInteraction(
    particles=((neutrino, neutrino), (neutrino, neutrino)),
    antiparticles=((False, True), (False, True)),
    Ms=(FourParticleM(K1=64 * CONST.G_F**2, order=(0, 1, 2, 3)), ),
    integral_type=FourParticleIntegral)

universe = Universe(params=params)
universe.PARALLELIZE = False
universe.add_particles([photon, neutrino])
universe.interactions += [neutrino_scattering]

import numpy
addition = numpy.vectorize(lambda x: 0.1 * numpy.exp(-(x / UNITS.MeV - 3)**2),
                           otypes=[numpy.float_])
neutrino._distribution += addition(neutrino.grid.TEMPLATE)

# def check(p=[]):
#     return neutrino_scattering.F_B(in_p=p[:2], out_p=p[2:]) * (1 - neutrino.distribution(p[0])) \
#         - neutrino_scattering.F_A(in_p=p[:2], out_p=p[2:]) * neutrino.distribution(p[0])