Skip to content

Commit

Permalink
Merge branch 'master' into read-legacy
Browse files Browse the repository at this point in the history
  • Loading branch information
giacomomagni committed Nov 12, 2024
2 parents b55fb05 + b89c726 commit 1e7ae81
Show file tree
Hide file tree
Showing 24 changed files with 492 additions and 254 deletions.
6 changes: 3 additions & 3 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ repos:
- id: pycln
args: [--config=pyproject.toml]
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.6.9
rev: v0.7.2
hooks:
# Run the linter.
- id: ruff
Expand All @@ -36,7 +36,7 @@ repos:
additional_dependencies: [tomli]
args: [--in-place, --config, ./pyproject.toml]
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v1.11.2
rev: v1.13.0
hooks:
- id: mypy
additional_dependencies: [types-PyYAML]
Expand All @@ -59,6 +59,6 @@ repos:
types: [file, rust]
language: system
- repo: https://github.com/pre-commit/pre-commit
rev: v4.0.0
rev: v4.0.1
hooks:
- id: validate_manifest
12 changes: 4 additions & 8 deletions benchmarks/eko/benchmark_inverse_matching.py
Original file line number Diff line number Diff line change
Expand Up @@ -90,14 +90,10 @@ def benchmark_inverse_matching():
with pytest.raises(AssertionError):
np.testing.assert_allclose(op1_nf3.operator, op2_nf3.operator)

pdf1 = apply.apply_pdf(eko_output1, toy.mkPDF("ToyLH", 0))
pdf2 = apply.apply_pdf(eko_output2, toy.mkPDF("ToyLH", 0))
pdf1, _ = apply.apply_pdf(eko_output1, toy.mkPDF("ToyLH", 0))
pdf2, _ = apply.apply_pdf(eko_output2, toy.mkPDF("ToyLH", 0))

# test that different PTO matching is applied correctly
np.testing.assert_allclose(
pdf1[(MC**2, 4)]["pdfs"][C_PID], pdf2[(MC**2, 4)]["pdfs"][C_PID]
)
np.testing.assert_allclose(pdf1[(MC**2, 4)][C_PID], pdf2[(MC**2, 4)][C_PID])
with pytest.raises(AssertionError):
np.testing.assert_allclose(
pdf1[(MC**2, 3)]["pdfs"][C_PID], pdf2[(MC**2, 3)]["pdfs"][C_PID]
)
np.testing.assert_allclose(pdf1[(MC**2, 3)][C_PID], pdf2[(MC**2, 3)][C_PID])
10 changes: 10 additions & 0 deletions crates/ekore/src/anomalous_dimensions/polarized/spacelike/as1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -82,4 +82,14 @@ mod tests {
let me = gamma_qg(&mut c, NF);
assert_approx_eq_cmplx!(f64, me, Complex::zero(), epsilon = 1e-12);
}

// TODO: activate this test once the beta function will be available
// #[test]
// fn axial_anomaly() {
// const N: Complex<f64> = cmplx!(1., 0.);
// let mut c = Cache::new(N);
// let me = gamma_gg(&mut c, NF);
// let beta = -1.0 * beta_qcd_as2(NF);
// assert_approx_eq_cmplx!(f64, me, beta);
// }
}
14 changes: 14 additions & 0 deletions crates/ekore/src/anomalous_dimensions/polarized/spacelike/as2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ pub fn gamma_singlet(c: &mut Cache, nf: u8) -> [[Complex<f64>; 2]; 2] {

#[cfg(test)]
mod tests {
use super::super::as1::gamma_gq as as1_gamma_gq;
use super::*;
use crate::harmonics::cache::Cache;
use crate::{assert_approx_eq_cmplx, cmplx};
Expand Down Expand Up @@ -192,4 +193,17 @@ mod tests {
epsilon = 1e-13
);
}

#[test]
fn axial_anomaly() {
const N: Complex<f64> = cmplx!(1., 0.);
let mut c = Cache::new(N);
let me_ps = gamma_ps(&mut c, NF);
let as1_gq = -2.0 * (NF as f64) * as1_gamma_gq(&mut c, NF);
assert_approx_eq_cmplx!(f64, me_ps, as1_gq);
// TODO: activate this test once the beta function will be available
// let me_gg = gamma_gg(&mut c, NF);
// let beta = -1.0 * beta_qcd_as2(NF);
// assert_approx_eq_cmplx!(f64, me_gg, beta, rel=9e-7);
}
}
70 changes: 29 additions & 41 deletions doc/source/overview/tutorials/pdf.ipynb

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 11 additions & 0 deletions doc/source/refs.bib
Original file line number Diff line number Diff line change
Expand Up @@ -1049,6 +1049,17 @@ @article{Moch:2023tdj
year = "2024"
}

@article{Falcioni:2024qpd,
author = "Falcioni, G. and Herzog, F. and Moch, S. and Pelloni, A. and Vogt, A.",
title = "{Four-loop splitting functions in QCD -- The gluon-gluon case --}",
eprint = "2410.08089",
archivePrefix = "arXiv",
primaryClass = "hep-ph",
reportNumber = "ZU-TH 47/24, DESY-24-144, LTH 1384",
month = "10",
year = "2024"
}

@article{Ablinger:2024xtt,
author = {Ablinger, J. and Behring, A. and Bl\"umlein, J. and De Freitas, A. and von Manteuffel, A. and Schneider, C. and Sch\"onwald, K.},
title = "{The non-first-order-factorizable contributions to the three-loop single-mass operator matrix elements $A_{Qg}^{(3)}$ and $\Delta A_{Qg}^{(3)}$}",
Expand Down
26 changes: 24 additions & 2 deletions doc/source/theory/N3LO_ad.rst
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,28 @@ Moreover, the analytical structure of these function is already known to be comp
since in Mellin space they include harmonics sum up to weight 7, for which an
analytical expression is not available.

We provide two different types of approximations, depending on the key ``use_fhmruvv``.
The theory card parameter ``n3lo_ad_variation=(gg, gq, qg, qq, nsp, nsm, nsv)``,
which is set to ``(0,0,0,0,0,0,0)`` as default, can be varied to obtain parametrization uncertainties.

In particular:

* ``use_fhmruvv = True`` (default option) adopts the parametrizations as provided
in :cite:`Moch:2017uml,Falcioni:2023luc,Falcioni:2023vqq,Falcioni:2024xyt,Falcioni:2024qpd`.
For each of the 7 splitting functions, the approximation error can be obtained by varying
the entries of ``n3lo_ad_variation`` in the range: ``0``,
cental value (default), ``1`` down variation, ``2`` up variation.

* ``use_fhmruvv = False`` adopts an in-house parametrization, constructed as described below.
In this case only variations of the singlet sector are available. Currently one
can vary ``n3lo_ad_variation`` in the range: ``0-19`` for ``gg``, ``0-15`` for ``gg``,
``0-15`` for ``qg``, ``0-6`` for ``qq``.
Note these approximations will be no longer updated and are now deprecated.


In house approximation
----------------------

Here, we describe the various assumptions and limits used in order to reconstruct a parametrization
that can approximate their contribution.
In particular we take advantage of some known physical constrains,
Expand All @@ -21,7 +43,7 @@ In any case |N3LO| |DGLAP| evolution at small-x, especially for singlet-like PDF
until the splitting function resummation is available up to |NNLL|.

Non-singlet sector
------------------
^^^^^^^^^^^^^^^^^^

In the non-singlet sector we construct a parametrization for
:math:`\gamma_{ns,-}^{(3)},\gamma_{ns,-}^{(3)},\gamma_{ns,s}^{(3)}` where:
Expand Down Expand Up @@ -147,7 +169,7 @@ In |EKO| they are implemented as follows:
It is checked that this contribution is much more smaller than the values of :math:`B_4`.

Singlet sector
--------------
^^^^^^^^^^^^^^

In the singlet sector we construct a parametrization for
:math:`\gamma_{gg}^{(3)},\gamma_{gq}^{(3)},\gamma_{qg}^{(3)},\gamma_{qq}^{(3)}` where:
Expand Down
11 changes: 9 additions & 2 deletions doc/source/theory/pQCD.rst
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,9 @@ At |NLO|, the singlet entry of the quark-quark anomalous dimension can be decomp
\gamma^{(1)}_{qq} =\gamma^{(1)}_{ps} + \gamma^{(1)}_{ns,+}
The non-singlet sector in the polarized case swaps the plus and minus non-singlet relative to the unpolarized case.
This is because the polarized non-singlet splitting functions are defined as the difference between the probability of the polarized parton splitting into daughter partons of the same flavour
and daughters splitting into a different flavours and opposite helicity. The first moments of the anomalous dimensions are:
This is because the polarized non-singlet splitting functions are defined as the difference between the probability of the polarized parton splitting
into daughter partons of the same flavour and same helicity and daughters of a different flavours and opposite helicity.
The first moments of the anomalous dimensions are:

.. math ::
\gamma^{(1)}_{ns,+} (N=1) &= 0 \\
Expand All @@ -102,6 +103,12 @@ At |NNLO| the non-singlet is further decomposed into the helicity difference qua
where :math:`\gamma^{(2)}_{ns,-}` is the minus flavour asymmetry non-singlet and :math:`\gamma^{(2)}_{ns,s}` the sea-like polarized non-singlet.
The singlet entry :math:`\gamma^{(2)}_{qq}` is defined as above in the |NLO| case.

Finally the violation of the axial current conservation :math:`\bar{\psi} \gamma_\mu \gamma_5 \bar{\psi}` only through
loop corrections impose the following relations to the singlet splittings at all orders :cite:`Moch:2014sna` :

.. math ::
\gamma^{(n)}_{gg} & = - \beta_n \\
\gamma^{(n)}_{ps} & = - 2 n_f \gamma^{(n-1)}_{gq}
Unified Splitting Functions
---------------------------
Expand Down
4 changes: 2 additions & 2 deletions src/eko/io/runcards.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ class TheoryCard(DictLike):
n3lo_ad_variation: N3LOAdVariation
"""|N3LO| anomalous dimension variation: ``(gg, gq, qg, qq, nsp, nsm,
nsv)``."""
use_fhmruvv: Optional[bool] = False
use_fhmruvv: Optional[bool] = True
"""If True use the |FHMRUVV| |N3LO| anomalous dimensions."""
matching_order: Optional[Order] = None
"""Matching conditions perturbative order tuple, ``(QCD, QED)``."""
Expand Down Expand Up @@ -213,7 +213,7 @@ def new_theory(self):
new["n3lo_ad_variation"] = old.get("n3lo_ad_variation", (0, 0, 0, 0, 0, 0, 0))
# here PTO: 0 means truly LO, no QED matching is available so far.
new["matching_order"] = old.get("PTO_matching", [old["PTO"], 0])
new["use_fhmruvv"] = old.get("use_fhmruvv", False)
new["use_fhmruvv"] = old.get("use_fhmruvv", True)
return TheoryCard.from_dict(new)

@property
Expand Down
Loading

0 comments on commit 1e7ae81

Please sign in to comment.