From 483eab58e6c5b41fda28dca989b3e79b1cf680ff Mon Sep 17 00:00:00 2001 From: Tamas Gal <tgal@km3net.de> Date: Thu, 10 Dec 2020 23:24:58 +0100 Subject: [PATCH] First iteration prototype --- km3io/offline.py | 4 ++-- km3io/rootio.py | 22 +++++++++++++++++----- km3io/tools.py | 7 ++++++- 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/km3io/offline.py b/km3io/offline.py index 47c1f82..c593024 100644 --- a/km3io/offline.py +++ b/km3io/offline.py @@ -19,8 +19,8 @@ class OfflineReader(EventReader): item_name = "OfflineEvent" skip_keys = ["t", "AAObject"] aliases = { - "t_sec": "t.fSec", - "t_ns": "t.fNanoSec", + "t_sec": "t/t.fSec", + "t_ns": "t/t.fNanoSec", "usr": "AAObject/usr", "usr_names": "AAObject/usr_names", } diff --git a/km3io/rootio.py b/km3io/rootio.py index 1c2d1cf..25054ae 100644 --- a/km3io/rootio.py +++ b/km3io/rootio.py @@ -95,13 +95,28 @@ class EventReader: def _initialise_keys(self): skip_keys = set(self.skip_keys) - toplevel_keys = set(k.split("/")[0] for k in self._fobj[self.event_path].keys()) + all_keys = set(self._fobj[self.event_path].keys()) + toplevel_keys = set(k.split("/")[0] for k in all_keys) + valid_aliases = {} + for fromkey, tokey in self.aliases.items(): + if tokey in all_keys: + valid_aliases[fromkey] = tokey + self.aliases = valid_aliases keys = (toplevel_keys - skip_keys).union( - list(self.aliases.keys()) + list(self.nested_aliases) + list(valid_aliases) + list(self.nested_aliases) ) for key in list(self.nested_branches) + list(self.nested_aliases): keys.add("n_" + key) # self._grouped_branches = {k for k in toplevel_keys - skip_keys if isinstance(self._fobj[self.event_path][k].interpretation, uproot.AsGrouped)} + valid_nested_branches = {} + for nested_key, aliases in self.nested_branches.items(): + if nested_key in toplevel_keys: + valid_nested_branches[nested_key] = {} + subbranch_keys = self._fobj[self.event_path][nested_key].keys() + for fromkey, tokey in aliases.items(): + if tokey in subbranch_keys: + valid_nested_branches[nested_key][fromkey] = tokey + self.nested_branches = valid_nested_branches self._keys = keys def keys(self): @@ -187,7 +202,6 @@ class EventReader: ) # all top-level keys for regular branches log.debug("keys: %s", keys) log.debug("aliases: %s", self.aliases) - # check for valid keys, e.g. `usr` is not always there and raises recursion error! events_it = events.iterate( keys, aliases=self.aliases, step_size=self._step_size ) @@ -197,8 +211,6 @@ class EventReader: ) # dict-key ordering is an implementation detail log.debug("nested_keys: %s", nested_keys) for key in nested_keys: - # print(f"adding {key} with keys {self.nested_branches[key].keys()} and aliases {self.nested_branches[key]}") - nested.append( events[key].iterate( self.nested_branches[key].keys(), diff --git a/km3io/tools.py b/km3io/tools.py index 4fcdc38..1246cd1 100644 --- a/km3io/tools.py +++ b/km3io/tools.py @@ -264,7 +264,10 @@ def best_track(tracks, startend=None, minmax=None, stages=None): if minmax is not None: m1 = mask(tracks.rec_stages, minmax=minmax) - original_ndim = tracks.ndim + try: + original_ndim = tracks.ndim + except AttributeError: + original_ndim = 1 axis = 1 if original_ndim == 2 else 0 tracks = tracks[m1] @@ -278,6 +281,8 @@ def best_track(tracks, startend=None, minmax=None, stages=None): out = tracks[m3] if original_ndim == 1: + if isinstance(out, ak.Record): + return out[:, 0] return out[0] return out[:, 0] -- GitLab