Source code for ekore.anomalous_dimensions.unpolarized.space_like.as4.fhmruvv.ggg

r"""The unpolarized, space-like anomalous dimension :math:`\gamma_{gg}^{(3)}`."""

import numba as nb

from ......harmonics import cache as c
from ......harmonics.log_functions import lm11, lm12m1, lm13m1


[docs] @nb.njit(cache=True) def gamma_gg(n, nf, cache, variation): r"""Compute the |N3LO| gluon-gluon singlet anomalous dimension. The routine is taken from :cite:`Moch:2023tdj`. Parameters ---------- n : complex Mellin moment nf : int Number of active flavors cache: numpy.ndarray Harmonic sum cache variation : int |N3LO| anomalous dimension variation Returns ------- complex |N3LO| gluon-gluon singlet anomalous dimension :math:`\gamma_{gg}^{(3)}(N)` """ S1 = c.get(c.S1, cache, n) S2 = c.get(c.S2, cache, n) S3 = c.get(c.S3, cache, n) nf2 = nf * nf nf3 = nf * nf2 # The known large-x coefficients [except delta(1-x)] A4gluon = 40880.330 - 11714.246 * nf + 440.04876 * nf2 + 7.3627750 * nf3 B4gluon = 68587.64 - 18143.983 * nf + 423.81135 * nf2 + 9.0672154 * 0.1 * nf3 Ccoeff = 8.5814120 * 10**4 - 1.3880515 * 10**4 * nf + 1.3511111 * 10**2 * nf2 Dcoeff = 5.4482808 * 10**4 - 4.3411337 * 10**3 * nf - 2.1333333 * 10 * nf2 # The known coefficients of 1/x*ln^a x terms, a = 3,2 bfkl0 = -8.308617314 * 10**3 bfkl1 = -1.069119905 * 10**5 - 9.963830436 * 10**2 * nf # The resulting part of the function P3gg01 = ( +bfkl0 * (-(6 / (-1 + n) ** 4)) + bfkl1 * 2 / (-1 + n) ** 3 + A4gluon * (-S1) + B4gluon + Ccoeff * lm11(n, S1) + Dcoeff * 1 / n ) # The selected approximations for nf = 3, 4, 5 if nf == 3: P3ggApp1 = ( P3gg01 + 3.4 * bfkl1 * -(1 / (-1 + n) ** 2) - 345063.0 * 1 / ((-1 + n) * n) + 86650.0 * (1 / n - 1 / (1 + n) + 1 / (2 + n) - 1 / (3 + n)) + 158160.0 * (-(1 / n**2)) - 15741.0 * lm12m1(n, S1, S2) - 9417.0 * lm13m1(n, S1, S2, S3) ) P3ggApp2 = ( P3gg01 + 5.4 * bfkl1 * -(1 / (-1 + n) ** 2) - 1265632.0 * 1 / ((-1 + n) * n) - 656644.0 * (1 / n - 1 / (1 + n) + 1 / (2 + n) - 1 / (3 + n)) - 1352233.0 * (-(1 / n**2)) + 203298.0 * lm12m1(n, S1, S2) + 39112.0 * lm13m1(n, S1, S2, S3) ) elif nf == 4: P3ggApp1 = ( P3gg01 + 3.4 * bfkl1 * -(1 / (-1 + n) ** 2) - 342625.0 * 1 / ((-1 + n) * n) + 100372.0 * (1 / n - 1 / (1 + n) + 1 / (2 + n) - 1 / (3 + n)) + 189167.0 * (-(1 / n**2)) - 29762.0 * lm12m1(n, S1, S2) - 12102.0 * lm13m1(n, S1, S2, S3) ) P3ggApp2 = ( P3gg01 + 5.4 * bfkl1 * -(1 / (-1 + n) ** 2) - 1271540.0 * 1 / ((-1 + n) * n) - 649661.0 * (1 / n - 1 / (1 + n) + 1 / (2 + n) - 1 / (3 + n)) - 1334919.0 * (-(1 / n**2)) + 191263.0 * lm12m1(n, S1, S2) + 36867.0 * lm13m1(n, S1, S2, S3) ) elif nf == 5: P3ggApp1 = ( P3gg01 + 3.4 * bfkl1 * -(1 / (-1 + n) ** 2) - 337540.0 * 1 / ((-1 + n) * n) + 119366.0 * (1 / n - 1 / (1 + n) + 1 / (2 + n) - 1 / (3 + n)) + 223769.0 * (-(1 / n**2)) - 45129.0 * lm12m1(n, S1, S2) - 15046.0 * lm13m1(n, S1, S2, S3) ) P3ggApp2 = ( P3gg01 + 5.4 * bfkl1 * -(1 / (-1 + n) ** 2) - 1274800.0 * 1 / ((-1 + n) * n) - 637406.0 * (1 / n - 1 / (1 + n) + 1 / (2 + n) - 1 / (3 + n)) - 1314010.0 * (-(1 / n**2)) + 177882.0 * lm12m1(n, S1, S2) + 34362.0 * lm13m1(n, S1, S2, S3) ) else: raise NotImplementedError("nf=6 is not available at N3LO") # We return (for now) one of the two error-band representatives # or the present best estimate, their average if variation == 1: P3GGA = P3ggApp1 elif variation == 2: P3GGA = P3ggApp2 else: P3GGA = 0.5 * (P3ggApp1 + P3ggApp2) return -P3GGA