From 7a0d3486a6d88e57cc4fcf806204a43db44cddd6 Mon Sep 17 00:00:00 2001 From: Marcel Date: Mon, 16 Jul 2018 14:21:41 +0200 Subject: [PATCH] [cleanup] code cleanup by PyCharm --- PyLoT.py | 115 ++++++++++++------------- autoPyLoT.py | 12 +-- pylot/core/analysis/magnitude.py | 20 +++-- pylot/core/io/data.py | 4 +- pylot/core/io/default_parameters.py | 10 +-- pylot/core/io/phases.py | 29 +++---- pylot/core/pick/autopick.py | 29 +++---- pylot/core/pick/picker.py | 57 +++++++------ pylot/core/pick/utils.py | 62 ++++++++------ pylot/core/util/array_map.py | 5 +- pylot/core/util/dataprocessing.py | 18 +--- pylot/core/util/defaults.py | 1 - pylot/core/util/obspyDMT_interface.py | 4 +- pylot/core/util/thread.py | 15 ++-- pylot/core/util/utils.py | 17 ++-- pylot/core/util/widgets.py | 116 +++++++++++++------------- pylot/styles/style_settings.py | 15 ++-- tests/test_Metadata/test_Metadata.py | 25 ++++-- 18 files changed, 285 insertions(+), 269 deletions(-) diff --git a/PyLoT.py b/PyLoT.py index 6c3575e4..9e879a54 100755 --- a/PyLoT.py +++ b/PyLoT.py @@ -48,7 +48,6 @@ from obspy.core.util import AttribDict from pylot.core.util.obspyDMT_interface import check_obspydmt_structure - try: import pyqtgraph as pg except Exception as e: @@ -195,7 +194,6 @@ class MainWindow(QMainWindow): self.loc = False - def init_config_files(self, infile): pylot_config_dir = os.path.join(os.path.expanduser('~'), '.pylot') if not os.path.exists(pylot_config_dir): @@ -210,7 +208,6 @@ class MainWindow(QMainWindow): self._inputs.export2File(infile) self.infile = infile - def setupUi(self): try: self.startTime = min( @@ -327,19 +324,19 @@ class MainWindow(QMainWindow): # "Create a new event.") self.openEventAction = self.createAction(self, "Load event information...", self.load_data, - "Ctrl+M", + "Ctrl+M", openEventIcon, - "Load event information for " - "the displayed event.") + "Load event information for " + "the displayed event.") self.openEventAction.setEnabled(False) self.openEventAction.setData(None) self.openEventsAutoAction = self.createAction(self, "Load event information &automatically ... ", self.load_multiple_data, - "Ctrl+A", + "Ctrl+A", openEventsIcon, - "Load event data automatically " - "for all events.") + "Load event data automatically " + "for all events.") self.openEventsAutoAction.setEnabled(False) self.openEventsAutoAction.setData(None) @@ -360,7 +357,7 @@ class MainWindow(QMainWindow): self.saveEventAction = self.createAction(self, "Save &event information ...", self.saveData, "Ctrl+P", saveEventsIcon, "Save event pick data," - " source origin and magnitude.") + " source origin and magnitude.") self.disableSaveEventAction() self.addEventDataAction = self.createAction(self, "Add &events ...", @@ -399,15 +396,15 @@ class MainWindow(QMainWindow): "Ctrl+F", self.filter_icon, """Adjust filter parameters.""") self.inventoryAction = self.createAction(self, "Select &Inventory ...", - self.get_new_metadata, - "Ctrl+I", self.inventoryIcon, - """Select metadata for current project""", - False) + self.get_new_metadata, + "Ctrl+I", self.inventoryIcon, + """Select metadata for current project""", + False) self.initMapAction = self.createAction(self, "Init array map ...", - self.init_array_map, - "Ctrl+M", self.mapIcon, - """Initialize array map with current metadata""", - False) + self.init_array_map, + "Ctrl+M", self.mapIcon, + """Initialize array map with current metadata""", + False) self.initMapAction.setEnabled(False) self.selectPAction = self.createAction(self, "&P", self.alterPhase, "Alt+P", @@ -424,9 +421,9 @@ class MainWindow(QMainWindow): "automatic pick " "data.", False) self.compare_action.setEnabled(False) - self.qualities_action = self.createAction(parent=self, text='Show pick qualitites...', - slot=self.pickQualities, shortcut='Alt+Q', - icon=qualities_icon, tip='Histogram of pick qualities') + self.qualities_action = self.createAction(parent=self, text='Show pick qualitites...', + slot=self.pickQualities, shortcut='Alt+Q', + icon=qualities_icon, tip='Histogram of pick qualities') self.qualities_action.setEnabled(False) printAction = self.createAction(self, "&Print event ...", @@ -471,7 +468,6 @@ class MainWindow(QMainWindow): checkable=True) self.e_action.setEnabled(False) - componentActions = (self.z_action, self.n_action, self.e_action) self.auto_tune = self.createAction(parent=self, text='autoTune', @@ -483,19 +479,19 @@ class MainWindow(QMainWindow): self.auto_pick = self.createAction(parent=self, text='Current event', slot=self.autoPick, shortcut='Alt+Ctrl+A', icon=autopylot_icon, tip='Automatically pick' - ' the displayed waveforms.') + ' the displayed waveforms.') self.auto_pick.setEnabled(False) self.auto_pick_local = self.createAction(parent=self, text='Whole project (local machine)...', slot=self.autoPickProject, shortcut=None, icon=self.autopicksicon_small, tip='Automatically pick' - ' the complete project on local machine.') + ' the complete project on local machine.') self.auto_pick_local.setEnabled(False) self.auto_pick_sge = self.createAction(parent=self, text='Whole project (grid engine)...', slot=self.autoPickProjectSGE, shortcut=None, icon=self.autopicksicon_small, tip='Automatically pick' - ' the complete project on grid engine.') + ' the complete project on grid engine.') self.auto_pick_sge.setEnabled(False) pickActions = (self.auto_tune, self.auto_pick, self.compare_action, self.qualities_action) @@ -527,10 +523,10 @@ class MainWindow(QMainWindow): self.editMenu = self.menuBar().addMenu('&Edit') editActions = (self.filterActionP, self.filterActionS, filterEditAction, None, - #self.selectPAction, self.selectSAction, None, + # self.selectPAction, self.selectSAction, None, self.inventoryAction, self.initMapAction, None, prefsEventAction) - #printAction) #TODO: print event? + # printAction) #TODO: print event? pickMenuActions = (self.parameterAction,) self.pickMenu = self.menuBar().addMenu('&Picking') @@ -546,13 +542,11 @@ class MainWindow(QMainWindow): self.openProjectAction, self.saveProjectAction, self.saveProjectAsAction) - eventToolActions = (self.addEventDataAction, self.openEventAction, self.openEventsAutoAction, self.saveEventAction, self.loadlocationaction, self.loadpilotevent) - toolbars_keys = [ "FileTools", "EventTools", @@ -892,7 +886,7 @@ class MainWindow(QMainWindow): fext = '.xml' for event in events: path = event.path - eventname = path.split('/')[-1] #or event.pylot_id + eventname = path.split('/')[-1] # or event.pylot_id filename = os.path.join(path, 'PyLoT_' + eventname + fext) if os.path.isfile(filename): self.load_data(filename, draw=False, event=event, overwrite=True) @@ -965,7 +959,7 @@ class MainWindow(QMainWindow): button.setAutoFillBackground(True) elif type(color) == str: button.setStyleSheet('QPushButton{border-color: %s}' - 'QPushButton:checked{background-color: rgba%s}'% (color, color)) + 'QPushButton:checked{background-color: rgba%s}' % (color, color)) elif type(color) == tuple: button.setStyleSheet('QPushButton{border-color: rgba%s}' 'QPushButton:checked{background-color: rgba%s}' % (str(color), str(color))) @@ -1195,7 +1189,7 @@ class MainWindow(QMainWindow): def user_modify_path(self, reason=''): dialog = QtGui.QInputDialog(parent=self) new_path, executed = dialog.getText(self, 'Change Project rootpath', - '{}Rename project path {}:'.format(reason, self.project.rootpath)) + '{}Rename project path {}:'.format(reason, self.project.rootpath)) return new_path, executed def data_check(self): @@ -1282,7 +1276,7 @@ class MainWindow(QMainWindow): time = lat = lon = depth = mag = None if len(event.origins) == 1: origin = event.origins[0] - time = origin.time + 0 # add 0 because there was an exception for time = 0s + time = origin.time + 0 # add 0 because there was an exception for time = 0s lat = origin.latitude lon = origin.longitude depth = origin.depth @@ -1335,7 +1329,7 @@ class MainWindow(QMainWindow): for item in itemlist: item.setEnabled(False) - #item color + # item color self.setItemColor(itemlist, id, event, current_event) model.appendRow(itemlist) @@ -1431,7 +1425,7 @@ class MainWindow(QMainWindow): upperErrors=[uppererrorP[3], uppererrorS[3]]) saved_as += str(outformat) + ' ' except TypeError: - print('WARNING: Format: {} not yet implemented'.format(outformat)) + print('WARNING: Format: {} not yet implemented'.format(outformat)) self.get_data().setEvtData(event) msg = 'Event {} saved as {} in format(s) {}'.format(event.pylot_id, fbasename, saved_as.strip()) @@ -1494,11 +1488,10 @@ class MainWindow(QMainWindow): if len(eventdict) < 1: return - # init event selection options for autopick - self.compareoptions =[('tune events', self.get_ref_events, self._style['ref']['rgba']), - ('test events', self.get_test_events, self._style['test']['rgba']), - ('all (picked) events', self.get_manu_picked_events, None)] + self.compareoptions = [('tune events', self.get_ref_events, self._style['ref']['rgba']), + ('test events', self.get_test_events, self._style['test']['rgba']), + ('all (picked) events', self.get_manu_picked_events, None)] self.cmpw = CompareEventsWidget(self, self.compareoptions, eventdict, comparisons) self.cmpw.start.connect(self.compareMulti) @@ -1521,7 +1514,6 @@ class MainWindow(QMainWindow): compare_widget = self.buildMultiCompareWidget(eventlist_overlap) compare_widget.show() - def buildMultiCompareWidget(self, eventlist): global_comparison = Comparison(eventlist=eventlist) compare_widget = ComparisonWidget(global_comparison, self) @@ -1793,7 +1785,7 @@ class MainWindow(QMainWindow): nth_sample = int(settings.value("nth_sample")) if settings.value("nth_sample") else 1 npts_max = 1e7 npts = self.get_npts_to_plot() - npts2plot = npts/nth_sample + npts2plot = npts / nth_sample if npts2plot < npts_max: settings.setValue('large_dataset', False) else: @@ -2091,7 +2083,8 @@ class MainWindow(QMainWindow): elif self.filterActionS.isChecked(): phase = 'S' if self.getFilterOptions(): - if (phase == 'P' and self.filterActionP.isChecked()) or (phase == 'S' and self.filterActionS.isChecked()): + if (phase == 'P' and self.filterActionP.isChecked()) or ( + phase == 'S' and self.filterActionS.isChecked()): kwargs = self.getFilterOptions()[phase].parseFilterOptions() self.pushFilterWF(kwargs) else: @@ -2102,8 +2095,8 @@ class MainWindow(QMainWindow): self.get_data().resetWFData() if plot: self.plotWaveformDataThread(filter=False) - #self.drawPicks() - #self.draw() + # self.drawPicks() + # self.draw() def getAutoFilteroptions(self, phase): return getAutoFilteroptions(phase, self._inputs) @@ -2423,7 +2416,7 @@ class MainWindow(QMainWindow): # thread to prevent handling of QPixmap objects outside of # the main thread self.init_fig_dict() - #if not self.tap: + # if not self.tap: # init TuneAutopicker object self.tap = TuneAutopicker(self, self.obspy_dmt) # first call of update to init tabs with empty canvas @@ -2432,7 +2425,7 @@ class MainWindow(QMainWindow): # creating and filling figure canvas self.tap.update.connect(self.update_autopicker) self.tap.figure_tabs.setCurrentIndex(0) - #else: + # else: # self.update_autopicker() # self.tap.fill_eventbox() self.tap.show() @@ -2463,11 +2456,11 @@ class MainWindow(QMainWindow): if not self.apw: # init event selection options for autopick - self.pickoptions =[('current event', self.get_current_event, None), - ('tune events', self.get_ref_events, self._style['ref']['rgba']), - ('test events', self.get_test_events, self._style['test']['rgba']), - ('all (picked) events', self.get_manu_picked_events, None), - ('all events', self.get_all_events, None)] + self.pickoptions = [('current event', self.get_current_event, None), + ('tune events', self.get_ref_events, self._style['ref']['rgba']), + ('test events', self.get_test_events, self._style['test']['rgba']), + ('all (picked) events', self.get_manu_picked_events, None), + ('all events', self.get_all_events, None)] self.listWidget = QListWidget() self.setDirty(True) @@ -2645,7 +2638,7 @@ class MainWindow(QMainWindow): picksdict = picksdict_from_picks(evt=self.get_data().get_evt_data()) if type == 'manual': event.addPicks(picksdict['manual']) - #event.picks.update(picks) MP MP idea + # event.picks.update(picks) MP MP idea elif type == 'auto': event.addAutopicks(picksdict['auto']) @@ -2682,7 +2675,7 @@ class MainWindow(QMainWindow): stat_picks = self.getPicks(type=picktype)[station] for phase in stat_picks: - if phase == 'SPt': continue # wadati SP time + if phase == 'SPt': continue # wadati SP time picks = stat_picks[phase] if type(stat_picks[phase]) is not dict and type(stat_picks[phase]) is not AttribDict: return @@ -2801,7 +2794,7 @@ class MainWindow(QMainWindow): lt.locate(ctrfile) except RuntimeError as e: print(e.message) - #finally: + # finally: # os.remove(phasefile) self.get_data().applyEVTData(lt.read_location(locpath), typ='event') @@ -2904,7 +2897,7 @@ class MainWindow(QMainWindow): self.array_map.eventLoc = (lat, lon) if self.get_current_event(): self.array_map.refresh_drawings(self.get_current_event().getPicks(), - self.get_current_event().getAutopicks(),) + self.get_current_event().getAutopicks(), ) self._eventChanged[1] = False def init_event_table(self, tabindex=2): @@ -3030,7 +3023,7 @@ class MainWindow(QMainWindow): if hasattr(event, 'origins'): if event.origins: origin = event.origins[0] - item_time.setText(str(origin.time + 0).split('.')[0]) # +0 as workaround in case time=0s + item_time.setText(str(origin.time + 0).split('.')[0]) # +0 as workaround in case time=0s item_lon.setText(str(origin.longitude)) item_lat.setText(str(origin.latitude)) item_depth.setText(str(origin.depth)) @@ -3164,7 +3157,6 @@ class MainWindow(QMainWindow): return set_inv(settings) - def calc_magnitude(self, type='ML'): self.init_metadata() if not self.metadata: @@ -3289,11 +3281,11 @@ class MainWindow(QMainWindow): if hasattr(self.project, 'metadata'): if self.project.metadata: self.init_metadata(ask_default=False) - #self.init_array_map(index=0) + # self.init_array_map(index=0) return if hasattr(self.project, 'inv_path'): self.init_metadata(ask_default=False) - #self.init_array_map(index=0) + # self.init_array_map(index=0) return self.init_array_tab() @@ -3350,7 +3342,6 @@ class MainWindow(QMainWindow): self.dataPlot.setPermText(1) self.dataPlot.setPermText(0, '| Number of traces: {} |'.format(len(self.getPlotWidget().getPlotDict()))) - def _setDirty(self): self.setDirty(True) @@ -3389,7 +3380,7 @@ class MainWindow(QMainWindow): def helpHelp(self): if checkurl(): form = HelpForm(self, - 'https://ariadne.geophysik.ruhr-uni-bochum.de/trac/PyLoT/wiki') + 'https://ariadne.geophysik.ruhr-uni-bochum.de/trac/PyLoT/wiki') else: form = HelpForm(self, ':/help.html') form.show() @@ -3594,7 +3585,7 @@ def create_window(): def main(args=None): project_filename = None - #args.project_filename = 'C:/Shared/AlpArray/alparray_data/project_alparray_test.plp' + # args.project_filename = 'C:/Shared/AlpArray/alparray_data/project_alparray_test.plp' pylot_infile = None if args: if args.project_filename: diff --git a/autoPyLoT.py b/autoPyLoT.py index 24ddb415..68ecbbd6 100755 --- a/autoPyLoT.py +++ b/autoPyLoT.py @@ -118,7 +118,7 @@ def autoPyLoT(input_dict=None, parameter=None, inputfile=None, fnames=None, even if not parameter: if inputfile: parameter = PylotParameter(inputfile) - #iplot = parameter['iplot'] + # iplot = parameter['iplot'] else: infile = os.path.join(os.path.expanduser('~'), '.pylot', 'pylot.in') print('Using default input file {}'.format(infile)) @@ -151,7 +151,7 @@ def autoPyLoT(input_dict=None, parameter=None, inputfile=None, fnames=None, even datastructure.setExpandFields(exf) # check if default location routine NLLoc is available and all stations are used - if real_None(parameter['nllocbin']) and station=='all': + if real_None(parameter['nllocbin']) and station == 'all': locflag = 1 # get NLLoc-root path nllocroot = parameter.get('nllocroot') @@ -289,7 +289,7 @@ def autoPyLoT(input_dict=None, parameter=None, inputfile=None, fnames=None, even corr_dat = None if metadata: # rotate stations to ZNE - #wfdat = check4rotated(wfdat, metadata) # MP MP TEMPORARILY DISABLED !!!!!!!!!!! + # wfdat = check4rotated(wfdat, metadata) # MP MP TEMPORARILY DISABLED !!!!!!!!!!! if locflag: print("Restitute data ...") corr_dat = restitute_data(wfdat.copy(), metadata, ncores=ncores) @@ -505,7 +505,7 @@ def autoPyLoT(input_dict=None, parameter=None, inputfile=None, fnames=None, even endsplash = '''------------------------------------------\n' -----Finished event %s!-----\n' ------------------------------------------'''.format \ - (version=_getVersionString()) % evID + (version=_getVersionString()) % evID print(endsplash) locflag = glocflag if locflag == 0: @@ -534,9 +534,9 @@ if __name__ == "__main__": action='store', help='''full path to the file containing the input parameters for autoPyLoT''') - parser.add_argument('-p', '-P', '--iplot', type=int, + parser.add_argument('-p', '-P', '--iplot', type=int, action='store', default=0, - help='''optional, logical variable for plotting: 0=none, 1=partial, 2=all''') + help='''optional, logical variable for plotting: 0=none, 1=partial, 2=all''') parser.add_argument('-f', '-F', '--fnames', type=str, action='store', help='''optional, list of data file names''') diff --git a/pylot/core/analysis/magnitude.py b/pylot/core/analysis/magnitude.py index 0a7e74ed..0fa854bc 100644 --- a/pylot/core/analysis/magnitude.py +++ b/pylot/core/analysis/magnitude.py @@ -17,6 +17,7 @@ from pylot.core.util.utils import common_range, fit_curve from scipy import integrate, signal from scipy.optimize import curve_fit + def richter_magnitude_scaling(delta): distance = np.array([0, 10, 20, 25, 30, 35, 40, 45, 50, 60, 70, 75, 85, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 230, 240, 250, @@ -225,7 +226,7 @@ class LocalMagnitude(Magnitude): sqH = np.sqrt(power_sum) # get time array - th=np.arange(0, st[0].stats.npts/st[0].stats.sampling_rate, st[0].stats.delta) + th = np.arange(0, st[0].stats.npts / st[0].stats.sampling_rate, st[0].stats.delta) # get maximum peak within pick window iwin = getsignalwin(th, t0 - stime, self.calc_win) ii = min([iwin[len(iwin) - 1], len(th)]) @@ -245,9 +246,9 @@ class LocalMagnitude(Magnitude): ax.plot(th[iwin], sqH[iwin], 'g') ax.plot([t0 - stime, t0 - stime], [0, max(sqH)], 'r', linewidth=2) ax.set_title('Station %s, Channel %s, RMS Horizontal Trace, ' - 'WA-peak-to-peak=%6.3f mm' % (st[0].stats.station, + 'WA-peak-to-peak=%6.3f mm' % (st[0].stats.station, st[0].stats.channel, - wapp)) + wapp)) ax.set_xlabel('Time [s]') ax.set_ylabel('Displacement [mm]') ax = fig.add_subplot(212) @@ -257,15 +258,16 @@ class LocalMagnitude(Magnitude): ax.plot([t0 - stime, t0 - stime], [0, max(sqH)], 'r', linewidth=2) ax.set_title('Channel %s, RMS Horizontal Trace, ' 'WA-peak-to-peak=%6.3f mm' % (st[1].stats.channel, - wapp)) + wapp)) ax.set_xlabel('Time [s]') ax.set_ylabel('Displacement [mm]') fig.show() - try: input() - except SyntaxError: pass + try: + input() + except SyntaxError: + pass plt.close(fig) - return wapp, fig def calc(self): @@ -309,7 +311,7 @@ class LocalMagnitude(Magnitude): a0 = a0 * 1e03 # mm to nm (see Havskov & Ottemöller, 2010) magnitude = ope.StationMagnitude(mag=np.log10(a0) \ + self.wascaling[0] * np.log10(delta) + self.wascaling[1] - * delta + self.wascaling[ + * delta + self.wascaling[ 2]) magnitude.origin_id = self.origin_id magnitude.waveform_id = pick.waveform_id @@ -372,7 +374,7 @@ class MomentMagnitude(Magnitude): def calc(self): for a in self.arrivals: - if a.phase not in 'pP': + if a.phase not in 'pP': continue # make sure calculating Mo only from reliable onsets # NLLoc: time_weight = 0 => do not use onset! diff --git a/pylot/core/io/data.py b/pylot/core/io/data.py index c6d99354..1701e10b 100644 --- a/pylot/core/io/data.py +++ b/pylot/core/io/data.py @@ -17,6 +17,7 @@ from pylot.core.util.utils import fnConstructor, full_range, remove_underscores, import pylot.core.loc.velest as velest from pylot.core.util.obspyDMT_interface import qml_from_obspyDMT + class Data(object): """ Data container with attributes wfdata holding ~obspy.core.stream. @@ -284,7 +285,7 @@ class Data(object): mstation_ext = mstation + '_' for k in range(len(picks_copy)): if ((picks_copy[k].waveform_id.station_code == mstation) or - (picks_copy[k].waveform_id.station_code == mstation_ext)) and \ + (picks_copy[k].waveform_id.station_code == mstation_ext)) and \ (picks_copy[k].method_id == 'auto'): del picks_copy[k] break @@ -416,7 +417,6 @@ class Data(object): self.dirty = False return True - def appendWFData(self, fnames, synthetic=False): """ Read waveform data from fnames and append it to current wf data diff --git a/pylot/core/io/default_parameters.py b/pylot/core/io/default_parameters.py index 78057056..71ea2377 100644 --- a/pylot/core/io/default_parameters.py +++ b/pylot/core/io/default_parameters.py @@ -456,11 +456,11 @@ defaults = {'rootpath': {'type': str, 'namestring': 'Wadati tolerance'}, 'jackfactor': {'type': float, - 'tooltip': 'pick is removed if the variance of the subgroup with the pick removed is larger than the mean variance of all subgroups times safety factor', - 'value': 5.0, - 'min': 0., - 'max': np.inf, - 'namestring': 'Jackknife safety factor'}, + 'tooltip': 'pick is removed if the variance of the subgroup with the pick removed is larger than the mean variance of all subgroups times safety factor', + 'value': 5.0, + 'min': 0., + 'max': np.inf, + 'namestring': 'Jackknife safety factor'}, 'WAscaling': {'type': (float, float, float), 'tooltip': 'Scaling relation (log(Ao)+Alog(r)+Br+C) of Wood-Anderson amplitude Ao [nm] \ diff --git a/pylot/core/io/phases.py b/pylot/core/io/phases.py index ea14f548..a041f833 100644 --- a/pylot/core/io/phases.py +++ b/pylot/core/io/phases.py @@ -245,7 +245,7 @@ def picksdict_from_picks(evt): if picker.startswith('smi:local/'): picker = picker.split('smi:local/')[1] except IndexError: - picker = 'manual' # MP MP TODO maybe improve statement + picker = 'manual' # MP MP TODO maybe improve statement try: onsets = picksdict[picker][station] except KeyError as e: @@ -346,6 +346,7 @@ def picks_from_picksdict(picks, creation_info=None): picks_list.append(pick) return picks_list + def reassess_pilot_db(root_dir, db_dir, out_dir=None, fn_param=None, verbosity=0): import glob @@ -916,9 +917,9 @@ def merge_picks(event, picks): network = pick.waveform_id.network_code method = pick.method_id for p in event.picks: - if p.waveform_id.station_code == station\ - and p.waveform_id.network_code == network\ - and p.phase_hint == phase\ + if p.waveform_id.station_code == station \ + and p.waveform_id.network_code == network \ + and p.phase_hint == phase \ and (str(p.method_id) in str(method) or str(method) in str(p.method_id)): p.time, p.time_errors, p.waveform_id.network_code, p.method_id = time, err, network, method @@ -972,14 +973,14 @@ def getQualitiesfromxml(xmlnames, ErrorsP, ErrorsS, plotflag=1): phase = identifyPhase(loopIdentifyPhase(Pick.phase_hint)) if phase == 'P': if ((mpick.waveform_id.station_code == mstation) or - (mpick.waveform_id.station_code == mstation_ext)) and \ + (mpick.waveform_id.station_code == mstation_ext)) and \ ((mpick.method_id).split('/')[1] == 'auto') and \ (mpick.time_errors['uncertainty'] <= ErrorsP[3]): del mpick break elif phase == 'S': if ((mpick.waveform_id.station_code == mstation) or - (mpick.waveform_id.station_code == mstation_ext)) and \ + (mpick.waveform_id.station_code == mstation_ext)) and \ ((mpick.method_id).split('/')[1] == 'auto') and \ (mpick.time_errors['uncertainty'] <= ErrorsS[3]): del mpick @@ -1032,19 +1033,19 @@ def getQualitiesfromxml(xmlnames, ErrorsP, ErrorsS, plotflag=1): P0perc = 0 if len(Pw1) > 0: P1perc = 100 / numPweights * len(Pw1) - else: + else: P1perc = 0 if len(Pw2) > 0: P2perc = 100 / numPweights * len(Pw2) - else: + else: P2perc = 0 if len(Pw3) > 0: P3perc = 100 / numPweights * len(Pw3) - else: + else: P3perc = 0 if len(Pw4) > 0: P4perc = 100 / numPweights * len(Pw4) - else: + else: P4perc = 0 if len(Sw0) > 0: S0perc = 100 / numSweights * len(Sw0) @@ -1052,19 +1053,19 @@ def getQualitiesfromxml(xmlnames, ErrorsP, ErrorsS, plotflag=1): S0perc = 0 if len(Sw1) > 0: S1perc = 100 / numSweights * len(Sw1) - else: + else: S1perc = 0 if len(Sw2) > 0: S2perc = 100 / numSweights * len(Sw2) - else: + else: S2perc = 0 if len(Sw3) > 0: S3perc = 100 / numSweights * len(Sw3) - else: + else: S3perc = 0 if len(Sw4) > 0: S4perc = 100 / numSweights * len(Sw4) - else: + else: S4perc = 0 weights = ('0', '1', '2', '3', '4') diff --git a/pylot/core/pick/autopick.py b/pylot/core/pick/autopick.py index d7bc487d..29f8d6eb 100644 --- a/pylot/core/pick/autopick.py +++ b/pylot/core/pick/autopick.py @@ -16,7 +16,7 @@ from pylot.core.pick.charfuns import HOScf, AICcf, ARZcf, ARHcf, AR3Ccf from pylot.core.pick.picker import AICPicker, PragPicker from pylot.core.pick.utils import checksignallength, checkZ4S, earllatepicker, \ getSNR, fmpicker, checkPonsets, wadaticheck -from pylot.core.util.utils import getPatternLine, gen_Pool,\ +from pylot.core.util.utils import getPatternLine, gen_Pool, \ real_Bool, identifyPhaseID from obspy.taup import TauPyModel @@ -95,7 +95,7 @@ def autopickevent(data, param, iplot=0, fig_dict=None, fig_dict_wadatijack=None, print('Could not pick a station: {}\nReason: {}'.format(station, result)) # no Wadati/JK for single station (also valid for tuning mode) - if len(stations) == 1: + if len(stations) == 1: return all_onsets # quality control @@ -133,7 +133,8 @@ def call_autopickstation(input_tuple): print('Running in interactive mode') # multiprocessing not possible with interactive plotting try: - return autopickstation(wfstream, pickparam, verbose, fig_dict=fig_dict, iplot=iplot, metadata=metadata, origin=origin) + return autopickstation(wfstream, pickparam, verbose, fig_dict=fig_dict, iplot=iplot, metadata=metadata, + origin=origin) except Exception as e: return e, wfstream[0].stats.station @@ -343,7 +344,7 @@ def autopickstation(wfstream, pickparam, verbose=False, # make sure pstart and pstop are inside zdat[0] pstart = max(pstart, 0) - pstop = min(pstop, len(zdat[0])*zdat[0].stats.delta) + pstop = min(pstop, len(zdat[0]) * zdat[0].stats.delta) if not use_taup is True or origin: Lc = pstop - pstart @@ -586,7 +587,7 @@ def autopickstation(wfstream, pickparam, verbose=False, FM) print(msg) msg = 'autopickstation: Refined P-Pick: {} s | P-Error: {} s'.format(zdat[0].stats.starttime \ - + mpickP, Perror) + + mpickP, Perror) print(msg) Sflag = 1 @@ -620,7 +621,7 @@ def autopickstation(wfstream, pickparam, verbose=False, ndat = edat pickSonset = (edat is not None and ndat is not None and len(edat) > 0 and len( - ndat) > 0 and Pweight < 4) + ndat) > 0 and Pweight < 4) if pickSonset: # determine time window for calculating CF after P onset @@ -628,8 +629,8 @@ def autopickstation(wfstream, pickparam, verbose=False, round(max([mpickP + sstart, 0])), # MP MP relative time axis round(min([ mpickP + sstop, - edat[0].stats.endtime-edat[0].stats.starttime, - ndat[0].stats.endtime-ndat[0].stats.starttime + edat[0].stats.endtime - edat[0].stats.starttime, + ndat[0].stats.endtime - ndat[0].stats.starttime ])) ] @@ -724,7 +725,7 @@ def autopickstation(wfstream, pickparam, verbose=False, if not slope: slope = 0 if (slope >= minAICSslope and - aicarhpick.getSNR() >= minAICSSNR and aicarhpick.getpick() is not None): + aicarhpick.getSNR() >= minAICSSNR and aicarhpick.getpick() is not None): aicSflag = 1 msg = 'AIC S-pick passes quality control: Slope: {0} counts/s, ' \ 'SNR: {1}\nGo on with refined picking ...\n' \ @@ -866,7 +867,7 @@ def autopickstation(wfstream, pickparam, verbose=False, Serror = pickerr[ipick] msg = 'autopickstation: Refined S-Pick: {} s | S-Error: {} s'.format(hdat[0].stats.starttime \ - + mpickS, Serror) + + mpickS, Serror) print(msg) # get SNR @@ -912,7 +913,7 @@ def autopickstation(wfstream, pickparam, verbose=False, # re-create stream object including both horizontal components hdat = edat.copy() hdat += ndat - + else: print('autopickstation: No horizontal component data available or ' 'bad P onset, skipping S picking!') @@ -1216,11 +1217,11 @@ def iteratepicker(wf, NLLocfile, picks, badpicks, pickparameter, fig_dict=None): print( "iteratepicker: The following picking parameters have been modified for iterative picking:") print( - "pstart: %fs => %fs" % (pstart_old, pickparameter.get('pstart'))) + "pstart: %fs => %fs" % (pstart_old, pickparameter.get('pstart'))) print( - "pstop: %fs => %fs" % (pstop_old, pickparameter.get('pstop'))) + "pstop: %fs => %fs" % (pstop_old, pickparameter.get('pstop'))) print( - "sstop: %fs => %fs" % (sstop_old, pickparameter.get('sstop'))) + "sstop: %fs => %fs" % (sstop_old, pickparameter.get('sstop'))) print("pickwinP: %fs => %fs" % ( pickwinP_old, pickparameter.get('pickwinP'))) print("Precalcwin: %fs => %fs" % ( diff --git a/pylot/core/pick/picker.py b/pylot/core/pick/picker.py index 0ef817a2..bb6d5efa 100644 --- a/pylot/core/pick/picker.py +++ b/pylot/core/pick/picker.py @@ -164,9 +164,9 @@ class AICPicker(AutoPicker): iplot = int(self.iplot) except: if self.iplot == True or self.iplot == 'True': - iplot = 2 + iplot = 2 else: - iplot = 0 + iplot = 0 # find NaN's nn = np.isnan(self.cf) @@ -215,8 +215,8 @@ class AICPicker(AutoPicker): tsafety = self.TSNR[1] # safety gap, AIC is usually a little bit too late left_corner_ind = max([icfmax - lpickwindow, 2]) right_corner_ind = icfmax + int(tsafety / self.dt) - aic_snip = aicsmooth[left_corner_ind : right_corner_ind] - minima = argrelmin(aic_snip)[0] # 0th entry of tuples for axes + aic_snip = aicsmooth[left_corner_ind: right_corner_ind] + minima = argrelmin(aic_snip)[0] # 0th entry of tuples for axes if len(minima) > 0: pickindex = minima[-1] + left_corner_ind self.Pick = self.Tcf[pickindex] @@ -261,10 +261,11 @@ class AICPicker(AutoPicker): tslope = self.TSNR[3] # slope determination window if tsafety >= 0: islope = np.where((self.Tcf <= min([self.Pick + tslope + tsafety, self.Tcf[-1]])) \ - & (self.Tcf >= self.Pick)) # TODO: put this in a seperate function like getsignalwin + & (self.Tcf >= self.Pick)) # TODO: put this in a seperate function like getsignalwin else: islope = np.where((self.Tcf <= min([self.Pick + tslope, self.Tcf[-1]])) \ - & (self.Tcf >= self.Pick + tsafety)) # TODO: put this in a seperate function like getsignalwin + & ( + self.Tcf >= self.Pick + tsafety)) # TODO: put this in a seperate function like getsignalwin # find maximum within slope determination window # 'cause slope should be calculated up to first local minimum only! try: @@ -306,11 +307,13 @@ class AICPicker(AutoPicker): ax.set_title(self.Data[0].stats.station) if plt_flag in [1, 2]: fig.show() - try: input() - except SyntaxError: pass + try: + input() + except SyntaxError: + pass plt.close(fig) return - iislope = islope[0][0:imax+1] + iislope = islope[0][0:imax + 1] # MP MP change slope calculation # get all maxima of aicsmooth iaicmaxima = argrelmax(aicsmooth)[0] @@ -320,7 +323,7 @@ class AICPicker(AutoPicker): iaicmax = aicmax[0] else: iaicmax = -1 - dataslope = aicsmooth[pickindex : iaicmax] + dataslope = aicsmooth[pickindex: iaicmax] # calculate slope as polynomal fit of order 1 xslope = np.arange(0, len(dataslope), 1) P = np.polyfit(xslope, dataslope, 1) @@ -344,8 +347,8 @@ class AICPicker(AutoPicker): fig = self.fig fig._tight = True ax1 = fig.add_subplot(211) - if len(self.Tcf) > len(cf): # why? LK - self.Tcf = self.Tcf[0:len(self.Tcf)-1] + if len(self.Tcf) > len(cf): # why? LK + self.Tcf = self.Tcf[0:len(self.Tcf) - 1] ax1.plot(self.Tcf, cf / max(cf), color=self._linecolor, linewidth=0.7, label='(HOS-/AR-) Data') ax1.plot(self.Tcf, aicsmooth / max(aicsmooth), 'r', label='Smoothed AIC-CF') if self.Pick is not None: @@ -368,7 +371,8 @@ class AICPicker(AutoPicker): label='Signal Window') ax2.axvspan(self.Tcf[iislope[0]], self.Tcf[iislope[-1]], color='g', alpha=0.2, lw=0, label='Slope Window') - ax2.plot(self.Tcf[pickindex : iaicmax], datafit, 'g', linewidth=2, label='Slope') # MP MP changed temporarily! + ax2.plot(self.Tcf[pickindex: iaicmax], datafit, 'g', linewidth=2, + label='Slope') # MP MP changed temporarily! if self.slope is not None: ax1.set_title('Station %s, SNR=%7.2f, Slope= %12.2f counts/s' % (self.Data[0].stats.station, @@ -384,8 +388,10 @@ class AICPicker(AutoPicker): if plt_flag in [1, 2]: fig.show() - try: input() - except SyntaxError: pass + try: + input() + except SyntaxError: + pass plt.close(fig) if plt_flag == 3: stats = self.Data[0].stats @@ -409,9 +415,9 @@ class PragPicker(AutoPicker): iplot = int(self.getiplot()) except: if self.getiplot() == True or self.getiplot() == 'True': - iplot = 2 + iplot = 2 else: - iplot = 0 + iplot = 0 if self.getpick1() is not None: print('PragPicker: Get most likely pick from HOS- or AR-CF using pragmatic picking algorithm ...') @@ -450,11 +456,11 @@ class PragPicker(AutoPicker): # prominent trend: decrease aus # flat: use given aus cfdiff = np.diff(cfipick) - if len(cfdiff)<20: + if len(cfdiff) < 20: print('PragPicker: Very few samples for CF. Check LTA window dimensions!') i0diff = np.where(cfdiff > 0) cfdiff = cfdiff[i0diff] - if len(cfdiff)<1: + if len(cfdiff) < 1: print('PragPicker: Negative slope for CF. Check LTA window dimensions! STOP') self.Pick = None return @@ -478,7 +484,7 @@ class PragPicker(AutoPicker): break # now we look to the left - if len(self.cf) > ipick1 +1: + if len(self.cf) > ipick1 + 1: for i in range(ipick1, max([ipick1 - lpickwindow + 1, 2]), -1): if self.cf[i + 1] > self.cf[i] and self.cf[i - 1] >= self.cf[i]: if cfsmooth[i - 1] * (1 + aus1) >= cfsmooth[i]: @@ -489,7 +495,7 @@ class PragPicker(AutoPicker): cfpick_l = self.cf[i] break else: - msg ='PragPicker: Initial onset too close to start of CF! \ + msg = 'PragPicker: Initial onset too close to start of CF! \ Stop finalizing pick to the left.' print(msg) @@ -519,15 +525,18 @@ class PragPicker(AutoPicker): ax.plot(Tcfpick, cfipick, color=self._linecolor, linewidth=0.7, label='CF') ax.plot(Tcfpick, cfsmoothipick, 'r', label='Smoothed CF') if pickflag > 0: - ax.plot([self.Pick, self.Pick], [min(cfipick), max(cfipick)], self._pickcolor_p, linewidth=2, label='Pick') + ax.plot([self.Pick, self.Pick], [min(cfipick), max(cfipick)], self._pickcolor_p, linewidth=2, + label='Pick') ax.set_xlabel('Time [s] since %s' % self.Data[0].stats.starttime) ax.set_yticks([]) ax.set_title(self.Data[0].stats.station) ax.legend(loc=1) if plt_flag == 1: fig.show() - try: input() - except SyntaxError: pass + try: + input() + except SyntaxError: + pass plt.close(fig) return diff --git a/pylot/core/pick/utils.py b/pylot/core/pick/utils.py index 5f54391c..e94c6883 100644 --- a/pylot/core/pick/utils.py +++ b/pylot/core/pick/utils.py @@ -16,7 +16,6 @@ from obspy.core import Stream, UTCDateTime from pylot.core.util.utils import real_Bool, real_None - def earllatepicker(X, nfac, TSNR, Pick1, iplot=0, verbosity=1, fig=None, linecolor='k'): """ Function to derive earliest and latest possible pick after Diehl & Kissling (2009) @@ -143,13 +142,16 @@ def earllatepicker(X, nfac, TSNR, Pick1, iplot=0, verbosity=1, fig=None, linecol ax.plot(t, x, color=linecolor, linewidth=0.7, label='Data') ax.axvspan(t[inoise[0]], t[inoise[-1]], color='y', alpha=0.2, lw=0, label='Noise Window') ax.axvspan(t[isignal[0]], t[isignal[-1]], color='b', alpha=0.2, lw=0, label='Signal Window') - ax.plot([t[0], t[int(len(t)) - 1]], [nlevel, nlevel], color=linecolor, linewidth=0.7, linestyle='dashed', label='Noise Level') + ax.plot([t[0], t[int(len(t)) - 1]], [nlevel, nlevel], color=linecolor, linewidth=0.7, linestyle='dashed', + label='Noise Level') ax.plot(t[pis[zc]], np.zeros(len(zc)), '*g', markersize=14, label='Zero Crossings') ax.plot([t[0], t[int(len(t)) - 1]], [-nlevel, -nlevel], color=linecolor, linewidth=0.7, linestyle='dashed') ax.plot([Pick1, Pick1], [max(x), -max(x)], 'b', linewidth=2, label='mpp') - ax.plot([LPick, LPick], [max(x) / 2, -max(x) / 2], color=linecolor, linewidth=0.7, linestyle='dashed', label='lpp') - ax.plot([EPick, EPick], [max(x) / 2, -max(x) / 2], color=linecolor, linewidth=0.7, linestyle='dashed', label='epp') + ax.plot([LPick, LPick], [max(x) / 2, -max(x) / 2], color=linecolor, linewidth=0.7, linestyle='dashed', + label='lpp') + ax.plot([EPick, EPick], [max(x) / 2, -max(x) / 2], color=linecolor, linewidth=0.7, linestyle='dashed', + label='epp') ax.plot([Pick1 + PickError, Pick1 + PickError], [max(x) / 2, -max(x) / 2], 'r--', label='spe') ax.plot([Pick1 - PickError, Pick1 - PickError], @@ -162,8 +164,10 @@ def earllatepicker(X, nfac, TSNR, Pick1, iplot=0, verbosity=1, fig=None, linecol ax.legend(loc=1) if plt_flag == 1: fig.show() - try: input() - except SyntaxError: pass + try: + input() + except SyntaxError: + pass plt.close(fig) return EPick, LPick, PickError @@ -197,9 +201,9 @@ def fmpicker(Xraw, Xfilt, pickwin, Pick, iplot=0, fig=None, linecolor='k'): iplot = int(iplot) except: if iplot == True or iplot == 'True': - iplot = 2 + iplot = 2 else: - iplot = 0 + iplot = 0 warnings.simplefilter('ignore', np.RankWarning) @@ -359,8 +363,10 @@ def fmpicker(Xraw, Xfilt, pickwin, Pick, iplot=0, fig=None, linecolor='k'): ax2.set_yticks([]) if plt_flag == 1: fig.show() - try: input() - except SyntaxError: pass + try: + input() + except SyntaxError: + pass plt.close(fig) return FM @@ -654,7 +660,7 @@ def wadaticheck(pickdic, dttolerance, iplot=0, fig_dict=None): checkedSPtimes.append(checkedSPtime) pickdic[key]['S']['marked'] = marker - #pickdic[key]['S']['marked'] = marker + # pickdic[key]['S']['marked'] = marker print("wadaticheck: the following stations failed the check:") print(badstations) @@ -696,8 +702,8 @@ def wadaticheck(pickdic, dttolerance, iplot=0, fig_dict=None): ax.plot(Ppicks, SPtimes, 'ro', label='Skipped S-Picks') if wfitflag == 0: ax.plot(Ppicks, wdfit, color=linecolor, linewidth=0.7, label='Wadati 1') - ax.plot(Ppicks, wdfit+dttolerance, color='0.9', linewidth=0.5, label='Wadati 1 Tolerance') - ax.plot(Ppicks, wdfit-dttolerance, color='0.9', linewidth=0.5) + ax.plot(Ppicks, wdfit + dttolerance, color='0.9', linewidth=0.5, label='Wadati 1 Tolerance') + ax.plot(Ppicks, wdfit - dttolerance, color='0.9', linewidth=0.5) ax.plot(checkedPpicks, wdfit2, 'g', label='Wadati 2') ax.plot(checkedPpicks, checkedSPtimes, color=linecolor, linewidth=0, marker='o', label='Reliable S-Picks') @@ -764,9 +770,9 @@ def checksignallength(X, pick, TSNR, minsiglength, nfac, minpercent, iplot=0, fi iplot = int(iplot) except: if real_Bool(iplot): - iplot = 2 + iplot = 2 else: - iplot = 0 + iplot = 0 assert isinstance(X, Stream), "%s is not a stream object" % str(X) @@ -828,8 +834,10 @@ def checksignallength(X, pick, TSNR, minsiglength, nfac, minpercent, iplot=0, fi ax.set_yticks([]) if plt_flag == 1: fig.show() - try: input() - except SyntaxError: pass + try: + input() + except SyntaxError: + pass plt.close(fig) return returnflag @@ -1054,16 +1062,15 @@ def checkZ4S(X, pick, zfac, checkwin, iplot, fig=None, linecolor='k'): :return: returnflag; 0 if onset failed test, 1 if onset passed test :rtype: int """ - + plt_flag = 0 try: iplot = int(iplot) except: if real_Bool(iplot): - iplot = 2 + iplot = 2 else: - iplot = 0 - + iplot = 0 assert isinstance(X, Stream), "%s is not a stream object" % str(X) @@ -1165,8 +1172,10 @@ def checkZ4S(X, pick, zfac, checkwin, iplot, fig=None, linecolor='k'): ax.set_xlabel('Time [s] since %s' % zdat[0].stats.starttime) if plt_flag == 1: fig.show() - try: input() - except SyntaxError: pass + try: + input() + except SyntaxError: + pass plt.close(fig) return returnflag @@ -1191,19 +1200,20 @@ def getQualityFromUncertainty(uncertainty, Errors): if uncertainty <= Errors[0]: quality = 0 elif (uncertainty > Errors[0]) and \ - (uncertainty <= Errors[1]): + (uncertainty <= Errors[1]): quality = 1 elif (uncertainty > Errors[1]) and \ - (uncertainty <= Errors[2]): + (uncertainty <= Errors[2]): quality = 2 elif (uncertainty > Errors[2]) and \ - (uncertainty <= Errors[3]): + (uncertainty <= Errors[3]): quality = 3 elif uncertainty > Errors[3]: quality = 4 return quality + if __name__ == '__main__': import doctest diff --git a/pylot/core/util/array_map.py b/pylot/core/util/array_map.py index de9a3bf3..97b4aa7e 100644 --- a/pylot/core/util/array_map.py +++ b/pylot/core/util/array_map.py @@ -94,7 +94,7 @@ class Array_map(QtGui.QWidget): self.comboBox_phase.currentIndexChanged.connect(self._refresh_drawings) self.comboBox_am.currentIndexChanged.connect(self._refresh_drawings) self.canvas.mpl_connect('motion_notify_event', self.mouse_moved) - #self.zoom_id = self.basemap.ax.figure.canvas.mpl_connect('scroll_event', self.zoom) + # self.zoom_id = self.basemap.ax.figure.canvas.mpl_connect('scroll_event', self.zoom) def _from_dict(self, function, key): return function(self.stations_dict.values(), key=lambda x: x[key])[key] @@ -159,7 +159,6 @@ class Array_map(QtGui.QWidget): self.main_box.addWidget(self.canvas, 1) self.main_box.addWidget(self.status_label, 0) - def init_stations(self): def stat_info_from_parser(parser): stations_dict = {} @@ -354,7 +353,7 @@ class Array_map(QtGui.QWidget): def add_cbar(self, label): self.cbax_bg = inset_axes(self.main_ax, width="6%", height="75%", loc=5) cbax = inset_axes(self.main_ax, width='2%', height='70%', loc=5) - cbar = self.main_ax.figure.colorbar(self.sc_picked, cax = cbax) + cbar = self.main_ax.figure.colorbar(self.sc_picked, cax=cbax) cbar.set_label(label) cbax.yaxis.tick_left() cbax.yaxis.set_label_position('left') diff --git a/pylot/core/util/dataprocessing.py b/pylot/core/util/dataprocessing.py index 80ff3e32..431b250b 100644 --- a/pylot/core/util/dataprocessing.py +++ b/pylot/core/util/dataprocessing.py @@ -33,7 +33,7 @@ class Metadata(object): for index, inventory in enumerate(self.inventories): if index < 2 or (ntotal - index) < 3: repr += '{}\n'.format(inventory) - if ntotal > 4 and int(ntotal/2) == index: + if ntotal > 4 and int(ntotal / 2) == index: repr += '...\n' if ntotal > 4: repr += '\nTotal of {} inventories. Use Metadata.inventories to see all.'.format(ntotal) @@ -79,11 +79,10 @@ class Metadata(object): self.inventories.remove(path_to_inventory) for filename in self.inventory_files.keys(): if filename.startswith(path_to_inventory): - del(self.inventory_files[filename]) + del (self.inventory_files[filename]) for seed_id in self.seed_ids.keys(): if self.seed_ids[seed_id].startswith(path_to_inventory): - del(self.seed_ids[seed_id]) - + del (self.seed_ids[seed_id]) def get_metadata(self, seed_id, time=None): """ @@ -123,7 +122,6 @@ class Metadata(object): fname = self.seed_ids[seed_id] return self.inventory_files[fname] - def read_all(self): """ Read all metadata files found in all inventories @@ -134,7 +132,6 @@ class Metadata(object): if not self.read_single_file(inv_fname): continue - def read_single_file(self, inv_fname): """ Try to read a single file as Parser/Inventory and add its dictionary to inventory files if reading sudceeded. @@ -157,7 +154,6 @@ class Metadata(object): 'data': robj} return True - def get_coordinates(self, seed_id, time=None): """ Get coordinates of given seed id. @@ -176,7 +172,6 @@ class Metadata(object): return return metadata['data'].get_coordinates(seed_id, time) - def get_paz(self, seed_id, time): """ @@ -195,13 +190,11 @@ class Metadata(object): resp = metadata['data'].get_response(seed_id, time) return resp.get_paz(seed_id) - def _read_inventory_data(self, seed_id=None): for inventory in self.inventories: if self._read_metadata_iterator(path_to_inventory=inventory, station_seed_id=seed_id): return - def _read_metadata_iterator(self, path_to_inventory, station_seed_id): """ Search for metadata for a specific station iteratively. @@ -236,7 +229,6 @@ class Metadata(object): continue print('Could not find metadata for station_seed_id {} in path {}'.format(station_seed_id, path_to_inventory)) - def _read_metadata_file(self, path_to_inventory_filename): """ function reading metadata files (either dataless seed, xml or resp) @@ -262,7 +254,6 @@ class Metadata(object): return file_type, robj return None, None - @staticmethod def _read_dless(path_to_inventory): exc = None @@ -272,7 +263,6 @@ class Metadata(object): parser = None return parser, exc - @staticmethod def _read_inventory_file(path_to_inventory): exc = None @@ -283,7 +273,6 @@ class Metadata(object): return inv, exc - def time_from_header(header): """ Function takes in the second line from a .gse file and takes out the date and time from that line. @@ -494,7 +483,6 @@ def read_metadata(path_to_inventory): # return metadata_objects - def restitute_trace(input_tuple): def no_metadata(tr, seed_id): print('no metadata file found ' diff --git a/pylot/core/util/defaults.py b/pylot/core/util/defaults.py index de3249fe..416cbd58 100644 --- a/pylot/core/util/defaults.py +++ b/pylot/core/util/defaults.py @@ -16,7 +16,6 @@ from pylot.core.loc import hyposat from pylot.core.loc import nll from pylot.core.loc import velest - # determine system dependent path separator system_name = platform.system() if system_name in ["Linux", "Darwin"]: diff --git a/pylot/core/util/obspyDMT_interface.py b/pylot/core/util/obspyDMT_interface.py index 47d5c687..b0587d13 100644 --- a/pylot/core/util/obspyDMT_interface.py +++ b/pylot/core/util/obspyDMT_interface.py @@ -4,6 +4,7 @@ import os from obspy import UTCDateTime + def check_obspydmt_structure(path): ''' Check path for obspyDMT event structure. @@ -16,6 +17,7 @@ def check_obspydmt_structure(path): return True return False + def check_obspydmt_eventfolder(folder): try: time = folder.split('.')[0] @@ -25,6 +27,7 @@ def check_obspydmt_eventfolder(folder): except Exception as e: return False, e + def qml_from_obspyDMT(path): import pickle from obspy.core.event import Event, Magnitude, Origin @@ -41,4 +44,3 @@ def qml_from_obspyDMT(path): ev.magnitudes.append(mag) ev.origins.append(origin) return ev - diff --git a/pylot/core/util/thread.py b/pylot/core/util/thread.py index 0a8151d0..e84ed398 100644 --- a/pylot/core/util/thread.py +++ b/pylot/core/util/thread.py @@ -33,8 +33,8 @@ class Thread(QThread): self._executed = False self._executedError = e traceback.print_exc() - exctype, value = sys.exc_info ()[:2] - self._executedErrorInfo = '{} {} {}'.\ + exctype, value = sys.exc_info()[:2] + self._executedErrorInfo = '{} {} {}'. \ format(exctype, value, traceback.format_exc()) sys.stdout = sys.__stdout__ @@ -75,6 +75,7 @@ class Worker(QRunnable): ''' Worker class to be run by MultiThread(QThread). ''' + def __init__(self, fun, args, progressText=None, pb_widget=None, @@ -82,7 +83,7 @@ class Worker(QRunnable): super(Worker, self).__init__() self.fun = fun self.args = args - #self.kwargs = kwargs + # self.kwargs = kwargs self.signals = WorkerSignals() self.progressText = progressText self.pb_widget = pb_widget @@ -96,9 +97,9 @@ class Worker(QRunnable): try: result = self.fun(self.args) except: - exctype, value = sys.exc_info ()[:2] + exctype, value = sys.exc_info()[:2] print(exctype, value, traceback.format_exc()) - self.signals.error.emit ((exctype, value, traceback.format_exc ())) + self.signals.error.emit((exctype, value, traceback.format_exc())) else: self.signals.result.emit(result) finally: @@ -140,13 +141,13 @@ class MultiThread(QThread): def run(self): if self.redirect_stdout: - sys.stdout = self + sys.stdout = self try: if not self.ncores: self.ncores = multiprocessing.cpu_count() pool = multiprocessing.Pool(self.ncores) self.data = pool.map_async(self.func, self.args, callback=self.emitDone) - #self.data = pool.apply_async(self.func, self.shotlist, callback=self.emitDone) #emit each time returned + # self.data = pool.apply_async(self.func, self.shotlist, callback=self.emitDone) #emit each time returned pool.close() self._executed = True except Exception as e: diff --git a/pylot/core/util/utils.py b/pylot/core/util/utils.py index e8568fd3..d848321e 100644 --- a/pylot/core/util/utils.py +++ b/pylot/core/util/utils.py @@ -28,12 +28,14 @@ except Exception as e: print('PyLoT: Could not import pyqtgraph. {}'.format(e)) pg = None + def _pickle_method(m): if m.im_self is None: return getattr, (m.im_class, m.im_func.func_name) else: return getattr, (m.im_self, m.im_func.func_name) + def getAutoFilteroptions(phase, parameter): filtername = {'P': 'bpz2', 'S': 'bph2'} @@ -41,9 +43,10 @@ def getAutoFilteroptions(phase, parameter): print('autoPickParameter: No filter options for phase {}.'.format(phase)) return freqmin, freqmax = parameter.get(filtername[phase]) - filteroptions = FilterOptions(type='bandpass', freq=[freqmin, freqmax], order=4) # order=4 default from obspy + filteroptions = FilterOptions(type='bandpass', freq=[freqmin, freqmax], order=4) # order=4 default from obspy return filteroptions + def readDefaultFilterInformation(fname): """ Read default filter information from pylot.in file @@ -679,7 +682,7 @@ def pick_color(picktype, phase, quality=0): bpc = base_phase_colors(picktype, phase) # returns dict like {'modifier': 'g', 'rgba': (0, 0, 255, 255)} rgba = bpc['rgba'] modifier = bpc['modifier'] - intensity = 255.*quality/min_quality + intensity = 255. * quality / min_quality rgba = modify_rgba(rgba, modifier, intensity) return rgba @@ -791,6 +794,7 @@ def base_phase_colors(picktype, phase): phasecolors = style_settings.phasecolors return phasecolors[picktype][phase] + def transform_colors_mpl_str(colors, no_alpha=False): """ Transforms rgba color values to a matplotlib string of color values with a range of [0, 1] @@ -809,6 +813,7 @@ def transform_colors_mpl_str(colors, no_alpha=False): colors_mpl = '({}, {}, {}, {})'.format(*colors_mpl) return colors_mpl + def transform_colors_mpl(colors): """ Transform rgba colors from [0, 255] to [0, 1] @@ -821,6 +826,7 @@ def transform_colors_mpl(colors): colors_mpl = tuple([color / 255. for color in colors]) return colors_mpl + def remove_underscores(data): """ takes a `obspy.core.stream.Stream` object and removes all underscores @@ -976,7 +982,8 @@ def check4rotated(data, metadata=None, verbosity=1): wfstream[2], azimuts[2], dips[2]) print('check4rotated: rotated trace {} to ZNE'.format(trace_id)) # replace old data with rotated data, change the channel code to ZNE - z_index = dips.index(min(dips)) # get z-trace index, z has minimum dip of -90 (dip is measured from 0 to -90, with -90 being vertical) + z_index = dips.index(min( + dips)) # get z-trace index, z has minimum dip of -90 (dip is measured from 0 to -90, with -90 being vertical) wfstream[z_index].data = z wfstream[z_index].stats.channel = wfstream[z_index].stats.channel[0:-1] + 'Z' del trace_ids[z_index] @@ -1206,8 +1213,8 @@ def check_event_folder(path): folder = path.split('/')[-1] # for pylot: select only folders that start with 'e', containin two dots and have length 12 if (folder.startswith('e') - and len(folder.split('.')) == 3 - and len(folder) == 12): + and len(folder.split('.')) == 3 + and len(folder) == 12): ev_type = 'pylot' elif check_obspydmt_eventfolder(folder)[0]: ev_type = 'obspydmt' diff --git a/pylot/core/util/widgets.py b/pylot/core/util/widgets.py index 32b51b1a..b8b64a93 100644 --- a/pylot/core/util/widgets.py +++ b/pylot/core/util/widgets.py @@ -17,6 +17,7 @@ import time import numpy as np import matplotlib + matplotlib.use('QT4Agg') from matplotlib.figure import Figure @@ -381,8 +382,8 @@ class ComparisonWidget(QWidget): ax = axes_dict[phase]['exp'] xlims = ax.get_xlim() ylims = ax.get_ylim() - #ax.fill_between([xlims[0], 0], ylims[0], ylims[1], color=(0.9, 1.0, 0.9, 0.5), label='earlier than manual') - #ax.fill_between([0, xlims[1]], ylims[0], ylims[1], color=(1.0, 0.9, 0.9, 0.5), label='later than manual') + # ax.fill_between([xlims[0], 0], ylims[0], ylims[1], color=(0.9, 1.0, 0.9, 0.5), label='earlier than manual') + # ax.fill_between([0, xlims[1]], ylims[0], ylims[1], color=(1.0, 0.9, 0.9, 0.5), label='later than manual') legend = ax.legend() legend.draggable() @@ -474,7 +475,7 @@ class WaveformWidgetPG(QtGui.QWidget): self.pen_linecolor_syn = self.pg.mkPen((100, 0, 255, 255)) self.reinitMoveProxy() self._proxy = self.pg.SignalProxy(self.plotWidget.scene().sigMouseMoved, rateLimit=60, slot=self.mouseMoved) - #self.plotWidget.getPlotItem().setDownsampling(auto=True) + # self.plotWidget.getPlotItem().setDownsampling(auto=True) def reinitMoveProxy(self): self.vLine = self.pg.InfiniteLine(angle=90, movable=False, pen=self.pen_multicursor) @@ -524,7 +525,7 @@ class WaveformWidgetPG(QtGui.QWidget): self.syn_checkbox = QtGui.QCheckBox('synthetics') self.addQCboxItem('processed', 'green') self.addQCboxItem('raw', 'black') - #self.perm_qcbox_right.setAlignment(2) + # self.perm_qcbox_right.setAlignment(2) self.setLayout(self.main_layout) def getPlotDict(self): @@ -608,7 +609,7 @@ class WaveformWidgetPG(QtGui.QWidget): print('Warning: Could not set zoom limits') for n, (network, station, channel) in enumerate(nsc): - n+=1 + n += 1 st = st_select.select(network=network, station=station, channel=channel) trace = st[0].copy() st_syn = wfsyn.select(network=network, station=station, channel=channel) @@ -645,10 +646,11 @@ class WaveformWidgetPG(QtGui.QWidget): trace_syn.normalize(np.max(np.abs(trace_syn.data)) * 2) # TODO: change this to numpy operations instead of lists? times = np.array([time for index, time in enumerate(time_ax) if not index % nth_sample]) - times_syn = np.array([time for index, time in enumerate(time_ax_syn) if not index % nth_sample] if st_syn else []) + times_syn = np.array( + [time for index, time in enumerate(time_ax_syn) if not index % nth_sample] if st_syn else []) trace.data = np.array([datum + n for index, datum in enumerate(trace.data) if not index % nth_sample]) trace_syn.data = np.array([datum + n for index, datum in enumerate(trace_syn.data) - if not index % nth_sample] if st_syn else []) + if not index % nth_sample] if st_syn else []) plots.append((times, trace.data, times_syn, trace_syn.data)) self.setPlotDict(n, (station, channel, network)) @@ -665,11 +667,11 @@ class WaveformWidgetPG(QtGui.QWidget): ''' npixel = self.orig_parent.width() ndata = len(trace.data) - pts_per_pixel = ndata/npixel + pts_per_pixel = ndata / npixel if pts_per_pixel < 2: return trace.data, time_ax - remaining_samples = ndata%pts_per_pixel - npixel = ndata//pts_per_pixel + remaining_samples = ndata % pts_per_pixel + npixel = ndata // pts_per_pixel if remaining_samples: data = trace.data[:-remaining_samples] else: @@ -849,7 +851,7 @@ class PylotCanvas(FigureCanvas): break if not ax_check: return - #self.updateCurrentLimits() #maybe put this down to else: + # self.updateCurrentLimits() #maybe put this down to else: # calculate delta (relative values in axis) old_x, old_y = self.press_rel @@ -902,13 +904,13 @@ class PylotCanvas(FigureCanvas): d_upper = abs(origin - upper_b) if positive: - d_lower *= 1 - 1/factor - d_upper *= 1 - 1/factor + d_lower *= 1 - 1 / factor + d_upper *= 1 - 1 / factor lower_b += d_lower upper_b -= d_upper else: - d_lower /= 1 + 1/factor - d_upper /= 1 + 1/factor + d_lower /= 1 + 1 / factor + d_upper /= 1 + 1 / factor lower_b -= d_lower upper_b += d_upper @@ -1133,9 +1135,9 @@ class PylotCanvas(FigureCanvas): if noiselevel is not None: for level in [-noiselevel[channel], noiselevel[channel]]: ax.plot([time_ax[0], time_ax[-1]], - [n+level, n+level], - color = linecolor, - linestyle = 'dashed') + [n + level, n + level], + color=linecolor, + linestyle='dashed') self.setPlotDict(n, (station, channel, network)) if plot_additional and additional_channel: compare_stream = wfdata.select(channel=additional_channel) @@ -1217,7 +1219,7 @@ class PylotCanvas(FigureCanvas): def insertLabel(self, pos, text): pos = pos / max(self.axes[0].ylim) axann = self.axes[0].annotate(text, xy=(.03, pos), - xycoords='axes fraction') + xycoords='axes fraction') axann.set_bbox(dict(facecolor='lightgrey', alpha=.6)) def setZoomBorders2content(self): @@ -1441,7 +1443,6 @@ class PickDlg(QDialog): self.multicompfig.draw() self.multicompfig.setFocus() - # set plot labels self.setPlotLabels() @@ -1467,7 +1468,6 @@ class PickDlg(QDialog): self.setWindowTitle('Pickwindow on station: {}'.format(self.getStation())) self.setWindowState(QtCore.Qt.WindowMaximized) - def setupUi(self): menuBar = QtGui.QMenuBar(self) if not self._embedded: @@ -1512,11 +1512,11 @@ class PickDlg(QDialog): checkable=True, shortcut='S') self.autoFilterAction = createAction(parent=self, text='Automatic Filtering', - slot=self.toggleAutoFilter, - icon=key_a_icon, - tip='Filter automatically before initial pick', - checkable=True, - shortcut='Ctrl+A') + slot=self.toggleAutoFilter, + icon=key_a_icon, + tip='Filter automatically before initial pick', + checkable=True, + shortcut='Ctrl+A') self.zoomAction = createAction(parent=self, text='Zoom', slot=self.zoom, icon=zoom_icon, tip='Zoom into waveform', @@ -1604,8 +1604,8 @@ class PickDlg(QDialog): _dialtoolbar.addSeparator() est_label = QLabel('Estimated onsets:') est_label.setStyleSheet('QLabel {' - 'padding:2px;' - 'padding-left:5px}') + 'padding:2px;' + 'padding-left:5px}') _dialtoolbar.addWidget(est_label) _dialtoolbar.addWidget(self.plot_arrivals_button) _dialtoolbar.addSeparator() @@ -1805,16 +1805,15 @@ class PickDlg(QDialog): picksMenu.addSeparator() filterOptionsAction = createAction(parent=self, text="&Filter parameter ...", - slot=self.filterOptions, - shortcut='Ctrl+F', - icon=self.orig_parent.filter_icon) + slot=self.filterOptions, + shortcut='Ctrl+F', + icon=self.orig_parent.filter_icon) filterMenu = menuBar.addMenu('Filter') filterMenu.addAction(self.filterActionP) filterMenu.addAction(self.filterActionS) filterMenu.addAction(self.autoFilterAction) filterMenu.addAction(filterOptionsAction) - def filterOptions(self): if self.orig_parent.adjustFilterOptions(): phase = None @@ -1953,7 +1952,7 @@ class PickDlg(QDialog): self.draw() else: self.draw() - #self.pick_block = self.togglePickBlocker() + # self.pick_block = self.togglePickBlocker() self.disconnect_pick_delete() def deactivatePicking(self): @@ -2101,7 +2100,7 @@ class PickDlg(QDialog): def calcNoiseScaleFactor(noiselevel, zoomfactor=5., norm=1): # calculate factor to upscale a trace normed to 'norm' in a way that all values # zoomfactor*noiselevel are found within -0.5*norm and 0.5*norm - scaleFactor = (norm/2.) / (zoomfactor * noiselevel) + scaleFactor = (norm / 2.) / (zoomfactor * noiselevel) return scaleFactor def setIniPick(self, gui_event): @@ -2175,7 +2174,7 @@ class PickDlg(QDialog): try: data.detrend('linear') data.filter(**filteroptions) - #wfdata.filter(**filteroptions)# MP MP removed filtering of original data + # wfdata.filter(**filteroptions)# MP MP removed filtering of original data except ValueError as e: self.qmb = QtGui.QMessageBox(QtGui.QMessageBox.Icon.Information, 'Denied', 'setIniPick{}: Could not filter waveform: {}'.format(phase, e)) @@ -2211,7 +2210,7 @@ class PickDlg(QDialog): x_res = getResolutionWindow(np.mean(snr), parameter.get('extent')) xlims = [ini_pick - x_res, ini_pick + x_res] - ylims = list(np.array([-.5, .5]) + [0, len(data)-1]) + ylims = list(np.array([-.5, .5]) + [0, len(data) - 1]) title = self.getStation() + ' picking mode' if filterphase: @@ -2298,8 +2297,8 @@ class PickDlg(QDialog): self.disconnectPressEvent() self.enable_ar_buttons() self.zoomAction.setEnabled(True) - #self.pick_block = self.togglPickBlocker() - #self.resetZoom() + # self.pick_block = self.togglPickBlocker() + # self.resetZoom() self.leave_picking_mode() def savePick(self, phase, phasepicks): @@ -2335,7 +2334,7 @@ class PickDlg(QDialog): if self.getPicks(picktype): if phase is not None and not phase == 'SPt': if (type(self.getPicks(picktype)[phase]) is dict - or type(self.getPicks(picktype)[phase]) is AttribDict): + or type(self.getPicks(picktype)[phase]) is AttribDict): picks = self.getPicks(picktype)[phase] elif phase is None: for phase in self.getPicks(picktype): @@ -2368,7 +2367,7 @@ class PickDlg(QDialog): label='{}-Pick (quality: {})'.format(phase, quality), picker=5) self.phaseLines[phase] = vl if spe: - ax.fill_between([mpp-spe, mpp+spe], ylims[0], ylims[1], + ax.fill_between([mpp - spe, mpp + spe], ylims[0], ylims[1], alpha=.25, color=color, label='{}-SPE'.format(phase)) if picks['epp']: linestyle_epp, width_epp = pick_linestyle_plt(picktype, 'epp') @@ -2414,7 +2413,7 @@ class PickDlg(QDialog): def on_motion(self, event): x = event.xdata if x is not None: - time_code = 'T = {}, t = {} [s]'.format(self.stime+x, x) + time_code = 'T = {}, t = {} [s]'.format(self.stime + x, x) user_help = ' - Left-Click to Drag | Right-Click to Pan-Zoom |' \ ' Mousewheel to Zoom | Middle-Click to Delete Pick' self.statusbar.showMessage(time_code + user_help) @@ -2516,10 +2515,10 @@ class PickDlg(QDialog): allpicks[picktype].pop(phase) # delete line from vlines dictionary if phase in self.phaseLines.keys(): - del(self.phaseLines[phase]) + del (self.phaseLines[phase]) # information output msg = 'Deleted {} pick for phase {}, at timestamp {} (relative time: {} s)' - print(msg.format(picktype, phase, self.getStartTime()+pick_rel, pick_rel)) + print(msg.format(picktype, phase, self.getStartTime() + pick_rel, pick_rel)) self.setDirty(True) def identify_selected_picks(self, x): @@ -2545,8 +2544,6 @@ class PickDlg(QDialog): pick_rel, phase, picktype = X[index] return allpicks, pick_rel, phase, picktype - - def drawPhaseText(self): self.drawPicks(picktype='manual', textOnly=True) self.drawPicks(picktype='auto', textOnly=True) @@ -2583,7 +2580,7 @@ class PickDlg(QDialog): return self.cur_xlim = self.multicompfig.axes[0].get_xlim() self.cur_ylim = self.multicompfig.axes[0].get_ylim() - #self.multicompfig.updateCurrentLimits() + # self.multicompfig.updateCurrentLimits() data = self.getWFData().copy() title = self.getStation() if filter: @@ -2677,7 +2674,6 @@ class PickDlg(QDialog): rval = False return rval - def resetPlot(self): self.resetZoom() self.refreshPlot() @@ -2716,8 +2712,8 @@ class PickDlg(QDialog): # set channel labels self.multicompfig.setYTickLabels(pos, labels) - #self.multicompfig.setXLims(ax, self.getXLims()) - #self.multicompfig.setYLims(ax, self.getYLims()) + # self.multicompfig.setXLims(ax, self.getXLims()) + # self.multicompfig.setYLims(ax, self.getYLims()) def zoom(self): if self.zoomAction.isChecked() and self.pick_block: @@ -2779,7 +2775,7 @@ class CanvasWidget(QWidget): ''' def __init__(self, parent, canvas): - QtGui.QWidget.__init__(self, parent)#, 1) + QtGui.QWidget.__init__(self, parent) # , 1) canvas = canvas self.main_layout = QtGui.QVBoxLayout() self.setLayout(self.main_layout) @@ -2792,6 +2788,7 @@ class MultiEventWidget(QWidget): ''' ''' + def __init__(self, options=None, parent=None, windowflag=1): QtGui.QWidget.__init__(self, parent, windowflag) @@ -2851,7 +2848,7 @@ class MultiEventWidget(QWidget): self.pb.setRange(0, 0) self.pb.setVisible(False) - #space holder for progressbar + # space holder for progressbar self._pb_space = QtGui.QWidget() self.rb_layout.addWidget(self.start_button) @@ -2869,7 +2866,7 @@ class MultiEventWidget(QWidget): eventlist = func() if not type(eventlist) == list: eventlist = [eventlist] - tooltip='' + tooltip = '' for index, event in enumerate(eventlist): if not event: continue @@ -2885,13 +2882,13 @@ class MultiEventWidget(QWidget): 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)) + self.start_button.setEnabled(not (check_events)) def enable(self, bool): for rb in self.rb_dict.values(): rb.setEnabled(bool) self.start_button.setEnabled(bool) - self.pb.setVisible(not(bool)) + self.pb.setVisible(not (bool)) self._pb_space.setVisible(bool) self.eventbox.setEnabled(bool) self.button_clear.setEnabled(bool) @@ -2973,7 +2970,7 @@ class AutoPickWidget(MultiEventWidget): def reinitEvents2plot(self): for eventID, eventDict in self.events2plot.items(): for widget_key, widget in eventDict.items(): - del(widget) + del (widget) self.events2plot = {} self.eventbox.clear() self.refresh_plot_tabs() @@ -3507,7 +3504,7 @@ class TuneAutopicker(QWidget): if hasattr(self, 'pdlg_widget'): if self.pdlg_widget: self.pdlg_widget.setParent(None) - del(self.pdlg_widget) + del (self.pdlg_widget) if hasattr(self, 'overview'): self.overview.setParent(None) if hasattr(self, 'p_tabs'): @@ -4725,8 +4722,9 @@ class FilterOptionsDialog(QDialog): 'S': FilterOptions()} self.setWindowTitle(titleString) - self.filterOptionWidgets = {'P': FilterOptionsWidget(self.filterOptions['P'], self.parent().getAutoFilteroptions('P')), - 'S': FilterOptionsWidget(self.filterOptions['S'], self.parent().getAutoFilteroptions('S'))} + self.filterOptionWidgets = { + 'P': FilterOptionsWidget(self.filterOptions['P'], self.parent().getAutoFilteroptions('P')), + 'S': FilterOptionsWidget(self.filterOptions['S'], self.parent().getAutoFilteroptions('S'))} self.setupUi() self.updateUi() self.connectButtons() @@ -5074,7 +5072,7 @@ class HelpForm(QDialog): toolBar.addWidget(self.pageLabel) self.webBrowser = QWebView() self.webBrowser.load(page) - #self.webBrowser.load('C:/Shared/code/git/pylot/pylot/core/util/map_test.html') + # self.webBrowser.load('C:/Shared/code/git/pylot/pylot/core/util/map_test.html') layout = QVBoxLayout() layout.addWidget(toolBar) diff --git a/pylot/styles/style_settings.py b/pylot/styles/style_settings.py index c84a8334..a7d317bc 100644 --- a/pylot/styles/style_settings.py +++ b/pylot/styles/style_settings.py @@ -5,18 +5,18 @@ # the base color phasecolors = { 'manual': { - 'P':{ + 'P': { 'rgba': (0, 0, 255, 255), 'modifier': 'g'}, - 'S':{ + 'S': { 'rgba': (255, 0, 0, 255), 'modifier': 'b'} }, - 'auto':{ - 'P':{ + 'auto': { + 'P': { 'rgba': (140, 0, 255, 255), 'modifier': 'g'}, - 'S':{ + 'S': { 'rgba': (255, 140, 0, 255), 'modifier': 'b'} } @@ -24,8 +24,8 @@ phasecolors = { # Set plot colors and stylesheet for each style stylecolors = { - 'default':{ - 'linecolor':{ + 'default': { + 'linecolor': { 'rgba': (0, 0, 0, 255)}, 'background': { 'rgba': (255, 255, 255, 255)}, @@ -67,4 +67,3 @@ stylecolors = { 'filename': 'bright.qss'} } } - diff --git a/tests/test_Metadata/test_Metadata.py b/tests/test_Metadata/test_Metadata.py index 9b362f5d..28e73e1d 100644 --- a/tests/test_Metadata/test_Metadata.py +++ b/tests/test_Metadata/test_Metadata.py @@ -7,6 +7,7 @@ from obspy.io.xseed import Parser from pylot.core.util.dataprocessing import Metadata from tests.utils import HidePrints + class TestMetadata(unittest.TestCase): def setUp(self): @@ -16,9 +17,12 @@ class TestMetadata(unittest.TestCase): self.m = Metadata(metadata_folder) def test_get_coordinates_sucess(self): - expected = {'Z': {u'elevation': 607.0, u'longitude': 12.87571, u'local_depth': 0.0, u'azimuth': 0.0, u'latitude': 49.14502, u'dip': -90.0}, - 'E': {u'azimuth': 90.0, u'dip': 0.0, u'elevation': 607.0, u'latitude': 49.14502, u'local_depth': 0.0, u'longitude': 12.87571}, - 'N': {u'azimuth': 0.0, u'dip': 0.0, u'elevation': 607.0, u'latitude': 49.14502, u'local_depth': 0.0, u'longitude': 12.87571} + expected = {'Z': {u'elevation': 607.0, u'longitude': 12.87571, u'local_depth': 0.0, u'azimuth': 0.0, + u'latitude': 49.14502, u'dip': -90.0}, + 'E': {u'azimuth': 90.0, u'dip': 0.0, u'elevation': 607.0, u'latitude': 49.14502, + u'local_depth': 0.0, u'longitude': 12.87571}, + 'N': {u'azimuth': 0.0, u'dip': 0.0, u'elevation': 607.0, u'latitude': 49.14502, u'local_depth': 0.0, + u'longitude': 12.87571} } result = {} for channel in ('Z', 'N', 'E'): @@ -28,9 +32,12 @@ class TestMetadata(unittest.TestCase): self.assertDictEqual(result[channel], expected[channel]) def test_get_coordinates_sucess_no_time(self): - expected = {'Z': {u'elevation': 607.0, u'longitude': 12.87571, u'local_depth': 0.0, u'azimuth': 0.0, u'latitude': 49.14502, u'dip': -90.0}, - 'E': {u'azimuth': 90.0, u'dip': 0.0, u'elevation': 607.0, u'latitude': 49.14502, u'local_depth': 0.0, u'longitude': 12.87571}, - 'N': {u'azimuth': 0.0, u'dip': 0.0, u'elevation': 607.0, u'latitude': 49.14502, u'local_depth': 0.0, u'longitude': 12.87571} + expected = {'Z': {u'elevation': 607.0, u'longitude': 12.87571, u'local_depth': 0.0, u'azimuth': 0.0, + u'latitude': 49.14502, u'dip': -90.0}, + 'E': {u'azimuth': 90.0, u'dip': 0.0, u'elevation': 607.0, u'latitude': 49.14502, + u'local_depth': 0.0, u'longitude': 12.87571}, + 'N': {u'azimuth': 0.0, u'dip': 0.0, u'elevation': 607.0, u'latitude': 49.14502, u'local_depth': 0.0, + u'longitude': 12.87571} } result = {} for channel in ('Z', 'N', 'E'): @@ -63,8 +70,10 @@ class TestMetadataAdding(unittest.TestCase): fpath = os.path.join(self.metadata_folders[0], 'DATALESS.BW.WETR..HHZ') self.m.add_inventory_file(fpath) # adding an inventory file should append its folder to the list of inventories and the file to the - self.assertEqual([os.path.join(self.metadata_folders[0], 'DATALESS.BW.WETR..HHZ')], self.m.inventory_files.keys()) # does the filename exist in inventory files? - self.assertEqual(['data', 'invtype'], self.m.inventory_files[os.path.join(self.metadata_folders[0], 'DATALESS.BW.WETR..HHZ')].keys()) # is the required information attacht to the filename? + self.assertEqual([os.path.join(self.metadata_folders[0], 'DATALESS.BW.WETR..HHZ')], + self.m.inventory_files.keys()) # does the filename exist in inventory files? + self.assertEqual(['data', 'invtype'], self.m.inventory_files[os.path.join(self.metadata_folders[0], + 'DATALESS.BW.WETR..HHZ')].keys()) # is the required information attacht to the filename? self.assertDictEqual({}, self.m.seed_ids) self.assertEqual([self.metadata_folders[0]], self.m.inventories)