implement picking window and station selection (tests pending due to not working station selection so far)
This commit is contained in:
		
							parent
							
								
									54916fa421
								
							
						
					
					
						commit
						c7aeb1959b
					
				
							
								
								
									
										19
									
								
								QtPyLoT.py
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								QtPyLoT.py
									
									
									
									
									
								
							| @ -35,7 +35,7 @@ from pylot.core.read import Data, FilterOptions | ||||
| from pylot.core.util import _getVersionString, FILTERDEFAULTS, fnConstructor, \ | ||||
|     checkurl, FormatError, FilterOptionsDialog, \ | ||||
|     NewEventDlg, createEvent, MPLWidget, PropertiesDlg, HelpForm, \ | ||||
|     DatastructureError, createAction, getLogin, createCreationInfo | ||||
|     DatastructureError, createAction, getLogin, createCreationInfo, PickDlg | ||||
| from pylot.core.util.structure import DATASTRUCTURE | ||||
| 
 | ||||
| 
 | ||||
| @ -73,6 +73,7 @@ class MainWindow(QMainWindow): | ||||
|         settings.sync() | ||||
| 
 | ||||
|         self.filteroptions = {} | ||||
|         self.pickDlgs = {} | ||||
| 
 | ||||
|         # UI has to be set up before(!) children widgets are about to show up | ||||
|         self.setupUi() | ||||
| @ -322,6 +323,9 @@ class MainWindow(QMainWindow): | ||||
|     def getPlotWidget(self): | ||||
|         return self.DataPlot | ||||
| 
 | ||||
|     def getWFID(self): | ||||
|         return self.getPlotWidget().getStatID() | ||||
| 
 | ||||
|     def addActions(self, target, actions): | ||||
|         for action in actions: | ||||
|             if action is None: | ||||
| @ -417,6 +421,10 @@ class MainWindow(QMainWindow): | ||||
|     def getSeismicPhase(self): | ||||
|         return self.seismicPhase | ||||
| 
 | ||||
|     def getStationName(self, wfID): | ||||
|         data = self.getData().copy().select(component=self.getComponent()) | ||||
|         return data[wfID].stats.station | ||||
| 
 | ||||
|     def alterPhase(self): | ||||
|         pass | ||||
| 
 | ||||
| @ -425,6 +433,15 @@ class MainWindow(QMainWindow): | ||||
|         self.updateStatus('Seismic phase changed to ' | ||||
|                           '{0}'.format(self.getSeismicPhase())) | ||||
| 
 | ||||
|     def pickOnStation(self): | ||||
| 
 | ||||
|         wfID = self.getWFID() | ||||
| 
 | ||||
|         station = self.getStationName(wfID) | ||||
|         self.pickDlgs[wfID] = PickDlg(self, | ||||
|                                       self.getData().select(station=station), | ||||
|                                       station) | ||||
| 
 | ||||
|     def updateStatus(self, message): | ||||
|         self.statusBar().showMessage(message, 5000) | ||||
|         if self.getData() is not None: | ||||
|  | ||||
| @ -36,8 +36,8 @@ from PySide.QtGui import (QAction, | ||||
| from PySide.QtCore import (QSettings, | ||||
|                            Qt, | ||||
|                            QUrl, | ||||
|                            SIGNAL, | ||||
|                            SLOT) | ||||
|                            Signal, | ||||
|                            Slot) | ||||
| from PySide.QtWebKit import QWebView | ||||
| from pylot.core.read import FilterOptions | ||||
| from pylot.core.util.defaults import OUTPUTFORMATS | ||||
| @ -66,14 +66,35 @@ class MPLWidget(FigureCanvas): | ||||
|     def __init__(self, parent=None, xlabel='x', ylabel='y', title='Title'): | ||||
|         super(MPLWidget, self).__init__(Figure()) | ||||
| 
 | ||||
|         self._parent = None | ||||
|         self.setParent(parent) | ||||
|         self.figure = Figure() | ||||
|         self.canvas = FigureCanvas(self.figure) | ||||
|         self.canvas.mpl_connect('button_press_event', self.emitSelection) | ||||
|         self.axes = self.figure.add_subplot(111) | ||||
|         self.axes.autoscale(tight=True) | ||||
|         self._statID = None | ||||
| 
 | ||||
|         self.updateWidget(xlabel, ylabel, title) | ||||
| 
 | ||||
|     def emitSelection(self, event): | ||||
| 
 | ||||
|         self._statID = round(event.ydata) | ||||
|         if self.getParent(): | ||||
|             self.getParent().pickOnStation() | ||||
| 
 | ||||
|     def getStatID(self): | ||||
|         if self._statID is None: | ||||
|             return | ||||
|         else: | ||||
|             return self._statID | ||||
| 
 | ||||
|     def getParent(self): | ||||
|         return self._parent | ||||
| 
 | ||||
|     def setParent(self, parent): | ||||
|         self._parent = parent | ||||
| 
 | ||||
|     def updateXLabel(self, text): | ||||
|         self.axes.set_xlabel(text) | ||||
| 
 | ||||
| @ -91,7 +112,7 @@ class MPLWidget(FigureCanvas): | ||||
| 
 | ||||
| class multiComponentPlot(FigureCanvas): | ||||
| 
 | ||||
|     def __init__(self, parent=None, components='ZNE',  xlabel='x', ylabel='y', title='Title'): | ||||
|     def __init__(self, parent=None, components='ZNE'): | ||||
|         super(multiComponentPlot, self).__init__(Figure()) | ||||
| 
 | ||||
|         self.setParent(parent) | ||||
| @ -101,20 +122,27 @@ class multiComponentPlot(FigureCanvas): | ||||
| 
 | ||||
|         self.axeslist = [] | ||||
| 
 | ||||
|     def plotData(self, components, data): | ||||
|         if self.axeslist: | ||||
|             self.axeslist = [] | ||||
|             self.figure.clf() | ||||
|         xlabel = 'time since {0} [s]'.format(data[0].stats.starttime) | ||||
|         for n, comp in enumerate(components): | ||||
|             nsub = '{0}1{1}'.format(self.noc, n) | ||||
|             if n >= 1: | ||||
|                 self.axeslist.insert(n, | ||||
|                 self.axeslist.insert( | ||||
|                     n, | ||||
|                     self.figure.add_subplot(nsub, | ||||
|                                             sharex=self.axeslist[0], | ||||
|                                                              sharey=self.axeslist[0])) | ||||
|                                             sharey=self.axeslist[0]) | ||||
|                 ) | ||||
|             else: | ||||
|                 subax = self.figure.add_subplot(nsub) | ||||
|             subax.autoscale(tight=True) | ||||
|             self.axeslist.insert(n, subax) | ||||
|             self.updateYLabel(n, ylabel[n]) | ||||
|             if n == noc: | ||||
|                 self.updateXLabel(noc, xlabel) | ||||
|             self.updateYLabel(n, comp) | ||||
|             if n == self.noc: | ||||
|                 self.updateXLabel(self.noc, xlabel) | ||||
|             else: | ||||
|                 self.updateXLabel(n, '') | ||||
| 
 | ||||
| @ -133,19 +161,26 @@ class multiComponentPlot(FigureCanvas): | ||||
| 
 | ||||
| class PickDlg(QDialog): | ||||
| 
 | ||||
|     def __init__(self, parent=None, station=None, rotate=False): | ||||
|     def __init__(self, parent=None, data=None, station=None, rotate=False): | ||||
|         super(PickDlg, self).__init__(parent) | ||||
| 
 | ||||
|         self.station = station | ||||
|         self.rotate = rotate | ||||
|         self.components = 'ZNE' | ||||
|         self.data = parent.getData().getWFData().copy() | ||||
| 
 | ||||
|         multicompfig = multiComponentPlot() | ||||
|         _layout.addWidget() | ||||
|     def plotData(self, data): | ||||
|         if data is None: | ||||
|             try: | ||||
|                 data = parent.getData().getWFData().copy() | ||||
|                 self.data = data.select(station=station) | ||||
|             except AttributeError, e: | ||||
|                 errmsg = 'You either have to put in a data or an appropriate ' \ | ||||
|                          'parent (PyLoT MainWindow) object: {0}'.format(e) | ||||
|                 raise Exception() | ||||
|         else: | ||||
|             self.data = data | ||||
| 
 | ||||
|         self.setupUi() | ||||
|         self.multicompfig = multiComponentPlot(parent=self, | ||||
|                                                components=self.getComponents()) | ||||
| 
 | ||||
|     def setupUi(self): | ||||
| 
 | ||||
| @ -168,15 +203,33 @@ class PickDlg(QDialog): | ||||
|         _dialtoolbar.addWidget(self.selectPhase) | ||||
| 
 | ||||
|         _innerlayout = QHBoxLayout() | ||||
| 
 | ||||
|         _toolslayout = QVBoxLayout() | ||||
|         _toolslabel = QLabel('Place for Tools') | ||||
|         _toolslayout.addWidget(_toolslabel) | ||||
| 
 | ||||
|         _innerlayout.addLayout(_toolslayout) | ||||
|         _innerlayout.addWidget(self.multicompfig) | ||||
| 
 | ||||
|         _outerlayout.addWidget(_dialtoolbar) | ||||
|         _outerlayout.addLayout(_innerlayout) | ||||
| 
 | ||||
| 
 | ||||
|     def getComponents(self): | ||||
|         return self.components | ||||
| 
 | ||||
|     def getPlotWidget(self): | ||||
|         return self.multicompfig | ||||
| 
 | ||||
|     def getWFData(self): | ||||
|         return self.data | ||||
| 
 | ||||
|     def filterWFData(self): | ||||
|         self.data.filterWFData() | ||||
|         self.plotData() | ||||
| 
 | ||||
|     def plotData(self): | ||||
|         for comp in self.components: | ||||
|             self.getPlotWidget() | ||||
|         self.getPlotWidget().plotData(self.getComponents(), self.getWFData()) | ||||
| 
 | ||||
| class PropertiesDlg(QDialog): | ||||
| 
 | ||||
| @ -201,12 +254,12 @@ class PropertiesDlg(QDialog): | ||||
|         layout.addWidget(self.buttonBox) | ||||
|         self.setLayout(layout) | ||||
| 
 | ||||
|         self.connect(self.buttonBox, SIGNAL("accepted()"), self, | ||||
|                      SLOT("accept()")) | ||||
|         self.connect(self.buttonBox, Signal("accepted()"), self, | ||||
|                      Slot("accept()")) | ||||
|         self.connect(self.buttonBox.button(QDialogButtonBox.Apply), | ||||
|                      SIGNAL("clicked()"), self.apply) | ||||
|         self.connect(self.buttonBox, SIGNAL("rejected()"), | ||||
|                      self, SLOT("reject()")) | ||||
|                      Signal("clicked()"), self.apply) | ||||
|         self.connect(self.buttonBox, Signal("rejected()"), | ||||
|                      self, Slot("reject()")) | ||||
| 
 | ||||
|     def accept(self, *args, **kwargs): | ||||
|         self.apply() | ||||
| @ -549,11 +602,11 @@ class HelpForm(QDialog): | ||||
|         layout.addWidget(self.webBrowser, 1) | ||||
|         self.setLayout(layout) | ||||
| 
 | ||||
|         self.connect(backAction, SIGNAL("triggered()"), | ||||
|                      self.webBrowser, SLOT("backward()")) | ||||
|         self.connect(homeAction, SIGNAL("triggered()"), | ||||
|                      self.webBrowser, SLOT("home()")) | ||||
|         self.connect(self.webBrowser, SIGNAL("sourceChanged(QUrl)"), | ||||
|         self.connect(backAction, Signal("triggered()"), | ||||
|                      self.webBrowser, Slot("backward()")) | ||||
|         self.connect(homeAction, Signal("triggered()"), | ||||
|                      self.webBrowser, Slot("home()")) | ||||
|         self.connect(self.webBrowser, Signal("sourceChanged(QUrl)"), | ||||
|                      self.updatePageTitle) | ||||
| 
 | ||||
|         self.resize(400, 600) | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user