Source code for yadism.coefficient_functions.splitting_functions.lo

"""
Provides the Altarelli-Parisi splitting functions.

The splitting functions are defined by :cite:`split-ns,split-singlet` and
they are organized by the outgoing and incoming particle.
Furthermore they are organized according to their RSL structure.

"""

import numba as nb
import numpy as np
from eko import constants

from ..partonic_channel import RSL


[docs] @nb.njit("f8(f8,f8[:])", cache=True) def pqq_reg(z, _args): """ Regular part of :math:`P_{qq}` splitting function. |ref| implements :eqref:`4.5`, :cite:`split-ns`. Parameters ---------- z : float partonic momentum fraction Returns ------- float the regular bit of quark-quark splitting function :math:`P_{qq}^R(z)` """ return -2.0 * constants.CF * (1.0 + z)
[docs] @nb.njit("f8(f8,f8[:])", cache=True) def pqq_sing(z, _args): """ Singular part of :math:`P_{qq}` splitting function. |ref| implements :eqref:`4.5`, :cite:`split-ns`. Parameters ---------- z : float partonic momentum fraction Returns ------- float the singular bit the quark-quark splitting function :math:`P_{qq}^S(z)` """ return 4.0 * constants.CF / (1.0 - z)
[docs] @nb.njit("f8(f8,f8[:])", cache=True) def pqq_local(x, _args): r""" Local part of :math:`P_{qq}` splitting function. |ref| implements :eqref:`4.5`, :cite:`split-ns`. Parameters ---------- x : float hadronic momentum fraction Returns ------- float the local bit of quark-quark splitting function :math:`P_{qq}^L(x)` """ return constants.CF * (3.0 + 4.0 * np.log(1.0 - x))
[docs] def pqq(_nf): """ :math:`P_{qq}` splitting function. |ref| implements :eqref:`4.5`, :cite:`split-ns`. Parameters ---------- nf : int number of active flavors Returns ------- RSL the quark-quark splitting function :math:`P_{qq}(z)` """ return RSL(pqq_reg, pqq_sing, pqq_local)
[docs] @nb.njit("f8(f8,f8[:])", cache=True) def pqg_single(z, _args): """ :math:`P_{q_ig}` splitting function (i.e.: :math:`P_{qg}` for a single flavor). |ref| implements :eqref:`4.6` and :eqref:`2.5`, :cite:`split-singlet`. Parameters ---------- z : float partonic momentum fraction Returns ------- float the quark-gluon splitting function :math:`P_{q_ig}(z)` """ return 2.0 * constants.TR * (z**2 + (1.0 - z) ** 2)
[docs] @nb.njit("f8(f8,f8[:])", cache=True) def pqg_reg(z, args): """ (Regular) :math:`P_{qg}` splitting function. |ref| implements :eqref:`4.6`, :cite:`split-singlet`. Parameters ---------- z : float partonic momentum fraction Returns ------- float the quark-gluon splitting function :math:`P_{qg}(z)` """ return 2 * args[0] * pqg_single(z, args)
[docs] def pqg(nf): """ :math:`P_{qg}` splitting function. |ref| implements :eqref:`4.6`, :cite:`split-singlet`. Parameters ---------- nf : int number of active flavors Returns ------- RSL the quark-gluon splitting function :math:`P_{qg}(z)` """ return RSL(pqg_reg, args=[nf])
raw_labels = {"P_qq_0": pqq, "P_qg_0": pqg}