diff --git a/geomagio/TimeseriesUtilities.py b/geomagio/TimeseriesUtilities.py new file mode 100644 index 0000000000000000000000000000000000000000..a83071ab8d4c729ec668454356010ab03f359f3c --- /dev/null +++ b/geomagio/TimeseriesUtilities.py @@ -0,0 +1,56 @@ +"""Timeseries Utilities""" +import numpy.ma as ma +import obspy +import numpy + +def get_timeseries_gaps(timeseries, channels, starttime, endtime): + gaps = {} + for channel in channels: + stream_gap = get_stream_gaps( + timeseries.select(channel=channel), starttime, endtime) + gaps[channel] = stream_gap + + return gaps + + +def get_stream_gaps(stream, starttime, endtime): + gaps = [] + gap = None + + i = 0 + data = stream[0].data + length = len(data) + for i in xrange(0, length): + if numpy.isnan(data[i]) and gap is None: + gap = [starttime + i * 60] + if not numpy.isnan(data[i]) and gap is not None: + gap.append(starttime + (i - 1) * 60) + gaps.append(gap) + gap = None + if gap is not None: + gap.append(endtime) + gaps.append(gap) + + return gaps + +def get_merged_gaps(gaps, channels): + all_gaps = [] + gap_stream = [] + for channel in channels: + gap_stream.extend(gaps[channel]) + + sorted_gaps = sorted(gap_stream, key=lambda starttime: starttime[1]) + merged_gaps = [] + new_gap = None + gap = sorted_gaps[0] + for i in range(1,len(sorted_gaps)): + nxtgap = sorted_gaps[i] + if nxtgap[0] >= gap[0] and nxtgap[0] <= gap[1]: + if nxtgap[1] > gap[1]: + gap[1] = nxtgap[1] + else: + merged_gaps.append(gap) + gap = nxtgap + merged_gaps.append(gap) + + return merged_gaps