From f473bf7ca4ad5d0df43f7f5b50b48de433234631 Mon Sep 17 00:00:00 2001 From: pcain <pcain@usgs.gov> Date: Thu, 14 Oct 2021 09:20:28 -0600 Subject: [PATCH 1/2] pad and trim trace when data exists --- geomagio/edge/MiniSeedFactory.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/geomagio/edge/MiniSeedFactory.py b/geomagio/edge/MiniSeedFactory.py index bd2feb81d..ff03c0406 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 -- GitLab From cc1c610e077ac83ae6de770cf031ec71ed59a588 Mon Sep 17 00:00:00 2001 From: pcain <pcain@usgs.gov> Date: Thu, 14 Oct 2021 09:47:31 -0600 Subject: [PATCH 2/2] test add_empty_channels --- test/edge_test/MiniSeedFactory_test.py | 33 ++++++++++++++++++++++++++ test/edge_test/mseed_test_clients.py | 13 ++++++++-- 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/test/edge_test/MiniSeedFactory_test.py b/test/edge_test/MiniSeedFactory_test.py index 555635f36..4858bc475 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 9fd62bb79..d706113d2 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 -- GitLab