diff --git a/geomagio/TimeseriesUtility.py b/geomagio/TimeseriesUtility.py index c54d7498399639c8deda626b3dc0fc20a486f432..f22ba28d915774c0b61e404bf6d7e73592247531 100644 --- a/geomagio/TimeseriesUtility.py +++ b/geomagio/TimeseriesUtility.py @@ -621,13 +621,25 @@ def split_trace(trace: Trace, size: int = 86400) -> Stream: interval_start = interval["start"] interval_end = interval["end"] delta = out_trace.stats.delta - # accounts for trace containing one sample if interval_end - delta < interval_start: + # trace contains one sample stream += out_trace continue - stream += out_trace.slice( - starttime=interval_start, - endtime=interval_end - delta, - nearest_sample=False, - ) + if interval_end.timestamp % size: + # trace does NOT contain first sample in next interval + stream += out_trace.slice( + starttime=interval_start, endtime=interval_end, nearest_sample=False + ) + else: + # trace DOES contain first sample in next interval + stream += out_trace.slice( + starttime=interval_start, + endtime=interval_end - delta, + nearest_sample=False, + ) + if interval_end == out_trace.stats.endtime: + # ONLY if it is the last interval + stream += out_trace.slice( + starttime=interval_end, endtime=interval_end, nearest_sample=False + ) return stream diff --git a/test/edge_test/MiniSeedFactory_test.py b/test/edge_test/MiniSeedFactory_test.py index 4858bc47510da1e9f259318693cbef3054871653..e5d5e1734426f7887d78d6cf350730c1966ae4b8 100644 --- a/test/edge_test/MiniSeedFactory_test.py +++ b/test/edge_test/MiniSeedFactory_test.py @@ -151,13 +151,19 @@ def test__pre_process(): """edge_test.MiniSeedFactory_test.test__pre_process()""" trace = __create_trace(numpy.arange((86400 * 2) + 1), channel="H") processed = MiniSeedInputClient(host=None)._pre_process(stream=Stream(trace)) - assert len(processed) == 2 - for trace in processed: + assert len(processed) == 3 + for trace in processed[0:2]: assert trace.data.dtype == "float32" stats = trace.stats assert stats.npts == 86400 assert stats.starttime.timestamp % 86400 == 0 assert stats.endtime.timestamp % 86400 != 0 + for trace in processed[-1:]: + assert trace.data.dtype == "float32" + stats = trace.stats + assert stats.npts == 1 + assert stats.starttime.timestamp % 86400 == 0 + assert stats.starttime == stats.endtime def test__format_miniseed(): @@ -168,8 +174,10 @@ def test__format_miniseed(): block_size = 512 data = buf.getvalue() n_blocks = int(len(data) / block_size) - assert n_blocks == 1516 - # 759th block is start of second day(758 blocks per day for 1Hz data) + assert n_blocks == 1517 + # 759th block is start of second day + # (758 blocks per day for 1Hz data, which implies 56-byte, + # NOT 64-byte, MiniSeed headers...something to investigate) block_start = 758 * block_size block = data[block_start : block_start + block_size] out_stream = read(io.BytesIO(block))