Source code for ekobox.info_file

"""LHAPDF info file utilities."""

import copy
import math

import numpy as np

from eko import couplings
from eko.io.runcards import OperatorCard, TheoryCard

from .genpdf import load
from .utils import regroup_evolgrid


[docs] def build( theory_card: TheoryCard, operators_card: OperatorCard, num_members: int, info_update: dict, ) -> dict: """Generate a lhapdf info file. Parameters ---------- theory_card : theory card operators_card : operators card num_members : number of pdf set members info_update : additional info to update Returns ------- dict info file in lhapdf format """ template_info = copy.deepcopy(load.template_info) template_info["SetDesc"] = "Evolved PDF from " + str(operators_card.mu0) + " GeV" template_info["Authors"] = "" template_info["FlavorScheme"] = "variable" template_info.update(info_update) template_info["NumFlavors"] = max(nf for _, nf in operators_card.mugrid) template_info["Flavors"] = [-6, -5, -4, -3, -2, -1, 1, 2, 3, 4, 5, 6, 21, 22] # TODO actually point to input grid template_info["XMin"] = float(operators_card.xgrid.raw[0]) template_info["XMax"] = float(operators_card.xgrid.raw[-1]) template_info["NumMembers"] = num_members template_info["OrderQCD"] = theory_card.order[0] - 1 template_info["QMin"] = round(math.sqrt(operators_card.mu2grid[0]), 4) template_info["QMax"] = round(math.sqrt(operators_card.mu2grid[-1]), 4) template_info["MZ"] = theory_card.couplings.scale template_info["MUp"] = 0.0 template_info["MDown"] = 0.0 template_info["MStrange"] = 0.0 template_info["MCharm"] = theory_card.heavy.masses.c.value template_info["MBottom"] = theory_card.heavy.masses.b.value template_info["MTop"] = theory_card.heavy.masses.t.value # dump alphas template_info.update(build_alphas(theory_card, operators_card)) return template_info
[docs] def build_alphas( theory_card: TheoryCard, operators_card: OperatorCard, ) -> dict: """Generate a couplings section of lhapdf info file. Parameters ---------- theory_card : dict theory card operators_card : dict operators card Returns ------- dict info file section in lhapdf format """ # start with meta stuff template_info = {} template_info["AlphaS_MZ"] = theory_card.couplings.alphas template_info["AlphaS_OrderQCD"] = theory_card.order[0] - 1 # prepare evolgrid = regroup_evolgrid(operators_card.mugrid) evmod = couplings.couplings_mod_ev(operators_card.configs.evolution_method) quark_masses = [(x.value) ** 2 for x in theory_card.heavy.masses] sc = couplings.Couplings( theory_card.couplings, theory_card.order, evmod, quark_masses, hqm_scheme=theory_card.heavy.masses_scheme, thresholds_ratios=np.power(list(iter(theory_card.heavy.matching_ratios)), 2.0), ) # add actual values alphas_values = [] alphas_qs = [] for nf, mus in evolgrid.items(): for mu in mus: alphas_values.append(float(4.0 * np.pi * sc.a_s(mu * mu, nf_to=nf))) alphas_qs.append(mu) template_info["AlphaS_Vals"] = alphas_values template_info["AlphaS_Qs"] = alphas_qs return template_info