[update] working version to compare several events
This commit is contained in:
		
							parent
							
								
									eaa7a993af
								
							
						
					
					
						commit
						79cbaf3397
					
				
							
								
								
									
										54
									
								
								QtPyLoT.py
									
									
									
									
									
								
							
							
						
						
									
										54
									
								
								QtPyLoT.py
									
									
									
									
									
								
							@ -202,14 +202,6 @@ class MainWindow(QMainWindow):
 | 
				
			|||||||
                                                 s_filter['order'])}
 | 
					                                                 s_filter['order'])}
 | 
				
			||||||
        self.loc = False
 | 
					        self.loc = False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # init event selection options for compare/autopick
 | 
					 | 
				
			||||||
        self.pickoptions =[('current event', self.get_current_event),
 | 
					 | 
				
			||||||
                           ('tune events', self.get_ref_events),
 | 
					 | 
				
			||||||
                           ('test events', self.get_test_events),
 | 
					 | 
				
			||||||
                           ('all (picked) events', self.get_manu_picked_events),
 | 
					 | 
				
			||||||
                           ('all events', self.get_all_events)]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def setupUi(self):
 | 
					    def setupUi(self):
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
            self.startTime = min(
 | 
					            self.startTime = min(
 | 
				
			||||||
@ -1038,6 +1030,8 @@ class MainWindow(QMainWindow):
 | 
				
			|||||||
        # if pick widget is open, refresh tooltips as well
 | 
					        # if pick widget is open, refresh tooltips as well
 | 
				
			||||||
        if hasattr(self, 'apw'):
 | 
					        if hasattr(self, 'apw'):
 | 
				
			||||||
            self.apw.refresh_tooltips()
 | 
					            self.apw.refresh_tooltips()
 | 
				
			||||||
 | 
					        if hasattr(self, 'cmpw'):
 | 
				
			||||||
 | 
					            self.cmpw.refresh_tooltips()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if not eventBox:
 | 
					        if not eventBox:
 | 
				
			||||||
            eventBox = self.eventBox
 | 
					            eventBox = self.eventBox
 | 
				
			||||||
@ -1253,13 +1247,36 @@ class MainWindow(QMainWindow):
 | 
				
			|||||||
            eventdict[event.pylot_id] = event
 | 
					            eventdict[event.pylot_id] = event
 | 
				
			||||||
        if len(eventdict) < 1:
 | 
					        if len(eventdict) < 1:
 | 
				
			||||||
            return
 | 
					            return
 | 
				
			||||||
        pickoptions = self.pickoptions.copy()
 | 
					
 | 
				
			||||||
        pickoptions.pop(-1)
 | 
					        # init event selection options for autopick
 | 
				
			||||||
        pickoptions.pop(0)
 | 
					        self.compareoptions =[('tune events', self.get_ref_events),
 | 
				
			||||||
        compare_multi = CompareEventsWidget(self, pickoptions, eventdict, comparisons)
 | 
					                              ('test events', self.get_test_events),
 | 
				
			||||||
        compare_multi.show()
 | 
					                              ('all (picked) events', self.get_manu_picked_events)]
 | 
				
			||||||
        #compare_dlg = ComparisonWidget(comparisons[self.get_current_event_name()], self)
 | 
					
 | 
				
			||||||
        #compare_dlg.show()
 | 
					        self.cmpw = CompareEventsWidget(self, self.compareoptions, eventdict, comparisons)
 | 
				
			||||||
 | 
					        self.cmpw.start.connect(self.compareMulti)
 | 
				
			||||||
 | 
					        self.cmpw.refresh_tooltips()
 | 
				
			||||||
 | 
					        self.cmpw.show()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def compareMulti(self):
 | 
				
			||||||
 | 
					        for key, func in self.compareoptions:
 | 
				
			||||||
 | 
					            if self.cmpw.rb_dict[key].isChecked():
 | 
				
			||||||
 | 
					                # if radio button is checked break for loop and use func
 | 
				
			||||||
 | 
					                break
 | 
				
			||||||
 | 
					        eventlist = func()
 | 
				
			||||||
 | 
					        # use only events comparable
 | 
				
			||||||
 | 
					        eventlist_overlap = [event for event in eventlist if self.comparable[event.pylot_id]]
 | 
				
			||||||
 | 
					        compare_widget = self.buildMultiCompareWidget(eventlist_overlap)
 | 
				
			||||||
 | 
					        compare_widget.show()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def buildMultiCompareWidget(self, eventlist):
 | 
				
			||||||
 | 
					        global_comparison = Comparison(eventlist=eventlist)
 | 
				
			||||||
 | 
					        compare_widget = ComparisonWidget(global_comparison, self)
 | 
				
			||||||
 | 
					        compare_widget.setWindowTitle('Histograms for all selected events')
 | 
				
			||||||
 | 
					        compare_widget.hideToolbar()
 | 
				
			||||||
 | 
					        compare_widget.setHistboxChecked(True)
 | 
				
			||||||
 | 
					        return compare_widget
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def getPlotWidget(self):
 | 
					    def getPlotWidget(self):
 | 
				
			||||||
        return self.dataPlot
 | 
					        return self.dataPlot
 | 
				
			||||||
@ -1955,6 +1972,13 @@ class MainWindow(QMainWindow):
 | 
				
			|||||||
                                "No autoPyLoT output declared!")
 | 
					                                "No autoPyLoT output declared!")
 | 
				
			||||||
            return
 | 
					            return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # init event selection options for autopick
 | 
				
			||||||
 | 
					        self.pickoptions =[('current event', self.get_current_event),
 | 
				
			||||||
 | 
					                           ('tune events', self.get_ref_events),
 | 
				
			||||||
 | 
					                           ('test events', self.get_test_events),
 | 
				
			||||||
 | 
					                           ('all (picked) events', self.get_manu_picked_events),
 | 
				
			||||||
 | 
					                           ('all events', self.get_all_events)]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.listWidget = QListWidget()
 | 
					        self.listWidget = QListWidget()
 | 
				
			||||||
        self.setDirty(True)
 | 
					        self.setDirty(True)
 | 
				
			||||||
        self.apw = AutoPickWidget(self, self.pickoptions)
 | 
					        self.apw = AutoPickWidget(self, self.pickoptions)
 | 
				
			||||||
 | 
				
			|||||||
@ -27,16 +27,8 @@ class Comparison(object):
 | 
				
			|||||||
    """
 | 
					    """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __init__(self, **kwargs):
 | 
					    def __init__(self, **kwargs):
 | 
				
			||||||
        names = list()
 | 
					 | 
				
			||||||
        self._pdfs = dict()
 | 
					        self._pdfs = dict()
 | 
				
			||||||
        for name, fn in kwargs.items():
 | 
					        names = self.iter_kwargs(kwargs)
 | 
				
			||||||
            if isinstance(fn, PDFDictionary):
 | 
					 | 
				
			||||||
                self._pdfs[name] = fn
 | 
					 | 
				
			||||||
            elif isinstance(fn, dict) or isinstance(fn, AttribDict):
 | 
					 | 
				
			||||||
                self._pdfs[name] = PDFDictionary(fn)
 | 
					 | 
				
			||||||
            else:
 | 
					 | 
				
			||||||
                self._pdfs[name] = PDFDictionary.from_quakeml(fn)
 | 
					 | 
				
			||||||
            names.append(name)
 | 
					 | 
				
			||||||
        if len(names) > 2:
 | 
					        if len(names) > 2:
 | 
				
			||||||
            raise ValueError('Comparison is only defined for two '
 | 
					            raise ValueError('Comparison is only defined for two '
 | 
				
			||||||
                             'arguments!')
 | 
					                             'arguments!')
 | 
				
			||||||
@ -48,6 +40,40 @@ class Comparison(object):
 | 
				
			|||||||
            return False
 | 
					            return False
 | 
				
			||||||
        return True
 | 
					        return True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def iter_kwargs(self, kwargs):
 | 
				
			||||||
 | 
					        names = list()
 | 
				
			||||||
 | 
					        for name, fn in kwargs.items():
 | 
				
			||||||
 | 
					            if name == 'eventlist':
 | 
				
			||||||
 | 
					                names = self.init_by_eventlist(fn)
 | 
				
			||||||
 | 
					                break
 | 
				
			||||||
 | 
					            if isinstance(fn, PDFDictionary):
 | 
				
			||||||
 | 
					                self._pdfs[name] = fn
 | 
				
			||||||
 | 
					            elif isinstance(fn, dict) or isinstance(fn, AttribDict):
 | 
				
			||||||
 | 
					                self._pdfs[name] = PDFDictionary(fn)
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                self._pdfs[name] = PDFDictionary.from_quakeml(fn)
 | 
				
			||||||
 | 
					            names.append(name)
 | 
				
			||||||
 | 
					        return names
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def init_by_eventlist(self, eventlist):
 | 
				
			||||||
 | 
					        # create one dictionary containing all picks for all events (therefore modify station key)
 | 
				
			||||||
 | 
					        global_picksdict = {}
 | 
				
			||||||
 | 
					        for event in eventlist:
 | 
				
			||||||
 | 
					            automanu = {'manu': event.pylot_picks,
 | 
				
			||||||
 | 
					                        'auto': event.pylot_autopicks}
 | 
				
			||||||
 | 
					            for method, picksdict in automanu.items():
 | 
				
			||||||
 | 
					                if not method in global_picksdict.keys():
 | 
				
			||||||
 | 
					                    global_picksdict[method] = {}
 | 
				
			||||||
 | 
					                for station, picks in picksdict.items():
 | 
				
			||||||
 | 
					                    new_picksdict = global_picksdict[method]
 | 
				
			||||||
 | 
					                    # new id combining event and station in one dictionary for all events
 | 
				
			||||||
 | 
					                    id = '{}_{}'.format(event.pylot_id, station)
 | 
				
			||||||
 | 
					                    new_picksdict[id] = picks
 | 
				
			||||||
 | 
					        for method, picksdict in global_picksdict.items():
 | 
				
			||||||
 | 
					            self._pdfs[method] = PDFDictionary(picksdict)
 | 
				
			||||||
 | 
					        names = list(global_picksdict.keys())
 | 
				
			||||||
 | 
					        return names
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get(self, name):
 | 
					    def get(self, name):
 | 
				
			||||||
        return self._pdfs[name]
 | 
					        return self._pdfs[name]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -154,19 +154,19 @@ class ComparisonWidget(QWidget):
 | 
				
			|||||||
        _phases_combobox.currentIndexChanged.connect(self.prepareplot)
 | 
					        _phases_combobox.currentIndexChanged.connect(self.prepareplot)
 | 
				
			||||||
        self.widgets = _phases_combobox
 | 
					        self.widgets = _phases_combobox
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        _hist_checkbox = QCheckBox('Show histograms', self)
 | 
					        self._hist_checkbox = QCheckBox('Show histograms', self)
 | 
				
			||||||
        _hist_checkbox.setObjectName('histCheckBox')
 | 
					        self._hist_checkbox.setObjectName('histCheckBox')
 | 
				
			||||||
        _hist_checkbox.stateChanged.connect(self.plothist)
 | 
					        self._hist_checkbox.stateChanged.connect(self.plothist)
 | 
				
			||||||
        self.widgets = _hist_checkbox
 | 
					        self.widgets = self._hist_checkbox
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        _toolbar = QToolBar(self)
 | 
					        self._toolbar = QToolBar(self)
 | 
				
			||||||
        _toolbar.addWidget(_stats_combobox)
 | 
					        self._toolbar.addWidget(_stats_combobox)
 | 
				
			||||||
        _toolbar.addWidget(_phases_combobox)
 | 
					        self._toolbar.addWidget(_phases_combobox)
 | 
				
			||||||
        _toolbar.addWidget(_hist_checkbox)
 | 
					        self._toolbar.addWidget(self._hist_checkbox)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        _innerlayout.addWidget(self.canvas)
 | 
					        _innerlayout.addWidget(self.canvas)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        _outerlayout.addWidget(_toolbar)
 | 
					        _outerlayout.addWidget(self._toolbar)
 | 
				
			||||||
        _outerlayout.addLayout(_innerlayout)
 | 
					        _outerlayout.addLayout(_innerlayout)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # finally layout the entire widget
 | 
					        # finally layout the entire widget
 | 
				
			||||||
@ -232,6 +232,15 @@ class ComparisonWidget(QWidget):
 | 
				
			|||||||
        if name in self.widgets.keys():
 | 
					        if name in self.widgets.keys():
 | 
				
			||||||
            self._widgets[name] = widget
 | 
					            self._widgets[name] = widget
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def showToolbar(self):
 | 
				
			||||||
 | 
					        self._toolbar.show()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def hideToolbar(self):
 | 
				
			||||||
 | 
					        self._toolbar.hide()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def setHistboxChecked(self, bool):
 | 
				
			||||||
 | 
					        self._hist_checkbox.setChecked(bool)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def clf(self):
 | 
					    def clf(self):
 | 
				
			||||||
        self.canvas.figure.clf()
 | 
					        self.canvas.figure.clf()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -2036,10 +2045,10 @@ class MultiEventWidget(QWidget):
 | 
				
			|||||||
    '''
 | 
					    '''
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    '''
 | 
					    '''
 | 
				
			||||||
    def __init__(self, pickoptions=None, parent=None, windowflag=1):
 | 
					    def __init__(self, options=None, parent=None, windowflag=1):
 | 
				
			||||||
        QtGui.QWidget.__init__(self, parent, windowflag)
 | 
					        QtGui.QWidget.__init__(self, parent, windowflag)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.pickoptions = pickoptions
 | 
					        self.options = options
 | 
				
			||||||
        # self.pickoptions =[('current event', None),
 | 
					        # self.pickoptions =[('current event', None),
 | 
				
			||||||
        #                    ('tune events', None),
 | 
					        #                    ('tune events', None),
 | 
				
			||||||
        #                    ('test events', None),
 | 
					        #                    ('test events', None),
 | 
				
			||||||
@ -2077,8 +2086,9 @@ class MultiEventWidget(QWidget):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        self.start_button = QtGui.QPushButton('Start')
 | 
					        self.start_button = QtGui.QPushButton('Start')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        for index, (key, func) in enumerate(self.pickoptions):
 | 
					        for index, (key, func) in enumerate(self.options):
 | 
				
			||||||
            rb = QtGui.QRadioButton(key)
 | 
					            rb = QtGui.QRadioButton(key)
 | 
				
			||||||
 | 
					            rb.toggled.connect(self.check_rb_selection)
 | 
				
			||||||
            if index == 0:
 | 
					            if index == 0:
 | 
				
			||||||
                rb.setChecked(True)
 | 
					                rb.setChecked(True)
 | 
				
			||||||
            self.rb_dict[key] = rb
 | 
					            self.rb_dict[key] = rb
 | 
				
			||||||
@ -2088,12 +2098,12 @@ class MultiEventWidget(QWidget):
 | 
				
			|||||||
        self.rb_layout.addWidget(self.start_button)
 | 
					        self.rb_layout.addWidget(self.start_button)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.rb_layout.addWidget(QtGui.QWidget())
 | 
					        self.rb_layout.addWidget(QtGui.QWidget())
 | 
				
			||||||
        self.rb_layout.setStretch(len(self.pickoptions)+1, 1)
 | 
					        self.rb_layout.setStretch(len(self.options) + 1, 1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.main_layout.insertLayout(0, self.rb_layout)
 | 
					        self.main_layout.insertLayout(0, self.rb_layout)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def refresh_tooltips(self):
 | 
					    def refresh_tooltips(self):
 | 
				
			||||||
        for key, func in self.pickoptions:
 | 
					        for key, func in self.options:
 | 
				
			||||||
            eventlist = func()
 | 
					            eventlist = func()
 | 
				
			||||||
            if not type(eventlist) == list:
 | 
					            if not type(eventlist) == list:
 | 
				
			||||||
                eventlist = [eventlist]
 | 
					                eventlist = [eventlist]
 | 
				
			||||||
@ -2107,6 +2117,13 @@ class MultiEventWidget(QWidget):
 | 
				
			|||||||
            if not tooltip:
 | 
					            if not tooltip:
 | 
				
			||||||
                tooltip = 'No events for this selection'
 | 
					                tooltip = 'No events for this selection'
 | 
				
			||||||
            self.rb_dict[key].setToolTip(tooltip)
 | 
					            self.rb_dict[key].setToolTip(tooltip)
 | 
				
			||||||
 | 
					        self.check_rb_selection()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def check_rb_selection(self):
 | 
				
			||||||
 | 
					        for rb in self.rb_dict.values():
 | 
				
			||||||
 | 
					            if rb.isChecked():
 | 
				
			||||||
 | 
					                check_events = (rb.toolTip() == 'No events for this selection')
 | 
				
			||||||
 | 
					                self.start_button.setEnabled(not(check_events))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def enable(self, bool):
 | 
					    def enable(self, bool):
 | 
				
			||||||
        for rb in self.rb_dict.values():
 | 
					        for rb in self.rb_dict.values():
 | 
				
			||||||
@ -2120,8 +2137,8 @@ class AutoPickWidget(MultiEventWidget):
 | 
				
			|||||||
    '''
 | 
					    '''
 | 
				
			||||||
    '''
 | 
					    '''
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __init__(self, parent, pickoptions):
 | 
					    def __init__(self, parent, options):
 | 
				
			||||||
        MultiEventWidget.__init__(self, pickoptions, parent, 1)
 | 
					        MultiEventWidget.__init__(self, options, parent, 1)
 | 
				
			||||||
        self.connect_buttons()
 | 
					        self.connect_buttons()
 | 
				
			||||||
        self.init_plot_layout()
 | 
					        self.init_plot_layout()
 | 
				
			||||||
        self.init_log_layout()
 | 
					        self.init_log_layout()
 | 
				
			||||||
@ -2205,8 +2222,8 @@ class CompareEventsWidget(MultiEventWidget):
 | 
				
			|||||||
    '''
 | 
					    '''
 | 
				
			||||||
    '''
 | 
					    '''
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __init__(self, parent, pickoptions, eventdict, comparisons):
 | 
					    def __init__(self, parent, options, eventdict, comparisons):
 | 
				
			||||||
        MultiEventWidget.__init__(self, pickoptions, parent, 1)
 | 
					        MultiEventWidget.__init__(self, options, parent, 1)
 | 
				
			||||||
        self.eventdict = eventdict
 | 
					        self.eventdict = eventdict
 | 
				
			||||||
        self.comparisons = comparisons
 | 
					        self.comparisons = comparisons
 | 
				
			||||||
        self.init_eventbox()
 | 
					        self.init_eventbox()
 | 
				
			||||||
@ -2216,6 +2233,7 @@ class CompareEventsWidget(MultiEventWidget):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    def connect_buttons(self):
 | 
					    def connect_buttons(self):
 | 
				
			||||||
        self.start_button.clicked.connect(self.run)
 | 
					        self.start_button.clicked.connect(self.run)
 | 
				
			||||||
 | 
					        self.start_button.setText('Show Histograms')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def init_eventbox(self):
 | 
					    def init_eventbox(self):
 | 
				
			||||||
        self.eventbox_layout = QtGui.QHBoxLayout()
 | 
					        self.eventbox_layout = QtGui.QHBoxLayout()
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user