Source code for threeML.utils.spectrum.binned_spectrum_set

from builtins import object
import numpy as np

from threeML.utils.spectrum.binned_spectrum import BinnedSpectrum
from threeML.utils.time_interval import TimeIntervalSet


[docs] class BinnedSpectrumSet(object): def __init__(self, binned_spectrum_list, reference_time=0.0, time_intervals=None): """ a set of binned spectra with optional time intervals :param binned_spectrum_list: lit of binned spectal :param reference_time: reference time for time intervals :param time_intervals: optional timeinterval set """ self._binned_spectrum_list = binned_spectrum_list # type: list(BinnedSpectrum) self._reference_time = reference_time # normalize the time intervals if there are any if time_intervals is not None: self._time_intervals = ( time_intervals - reference_time ) # type: TimeIntervalSet assert len(time_intervals) == len( binned_spectrum_list ), "time intervals mus be the same length as binned spectra" else: self._time_intervals = None @property def reference_time(self): return self._reference_time def __getitem__(self, item): return self._binned_spectrum_list[item] def __len__(self): return len(self._binned_spectrum_list)
[docs] def time_to_index(self, time): """ get the index of the input time :param time: time to search for :return: integer """ assert ( self._time_intervals is not None ), "This spectrum set has no time intervals" return self._time_intervals.containing_bin(time)
[docs] def sort(self): """ sort the bin spectra in place according to time :return: """ assert ( self._time_intervals is not None ), "must have time intervals to do sorting" # get the sorting index idx = self._time_intervals.argsort() # reorder the spectra self._binned_spectrum_list = self._binned_spectrum_list[idx] # sort the time intervals in place self._time_intervals.sort()
@property def quality_per_bin(self): return np.array([spectrum.quality for spectrum in self._binned_spectrum_list]) @property def n_channels(self): return self.counts_per_bin.shape[1] @property def counts_per_bin(self): return np.array([spectrum.counts for spectrum in self._binned_spectrum_list]) @property def count_errors_per_bin(self): return np.array( [spectrum.count_errors for spectrum in self._binned_spectrum_list] ) @property def rates_per_bin(self): return np.array([spectrum.rates for spectrum in self._binned_spectrum_list]) @property def rate_errors_per_bin(self): return np.array( [spectrum.rate_errors for spectrum in self._binned_spectrum_list] ) @property def sys_errors_per_bin(self): return np.array( [spectrum.sys_errors for spectrum in self._binned_spectrum_list] ) @property def exposure_per_bin(self): return np.array([spectrum.exposure for spectrum in self._binned_spectrum_list]) @property def time_intervals(self): return self._time_intervals