Source code for yadism.coefficient_functions.asy.kernels

"""The asymptotic components for the FONLL prescription."""

from eko import basis_rotation as br

from .. import heavy, kernels, light


[docs] def import_pc_module(kind, process, subpkg=None): """Dynamic import implementing module, selected observable.""" if subpkg is None: subpkg = __name__ else: subpkg = ".".join(__name__.split(".")[:-2] + [subpkg, ""]) return kernels.import_local(kind, process, subpkg)
[docs] def generate_missing_asy(esf, nf, ihq, pto_evol, icoupl=None): r""" Collect the high-virtuality limit of missing. Parameters ---------- esf : EvaluatedStructureFunction kinematic point nf : int number of light flavors ihq : int heavy quark pto_evol : int PTO of evolution icoupl : None or int PID of the flavor coupling (default: None) Returns ------- elems : list(yadism.kernels.Kernel) list of elements """ # in CC there are no missing diagrams known yet if esf.process == "CC": return () # only NC weights = light.kernels.nc_weights( esf.info.coupling_constants, esf.Q2, nf, esf.info.obs_name.is_parity_violating, skip_heavylight=True, ) if icoupl is not None: weights["ns"] = {k: v for k, v in weights["ns"].items() if abs(k) == icoupl} kind = esf.info.obs_name.kind asy_cfs = import_pc_module(kind, esf.process) m2hq = esf.info.m2hq[ihq - 4] asys = [] for res in range(pto_evol + 1): name = "Asy" + ("N" * res) + "LL" + "NonSinglet" km = kernels.Kernel( weights["ns"], asy_cfs.__getattribute__(name)(esf, nf, m2hq=m2hq) ) asys.append(km) return asys
[docs] def generate_heavy_asy(esf, nf, pto_evol, ihq): """ Collect the high-virtuality limit of heavy. Parameters ---------- esf : EvaluatedStructureFunction kinematic point nf : int number of light flavors pto_evol : int PTO of evolution Returns ------- elems : list(yadism.kernels.Kernel) list of elements """ kind = esf.info.obs_name.kind is_pv = esf.info.obs_name.is_parity_violating asy_cfs = import_pc_module(kind, esf.process) m2hq = esf.info.m2hq[ihq - 4] asys = [] if esf.process == "CC": wa = kernels.cc_weights( esf.info.coupling_constants, esf.Q2, br.quark_names[ihq - 1], nf, is_pv, ) asys = [ kernels.Kernel(wa["ns"], asy_cfs.AsyQuark(esf, nf, m2hq=m2hq)), kernels.Kernel(wa["g"], asy_cfs.AsyGluon(esf, nf, m2hq=m2hq)), ] else: asy_weights = heavy.kernels.nc_weights( esf.info.coupling_constants, esf.Q2, nf, ihq, is_pv, ) if not is_pv: n3lo_cf_variation = esf.info.theory["n3lo_cf_variation"] for c, channel in (("g", "Gluon"), ("s", "Singlet")): for res in range(pto_evol + 1): name = "Asy" + ("N" * res) + "LL" + channel for av in ("AA", "VV"): asys.append( kernels.Kernel( asy_weights[f"{c}{av}"], asy_cfs.__getattribute__(name)( esf, nf, m2hq=m2hq, n3lo_cf_variation=n3lo_cf_variation, ), ) ) return asys
[docs] def generate_intrinsic_asy(esf, nf, pto_evol, ihq): """ Collect the high-virtuality limit of intrinsic, see also :eqref:`10` of :cite:`nnpdf-intrinsic`. Parameters ---------- esf : EvaluatedStructureFunction kinematic point nf : int number of light flavors pto_evol : int PTO of evolution Returns ------- elems : list(yadism.kernels.Kernel) list of elements """ kind = esf.info.obs_name.kind is_pv = esf.info.obs_name.is_parity_violating cfs = import_pc_module(kind, esf.process) m2hq = esf.info.m2hq[ihq - 4] if esf.process == "CC": w = kernels.cc_weights( esf.info.coupling_constants, esf.Q2, br.quark_names[ihq - 1], ihq, is_pv, ) weights = {k: v for k, v in w["ns"].items() if abs(k) == ihq} else: # NC if is_pv: wVA = esf.info.coupling_constants.get_weight(ihq, esf.Q2, "VA") wAV = esf.info.coupling_constants.get_weight(ihq, esf.Q2, "AV") wp = wVA + wAV # Rminus ~ wm = wVA - wAV does not contribute to asy weights = {ihq: wp, (-ihq): -wp} else: wVV = esf.info.coupling_constants.get_weight(ihq, esf.Q2, "VV") wAA = esf.info.coupling_constants.get_weight(ihq, esf.Q2, "AA") wp = wVV + wAA # Sminus ~ wm = wVV - wAA does not contribute to asy weights = {ihq: wp, (-ihq): wp} asys = [ kernels.Kernel( weights, cfs.AsyLLIntrinsic(esf, nf, m2hq=m2hq), ) ] if pto_evol > 0: asys.extend( [ kernels.Kernel( weights, cfs.AsyNLLIntrinsicMatching(esf, nf, m2hq=m2hq), ), kernels.Kernel( weights, cfs.AsyNLLIntrinsicLight(esf, nf, m2hq=m2hq), ), ] ) return asys