Skip to content

Commit 1b2483c

Browse files
authored
Add more tools to check AODs and HEPMCs (#77)
- Add minor fixes to analysis utilities
1 parent f825780 commit 1b2483c

File tree

4 files changed

+133
-5
lines changed

4 files changed

+133
-5
lines changed

examples/scripts/createO2tables.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ def run_cmd(cmd, comment="", check_status=True):
2828
for i in content.strip().split("\n"):
2929
verbose_msg("++", i)
3030
if "Encountered error" in content:
31-
warning_msg("Error encountered runtime in", cmd)
31+
warning_msg("Error encountered runtime error in", cmd)
3232
if check_status:
3333
if "OK" not in content and "root" not in cmd:
3434
fatal_msg("Command", cmd, "does not have the OK tag", content)
@@ -293,9 +293,7 @@ def copy_and_link(file_name):
293293
hepmc_file = None
294294
mc_seed = random.randint(1, 800000000)
295295
if custom_gen: # Using HEPMC
296-
gen_log_file = f"gen.{run_number}.log"
297296
hepmc_file = f"hepmcfile.{run_number}.hepmc"
298-
custom_gen_option = f" --output {hepmc_file} --nevents {nevents} --seed {mc_seed}"
299297
if "INPUT_FILES" in custom_gen:
300298
input_hepmc_file = custom_gen.replace("INPUT_FILES",
301299
"").strip().split(" ")
@@ -306,6 +304,8 @@ def copy_and_link(file_name):
306304
write_to_runner(f"ln -s {input_hepmc_file}"
307305
f" {hepmc_file} \n")
308306
else:
307+
gen_log_file = f"gen.{run_number}.log"
308+
custom_gen_option = f" --output {hepmc_file} --nevents {nevents} --seed {mc_seed}"
309309
write_to_runner(custom_gen + custom_gen_option,
310310
log_file=gen_log_file, check_status=True)
311311
write_to_runner(f"DelphesHepMC propagate.tcl {delphes_file} {hepmc_file}",
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
#!/usr/bin/env python3
2+
3+
from sys import argv
4+
from ROOT import TFile
5+
import ROOT
6+
7+
8+
def main(input_name):
9+
f = TFile(input_name, "READ")
10+
# f.ls()
11+
lk = f.GetListOfKeys()
12+
13+
def check_dir(directory):
14+
print(directory, type(directory))
15+
directory.ls()
16+
t = {}
17+
for i in ["O2bc", "O2track", "O2collision", "O2mccollision",
18+
"O2mcparticle", "O2mctracklabel", "O2mccollisionlabel"]:
19+
t[i] = directory.Get(i)
20+
if False:
21+
for i in t:
22+
t[i].Print()
23+
# t["O2track"].Print()
24+
ROOT.gInterpreter.Declare("""
25+
int Count(int x) {
26+
if(x >= 998)
27+
return 1;
28+
return 0;
29+
}
30+
""")
31+
df = ROOT.RDataFrame(directory.GetName()+"/O2track", input_name)
32+
print("Has", df.Count().GetValue(), "tracks")
33+
df = df.Define("HowMany", "Count(fCollisionsID)").Sum("HowMany").GetValue()
34+
print(df)
35+
36+
for i in lk:
37+
d = f.Get(i.GetName())
38+
if "TDirectoryFile" not in d.ClassName():
39+
continue
40+
check_dir(d)
41+
42+
43+
if __name__ == "__main__":
44+
for i in argv[1:]:
45+
main(i)

examples/scripts/diagnostic_tools/doanalysis.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ def build_list_of_files(file_list):
200200
with open(run_list[-1], "w") as f:
201201
for j in lines:
202202
f.write(j.strip() + "\n")
203-
msg("Number or runs:", len(run_list))
203+
msg("Number of runs:", len(run_list))
204204
return run_list
205205

206206
if type(input_file) is list:
@@ -259,7 +259,7 @@ def build_list_of_files(file_list):
259259
continue
260260
merged_files.append(merged_file)
261261
run_command(f"hadd {merged_file} " + " ".join(files_per_type[i]))
262-
if len(merged_files) > 0:
262+
if len(merged_files) == 0:
263263
warning_msg("Merged no files")
264264
else:
265265
msg("Merging completed, merged:", *merged_files,
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
#!/usr/bin/env python3
2+
3+
"""
4+
Inspector of the HepMC file
5+
"""
6+
7+
import pyhepmc_ng as hep
8+
import argparse
9+
10+
11+
poi = {}
12+
poi_names = {2212: "Proton", -2212: "AntiProton",
13+
2112: "Neutron", -2112: "AntiNeutron",
14+
3122: "Lambda0", 1000010020: "Deuteron",
15+
1000020030: "Triton", 1000020040: "Alpha",
16+
1000020030: "Helium3"}
17+
18+
for i in poi_names:
19+
poi[i] = 0
20+
21+
22+
def main(file_name, min_event, max_event, verbose):
23+
print("Reading", file_name, "between",
24+
min_event, "and", max_event, "events")
25+
26+
def print_evt(evt):
27+
def msg(*m):
28+
if verbose:
29+
print(*m)
30+
msg("event_number:", evt.event_number)
31+
msg("Units:", "momentum_unit:", evt.momentum_unit,
32+
"length_unit:", evt.length_unit)
33+
msg(len(evt.particles), "particles:")
34+
for i in enumerate(evt.particles):
35+
pdg = i[1].pid
36+
if pdg in poi:
37+
poi[pdg] = poi[pdg]+1
38+
pdg = f"{pdg} is of interest!!!"
39+
msg(i, "PDG code", pdg)
40+
msg(len(evt.vertices), "vertices:")
41+
for i in enumerate(evt.vertices):
42+
msg("Vertex:", i)
43+
vertex_pdgs = []
44+
msg("Input particles")
45+
for j in i[1].particles_in:
46+
msg("\t", j, "pdg", j.pid)
47+
msg("Output particles")
48+
for j in i[1].particles_out:
49+
msg("\t", j, "pdg", j.pid)
50+
vertex_pdgs.append(j.pid)
51+
if 2212 in vertex_pdgs and 2112 in vertex_pdgs:
52+
print(evt.event_number, "Has both")
53+
print(i)
54+
for j in i[1].particles_out:
55+
print(j)
56+
57+
with hep.open(file_name) as f:
58+
while True:
59+
e = f.read()
60+
if not e:
61+
break
62+
if e.event_number < min_event:
63+
continue
64+
print_evt(e)
65+
if e.event_number >= max_event:
66+
break
67+
for i in poi:
68+
print("Number of", poi_names[i]+"s", poi[i])
69+
70+
71+
if __name__ == "__main__":
72+
parser = argparse.ArgumentParser(description=__doc__)
73+
parser.add_argument("hepmcfile", type=str,
74+
help="Input hepmc file.")
75+
parser.add_argument("--start", type=int, default=0,
76+
help="Start of the event counter.")
77+
parser.add_argument("--stop", type=int, default=100,
78+
help="Stop of the event counter.")
79+
parser.add_argument("-v", action="store_true",
80+
help="Verbose mode.")
81+
args = parser.parse_args()
82+
main(args.hepmcfile, min_event=args.start,
83+
max_event=args.stop, verbose=args.v)

0 commit comments

Comments
 (0)