diff --git a/gstlal-inspiral/python/cbc_template_fir.py b/gstlal-inspiral/python/cbc_template_fir.py index f6f9eba28aaf7d3394cd72b239dd4f7d06ddab84..4793b94f75a9d971cd73ce583fc9fb869433a360 100644 --- a/gstlal-inspiral/python/cbc_template_fir.py +++ b/gstlal-inspiral/python/cbc_template_fir.py @@ -199,9 +199,27 @@ def compute_autocorrelation_mask( autocorrelation ): def movingmedian(interval, window_size): + interval = list(interval) + import bisect tmp = numpy.copy(interval) + A = None + As = None + prev = None for i in range(window_size, len(interval)-window_size): - tmp[i] = numpy.median(interval[i-window_size:i+window_size]) + if A is None: + A = interval[i-window_size:i+window_size] + ix = numpy.argsort(A) + As = list(numpy.array(A)[ix]) + else: + newdata = interval[i+window_size-1] + A = A + [newdata] + bisect.insort(As, newdata) + if len(As) % 2: + tmp[i] = As[len(As)/2] + else: + tmp[i] = (As[len(As)/2-1] + As[len(As)/2]) / 2. + prev = A.pop(0) + del As[bisect.bisect_left(As, prev)] return tmp