diff --git a/crates/ekore/src/anomalous_dimensions/unpolarized/spacelike/aem1.rs b/crates/ekore/src/anomalous_dimensions/unpolarized/spacelike/aem1.rs index 3a2b728fd..91427622c 100644 --- a/crates/ekore/src/anomalous_dimensions/unpolarized/spacelike/aem1.rs +++ b/crates/ekore/src/anomalous_dimensions/unpolarized/spacelike/aem1.rs @@ -1,7 +1,8 @@ //! |LO| |QED|. use num::complex::Complex; +use num::Zero; -use crate::constants::{ed2, eu2, uplike_flavors, CF, NC, TR}; +use crate::constants::{charge_combinations, ed2, eu2, uplike_flavors, CF, NC, TR}; use crate::harmonics::cache::Cache; use crate::anomalous_dimensions::unpolarized::spacelike::as1; @@ -36,6 +37,64 @@ pub fn gamma_ns(c: &mut Cache, nf: u8) -> Complex { as1::gamma_ns(c, nf) / CF } +/// Compute the leading-order singlet QED anomalous dimension matrix +/// +/// Implements Eq. (2.5) of +pub fn gamma_singlet(c: &mut Cache, nf: u8) -> [[Complex; 4]; 4] { + let cc = charge_combinations(nf); + let e2avg = cc[0]; + let vue2m = cc[1]; + let vde2m = cc[2]; + let e2delta = cc[3]; + + let gamma_ph_q = gamma_phq(c, nf); + let gamma_q_ph = gamma_qph(c, nf); + let gamma_nonsinglet = gamma_ns(c, nf); + + [ + [ + Complex::::zero(), + Complex::::zero(), + Complex::::zero(), + Complex::::zero(), + ], + [ + Complex::::zero(), + gamma_phph(c, nf), + e2avg * gamma_ph_q, + vue2m * gamma_ph_q, + ], + [ + Complex::::zero(), + e2avg * gamma_q_ph, + e2avg * gamma_nonsinglet, + vue2m * gamma_nonsinglet, + ], + [ + Complex::::zero(), + vde2m * gamma_q_ph, + vde2m * gamma_nonsinglet, + e2delta * gamma_nonsinglet, + ], + ] +} + +/// Compute the leading-order valence QED anomalous dimension matrix +/// +/// Implements Eq. (2.5) of +pub fn gamma_valence(c: &mut Cache, nf: u8) -> [[Complex; 2]; 2] { + let cc = charge_combinations(nf); + let e2avg = cc[0]; + let vue2m = cc[1]; + let vde2m = cc[2]; + let e2delta = cc[3]; + + [ + [e2avg * gamma_ns(c, nf), vue2m * gamma_ns(c, nf)], + [vde2m * gamma_ns(c, nf), e2delta * gamma_ns(c, nf)], + ] +} + #[cfg(test)] mod tests { use super::*;