Source code for threeML.utils.time_interval

import collections

import pandas as pd
from threeML.io.rich_display import display
from threeML.utils.interval import Interval, IntervalSet


[docs] class TimeInterval(Interval): def __add__(self, number): """ Return a new time interval equal to the original time interval shifted to the right by number :param number: a float :return: a new TimeInterval instance """ return self.new(self._start + number, self._stop + number) def __sub__(self, number): """ Return a new time interval equal to the original time interval shifted to the left by number :param number: a float :return: a new TimeInterval instance """ return self.new(self._start - number, self._stop - number) @property def duration(self): return super(TimeInterval, self)._get_width() @property def start_time(self): return self._start @property def stop_time(self): return self._stop @property def half_time(self): return self.mid_point def __repr__(self): return "time interval %s - %s (duration: %s)" % ( self.start_time, self.stop_time, self.duration, )
[docs] class TimeIntervalSet(IntervalSet): """ A set of time intervals """ INTERVAL_TYPE = TimeInterval @property def start_times(self): """ Return the starts fo the set :return: list of start times """ return self.starts @property def stop_times(self): """ Return the stops of the set :return: """ return self.stops @property def absolute_start_time(self): """ the minimum of the start times :return: """ return self.absolute_start @property def absolute_stop_time(self): """ the maximum of the stop times :return: """ return self.absolute_stop @property def time_edges(self): """ return an array of time edges if contiguous :return: """ return self.edges def __add__(self, number): """ Shift all time intervals to the right by number :param number: a float :return: new TimeIntervalSet instance """ new_set = self.new() new_set.extend([time_interval + number for time_interval in self._intervals]) return new_set def __sub__(self, number): """ Shift all time intervals to the left by number (in place) :param number: a float :return: new TimeIntervalSet instance """ new_set = self.new( [time_interval - number for time_interval in self._intervals] ) return new_set def _create_pandas(self): time_interval_dict = collections.OrderedDict() time_interval_dict["Start"] = [] time_interval_dict["Stop"] = [] time_interval_dict["Duration"] = [] time_interval_dict["Midpoint"] = [] for i, interval in enumerate(self._intervals): time_interval_dict["Start"].append(interval.start) time_interval_dict["Stop"].append(interval.stop) time_interval_dict["Duration"].append(interval.duration) time_interval_dict["Midpoint"].append(interval.half_time) df = pd.DataFrame(data=time_interval_dict) return df
[docs] def display(self): """ Display the time intervals :return: None """ display(self._create_pandas())
def __repr__(self): return self._create_pandas().to_string()