diff --git a/km3io/offline.py b/km3io/offline.py index ee868ef9402aa4d2487b1449b710df202aaad51f..b2bc9edfd3964d4a631f6aa03c396d571f53c187 100644 --- a/km3io/offline.py +++ b/km3io/offline.py @@ -319,6 +319,7 @@ class OfflineReader: self._mc_hits = None self._mc_tracks = None self._keys = None + self._header = None def __getitem__(self, item): return OfflineReader(file_path=self._file_path, data=self._data[item]) @@ -326,6 +327,19 @@ class OfflineReader: def __len__(self): return len(self._data) + @property + def header(self): + if self._header is None: + fobj = uproot.open(self._file_path) + if b'Head;1' in fobj.keys(): + for n, x in fobj['Head']._map_3c_string_2c_string_3e_.items(): + print("{:15s} {}".format(n.decode("utf-8"), x)) + self._header = fobj['Head']._map_3c_string_2c_string_3e_ + if b'Header;1' in fobj.keys(): + print('not yet accessible') + return self._header + + @property def keys(self): """wrapper for all keys in an offline file. diff --git a/km3io/write.py b/km3io/write.py deleted file mode 100644 index 9b29b394ce24bda94670509622257412e00396c1..0000000000000000000000000000000000000000 --- a/km3io/write.py +++ /dev/null @@ -1,94 +0,0 @@ -import os -import inspect -import numpy as np -import km3io as ki -import awkward as aw - - -CLASSES = tuple(m[1] for m in inspect.getmembers(ki.offline, inspect.isclass)) - -def to_csv(f_name, **kwargs): - """writes data in a csv file - - Parameters - ---------- - f_name : str - Description - **kwargs - Description - """ - if os.path.isfile(f_name): - raise OSError("'{}' already exists! change the file name or delete it".format(f_name)) - - with open(f_name+'.csv', 'a') as fp: - for key, value in kwargs.items(): - - # write events, hits and tracks classes - if isinstance(value, CLASSES): - for k, v in zip(value._keys, np.array(value._values)): # if it doesn't work change enumerate(v) to enumerate(np.array(v)) - fp.write('# {}\n'.format(k)) - for i, j in enumerate(v): - np.savetxt(fp, j, header=str(i), comments='## ') - - # write arrays - if isinstance(value, np.ndarray): - np.savetxt(fp, value, header=key, comments='# ') - - else: - try: - # write a jagged array - if value.dtype.char == 'O': # O is the unique char that identifies 'awkward.array.chunked.ChunkedArray' - fp.write('# {}\n'.format(key)) - for i, j in enumerate(value): - np.savetxt(fp, j, header=str(i), comments='## ') - - except Exception: - raise TypeError("'{}' is not a valid data structure".format(type(value))) - - -def from_csv(f_name, headers=None): - """reads a csv file written by km3io - - Parameters - ---------- - f_name : str - Description - headers : None, optional - list of str of headers - """ - if headers is None: - keys = [] - values = [] - found_header = False - found_sub_header = False - # read the entire file - with open(f_name, 'r') as fp: - jagged_data = [] - jagged_sub_data = [] - for line in fp: - if '# ' in line: - found_header = True - keys.append(line.split()[1]) # convert str to float - - if found_header: - if '# ' in line: - found_header = False - if '## ' in line: - found_sub_header = True - else: - jagged_data.append(line.split()[0]) - - - if found_header and found_sub_header: - if '## ' in line: - found_sub_header = False - jagged_data.append(jagged_sub_data) - else: - jagged_sub_data.append(lin.split()[0]) - - - -#write in hdf - - -#write in root (NOT NECESSARY)