From 9c7732362ab400c1007cb55fe60d636cf2a0135a Mon Sep 17 00:00:00 2001
From: Tamas Gal <tgal@km3net.de>
Date: Tue, 10 Mar 2020 15:53:34 +0100
Subject: [PATCH] Add support for newer Jpp files

---
 km3io/daq.py | 28 ++++++++++++++++++++++++----
 1 file changed, 24 insertions(+), 4 deletions(-)

diff --git a/km3io/daq.py b/km3io/daq.py
index ef592c3..4b47349 100644
--- a/km3io/daq.py
+++ b/km3io/daq.py
@@ -6,6 +6,8 @@ import numba as nb
 
 TIMESLICE_FRAME_BASKET_CACHE_SIZE = 523 * 1024**2  # [byte]
 SUMMARYSLICE_FRAME_BASKET_CACHE_SIZE = 523 * 1024**2  # [byte]
+BASKET_CACHE_SIZE = 110 * 1024**2
+BASKET_CACHE = uproot.cache.ThreadSafeArrayCache(BASKET_CACHE_SIZE)
 
 # Parameters for PMT rate conversions, since the rates in summary slices are
 # stored as a single byte to save space. The values from 0-255 can be decoded
@@ -259,6 +261,17 @@ class DAQTimesliceStream:
         self.superframes = superframes
         self._hits_buffer = hits_buffer
 
+    # def frames(self):
+    #     n_hits = self._superframe[
+    #         b'vector<KM3NETDAQ::JDAQSuperFrame>.numberOfHits'].lazyarray(
+    #             basketcache=BASKET_CACHE)[self._idx]
+    #     module_ids = self._superframe[
+    #         b'vector<KM3NETDAQ::JDAQSuperFrame>.id'].lazyarray(basketcache=BASKET_CACHE)[self._idx]
+    #     idx = 0
+    #     for module_id, n_hits in zip(module_ids, n_hits):
+    #         self._frames[module_id] = hits_buffer[idx:idx + n_hits]
+    #         idx += n_hits
+
 
 class DAQTimeslice:
     """A wrapper for a DAQ timeslice"""
@@ -281,10 +294,17 @@ class DAQTimeslice:
         """Populate a dictionary of frames with the module ID as key"""
         hits_buffer = self._hits_buffer[self._idx]
         n_hits = self._superframe[
-            b'vector<KM3NETDAQ::JDAQSuperFrame>.numberOfHits'].lazyarray()[
+            b'vector<KM3NETDAQ::JDAQSuperFrame>.numberOfHits'].lazyarray(basketcache=BASKET_CACHE)[
                 self._idx]
-        module_ids = self._superframe[
-            b'vector<KM3NETDAQ::JDAQSuperFrame>.id'].lazyarray()[self._idx]
+        try:
+            module_ids = self._superframe[
+                b'vector<KM3NETDAQ::JDAQSuperFrame>.id'].lazyarray(
+                    basketcache=BASKET_CACHE)[self._idx]
+        except KeyError:
+            module_ids = self._superframe[
+                b'vector<KM3NETDAQ::JDAQSuperFrame>.KM3NETDAQ::JDAQModuleIdentifier'].lazyarray(
+                    basketcache=BASKET_CACHE)[self._idx]
+
         idx = 0
         for module_id, n_hits in zip(module_ids, n_hits):
             self._frames[module_id] = hits_buffer[idx:idx + n_hits]
@@ -294,7 +314,7 @@ class DAQTimeslice:
         if self._n_frames is None:
             self._n_frames = len(
                 self._superframe[b'vector<KM3NETDAQ::JDAQSuperFrame>.id'].
-                lazyarray()[self._idx])
+                lazyarray(basketcache=BASKET_CACHE)[self._idx])
         return self._n_frames
 
     def __str__(self):
-- 
GitLab