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 LD2DL, DL2DF
[docs]def load(f, dimensions=1):
"""
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(f)
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,
)
inpu.runner = dict["tool"]
dat = []
params = dict["parameters"]
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)
dicd[order_to_string(inpu.order)] = ufloat(
dict["data"][k][l]["xsec_pb"],
dict["data"][k][l]["unc_pb"])
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)
dicd[order_to_string(inpu.order)] = ufloat(
dict["data"][k]["xsec_pb"], dict["data"][k]["unc_pb"])
dat.append(dicd)
return DL2DF(LD2DL(dat, actual_dict=True))