Source code for hepi.load

import copy
import json
from re import I

from uncertainties import ufloat

from hepi.input import Input, order_to_string, xsec_to_order
from hepi.util import DL2DF, LD2DL


[docs]def load_json_with_metadata(file): """ Load xsec data from json in to something that works within hepi's plotting. Args: f : readable object, e.g. `open(filepath:str)`. dimensions (int) : 1 or 2 currently supported. """ dict = json.load(file) inpu = Input( xsec_to_order(dict["order"]), float(dict["Ecom [GeV]"]), -1, -1, slha=dict["process_latex"], pdf_lo=dict["PDF set"], pdf_nlo=dict["PDF set"], update=False, ) so = order_to_string(inpu.order) inpu.runner = dict["tool"] dat = [] params = dict["parameters"] dimensions = len(params) if dimensions == 2: for k in dict["data"]: for l in dict["data"][k]: dicd = copy.copy(inpu.__dict__) for p1 in params[0]: dicd[p1] = float(k) for p2 in params[1]: dicd[p2] = float(l) if "unc_pb" in dict["data"][k][l]: dicd[so + "_NOERR"] = dict["data"][k][l]["xsec_pb"] dicd[so + "_COMBINED"] = ufloat( dict["data"][k][l]["xsec_pb"], dict["data"][k][l]["unc_pb"] ) elif ( "unc_down_pb" in dict["data"][k][l] and "unc_up_pb" in dict["data"][k][l] ): dicd[so + "_NOERR"] = dict["data"][k][l]["xsec_pb"] dicd[so + "_COMBINED"] = ufloat( dict["data"][k][l]["xsec_pb"] + ( dict["data"][k][l]["unc_up_pb"] + dict["data"][k][l]["unc_down_pb"] ) / 2, ( dict["data"][k][l]["unc_up_pb"] - dict["data"][k][l]["unc_down_pb"] ) / 2, ) if ( "unc_scale_up_pb" in dict["data"][k][l] and "unc_scale_down_pb" in dict["data"][k][l] ): dicd[so + "_SCALE"] = ufloat( dict["data"][k][l]["xsec_pb"] + ( dict["data"][k][l]["unc_scale_up_pb"] + dict["data"][k][l]["unc_scale_down_pb"] ) / 2, ( dict["data"][k][l]["unc_scale_up_pb"] - dict["data"][k][l]["unc_scale_down_pb"] ) / 2, ) if ( "unc_pdf_up_pb" in dict["data"][k][l] and "unc_pdf_down_pb" in dict["data"][k][l] ): dicd[so + "_PDF"] = ufloat( dict["data"][k][l]["xsec_pb"] + ( dict["data"][k][l]["unc_pdf_up_pb"] + dict["data"][k][l]["unc_pdf_down_pb"] ) / 2, ( dict["data"][k][l]["unc_pdf_up_pb"] - dict["data"][k][l]["unc_pdf_down_pb"] ) / 2, ) else: raise ValueError("No uncertainty found in data.") dat.append(dicd) if dimensions == 1: for k in dict["data"]: dicd = copy.copy(inpu.__dict__) for p1 in params[0]: dicd[p1] = float(k) if "unc_pb" in dict["data"][k]: dicd[so + "_NOERR"] = dict["data"][k]["xsec_pb"] dicd[so + "_COMBINED"] = ufloat( dict["data"][k]["xsec_pb"], dict["data"][k]["unc_pb"] ) elif "unc_down_pb" in dict["data"][k] and "unc_up_pb" in dict["data"][k]: dicd[so + "_NOERR"] = dict["data"][k]["xsec_pb"] dicd[so + "_COMBINED"] = ufloat( dict["data"][k]["xsec_pb"] + (dict["data"][k]["unc_up_pb"] + dict["data"][k]["unc_down_pb"]) / 2, (dict["data"][k]["unc_up_pb"] - dict["data"][k]["unc_down_pb"]) / 2, ) if ( "unc_scale_up_pb" in dict["data"][k] and "unc_scale_down_pb" in dict["data"][k] ): dicd[so + "_SCALE"] = ufloat( dict["data"][k]["xsec_pb"] + ( dict["data"][k]["unc_scale_up_pb"] + dict["data"][k]["unc_scale_down_pb"] ) / 2, ( dict["data"][k]["unc_scale_up_pb"] - dict["data"][k]["unc_scale_down_pb"] ) / 2, ) if ( "unc_pdf_up_pb" in dict["data"][k] and "unc_pdf_down_pb" in dict["data"][k] ): dicd[so + "_PDF"] = ufloat( dict["data"][k]["xsec_pb"] + ( dict["data"][k]["unc_pdf_up_pb"] + dict["data"][k]["unc_pdf_down_pb"] ) / 2, ( dict["data"][k]["unc_pdf_up_pb"] - dict["data"][k]["unc_pdf_down_pb"] ) / 2, ) else: raise ValueError("No uncertainty found in data.") dat.append(dicd) ddf = DL2DF(LD2DL(dat, actual_dict=True)) # copy mass list to single masses for k in ddf.keys(): if k.startswith("mass_"): for m in k[5:].split("_"): ddf["mass_" + m] = ddf[k] return ddf, params, inpu
[docs]def load_json(f, dimensions=1): return load_json_with_metadata(f)[0]
[docs]load = load_json