diff --git a/geomagio/edge/MiniSeedFactory.py b/geomagio/edge/MiniSeedFactory.py index bd2feb81da2879c2ab0024248e0dd0996c4fa69b..ff03c0406497c2a5bfab0c2b5f1dccdf2f279d42 100644 --- a/geomagio/edge/MiniSeedFactory.py +++ b/geomagio/edge/MiniSeedFactory.py @@ -362,9 +362,6 @@ class MiniSeedFactory(TimeseriesFactory): sncl.network, sncl.station, sncl.location, sncl.channel, starttime, endtime ) data.merge() - TimeseriesUtility.pad_and_trim_trace( - trace=data[0], starttime=starttime, endtime=endtime - ) if data.count() == 0 and add_empty_channels: data += self._get_empty_trace( starttime=starttime, @@ -376,6 +373,10 @@ class MiniSeedFactory(TimeseriesFactory): network=sncl.network, location=sncl.location, ) + if data.count() != 0: + TimeseriesUtility.pad_and_trim_trace( + trace=data[0], starttime=starttime, endtime=endtime + ) self._set_metadata(data, observatory, channel, type, interval) return data diff --git a/test/edge_test/MiniSeedFactory_test.py b/test/edge_test/MiniSeedFactory_test.py index 555635f360ca3a099380d10eb27556d7f94859f1..4858bc47510da1e9f259318693cbef3054871653 100644 --- a/test/edge_test/MiniSeedFactory_test.py +++ b/test/edge_test/MiniSeedFactory_test.py @@ -66,6 +66,39 @@ def test_get_calculated_timeseries(miniseed_factory, shu_u_metadata): assert_array_equal(result.data, expected) +def test__get_timeseries_add_empty_channels(miniseed_factory: MiniSeedFactory): + """test.edge_test.MiniSeedFactory_test.test__get_timeseries_add_empty_channels()""" + miniseed_factory.client.return_empty = True + starttime = UTCDateTime("2021-09-07") + endtime = UTCDateTime("2021-09-07T00:10:00Z") + trace = miniseed_factory._get_timeseries( + starttime=starttime, + endtime=endtime, + observatory="SHU", + channel="U", + type="variation", + interval="tenhertz", + add_empty_channels=True, + )[0] + assert_array_equal(trace.data, numpy.ones(trace.stats.npts) * numpy.nan) + assert trace.stats.starttime == starttime + assert trace.stats.endtime == endtime + assert ( + trace.stats.npts == ((endtime.timestamp - starttime.timestamp) * 10.0) + 1 + ) # tenhertz sampling rate + + with pytest.raises(IndexError): + trace = miniseed_factory._get_timeseries( + starttime=starttime, + endtime=endtime, + observatory="SHU", + channel="U", + type="variation", + interval="tenhertz", + add_empty_channels=False, + )[0] + + def test__get_timeseries_misaligned(misaligned_miniseed_factory: MiniSeedFactory): """test.edge_test.MiniSeedFactory_test.test__get_timeseries_misaligned()""" u_trace = misaligned_miniseed_factory._get_timeseries( diff --git a/test/edge_test/mseed_test_clients.py b/test/edge_test/mseed_test_clients.py index 9fd62bb797e5f515acce0f6dd7f8b4eb24bbfa2d..d706113d2968582962b71e927a53dfe456f8b286 100644 --- a/test/edge_test/mseed_test_clients.py +++ b/test/edge_test/mseed_test_clients.py @@ -7,7 +7,13 @@ from geomagio.edge import SNCL class MockMiniSeedClient(Client): - """replaces default obspy miniseed client's get_waveforms method to return trace of ones""" + """replaces default obspy miniseed client's get_waveforms method to return trace of ones + + Note: includes 'return_empty' parameter to simulate situations where no data is received + """ + + def __init__(self, return_empty: bool = False): + self.return_empty = return_empty def get_waveforms( self, @@ -18,6 +24,8 @@ class MockMiniSeedClient(Client): starttime: UTCDateTime, endtime: UTCDateTime, ): + if self.return_empty: + return Stream() sncl = SNCL( station=station, network=network, @@ -42,7 +50,8 @@ class MockMiniSeedClient(Client): class MisalignedMiniSeedClient(MockMiniSeedClient): """mock client that adds an offset value to endtime""" - def __init__(self, increment: int = 1): + def __init__(self, return_empty: bool = False, increment: int = 1): + super().__init__(return_empty=return_empty) self.increment = increment self.offset = 0