diff --git a/crates/eko/src/bib.rs b/crates/eko/src/bib.rs new file mode 120000 index 000000000..1e713280e --- /dev/null +++ b/crates/eko/src/bib.rs @@ -0,0 +1 @@ +../../ekore/src/bib.rs \ No newline at end of file diff --git a/crates/eko/src/lib.rs b/crates/eko/src/lib.rs index e6b3e44cc..e6c1229a6 100644 --- a/crates/eko/src/lib.rs +++ b/crates/eko/src/lib.rs @@ -4,7 +4,8 @@ use ekore; use ekore::harmonics::cache::Cache; use std::ffi::c_void; -mod mellin; +pub mod bib; +pub mod mellin; /// QCD intergration kernel inside quad. #[no_mangle] diff --git a/crates/eko/src/mellin.rs b/crates/eko/src/mellin.rs index 5c12366d0..1322bbe08 100644 --- a/crates/eko/src/mellin.rs +++ b/crates/eko/src/mellin.rs @@ -9,10 +9,13 @@ use std::f64::consts::PI; /// Talbot inversion path. /// /// Implements the algorithm presented in [\[Abate\]](crate::bib::Abate). -/// $p_{\text{Talbot}}(t) = o + r \cdot ( \theta \cot(\theta) + i\theta)$ with $\theta = \pi(2t-1)$ -/// The default values for the parameters $r,o$ are given by $r = 1/2, o = 0$ for -/// the non-singlet integrals and by $r = \frac{2}{5} \frac{16}{0.1 - \ln(x)}, o = 1$ -/// for the singlet sector. Note that the non-singlet kernels evolve poles only up to +/// +/// $$p_{\text{Talbot}}(t) = o + r \cdot ( \theta \cot(\theta) + i\theta) ~ \text{with}~ \theta = \pi(2t-1)$$ +/// +/// The default values for the parameters $r,o$ are given by +/// $r = \frac{2}{5} \frac{16}{0.1 - \ln(x)}$ and $o = 0$ for +/// the non-singlet integrals and $o = 1$ for the singlet sector. +/// Note that the non-singlet kernels evolve poles only up to /// $N=0$ whereas the singlet kernels have poles up to $N=1$. pub struct TalbotPath { /// integration variable diff --git a/crates/ekore/src/anomalous_dimensions/unpolarized/spacelike/as2.rs b/crates/ekore/src/anomalous_dimensions/unpolarized/spacelike/as2.rs index afdf1a38d..80c161e25 100644 --- a/crates/ekore/src/anomalous_dimensions/unpolarized/spacelike/as2.rs +++ b/crates/ekore/src/anomalous_dimensions/unpolarized/spacelike/as2.rs @@ -88,7 +88,7 @@ pub fn gamma_nsp(c: &mut Cache, nf: u8) -> Complex { /// Compute the pure-singlet quark-quark anomalous dimension. /// -/// Implements Eq. (3.6) of [\[Vogt:2004mw\]][crate::bib::Vogt:2004mw]. +/// Implements Eq. (3.6) of [\[Vogt:2004mw\]][crate::bib::Vogt2004mw]. pub fn gamma_ps(c: &mut Cache, nf: u8) -> Complex { let N = c.n; let gqqps1_nfcf = (-4. * (2. + N * (5. + N)) * (4. + N * (4. + N * (7. + 5. * N)))) @@ -98,7 +98,7 @@ pub fn gamma_ps(c: &mut Cache, nf: u8) -> Complex { /// Compute the quark-gluon singlet anomalous dimension. /// -/// Implements Eq. (3.7) of [\[Vogt:2004mw\]][crate::bib::Vogt:2004mw]. +/// Implements Eq. (3.7) of [\[Vogt:2004mw\]][crate::bib::Vogt2004mw]. pub fn gamma_qg(c: &mut Cache, nf: u8) -> Complex { let N = c.n; let S1 = c.get(K::S1); @@ -126,7 +126,7 @@ pub fn gamma_qg(c: &mut Cache, nf: u8) -> Complex { /// Compute the gluon-quark singlet anomalous dimension. /// -/// Implements Eq. (3.8) of [\[Vogt:2004mw\]][crate::bib::Vogt:2004mw]. +/// Implements Eq. (3.8) of [\[Vogt:2004mw\]][crate::bib::Vogt2004mw]. pub fn gamma_gq(c: &mut Cache, nf: u8) -> Complex { let N = c.n; let S1 = c.get(K::S1); @@ -162,7 +162,7 @@ pub fn gamma_gq(c: &mut Cache, nf: u8) -> Complex { /// Compute the gluon-gluon singlet anomalous dimension. /// -/// Implements Eq. (3.9) of [\[Vogt:2004mw\]][crate::bib::Vogt:2004mw]. +/// Implements Eq. (3.9) of [\[Vogt:2004mw\]][crate::bib::Vogt2004mw]. pub fn gamma_gg(c: &mut Cache, nf: u8) -> Complex { let N = c.n; let S1 = c.get(K::S1); diff --git a/crates/ekore/src/harmonics/g_functions.rs b/crates/ekore/src/harmonics/g_functions.rs index 8acbf985e..ff0f8789f 100644 --- a/crates/ekore/src/harmonics/g_functions.rs +++ b/crates/ekore/src/harmonics/g_functions.rs @@ -9,8 +9,8 @@ use num::{complex::Complex, Zero}; /// This function appears in the analytic continuation of the harmonic sum /// $S_{-2,1}(N)$ which in turn appears in the NLO anomalous dimension. /// -/// We use the name from [[MuselliPhD]][crate::bib::MuselliPhD], but not his implementation - rather we use the -/// Pegasus [[Vogt:2004ns]][crate::bib::Vogt2004ns] implementation. +/// We use the name from [\[MuselliPhD\]](crate::bib::MuselliPhD), but not his implementation - rather we use the +/// Pegasus [\[Vogt:2004ns\]](crate::bib::Vogt2004ns) implementation. pub fn g3(N: Complex, S1: Complex) -> Complex { const CS: [f64; 7] = [ 1.0000e0, -0.9992e0, 0.9851e0, -0.9005e0, 0.6621e0, -0.3174e0, 0.0699e0, diff --git a/crates/ekore/src/harmonics/polygamma.rs b/crates/ekore/src/harmonics/polygamma.rs index be1bf2cc2..6f3d7d66d 100644 --- a/crates/ekore/src/harmonics/polygamma.rs +++ b/crates/ekore/src/harmonics/polygamma.rs @@ -5,7 +5,8 @@ use std::f64::consts::PI; /// Compute the polygamma functions $\psi_k(z)$. /// -/// Reimplementation of ``WPSIPG`` (C317) in [CERNlib](http://cernlib.web.cern.ch/cernlib/) given by [[KOLBIG1972221]][crate::bib::KOLBIG1972221]. +/// Reimplementation of ``WPSIPG`` (C317) in [CERNlib](http://cernlib.web.cern.ch/cernlib/) +/// given by [\[KOLBIG1972221\]](crate::bib::KOLBIG1972221). /// /// TODO: introduce back errors pub fn cern_polygamma(Z: Complex, K: usize) -> Complex { @@ -82,9 +83,7 @@ pub fn cern_polygamma(Z: Complex, K: usize) -> Complex { } let mut R = 1. / V.powu(2); let mut P = R * C[K][6 - 1]; - for i in (1..=5).rev() - // (int i = 5; i>1-1; i--) - { + for i in (1..=5).rev() { P = R * (C[K][i - 1] + P); } H = (SGN[K] as f64)