[cleanup] code cleanup in autopick.py using code inspection

This commit is contained in:
Darius Arnold 2017-10-05 16:07:29 +02:00
parent 6f65789844
commit 5931331b1d

View File

@ -11,8 +11,6 @@ function conglomerate utils.
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
import numpy as np import numpy as np
from pylot.core.io.data import Data
from pylot.core.io.inputs import PylotParameter
from pylot.core.pick.charfuns import CharacteristicFunction from pylot.core.pick.charfuns import CharacteristicFunction
from pylot.core.pick.charfuns import HOScf, AICcf, ARZcf, ARHcf, AR3Ccf from pylot.core.pick.charfuns import HOScf, AICcf, ARZcf, ARHcf, AR3Ccf
from pylot.core.pick.picker import AICPicker, PragPicker from pylot.core.pick.picker import AICPicker, PragPicker
@ -51,12 +49,11 @@ def autopickevent(data, param, iplot=0, fig_dict=None, fig_dict_wadatijack=None,
input_tuples = [] input_tuples = []
try: try:
iplot = int(iplot) iplot = int(iplot)
except: except ValueError:
if iplot == True or iplot == 'True': if iplot is True or iplot == 'True':
iplot = 2 iplot = 2
else: else:
iplot = 0 iplot = 0
# get some parameters for quality control from # get some parameters for quality control from
# parameter input file (usually pylot.in). # parameter input file (usually pylot.in).
@ -74,7 +71,7 @@ def autopickevent(data, param, iplot=0, fig_dict=None, fig_dict_wadatijack=None,
for station in stations: for station in stations:
topick = data.select(station=station) topick = data.select(station=station)
if iplot == None or iplot == 'None' or iplot == 0: if iplot is None or iplot == 'None' or iplot == 0:
input_tuples.append((topick, param, apverbose, metadata, origin)) input_tuples.append((topick, param, apverbose, metadata, origin))
if iplot > 0: if iplot > 0:
all_onsets[station] = autopickstation(topick, param, verbose=apverbose, all_onsets[station] = autopickstation(topick, param, verbose=apverbose,
@ -101,12 +98,9 @@ def autopickevent(data, param, iplot=0, fig_dict=None, fig_dict_wadatijack=None,
pick.pop('station') pick.pop('station')
all_onsets[station] = pick all_onsets[station] = pick
#return all_onsets
# quality control # quality control
# median check and jackknife on P-onset times # median check and jackknife on P-onset times
jk_checked_onsets = checkPonsets(all_onsets, mdttolerance, jackfactor, 1, fig_dict_wadatijack) jk_checked_onsets = checkPonsets(all_onsets, mdttolerance, jackfactor, 1, fig_dict_wadatijack)
#return jk_checked_onsets
# check S-P times (Wadati) # check S-P times (Wadati)
wadationsets = wadaticheck(jk_checked_onsets, wdttolerance, 1, fig_dict_wadatijack) wadationsets = wadaticheck(jk_checked_onsets, wdttolerance, 1, fig_dict_wadatijack)
return wadationsets return wadationsets
@ -274,7 +268,7 @@ def autopickstation(wfstream, pickparam, verbose=False,
if verbose: print(msg) if verbose: print(msg)
z_copy = zdat.copy() z_copy = zdat.copy()
tr_filt = zdat[0].copy() tr_filt = zdat[0].copy()
#remove constant offset from data to avoid unwanted filter response # remove constant offset from data to avoid unwanted filter response
tr_filt.detrend(type='demean') tr_filt.detrend(type='demean')
# filter and taper data # filter and taper data
tr_filt.filter('bandpass', freqmin=bpz1[0], freqmax=bpz1[1], tr_filt.filter('bandpass', freqmin=bpz1[0], freqmax=bpz1[1],
@ -286,7 +280,7 @@ def autopickstation(wfstream, pickparam, verbose=False,
# for global seismology: use tau-p method for estimating travel times (needs source and station coords.) # for global seismology: use tau-p method for estimating travel times (needs source and station coords.)
# if not given: sets Lc to infinity to use full stream # if not given: sets Lc to infinity to use full stream
if use_taup == True: if use_taup is True:
Lc = np.inf Lc = np.inf
print('autopickstation: use_taup flag active.') print('autopickstation: use_taup flag active.')
if not metadata[1]: if not metadata[1]:
@ -311,8 +305,8 @@ def autopickstation(wfstream, pickparam, verbose=False,
phases[identifyPhaseID(arr.phase.name)].append(arr) phases[identifyPhaseID(arr.phase.name)].append(arr)
# get first P and S onsets from arrivals list # get first P and S onsets from arrivals list
arrP, estFirstP = min([(arr, arr.time) for arr in phases['P']], key = lambda t: t[1]) arrP, estFirstP = min([(arr, arr.time) for arr in phases['P']], key=lambda t: t[1])
arrS, estFirstS = min([(arr, arr.time) for arr in phases['S']], key = lambda t: t[1]) arrS, estFirstS = min([(arr, arr.time) for arr in phases['S']], key=lambda t: t[1])
print('autopick: estimated first arrivals for P: {} s, S:{} s after event' print('autopick: estimated first arrivals for P: {} s, S:{} s after event'
' origin time using TauPy'.format(estFirstP, estFirstS)) ' origin time using TauPy'.format(estFirstP, estFirstS))
@ -328,7 +322,7 @@ def autopickstation(wfstream, pickparam, verbose=False,
pstart = max(pstart, 0) pstart = max(pstart, 0)
pstop = min(pstop, len(zdat[0])*zdat[0].stats.delta) pstop = min(pstop, len(zdat[0])*zdat[0].stats.delta)
if not use_taup == True or origin: if not use_taup is True or origin:
Lc = pstop - pstart Lc = pstop - pstart
Lwf = zdat[0].stats.endtime - zdat[0].stats.starttime Lwf = zdat[0].stats.endtime - zdat[0].stats.starttime
@ -463,8 +457,7 @@ def autopickstation(wfstream, pickparam, verbose=False,
slope = aicpick.getSlope() slope = aicpick.getSlope()
if not slope: if not slope:
slope = 0 slope = 0
if (slope >= minAICPslope and if slope >= minAICPslope and aicpick.getSNR() >= minAICPSNR and Pflag == 1:
aicpick.getSNR() >= minAICPSNR and Pflag == 1):
aicPflag = 1 aicPflag = 1
msg = 'AIC P-pick passes quality control: Slope: {0} counts/s, ' \ msg = 'AIC P-pick passes quality control: Slope: {0} counts/s, ' \
'SNR: {1}\nGo on with refined picking ...\n' \ 'SNR: {1}\nGo on with refined picking ...\n' \
@ -533,7 +526,7 @@ def autopickstation(wfstream, pickparam, verbose=False,
[SNRP, SNRPdB, Pnoiselevel] = getSNR(z_copy, tsnrz, mpickP) [SNRP, SNRPdB, Pnoiselevel] = getSNR(z_copy, tsnrz, mpickP)
# weight P-onset using symmetric error # weight P-onset using symmetric error
if Perror == None: if Perror is None:
Pweight = 4 Pweight = 4
else: else:
if Perror <= timeerrorsP[0]: if Perror <= timeerrorsP[0]:
@ -588,8 +581,7 @@ def autopickstation(wfstream, pickparam, verbose=False,
print('autopickstation: No vertical component data available!, ' print('autopickstation: No vertical component data available!, '
'Skipping station!') 'Skipping station!')
if ((len(edat) > 0 and len(ndat) == 0) or ( if ((len(edat) > 0 and len(ndat) == 0) or (len(ndat) > 0 and len(edat) == 0)) and Pweight < 4:
len(ndat) > 0 and len(edat) == 0)) and Pweight < 4:
msg = 'Go on picking S onset ...\n' \ msg = 'Go on picking S onset ...\n' \
'##################################################\n' \ '##################################################\n' \
'Only one horizontal component available!\n' \ 'Only one horizontal component available!\n' \
@ -609,7 +601,7 @@ def autopickstation(wfstream, pickparam, verbose=False,
if pickSonset: if pickSonset:
# determine time window for calculating CF after P onset # determine time window for calculating CF after P onset
cuttimesh = [ cuttimesh = [
round(max([mpickP + sstart, 0])), # MP MP relative time axis round(max([mpickP + sstart, 0])), # MP MP relative time axis
round(min([ round(min([
mpickP + sstop, mpickP + sstop,
edat[0].stats.endtime-edat[0].stats.starttime, edat[0].stats.endtime-edat[0].stats.starttime,
@ -628,7 +620,6 @@ def autopickstation(wfstream, pickparam, verbose=False,
'traces ...'.format(edat[0].stats.station) 'traces ...'.format(edat[0].stats.station)
if verbose: print(msg) if verbose: print(msg)
if algoS == 'ARH': if algoS == 'ARH':
# re-create stream object including both horizontal components # re-create stream object including both horizontal components
hdat = edat.copy() hdat = edat.copy()
@ -709,8 +700,7 @@ def autopickstation(wfstream, pickparam, verbose=False,
if not slope: if not slope:
slope = 0 slope = 0
if (slope >= minAICSslope and if (slope >= minAICSslope and
aicarhpick.getSNR() >= minAICSSNR and aicarhpick.getSNR() >= minAICSSNR and aicarhpick.getpick() is not None):
aicarhpick.getpick() is not None):
aicSflag = 1 aicSflag = 1
msg = 'AIC S-pick passes quality control: Slope: {0} counts/s, ' \ msg = 'AIC S-pick passes quality control: Slope: {0} counts/s, ' \
'SNR: {1}\nGo on with refined picking ...\n' \ 'SNR: {1}\nGo on with refined picking ...\n' \
@ -904,16 +894,16 @@ def autopickstation(wfstream, pickparam, verbose=False,
############################################################## ##############################################################
try: try:
iplot = int(iplot) iplot = int(iplot)
except: except ValueError:
if iplot == True or iplot == 'True': if iplot is True or iplot == 'True':
iplot = 2 iplot = 2
else: else:
iplot = 0 iplot = 0
if iplot > 0: if iplot > 0:
# plot vertical trace # plot vertical trace
if fig_dict == None or fig_dict == 'None': if fig_dict is None or fig_dict == 'None':
fig = plt.figure() fig = plt.figure()
plt_flag = 1 plt_flag = 1
linecolor = 'k' linecolor = 'k'
@ -1072,8 +1062,10 @@ def autopickstation(wfstream, pickparam, verbose=False,
ax3.set_title(trH2_filt.stats.channel) ax3.set_title(trH2_filt.stats.channel)
if plt_flag == 1: if plt_flag == 1:
fig.show() fig.show()
try: input() try:
except SyntaxError: pass input()
except SyntaxError:
pass
plt.close(fig) plt.close(fig)
########################################################################## ##########################################################################
# calculate "real" onset times # calculate "real" onset times
@ -1189,8 +1181,7 @@ def iteratepicker(wf, NLLocfile, picks, badpicks, pickparameter, fig_dict=None):
print("iteratepicker: Small residuum, leave parameters unchanged for this phase!") print("iteratepicker: Small residuum, leave parameters unchanged for this phase!")
else: else:
pickparameter.setParam(pstart=pstart) pickparameter.setParam(pstart=pstart)
pickparameter.setParam(pstop=pickparameter.get('pstart') + \ pickparameter.setParam(pstop=pickparameter.get('pstart') + (pickparameter.get('Precalcwin')))
(pickparameter.get('Precalcwin')))
pickparameter.setParam(sstop=pickparameter.get('sstop') / 2) pickparameter.setParam(sstop=pickparameter.get('sstop') / 2)
pickparameter.setParam(pickwinP=pickparameter.get('pickwinP') / 2) pickparameter.setParam(pickwinP=pickparameter.get('pickwinP') / 2)
pickparameter.setParam(Precalcwin=pickparameter.get('Precalcwin') / 2) pickparameter.setParam(Precalcwin=pickparameter.get('Precalcwin') / 2)