Source code for eko.beta

r"""
Compute the QCD beta function coefficients.

See :doc:`pQCD ingredients </theory/pQCD>`.
"""

import numba as nb

from . import constants
from .constants import zeta3


[docs] @nb.njit(cache=True) def beta_qcd_as2(nf): r"""Compute the first coefficient of the QCD beta function. Implements Eq. (3.1) of :cite:`Herzog:2017ohr`. Parameters ---------- nf : int number of active flavors Returns ------- beta_qcd_as2 : float first coefficient of the QCD beta function :math:`\\beta_qcd_as2^{n_f}` """ beta_qcd_as2 = 11.0 / 3.0 * constants.CA - 4.0 / 3.0 * constants.TR * nf return beta_qcd_as2
[docs] @nb.njit(cache=True) def beta_qed_aem2(nf, nl): r"""Compute the first coefficient of the QED beta function. Implements Eq. (7) of :cite:`Surguladze:1996hx`. Parameters ---------- nf : int number of active flavors nl : int number of leptons partecipating to alphaem running Returns ------- beta_qed_aem2 : float first coefficient of the QED beta function :math:`\\beta_qed_aem2^{n_f}` """ nu = constants.uplike_flavors(nf) nd = nf - nu beta_qed_aem2 = ( -4.0 / 3 * (nl + constants.NC * (nu * constants.eu2 + nd * constants.ed2)) ) return beta_qed_aem2
[docs] @nb.njit(cache=True) def beta_qcd_as3(nf): r"""Compute the second coefficient of the QCD beta function. Implements Eq. (3.2) of :cite:`Herzog:2017ohr`. Parameters ---------- nf : int number of active flavors Returns ------- beta_qcd_as3 : float second coefficient of the QCD beta function :math:`\\beta_qcd_as3^{n_f}` """ TF = constants.TR * nf b_ca2 = 34.0 / 3.0 * constants.CA * constants.CA b_ca = -20.0 / 3.0 * constants.CA * TF b_cf = -4.0 * constants.CF * TF beta_qcd_as3 = b_ca2 + b_ca + b_cf return beta_qcd_as3
[docs] @nb.njit(cache=True) def beta_qed_aem3(nf, nl): r"""Compute the second coefficient of the QED beta function. Implements Eq. (7) of :cite:`Surguladze:1996hx`. Parameters ---------- nf : int number of active flavors nl : int number of leptons partecipating to alphaem running Returns ------- beta_qed_aem3 : float second coefficient of the QED beta function :math:`\\beta_qed_aem3^{n_f}` """ nu = constants.uplike_flavors(nf) nd = nf - nu beta_qed_aem3 = -4.0 * ( nl + constants.NC * (nu * constants.eu2**2 + nd * constants.ed2**2) ) return beta_qed_aem3
[docs] @nb.njit(cache=True) def beta_qcd_as2aem1(nf): r"""Compute the first QED correction of the QCD beta function. Implements Eq. (7) of :cite:`Surguladze:1996hx`. Parameters ---------- nf : int number of active flavors Returns ------- beta_as2aem1 : float first QED correction of the QCD beta function :math:`\\beta_as2aem1^{n_f}` """ nu = constants.uplike_flavors(nf) nd = nf - nu beta_qcd_as2aem1 = -4.0 * constants.TR * (nu * constants.eu2 + nd * constants.ed2) return beta_qcd_as2aem1
[docs] @nb.njit(cache=True) def beta_qed_aem2as1(nf): r"""Compute the first QCD correction of the QED beta function. Implements Eq. (7) of :cite:`Surguladze:1996hx`. Parameters ---------- nf : int number of active flavors Returns ------- beta_aem2as1 : float first QCD correction of the QED beta function :math:`\\beta_aem2as1^{n_f}` """ nu = constants.uplike_flavors(nf) nd = nf - nu beta_qed_aem2as1 = ( -4.0 * constants.CF * constants.NC * (nu * constants.eu2 + nd * constants.ed2) ) return beta_qed_aem2as1
[docs] @nb.njit(cache=True) def beta_qcd_as4(nf): r"""Compute the third coefficient of the QCD beta function. Implements Eq. (3.3) of :cite:`Herzog:2017ohr`. Parameters ---------- nf : int number of active flavors Returns ------- beta_qcd_as4 : float third coefficient of the QCD beta function :math:`\\beta_qcd_as4^{n_f}` """ TF = constants.TR * nf beta_qcd_as4 = ( 2857.0 / 54.0 * constants.CA * constants.CA * constants.CA - 1415.0 / 27.0 * constants.CA * constants.CA * TF - 205.0 / 9.0 * constants.CF * constants.CA * TF + 2.0 * constants.CF * constants.CF * TF + 44.0 / 9.0 * constants.CF * TF * TF + 158.0 / 27.0 * constants.CA * TF * TF ) return beta_qcd_as4
[docs] @nb.njit(cache=True) def beta_qcd_as5(nf): r"""Compute the fourth coefficient of the QCD beta function. Implements Eq. (3.6) of :cite:`Herzog:2017ohr`. Parameters ---------- nf : int number of active flavors Returns ------- beta_qcd_as5 : float fourth coefficient of the QCD beta function :math:`\\beta_qcd_as5^{n_f}` """ beta_qcd_as5 = ( 149753.0 / 6.0 + 3564.0 * zeta3 + nf * (-1078361.0 / 162.0 - 6508.0 / 27.0 * zeta3) + nf**2 * (50065.0 / 162.0 + 6472.0 / 81.0 * zeta3) + 1093.0 / 729.0 * nf**3 ) return beta_qcd_as5
[docs] @nb.njit(cache=True) def beta_qcd(k, nf): r"""Compute value of a beta_qcd coefficients. Parameters ---------- k : tuple(int, int) perturbative order nf : int number of active flavors Returns ------- beta_qcd : float beta_qcd_k(nf) """ beta_ = 0 if k == (2, 0): beta_ = beta_qcd_as2(nf) elif k == (3, 0): beta_ = beta_qcd_as3(nf) elif k == (4, 0): beta_ = beta_qcd_as4(nf) elif k == (5, 0): beta_ = beta_qcd_as5(nf) elif k == (2, 1): beta_ = beta_qcd_as2aem1(nf) else: raise ValueError("Beta_QCD coefficients beyond N3LO are not implemented!") return beta_
[docs] @nb.njit(cache=True) def beta_qed(k, nf, nl): r"""Compute value of a beta_qed coefficients. Parameters ---------- k : tuple(int, int) perturbative order nf : int number of active flavors nl : int number of leptons partecipating to alphaem running Returns ------- beta_qed : float beta_qed_k(nf) """ beta_ = 0 if k == (0, 2): beta_ = beta_qed_aem2(nf, nl) elif k == (0, 3): beta_ = beta_qed_aem3(nf, nl) elif k == (1, 2): beta_ = beta_qed_aem2as1(nf) else: raise ValueError("Beta_QED coefficients beyond NLO are not implemented!") return beta_
[docs] @nb.njit(cache=True) def b_qcd(k, nf): r"""Compute b_qcd coefficient. Parameters ---------- k : tuple(int, int) perturbative order nf : int number of active flavors Returns ------- b_qcd : float b_qcd_k(nf) """ return beta_qcd(k, nf) / beta_qcd((2, 0), nf)
[docs] @nb.njit(cache=True) def b_qed(k, nf, nl): r"""Compute b_qed coefficient. Parameters ---------- k : tuple(int, int) perturbative order nf : int number of active flavors nl : int number of leptons partecipating to alphaem running Returns ------- b_qed : float b_qed_k(nf) """ return beta_qed(k, nf, nl) / beta_qed((0, 2), nf, nl)