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/sicon.png</file>
|
||||||
<file>icons/pick.png</file>
|
<file>icons/pick.png</file>
|
||||||
<file>icons/filter.png</file>
|
<file>icons/filter.png</file>
|
||||||
|
<file>icons/zoom.png</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
<qresource prefix="/help">
|
<qresource prefix="/help">
|
||||||
<file>help/index.html</file>
|
<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.figure import Figure
|
||||||
from matplotlib.backends.backend_qt4agg import FigureCanvas
|
from matplotlib.backends.backend_qt4agg import FigureCanvas
|
||||||
|
from matplotlib.backends.backend_qt4agg import NavigationToolbar2QTAgg
|
||||||
from matplotlib.widgets import MultiCursor
|
from matplotlib.widgets import MultiCursor
|
||||||
from PySide.QtGui import QAction, QApplication,QComboBox, QDateTimeEdit,\
|
from PySide.QtGui import QAction, QApplication,QComboBox, QDateTimeEdit,\
|
||||||
QDialog, QDialogButtonBox, QDoubleSpinBox, QGroupBox, QGridLayout,\
|
QDialog, QDialogButtonBox, QDoubleSpinBox, QGroupBox, QGridLayout,\
|
||||||
@ -54,6 +55,7 @@ class MPLWidget(FigureCanvas):
|
|||||||
self._parent = None
|
self._parent = None
|
||||||
self.setParent(parent)
|
self.setParent(parent)
|
||||||
self.figure = Figure()
|
self.figure = Figure()
|
||||||
|
self.figure.set_facecolor((.92, .92, .92))
|
||||||
# attribute plotdict is an dictionary connecting position and a name
|
# attribute plotdict is an dictionary connecting position and a name
|
||||||
self.plotdict = dict()
|
self.plotdict = dict()
|
||||||
# create axes
|
# create axes
|
||||||
@ -262,20 +264,32 @@ class PickDlg(QDialog):
|
|||||||
# plot data
|
# plot data
|
||||||
self.getPlotWidget().plotWFData(wfdata=self.getWFData(),
|
self.getPlotWidget().plotWFData(wfdata=self.getWFData(),
|
||||||
title=self.getStation())
|
title=self.getStation())
|
||||||
|
self.limits = {'xlims' : self.getPlotWidget().axes.get_xlim(),
|
||||||
|
'ylims' : self.getPlotWidget().axes.get_ylim()}
|
||||||
self.apd = self.getWFData()
|
self.apd = self.getWFData()
|
||||||
|
|
||||||
# set plot labels
|
# set plot labels
|
||||||
self.setPlotLabels()
|
self.setPlotLabels()
|
||||||
|
|
||||||
# connect button press event to an action
|
# 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):
|
def setupUi(self):
|
||||||
|
|
||||||
|
# create matplotlib toolbar to inherit functionality
|
||||||
|
self.figToolBar = NavigationToolbar2QTAgg(self.getPlotWidget(), self)
|
||||||
|
self.figToolBar.hide()
|
||||||
|
|
||||||
# create icons
|
# create icons
|
||||||
filter_icon = QIcon()
|
filter_icon = QIcon()
|
||||||
filter_icon.addPixmap(QPixmap(':/icons/filter.png'))
|
filter_icon.addPixmap(QPixmap(':/icons/filter.png'))
|
||||||
|
|
||||||
|
zoom_icon = QIcon()
|
||||||
|
zoom_icon.addPixmap(QPixmap(':/icons/zoom.png'))
|
||||||
|
|
||||||
|
|
||||||
# create actions
|
# create actions
|
||||||
self.filterAction = createAction(parent=self, text='Filter',
|
self.filterAction = createAction(parent=self, text='Filter',
|
||||||
slot=self.filterWFData,
|
slot=self.filterWFData,
|
||||||
@ -284,7 +298,14 @@ class PickDlg(QDialog):
|
|||||||
' waveforms',
|
' waveforms',
|
||||||
checkable=True)
|
checkable=True)
|
||||||
self.selectPhase = QComboBox()
|
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
|
# layout the outermost appearance of the Pick Dialog
|
||||||
_outerlayout = QVBoxLayout()
|
_outerlayout = QVBoxLayout()
|
||||||
@ -294,6 +315,7 @@ class PickDlg(QDialog):
|
|||||||
|
|
||||||
_dialtoolbar.addAction(self.filterAction)
|
_dialtoolbar.addAction(self.filterAction)
|
||||||
_dialtoolbar.addWidget(self.selectPhase)
|
_dialtoolbar.addWidget(self.selectPhase)
|
||||||
|
#_dialtoolbar.addAction(self.zoomAction)
|
||||||
|
|
||||||
_innerlayout = QVBoxLayout()
|
_innerlayout = QVBoxLayout()
|
||||||
|
|
||||||
@ -308,9 +330,16 @@ class PickDlg(QDialog):
|
|||||||
_outerlayout.addLayout(_innerlayout)
|
_outerlayout.addLayout(_innerlayout)
|
||||||
self.setLayout(_outerlayout)
|
self.setLayout(_outerlayout)
|
||||||
|
|
||||||
def reconnect(self, event_name, slot):
|
def disconnectPressEvent(self):
|
||||||
self.getPlotWidget().mpl_disconnect(self.cid)
|
self.getPlotWidget().mpl_disconnect(self.cidpress)
|
||||||
self.cid = self.getPlotWidget().mpl_connect(event_name, slot)
|
|
||||||
|
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):
|
def getComponents(self):
|
||||||
return self.components
|
return self.components
|
||||||
@ -356,6 +385,8 @@ class PickDlg(QDialog):
|
|||||||
channel = self.getChannelID(round(gui_event.ydata))
|
channel = self.getChannelID(round(gui_event.ydata))
|
||||||
wfdata = self.selectWFData(channel)
|
wfdata = self.selectWFData(channel)
|
||||||
|
|
||||||
|
self.getPlotWidget().mpl_disconnect(self.cidscroll)
|
||||||
|
|
||||||
ini_pick = gui_event.xdata
|
ini_pick = gui_event.xdata
|
||||||
|
|
||||||
# calculate the resolution window width from SNR
|
# calculate the resolution window width from SNR
|
||||||
@ -371,7 +402,7 @@ class PickDlg(QDialog):
|
|||||||
'VLRW' : 15.
|
'VLRW' : 15.
|
||||||
}
|
}
|
||||||
|
|
||||||
result = getSNR(wfdata, (5, .5, 1), ini_pick)
|
result = getSNR(wfdata, (10., 2., 1.5), ini_pick)
|
||||||
|
|
||||||
snr = result[0]
|
snr = result[0]
|
||||||
noiselevel = result[2] * 1.5
|
noiselevel = result[2] * 1.5
|
||||||
@ -400,7 +431,7 @@ class PickDlg(QDialog):
|
|||||||
# reset labels
|
# reset labels
|
||||||
self.setPlotLabels()
|
self.setPlotLabels()
|
||||||
|
|
||||||
self.reconnect('button_press_event', self.setPick)
|
self.reconnectPressEvent(self.setPick)
|
||||||
|
|
||||||
def setPick(self, gui_event):
|
def setPick(self, gui_event):
|
||||||
pick = gui_event.xdata
|
pick = gui_event.xdata
|
||||||
@ -435,6 +466,45 @@ class PickDlg(QDialog):
|
|||||||
# set channel labels
|
# set channel labels
|
||||||
self.getPlotWidget().setYTickLabels(pos, 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):
|
def apply(self):
|
||||||
picks = self.getPicks()
|
picks = self.getPicks()
|
||||||
for pick in picks:
|
for pick in picks:
|
||||||
|
Loading…
Reference in New Issue
Block a user