Merge branch 'develop' of ariadne.geophysik.ruhr-uni-bochum.de:/data/git/pylot into develop

This commit is contained in:
Marcel Paffrath 2017-08-11 10:15:42 +02:00
commit 9b97937049

View File

@ -221,7 +221,7 @@ class AICPicker(AutoPicker):
if max(self.Data[0].data < 1e-3) and max(self.Data[0].data >= 1e-6): if max(self.Data[0].data < 1e-3) and max(self.Data[0].data >= 1e-6):
self.Data[0].data = self.Data[0].data * 1000000 self.Data[0].data = self.Data[0].data * 1000000
elif max(self.Data[0].data < 1e-6): elif max(self.Data[0].data < 1e-6):
self.Data[0].data = self.Data[0].data * 1e12 self.Data[0].data = self.Data[0].data * 1e13
# get signal window # get signal window
isignal = getsignalwin(self.Tcf, self.Pick, self.TSNR[2]) isignal = getsignalwin(self.Tcf, self.Pick, self.TSNR[2])
ii = min([isignal[len(isignal) - 1], len(self.Tcf)]) ii = min([isignal[len(isignal) - 1], len(self.Tcf)])
@ -242,13 +242,13 @@ class AICPicker(AutoPicker):
& (self.Tcf >= self.Pick)) & (self.Tcf >= self.Pick))
# find maximum within slope determination window # find maximum within slope determination window
# 'cause slope should be calculated up to first local minimum only! # 'cause slope should be calculated up to first local minimum only!
imax = np.argmax(self.Data[0].data[islope]) imax = np.argmax(self.Data[0].data[islope[0][0]:islope[0][len(islope[0])-1]])
iislope = islope[0][0:imax+1] iislope = islope[0][0:imax+1]
if len(iislope) <= 2: if len(iislope) <= 2:
# calculate slope from initial onset to maximum of AIC function # calculate slope from initial onset to maximum of AIC function
print("AICPicker: Not enough data samples left for slope calculation!") print("AICPicker: Not enough data samples left for slope calculation!")
print("Calculating slope from initial onset to maximum of AIC function ...") print("Calculating slope from initial onset to maximum of AIC function ...")
imax = np.argmax(aicsmooth[islope]) imax = np.argmax(aicsmooth[islope[0][0]:islope[0][len(islope[0])-1]])
if imax == 0: if imax == 0:
print("AICPicker: Maximum for slope determination right at the beginning of the window!") print("AICPicker: Maximum for slope determination right at the beginning of the window!")
print("Choose longer slope determination window!") print("Choose longer slope determination window!")
@ -280,7 +280,7 @@ class AICPicker(AutoPicker):
if datafit[0] >= datafit[len(datafit) - 1]: if datafit[0] >= datafit[len(datafit) - 1]:
print('AICPicker: Negative slope, bad onset skipped!') print('AICPicker: Negative slope, bad onset skipped!')
return return
self.slope = 1 / len(dataslope) * (datafit[len(dataslope) - 1] - datafit[0]) self.slope = 1 / (len(dataslope) * self.Data[0].stats.delta) * (datafit[len(dataslope) - 1] - datafit[0])
else: else:
self.SNR = None self.SNR = None
@ -294,6 +294,8 @@ class AICPicker(AutoPicker):
fig = self.fig fig = self.fig
ax1 = fig.add_subplot(211) ax1 = fig.add_subplot(211)
x = self.Data[0].data x = self.Data[0].data
if len(self.Tcf) > len(self.Data[0].data): # why? LK
self.Tcf = self.Tcf[0:len(self.Tcf)-1]
ax1.plot(self.Tcf, x / max(x), 'k', label='(HOS-/AR-) Data') ax1.plot(self.Tcf, x / max(x), 'k', label='(HOS-/AR-) Data')
ax1.plot(self.Tcf, aicsmooth / max(aicsmooth), 'r', label='Smoothed AIC-CF') ax1.plot(self.Tcf, aicsmooth / max(aicsmooth), 'r', label='Smoothed AIC-CF')
if self.Pick is not None: if self.Pick is not None:
@ -388,7 +390,8 @@ class PragPicker(AutoPicker):
ipick1 = np.argmin(abs(self.Tcf - self.getpick1())) ipick1 = np.argmin(abs(self.Tcf - self.getpick1()))
cfpick1 = 2 * self.cf[ipick1] cfpick1 = 2 * self.cf[ipick1]
# check trend of CF, i.e. differences of CF and adjust aus regarding this trend # check trend of CF, i.e. differences of CF and adjust aus ("artificial uplift
# of picks") regarding this trend
# prominent trend: decrease aus # prominent trend: decrease aus
# flat: use given aus # flat: use given aus
cfdiff = np.diff(cfipick) cfdiff = np.diff(cfipick)
@ -414,15 +417,20 @@ class PragPicker(AutoPicker):
break break
# now we look to the left # now we look to the left
for i in range(ipick1, max([ipick1 - lpickwindow + 1, 2]), -1): if len(self.cf) > ipick1 +1:
if self.cf[i + 1] > self.cf[i] and self.cf[i - 1] >= self.cf[i]: for i in range(ipick1, max([ipick1 - lpickwindow + 1, 2]), -1):
if cfsmooth[i - 1] * (1 + aus1) >= cfsmooth[i]: if self.cf[i + 1] > self.cf[i] and self.cf[i - 1] >= self.cf[i]:
if cfpick1 >= self.cf[i]: if cfsmooth[i - 1] * (1 + aus1) >= cfsmooth[i]:
pick_l = self.Tcf[i] if cfpick1 >= self.cf[i]:
self.Pick = pick_l pick_l = self.Tcf[i]
flagpick_r = 1 self.Pick = pick_l
cfpick_l = self.cf[i] flagpick_r = 1
break cfpick_l = self.cf[i]
break
else:
msg ='PragPicker: Initial onset too close to start of CF! \
Stop finalizing pick to the left.'
print(msg)
# now decide which pick: left or right? # now decide which pick: left or right?
if flagpick_l > 0 and flagpick_r > 0 and cfpick_l <= 3 * cfpick_r: if flagpick_l > 0 and flagpick_r > 0 and cfpick_l <= 3 * cfpick_r:
@ -435,7 +443,7 @@ class PragPicker(AutoPicker):
self.Pick = pick_l self.Pick = pick_l
pickflag = 1 pickflag = 1
else: else:
print('PragPicker: Could not find reliable onset!') print("PragPicker: Could not find reliable onset!")
self.Pick = None self.Pick = None
pickflag = 0 pickflag = 0
@ -461,6 +469,6 @@ class PragPicker(AutoPicker):
return return
else: else:
print('PragPicker: No initial onset time given! Check input!') print("PragPicker: No initial onset time given! Check input!")
self.Pick = None self.Pick = None
return return