From af2548e9f80b26578c0d849f2c5be7cf4e2b661d Mon Sep 17 00:00:00 2001 From: "Mads M. Pedersen" <mmpe@dtu.dk> Date: Tue, 11 Apr 2017 12:51:51 +0200 Subject: [PATCH] bug fix in bin_fit + import optimization --- wetb/signal/filters/_despike.py | 5 +++-- wetb/signal/filters/first_order.py | 5 ++++- wetb/signal/fit/_bin_fit.py | 7 ++++--- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/wetb/signal/filters/_despike.py b/wetb/signal/filters/_despike.py index 7fda9e33..bdeb8452 100644 --- a/wetb/signal/filters/_despike.py +++ b/wetb/signal/filters/_despike.py @@ -4,7 +4,7 @@ Created on 13/07/2016 @author: MMPE ''' import numpy as np -from wetb.signal.filters import replacer, frq_filters +from wetb.signal.filters import replacer replace_by_nan = replacer.replace_by_nan @@ -62,7 +62,8 @@ def despike(data, spike_length, spike_finder=univeral_thresshold_finder, spike_r if plt: plt.plot(data, label='Input') data = np.array(data).copy() - lp_data = low_pass(data, spike_length, 1) + from wetb.signal.filters import frq_filters + lp_data = frq_filters.low_pass(data, spike_length, 1) hp_data = data - lp_data hp_data = frq_filters.high_pass(data, spike_length*4, 1, order=2) #spike_length, sample_frq/2, 1, order=1) diff --git a/wetb/signal/filters/first_order.py b/wetb/signal/filters/first_order.py index 3b5824bd..7d10ba70 100644 --- a/wetb/signal/filters/first_order.py +++ b/wetb/signal/filters/first_order.py @@ -4,13 +4,16 @@ Created on 10/01/2015 @author: mmpe ''' import numpy as np -from wetb.signal.filters import cy_filters def low_pass(input, delta_t, tau, method=1): + from wetb.signal.filters import cy_filters + if isinstance(tau, (int, float)): return cy_filters.cy_low_pass_filter(input.astype(np.float64), delta_t, tau) else: return cy_filters.cy_dynamic_low_pass_filter(input.astype(np.float64), delta_t, tau, method) def high_pass(input, delta_t, tau): + from wetb.signal.filters import cy_filters + return cy_filters.cy_high_pass_filter(input.astype(np.float64), delta_t, tau) diff --git a/wetb/signal/fit/_bin_fit.py b/wetb/signal/fit/_bin_fit.py index fcaf5879..fbeaf651 100644 --- a/wetb/signal/fit/_bin_fit.py +++ b/wetb/signal/fit/_bin_fit.py @@ -77,7 +77,7 @@ def bin_fit(x,y, bins=10, kind='linear', bin_func=np.nanmean, bin_min_count=3, l lower, upper = lower_upper #Add value to min(x) - if bin_x_fit[0] > np.nanmin(x): + if bin_x_fit[0] > np.nanmin(x) or np.isnan(bin_y_fit[0]): if lower =='extrapolate': bin_y_fit = np.r_[bin_y_fit[0] - (bin_x_fit[0] - np.nanmin(x)) * (bin_y_fit[1] - bin_y_fit[0]) / (bin_x_fit[1] - bin_x_fit[0]), bin_y_fit] @@ -91,7 +91,7 @@ def bin_fit(x,y, bins=10, kind='linear', bin_func=np.nanmean, bin_min_count=3, l raise NotImplementedError("Argument for handling lower observations, %s, not implemented"%lower) #add value to max(x) - if bin_x_fit[-1] < np.nanmax(x): + if bin_x_fit[-1] < np.nanmax(x) or np.isnan(bin_y_fit[-1]): if upper == 'extrapolate': bin_y_fit = np.r_[bin_y_fit, bin_y_fit[-1] + (np.nanmax(x) - bin_x_fit[-1]) * (bin_y_fit[-1] - bin_y_fit[-2]) / (bin_x_fit[-1] - bin_x_fit[-2]) ] bin_x_fit = np.r_[bin_x_fit, np.nanmax(x)] @@ -194,6 +194,7 @@ def _interpolate_fit(bin_x_fit, bin_y_fit, kind='linear'): x = x[:].copy().astype(np.float) x[x<bin_x_fit[0]] = np.nan x[x>bin_x_fit[-1]] = np.nan - return interp1d(bin_x_fit, bin_y_fit, kind)(x[:]) + m = ~(np.isnan(bin_x_fit)|np.isnan(bin_y_fit)) + return interp1d(bin_x_fit[m], bin_y_fit[m], kind)(x[:]) return fit -- GitLab