diff --git a/libeos/file_reader.py b/libeos/file_reader.py index d7589f1..b024d73 100644 --- a/libeos/file_reader.py +++ b/libeos/file_reader.py @@ -1,6 +1,7 @@ """ Reading of Amor NeXus data files to extract metadata and event stream. """ +from typing import BinaryIO, Union import h5py import numpy as np @@ -56,11 +57,18 @@ class AmorEventData: startTime: np.int64 - def __init__(self, fileName, first_index=0, max_events=1_000_000): - self.fileName = fileName + def __init__(self, fileName:Union[str, h5py.File, BinaryIO], first_index:int=0, max_events:int=1_000_000): + if type(fileName) is str: + self.fileName = fileName + self.hdf = h5py.File(fileName, 'r', swmr=True) + elif type(fileName) is h5py.File: + self.fileName = fileName.filename + self.hdf = fileName + else: + self.fileName = repr(fileName) + self.hdf = h5py.File(fileName, 'r') self.first_index = first_index self.max_events = max_events - self.hdf = h5py.File(fileName, 'r', swmr=True) self.read_header_info() self.read_instrument_configuration() @@ -72,12 +80,14 @@ class AmorEventData: self.extract_walltime() self.read_proton_current_stream() - # close the input file to free memory + if type(fileName) is str: + # close the input file to free memory, only if the file was opened in this object + self.hdf.close() del(self.hdf) def _replace_if_missing(self, key, nicos_key, dtype=float): try: - return dtype(np.take(self.hdf[f'/entry1/Amor/{key}'], 0)) + return dtype(self.hdf[f'/entry1/Amor/{key}'][0]) except(KeyError, IndexError): if NICOS_CACHE_DIR: try: diff --git a/test_data/amor2023n000608.hdf b/test_data/amor2023n000608.hdf deleted file mode 100644 index da050fa..0000000 Binary files a/test_data/amor2023n000608.hdf and /dev/null differ diff --git a/test_data/amor2023n000609.hdf b/test_data/amor2023n000609.hdf deleted file mode 100644 index a3c869c..0000000 Binary files a/test_data/amor2023n000609.hdf and /dev/null differ diff --git a/test_data/amor2023n000610.hdf b/test_data/amor2023n000610.hdf deleted file mode 100644 index 204cda8..0000000 Binary files a/test_data/amor2023n000610.hdf and /dev/null differ diff --git a/test_data/amor2023n000611.hdf b/test_data/amor2023n000611.hdf deleted file mode 100644 index 077ecdf..0000000 Binary files a/test_data/amor2023n000611.hdf and /dev/null differ diff --git a/test_data/amor2023n000612.hdf b/test_data/amor2023n000612.hdf deleted file mode 100644 index 3ef5b3c..0000000 Binary files a/test_data/amor2023n000612.hdf and /dev/null differ diff --git a/test_data/amor2023n000613.hdf b/test_data/amor2023n000613.hdf deleted file mode 100644 index 8986f99..0000000 Binary files a/test_data/amor2023n000613.hdf and /dev/null differ diff --git a/tests/test_full_analysis.py b/tests/test_full_analysis.py index b2d58e5..def2c08 100644 --- a/tests/test_full_analysis.py +++ b/tests/test_full_analysis.py @@ -20,7 +20,7 @@ class FullAmorTest(TestCase): def setUp(self): self.pr.enable() self.reader_config = options.ReaderConfig( - year=2023, + year=2025, rawPath=(os.path.join('..', "test_data"),), )