[ref #195] implementation done; some bugs have to be fixed

This commit is contained in:
Sebastian Wehling-Benatelli 2016-06-08 13:14:38 +02:00
parent e6d8701411
commit b96366e321
2 changed files with 95 additions and 6 deletions

View File

@ -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 '

View File

@ -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'):