From 31273b384e91c8b4fe74119420393ef03caa7473 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludger=20K=C3=BCperkoch?= Date: Thu, 11 Dec 2014 16:30:21 +0100 Subject: [PATCH] Simplified AIC-picking algorithm: Onset is definetly the minimum in front of maximum of AIC-CF! Smoothing of AIC-CF no more necessary. --- pylot/core/pick/Picker.py | 47 ++++++++++++--------------------------- 1 file changed, 14 insertions(+), 33 deletions(-) diff --git a/pylot/core/pick/Picker.py b/pylot/core/pick/Picker.py index 4b76338f..e5857e49 100644 --- a/pylot/core/pick/Picker.py +++ b/pylot/core/pick/Picker.py @@ -23,7 +23,7 @@ class AutoPicking(object): Superclass of different, automated picking algorithms applied on a CF determined using AIC, HOS, or AR prediction. ''' - def __init__(self, cf, Tslope, aerr, TSNR, PickWindow, peps, Tsmooth): + def __init__(self, cf, Tslope, aerr, TSNR, PickWindow, peps=None, Tsmooth=None): ''' :param: cf, characteristic function, on which the picking algorithm is applied :type: `~pylot.core.pick.CharFuns.CharacteristicFunction` object @@ -48,6 +48,9 @@ class AutoPicking(object): :type: float ''' + #assert isinstance(cf, CharFuns), "%s is not a CharacteristicFunction object" % str(cf) + #wie kann man hier isinstance benutzen? + self.cf = cf.getCF() self.Tcf = cf.getTimeArray() self.dt = cf.getIncrement() @@ -127,45 +130,23 @@ class AICPicker(AutoPicking): print 'Get onset (pick) from AIC-CF ...' + self.Pick = -1 #taper AIC-CF to get rid off side maxima tap = np.hanning(len(self.cf)) aic = tap * self.cf + max(abs(self.cf)) #get maximum of CF as starting point icfmax = np.argmax(aic) - - #smooth CF - aicsmooth = np.zeros(len(aic)) - ismooth = round(self.Tsmooth / self.dt) - if len(aic) < ismooth: - print 'AICPicker: Tsmooth larger than AIC function!' - self.Pick = -1 - return self.Pick - else: - self.Pick = -1 - for i in range(1, len(aic)): - if i > ismooth: - ii1 = i - ismooth - aicsmooth[i] = aicsmooth[i - 1] + (aic[i] - aic[ii1]) / ismooth - else: - aicsmooth[i] = np.mean(aic[0:i]) - - #find common, local minimum in front of maximum - #of smoothed and unsmoothed AIC-CF + + #find minimum in front of maximum lpickwindow = int(round(self.PickWindow / self.dt)) for i in range(icfmax - 1, max([icfmax - lpickwindow, 2]), -1): - if aic[i - 1] * (1 + self.peps) >= aic[i]: - if aicsmooth[i - 1] * (1 + self.peps) >= aicsmooth[i]: - self.Pick = self.Tcf[i] - break - - #try again with larger peps if picking failed - if self.Pick < 0: - peps2 = self.peps + 0.01 - for i in range(icfmax - 1, max([icfmax - lpickwindow, 2]), -1): - if aic[i - 1] * (1 + peps2) >= aic[i]: - if aicsmooth[i - 1] * (1 + peps2) >= aicsmooth[i]: - self.Pick = self.Tcf[i] - break + if aic[i - 1] >= aic[i]: + self.Pick = self.Tcf[i] + break + if self.Pick == -1: + print 'AICPicker: Could not find minimum, picking window too short?' + + return self.Pick class PragPicker(AutoPicking): '''