Source code for ekomark.benchmark.external.lhapdf_utils

"""LHAPDF interface."""

import numpy as np

from eko import basis_rotation as br


[docs] def compute_LHAPDF_data( theory, operators, pdf, skip_pdfs, rotate_to_evolution_basis=False ): """ Run LHAPDF to compute operators. Parameters ---------- operators : dict operators card pdf : lhapdf_type pdf skip_pdfs : list list of pdfs (pid or name) to skip rotate_to_evolution_basis: bool rotate to evolution basis Returns ------- ref : dict output containing: target_xgrid, values """ target_xgrid = operators["interpolation_xgrid"] out_tabs = {} for mu2 in np.array(operators["mugrid"]) ** 2: tab = {} for pid in br.flavor_basis_pids: if pid in skip_pdfs: continue # collect lhapdf me = [] for x in target_xgrid: xf = pdf.xfxQ2(pid, x, mu2) me.append(xf) tab[pid] = np.array(me) # rotate if needed if rotate_to_evolution_basis: qed = theory["QED"] > 0 if not qed: evol_basis = br.evol_basis rotate_flavor_to_evolution = br.rotate_flavor_to_evolution else: evol_basis = br.unified_evol_basis rotate_flavor_to_evolution = br.rotate_flavor_to_unified_evolution pdfs = np.array( [ tab[pid] if pid in tab else np.zeros(len(target_xgrid)) for pid in br.flavor_basis_pids ] ) evol_pdf = rotate_flavor_to_evolution @ pdfs tab = dict(zip(evol_basis, evol_pdf)) out_tabs[mu2] = tab ref = { "target_xgrid": target_xgrid, "values": out_tabs, } return ref