Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 27 additions & 19 deletions narf/graph_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import shlex
import narf.rdfutils

def build_and_run(datasets, build_function, lumi_tree = "LuminosityBlocks", event_tree = "Events", run_col = "run", lumi_col = "luminosityBlock"):
def build_and_run(datasets, build_function, lumi_function=None, lumi_tree = "LuminosityBlocks", event_tree = "Events", run_col = "run", lumi_col = "luminosityBlock"):

# TODO make this check more robust and move it to a more appropriate place
if hasattr(ROOT, "Eigen"):
Expand Down Expand Up @@ -43,7 +43,7 @@ def build_and_run(datasets, build_function, lumi_tree = "LuminosityBlocks", even
evtcounts = []
chains = []
lumidfs = []
lumisums = {}
lumi_results = {}

for dataset in datasets:
print("start of loop")
Expand Down Expand Up @@ -71,8 +71,12 @@ def build_and_run(datasets, build_function, lumi_tree = "LuminosityBlocks", even
print("sum")
lumisum = lumidf.Sum("lumival")
print("add to dict")
lumisums[dataset.name] = lumisum
lumi_results[dataset.name] = {"sum": lumisum}

if lumi_function is not None:
res = lumi_function(lumidf, dataset)
lumi_results[dataset.name]["res"] = res

print("event chain")
chain = ROOT.TChain(event_tree)
for fpath in dataset.filepaths:
Expand Down Expand Up @@ -113,8 +117,8 @@ def build_and_run(datasets, build_function, lumi_tree = "LuminosityBlocks", even
print("end lumi loop")
time_done_lumi = time.time()

for name, val in lumisums.items():
print(name, val.GetValue())
for name, val in lumi_results.items():
print(name, val["sum"].GetValue())

print("begin event loop", flush = True)
ROOT.narf.RunGraphsWithProgressBar(dfs, 1000, interval)
Expand Down Expand Up @@ -143,24 +147,28 @@ def build_and_run(datasets, build_function, lumi_tree = "LuminosityBlocks", even
dsetresult["weight_sum"] = float(hweight[0].GetValue())
dsetresult["event_count"] = float(evtcount.GetValue())

if dataset.name in lumisums:
hlumi = ROOT.TH1D("lumi", "lumi", 1, 0.5, 1.5)
lumi = lumisums[dataset.name].GetValue()
dsetresult["lumi"] = lumi
def make_proxy_dict(res):
output = {}

output = {}
for r in res:
if isinstance(r.GetValue(), ROOT.TNamed):
name = r.GetName()
elif hasattr(r.GetValue(), "name"):
name = r.GetValue().name
else:
name = str(uuid.uuid1())

for r in res:
if isinstance(r.GetValue(), ROOT.TNamed):
name = r.GetName()
elif hasattr(r.GetValue(), "name"):
name = r.GetValue().name
else:
name = str(uuid.uuid1())
output[name] = H5PickleProxy(r.GetValue())
return output

output[name] = H5PickleProxy(r.GetValue())
if dataset.name in lumi_results:
lumi_res = lumi_results[dataset.name]
lumi = lumi_res["sum"].GetValue()
dsetresult["lumi"] = lumi
if "res" in lumi_res.keys():
dsetresult["lumi_outout"] = make_proxy_dict(lumi_res["res"])

dsetresult["output"] = output
dsetresult["output"] = make_proxy_dict(res)

resultdict[dataset.name] = dsetresult

Expand Down