bugfix: add new tests and refactor get_none
This commit is contained in:
		
							parent
							
								
									221743fe20
								
							
						
					
					
						commit
						7fbc3bc5ae
					
				
							
								
								
									
										10
									
								
								autoPyLoT.py
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								autoPyLoT.py
									
									
									
									
									
								
							| @ -28,7 +28,7 @@ from pylot.core.util.dataprocessing import restitute_data, Metadata | |||||||
| from pylot.core.util.defaults import SEPARATOR | from pylot.core.util.defaults import SEPARATOR | ||||||
| from pylot.core.util.event import Event | from pylot.core.util.event import Event | ||||||
| from pylot.core.util.structure import DATASTRUCTURE | from pylot.core.util.structure import DATASTRUCTURE | ||||||
| from pylot.core.util.utils import get_None, trim_station_components, check4gapsAndRemove, check4doubled, \ | from pylot.core.util.utils import get_none, trim_station_components, check4gapsAndRemove, check4doubled, \ | ||||||
|     check4rotated |     check4rotated | ||||||
| from pylot.core.util.version import get_git_version as _getVersionString | from pylot.core.util.version import get_git_version as _getVersionString | ||||||
| 
 | 
 | ||||||
| @ -91,9 +91,9 @@ def autoPyLoT(input_dict=None, parameter=None, inputfile=None, fnames=None, even | |||||||
|                                                               sp=sp_info) |                                                               sp=sp_info) | ||||||
|     print(splash) |     print(splash) | ||||||
| 
 | 
 | ||||||
|     parameter = get_None(parameter) |     parameter = get_none(parameter) | ||||||
|     inputfile = get_None(inputfile) |     inputfile = get_none(inputfile) | ||||||
|     eventid = get_None(eventid) |     eventid = get_none(eventid) | ||||||
| 
 | 
 | ||||||
|     fig_dict = None |     fig_dict = None | ||||||
|     fig_dict_wadatijack = None |     fig_dict_wadatijack = None | ||||||
| @ -154,7 +154,7 @@ def autoPyLoT(input_dict=None, parameter=None, inputfile=None, fnames=None, even | |||||||
|         datastructure.setExpandFields(exf) |         datastructure.setExpandFields(exf) | ||||||
| 
 | 
 | ||||||
|         # check if default location routine NLLoc is available and all stations are used |         # check if default location routine NLLoc is available and all stations are used | ||||||
|         if get_None(parameter['nllocbin']) and station == 'all': |         if get_none(parameter['nllocbin']) and station == 'all': | ||||||
|             locflag = 1 |             locflag = 1 | ||||||
|             # get NLLoc-root path |             # get NLLoc-root path | ||||||
|             nllocroot = parameter.get('nllocroot') |             nllocroot = parameter.get('nllocroot') | ||||||
|  | |||||||
| @ -22,7 +22,7 @@ from pylot.core.pick.picker import AICPicker, PragPicker | |||||||
| from pylot.core.pick.utils import checksignallength, checkZ4S, earllatepicker, \ | from pylot.core.pick.utils import checksignallength, checkZ4S, earllatepicker, \ | ||||||
|     getSNR, fmpicker, checkPonsets, wadaticheck, get_quality_class, PickingFailedException, MissingTraceException |     getSNR, fmpicker, checkPonsets, wadaticheck, get_quality_class, PickingFailedException, MissingTraceException | ||||||
| from pylot.core.util.utils import getPatternLine, gen_Pool, \ | from pylot.core.util.utils import getPatternLine, gen_Pool, \ | ||||||
|     get_bool, identifyPhaseID, get_None, correct_iplot |     get_bool, identifyPhaseID, get_none, correct_iplot | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def autopickevent(data, param, iplot=0, fig_dict=None, fig_dict_wadatijack=None, ncores=0, metadata=None, origin=None): | def autopickevent(data, param, iplot=0, fig_dict=None, fig_dict_wadatijack=None, ncores=0, metadata=None, origin=None): | ||||||
| @ -258,7 +258,7 @@ class AutopickStation(object): | |||||||
|         self.pickparams = copy.deepcopy(pickparam) |         self.pickparams = copy.deepcopy(pickparam) | ||||||
|         self.verbose = verbose |         self.verbose = verbose | ||||||
|         self.iplot = correct_iplot(iplot) |         self.iplot = correct_iplot(iplot) | ||||||
|         self.fig_dict = get_None(fig_dict) |         self.fig_dict = get_none(fig_dict) | ||||||
|         self.metadata = metadata |         self.metadata = metadata | ||||||
|         self.origin = origin |         self.origin = origin | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -15,7 +15,7 @@ import numpy as np | |||||||
| from obspy.core import Stream, UTCDateTime | from obspy.core import Stream, UTCDateTime | ||||||
| from scipy.signal import argrelmax | from scipy.signal import argrelmax | ||||||
| 
 | 
 | ||||||
| from pylot.core.util.utils import get_bool, get_None, SetChannelComponents | from pylot.core.util.utils import get_bool, get_none, SetChannelComponents | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def earllatepicker(X, nfac, TSNR, Pick1, iplot=0, verbosity=1, fig=None, linecolor='k'): | def earllatepicker(X, nfac, TSNR, Pick1, iplot=0, verbosity=1, fig=None, linecolor='k'): | ||||||
| @ -136,7 +136,7 @@ def earllatepicker(X, nfac, TSNR, Pick1, iplot=0, verbosity=1, fig=None, linecol | |||||||
|     PickError = symmetrize_error(diffti_te, diffti_tl) |     PickError = symmetrize_error(diffti_te, diffti_tl) | ||||||
| 
 | 
 | ||||||
|     if iplot > 1: |     if iplot > 1: | ||||||
|         if get_None(fig) is None: |         if get_none(fig) is None: | ||||||
|             fig = plt.figure()  # iplot) |             fig = plt.figure()  # iplot) | ||||||
|             plt_flag = 1 |             plt_flag = 1 | ||||||
|         fig._tight = True |         fig._tight = True | ||||||
| @ -344,7 +344,7 @@ def fmpicker(Xraw, Xfilt, pickwin, Pick, iplot=0, fig=None, linecolor='k'): | |||||||
|         print("fmpicker: Found polarity %s" % FM) |         print("fmpicker: Found polarity %s" % FM) | ||||||
| 
 | 
 | ||||||
|     if iplot > 1: |     if iplot > 1: | ||||||
|         if get_None(fig) is None: |         if get_none(fig) is None: | ||||||
|             fig = plt.figure()  # iplot) |             fig = plt.figure()  # iplot) | ||||||
|             plt_flag = 1 |             plt_flag = 1 | ||||||
|         fig._tight = True |         fig._tight = True | ||||||
| @ -868,7 +868,7 @@ def checksignallength(X, pick, minsiglength, pickparams, iplot=0, fig=None, line | |||||||
|             returnflag = 0 |             returnflag = 0 | ||||||
| 
 | 
 | ||||||
|     if iplot > 1: |     if iplot > 1: | ||||||
|         if get_None(fig) is None: |         if get_none(fig) is None: | ||||||
|             fig = plt.figure()  # iplot) |             fig = plt.figure()  # iplot) | ||||||
|             plt_flag = 1 |             plt_flag = 1 | ||||||
|         fig._tight = True |         fig._tight = True | ||||||
| @ -1213,14 +1213,14 @@ def checkZ4S(X, pick, pickparams, iplot, fig=None, linecolor='k'): | |||||||
|             t = np.linspace(diff_dict[key], trace.stats.endtime - trace.stats.starttime + diff_dict[key], |             t = np.linspace(diff_dict[key], trace.stats.endtime - trace.stats.starttime + diff_dict[key], | ||||||
|                             trace.stats.npts) |                             trace.stats.npts) | ||||||
|             if i == 0: |             if i == 0: | ||||||
|                 if get_None(fig) is None: |                 if get_none(fig) is None: | ||||||
|                     fig = plt.figure()  # self.iplot) ### WHY? MP MP |                     fig = plt.figure()  # self.iplot) ### WHY? MP MP | ||||||
|                     plt_flag = 1 |                     plt_flag = 1 | ||||||
|                 ax1 = fig.add_subplot(3, 1, i + 1) |                 ax1 = fig.add_subplot(3, 1, i + 1) | ||||||
|                 ax = ax1 |                 ax = ax1 | ||||||
|                 ax.set_title('CheckZ4S, Station %s' % zdat[0].stats.station) |                 ax.set_title('CheckZ4S, Station %s' % zdat[0].stats.station) | ||||||
|             else: |             else: | ||||||
|                 if get_None(fig) is None: |                 if get_none(fig) is None: | ||||||
|                     fig = plt.figure()  # self.iplot) ### WHY? MP MP |                     fig = plt.figure()  # self.iplot) ### WHY? MP MP | ||||||
|                     plt_flag = 1 |                     plt_flag = 1 | ||||||
|                 ax = fig.add_subplot(3, 1, i + 1, sharex=ax1) |                 ax = fig.add_subplot(3, 1, i + 1, sharex=ax1) | ||||||
| @ -1494,7 +1494,7 @@ def getQualityFromUncertainty(uncertainty, Errors): | |||||||
|     # set initial quality to 4 (worst) and change only if one condition is hit |     # set initial quality to 4 (worst) and change only if one condition is hit | ||||||
|     quality = 4 |     quality = 4 | ||||||
| 
 | 
 | ||||||
|     if get_None(uncertainty) is None: |     if get_none(uncertainty) is None: | ||||||
|         return quality |         return quality | ||||||
| 
 | 
 | ||||||
|     if uncertainty <= Errors[0]: |     if uncertainty <= Errors[0]: | ||||||
|  | |||||||
| @ -315,15 +315,32 @@ def fnConstructor(s): | |||||||
|     return fn |     return fn | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def get_None(value): | def get_none(value): | ||||||
|     """ |     """ | ||||||
|     Convert "None" to None |     Convert "None" to None | ||||||
|     :param value: |     :param value: | ||||||
|     :type value: str, bool |     :type value: str, NoneType | ||||||
|     :return: |     :return: | ||||||
|     :rtype: bool |     :rtype: type(value) or NoneType | ||||||
|  | 
 | ||||||
|  |     >>> st = read() | ||||||
|  |     >>> print(get_none(st)) | ||||||
|  |     3 Trace(s) in Stream: | ||||||
|  |     BW.RJOB..EHZ | 2009-08-24T00:20:03.000000Z - 2009-08-24T00:20:32.990000Z | 100.0 Hz, 3000 samples | ||||||
|  |     BW.RJOB..EHN | 2009-08-24T00:20:03.000000Z - 2009-08-24T00:20:32.990000Z | 100.0 Hz, 3000 samples | ||||||
|  |     BW.RJOB..EHE | 2009-08-24T00:20:03.000000Z - 2009-08-24T00:20:32.990000Z | 100.0 Hz, 3000 samples | ||||||
|  |     >>> get_none('Stream') | ||||||
|  |     'Stream' | ||||||
|  |     >>> get_none(0) | ||||||
|  |     0 | ||||||
|  |     >>> get_none(0.) | ||||||
|  |     0.0 | ||||||
|  |     >>> print(get_none('None')) | ||||||
|  |     None | ||||||
|  |     >>> print(get_none(None)) | ||||||
|  |     None | ||||||
|     """ |     """ | ||||||
|     if value == 'None': |     if value is None or (type(value) is str and value == 'None'): | ||||||
|         return None |         return None | ||||||
|     else: |     else: | ||||||
|         return value |         return value | ||||||
|  | |||||||
| @ -53,7 +53,7 @@ from pylot.core.util.utils import prepTimeAxis, full_range, demeanTrace, isSorte | |||||||
|     pick_linestyle_plt, pick_color_plt, \ |     pick_linestyle_plt, pick_color_plt, \ | ||||||
|     check4rotated, check4doubled, check_for_gaps_and_merge, check_for_nan, identifyPhase, \ |     check4rotated, check4doubled, check_for_gaps_and_merge, check_for_nan, identifyPhase, \ | ||||||
|     loopIdentifyPhase, trim_station_components, transformFilteroptions2String, \ |     loopIdentifyPhase, trim_station_components, transformFilteroptions2String, \ | ||||||
|     identifyPhaseID, get_bool, get_None, pick_color, getAutoFilteroptions, SetChannelComponents, \ |     identifyPhaseID, get_bool, get_none, pick_color, getAutoFilteroptions, SetChannelComponents, \ | ||||||
|     station_id_remove_channel, get_pylot_eventfile_with_extension, get_possible_pylot_eventfile_extensions |     station_id_remove_channel, get_pylot_eventfile_with_extension, get_possible_pylot_eventfile_extensions | ||||||
| from autoPyLoT import autoPyLoT | from autoPyLoT import autoPyLoT | ||||||
| from pylot.core.util.thread import Thread | from pylot.core.util.thread import Thread | ||||||
| @ -860,26 +860,13 @@ class WaveformWidgetPG(QtWidgets.QWidget): | |||||||
|     def clearPlotDict(self): |     def clearPlotDict(self): | ||||||
|         self.plotdict = dict() |         self.plotdict = dict() | ||||||
| 
 | 
 | ||||||
|     def plotWFData(self, wfdata, wfsyn=None, title=None, scaleddata=False, mapping=True, |     def plotWFData(self, wfdata, wfsyn=None, title=None, zoomx=None, zoomy=None, | ||||||
|                    component='*', nth_sample=1, verbosity=0, method='normal', gain=1., shift_syn=0.2): |                    noiselevel=None, scaleddata=False, mapping=True, | ||||||
|         def station_sort(nslc): |                    component='*', nth_sample=1, iniPick=None, verbosity=0, | ||||||
|             """Try to sort after station integer in case of a line array (e.g. active seismics)""" |                    method='normal', gain=1.): | ||||||
|             try: |  | ||||||
|                 rval = sorted(nslc, key=lambda x: int(x.split('.')[1])) |  | ||||||
|                 return rval |  | ||||||
|             except ValueError as e: |  | ||||||
|                 # this is the standard case for seismological stations |  | ||||||
|                 pass |  | ||||||
|             except Exception as e: |  | ||||||
|                 print(f'Sorting by station integer failed with unknown exception: {e}') |  | ||||||
| 
 |  | ||||||
|             # fallback to default sorting |  | ||||||
|             return sorted(nslc) |  | ||||||
| 
 |  | ||||||
|         if not wfdata: |         if not wfdata: | ||||||
|             print('Nothing to plot.') |             print('Nothing to plot.') | ||||||
|             return |             return | ||||||
| 
 |  | ||||||
|         self.title = title |         self.title = title | ||||||
|         self.clearPlotDict() |         self.clearPlotDict() | ||||||
|         self.wfstart, self.wfend = full_range(wfdata) |         self.wfstart, self.wfend = full_range(wfdata) | ||||||
| @ -897,12 +884,14 @@ class WaveformWidgetPG(QtWidgets.QWidget): | |||||||
|         else: |         else: | ||||||
|             st_select = wfdata |             st_select = wfdata | ||||||
| 
 | 
 | ||||||
|  |         st_select, gaps = merge_stream(st_select) | ||||||
|  | 
 | ||||||
|         # list containing tuples of network, station, channel (for sorting) |         # list containing tuples of network, station, channel (for sorting) | ||||||
|         nslc = [] |         nslc = [] | ||||||
|         for trace in st_select: |         for trace in st_select: | ||||||
|             nslc.append( |             nslc.append( | ||||||
|                 trace.get_id())  # (trace.stats.network, trace.stats.station, trace.stats.location trace.stats.channel)) |                 trace.get_id())  # (trace.stats.network, trace.stats.station, trace.stats.location trace.stats.channel)) | ||||||
|         nslc = station_sort(nslc) |         nslc.sort() | ||||||
|         nslc.reverse() |         nslc.reverse() | ||||||
|         plots = [] |         plots = [] | ||||||
| 
 | 
 | ||||||
| @ -966,7 +955,7 @@ class WaveformWidgetPG(QtWidgets.QWidget): | |||||||
|         self.ylabel = '' |         self.ylabel = '' | ||||||
|         self.setXLims([0, self.wfend - self.wfstart]) |         self.setXLims([0, self.wfend - self.wfstart]) | ||||||
|         self.setYLims([0.5, nmax + 0.5]) |         self.setYLims([0.5, nmax + 0.5]) | ||||||
|         return plots |         return plots, gaps | ||||||
| 
 | 
 | ||||||
|     def minMax(self, trace, time_ax): |     def minMax(self, trace, time_ax): | ||||||
|         ''' |         ''' | ||||||
| @ -988,7 +977,7 @@ class WaveformWidgetPG(QtWidgets.QWidget): | |||||||
|         min_ = data.min(axis=1) |         min_ = data.min(axis=1) | ||||||
|         max_ = data.max(axis=1) |         max_ = data.max(axis=1) | ||||||
|         if remaining_samples: |         if remaining_samples: | ||||||
|             extreme_values = np.empty((npixel + 1, 2), dtype=float) |             extreme_values = np.empty((npixel + 1, 2), dtype=np.float) | ||||||
|             extreme_values[:-1, 0] = min_ |             extreme_values[:-1, 0] = min_ | ||||||
|             extreme_values[:-1, 1] = max_ |             extreme_values[:-1, 1] = max_ | ||||||
|             extreme_values[-1, 0] = \ |             extreme_values[-1, 0] = \ | ||||||
| @ -996,7 +985,7 @@ class WaveformWidgetPG(QtWidgets.QWidget): | |||||||
|             extreme_values[-1, 1] = \ |             extreme_values[-1, 1] = \ | ||||||
|                 trace.data[-remaining_samples:].max() |                 trace.data[-remaining_samples:].max() | ||||||
|         else: |         else: | ||||||
|             extreme_values = np.empty((npixel, 2), dtype=float) |             extreme_values = np.empty((npixel, 2), dtype=np.float) | ||||||
|             extreme_values[:, 0] = min_ |             extreme_values[:, 0] = min_ | ||||||
|             extreme_values[:, 1] = max_ |             extreme_values[:, 1] = max_ | ||||||
|         data = extreme_values.flatten() |         data = extreme_values.flatten() | ||||||
| @ -1566,114 +1555,6 @@ class PylotCanvas(FigureCanvas): | |||||||
|         self.draw() |         self.draw() | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class SearchFileByExtensionDialog(QtWidgets.QDialog): |  | ||||||
|     def __init__(self, parent=None, label='Text: ', default_text='.xml', events=None): |  | ||||||
|         super(SearchFileByExtensionDialog, self).__init__(parent) |  | ||||||
|         self.events = events |  | ||||||
|         self.filepaths = [] |  | ||||||
|         self.file_extensions = [] |  | ||||||
|         self.default_text = default_text |  | ||||||
|         self.label = label |  | ||||||
|         self.setButtons() |  | ||||||
|         self.setupUi() |  | ||||||
|         self.connectSignals() |  | ||||||
|         self.showPaths() |  | ||||||
|         self.refreshSelectionBox() |  | ||||||
|         self.refresh_timer = QTimer(self) |  | ||||||
|         self.refresh_timer.timeout.connect(self.showPaths) |  | ||||||
|         self.refresh_timer.start(10000) |  | ||||||
| 
 |  | ||||||
|         self.resize(800, 450) |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|     def setupUi(self): |  | ||||||
|         self.main_layout = QtWidgets.QVBoxLayout() |  | ||||||
|         self.header_layout = QtWidgets.QHBoxLayout() |  | ||||||
|         # |  | ||||||
|         self.setLayout(self.main_layout) |  | ||||||
| 
 |  | ||||||
|         # widgets inside the dialog |  | ||||||
|         self.textLabel = QtWidgets.QLabel(self.label) |  | ||||||
|         self.comboBox = QtWidgets.QComboBox() |  | ||||||
|         self.comboBox.addItem(self.default_text) |  | ||||||
|         self.comboBox.setEditable(True) |  | ||||||
| 
 |  | ||||||
|         # optional search button, currently disabled. List refreshed when text changes |  | ||||||
|         self.searchButton = QtWidgets.QPushButton('Search') |  | ||||||
|         self.searchButton.setVisible(False) |  | ||||||
| 
 |  | ||||||
|         self.tableWidget = QtWidgets.QTableWidget() |  | ||||||
|         tableWidget = self.tableWidget |  | ||||||
|         tableWidget.setColumnCount(3) |  | ||||||
|         tableWidget.setRowCount(len(self.events)) |  | ||||||
|         tableWidget.setHorizontalHeaderLabels(('Event ID', 'Filename', 'Last modified')) |  | ||||||
|         tableWidget.setEditTriggers(tableWidget.NoEditTriggers) |  | ||||||
|         tableWidget.setSortingEnabled(True) |  | ||||||
|         header = tableWidget.horizontalHeader() |  | ||||||
|         header.setSectionResizeMode(QtWidgets.QHeaderView.ResizeToContents) |  | ||||||
|         header.setStretchLastSection(True) |  | ||||||
| 
 |  | ||||||
|         self.statusText = QtWidgets.QLabel() |  | ||||||
| 
 |  | ||||||
|         self.header_layout.addWidget(self.textLabel) |  | ||||||
|         self.header_layout.addWidget(self.comboBox) |  | ||||||
|         self.header_layout.addWidget(self.searchButton) |  | ||||||
| 
 |  | ||||||
|         self.main_layout.addLayout(self.header_layout) |  | ||||||
|         self.main_layout.addWidget(self.tableWidget) |  | ||||||
|         self.main_layout.addWidget(self.statusText) |  | ||||||
|         self.main_layout.addWidget(self._buttonbox) |  | ||||||
| 
 |  | ||||||
|     def showPaths(self): |  | ||||||
|         self.filepaths = [] |  | ||||||
|         fext = self.comboBox.currentText() |  | ||||||
|         self.tableWidget.clearContents() |  | ||||||
|         for index, event in enumerate(self.events): |  | ||||||
|             filename = get_pylot_eventfile_with_extension(event, fext) |  | ||||||
|             self.tableWidget.setItem(index, 0, QtWidgets.QTableWidgetItem(f'{event.pylot_id}')) |  | ||||||
|             if filename: |  | ||||||
|                 self.filepaths.append(filename) |  | ||||||
|                 ts = int(os.path.getmtime(filename)) |  | ||||||
| 
 |  | ||||||
|                 # create QTableWidgetItems of filepath and last modification time |  | ||||||
|                 fname_item = QtWidgets.QTableWidgetItem(f'{os.path.split(filename)[-1]}') |  | ||||||
|                 ts_item = QtWidgets.QTableWidgetItem(f'{datetime.datetime.fromtimestamp(ts)}') |  | ||||||
|                 self.tableWidget.setItem(index, 1, fname_item) |  | ||||||
|                 self.tableWidget.setItem(index, 2, ts_item) |  | ||||||
| 
 |  | ||||||
|         # TODO: Idea -> only refresh if table contents changed. Use selection to load only a subset of files |  | ||||||
|         if len(self.filepaths) > 0: |  | ||||||
|             status_text = f'Found {len(self.filepaths)} eventfiles. Do you want to load them?' |  | ||||||
|         else: |  | ||||||
|             status_text = 'Did not find any files for specified file mask.' |  | ||||||
|         self.statusText.setText(status_text) |  | ||||||
| 
 |  | ||||||
|     def refreshSelectionBox(self): |  | ||||||
|         fext = self.comboBox.currentText() |  | ||||||
|         self.file_extensions = [fext] |  | ||||||
| 
 |  | ||||||
|         for event in self.events: |  | ||||||
|             extensions = get_possible_pylot_eventfile_extensions(event, '*.xml') |  | ||||||
|             for ext in extensions: |  | ||||||
|                 if not ext in self.file_extensions: |  | ||||||
|                     self.file_extensions.append(ext) |  | ||||||
| 
 |  | ||||||
|         self.comboBox.clear() |  | ||||||
|         for ext in sorted(self.file_extensions): |  | ||||||
|             self.comboBox.addItem(ext) |  | ||||||
| 
 |  | ||||||
|     def setButtons(self): |  | ||||||
|         self._buttonbox = QDialogButtonBox(QDialogButtonBox.Ok | |  | ||||||
|                                            QDialogButtonBox.Cancel) |  | ||||||
| 
 |  | ||||||
|     def connectSignals(self): |  | ||||||
|         self._buttonbox.accepted.connect(self.accept) |  | ||||||
|         self._buttonbox.rejected.connect(self.reject) |  | ||||||
|         self.comboBox.editTextChanged.connect(self.showPaths) |  | ||||||
|         self.searchButton.clicked.connect(self.showPaths) |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| class SingleTextLineDialog(QtWidgets.QDialog): | class SingleTextLineDialog(QtWidgets.QDialog): | ||||||
|     def __init__(self, parent=None, label='Text: ', default_text='.xml'): |     def __init__(self, parent=None, label='Text: ', default_text='.xml'): | ||||||
|         super(SingleTextLineDialog, self).__init__(parent) |         super(SingleTextLineDialog, self).__init__(parent) | ||||||
| @ -1905,7 +1786,7 @@ class PickDlg(QDialog): | |||||||
| 
 | 
 | ||||||
|         # init expected picks using obspy Taup |         # init expected picks using obspy Taup | ||||||
|         try: |         try: | ||||||
|             if self.metadata and model != "None": |             if self.metadata and model is not None: | ||||||
|                 self.model = TauPyModel(model) |                 self.model = TauPyModel(model) | ||||||
|                 self.get_arrivals() |                 self.get_arrivals() | ||||||
|                 self.drawArrivals() |                 self.drawArrivals() | ||||||
| @ -2632,9 +2513,7 @@ class PickDlg(QDialog): | |||||||
|         data.normalize() |         data.normalize() | ||||||
|         if not data: |         if not data: | ||||||
|             QtWidgets.QMessageBox.warning(self, 'No channel to plot', |             QtWidgets.QMessageBox.warning(self, 'No channel to plot', | ||||||
|                                           'No channel to plot for phase: {}. ' |                                           'No channel to plot for phase: {}.'.format(phase)) | ||||||
|                                           'Make sure to select the correct channels for P and S ' |  | ||||||
|                                           'in the menu in the top panel.'.format(phase)) |  | ||||||
|             self.leave_picking_mode() |             self.leave_picking_mode() | ||||||
|             return |             return | ||||||
| 
 | 
 | ||||||
| @ -2774,7 +2653,7 @@ class PickDlg(QDialog): | |||||||
|             minFMSNR = parameter.get('minFMSNR') |             minFMSNR = parameter.get('minFMSNR') | ||||||
|             quality = get_quality_class(spe, parameter.get('timeerrorsP')) |             quality = get_quality_class(spe, parameter.get('timeerrorsP')) | ||||||
|             if quality <= minFMweight and snr >= minFMSNR: |             if quality <= minFMweight and snr >= minFMSNR: | ||||||
|                 FM = fmpicker(self.getWFData().select(channel=channel).copy(), wfdata.copy(), parameter.get('fmpickwin'), |                 FM = fmpicker(self.getWFData().select(channel=channel), wfdata, parameter.get('fmpickwin'), | ||||||
|                               pick - stime_diff) |                               pick - stime_diff) | ||||||
| 
 | 
 | ||||||
|         # save pick times for actual phase |         # save pick times for actual phase | ||||||
| @ -3687,9 +3566,8 @@ class TuneAutopicker(QWidget): | |||||||
|             # wfdat = remove_underscores(wfdat) |             # wfdat = remove_underscores(wfdat) | ||||||
|             # rotate misaligned stations to ZNE |             # rotate misaligned stations to ZNE | ||||||
|             # check for gaps and doubled channels |             # check for gaps and doubled channels | ||||||
|             wfdat, _ = check_for_gaps_and_merge(wfdat) |             wfdat, gaps = merge_stream(wfdat) | ||||||
|             # check for nans |             # check4gaps(wfdat) | ||||||
|             check_for_nan(wfdat) |  | ||||||
|             check4doubled(wfdat) |             check4doubled(wfdat) | ||||||
|             wfdat = check4rotated(wfdat, self.parent().metadata, verbosity=0) |             wfdat = check4rotated(wfdat, self.parent().metadata, verbosity=0) | ||||||
|             # trim station components to same start value |             # trim station components to same start value | ||||||
| @ -3733,14 +3611,14 @@ class TuneAutopicker(QWidget): | |||||||
|         self.listWidget.scrollToBottom() |         self.listWidget.scrollToBottom() | ||||||
| 
 | 
 | ||||||
|     def get_current_event(self): |     def get_current_event(self): | ||||||
|         path = self.get_current_event_fp() |         path = self.eventBox.currentText() | ||||||
|         return self.parent().project.getEventFromPath(path) |         return self.parent().project.getEventFromPath(path) | ||||||
| 
 | 
 | ||||||
|     def get_current_event_name(self): |     def get_current_event_name(self): | ||||||
|         return self.eventBox.currentText().split('/')[-1].rstrip('*') |         return self.eventBox.currentText().split('/')[-1].split('*')[0] | ||||||
| 
 | 
 | ||||||
|     def get_current_event_fp(self): |     def get_current_event_fp(self): | ||||||
|         return self.eventBox.currentText().rstrip('*') |         return self.eventBox.currentText().split('*')[0] | ||||||
| 
 | 
 | ||||||
|     def get_current_event_picks(self, station): |     def get_current_event_picks(self, station): | ||||||
|         event = self.get_current_event() |         event = self.get_current_event() | ||||||
| @ -3844,7 +3722,6 @@ class TuneAutopicker(QWidget): | |||||||
|         st = self.data.getWFData() |         st = self.data.getWFData() | ||||||
|         tr = st.select(station=self.get_current_station())[0] |         tr = st.select(station=self.get_current_station())[0] | ||||||
|         starttime = tr.stats.starttime |         starttime = tr.stats.starttime | ||||||
|         # create two lists with figure names and subindices (for subplots) to get the correct axes |  | ||||||
|         p_axes = [ |         p_axes = [ | ||||||
|             ('mainFig', 0), |             ('mainFig', 0), | ||||||
|             ('aicFig', 0), |             ('aicFig', 0), | ||||||
| @ -4792,8 +4669,8 @@ class InputsTab(PropTab): | |||||||
|         self.tstopBox = QSpinBox() |         self.tstopBox = QSpinBox() | ||||||
|         for spinbox in [self.tstartBox, self.tstopBox]: |         for spinbox in [self.tstartBox, self.tstopBox]: | ||||||
|             spinbox.setRange(-99999, 99999) |             spinbox.setRange(-99999, 99999) | ||||||
|         self.tstartBox.setValue(float(settings.value('tstart')) if get_None(settings.value('tstart')) else 0) |         self.tstartBox.setValue(float(settings.value('tstart')) if get_none(settings.value('tstart')) else 0) | ||||||
|         self.tstopBox.setValue(float(settings.value('tstop')) if get_None(settings.value('tstop')) else 1e6) |         self.tstopBox.setValue(float(settings.value('tstop')) if get_none(settings.value('tstop')) else 1e6) | ||||||
|         self.cuttimesLayout.addWidget(self.tstartBox, 10) |         self.cuttimesLayout.addWidget(self.tstartBox, 10) | ||||||
|         self.cuttimesLayout.addWidget(QLabel('[s] and'), 0) |         self.cuttimesLayout.addWidget(QLabel('[s] and'), 0) | ||||||
|         self.cuttimesLayout.addWidget(self.tstopBox, 10) |         self.cuttimesLayout.addWidget(self.tstopBox, 10) | ||||||
| @ -5786,20 +5663,9 @@ class ChooseWaveFormWindow(QWidget): | |||||||
|     def submit(self): |     def submit(self): | ||||||
|         matplotlib.pyplot.close(self.currentSpectro) |         matplotlib.pyplot.close(self.currentSpectro) | ||||||
|         t = self.chooseBoxTraces.currentText() + " " + self.chooseBoxComponent.currentText() |         t = self.chooseBoxTraces.currentText() + " " + self.chooseBoxComponent.currentText() | ||||||
|         self.applyFFT() |         self.currentSpectro = self.traces[ | ||||||
| 
 |             self.chooseBoxTraces.currentText()[3:]][self.chooseBoxComponent.currentText()].spectrogram(show=False, title=t) | ||||||
|     def applyFFT(self, trace): |         self.currentSpectro.show() | ||||||
|         tra = self.traces[self.chooseBoxTraces.currentText()[3:]]['Z'] |  | ||||||
|         transformed = abs(np.fft.rfft(tra.data)) |  | ||||||
|         print ( transformed ) |  | ||||||
|         matplotlib.pyplot.plot ( transformed ) |  | ||||||
|         matplotlib.pyplot.show() |  | ||||||
| 
 |  | ||||||
|     def applyFFTs(self, tra): |  | ||||||
|         transformed = abs(np.fft.rfft(tra.data)) |  | ||||||
|         print ( transformed ) |  | ||||||
|         matplotlib.pyplot.plot ( transformed ) |  | ||||||
|         matplotlib.pyplot.show() |  | ||||||
| 
 | 
 | ||||||
|     def submitN(self): |     def submitN(self): | ||||||
|         matplotlib.pyplot.close(self.currentSpectro) |         matplotlib.pyplot.close(self.currentSpectro) | ||||||
| @ -5815,6 +5681,13 @@ class ChooseWaveFormWindow(QWidget): | |||||||
|             self.chooseBoxTraces.currentText()[3:]]['E'].spectrogram(show=False, title=t) |             self.chooseBoxTraces.currentText()[3:]]['E'].spectrogram(show=False, title=t) | ||||||
|         self.currentSpectro.show() |         self.currentSpectro.show() | ||||||
| 
 | 
 | ||||||
|  |     def submitZ(self): | ||||||
|  |         matplotlib.pyplot.close(self.currentSpectro) | ||||||
|  |         t = self.chooseBoxTraces.currentText() + " " + self.chooseBoxComponent.currentText() | ||||||
|  |         self.currentSpectro = self.traces[ | ||||||
|  |             self.chooseBoxTraces.currentText()[3:]]['Z'].spectrogram(show=False, title=t) | ||||||
|  |         self.currentSpectro.show() | ||||||
|  | 
 | ||||||
|     # Creates a QComboBox and adds all traces provided |     # Creates a QComboBox and adds all traces provided | ||||||
|     def createComboBoxTraces(self): |     def createComboBoxTraces(self): | ||||||
|         if len(self.wFs) <= 0: |         if len(self.wFs) <= 0: | ||||||
| @ -5841,55 +5714,6 @@ class ChooseWaveFormWindow(QWidget): | |||||||
|         pass |         pass | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class SpectrogramTab(QWidget): |  | ||||||
|     def __init__(self, traces, wfdata, parent=None): |  | ||||||
|         super(SpectrogramTab, self).__init__(parent) |  | ||||||
|         self.setupUi() |  | ||||||
|         self.traces = traces |  | ||||||
|         self.wfdata = wfdata |  | ||||||
| 
 |  | ||||||
|     def setupUi(self): |  | ||||||
|         pass |  | ||||||
|     def makeSpecFig(self, direction = 'Z', height = 0, width = 0, parent = None): |  | ||||||
| 
 |  | ||||||
|         i = 0 |  | ||||||
|         grams = [] |  | ||||||
|         figure, axis = matplotlib.pyplot.subplots(len(self.traces), sharex=True) |  | ||||||
| 
 |  | ||||||
|         start, end = full_range(self.wfdata) |  | ||||||
| 
 |  | ||||||
|         if height != 0 and width != 0: |  | ||||||
|             figure.figsize = (width, height) |  | ||||||
|             figure.set_figwidth = width |  | ||||||
|             figure.set_figheight = height |  | ||||||
| 
 |  | ||||||
|         #figure.tight_layout() |  | ||||||
| 
 |  | ||||||
|         for t in self.traces: |  | ||||||
|             tra = self.traces[t][direction] |  | ||||||
|             #print(start, end) |  | ||||||
| 
 |  | ||||||
|             # Set Title |  | ||||||
|             if i == 0: |  | ||||||
|                 if direction == 'Z': |  | ||||||
|                     figure.suptitle("section: vertical components") |  | ||||||
|                 elif direction == 'E': |  | ||||||
|                     figure.suptitle("section: east-west components") |  | ||||||
|                 elif direction == 'N': |  | ||||||
|                     figure.suptitle("section: north-south components") |  | ||||||
|                 axis[i].vlines(0, axis[i].get_ylim()[0], axis[i].get_ylim()[1], |  | ||||||
|                           colors='m', linestyles='dashed', |  | ||||||
|                           linewidth=2) |  | ||||||
| 
 |  | ||||||
|             grams.append(tra.spectrogram(show=False, axes=axis[i])) |  | ||||||
|             i+=1 |  | ||||||
| 
 |  | ||||||
|         #figure.setXLims([0, end - start]) |  | ||||||
|         figure.set_tight_layout(True) |  | ||||||
|         fC = FigureCanvas(figure) |  | ||||||
|         return fC |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| if __name__ == '__main__': | if __name__ == '__main__': | ||||||
|     import doctest |     import doctest | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user