Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-09-16 08:18:54

0001 import sys
0002 import argparse
0003 import numpy as np
0004 import uproot
0005 
0006 parser = argparse.ArgumentParser()
0007 parser.add_argument("a")
0008 parser.add_argument("b")
0009 parser.add_argument("--event-nr", default="event_nr")
0010 parser.add_argument("--fail-fast", action="store_true")
0011 args = parser.parse_args()
0012 
0013 a_data = uproot.open(args.a)
0014 b_data = uproot.open(args.b)
0015 event_nr = args.event_nr
0016 fail_fast = args.fail_fast
0017 
0018 a_sort_index = np.argsort(a_data[event_nr].array(library="np"), kind="stable")
0019 b_sort_index = np.argsort(b_data[event_nr].array(library="np"), kind="stable")
0020 
0021 np.set_printoptions(linewidth=np.inf)
0022 
0023 
0024 def cmp(a, b):
0025     if np.isscalar(a):
0026         if a != b:
0027             return False
0028     elif type(a) == np.ndarray:
0029         if not np.array_equal(a, b, equal_nan=True):
0030             return False
0031     else:
0032         for aa, bb in zip(a, b):
0033             if not cmp(aa, bb):
0034                 return False
0035     return True
0036 
0037 
0038 failed_events = set()
0039 failed_keys = set()
0040 for key in a_data.keys():
0041     if key == event_nr:
0042         continue
0043 
0044     a_vals = a_data[key].array(library="np")
0045     a_vals = a_vals[a_sort_index]
0046 
0047     b_vals = b_data[key].array(library="np")
0048     b_vals = b_vals[b_sort_index]
0049 
0050     for event, (a, b) in enumerate(zip(a_vals, b_vals)):
0051         if not cmp(a, b):
0052             print(f"event {event} failed for {key}")
0053             print(f"a {a}")
0054             print(f"b {b}")
0055             print()
0056 
0057             if fail_fast:
0058                 sys.exit(1)
0059             failed_events.add(event)
0060             failed_keys.add(key)
0061 
0062 if failed_events or failed_keys:
0063     print("summary")
0064     print("failed events: " + " ".join(map(str, sorted(failed_events))))
0065     print("failed keys: " + " ".join(failed_keys))
0066     sys.exit(1)
0067 
0068 sys.exit(0)