diff --git a/playground/timeslices.py b/playground/timeslices.py deleted file mode 100644 index e29ddf197923001ddb2b9d26db69045f831cd3d2..0000000000000000000000000000000000000000 --- a/playground/timeslices.py +++ /dev/null @@ -1,86 +0,0 @@ -import uproot - -uproot.__version__ - -f = uproot.open("jpp_v12.0.0.root") - -tree = f["KM3NET_TIMESLICE_L1"] - -tree.keys() - -frames = tree[b'km3net_timeslice_L1'][b'KM3NETDAQ::JDAQTimeslice'][b'vector<KM3NETDAQ::JDAQSuperFrame>'] - -frames.show() -frames[b'vector<KM3NETDAQ::JDAQSuperFrame>.buffer'].show() -buffer = frames[b'vector<KM3NETDAQ::JDAQSuperFrame>.buffer'] - -buffer.array(uproot.asdebug) - -# the 64 is kind of a ROOT header as you mentioned? - -# The file contains 3 timeslices, and each of them consists of 69 frames -# the 69 however is not fixed, it can vary from slice to slice! Each frame -# consists of hits (vector of JDAQHit<6bytes>) and corresponds to an optical module -# which registers those. - -# The first timeslice which contains exactly 49243 hits from various different -# optical modules -ts = buffer.array(uproot.asdebug)[0] - -ts -len(ts) - -# 295464 bytes - 6 bytes offset (don't yet understand why 6, but it works) -# give 295458 bytes of raw JDAQHit data, which makes sense, since we know -# that we have 49243 hits and 49243*6 == 295458 - -flat_array_of_hits = frames[b'vector<KM3NETDAQ::JDAQSuperFrame>.buffer'].array( - uproot.asjagged(uproot.astable( - uproot.asdtype([("pmt", "u1"), - ("tdc", "u4"), - ("tot", "u1")])), - skipbytes=6)) - -ts_hits = flat_array_of_hits[0] -len(ts_hits) -ts_hits["tot"] - -# The problem is now, that it's a flat array of hits, however, they should -# be grouped the module ID -# `.numberOfHits` and `.id` tells us more: - -n_hits = frames[b'vector<KM3NETDAQ::JDAQSuperFrame>.numberOfHits'].array()[0] -n_hits - -module_ids = frames[b'vector<KM3NETDAQ::JDAQSuperFrame>.id'].array()[0] -module_ids - - -# The first set of hits belong to module (`.id`) == 806451572, and consists -# of 984 hits - -# Here is an inefficient loop to fill the hits: - -hits = {} -idx = 0 -for module_id, n_hits in zip(module_ids, n_hits): - hits[module_id] = ts_hits[idx:idx+n_hits] - idx += n_hits - -# quick check against the PyROOT framework: -# [ins] In [15]: ts_hits[ts_hits.dom_id == 808972593] -# Out[15]: TimesliceHits <class 'km3pipe.dataclasses.Table'> (rows: 803) - -len(hits[808972593]) - -# another check to see if the data is correct, expecting: -# [ins] In [16]: ts_hits[ts_hits.dom_id ==808972593].tot[:10] -# Out[16]: array([25, 31, 43, 21, 25, 24, 31, 25, 30, 23], dtype=uint8) -hits[808972593]["tot"][:10] - -# perfect! But a bit "whacky" and inefficient ;) -# I am not so familiar with ragged arrays yet, but I am sure one can somehow -# pass this this structure to the flat array and get it in one shot or -# something like this? -# The module IDs are then just encoded by the index and one need another -# lookup in `.id` or so...