Skip to content
Snippets Groups Projects
Commit a381061c authored by Tamas Gal's avatar Tamas Gal :speech_balloon:
Browse files

Cleanup

parent 7398b736
No related branches found
No related tags found
1 merge request!39WIP: Resolve "uproot4 integration"
Pipeline #16031 failed
import binascii from collections import namedtuple
from collections import namedtuple, defaultdict
import uproot4 as uproot import uproot4 as uproot
import warnings import warnings
import numba as nb
import awkward1 as ak1
from .definitions import mc_header, fitparameters, reconstruction
from .tools import cached_property, to_num, unfold_indices
from .rootio import Branch, BranchMapper
MAIN_TREE_NAME = "E"
EXCLUDE_KEYS = ["AAObject", "t", "fBits", "fUniqueID"]
# 110 MB based on the size of the largest basket found so far in km3net
BASKET_CACHE_SIZE = 110 * 1024 ** 2
BASKET_CACHE = uproot.cache.LRUArrayCache(BASKET_CACHE_SIZE)
class Usr:
"""Helper class to access AAObject `usr` stuff (only for events.usr)"""
def __init__(self, mapper, branch, index_chain=None):
self._mapper = mapper
self._name = mapper.name
self._index_chain = [] if index_chain is None else index_chain
self._branch = branch
self._usr_names = []
self._usr_idx_lookup = {}
self._usr_key = "usr" if mapper.flat else mapper.key + ".usr"
self._initialise()
def _initialise(self):
try:
self._branch[self._usr_key]
# This will raise a KeyError in old aanet files
# which has a different strucuter and key (usr_data)
# We do not support those (yet)
except (KeyError, IndexError):
print(
"The `usr` fields could not be parsed for the '{}' branch.".format(
self._name
)
)
return
self._usr_names = self._branch[self._usr_key + "_names"].array()[0]
self._usr_idx_lookup = {
name: index for index, name in enumerate(self._usr_names)
}
data = self._branch[self._usr_key].array()
if self._index_chain:
data = unfold_indices(data, self._index_chain)
self._usr_data = data
for name in self._usr_names:
setattr(self, name, self[name])
def __getitem__(self, item): from .definitions import mc_header
if self._index_chain: from .tools import cached_property
return unfold_indices(self._usr_data, self._index_chain)[
:, self._usr_idx_lookup[item]
]
else:
return self._usr_data[:, self._usr_idx_lookup[item]]
def keys(self):
return self._usr_names
def __str__(self):
entries = []
for name in self.keys():
entries.append("{}: {}".format(name, self[name]))
return "\n".join(entries)
def __repr__(self):
return "<{}[{}]>".format(self.__class__.__name__, self._name)
class OfflineReader: class OfflineReader:
...@@ -88,7 +12,12 @@ class OfflineReader: ...@@ -88,7 +12,12 @@ class OfflineReader:
event_path = "E/Evt" event_path = "E/Evt"
item_name = "OfflineEvent" item_name = "OfflineEvent"
skip_keys = ["t", "AAObject"] skip_keys = ["t", "AAObject"]
aliases = {"t_s": "t.fSec", "t_ns": "t.fNanoSec"} aliases = {
"t_s": "t.fSec",
"t_ns": "t.fNanoSec",
"usr": "AAObject/usr",
"usr_names": "AAObject/usr_names",
}
special_branches = { special_branches = {
"hits": { "hits": {
"channel_id": "hits.channel_id", "channel_id": "hits.channel_id",
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment