diff --git a/geomagio/TimeseriesFactory.py b/geomagio/TimeseriesFactory.py index 2d9ec3f81b472a08d72bd4d75d492c6146fdaa8a..f631b90aaadff0b8cef50f2ae6388d5233124420 100644 --- a/geomagio/TimeseriesFactory.py +++ b/geomagio/TimeseriesFactory.py @@ -23,16 +23,12 @@ class TimeseriesFactory(object): data interval, optional. default 'minute'. urlTemplate : str - A string that contains any of the following replacement patterns: - - '%(i)s' : interval abbreviation - - '%(interval)s' interval name - - '%(julian)s' julian date - - '%(obs)s' lowercase observatory code - - '%(OBS)s' uppercase observatory code - - '%(t)s' type abbreviation - - '%(type)s' type name - - '%(year)s' year formatted as YYYY - - '%(ymd)s' time formatted as YYYYMMDD + A string that contains replacement patterns. + See https://github.com/usgs/geomag-algorithms/blob/master/docs/io.md + and/or TimeseriesFactory._get_url() + urlInterval : int + Interval in seconds between URLs. + Intervals begin at the unix epoch (1970-01-01T00:00:00Z) """ def __init__(self, observatory=None, channels=('H', 'D', 'Z', 'F'), type='variation', interval='minute', @@ -82,7 +78,34 @@ class TimeseriesFactory(object): TimeseriesFactoryException if any parameters are unsupported, or errors occur loading data. """ - raise NotImplementedError('"get_timeseries" not implemented') + observatory = observatory or self.observatory + channels = channels or self.channels + type = type or self.type + interval = interval or self.interval + + timeseries = obspy.core.Stream() + urlIntervals = Util.get_intervals( + starttime=starttime, + endtime=endtime, + size=self.urlInterval) + for urlInterval in urlIntervals: + url = self._get_url( + observatory=observatory, + date=urlInterval['start'], + type=type, + interval=interval, + channels=channels) + data = Util.read_url(url) + try: + timeseries += self.parse_string(data) + except NotImplementedError: + raise NotImplementedError('"get_timeseries" not implemented') + except Exception as e: + print >> sys.stderr, "Error parsing data: " + str(e) + print >> sys.stderr, data + timeseries.merge() + timeseries.trim(starttime, endtime) + return timeseries def parse_string(self, data): """Parse the contents of a string in the format of an IAGA2002 file. @@ -127,7 +150,39 @@ class TimeseriesFactory(object): TimeseriesFactoryException if any errors occur. """ - raise NotImplementedError('"put_timeseries" not implemented') + if not self.urlTemplate.startswith('file://'): + raise TimeseriesFactoryException('Only file urls are supported') + channels = channels or self.channels + type = type or self.type + interval = interval or self.interval + stats = timeseries[0].stats + delta = stats.delta + observatory = stats.station + starttime = starttime or stats.starttime + endtime = endtime or stats.endtime + + urlIntervals = Util.get_intervals( + starttime=starttime, + endtime=endtime, + size=self.urlInterval) + for urlInterval in urlIntervals: + url = self._get_url( + observatory=observatory, + date=urlInterval['start'], + type=type, + interval=interval, + channels=channels) + url_data = timeseries.slice( + starttime=urlInterval['start'], + # subtract delta to omit the sample at end: `[start, end)` + endtime=(urlInterval['end'] - delta)) + url_file = Util.get_file_from_url(url, createParentDirectory=True) + with open(url_file, 'wb') as fh: + try: + self.write_file(fh, url_data, channels) + except NotImplementedError: + raise NotImplementedError( + '"get_timeseries" not implemented') def write_file(self, fh, timeseries, channels): """Write timeseries data to the given file object. @@ -172,61 +227,6 @@ class TimeseriesFactory(object): os.makedirs(parent) return filename - def _get_timeseries(self, starttime, endtime, observatory=None, - channels=None, type=None, interval=None): - """A basic implementation of get_timeseries using parse_string. - - Parameters - ---------- - starttime : UTCDateTime - time of first sample in timeseries. - endtime : UTCDateTime - time of last sample in timeseries. - observatory : str - observatory code, usually 3 characters, optional. - uses default if unspecified. - channels : array_like - list of channels to load, optional. - uses default if unspecified. - type : {'definitive', 'provisional', 'quasi-definitive', 'variation'} - data type, optional. - uses default if unspecified. - interval : {'daily', 'hourly', 'minute', 'monthly', 'second'} - data interval, optional. - uses default if unspecified. - - Returns - ------- - obspy.core.Stream - stream containing traces for requested timeseries. - """ - observatory = observatory or self.observatory - channels = channels or self.channels - type = type or self.type - interval = interval or self.interval - - timeseries = obspy.core.Stream() - urlIntervals = Util.get_intervals( - starttime=starttime, - endtime=endtime, - size=self.urlInterval) - for urlInterval in urlIntervals: - url = self._get_url( - observatory=observatory, - date=urlInterval['start'], - type=type, - interval=interval, - channels=channels) - data = Util.read_url(url) - try: - timeseries += self.parse_string(data) - except Exception as e: - print >> sys.stderr, "Error parsing data: " + str(e) - print >> sys.stderr, data - timeseries.merge() - timeseries.trim(starttime, endtime) - return timeseries - def _get_url(self, observatory, date, type='variation', interval='minute', channels=None): """Get the url for a specified file. @@ -401,61 +401,3 @@ class TimeseriesFactory(object): raise TimeseriesFactoryException( 'Unsupported type "%s"' % type) return type_name - - def _put_timeseries(self, timeseries, starttime=None, endtime=None, - channels=None, type=None, interval=None): - """A basic implementation of put_timeseries using write_file. - - Parameters - ---------- - timeseries : obspy.core.Stream - stream containing traces to store. - starttime : UTCDateTime - time of first sample in timeseries to store. - uses first sample if unspecified. - endtime : UTCDateTime - time of last sample in timeseries to store. - uses last sample if unspecified. - channels : array_like - list of channels to store, optional. - uses default if unspecified. - type : {'definitive', 'provisional', 'quasi-definitive', 'variation'} - data type, optional. - uses default if unspecified. - interval : {'daily', 'hourly', 'minute', 'monthly', 'second'} - data interval, optional. - uses default if unspecified. - Raises - ------ - TimeseriesFactoryException - if any errors occur. - """ - if not self.urlTemplate.startswith('file://'): - raise TimeseriesFactoryException('Only file urls are supported') - channels = channels or self.channels - type = type or self.type - interval = interval or self.interval - stats = timeseries[0].stats - delta = stats.delta - observatory = stats.station - starttime = starttime or stats.starttime - endtime = endtime or stats.endtime - - urlIntervals = Util.get_intervals( - starttime=starttime, - endtime=endtime, - size=self.urlInterval) - for urlInterval in urlIntervals: - url = self._get_url( - observatory=observatory, - date=urlInterval['start'], - type=type, - interval=interval, - channels=channels) - url_data = timeseries.slice( - starttime=urlInterval['start'], - # subtract delta to omit the sample at end: `[start, end)` - endtime=(urlInterval['end'] - delta)) - url_file = Util.get_file_from_url(url, createParentDirectory=True) - with open(url_file, 'wb') as fh: - self.write_file(fh, url_data, channels) diff --git a/geomagio/iaga2002/IAGA2002Factory.py b/geomagio/iaga2002/IAGA2002Factory.py index 9f17624edd72e543e40ffb2afa7def084696655c..83154283b14180e5530b3f80da88646480488c4e 100644 --- a/geomagio/iaga2002/IAGA2002Factory.py +++ b/geomagio/iaga2002/IAGA2002Factory.py @@ -34,42 +34,6 @@ class IAGA2002Factory(TimeseriesFactory): def __init__(self, **kwargs): TimeseriesFactory.__init__(self, **kwargs) - def get_timeseries(self, starttime, endtime, observatory=None, - channels=None, type=None, interval=None): - """Get timeseries data - - Parameters - ---------- - observatory : str - observatory code. - starttime : obspy.core.UTCDateTime - time of first sample. - endtime : obspy.core.UTCDateTime - time of last sample. - type : {'variation', 'quasi-definitive'} - data type. - interval : {'minute', 'second'} - data interval. - - Returns - ------- - obspy.core.Stream - timeseries object with requested data. - - Raises - ------ - TimeseriesFactoryException - if invalid values are requested, or errors occur while - retrieving timeseries. - """ - return self._get_timeseries( - starttime=starttime, - endtime=endtime, - observatory=observatory, - channels=channels, - type=type, - interval=interval) - def parse_string(self, iaga2002String): """Parse the contents of a string in the format of an IAGA2002 file. @@ -104,38 +68,6 @@ class IAGA2002Factory(TimeseriesFactory): stream += obspy.core.Trace(data[channel], stats) return stream - def put_timeseries(self, timeseries, starttime=None, endtime=None, - channels=None, type=None, interval=None): - """Store timeseries data. - - Parameters - ---------- - timeseries : obspy.core.Stream - stream containing traces to store. - starttime : UTCDateTime - time of first sample in timeseries to store. - uses first sample if unspecified. - endtime : UTCDateTime - time of last sample in timeseries to store. - uses last sample if unspecified. - channels : array_like - list of channels to store, optional. - uses default if unspecified. - type : {'definitive', 'provisional', 'quasi-definitive', 'variation'} - data type, optional. - uses default if unspecified. - interval : {'daily', 'hourly', 'minute', 'monthly', 'second'} - data interval, optional. - uses default if unspecified. - """ - return self._put_timeseries( - timeseries=timeseries, - starttime=starttime, - endtime=endtime, - channels=channels, - type=type, - interval=interval) - def write_file(self, fh, timeseries, channels): """writes timeseries data to the given file object. diff --git a/geomagio/imfv283/IMFV283Factory.py b/geomagio/imfv283/IMFV283Factory.py index a12e079d2af0851e460ee5961caaac7a72f0ac91..f7b493f7e18aaadc63159882edb9e342723872a4 100644 --- a/geomagio/imfv283/IMFV283Factory.py +++ b/geomagio/imfv283/IMFV283Factory.py @@ -53,7 +53,8 @@ class IMFV283Factory(TimeseriesFactory): if invalid values are requested, or errors occur while retrieving timeseries. """ - timeseries = self._get_timeseries( + timeseries = TimeseriesFactory.get_timeseries( + self, starttime=starttime, endtime=endtime, observatory=observatory, diff --git a/geomagio/imfv283/StreamIMFV283Factory.py b/geomagio/imfv283/StreamIMFV283Factory.py index 57e24c955cef534bacf60f9b2faa5209859157a0..d64b886385d1db2bf31105178871bbab3eb9351f 100644 --- a/geomagio/imfv283/StreamIMFV283Factory.py +++ b/geomagio/imfv283/StreamIMFV283Factory.py @@ -28,6 +28,4 @@ class StreamIMFV283Factory(IMFV283Factory): Notes: Calls IMFV283Factory.parse_string in place of IMFV283Factory.get_timeseries. """ - - self._stream.seek(0) return IMFV283Factory.parse_string(self, self._stream.read()) diff --git a/geomagio/pcdcp/PCDCPFactory.py b/geomagio/pcdcp/PCDCPFactory.py index a293ec7701ba19a75624e2c5146a0fc5b187a1e8..0cfc04d20a00335317cdac29f9e1621a3cc8506c 100644 --- a/geomagio/pcdcp/PCDCPFactory.py +++ b/geomagio/pcdcp/PCDCPFactory.py @@ -3,7 +3,6 @@ import obspy.core from .. import ChannelConverter from ..TimeseriesFactory import TimeseriesFactory -from ..TimeseriesFactoryException import TimeseriesFactoryException from PCDCPParser import PCDCPParser from PCDCPWriter import PCDCPWriter @@ -37,42 +36,6 @@ class PCDCPFactory(TimeseriesFactory): def __init__(self, **kwargs): TimeseriesFactory.__init__(self, **kwargs) - def get_timeseries(self, starttime, endtime, observatory=None, - channels=None, type=None, interval=None): - """Get timeseries data - - Parameters - ---------- - observatory : str - 3-letter observatory code. - starttime : obspy.core.UTCDateTime - Time of first sample. - endtime : obspy.core.UTCDateTime - Time of last sample. - type : {'variation', 'quasi-definitive'} - Data type. - interval : {'minute', 'second'} - Data interval. - - Returns - ------- - obspy.core.Stream - timeseries object with requested data. - - Raises - ------ - TimeseriesFactoryException - If invalid values are requested, or errors occur while - retrieving timeseries. - """ - return self._get_timeseries( - starttime=starttime, - endtime=endtime, - observatory=observatory, - channels=channels, - type=type, - interval=interval) - def parse_string(self, pcdcpString): """Parse the contents of a string in the format of a pcdcp file. @@ -126,42 +89,6 @@ class PCDCPFactory(TimeseriesFactory): return stream - def _get_days(self, starttime, endtime): - """Get days between (inclusive) starttime and endtime. - - Parameters - ---------- - starttime : obspy.core.UTCDateTime - the start time - endtime : obspy.core.UTCDateTime - the end time - - Returns - ------- - array_like - list of times, one per day, for all days between and including - ``starttime`` and ``endtime``. - - Raises - ------ - TimeseriesFactoryException - if starttime is after endtime - """ - if starttime > endtime: - raise TimeseriesFactoryException( - 'starttime must be before endtime.') - - days = [] - day = starttime - lastday = (endtime.year, endtime.month, endtime.day) - while True: - days.append(day) - if lastday == (day.year, day.month, day.day): - break - # move to next day - day = obspy.core.UTCDateTime(day.timestamp + 86400) - return days - def write_file(self, fh, timeseries, channels): """writes timeseries data to the given file object. @@ -174,72 +101,3 @@ class PCDCPFactory(TimeseriesFactory): list of channels to store """ PCDCPWriter().write(fh, timeseries, channels) - - def put_timeseries(self, timeseries, starttime=None, endtime=None, - channels=None, type=None, interval=None): - """Store timeseries data. - - Parameters - ---------- - timeseries : obspy.core.Stream - stream containing traces to store. - starttime : UTCDateTime - time of first sample in timeseries to store. - uses first sample if unspecified. - endtime : UTCDateTime - time of last sample in timeseries to store. - uses last sample if unspecified. - channels : array_like - list of channels to store, optional. - uses default if unspecified. - type : {'definitive', 'provisional', 'quasi-definitive', 'variation'} - data type, optional. - uses default if unspecified. - interval : {'daily', 'hourly', 'minute', 'monthly', 'second'} - data interval, optional. - uses default if unspecified. - """ - print self.urlTemplate - if not self.urlTemplate.startswith('file://'): - raise TimeseriesFactoryException('Only file urls are supported') - - channels = channels or self.channels - type = type or self.type - interval = interval or self.interval - stats = timeseries[0].stats - observatory = stats.station - starttime = starttime or stats.starttime - endtime = endtime or stats.endtime - days = self._get_days(starttime, endtime) - for day in days: - day_filename = self._get_file_from_url( - self._get_url(observatory, day, type, interval)) - - day_timeseries = self._get_slice(timeseries, day, interval) - with open(day_filename, 'wb') as fh: - self.write_file(fh, day_timeseries, channels) - - def _get_slice(self, timeseries, day, interval): - """Get the first and last time for a day - - Parameters - ---------- - timeseries : obspy.core.Stream - timeseries to slice - day : UTCDateTime - time in day to slice - - Returns - ------- - obspy.core.Stream - sliced stream - """ - day = day.datetime - start = obspy.core.UTCDateTime(day.year, day.month, day.day, 0, 0, 0) - - if interval == 'minute': - end = start + 86340.0 - else: - end = start + 86399.999999 - - return timeseries.slice(start, end) diff --git a/geomagio/temperature/TEMPFactory.py b/geomagio/temperature/TEMPFactory.py index 213c72806b91cf7423da32042c2a0c68640204e2..515e93d19f8ce4250a325ab859575ee608ef45ce 100644 --- a/geomagio/temperature/TEMPFactory.py +++ b/geomagio/temperature/TEMPFactory.py @@ -1,8 +1,6 @@ """Factory that loads temp/volt Files.""" -import obspy.core from ..TimeseriesFactory import TimeseriesFactory -from ..TimeseriesFactoryException import TimeseriesFactoryException from TEMPWriter import TEMPWriter @@ -26,81 +24,11 @@ class TEMPFactory(TimeseriesFactory): - '%(type)s' type name - '%(year)s' year formatted as YYYY - '%(ymd)s' time formatted as YYYYMMDD - - See Also - -------- - TEMPParser """ def __init__(self, **kwargs): TimeseriesFactory.__init__(self, **kwargs) - def get_timeseries(self, starttime, endtime, observatory=None, - channels=None, type=None, interval=None): - """Get timeseries data - - Parameters - ---------- - observatory : str - 3-letter observatory code. - starttime : obspy.core.UTCDateTime - Time of first sample. - endtime : obspy.core.UTCDateTime - Time of last sample. - type : {'variation', 'quasi-definitive'} - Data type. - interval : {'minute', 'second'} - Data interval. - - Returns - ------- - obspy.core.Stream - timeseries object with requested data. - - Raises - ------ - TimeseriesFactoryException - If invalid values are requested, or errors occur while - retrieving timeseries. - """ - raise NotImplementedError('"get_timeseries" not implemented') - - def _get_days(self, starttime, endtime): - """Get days between (inclusive) starttime and endtime. - - Parameters - ---------- - starttime : obspy.core.UTCDateTime - the start time - endtime : obspy.core.UTCDateTime - the end time - - Returns - ------- - array_like - list of times, one per day, for all days between and including - ``starttime`` and ``endtime``. - - Raises - ------ - TimeseriesFactoryException - if starttime is after endtime - """ - if starttime > endtime: - raise TimeseriesFactoryException( - 'starttime must be before endtime.') - - days = [] - day = starttime - lastday = (endtime.year, endtime.month, endtime.day) - while True: - days.append(day) - if lastday == (day.year, day.month, day.day): - break - # move to next day - day = obspy.core.UTCDateTime(day.timestamp + 86400) - return days - def write_file(self, fh, timeseries, channels): """writes timeseries data to the given file object. @@ -113,72 +41,3 @@ class TEMPFactory(TimeseriesFactory): list of channels to store """ TEMPWriter().write(fh, timeseries, channels) - - def put_timeseries(self, timeseries, starttime=None, endtime=None, - channels=None, type=None, interval=None): - """Store timeseries data. - - Parameters - ---------- - timeseries : obspy.core.Stream - stream containing traces to store. - starttime : UTCDateTime - time of first sample in timeseries to store. - uses first sample if unspecified. - endtime : UTCDateTime - time of last sample in timeseries to store. - uses last sample if unspecified. - channels : array_like - list of channels to store, optional. - uses default if unspecified. - type : {'definitive', 'provisional', 'quasi-definitive', 'variation'} - data type, optional. - uses default if unspecified. - interval : {'daily', 'hourly', 'minute', 'monthly', 'second'} - data interval, optional. - uses default if unspecified. - """ - print self.urlTemplate - if not self.urlTemplate.startswith('file://'): - raise TimeseriesFactoryException('Only file urls are supported') - - channels = channels or self.channels - type = type or self.type - interval = interval or self.interval - stats = timeseries[0].stats - observatory = stats.station - starttime = starttime or stats.starttime - endtime = endtime or stats.endtime - days = self._get_days(starttime, endtime) - for day in days: - day_filename = self._get_file_from_url( - self._get_url(observatory, day, type, interval)) - - day_timeseries = self._get_slice(timeseries, day, interval) - with open(day_filename, 'wb') as fh: - self.write_file(fh, day_timeseries, channels) - - def _get_slice(self, timeseries, day, interval): - """Get the first and last time for a day - - Parameters - ---------- - timeseries : obspy.core.Stream - timeseries to slice - day : UTCDateTime - time in day to slice - - Returns - ------- - obspy.core.Stream - sliced stream - """ - day = day.datetime - start = obspy.core.UTCDateTime(day.year, day.month, day.day, 0, 0, 0) - - if interval == 'minute': - end = start + 86340.0 - else: - end = start + 86399.999999 - - return timeseries.slice(start, end) diff --git a/geomagio/vbf/VBFFactory.py b/geomagio/vbf/VBFFactory.py index 72abb80b4836fba9e441c7ccf79566ad8be96dd0..e2b91ce0add44ebe942904351550b423514e4dfa 100644 --- a/geomagio/vbf/VBFFactory.py +++ b/geomagio/vbf/VBFFactory.py @@ -1,8 +1,6 @@ """Factory that loads VBF Files.""" -import obspy.core from ..TimeseriesFactory import TimeseriesFactory -from ..TimeseriesFactoryException import TimeseriesFactoryException from VBFWriter import VBFWriter @@ -15,176 +13,33 @@ class VBFFactory(TimeseriesFactory): Parameters ---------- - urlTemplate : str - A string that contains any of the following replacement patterns: - - '%(i)s' : interval abbreviation - - '%(interval)s' interval name - - '%(julian)s' julian day formatted as JJJ - - '%(obs)s' lowercase observatory code - - '%(OBS)s' uppercase observatory code - - '%(t)s' type abbreviation - - '%(type)s' type name - - '%(year)s' year formatted as YYYY - - '%(ymd)s' time formatted as YYYYMMDD + output : {'binlog', 'vbf'} + bin-change or vbf style output. + + All other named parameters passed to TimeseriesFactory. See Also -------- - VBFParser + TimeseriesFactory """ - # Flag "output" used for vbf file vs bin-change log. def __init__(self, output='vbf', **kwargs): TimeseriesFactory.__init__(self, **kwargs) self.output = output - def get_timeseries(self, starttime, endtime, observatory=None, - channels=None, type=None, interval=None): - """Get timeseries data - - Parameters - ---------- - observatory : str - 3-letter observatory code. - starttime : obspy.core.UTCDateTime - Time of first sample. - endtime : obspy.core.UTCDateTime - Time of last sample. - type : {'variation', 'quasi-definitive'} - Data type. - interval : {'minute', 'second'} - Data interval. - - Returns - ------- - obspy.core.Stream - timeseries object with requested data. - - Raises - ------ - TimeseriesFactoryException - If invalid values are requested, or errors occur while - retrieving timeseries. - """ - raise NotImplementedError('"get_timeseries" not implemented') - - def _get_days(self, starttime, endtime): - """Get days between (inclusive) starttime and endtime. - - Parameters - ---------- - starttime : obspy.core.UTCDateTime - the start time - endtime : obspy.core.UTCDateTime - the end time - - Returns - ------- - array_like - list of times, one per day, for all days between and including - ``starttime`` and ``endtime``. - - Raises - ------ - TimeseriesFactoryException - if starttime is after endtime - """ - if starttime > endtime: - raise TimeseriesFactoryException( - 'starttime must be before endtime.') - - days = [] - day = starttime - lastday = (endtime.year, endtime.month, endtime.day) - while True: - days.append(day) - if lastday == (day.year, day.month, day.day): - break - # move to next day - day = obspy.core.UTCDateTime(day.timestamp + 86400) - return days - def write_file(self, fh, timeseries, channels): - """writes timeseries data to the given file object. + """Write timeseries data to the given file object. Parameters ---------- - fh: file object + fh : writable + file handle where data is written. timeseries : obspy.core.Stream stream containing traces to store. - channels : array_like - list of channels to store + channels : list + list of channels to store. """ - if self.output == 'binlog': VBFWriter().write_change_log(fh, timeseries, channels) else: VBFWriter().write(fh, timeseries, channels) - - def put_timeseries(self, timeseries, starttime=None, endtime=None, - channels=None, type=None, interval=None): - """Store timeseries data. - - Parameters - ---------- - timeseries : obspy.core.Stream - stream containing traces to store. - starttime : UTCDateTime - time of first sample in timeseries to store. - uses first sample if unspecified. - endtime : UTCDateTime - time of last sample in timeseries to store. - uses last sample if unspecified. - channels : array_like - list of channels to store, optional. - uses default if unspecified. - type : {'definitive', 'provisional', 'quasi-definitive', 'variation'} - data type, optional. - uses default if unspecified. - interval : {'daily', 'hourly', 'minute', 'monthly', 'second'} - data interval, optional. - uses default if unspecified. - """ - print self.urlTemplate - if not self.urlTemplate.startswith('file://'): - raise TimeseriesFactoryException('Only file urls are supported') - - channels = channels or self.channels - type = type or self.type - interval = interval or self.interval - stats = timeseries[0].stats - observatory = stats.station - starttime = starttime or stats.starttime - endtime = endtime or stats.endtime - days = self._get_days(starttime, endtime) - for day in days: - day_filename = self._get_file_from_url( - self._get_url(observatory, day, type, interval)) - - day_timeseries = self._get_slice(timeseries, day, interval) - with open(day_filename, 'wb') as fh: - self.write_file(fh, day_timeseries, channels) - - def _get_slice(self, timeseries, day, interval): - """Get the first and last time for a day - - Parameters - ---------- - timeseries : obspy.core.Stream - timeseries to slice - day : UTCDateTime - time in day to slice - - Returns - ------- - obspy.core.Stream - sliced stream - """ - day = day.datetime - start = obspy.core.UTCDateTime(day.year, day.month, day.day, 0, 0, 0) - - if interval == 'minute': - end = start + 86340.0 - else: - end = start + 86399.999999 - - return timeseries.slice(start, end)