working on connection between picks/autopicks of different tools [WIP], to do: fix array map number of picks/points mismatch in map

This commit is contained in:
Marcel Paffrath 2017-05-16 17:26:42 +02:00
parent ba58cb548b
commit 55bc0de036
4 changed files with 116 additions and 21 deletions

View File

@ -661,11 +661,13 @@ class MainWindow(QMainWindow):
self.refreshEvents() self.refreshEvents()
tabindex = self.tabs.currentIndex() tabindex = self.tabs.currentIndex()
def fill_eventbox(self, eventBox, select_events='all'): def fill_eventbox(self, eventBox=None, select_events='all'):
''' '''
:param: select_events, can be 'all', 'ref' :param: select_events, can be 'all', 'ref'
:type: str :type: str
''' '''
if not eventBox:
eventBox = self.eventBox
index=eventBox.currentIndex() index=eventBox.currentIndex()
tv=QtGui.QTableView() tv=QtGui.QTableView()
header = tv.horizontalHeader() header = tv.horizontalHeader()
@ -1149,6 +1151,7 @@ class MainWindow(QMainWindow):
self.setDirty(True) self.setDirty(True)
self.update_status('picks accepted ({0})'.format(station)) self.update_status('picks accepted ({0})'.format(station))
replot = self.addPicks(station, pickDlg.getPicks()) replot = self.addPicks(station, pickDlg.getPicks())
self.getCurrentEvent().setPick(station, pickDlg.getPicks())
if replot: if replot:
self.plotWaveformData() self.plotWaveformData()
self.drawPicks() self.drawPicks()
@ -1439,7 +1442,7 @@ class MainWindow(QMainWindow):
if not self.array_map: if not self.array_map:
return return
# refresh with new picks here!!! # refresh with new picks here!!!
self.array_map.refresh_drawings(self.picks) self.array_map.refresh_drawings(self.getCurrentEvent().getPicks())
self._eventChanged[1] = False self._eventChanged[1] = False
def init_event_table(self, tabindex=2): def init_event_table(self, tabindex=2):
@ -1836,9 +1839,9 @@ class Event(object):
''' '''
def __init__(self, path): def __init__(self, path):
self.path = path self.path = path
self.autopicks = None self.autopicks = {}
self.picks = None self.picks = {}
self.notes = None self.notes = ''
self._testEvent = False self._testEvent = False
self._refEvent = False self._refEvent = False
@ -1868,6 +1871,30 @@ class Event(object):
self._testEvent = bool self._testEvent = bool
if bool: self._refEvent = False if bool: self._refEvent = False
def setPick(self, station, pick):
self.picks[station] = pick
def setPicks(self, picks):
self.picks = picks
def getPick(self, station):
return self.picks[station]
def getPicks(self):
return self.picks
def setAutopick(self, station, autopick):
self.autopicks[station] = autopick
def setAutopicks(self, autopicks):
self.autopicks = autopicks
def getAutopick(self, station):
return self.autopicks[station]
def getAutopicks(self):
return self.autopicks
class getExistingDirectories(QFileDialog): class getExistingDirectories(QFileDialog):
def __init__(self, *args): def __init__(self, *args):

View File

@ -1 +1 @@
f436-dirty ba58-dirty

View File

@ -48,13 +48,13 @@ class map_projection(QtGui.QWidget):
pickDlg = PickDlg(self, parameter=self._parent._inputs, pickDlg = PickDlg(self, parameter=self._parent._inputs,
data=data.select(station=station), data=data.select(station=station),
station=station, station=station,
picks=self._parent.getPicksOnStation(station, 'manual'), picks=self._parent.getCurrentEvent().getPick(station),
autopicks=self._parent.getPicksOnStation(station, 'auto')) autopicks=self._parent.getCurrentEvent().getAutopick(station))
pyl_mw = self._parent pyl_mw = self._parent
if pickDlg.exec_(): if pickDlg.exec_():
pyl_mw.setDirty(True) pyl_mw.setDirty(True)
pyl_mw.update_status('picks accepted ({0})'.format(station)) pyl_mw.update_status('picks accepted ({0})'.format(station))
replot = pyl_mw.addPicks(station, pickDlg.getPicks()) replot = pyl_mw.getCurrentEvent().setPick(station, pickDlg.getPicks())
if replot: if replot:
pyl_mw.plotWaveformData() pyl_mw.plotWaveformData()
pyl_mw.drawPicks() pyl_mw.drawPicks()
@ -148,6 +148,7 @@ class map_projection(QtGui.QWidget):
def remove_nan_picks(picks): def remove_nan_picks(picks):
picks_no_nan=[] picks_no_nan=[]
for pick in picks: for pick in picks:
if pick:
if not np.isnan(pick): if not np.isnan(pick):
picks_no_nan.append(pick) picks_no_nan.append(pick)
return picks_no_nan return picks_no_nan

View File

@ -515,13 +515,14 @@ class WaveformWidget(FigureCanvas):
class PickDlg(QDialog): class PickDlg(QDialog):
update_picks = QtCore.Signal(dict)
def __init__(self, parent=None, data=None, station=None, picks=None, def __init__(self, parent=None, data=None, station=None, picks=None,
autopicks=None, rotate=False, parameter=None, buttons=True): autopicks=None, rotate=False, parameter=None, embedded=False):
super(PickDlg, self).__init__(parent) super(PickDlg, self).__init__(parent)
# initialize attributes # initialize attributes
self.parameter = parameter self.parameter = parameter
self._buttons = buttons self._embedded = embedded
self.station = station self.station = station
self.rotate = rotate self.rotate = rotate
self.components = 'ZNE' self.components = 'ZNE'
@ -531,12 +532,16 @@ class PickDlg(QDialog):
self._user = settings.value('user/Login', pylot_user) self._user = settings.value('user/Login', pylot_user)
if picks: if picks:
self.picks = picks self.picks = picks
self._init_picks = copy.deepcopy(picks)
else: else:
self.picks = {} self.picks = {}
self._init_picks = {}
if autopicks: if autopicks:
self.autopicks = autopicks self.autopicks = autopicks
self._init_autopicks = copy.deepcopy(autopicks)
else: else:
self.autopicks = {} self.autopicks = {}
self._init_autopicks = {}
self.filteroptions = FILTERDEFAULTS self.filteroptions = FILTERDEFAULTS
self.pick_block = False self.pick_block = False
@ -639,6 +644,11 @@ class PickDlg(QDialog):
self.p_button.setToolTip('Hotkey: "1"') self.p_button.setToolTip('Hotkey: "1"')
self.s_button.setToolTip('Hotkey: "2"') self.s_button.setToolTip('Hotkey: "2"')
# create accept/reject button
self.accept_button = QPushButton('&Accept Picks')
self.reject_button = QPushButton('&Reject Picks')
self.disable_ar_buttons()
# layout the outermost appearance of the Pick Dialog # layout the outermost appearance of the Pick Dialog
_outerlayout = QVBoxLayout() _outerlayout = QVBoxLayout()
_dialtoolbar = QToolBar() _dialtoolbar = QToolBar()
@ -652,6 +662,9 @@ class PickDlg(QDialog):
_dialtoolbar.addAction(self.resetZoomAction) _dialtoolbar.addAction(self.resetZoomAction)
_dialtoolbar.addSeparator() _dialtoolbar.addSeparator()
_dialtoolbar.addAction(self.resetPicksAction) _dialtoolbar.addAction(self.resetPicksAction)
if self._embedded:
_dialtoolbar.addWidget(self.accept_button)
_dialtoolbar.addWidget(self.reject_button)
# layout the innermost widget # layout the innermost widget
_innerlayout = QVBoxLayout() _innerlayout = QVBoxLayout()
@ -662,7 +675,7 @@ class PickDlg(QDialog):
QDialogButtonBox.Cancel) QDialogButtonBox.Cancel)
# merge widgets and layouts to establish the dialog # merge widgets and layouts to establish the dialog
if self._buttons: if not self._embedded:
_innerlayout.addWidget(_buttonbox) _innerlayout.addWidget(_buttonbox)
_outerlayout.addWidget(_dialtoolbar) _outerlayout.addWidget(_dialtoolbar)
_outerlayout.addLayout(_innerlayout) _outerlayout.addLayout(_innerlayout)
@ -671,6 +684,10 @@ class PickDlg(QDialog):
# object # object
self.p_button.clicked.connect(self.p_clicked) self.p_button.clicked.connect(self.p_clicked)
self.s_button.clicked.connect(self.s_clicked) self.s_button.clicked.connect(self.s_clicked)
self.accept_button.clicked.connect(self.accept)
self.reject_button.clicked.connect(self.reject)
self.accept_button.clicked.connect(self.disable_ar_buttons)
self.reject_button.clicked.connect(self.disable_ar_buttons)
_buttonbox.accepted.connect(self.accept) _buttonbox.accepted.connect(self.accept)
_buttonbox.rejected.connect(self.reject) _buttonbox.rejected.connect(self.reject)
@ -713,6 +730,13 @@ class PickDlg(QDialog):
widget = self.getPlotWidget() widget = self.getPlotWidget()
return widget.mpl_connect('button_release_event', slot) return widget.mpl_connect('button_release_event', slot)
def disable_ar_buttons(self):
self.enable_ar_buttons(False)
def enable_ar_buttons(self, bool=True):
self.accept_button.setEnabled(bool)
self.reject_button.setEnabled(bool)
def p_clicked(self): def p_clicked(self):
if self.p_button.isChecked(): if self.p_button.isChecked():
self.s_button.setEnabled(False) self.s_button.setEnabled(False)
@ -1073,6 +1097,7 @@ class PickDlg(QDialog):
olpp=olpp) olpp=olpp)
self.disconnectPressEvent() self.disconnectPressEvent()
self.enable_ar_buttons()
self.zoomAction.setEnabled(True) self.zoomAction.setEnabled(True)
self.pick_block = self.togglePickBlocker() self.pick_block = self.togglePickBlocker()
self.leave_picking_mode() self.leave_picking_mode()
@ -1110,6 +1135,7 @@ class PickDlg(QDialog):
if picktype == 'manual': if picktype == 'manual':
ax.fill_between([epp, lpp], ylims[0], ylims[1], ax.fill_between([epp, lpp], ylims[0], ylims[1],
alpha=.25, color=colors[0]) alpha=.25, color=colors[0])
if spe:
ax.plot([mpp - spe, mpp - spe], ylims, colors[1], ax.plot([mpp - spe, mpp - spe], ylims, colors[1],
[mpp, mpp], ylims, colors[2], [mpp, mpp], ylims, colors[2],
[mpp + spe, mpp + spe], ylims, colors[1]) [mpp + spe, mpp + spe], ylims, colors[1])
@ -1265,12 +1291,35 @@ class PickDlg(QDialog):
def apply(self): def apply(self):
picks = self.getPicks() picks = self.getPicks()
self.update_picks.emit(picks)
for pick in picks: for pick in picks:
print(pick, picks[pick]) print(pick, picks[pick])
def discard(self):
picks = self._init_picks
self.picks = picks
self.update_picks.emit(picks)
for pick in picks:
print(pick, picks[pick])
def reject(self):
self.discard()
if not self._embedded:
QDialog.reject(self)
else:
self.resetPlot()
self.qmb = QtGui.QMessageBox(QtGui.QMessageBox.Icon.Information,
'Denied', 'New picks rejected!')
self.qmb.show()
def accept(self): def accept(self):
self.apply() self.apply()
if not self._embedded:
QDialog.accept(self) QDialog.accept(self)
else:
self.qmb = QtGui.QMessageBox(QtGui.QMessageBox.Icon.Information,
'Accepted', 'New picks applied!')
self.qmb.show()
class TuneAutopicker(QWidget): class TuneAutopicker(QWidget):
@ -1285,6 +1334,7 @@ class TuneAutopicker(QWidget):
QtGui.QWidget.__init__(self, parent, 1) QtGui.QWidget.__init__(self, parent, 1)
self.parent = parent self.parent = parent
self.setParent(parent) self.setParent(parent)
self.setWindowTitle('PyLoT - Tune Autopicker')
self.parameter = parent._inputs self.parameter = parent._inputs
self.fig_dict = parent.fig_dict self.fig_dict = parent.fig_dict
self.data = Data() self.data = Data()
@ -1386,6 +1436,16 @@ class TuneAutopicker(QWidget):
def get_current_event_fp(self): def get_current_event_fp(self):
return self.eventBox.currentText() return self.eventBox.currentText()
def get_current_event_picks(self, station):
event = self.get_current_event()
if station in event.picks.keys():
return event.picks[station]
def get_current_event_autopicks(self, station):
event = self.get_current_event()
if event.autopicks:
return event.autopicks[station]
def get_current_station(self): def get_current_station(self):
return str(self.stationBox.currentText()) return str(self.stationBox.currentText())
@ -1402,14 +1462,21 @@ class TuneAutopicker(QWidget):
data = self.data.getWFData() data = self.data.getWFData()
pickDlg = PickDlg(self, data=data.select(station=station), pickDlg = PickDlg(self, data=data.select(station=station),
station=station, parameter=self.parameter, station=station, parameter=self.parameter,
picks=self.get_current_event().picks, picks=self.get_current_event_picks(station),
autopicks=self.get_current_event().autopicks, autopicks=self.get_current_event_autopicks(station),
buttons=False) embedded=True)
pickDlg.update_picks.connect(self.picks_from_pickdlg)
pickDlg.update_picks.connect(self.parent.fill_eventbox)
pickDlg.update_picks.connect(self.fill_eventbox)
self.pickDlg = QtGui.QWidget() self.pickDlg = QtGui.QWidget()
hl = QtGui.QHBoxLayout() hl = QtGui.QHBoxLayout()
self.pickDlg.setLayout(hl) self.pickDlg.setLayout(hl)
hl.addWidget(pickDlg) hl.addWidget(pickDlg)
def picks_from_pickdlg(self, picks=None):
station = self.get_current_station()
self.get_current_event().setPick(station, picks)
def fill_tabs(self, event=None, picked=False): def fill_tabs(self, event=None, picked=False):
self.clear_all() self.clear_all()
canvas_dict = self.parent.canvas_dict canvas_dict = self.parent.canvas_dict