[ref #195] implementation done; some bugs have to be fixed
This commit is contained in:
parent
e6d8701411
commit
b96366e321
@ -29,10 +29,12 @@ class Comparison(object):
|
||||
names = list()
|
||||
self._pdfs = dict()
|
||||
for name, fn in kwargs.items():
|
||||
if not isinstance(PDFDictionary, fn):
|
||||
self._pdfs[name] = PDFDictionary.from_quakeml(fn)
|
||||
else:
|
||||
if isinstance(fn, PDFDictionary):
|
||||
self._pdfs[name] = fn
|
||||
elif isinstance(fn, dict):
|
||||
self._pdfs[name] = PDFDictionary(fn)
|
||||
else:
|
||||
self._pdfs[name] = PDFDictionary.from_quakeml(fn)
|
||||
names.append(name)
|
||||
if len(names) > 2:
|
||||
raise ValueError('Comparison is only defined for two '
|
||||
|
@ -28,6 +28,7 @@ from obspy import Stream, UTCDateTime
|
||||
from pylot.core.io.inputs import FilterOptions
|
||||
from pylot.core.pick.utils import getSNR, earllatepicker, getnoisewin, \
|
||||
getResolutionWindow
|
||||
from pylot.core.pick.compare import Comparison
|
||||
from pylot.core.util.defaults import OUTPUTFORMATS, FILTERDEFAULTS, LOCTOOLS, \
|
||||
COMPPOSITION_MAP
|
||||
from pylot.core.util.utils import prepTimeAxis, getGlobalTimes, scaleWFData, \
|
||||
@ -67,10 +68,15 @@ def createAction(parent, text, slot=None, shortcut=None, icon=None,
|
||||
class ComparisonDialog(QDialog):
|
||||
def __init__(self, c, parent=None):
|
||||
self._data = c
|
||||
self._stats = c.keys()
|
||||
self._stats = c.stations
|
||||
self._canvas = PlotWidget(self)
|
||||
self._widgets = dict(stationsComboBox=None,
|
||||
phasesComboBox=None)
|
||||
self._phases = 'PS'
|
||||
self._plotprops = dict(station=self.stations[0], phase=self.phases[0])
|
||||
super(ComparisonDialog, self).__init__(parent)
|
||||
self.setupUI()
|
||||
self.plotcomparison()
|
||||
|
||||
def setupUI(self):
|
||||
|
||||
@ -78,12 +84,18 @@ class ComparisonDialog(QDialog):
|
||||
_innerlayout = QVBoxLayout(self)
|
||||
|
||||
_stats_combobox = QComboBox(self)
|
||||
_stats_combobox.setObjectName('stationsComboBox')
|
||||
_stats_combobox.setEditable(True)
|
||||
_stats_combobox.setInsertPolicy(QComboBox.NoInsert)
|
||||
_stats_combobox.addItems(self.stations)
|
||||
_stats_combobox.textChanged.connect(self.plotcomparison)
|
||||
_stats_combobox.editTextChanged.connect(self.prepareplot)
|
||||
self.widgets = _stats_combobox
|
||||
|
||||
_phases_combobox = QComboBox(self)
|
||||
_phases_combobox.setObjectName('phasesComboBox')
|
||||
_phases_combobox.addItems(['P', 'S'])
|
||||
_phases_combobox.currentIndexChanged.connect(self.prepareplot)
|
||||
self.widgets = _phases_combobox
|
||||
|
||||
_toolbar = QToolBar(self)
|
||||
_toolbar.addWidget(_stats_combobox)
|
||||
@ -106,6 +118,10 @@ class ComparisonDialog(QDialog):
|
||||
def canvas(self):
|
||||
return self._canvas
|
||||
|
||||
@canvas.setter
|
||||
def canvas(self, canvas_obj):
|
||||
self._canvas = canvas_obj
|
||||
|
||||
@property
|
||||
def stations(self):
|
||||
return self._stats
|
||||
@ -114,15 +130,86 @@ class ComparisonDialog(QDialog):
|
||||
def stations(self, stations):
|
||||
self._stats = stations
|
||||
|
||||
@property
|
||||
def phases(self):
|
||||
return self._phases
|
||||
|
||||
@phases.setter
|
||||
def phases(self, value):
|
||||
self._phases = value
|
||||
|
||||
@property
|
||||
def plotprops(self):
|
||||
return self._plotprops
|
||||
|
||||
@plotprops.setter
|
||||
def plotprops(self, values):
|
||||
try:
|
||||
key, value = values
|
||||
if key not in self.plotprops.keys():
|
||||
raise KeyError("'key' {0} not found in "
|
||||
"ComparisonDialog.plotprops keys.".format(key))
|
||||
except ValueError:
|
||||
raise ValueError("Pass an iterable with two items")
|
||||
else:
|
||||
self._plotprops[key] = value
|
||||
|
||||
@property
|
||||
def data(self):
|
||||
return self._data
|
||||
|
||||
@data.setter
|
||||
def data(self, data):
|
||||
self.stations = data.keys()
|
||||
assert not isinstance(data, Comparison)
|
||||
self.stations = data.stations
|
||||
self._data = data
|
||||
|
||||
@property
|
||||
def widgets(self):
|
||||
return self._widgets
|
||||
|
||||
@widgets.setter
|
||||
def widgets(self, widget):
|
||||
name = widget.objectName
|
||||
if name in self.widgets.keys():
|
||||
self._widgets[name] = widget
|
||||
|
||||
def hasvalue(self, sender):
|
||||
text = sender.currentText()
|
||||
index = sender.findText(text.upper())
|
||||
return index
|
||||
|
||||
def prepareplot(self):
|
||||
try:
|
||||
_widget = self.sender()
|
||||
name = _widget.objectName()
|
||||
text = _widget.currentText().upper()
|
||||
index = self.hasvalue(_widget)
|
||||
if name == 'stationsComboBox' and index is not -1:
|
||||
_widget.setCurrentIndex(index)
|
||||
self.plotprops = ('station', text)
|
||||
elif name == 'phasesComboBox':
|
||||
self.plotprops = ('phase', text)
|
||||
except ValueError:
|
||||
raise ValueError('No sender widget given!')
|
||||
finally:
|
||||
self.plotcomparison()
|
||||
|
||||
def plotcomparison(self):
|
||||
_axes = self.canvas.figure.add_subplot(111)
|
||||
station = self.plotprops['station']
|
||||
phase = self.plotprops['phase']
|
||||
pdf = self.data.comparison[station][phase]
|
||||
x, y = pdf.axis, pdf.data
|
||||
_axes.plot(x, y)
|
||||
_axes.set_title(phase)
|
||||
_axes.set_ylabel('propability density (qual.)')
|
||||
_axes.set_xlabel('time difference [s]')
|
||||
_anno = _axes.annotate(station, xy=(.05, .5), xycoords='axes fraction')
|
||||
bbox_props = dict(boxstyle='round', facecolor='lightgrey', alpha=.7)
|
||||
_anno.set_bbox(bbox_props)
|
||||
self.canvas.draw()
|
||||
|
||||
|
||||
class PlotWidget(FigureCanvas):
|
||||
def __init__(self, parent=None, xlabel='x', ylabel='y', title='Title'):
|
||||
|
Loading…
Reference in New Issue
Block a user