WIP: figure generating in threads partly working
This commit is contained in:
parent
f58d17be14
commit
184983bc87
37
QtPyLoT.py
37
QtPyLoT.py
@ -1150,24 +1150,35 @@ class MainWindow(QMainWindow):
|
||||
self.listWidget.scrollToBottom()
|
||||
|
||||
def tune_autopicker(self):
|
||||
self.fig_dict = {
|
||||
'mainFig':,
|
||||
'aicFig':,
|
||||
'slength':,
|
||||
'checkZ4s':,
|
||||
'refPpick':,
|
||||
'el_Ppick':,
|
||||
'fm_picker':,
|
||||
'el_S1pick':,
|
||||
'el_S2pick':,
|
||||
'refSpick':,
|
||||
self.fig_dict = {}
|
||||
self.canvas_dict = {}
|
||||
self.fig_keys = [
|
||||
'mainFig',
|
||||
'aicFig',
|
||||
'slength',
|
||||
'checkZ4s',
|
||||
'refPpick',
|
||||
'el_Ppick',
|
||||
'fm_picker',
|
||||
'el_S1pick',
|
||||
'el_S2pick',
|
||||
'refSpick',
|
||||
'aicARHfig',
|
||||
}
|
||||
]
|
||||
for key in self.fig_keys:
|
||||
fig = Figure()
|
||||
self.fig_dict[key] = fig
|
||||
|
||||
ap = self._inputs
|
||||
if not self.tap:
|
||||
self.tap = TuneAutopicker(ap, self.fig_dict, self)
|
||||
self.tap.show()
|
||||
self.tap.update.connect(self.update_autopicker)
|
||||
self.tap.show()
|
||||
|
||||
def update_autopicker(self):
|
||||
for key in self.fig_dict.keys():
|
||||
self.canvas_dict[key] = FigureCanvas(self.fig_dict[key])
|
||||
self.tap.fill_tabs(self.canvas_dict)
|
||||
|
||||
def autoPick(self):
|
||||
self.autosave = QFileDialog().getExistingDirectory(caption='Select autoPyLoT output')
|
||||
|
19
autoPyLoT.py
19
autoPyLoT.py
@ -29,7 +29,7 @@ from pylot.core.util.version import get_git_version as _getVersionString
|
||||
__version__ = _getVersionString()
|
||||
|
||||
|
||||
def autoPyLoT(parameter=None, inputfile=None, fnames=None, savepath=None, iplot=0, fig_dict=None):
|
||||
def autoPyLoT(input_dict=None, parameter=None, inputfile=None, fnames=None, savepath=None, iplot=0):
|
||||
"""
|
||||
Determine phase onsets automatically utilizing the automatic picking
|
||||
algorithms by Kueperkoch et al. 2010/2012.
|
||||
@ -55,6 +55,16 @@ def autoPyLoT(parameter=None, inputfile=None, fnames=None, savepath=None, iplot=
|
||||
***********************************'''.format(version=_getVersionString())
|
||||
print(splash)
|
||||
|
||||
if input_dict:
|
||||
if input_dict.has_key('parameter'):
|
||||
parameter = input_dict['parameter']
|
||||
if input_dict.has_key('fig_dict'):
|
||||
fig_dict = input_dict['fig_dict']
|
||||
if input_dict.has_key('fnames'):
|
||||
fnames = input_dict['fnames']
|
||||
if input_dict.has_key('iplot'):
|
||||
iplot = input_dict['iplot']
|
||||
|
||||
if not parameter:
|
||||
if inputfile:
|
||||
parameter = AutoPickParameter(inputfile)
|
||||
@ -166,7 +176,7 @@ def autoPyLoT(parameter=None, inputfile=None, fnames=None, savepath=None, iplot=
|
||||
print(data)
|
||||
##########################################################
|
||||
# !automated picking starts here!
|
||||
picks, mainFig = autopickevent(wfdat, parameter, iplot=iplot, fig_dict=fig_dict)
|
||||
picks = autopickevent(wfdat, parameter, iplot=iplot, fig_dict=fig_dict)
|
||||
##########################################################
|
||||
# locating
|
||||
if locflag == 1:
|
||||
@ -317,7 +327,7 @@ def autoPyLoT(parameter=None, inputfile=None, fnames=None, savepath=None, iplot=
|
||||
The Python picking and Location Tool\n
|
||||
************************************'''.format(version=_getVersionString())
|
||||
print(endsp)
|
||||
return picks, mainFig
|
||||
return picks
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
@ -344,4 +354,5 @@ if __name__ == "__main__":
|
||||
|
||||
cla = parser.parse_args()
|
||||
|
||||
picks, mainFig = autoPyLoT(str(cla.inputfile), str(cla.fnames), str(cla.spath))
|
||||
picks, mainFig = autoPyLoT(inputfile=str(cla.inputfile),
|
||||
fnames=str(cla.fnames), savepath=str(cla.spath))
|
||||
|
@ -1 +1 @@
|
||||
d135-dirty
|
||||
f58d1-dirty
|
||||
|
@ -74,7 +74,7 @@ def call_autopickstation(input_tuple):
|
||||
return autopickstation(wfstream, pickparam, verbose, iplot=0)
|
||||
|
||||
|
||||
def autopickstation(wfstream, pickparam, verbose=False, iplot=0):
|
||||
def autopickstation(wfstream, pickparam, verbose=False, iplot=0, fig_dict=None):
|
||||
"""
|
||||
:param wfstream: `~obspy.core.stream.Stream` containing waveform
|
||||
:type wfstream: obspy.core.stream.Stream
|
||||
@ -233,7 +233,7 @@ def autopickstation(wfstream, pickparam, verbose=False, iplot=0):
|
||||
# get prelimenary onset time from AIC-HOS-CF using subclass AICPicker
|
||||
# of class AutoPicking
|
||||
key = 'aicFig'
|
||||
aicpick = AICPicker(aiccf, tsnrz, pickwinP, iplot, None, tsmoothP, fig_dict[key])
|
||||
aicpick = AICPicker(aiccf, tsnrz, pickwinP, iplot, None, tsmoothP, fig=fig_dict[key])
|
||||
##############################################################
|
||||
if aicpick.getpick() is not None:
|
||||
# check signal length to detect spuriously picked noise peaks
|
||||
@ -266,7 +266,7 @@ def autopickstation(wfstream, pickparam, verbose=False, iplot=0):
|
||||
trH2_filt.taper(max_percentage=0.05, type='hann')
|
||||
zne += trH1_filt
|
||||
zne += trH2_filt
|
||||
key = 'slenght'
|
||||
key = 'slength'
|
||||
Pflag = checksignallength(zne, aicpick.getpick(), tsnrz,
|
||||
minsiglength,
|
||||
nfacsl, minpercent, iplot,
|
||||
@ -281,7 +281,7 @@ def autopickstation(wfstream, pickparam, verbose=False, iplot=0):
|
||||
if verbose: print(msg)
|
||||
else:
|
||||
if iplot>1:
|
||||
key = 'checkZ4S'
|
||||
key = 'checkZ4s'
|
||||
Pflag = checkZ4S(zne, aicpick.getpick(), zfac,
|
||||
tsnrz[3], iplot, fig_dict[key])
|
||||
if Pflag == 0:
|
||||
|
@ -73,6 +73,7 @@ class AutoPicker(object):
|
||||
self.setTsmooth(Tsmooth)
|
||||
self.setpick1(Pick1)
|
||||
self.fig = fig
|
||||
self.calcPick()
|
||||
|
||||
def __str__(self):
|
||||
return '''\n\t{name} object:\n
|
||||
|
@ -129,12 +129,12 @@ def earllatepicker(X, nfac, TSNR, Pick1, iplot=None, stealth_mode=False, fig=Non
|
||||
ax.legend()
|
||||
|
||||
if iplot:
|
||||
return EPick, LPick, PickError, fig
|
||||
return EPick, LPick, PickError
|
||||
else:
|
||||
return EPick, LPick, PickError
|
||||
|
||||
|
||||
def fmpicker(Xraw, Xfilt, pickwin, Pick, iplot=None, fig_dict):
|
||||
def fmpicker(Xraw, Xfilt, pickwin, Pick, iplot=None, fig=None):
|
||||
'''
|
||||
Function to derive first motion (polarity) of given phase onset Pick.
|
||||
Calculation is based on zero crossings determined within time window pickwin
|
||||
@ -279,7 +279,8 @@ def fmpicker(Xraw, Xfilt, pickwin, Pick, iplot=None, fig_dict):
|
||||
print ("fmpicker: Found polarity %s" % FM)
|
||||
|
||||
if iplot > 1:
|
||||
fig = plt.figure()#iplot)
|
||||
if not fig:
|
||||
fig = plt.figure()#iplot)
|
||||
ax1 = fig.add_subplot(211)
|
||||
ax1.plot(t, xraw, 'k')
|
||||
ax1.plot([Pick, Pick], [max(xraw), -max(xraw)], 'b', linewidth=2, label='Pick')
|
||||
@ -307,7 +308,7 @@ def fmpicker(Xraw, Xfilt, pickwin, Pick, iplot=None, fig_dict):
|
||||
ax2.set_yticks([])
|
||||
|
||||
if iplot:
|
||||
return FM, fig
|
||||
return FM
|
||||
else:
|
||||
return FM
|
||||
|
||||
@ -621,7 +622,7 @@ def wadaticheck(pickdic, dttolerance, iplot):
|
||||
return checkedonsets
|
||||
|
||||
|
||||
def checksignallength(X, pick, TSNR, minsiglength, nfac, minpercent, iplot=0, fig_dict=None):
|
||||
def checksignallength(X, pick, TSNR, minsiglength, nfac, minpercent, iplot=0, fig=None):
|
||||
'''
|
||||
Function to detect spuriously picked noise peaks.
|
||||
Uses RMS trace of all 3 components (if available) to determine,
|
||||
@ -693,7 +694,8 @@ def checksignallength(X, pick, TSNR, minsiglength, nfac, minpercent, iplot=0, fi
|
||||
returnflag = 0
|
||||
|
||||
if iplot == 2:
|
||||
fig = plt.figure()#iplot)
|
||||
if not fig:
|
||||
fig = plt.figure()#iplot)
|
||||
ax = fig.add_subplot(111)
|
||||
ax.plot(t, rms, 'k', label='RMS Data')
|
||||
ax.plot(t[inoise], rms[inoise], 'c', label='RMS Noise Window')
|
||||
@ -707,7 +709,7 @@ def checksignallength(X, pick, TSNR, minsiglength, nfac, minpercent, iplot=0, fi
|
||||
ax.set_title('Check for Signal Length, Station %s' % X[0].stats.station)
|
||||
ax.set_yticks([])
|
||||
|
||||
return returnflag, fig
|
||||
return returnflag
|
||||
|
||||
|
||||
def checkPonsets(pickdic, dttolerance, iplot):
|
||||
@ -869,7 +871,7 @@ def jackknife(X, phi, h):
|
||||
return PHI_jack, PHI_pseudo, PHI_sub
|
||||
|
||||
|
||||
def checkZ4S(X, pick, zfac, checkwin, iplot):
|
||||
def checkZ4S(X, pick, zfac, checkwin, iplot, fig=None):
|
||||
'''
|
||||
Function to compare energy content of vertical trace with
|
||||
energy content of horizontal traces to detect spuriously
|
||||
@ -963,7 +965,8 @@ def checkZ4S(X, pick, zfac, checkwin, iplot):
|
||||
edat[0].stats.delta)
|
||||
tn = np.arange(0, ndat[0].stats.npts / ndat[0].stats.sampling_rate,
|
||||
ndat[0].stats.delta)
|
||||
fig = plt.figure()
|
||||
if not fig:
|
||||
fig = plt.figure()
|
||||
ax = fig.add_subplot(111)
|
||||
ax.plot(tz, z / max(z), 'k')
|
||||
ax.plot(tz[isignal], z[isignal] / max(z), 'r')
|
||||
@ -981,7 +984,7 @@ def checkZ4S(X, pick, zfac, checkwin, iplot):
|
||||
ax.set_title('CheckZ4S, Station %s' % zdat[0].stats.station)
|
||||
ax.legend()
|
||||
|
||||
return returnflag, fig
|
||||
return returnflag
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
@ -1271,11 +1271,13 @@ class PickDlg(QDialog):
|
||||
|
||||
|
||||
class TuneAutopicker(QWidget):
|
||||
update = QtCore.Signal(str)
|
||||
|
||||
def __init__(self, ap, fig_dict, parent=None):
|
||||
QtGui.QWidget.__init__(self, parent, 1)
|
||||
self.ap = ap
|
||||
self.parent = parent
|
||||
self.station = 'AH11' ############# justs for testing
|
||||
self.station = 'TMO53' ############# justs for testing
|
||||
self.fig_dict = fig_dict
|
||||
self.layout = QtGui.QHBoxLayout()
|
||||
self.parameter_layout = QtGui.QVBoxLayout()
|
||||
@ -1293,8 +1295,8 @@ class TuneAutopicker(QWidget):
|
||||
self.p_tabs = QtGui.QTabWidget()
|
||||
self.s_tabs = QtGui.QTabWidget()
|
||||
self.layout.insertWidget(0, self.main_tabs)
|
||||
self.init_tab_names()
|
||||
self.fill_tabs()
|
||||
#self.init_tab_names()
|
||||
#self.fill_tabs(None)
|
||||
|
||||
def add_parameter(self):
|
||||
self.parameters = AutoPickParaBox(self.ap)
|
||||
@ -1307,13 +1309,22 @@ class TuneAutopicker(QWidget):
|
||||
self.parameter_layout.addWidget(self.pick_button)
|
||||
|
||||
def call_picker(self):
|
||||
self.pb_thread = Thread(self, self._hover, arg=None, progressText='Picking trace...')
|
||||
self.pb_thread.start()
|
||||
self.ap = self.update_params()
|
||||
picks = autoPyLoT(self.ap, fnames='None', iplot=2, self.fig_dict)
|
||||
args = {'parameter': self.ap,
|
||||
'fnames': 'None',
|
||||
'iplot': 2,
|
||||
'fig_dict': self.fig_dict}
|
||||
self.ap_thread = Thread(self, autoPyLoT, arg=args, progressText='Picking trace...')
|
||||
self.ap_thread.finished.connect(self.finish_picker)
|
||||
self.ap_thread.start()
|
||||
#picks = autoPyLoT(self.ap, fnames='None', iplot=2, fig_dict=self.fig_dict)
|
||||
|
||||
def finish_picker(self):
|
||||
self.picks = self.ap_thread.data
|
||||
self.main_tabs.setParent(None)
|
||||
self.init_figure_tabs()
|
||||
self.set_stretch()
|
||||
self.update.emit('Update')
|
||||
|
||||
def update_params(self):
|
||||
ap = self.parameters.update_params()
|
||||
@ -1329,37 +1340,35 @@ class TuneAutopicker(QWidget):
|
||||
self.ptb_names = ['aicFig', 'slenght', 'checkZ4S', 'refPpick', 'el_Ppick', 'fm_picker']
|
||||
self.stb_names = ['aicARHfig', 'refSpick', 'el_S1pick', 'el_S2pick']
|
||||
|
||||
def fill_tabs(self):
|
||||
def fill_tabs(self, canvas_dict):
|
||||
try:
|
||||
main_fig = self.fd['mainFig']
|
||||
self.main_tabs.addTab(main_fig.canvas, 'Overview')
|
||||
self.main_tabs.addTab(canvas_dict['mainFig'], 'Overview')
|
||||
except Exception as e:
|
||||
self.main_tabs.addTab(QtGui.QWidget(), 'Overview')
|
||||
self.main_tabs.addTab(self.p_tabs, 'P')
|
||||
self.main_tabs.addTab(self.s_tabs, 'S')
|
||||
self.fill_p_tabs()
|
||||
self.fill_s_tabs()
|
||||
self.fill_p_tabs(canvas_dict)
|
||||
self.fill_s_tabs(canvas_dict)
|
||||
try:
|
||||
main_fig.tight_layout()
|
||||
except:
|
||||
pass
|
||||
|
||||
def fill_p_tabs(self):
|
||||
def fill_p_tabs(self, canvas_dict):
|
||||
for name in self.ptb_names:
|
||||
try:
|
||||
figure = self.fd[name]
|
||||
id = self.p_tabs.addTab(figure.canvas, name)
|
||||
id = self.p_tabs.addTab(canvas_dict[name], name)
|
||||
self.p_tabs.setTabEnabled(id, True)
|
||||
figure.tight_layout()
|
||||
except Exception as e:
|
||||
id = self.p_tabs.addTab(QtGui.QWidget(), name)
|
||||
self.p_tabs.setTabEnabled(id, False)
|
||||
|
||||
def fill_s_tabs(self):
|
||||
def fill_s_tabs(self, canvas_dict):
|
||||
for name in self.stb_names:
|
||||
try:
|
||||
figure = self.fd[name]
|
||||
id = self.s_tabs.addTab(figure.canvas, name)
|
||||
figure = self.fig_dict[name]
|
||||
id = self.s_tabs.addTab(canvas_dict[name], name)
|
||||
self.s_tabs.setTabEnabled(id, True)
|
||||
figure.tight_layout()
|
||||
except Exception as e:
|
||||
|
Loading…
Reference in New Issue
Block a user