Source code for ekore.anomalous_dimensions.unpolarized.time_like.as2

"""The unpolarized, time-like |NLO| Altarelli-Parisi splitting kernels."""

import numba as nb
import numpy as np
from numpy import power as npp

from eko import constants
from eko.constants import zeta2, zeta3

from ....harmonics import cache as c


[docs] @nb.njit(cache=True) def gamma_nsp(N, nf, cache): r"""Compute the |NLO| non-singlet positive anomalous dimension. Implements :eqref:`A6` from :cite:`Gluck:1992zx`. Parameters ---------- N : complex Mellin moment nf : int No. of active flavors cache: numpy.ndarray Harmonic sum cache Returns ------- complex NLO non-singlet positive anomalous dimension :math:`\gamma_{ns}^{(1)+}(N)` """ NS = N * N NT = NS * N NFO = NT * N N1 = N + 1 N1S = N1 * N1 N1T = N1S * N1 S1 = c.get(c.S1, cache, N) S2 = c.get(c.S2, cache, N) S1h = c.get(c.S1h, cache, N) S2h = c.get(c.S2h, cache, N) S3h = c.get(c.S3h, cache, N) S1ph = c.get(c.S1ph, cache, N) g3 = c.get(c.g3, cache, N) SLC = -5 / 8 * zeta3 SLV = g3 + S1 / N**2 - (zeta2 / 2) * (-2 / (1 + N) + 2 / N + S1ph - S1h) SSCHLP = SLC + SLV PNPA = ( 16 * S1 * (2 * N + 1) / (NS * N1S) + 16 * (2 * S1 - 1 / (N * N1)) * (S2 - S2h) + 64 * SSCHLP + 24 * S2 - 3 - 8 * S3h - 8 * (3 * NT + NS - 1) / (NT * N1T) - 16 * (2 * NS + 2 * N + 1) / (NT * N1T) ) * (-0.5) PNSB = ( S1 * (536 / 9 + 8 * (2 * N + 1) / (NS * N1S)) - (16 * S1 + 52 / 3 - 8 / (N * N1)) * S2 - 43 / 6 - (151 * NFO + 263 * NT + 97 * NS + 3 * N + 9) * 4 / (9 * NT * N1T) ) * (-0.5) PNSC = ( -160 / 9 * S1 + 32 / 3.0 * S2 + 4 / 3 + 16 * (11 * NS + 5 * N - 3) / (9 * NS * N1S) ) * (-0.5) PNSTL = (-4 * S1 + 3 + 2 / (N * N1)) * ( 2 * S2 - 2 * zeta2 - (2 * N + 1) / (NS * N1S) ) result = ( constants.CF * ( (constants.CF - constants.CA / 2) * PNPA + constants.CA * PNSB + (1 / 2) * nf * PNSC ) + constants.CF**2 * PNSTL * 4 ) return -result
[docs] @nb.njit(cache=True) def gamma_nsm(N, nf, cache): r"""Compute the |NLO| non-singlet negative anomalous dimension. Based on :cite:`Gluck:1992zx`. Parameters ---------- N : complex Mellin moment nf : int No. of active flavors cache: numpy.ndarray Harmonic sum cache Returns ------- complex NLO non-singlet negative anomalous dimension :math:`\gamma_{ns}^{(1)-}(N)` """ NS = N * N NT = NS * N NFO = NT * N N1 = N + 1 N1S = N1 * N1 N1T = N1S * N1 S1 = c.get(c.S1, cache, N) S2 = c.get(c.S2, cache, N) S1h = c.get(c.S1h, cache, N) S2mh = c.get(c.S2mh, cache, N) S3mh = c.get(c.S3mh, cache, N) S1ph = c.get(c.S1ph, cache, N) g3 = c.get(c.g3, cache, N) SLC = -5 / 8 * zeta3 SLV = g3 + S1 / N**2 - (zeta2 / 2) * (-2 / (1 + N) + 2 / N + S1ph - S1h) SSCHLM = SLC - SLV PNMA = ( 16 * S1 * (2 * N + 1) / (NS * N1S) + 16 * (2 * S1 - 1 / (N * N1)) * (S2 - S2mh) + 64 * SSCHLM + 24 * S2 - 3 - 8 * S3mh - 8 * (3 * NT + NS - 1) / (NT * N1T) + 16 * (2 * NS + 2 * N + 1) / (NT * N1T) ) * (-0.5) PNSB = ( S1 * (536 / 9 + 8 * (2 * N + 1) / (NS * N1S)) - (16 * S1 + 52 / 3 - 8 / (N * N1)) * S2 - 43 / 6 - (151 * NFO + 263 * NT + 97 * NS + 3 * N + 9) * 4 / (9 * NT * N1T) ) * (-0.5) PNSC = ( -160 / 9 * S1 + 32 / 3.0 * S2 + 4 / 3 + 16 * (11 * NS + 5 * N - 3) / (9 * NS * N1S) ) * (-0.5) PNSTL = (-4 * S1 + 3 + 2 / (N * N1)) * ( 2 * S2 - 2 * zeta2 - (2 * N + 1) / (NS * N1S) ) result = ( constants.CF * ( (constants.CF - constants.CA / 2) * PNMA + constants.CA * PNSB + (1 / 2) * nf * PNSC ) + constants.CF**2 * PNSTL * 4 ) return -result
[docs] @nb.njit(cache=True) def gamma_qqs(N, nf): r"""Compute the |NLO| quark-quark singlet anomalous dimension. Implements :eqref:`B.9` from :cite:`Mitov:2006wy`. Parameters ---------- N : complex Mellin moment nf : int No. of active flavors Returns ------- complex NLO quark-quark singlet anomalous dimension :math:`\gamma_{qq}^{(1)s}(N)` """ qqS1 = ( constants.CF * nf * ( ( 4 * ( 8 + 44 * N + 46 * npp(N, 2) + 21 * npp(N, 3) + 14 * npp(N, 4) + 15 * npp(N, 5) + 10 * npp(N, 6) + 2 * npp(N, 7) ) ) / ((-1 + N) * npp(N, 3) * npp(1 + N, 3) * npp(2 + N, 2)) ) ) return qqS1
[docs] @nb.njit(cache=True) def gamma_qg(N, nf, cache): r"""Compute the |NLO| quark-gluon anomalous dimension. Implements :eqref:`B.10` from :cite:`Mitov:2006wy` and :eqref:`A1` from :cite:`Gluck:1992zx`. Parameters ---------- N : complex Mellin moment nf : int No. of active flavors cache: numpy.ndarray Harmonic sum cache Returns ------- complex NLO quark-gluon anomalous dimension :math:`\gamma_{qg}^{(1)}(N)` """ S1 = c.get(c.S1, cache, N) S2 = c.get(c.S2, cache, N) Sm2 = c.get(c.Sm2, cache, N, is_singlet=True) qg1 = ( nf * constants.CF * ( ( 2 * ( 8 + 12 * N + 18 * npp(N, 2) + 77 * npp(N, 3) + 127 * npp(N, 4) + 104 * npp(N, 5) + 45 * npp(N, 6) + 9 * npp(N, 7) ) ) / (npp(N, 3) * npp(1 + N, 3) * npp(2 + N, 2)) - ( 4 * S1 * ( -8 - 12 * N + 22 * npp(N, 2) + 25 * npp(N, 3) + 10 * npp(N, 4) + 3 * npp(N, 5) ) ) / (npp(N, 2) * npp(1 + N, 2) * npp(2 + N, 2)) + (4 * npp(S1, 2) * (2 + N + npp(N, 2))) / (N * (1 + N) * (2 + N)) - (20 * S2 * (2 + N + npp(N, 2))) / (N * (1 + N) * (2 + N)) ) ) qg2 = ( nf * constants.CA * ( ( 4 * ( 144 + 600 * N + 980 * npp(N, 2) + 2366 * npp(N, 3) + 2564 * npp(N, 4) + 379 * npp(N, 5) - 1177 * npp(N, 6) - 1037 * npp(N, 7) - 423 * npp(N, 8) - 76 * npp(N, 9) - 288 * zeta2 * npp(N, 2) - 720 * zeta2 * npp(N, 3) - 504 * zeta2 * npp(N, 4) + 180 * zeta2 * npp(N, 5) + 576 * zeta2 * npp(N, 6) + 504 * zeta2 * npp(N, 7) + 216 * zeta2 * npp(N, 8) + 36 * zeta2 * npp(N, 9) - 180 * npp(N, 3) - 72 * npp(N, 4) + 108 * npp(N, 5) + 108 * npp(N, 6) + 36 * npp(N, 7) ) ) / (9 * (-1 + N) * npp(N, 3) * npp(1 + N, 3) * npp(2 + N, 3)) + (8 * Sm2 * (2 + N + npp(N, 2))) / (N * (1 + N) * (2 + N)) + ( 4 * S1 * ( -48 - 100 * N + 40 * npp(N, 2) + 77 * npp(N, 3) + 32 * npp(N, 4) + 11 * npp(N, 5) ) ) / (3 * npp(N, 2) * npp(1 + N, 2) * npp(2 + N, 2)) - (4 * npp(S1, 2) * (2 + N + npp(N, 2))) / (N * (1 + N) * (2 + N)) + (12 * S2 * (2 + N + npp(N, 2))) / (N * (1 + N) * (2 + N)) ) ) qg3 = ( nf * nf * ( ( 8 * ( -12 - 16 * N + 37 * npp(N, 2) + 41 * npp(N, 3) + 17 * npp(N, 4) + 5 * npp(N, 5) ) ) / (9 * npp(N, 2) * npp(1 + N, 2) * npp(2 + N, 2)) - (8 * S1 * (2 + N + npp(N, 2))) / (3 * N * (1 + N) * (2 + N)) ) ) result = (1 / (2 * nf)) * (qg1 + qg2 + qg3) return result
[docs] @nb.njit(cache=True) def gamma_gq(N, nf, cache): r"""Compute the |NLO| gluon-quark anomalous dimension. Implements :eqref:`B.11` from :cite:`Mitov:2006wy` and :eqref:`A1` from :cite:`Gluck:1992zx`. Parameters ---------- N : complex Mellin moment nf : int No. of active flavors cache: numpy.ndarray Harmonic sum cache Returns ------- complex NLO gluon-quark anomalous dimension :math:`\gamma_{gq}^{(1)}(N)` """ S1 = c.get(c.S1, cache, N) S2 = c.get(c.S2, cache, N) Sm2 = c.get(c.Sm2, cache, N, is_singlet=True) gq1 = ( constants.CF * constants.CF * ( ( 2 * ( -4 - 4 * N + 41 * npp(N, 2) + 83 * npp(N, 3) + 41 * npp(N, 4) - 11 * npp(N, 5) - 10 * npp(N, 6) - 8 * npp(N, 7) - 16 * zeta2 * npp(N, 2) - 24 * zeta2 * npp(N, 3) + 16 * zeta2 * npp(N, 5) + 16 * zeta2 * npp(N, 6) + 8 * zeta2 * npp(N, 7) ) ) / (npp(-1 + N, 2) * npp(N, 3) * npp(1 + N, 3)) + ( 8 * (4 - 2 * N - 16 * npp(N, 2) - npp(N, 3) - 2 * npp(N, 4) + npp(N, 5)) * S1 ) / (npp(-1 + N, 2) * npp(N, 2) * npp(1 + N, 2)) - (4 * (2 + N + npp(N, 2)) * npp(S1, 2)) / ((-1 + N) * N * (1 + N)) + (12 * (2 + N + npp(N, 2)) * S2) / ((-1 + N) * N * (1 + N)) ) ) gq2 = ( constants.CF * constants.CA * ( -( 4 * ( 16 - 144 * npp(N, 2) - 156 * npp(N, 3) - 101 * npp(N, 4) - 77 * npp(N, 5) - 75 * npp(N, 6) - 44 * npp(N, 7) - npp(N, 8) + 5 * npp(N, 9) + npp(N, 10) + 16 * N + 32 * npp(N, 2) - 20 * npp(N, 3) - 44 * npp(N, 4) - 26 * npp(N, 5) + 14 * npp(N, 6) + 22 * npp(N, 7) + 6 * npp(N, 8) ) ) / (npp(-1 + N, 3) * npp(N, 3) * npp(1 + N, 3) * npp(2 + N, 2)) + (8 * (2 + N + npp(N, 2)) * Sm2) / ((-1 + N) * N * (1 + N)) - (8 * (2 - 2 * N - 9 * npp(N, 2) + npp(N, 3) - npp(N, 4) + npp(N, 5)) * S1) / (npp(-1 + N, 2) * npp(N, 2) * npp(1 + N, 2)) + (4 * (2 + N + npp(N, 2)) * npp(S1, 2)) / ((-1 + N) * N * (1 + N)) - (20 * (2 + N + npp(N, 2)) * S2) / ((-1 + N) * N * (1 + N)) ) ) result = (2 * nf) * (gq1 + gq2) return result
[docs] @nb.njit(cache=True) def gamma_gg(N, nf, cache): r"""Compute the |NLO| gluon-gluon anomalous dimension. Implements :eqref:`B.12` from :cite:`Mitov:2006wy`. Parameters ---------- N : complex Mellin moment nf : int No. of active flavors cache: numpy.ndarray Harmonic sum cache Returns ------- complex NLO gluon-gluon anomalous dimension :math:`\gamma_{gg}^{(1)}(N)` """ S1 = c.get(c.S1, cache, N) S2 = c.get(c.S2, 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) gg1 = ( nf * constants.CF * ( ( 2 * ( -16 + 8 * N + 108 * npp(N, 2) + 162 * npp(N, 3) + 106 * npp(N, 4) + 11 * npp(N, 5) - 5 * npp(N, 6) - 2 * npp(N, 7) + 6 * npp(N, 8) + 5 * npp(N, 9) + npp(N, 10) ) ) / (npp(-1 + N, 2) * npp(N, 3) * npp(1 + N, 3) * npp(2 + N, 2)) ) ) gg2 = ( constants.CA * constants.CA * ( ( 2 * ( -576 + 240 * N + 3824 * npp(N, 2) + 1240 * npp(N, 3) + 1928 * npp(N, 4) + 8303 * npp(N, 5) + 10651 * npp(N, 6) + 6614 * npp(N, 7) + 1238 * npp(N, 8) - 1133 * npp(N, 9) - 889 * npp(N, 10) - 288 * npp(N, 11) - 48 * npp(N, 12) + 1152 * zeta2 * npp(N, 2) + 1248 * zeta2 * npp(N, 3) - 1296 * zeta2 * npp(N, 4) - 792 * zeta2 * npp(N, 5) + 876 * zeta2 * npp(N, 6) - 1368 * zeta2 * npp(N, 7) - 2340 * zeta2 * npp(N, 8) + 120 * zeta2 * npp(N, 9) + 1476 * zeta2 * npp(N, 10) + 792 * zeta2 * npp(N, 11) + 132 * zeta2 * npp(N, 12) - 576 * N - 1440 * npp(N, 2) + 216 * npp(N, 3) + 1800 * npp(N, 4) + 1800 * npp(N, 5) - 72 * npp(N, 6) - 1008 * npp(N, 7) - 576 * npp(N, 8) - 144 * npp(N, 9) ) ) / (9 * npp(-1 + N, 3) * npp(N, 3) * npp(1 + N, 3) * npp(2 + N, 3)) - (8 * Sm3) + (Sm2) * ( (32 * (1 + N + npp(N, 2))) / ((-1 + N) * N * (1 + N) * (2 + N)) - 16 * S1 ) - (8 * S2 * (12 - 10 * N + npp(N, 2) + 22 * npp(N, 3) + 11 * npp(N, 4))) / (3 * (-1 + N) * N * (1 + N) * (2 + N)) + (S1) * ( -( 4 * ( -144 - 144 * N + 236 * npp(N, 2) + 308 * npp(N, 3) + 829 * npp(N, 4) + 680 * npp(N, 5) - 134 * npp(N, 6) - 268 * npp(N, 7) - 67 * npp(N, 8) + 288 * zeta2 * npp(N, 2) + 288 * zeta2 * npp(N, 3) - 504 * zeta2 * npp(N, 4) - 576 * zeta2 * npp(N, 5) + 144 * zeta2 * npp(N, 6) + 288 * zeta2 * npp(N, 7) + 72 * zeta2 * npp(N, 8) ) ) / (9 * npp(-1 + N, 2) * npp(N, 2) * npp(1 + N, 2) * npp(2 + N, 2)) + 16 * S2 ) - (8 * S3) + (16 * Sm21) ) ) gg3 = ( nf * constants.CA * ( -( 8 * ( -12 + 26 * N + 132 * npp(N, 2) + 85 * npp(N, 3) + 34 * npp(N, 4) - 9 * npp(N, 5) - 25 * npp(N, 6) - 12 * npp(N, 7) - 3 * npp(N, 8) + 24 * zeta2 * npp(N, 2) + 24 * zeta2 * npp(N, 3) - 42 * zeta2 * npp(N, 4) - 48 * zeta2 * npp(N, 5) + 12 * zeta2 * npp(N, 6) + 24 * zeta2 * npp(N, 7) + 6 * zeta2 * npp(N, 8) ) ) / (9 * npp(-1 + N, 2) * npp(N, 2) * npp(1 + N, 2) * npp(2 + N, 2)) - (S1 * (40 / 9)) + (S2 * (16 / 3)) ) ) result = gg1 + gg2 + gg3 return result
[docs] @nb.njit(cache=True) def gamma_singlet(N, nf, cache): r"""Compute the |NLO| singlet anomalous dimension matrix. Implements :eqref:`2.13` from :cite:`Gluck:1992zx`. Parameters ---------- N : complex Mellin moment nf : int No. of active flavors cache: numpy.ndarray Harmonic sum cache Returns ------- numpy.ndarray NLO singlet anomalous dimension matrix :math:`\gamma_{s}^{(1)}` """ gamma_qq = gamma_nsp(N, nf, cache) + gamma_qqs(N, nf) result = np.array( [ [gamma_qq, gamma_gq(N, nf, cache)], [gamma_qg(N, nf, cache), gamma_gg(N, nf, cache)], ], np.complex128, ) return result