[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,9 +901,13 @@ 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 | ||||
|         self.p_button.clicked.connect(self.p_clicked) | ||||
| @ -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) | ||||
| @ -953,9 +1007,32 @@ class PickDlg(QDialog): | ||||
|     def enable_ar_buttons(self, bool=True): | ||||
|         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,7 +1040,8 @@ class PickDlg(QDialog): | ||||
| 
 | ||||
|     def s_clicked(self): | ||||
|         if self.s_button.isChecked(): | ||||
|             self.p_button.setEnabled(False) | ||||
|             self.reset_p_button() | ||||
|             self.p_button.setEnabled(False)             | ||||
|             self.init_s_pick() | ||||
|         else: | ||||
|             self.leave_picking_mode() | ||||
| @ -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) | ||||
| @ -2577,6 +2663,7 @@ class OutputsTab(PropTab): | ||||
|     def resetValues(self, infile): | ||||
|         values = {"output/Format": self.eventOutputComboBox.setCurrentIndex(1)} | ||||
|         return values | ||||
|      | ||||
| 
 | ||||
| class PhasesTab(PropTab): | ||||
|     def __init__(self, parent=None): | ||||
| @ -2584,33 +2671,26 @@ class PhasesTab(PropTab): | ||||
| 
 | ||||
|         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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user