diff --git a/modules/aeolus/datasource.py b/modules/aeolus/datasource.py index 66a785b43aeb6a980e6fd0d3bae974029284d1f7..9908da8a7625f521a5e44f64885646801a2ecafd 100644 --- a/modules/aeolus/datasource.py +++ b/modules/aeolus/datasource.py @@ -110,9 +110,17 @@ class Files: self._current_index = 0 def get_datetime(self, pathname): + """ + :param pathname: The full-path of the file. + :return: The file's time label as a datetime object. + """ pass def get_file_containing_time(self, timestamp): + """ + :param timestamp: seconds since the epoch + :return: the file whose time range (defined as the difference between consecutive file time labels) contains timestamp. + """ k = -1 for i in range(self.ftimes.shape[0]): if (timestamp >= self.ftimes[i, 0]) and (timestamp < self.ftimes[i, 1]): @@ -124,6 +132,11 @@ class Files: return self.flist[k], self.ftimes[k, 0], k def get_file(self, timestamp, window=None): + """ + :param timestamp: seconds since the epoch. + :param window: the duration of files in this object. Defaults to the constructor time span. + :return: the file whose duration contains the timestamp. + """ if window is None: window = self.span_seconds else: @@ -135,6 +148,22 @@ class Files: else: return None, None, None + def get_file_in_range(self, timestamp, t_lo_minutes, t_hi_minutes): + """ + :param timestamp: + :param t_lo_minutes: can be negative or positive + :param t_hi_minutes: can be negative or positive, but must be greater than t_lo_minutes. + :return: the file whose time label is within the absolute range (timestamp + t_lo_minutes, timestamp + t_hi_minutes) + """ + + t_lo = timestamp + datetime.timedelta(minutes=t_lo_minutes).seconds + t_hi = timestamp + datetime.timedelta(minutes=t_hi_minutes).seconds + + midx = np.where(np.logical_and(self.ftimes[:, 0] >= t_lo, self.ftimes[:, 0] < t_hi))[0] + midx = midx[0] # the first occurrence + + return self.flist[midx], self.ftimes[midx, 0], midx + def get_parameters(self): pass