Source code for ekore.anomalous_dimensions.polarized.space_like.as3

"""The |NNLO| polarized Altarelli-Parisi splitting kernels."""

import numba as nb
import numpy as np

from eko.constants import zeta2

from ....harmonics import cache as c

# Non Singlet sector is swapped
from ...unpolarized.space_like.as3 import gamma_nsm as gamma_nsp
from ...unpolarized.space_like.as3 import gamma_nsp as gamma_nsm


[docs] @nb.njit(cache=True) def gamma_gg(N, nf, cache): r"""Compute the parametrized |NNLO| gluon-gluon polarized anomalous dimension. Implement Eq. (4.12) of :cite:`Moch:2014sna`. Parameters ---------- N : complex Mellin moment nf : int Number of active flavors cache: numpy.ndarray Harmonic sum cache Returns ------- complex |NNLO| gluon-gluon anomalous dimension :math:`\\gamma_{gg}^{(2)}(N)` """ S1 = c.get(c.S1, cache, N) S2 = c.get(c.S2, cache, N) E1 = S1 / N**2 + (-zeta2 + S2) / N gg_nf0 = ( +4427.76 - 12292 * E1 + 12096 / N**5 - 22665.0 / N**4 + 21804 / N**3 - 23091 / N**2 + 33631.5 / N - 7002 / (1 + N) ** 4 - 1726 / (1 + N) ** 3 - 13247 / (1 + N) ** 2 - 39925 / (1 + N) + 13447 / (2 + N) - 4576 / (3 + N) - 2643.52 * S1 + (9446 * S1) / N - (13247 * S1) / (1 + N) ) gg_nf1 = ( -528.536 - 7932 * E1 - 6128 / (9 * N**5) + 2146.79 / N**4 - 3754.4 / N**3 + 3524 / N**2 - 1585.67 / N - 786.0 / (1 + N) ** 4 + 1226.2 / (1 + N) ** 3 - 6746 / (1 + N) ** 2 + 2648.6 / (1 + N) - 2160.8 / (2 + N) + 1251.7 / (3 + N) + 412.172 * S1 + (7041.7 * S1) / N - (6746 * S1) / (1 + N) ) gg_nf2 = ( 6.4607 - 16.944 * E1 + 7.0854 / N**4 - 13.358 / N**3 + 13.29 / N**2 - 18.3838 / N + 31.528 / (1 + N) ** 3 + 32.905 / (1 + N) - 18.3 / (2 + N) + 2.637 / (3 + N) + (16 * S1) / 9 + (0.21 * S1) / N ) return -(gg_nf0 + gg_nf1 * nf + gg_nf2 * nf**2)
[docs] @nb.njit(cache=True) def gamma_qg(N, nf, cache): r"""Compute the parametrized |NNLO| quark-gluon polarized anomalous dimension. Implement Eq. (4.10) of :cite:`Moch:2014sna`. Parameters ---------- n : complex Mellin moment nf : int Number of active flavors cache: numpy.ndarray Harmonic sum cache Returns ------- complex |NNLO| quark-gluon anomalous dimension :math:`\\gamma_{qg}^{(2)}(N)` """ S1 = c.get(c.S1, cache, N) S2 = c.get(c.S2, cache, N) S3 = c.get(c.S3, cache, N) S4 = c.get(c.S4, cache, N) B3 = (-(S1**3) - 3 * S1 * S2 - 2 * S3) / N B4 = (S1**4 + 6 * S1**2 * S2 + 3 * S2**2 + 8 * S1 * S3 + 6 * S4) / N E1 = S1 / N**2 + (-zeta2 + S2) / N qg_nf1 = ( -5.3 * B3 + 3.784 * B4 + 825.4 * E1 - 1208 / N**5 + 2313.84 / N**4 - 1789.6 / N**3 + 1461.2 / N**2 - 2972.4 / N + 439.8 / (1 + N) ** 4 + 2290.6 / (1 + N) ** 3 + 4672 / (1 + N) - 1221.6 / (2 + N) - 18 / (3 + N) - (278.32 * S1) / N - (90.26 * S1**2) / N - (90.26 * S2) / N ) qg_nf2 = ( 0.7374 * B3 - 47.3 * E1 + 128 / (3 * N**5) - 184.434 / N**4 + 393.92 / N**3 - 526.3 / N**2 + 499.65 / N - 61.116 / (1 + N) ** 4 + 358.2 / (1 + N) ** 3 - 432.18 / (1 + N) - 141.63 / (2 + N) - 11.34 / (3 + N) + (6.256 * S1) / N + (7.32 * S1**2) / N + (7.32 * S2) / N ) return -(qg_nf1 * nf + qg_nf2 * nf**2)
[docs] @nb.njit(cache=True) def gamma_gq(N, nf, cache): r"""Compute the parametrized |NNLO| gluon-quark polarized anomalous dimension. Implement Eq. (4.11) of :cite:`Moch:2014sna`. Parameters ---------- n : complex Mellin moment nf : int Number of active flavors cache: numpy.ndarray Harmonic sum cache Returns ------- complex |NNLO| gluon-quark anomalous dimension :math:`\\gamma_{gq}^{(2)}(N)` """ S1 = c.get(c.S1, cache, N) S2 = c.get(c.S2, cache, N) S3 = c.get(c.S3, cache, N) S4 = c.get(c.S4, cache, N) B3 = (-(S1**3) - 3 * S1 * S2 - 2 * S3) / N B4 = (S1**4 + 6 * S1**2 * S2 + 3 * S2**2 + 8 * S1 * S3 + 6 * S4) / N E1 = S1 / N**2 + (-zeta2 + S2) / N gq_nf0 = ( 59.3 * B3 + 5.143 * B4 - 1424.8 * E1 + 92096 / (27 * N**5) - 5328.02 / N**4 + 4280 / N**3 - 4046.6 / N**2 + 6159 / N - 1050.6 / (1 + N) ** 4 - 1701.4 / (1 + N) ** 3 - 3825.9 / (1 + N) + 1942.0 / (2 + N) - 742.1 / (3 + N) - (1843.7 * S1) / N + (451.55 * S1**2) / N + (451.55 * S2) / N ) gq_nf1 = ( -4.963 * B3 - 16.18 * E1 - 1024 / (9 * N**5) + 236.323 / N**4 - 404.92 / N**3 + 308.98 / N**2 - 301.07 / N + 180.138 / (1 + N) ** 4 - 253.06 / (1 + N) ** 3 - 296 / (1 + N) + 406.13 / (2 + N) - 101.62 / (3 + N) + (171.78 * S1) / N - (47.86 * S1**2) / N - (47.86 * S2) / N ) gq_nf2 = ( -(64 / (9 * N)) - 32 / (9 * (1 + N) ** 3) - 32 / (27 * (1 + N) ** 2) + 160 / (27 * (1 + N)) - (128 * S1) / (27 * N) - (32 * S1) / (9 * (1 + N) ** 2) - (32 * S1) / (27 * (1 + N)) + (32 * S1**2) / (9 * N) - (16 * S1**2) / (9 * (1 + N)) + (32 * S2) / (9 * N) - (16 * S2) / (9 * (1 + N)) ) return -(gq_nf0 + gq_nf1 * nf + gq_nf2 * nf**2)
[docs] @nb.njit(cache=True) def gamma_ps(N, nf, cache): r"""Compute the parametrized |NNLO| pure-singlet quark-quark polarized anomalous dimension. Implement Eq. (4.9) of :cite:`Moch:2014sna`. Parameters ---------- n : complex Mellin moment nf : int Number of active flavors cache: numpy.ndarray Harmonic sum cache Returns ------- complex |NNLO| pure-singlet quark-quark anomalous dimension :math:`\\gamma_{ps}^{(2)}(N)` """ S1 = c.get(c.S1, cache, N) S2 = c.get(c.S2, cache, N) S3 = c.get(c.S3, cache, N) B3 = (-(S1**3) - 3 * S1 * S2 - 2 * S3) / N B31 = ( -((1 / (1 + N) + S1) ** 3) - 3 * (1 / (1 + N) + S1) * (1 / (1 + N) ** 2 + S2) - 2 * (1 / (1 + N) ** 3 + S3) ) / (1 + N) E1 = S1 / N**2 + (-zeta2 + S2) / N E11 = (1 / (1 + N) + S1) / (1 + N) ** 2 + (1 / (1 + N) ** 2 - zeta2 + S2) / (1 + N) ps_nf1 = ( 1 / 9 * ( -58.869 * B3 + 58.869 * B31 + 2093.13 * E1 - 2093.13 * E11 - 2752 / N**5 + 4909.67 / N**4 - 6634.8 / N**3 + 6651.0 / N**2 - 12263.4 / N + 2752 / (1 + N) ** 5 - 508.669 / (1 + N) ** 4 + 13160.0 / (1 + N) ** 3 - 8493.84 / (1 + N) ** 2 + 26820.0 / (1 + N) - 4401.0 / (2 + N) ** 4 - 6298.2 / (2 + N) ** 3 - 20629.8 / (2 + N) + 7579.89 / (3 + N) - 1506.69 / (4 + N) + (1842.84 * S1) / N + (226.98 * S1) / (1 + N) ** 2 - (1842.84 * S1) / (1 + N) - (113.49 * S1**2) / N + (113.49 * S1**2) / (1 + N) - (113.49 * S2) / N + (113.49 * S2) / (1 + N) ) ) ps_nf2 = ( 1 / 9 * ( -(63.4014 / N**4) + 239.166 / N**3 - 409.338 / N**2 + 442.17 / N + 107.968 / (1 + N) ** 4 - 79.389 / (1 + N) ** 3 + 494.991 / (1 + N) ** 2 - 719.1 / (1 + N) - 44.5662 / (2 + N) ** 4 - 191.826 / (2 + N) ** 3 + 238.167 / (2 + N) + 34.1784 / (3 + N) + 4.5846 / (4 + N) - (85.653 * S1) / N - (32.049 * S1) / (1 + N) ** 2 + (85.653 * S1) / (1 + N) + (16.0245 * S1**2) / N - (16.0245 * S1**2) / (1 + N) + (16.0245 * S2) / N - (16.0245 * S2) / (1 + N) ) ) return -(ps_nf1 * nf + ps_nf2 * nf**2)
[docs] @nb.njit(cache=True) def gamma_nss(N, nf, cache): r"""Compute the |NNLO| sea-like polarized non-singlet anomalous dimension. Implement Eq. (24) of :cite:`Moch:2015usa`. Parameters ---------- n : complex Mellin moment nf : int Number of active flavors cache: numpy.ndarray Harmonic sum cache Returns ------- complex |NNLO| valence non-singlet anomalous dimension :math:`\\gamma_{ns,s}^{(2)}(N)` """ S1 = c.get(c.S1, cache, N) S3 = c.get(c.S3, cache, N) Sm2 = c.get(c.Sm2, cache, N, is_singlet=True) Sm3 = c.get(c.Sm3, cache, N, is_singlet=True) Sm21 = c.get(c.Sm21, cache, N, is_singlet=True) nss_nf1 = ( 40 / 9 * ( 1 / N**2 + ( -(2 / N**2) - 12 / (N**4 * (1 + N) ** 4) - 42 / (N**3 * (1 + N) ** 3) - 14 / (N**2 * (1 + N) ** 2) + 8 / (N * (1 + N)) ) * S1 + (4 / (N**2 * (1 + N) ** 2) + 6 / (N * (1 + N))) * S3 + ( -(4 / N**2) + 8 / (N**3 * (1 + N) ** 3) + 20 / (N**2 * (1 + N) ** 2) + 8 / (N * (1 + N)) ) * Sm2 + (32 * Sm21) / (N * (1 + N)) + (8 / (N**2 * (1 + N) ** 2) - 20 / (N * (1 + N))) * Sm3 + (-(16 / (N**2 * (1 + N) ** 2)) + 8 / (N * (1 + N))) * (S1 * Sm2 - Sm21 + Sm3) ) ) return -(nss_nf1 * nf)
[docs] @nb.njit(cache=True) def gamma_nsv(N, nf, cache): r"""Compute the |NNLO| valence polarized non-singlet anomalous dimension. Implement Eq. (23) of :cite:`Moch:2015usa`. Parameters ---------- n : complex Mellin moment nf : int Number of active flavors cache: numpy.ndarray Harmonic sum cache Returns ------- complex |NNLO| valence non-singlet anomalous dimension :math:`\\gamma_{ns,v}^{(2)}(N)` """ return gamma_nsm(N, nf, cache) + gamma_nss(N, nf, cache)
[docs] @nb.njit(cache=True) def gamma_singlet(N, nf, cache): r"""Compute the |NNLO| polarized singlet anomalous dimension matrix. .. math:: \gamma_S^{(1)} = \left(\begin{array}{cc} \gamma_{qq}^{(2)} & \gamma_{qg}^{(2)}\\ \gamma_{gq}^{(2)} & \gamma_{gg}^{(2)} \end{array}\right) Parameters ---------- n : complex Mellin moment nf : int Number of active flavors cache: numpy.ndarray Harmonic sum cache Returns ------- numpy.ndarray |NNLO| singlet anomalous dimension matrix :math:`\gamma_{S}^{(2)}(N)` """ gamma_qq = gamma_nsp(N, nf, cache) + gamma_ps(N, nf, cache) gamma_S_0 = np.array( [ [gamma_qq, gamma_qg(N, nf, cache)], [gamma_gq(N, nf, cache), gamma_gg(N, nf, cache)], ], np.complex128, ) return gamma_S_0