test pickingdialog and prepare figures for the poster
This commit is contained in:
parent
043c45e02c
commit
d21798f633
@ -6,6 +6,7 @@
|
||||
<file>icons/sicon.png</file>
|
||||
<file>icons/pick.png</file>
|
||||
<file>icons/filter.png</file>
|
||||
<file>icons/zoom.png</file>
|
||||
</qresource>
|
||||
<qresource prefix="/help">
|
||||
<file>help/index.html</file>
|
||||
|
BIN
icons/zoom.png
Executable file
BIN
icons/zoom.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 7.5 KiB |
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
||||
0.0.0-gbe0b
|
||||
043c-dirty
|
||||
|
@ -14,6 +14,7 @@ matplotlib.rcParams['backend.qt4'] = 'PySide'
|
||||
|
||||
from matplotlib.figure import Figure
|
||||
from matplotlib.backends.backend_qt4agg import FigureCanvas
|
||||
from matplotlib.backends.backend_qt4agg import NavigationToolbar2QTAgg
|
||||
from matplotlib.widgets import MultiCursor
|
||||
from PySide.QtGui import QAction, QApplication,QComboBox, QDateTimeEdit,\
|
||||
QDialog, QDialogButtonBox, QDoubleSpinBox, QGroupBox, QGridLayout,\
|
||||
@ -54,6 +55,7 @@ class MPLWidget(FigureCanvas):
|
||||
self._parent = None
|
||||
self.setParent(parent)
|
||||
self.figure = Figure()
|
||||
self.figure.set_facecolor((.92, .92, .92))
|
||||
# attribute plotdict is an dictionary connecting position and a name
|
||||
self.plotdict = dict()
|
||||
# create axes
|
||||
@ -262,20 +264,32 @@ class PickDlg(QDialog):
|
||||
# plot data
|
||||
self.getPlotWidget().plotWFData(wfdata=self.getWFData(),
|
||||
title=self.getStation())
|
||||
self.limits = {'xlims' : self.getPlotWidget().axes.get_xlim(),
|
||||
'ylims' : self.getPlotWidget().axes.get_ylim()}
|
||||
self.apd = self.getWFData()
|
||||
|
||||
# set plot labels
|
||||
self.setPlotLabels()
|
||||
|
||||
# connect button press event to an action
|
||||
self.cid = self.getPlotWidget().mpl_connect('button_press_event', self.setIniPick)
|
||||
self.cidpress = self.connectPressEvent(self.setIniPick)
|
||||
self.cidscroll = self.getPlotWidget().mpl_connect('scroll_event',
|
||||
self.scrollZoom)
|
||||
|
||||
def setupUi(self):
|
||||
|
||||
# create matplotlib toolbar to inherit functionality
|
||||
self.figToolBar = NavigationToolbar2QTAgg(self.getPlotWidget(), self)
|
||||
self.figToolBar.hide()
|
||||
|
||||
# create icons
|
||||
filter_icon = QIcon()
|
||||
filter_icon.addPixmap(QPixmap(':/icons/filter.png'))
|
||||
|
||||
zoom_icon = QIcon()
|
||||
zoom_icon.addPixmap(QPixmap(':/icons/zoom.png'))
|
||||
|
||||
|
||||
# create actions
|
||||
self.filterAction = createAction(parent=self, text='Filter',
|
||||
slot=self.filterWFData,
|
||||
@ -284,7 +298,14 @@ class PickDlg(QDialog):
|
||||
' waveforms',
|
||||
checkable=True)
|
||||
self.selectPhase = QComboBox()
|
||||
self.selectPhase.addItems(['Pn', 'Pg', 'P1', 'P2'])
|
||||
self.selectPhase.addItems([None, 'Pn', 'Pg', 'P1', 'P2'])
|
||||
|
||||
|
||||
|
||||
self.zoomAction = createAction(parent=self, text='Zoom',
|
||||
slot=self.zoom, icon=zoom_icon,
|
||||
tip='Zoom into waveform',
|
||||
checkable=True)
|
||||
|
||||
# layout the outermost appearance of the Pick Dialog
|
||||
_outerlayout = QVBoxLayout()
|
||||
@ -294,6 +315,7 @@ class PickDlg(QDialog):
|
||||
|
||||
_dialtoolbar.addAction(self.filterAction)
|
||||
_dialtoolbar.addWidget(self.selectPhase)
|
||||
#_dialtoolbar.addAction(self.zoomAction)
|
||||
|
||||
_innerlayout = QVBoxLayout()
|
||||
|
||||
@ -308,9 +330,16 @@ class PickDlg(QDialog):
|
||||
_outerlayout.addLayout(_innerlayout)
|
||||
self.setLayout(_outerlayout)
|
||||
|
||||
def reconnect(self, event_name, slot):
|
||||
self.getPlotWidget().mpl_disconnect(self.cid)
|
||||
self.cid = self.getPlotWidget().mpl_connect(event_name, slot)
|
||||
def disconnectPressEvent(self):
|
||||
self.getPlotWidget().mpl_disconnect(self.cidpress)
|
||||
|
||||
def connectPressEvent(self, slot):
|
||||
widget = self.getPlotWidget()
|
||||
self.cidpress = widget.mpl_connect('button_press_event', slot)
|
||||
|
||||
def reconnectPressEvent(self, slot):
|
||||
self.disconnectPressEvent()
|
||||
self.cidpress = self.connectPressEvent(slot)
|
||||
|
||||
def getComponents(self):
|
||||
return self.components
|
||||
@ -356,6 +385,8 @@ class PickDlg(QDialog):
|
||||
channel = self.getChannelID(round(gui_event.ydata))
|
||||
wfdata = self.selectWFData(channel)
|
||||
|
||||
self.getPlotWidget().mpl_disconnect(self.cidscroll)
|
||||
|
||||
ini_pick = gui_event.xdata
|
||||
|
||||
# calculate the resolution window width from SNR
|
||||
@ -371,7 +402,7 @@ class PickDlg(QDialog):
|
||||
'VLRW' : 15.
|
||||
}
|
||||
|
||||
result = getSNR(wfdata, (5, .5, 1), ini_pick)
|
||||
result = getSNR(wfdata, (10., 2., 1.5), ini_pick)
|
||||
|
||||
snr = result[0]
|
||||
noiselevel = result[2] * 1.5
|
||||
@ -400,7 +431,7 @@ class PickDlg(QDialog):
|
||||
# reset labels
|
||||
self.setPlotLabels()
|
||||
|
||||
self.reconnect('button_press_event', self.setPick)
|
||||
self.reconnectPressEvent(self.setPick)
|
||||
|
||||
def setPick(self, gui_event):
|
||||
pick = gui_event.xdata
|
||||
@ -435,6 +466,45 @@ class PickDlg(QDialog):
|
||||
# set channel labels
|
||||
self.getPlotWidget().setYTickLabels(pos, labels)
|
||||
|
||||
def zoom(self):
|
||||
if self.zoomAction.isChecked():
|
||||
self.disconnectPressEvent()
|
||||
self.figToolBar.zoom()
|
||||
else:
|
||||
self.connectPressEvent(self.setIniPick)
|
||||
|
||||
def scrollZoom(self, gui_event, factor=1.2):
|
||||
|
||||
widget = self.getPlotWidget()
|
||||
|
||||
curr_xlim = widget.axes.get_xlim()
|
||||
curr_ylim = widget.axes.get_ylim()
|
||||
|
||||
if gui_event.button == 'up':
|
||||
scale_factor = 1/factor
|
||||
elif gui_event.button == 'down':
|
||||
# deal with zoom out
|
||||
scale_factor = factor
|
||||
else:
|
||||
# deal with something that should never happen
|
||||
scale_factor = 1
|
||||
print gui_event.button
|
||||
|
||||
act_width = (curr_xlim[1]-curr_xlim[0])*.5
|
||||
act_height = (curr_ylim[1]-curr_ylim[0])*.5
|
||||
|
||||
new_width = act_width*scale_factor
|
||||
new_height= act_height*scale_factor
|
||||
|
||||
new_xlim = [max(gui_event.xdata - new_width, self.limits['xlims'][0]),
|
||||
min(gui_event.xdata + new_width, self.limits['xlims'][1])]
|
||||
new_ylim = [max(gui_event.ydata - new_height, self.limits['ylims'][0]),
|
||||
min(gui_event.ydata + new_height, self.limits['ylims'][1])]
|
||||
|
||||
widget.axes.set_xlim(new_xlim)
|
||||
widget.axes.set_ylim(new_ylim)
|
||||
widget.draw()
|
||||
|
||||
def apply(self):
|
||||
picks = self.getPicks()
|
||||
for pick in picks:
|
||||
|
Loading…
Reference in New Issue
Block a user