[add] different phases can now be selected in picks_menu on pickDlg depending on phases set in preferences
This commit is contained in:
parent
a61eebba29
commit
3c0db3efa4
@ -1 +1 @@
|
||||
9b22-dirty
|
||||
a61e-dirty
|
||||
|
@ -807,6 +807,14 @@ class PickDlg(QDialog):
|
||||
self.cidscroll = self.connectScrollEvent(self.scrollZoom)
|
||||
|
||||
def setupUi(self):
|
||||
menuBar = QtGui.QMenuBar(self)
|
||||
exitMenu = menuBar.addMenu('File')
|
||||
|
||||
self.addPickPhases(menuBar)
|
||||
|
||||
exitAction = QtGui.QAction('Close', self)
|
||||
exitAction.triggered.connect(self.close)
|
||||
exitMenu.addAction(exitAction)
|
||||
|
||||
# create matplotlib toolbar to inherit functionality
|
||||
self.figToolBar = NavigationToolbar2QT(self.getPlotWidget(), self)
|
||||
@ -848,8 +856,8 @@ class PickDlg(QDialog):
|
||||
self.p_button.setCheckable(True)
|
||||
self.s_button.setCheckable(True)
|
||||
# set button tooltips
|
||||
self.p_button.setToolTip('Hotkey: "1"')
|
||||
self.s_button.setToolTip('Hotkey: "2"')
|
||||
# self.p_button.setToolTip('Hotkey: "1"')
|
||||
# self.s_button.setToolTip('Hotkey: "2"')
|
||||
|
||||
# create accept/reject button
|
||||
self.accept_button = QPushButton('&Accept Picks')
|
||||
@ -860,8 +868,8 @@ class PickDlg(QDialog):
|
||||
self._shortcut_space = QtGui.QShortcut(QtGui.QKeySequence(' '), self)
|
||||
self._shortcut_space.activated.connect(self.accept_button.clicked)
|
||||
# button shortcuts (1 for P-button, 2 for S-button)
|
||||
self.p_button.setShortcut(QKeySequence('1'))
|
||||
self.s_button.setShortcut(QKeySequence('2'))
|
||||
# self.p_button.setShortcut(QKeySequence('1'))
|
||||
# self.s_button.setShortcut(QKeySequence('2'))
|
||||
|
||||
# layout the outermost appearance of the Pick Dialog
|
||||
_outerlayout = QVBoxLayout()
|
||||
@ -893,8 +901,12 @@ class PickDlg(QDialog):
|
||||
# merge widgets and layouts to establish the dialog
|
||||
if not self._embedded:
|
||||
_innerlayout.addWidget(_buttonbox)
|
||||
_outerlayout.addWidget(menuBar)
|
||||
_outerlayout.addWidget(_dialtoolbar)
|
||||
_outerlayout.addLayout(_innerlayout)
|
||||
_outerlayout.setStretch(0, 0)
|
||||
_outerlayout.setStretch(1, 1)
|
||||
_outerlayout.setStretch(2, 100)
|
||||
|
||||
# connect widget element signals with slots (methods to the dialog
|
||||
# object
|
||||
@ -911,6 +923,48 @@ class PickDlg(QDialog):
|
||||
self.setLayout(_outerlayout)
|
||||
self.resize(1280, 720)
|
||||
|
||||
def addPickPhases(self, menuBar):
|
||||
settings = QtCore.QSettings()
|
||||
phases = {'P': settings.value('p_phases').split(','),
|
||||
'S': settings.value('s_phases').split(',')}
|
||||
if not 'P' in phases['P'] and not 'p' in phases['P']:
|
||||
phases['P'] = ['P'] + phases['P']
|
||||
if not 'S' in phases['S'] and not 's' in phases['S']:
|
||||
phases['S'] = ['S'] + phases['S']
|
||||
|
||||
picksMenu = menuBar.addMenu('Picks')
|
||||
self.picksActions = {}
|
||||
|
||||
# dictionary points on corresponding phase_select function
|
||||
phaseSelect = {'P': self.p_phase_select,
|
||||
'S': self.s_phase_select}
|
||||
|
||||
nHotkey = 4 # max hotkeys per phase
|
||||
hotkey = 1 # start hotkey
|
||||
|
||||
# loop over P and S (use explicit list instead of iter over dict.keys to keep order)
|
||||
for phaseIndex, phaseID in enumerate(['P', 'S']):
|
||||
# loop through phases in list
|
||||
for index, phase in enumerate(phases[phaseID]):
|
||||
# remove zeros
|
||||
phase = phase.strip()
|
||||
# add hotkeys
|
||||
if not index >= nHotkey:
|
||||
shortcut = str(hotkey)
|
||||
hotkey += 1
|
||||
else:
|
||||
shortcut = None
|
||||
# create action and add to menu
|
||||
# phase name transferred using lambda function
|
||||
slot = lambda phase=phase, phaseID=phaseID: phaseSelect[phaseID](phase)
|
||||
picksAction = createAction(parent=self, text=phase,
|
||||
slot=slot,
|
||||
shortcut=shortcut)
|
||||
picksMenu.addAction(picksAction)
|
||||
self.picksActions[str(phase)] = picksAction # save action in dictionary
|
||||
if phaseIndex == 0:
|
||||
picksMenu.addSeparator()
|
||||
|
||||
def disconnectPressEvent(self):
|
||||
widget = self.getPlotWidget()
|
||||
widget.mpl_disconnect(self.cidpress)
|
||||
@ -954,8 +1008,31 @@ class PickDlg(QDialog):
|
||||
self.accept_button.setEnabled(bool)
|
||||
self.reject_button.setEnabled(bool)
|
||||
|
||||
def p_phase_select(self, phase):
|
||||
if not self.p_button.isChecked():
|
||||
self.p_button.setChecked(True)
|
||||
self.p_button.setText(phase)
|
||||
else:
|
||||
if str(phase) == str(self.p_button.text()):
|
||||
self.reset_p_button()
|
||||
else:
|
||||
self.p_button.setText(phase)
|
||||
self.p_clicked()
|
||||
|
||||
def s_phase_select(self, phase):
|
||||
if not self.s_button.isChecked():
|
||||
self.s_button.setChecked(True)
|
||||
self.s_button.setText(phase)
|
||||
else:
|
||||
if str(phase) == str(self.s_button.text()):
|
||||
self.reset_s_button()
|
||||
else:
|
||||
self.s_button.setText(phase)
|
||||
self.s_clicked()
|
||||
|
||||
def p_clicked(self):
|
||||
if self.p_button.isChecked():
|
||||
self.reset_s_button()
|
||||
self.s_button.setEnabled(False)
|
||||
self.init_p_pick()
|
||||
else:
|
||||
@ -963,6 +1040,7 @@ class PickDlg(QDialog):
|
||||
|
||||
def s_clicked(self):
|
||||
if self.s_button.isChecked():
|
||||
self.reset_p_button()
|
||||
self.p_button.setEnabled(False)
|
||||
self.init_s_pick()
|
||||
else:
|
||||
@ -972,13 +1050,13 @@ class PickDlg(QDialog):
|
||||
self.set_button_color(self.p_button, 'yellow')
|
||||
self.updateCurrentLimits()
|
||||
self.activatePicking()
|
||||
self.currentPhase = 'P'
|
||||
self.currentPhase = str(self.p_button.text())
|
||||
|
||||
def init_s_pick(self):
|
||||
self.set_button_color(self.s_button, 'yellow')
|
||||
self.updateCurrentLimits()
|
||||
self.activatePicking()
|
||||
self.currentPhase = 'S'
|
||||
self.currentPhase = str(self.s_button.text())
|
||||
|
||||
def set_button_color(self, button, color = None):
|
||||
if type(color) == QtGui.QColor:
|
||||
@ -990,14 +1068,22 @@ class PickDlg(QDialog):
|
||||
elif type(color) == str or not color:
|
||||
button.setStyleSheet("background-color: {}".format(color))
|
||||
|
||||
def reset_p_button(self):
|
||||
self.set_button_color(self.p_button)
|
||||
self.p_button.setEnabled(True)
|
||||
self.p_button.setChecked(False)
|
||||
self.p_button.setText('P')
|
||||
|
||||
def reset_s_button(self):
|
||||
self.set_button_color(self.s_button)
|
||||
self.s_button.setEnabled(True)
|
||||
self.s_button.setChecked(False)
|
||||
self.s_button.setText('S')
|
||||
|
||||
def leave_picking_mode(self):
|
||||
self.currentPhase = None
|
||||
self.set_button_color(self.p_button)
|
||||
self.set_button_color(self.s_button)
|
||||
self.p_button.setEnabled(True)
|
||||
self.s_button.setEnabled(True)
|
||||
self.p_button.setChecked(False)
|
||||
self.s_button.setChecked(False)
|
||||
self.reset_p_button()
|
||||
self.reset_s_button()
|
||||
self.getPlotWidget().plotWFData(wfdata=self.getWFData(),
|
||||
title=self.getStation())
|
||||
self.drawAllPicks()
|
||||
@ -1058,7 +1144,7 @@ class PickDlg(QDialog):
|
||||
return self._user
|
||||
|
||||
def getFilterOptions(self, phase):
|
||||
options = self.filteroptions[phase]
|
||||
options = self.filteroptions[phase[0]]
|
||||
return FilterOptions(**options)
|
||||
|
||||
def getXLims(self):
|
||||
@ -1134,10 +1220,10 @@ class PickDlg(QDialog):
|
||||
self.cidpress = self.connectPressEvent(self.setPick)
|
||||
|
||||
print(self.currentPhase)
|
||||
if self.currentPhase == 'P':
|
||||
if self.currentPhase.startswith('P'):
|
||||
self.set_button_color(self.p_button, 'green')
|
||||
self.setIniPickP(gui_event, wfdata, trace_number)
|
||||
elif self.currentPhase == 'S':
|
||||
elif self.currentPhase.startswith('S'):
|
||||
self.set_button_color(self.s_button, 'green')
|
||||
self.setIniPickS(gui_event, wfdata)
|
||||
|
||||
@ -1170,7 +1256,7 @@ class PickDlg(QDialog):
|
||||
|
||||
# filter data and trace on which is picked prior to determination of SNR
|
||||
phase = self.currentPhase
|
||||
filteroptions = self.getFilterOptions(phase).parseFilterOptions()
|
||||
filteroptions = self.getFilterOptions(phase[0]).parseFilterOptions()
|
||||
if filteroptions:
|
||||
data.filter(**filteroptions)
|
||||
wfdata.filter(**filteroptions)
|
||||
@ -2578,39 +2664,33 @@ class OutputsTab(PropTab):
|
||||
values = {"output/Format": self.eventOutputComboBox.setCurrentIndex(1)}
|
||||
return values
|
||||
|
||||
|
||||
class PhasesTab(PropTab):
|
||||
def __init__(self, parent=None):
|
||||
super(PhasesTab, self).__init__(parent)
|
||||
|
||||
PphasesLabel = QLabel("P Phases to pick")
|
||||
SphasesLabel = QLabel("S Phases to pick")
|
||||
# self.PphasesEdit = QLineEdit()
|
||||
# self.SphasesEdit = QLineEdit()
|
||||
self.PphasesEdit = QLineEdit()
|
||||
self.SphasesEdit = QLineEdit()
|
||||
Pphases = 'P, Pg, Pn, PmP, P1, P2, P3'
|
||||
Sphases = 'S, Sg, Sn, SmS, S1, S2, S3'
|
||||
# self.PphasesEdit.setText("%s" % Pphases)
|
||||
# self.SphasesEdit.setText("%s" % Sphases)
|
||||
self.PphasesEdit.setText("%s" % Pphases)
|
||||
self.SphasesEdit.setText("%s" % Sphases)
|
||||
|
||||
layout = QGridLayout()
|
||||
layout.addWidget(PphasesLabel, 0, 0)
|
||||
layout.addWidget(SphasesLabel, 1, 0)
|
||||
|
||||
self.phaseButtons = {}
|
||||
|
||||
# loop over P and S
|
||||
for phaseIndex, phases in enumerate([Pphases, Sphases]):
|
||||
# loop through phases in string
|
||||
for index, phase in enumerate(phases.split(',')):
|
||||
index += 1 # skip first column with label
|
||||
button = QtGui.QPushButton(str(phase))
|
||||
button.setCheckable(True) # make button checkable
|
||||
button.setChecked(True) # default checked?
|
||||
layout.addWidget(button, phaseIndex, index) # add button to position
|
||||
self.phaseButtons[str(phase)] = button # save button in dictionary for later use
|
||||
# layout.addWidget(self.PphasesEdit, 0, 1)
|
||||
# layout.addWidget(self.SphasesEdit, 1, 1)
|
||||
layout.addWidget(self.PphasesEdit, 0, 1)
|
||||
layout.addWidget(self.SphasesEdit, 1, 1)
|
||||
self.setLayout(layout)
|
||||
|
||||
def getValues(self):
|
||||
values = {'p_phases': self.PphasesEdit.text(),
|
||||
's_phases': self.SphasesEdit.text()}
|
||||
return values
|
||||
|
||||
|
||||
class GraphicsTab(PropTab):
|
||||
def __init__(self, parent=None):
|
||||
|
Loading…
Reference in New Issue
Block a user