import h5py
import pandas as pd
from IPython.display import display
import collections
from cosmogrb.utils.hdf5_utils import recursively_load_dict_contents_from_group
[docs]class DetectorSave(object):
def __init__(self, name, is_detected, instrument, extra_info=None):
"""
reloads the information collected from running detection
algorithm on a GRB
:param name:
:param is_detected:
:param extra_info:
:returns:
:rtype:
"""
self._name = name
self._is_detected = is_detected
self._extra_info = extra_info
self._instrument = instrument
if extra_info is not None:
assert isinstance(extra_info, dict)
self._extra_info = extra_info
@property
def name(self):
return self._name
@property
def instrument(self):
return self._instrument
@property
def is_detected(self):
return self._is_detected
@property
def extra_info(self):
return self._extra_info
[docs] @classmethod
def from_file(cls, file_name):
with h5py.File(file_name, "r") as f:
name = f.attrs["name"]
is_detected = f.attrs["is_detected"]
instrument = f.attrs["instrument"]
try:
extra_info = recursively_load_dict_contents_from_group(f, "extra_info")
except:
extra_info = None
return cls(name, is_detected, instrument, extra_info)
def __repr__(self):
return self._output(as_display=False).to_string()
[docs] def info(self):
self._output(as_display=True)
def _output(self, as_display=False):
std_dict = collections.OrderedDict()
std_dict["name"] = self._name
std_dict["is_detected"] = self._is_detected
if as_display:
std_df = pd.Series(data=std_dict, index=std_dict.keys())
display(std_df.to_frame())
if self._extra_info:
extra_df = pd.Series(
data=self._extra_info, index=self._extra_info.keys()
)
display(extra_df.to_frame())
else:
if self._extra_info:
for k, v in self._extra_info.items():
std_dict[k] = v
return pd.Series(data=std_dict, index=std_dict.keys())