Source code for ekobox.genpdf.load

"""PDF set elements loaders."""

import pathlib

import numpy as np
import yaml

here = pathlib.Path(__file__).parent
# Expose the default template
with open(here / "templatePDF.info", encoding="utf-8") as o:
    template_info = yaml.safe_load(o)
with open(here / "Toy.info", encoding="utf-8") as t:
    Toy_info = yaml.safe_load(t)


[docs] def load_info_from_file(pdfset_name): """Load the info file from a parent pdf. Parameters ---------- pdfset_name : str parent pdf name Returns ------- dict info dictionary """ import lhapdf # pylint: disable=import-error, import-outside-toplevel src = pathlib.Path(lhapdf.paths()[0]) / pdfset_name with open(src / f"{pdfset_name}.info", encoding="utf-8") as o: info = yaml.safe_load(o) return info
[docs] def load_blocks_from_file(pdfset_name, member): """Load a pdf from a parent pdf. Parameters ---------- pdfset_name : str parent pdf name member : int pdf member Returns ------- str : head of member file list(dict) : pdf blocks of data """ import lhapdf # pylint: disable=import-error, import-outside-toplevel src = pathlib.Path(lhapdf.paths()[0]) / pdfset_name # read actual file cnt = [] with open(src / f"{pdfset_name}_{member:04d}.dat", encoding="utf-8") as o: cnt = o.readlines() # file head head = cnt[0] head_section = cnt.index("---\n") blocks = [] while head_section < len(cnt) - 1: # section head next_head_section = cnt.index("---\n", head_section + 1) # determine participating pids xgrid = np.array(cnt[head_section + 1].strip().split(" "), dtype=np.float64) Qgrid = np.array(cnt[head_section + 2].strip().split(" "), dtype=np.float64) pids = np.array(cnt[head_section + 3].strip().split(" "), dtype=np.int_) # data data = [] for line in cnt[head_section + 4 : next_head_section]: elems = np.fromstring(line.strip(), sep=" ") data.append(elems) mu2grid = [el * el for el in Qgrid] blocks.append( dict(xgrid=xgrid, mu2grid=mu2grid, pids=pids, data=np.array(data)) ) # iterate head_section = next_head_section return head, blocks