[cleanup] code cleanup by PyCharm

This commit is contained in:
Marcel Paffrath 2018-07-16 14:21:41 +02:00
parent 754d42c8e3
commit 7a0d3486a6
18 changed files with 285 additions and 269 deletions

View File

@ -48,7 +48,6 @@ from obspy.core.util import AttribDict
from pylot.core.util.obspyDMT_interface import check_obspydmt_structure from pylot.core.util.obspyDMT_interface import check_obspydmt_structure
try: try:
import pyqtgraph as pg import pyqtgraph as pg
except Exception as e: except Exception as e:
@ -195,7 +194,6 @@ class MainWindow(QMainWindow):
self.loc = False self.loc = False
def init_config_files(self, infile): def init_config_files(self, infile):
pylot_config_dir = os.path.join(os.path.expanduser('~'), '.pylot') pylot_config_dir = os.path.join(os.path.expanduser('~'), '.pylot')
if not os.path.exists(pylot_config_dir): if not os.path.exists(pylot_config_dir):
@ -210,7 +208,6 @@ class MainWindow(QMainWindow):
self._inputs.export2File(infile) self._inputs.export2File(infile)
self.infile = infile self.infile = infile
def setupUi(self): def setupUi(self):
try: try:
self.startTime = min( self.startTime = min(
@ -471,7 +468,6 @@ class MainWindow(QMainWindow):
checkable=True) checkable=True)
self.e_action.setEnabled(False) self.e_action.setEnabled(False)
componentActions = (self.z_action, self.n_action, self.e_action) componentActions = (self.z_action, self.n_action, self.e_action)
self.auto_tune = self.createAction(parent=self, text='autoTune', self.auto_tune = self.createAction(parent=self, text='autoTune',
@ -527,10 +523,10 @@ class MainWindow(QMainWindow):
self.editMenu = self.menuBar().addMenu('&Edit') self.editMenu = self.menuBar().addMenu('&Edit')
editActions = (self.filterActionP, self.filterActionS, filterEditAction, None, editActions = (self.filterActionP, self.filterActionS, filterEditAction, None,
#self.selectPAction, self.selectSAction, None, # self.selectPAction, self.selectSAction, None,
self.inventoryAction, self.initMapAction, None, self.inventoryAction, self.initMapAction, None,
prefsEventAction) prefsEventAction)
#printAction) #TODO: print event? # printAction) #TODO: print event?
pickMenuActions = (self.parameterAction,) pickMenuActions = (self.parameterAction,)
self.pickMenu = self.menuBar().addMenu('&Picking') self.pickMenu = self.menuBar().addMenu('&Picking')
@ -546,13 +542,11 @@ class MainWindow(QMainWindow):
self.openProjectAction, self.saveProjectAction, self.openProjectAction, self.saveProjectAction,
self.saveProjectAsAction) self.saveProjectAsAction)
eventToolActions = (self.addEventDataAction, eventToolActions = (self.addEventDataAction,
self.openEventAction, self.openEventsAutoAction, self.openEventAction, self.openEventsAutoAction,
self.saveEventAction, self.loadlocationaction, self.saveEventAction, self.loadlocationaction,
self.loadpilotevent) self.loadpilotevent)
toolbars_keys = [ toolbars_keys = [
"FileTools", "FileTools",
"EventTools", "EventTools",
@ -892,7 +886,7 @@ class MainWindow(QMainWindow):
fext = '.xml' fext = '.xml'
for event in events: for event in events:
path = event.path 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) filename = os.path.join(path, 'PyLoT_' + eventname + fext)
if os.path.isfile(filename): if os.path.isfile(filename):
self.load_data(filename, draw=False, event=event, overwrite=True) self.load_data(filename, draw=False, event=event, overwrite=True)
@ -965,7 +959,7 @@ class MainWindow(QMainWindow):
button.setAutoFillBackground(True) button.setAutoFillBackground(True)
elif type(color) == str: elif type(color) == str:
button.setStyleSheet('QPushButton{border-color: %s}' 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: elif type(color) == tuple:
button.setStyleSheet('QPushButton{border-color: rgba%s}' button.setStyleSheet('QPushButton{border-color: rgba%s}'
'QPushButton:checked{background-color: rgba%s}' % (str(color), str(color))) 'QPushButton:checked{background-color: rgba%s}' % (str(color), str(color)))
@ -1335,7 +1329,7 @@ class MainWindow(QMainWindow):
for item in itemlist: for item in itemlist:
item.setEnabled(False) item.setEnabled(False)
#item color # item color
self.setItemColor(itemlist, id, event, current_event) self.setItemColor(itemlist, id, event, current_event)
model.appendRow(itemlist) model.appendRow(itemlist)
@ -1494,9 +1488,8 @@ class MainWindow(QMainWindow):
if len(eventdict) < 1: if len(eventdict) < 1:
return return
# init event selection options for autopick # init event selection options for autopick
self.compareoptions =[('tune events', self.get_ref_events, self._style['ref']['rgba']), self.compareoptions = [('tune events', self.get_ref_events, self._style['ref']['rgba']),
('test events', self.get_test_events, self._style['test']['rgba']), ('test events', self.get_test_events, self._style['test']['rgba']),
('all (picked) events', self.get_manu_picked_events, None)] ('all (picked) events', self.get_manu_picked_events, None)]
@ -1521,7 +1514,6 @@ class MainWindow(QMainWindow):
compare_widget = self.buildMultiCompareWidget(eventlist_overlap) compare_widget = self.buildMultiCompareWidget(eventlist_overlap)
compare_widget.show() compare_widget.show()
def buildMultiCompareWidget(self, eventlist): def buildMultiCompareWidget(self, eventlist):
global_comparison = Comparison(eventlist=eventlist) global_comparison = Comparison(eventlist=eventlist)
compare_widget = ComparisonWidget(global_comparison, self) 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 nth_sample = int(settings.value("nth_sample")) if settings.value("nth_sample") else 1
npts_max = 1e7 npts_max = 1e7
npts = self.get_npts_to_plot() npts = self.get_npts_to_plot()
npts2plot = npts/nth_sample npts2plot = npts / nth_sample
if npts2plot < npts_max: if npts2plot < npts_max:
settings.setValue('large_dataset', False) settings.setValue('large_dataset', False)
else: else:
@ -2091,7 +2083,8 @@ class MainWindow(QMainWindow):
elif self.filterActionS.isChecked(): elif self.filterActionS.isChecked():
phase = 'S' phase = 'S'
if self.getFilterOptions(): 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() kwargs = self.getFilterOptions()[phase].parseFilterOptions()
self.pushFilterWF(kwargs) self.pushFilterWF(kwargs)
else: else:
@ -2102,8 +2095,8 @@ class MainWindow(QMainWindow):
self.get_data().resetWFData() self.get_data().resetWFData()
if plot: if plot:
self.plotWaveformDataThread(filter=False) self.plotWaveformDataThread(filter=False)
#self.drawPicks() # self.drawPicks()
#self.draw() # self.draw()
def getAutoFilteroptions(self, phase): def getAutoFilteroptions(self, phase):
return getAutoFilteroptions(phase, self._inputs) return getAutoFilteroptions(phase, self._inputs)
@ -2423,7 +2416,7 @@ class MainWindow(QMainWindow):
# thread to prevent handling of QPixmap objects outside of # thread to prevent handling of QPixmap objects outside of
# the main thread # the main thread
self.init_fig_dict() self.init_fig_dict()
#if not self.tap: # if not self.tap:
# init TuneAutopicker object # init TuneAutopicker object
self.tap = TuneAutopicker(self, self.obspy_dmt) self.tap = TuneAutopicker(self, self.obspy_dmt)
# first call of update to init tabs with empty canvas # first call of update to init tabs with empty canvas
@ -2432,7 +2425,7 @@ class MainWindow(QMainWindow):
# creating and filling figure canvas # creating and filling figure canvas
self.tap.update.connect(self.update_autopicker) self.tap.update.connect(self.update_autopicker)
self.tap.figure_tabs.setCurrentIndex(0) self.tap.figure_tabs.setCurrentIndex(0)
#else: # else:
# self.update_autopicker() # self.update_autopicker()
# self.tap.fill_eventbox() # self.tap.fill_eventbox()
self.tap.show() self.tap.show()
@ -2463,7 +2456,7 @@ class MainWindow(QMainWindow):
if not self.apw: if not self.apw:
# init event selection options for autopick # init event selection options for autopick
self.pickoptions =[('current event', self.get_current_event, None), self.pickoptions = [('current event', self.get_current_event, None),
('tune events', self.get_ref_events, self._style['ref']['rgba']), ('tune events', self.get_ref_events, self._style['ref']['rgba']),
('test events', self.get_test_events, self._style['test']['rgba']), ('test events', self.get_test_events, self._style['test']['rgba']),
('all (picked) events', self.get_manu_picked_events, None), ('all (picked) events', self.get_manu_picked_events, None),
@ -2645,7 +2638,7 @@ class MainWindow(QMainWindow):
picksdict = picksdict_from_picks(evt=self.get_data().get_evt_data()) picksdict = picksdict_from_picks(evt=self.get_data().get_evt_data())
if type == 'manual': if type == 'manual':
event.addPicks(picksdict['manual']) event.addPicks(picksdict['manual'])
#event.picks.update(picks) MP MP idea # event.picks.update(picks) MP MP idea
elif type == 'auto': elif type == 'auto':
event.addAutopicks(picksdict['auto']) event.addAutopicks(picksdict['auto'])
@ -2801,7 +2794,7 @@ class MainWindow(QMainWindow):
lt.locate(ctrfile) lt.locate(ctrfile)
except RuntimeError as e: except RuntimeError as e:
print(e.message) print(e.message)
#finally: # finally:
# os.remove(phasefile) # os.remove(phasefile)
self.get_data().applyEVTData(lt.read_location(locpath), typ='event') self.get_data().applyEVTData(lt.read_location(locpath), typ='event')
@ -2904,7 +2897,7 @@ class MainWindow(QMainWindow):
self.array_map.eventLoc = (lat, lon) self.array_map.eventLoc = (lat, lon)
if self.get_current_event(): if self.get_current_event():
self.array_map.refresh_drawings(self.get_current_event().getPicks(), self.array_map.refresh_drawings(self.get_current_event().getPicks(),
self.get_current_event().getAutopicks(),) self.get_current_event().getAutopicks(), )
self._eventChanged[1] = False self._eventChanged[1] = False
def init_event_table(self, tabindex=2): def init_event_table(self, tabindex=2):
@ -3164,7 +3157,6 @@ class MainWindow(QMainWindow):
return return
set_inv(settings) set_inv(settings)
def calc_magnitude(self, type='ML'): def calc_magnitude(self, type='ML'):
self.init_metadata() self.init_metadata()
if not self.metadata: if not self.metadata:
@ -3289,11 +3281,11 @@ class MainWindow(QMainWindow):
if hasattr(self.project, 'metadata'): if hasattr(self.project, 'metadata'):
if self.project.metadata: if self.project.metadata:
self.init_metadata(ask_default=False) self.init_metadata(ask_default=False)
#self.init_array_map(index=0) # self.init_array_map(index=0)
return return
if hasattr(self.project, 'inv_path'): if hasattr(self.project, 'inv_path'):
self.init_metadata(ask_default=False) self.init_metadata(ask_default=False)
#self.init_array_map(index=0) # self.init_array_map(index=0)
return return
self.init_array_tab() self.init_array_tab()
@ -3350,7 +3342,6 @@ class MainWindow(QMainWindow):
self.dataPlot.setPermText(1) self.dataPlot.setPermText(1)
self.dataPlot.setPermText(0, '| Number of traces: {} |'.format(len(self.getPlotWidget().getPlotDict()))) self.dataPlot.setPermText(0, '| Number of traces: {} |'.format(len(self.getPlotWidget().getPlotDict())))
def _setDirty(self): def _setDirty(self):
self.setDirty(True) self.setDirty(True)
@ -3594,7 +3585,7 @@ def create_window():
def main(args=None): def main(args=None):
project_filename = 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 pylot_infile = None
if args: if args:
if args.project_filename: if args.project_filename:

View File

@ -118,7 +118,7 @@ def autoPyLoT(input_dict=None, parameter=None, inputfile=None, fnames=None, even
if not parameter: if not parameter:
if inputfile: if inputfile:
parameter = PylotParameter(inputfile) parameter = PylotParameter(inputfile)
#iplot = parameter['iplot'] # iplot = parameter['iplot']
else: else:
infile = os.path.join(os.path.expanduser('~'), '.pylot', 'pylot.in') infile = os.path.join(os.path.expanduser('~'), '.pylot', 'pylot.in')
print('Using default input file {}'.format(infile)) 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) 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 real_None(parameter['nllocbin']) and station=='all': if real_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')
@ -289,7 +289,7 @@ def autoPyLoT(input_dict=None, parameter=None, inputfile=None, fnames=None, even
corr_dat = None corr_dat = None
if metadata: if metadata:
# rotate stations to ZNE # rotate stations to ZNE
#wfdat = check4rotated(wfdat, metadata) # MP MP TEMPORARILY DISABLED !!!!!!!!!!! # wfdat = check4rotated(wfdat, metadata) # MP MP TEMPORARILY DISABLED !!!!!!!!!!!
if locflag: if locflag:
print("Restitute data ...") print("Restitute data ...")
corr_dat = restitute_data(wfdat.copy(), metadata, ncores=ncores) corr_dat = restitute_data(wfdat.copy(), metadata, ncores=ncores)

View File

@ -17,6 +17,7 @@ from pylot.core.util.utils import common_range, fit_curve
from scipy import integrate, signal from scipy import integrate, signal
from scipy.optimize import curve_fit from scipy.optimize import curve_fit
def richter_magnitude_scaling(delta): def richter_magnitude_scaling(delta):
distance = np.array([0, 10, 20, 25, 30, 35, 40, 45, 50, 60, 70, 75, 85, 90, 100, 110, 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, 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) sqH = np.sqrt(power_sum)
# get time array # 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 # get maximum peak within pick window
iwin = getsignalwin(th, t0 - stime, self.calc_win) iwin = getsignalwin(th, t0 - stime, self.calc_win)
ii = min([iwin[len(iwin) - 1], len(th)]) ii = min([iwin[len(iwin) - 1], len(th)])
@ -261,11 +262,12 @@ class LocalMagnitude(Magnitude):
ax.set_xlabel('Time [s]') ax.set_xlabel('Time [s]')
ax.set_ylabel('Displacement [mm]') ax.set_ylabel('Displacement [mm]')
fig.show() fig.show()
try: input() try:
except SyntaxError: pass input()
except SyntaxError:
pass
plt.close(fig) plt.close(fig)
return wapp, fig return wapp, fig
def calc(self): def calc(self):

View File

@ -17,6 +17,7 @@ from pylot.core.util.utils import fnConstructor, full_range, remove_underscores,
import pylot.core.loc.velest as velest import pylot.core.loc.velest as velest
from pylot.core.util.obspyDMT_interface import qml_from_obspyDMT from pylot.core.util.obspyDMT_interface import qml_from_obspyDMT
class Data(object): class Data(object):
""" """
Data container with attributes wfdata holding ~obspy.core.stream. Data container with attributes wfdata holding ~obspy.core.stream.
@ -416,7 +417,6 @@ class Data(object):
self.dirty = False self.dirty = False
return True return True
def appendWFData(self, fnames, synthetic=False): def appendWFData(self, fnames, synthetic=False):
""" """
Read waveform data from fnames and append it to current wf data Read waveform data from fnames and append it to current wf data

View File

@ -346,6 +346,7 @@ def picks_from_picksdict(picks, creation_info=None):
picks_list.append(pick) picks_list.append(pick)
return picks_list return picks_list
def reassess_pilot_db(root_dir, db_dir, out_dir=None, fn_param=None, verbosity=0): def reassess_pilot_db(root_dir, db_dir, out_dir=None, fn_param=None, verbosity=0):
import glob import glob
@ -916,9 +917,9 @@ def merge_picks(event, picks):
network = pick.waveform_id.network_code network = pick.waveform_id.network_code
method = pick.method_id method = pick.method_id
for p in event.picks: for p in event.picks:
if p.waveform_id.station_code == station\ if p.waveform_id.station_code == station \
and p.waveform_id.network_code == network\ and p.waveform_id.network_code == network \
and p.phase_hint == phase\ and p.phase_hint == phase \
and (str(p.method_id) in str(method) and (str(p.method_id) in str(method)
or str(method) in str(p.method_id)): 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 p.time, p.time_errors, p.waveform_id.network_code, p.method_id = time, err, network, method

View File

@ -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.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 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 real_Bool, identifyPhaseID
from obspy.taup import TauPyModel from obspy.taup import TauPyModel
@ -133,7 +133,8 @@ def call_autopickstation(input_tuple):
print('Running in interactive mode') print('Running in interactive mode')
# multiprocessing not possible with interactive plotting # multiprocessing not possible with interactive plotting
try: 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: except Exception as e:
return e, wfstream[0].stats.station 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] # make sure pstart and pstop are inside zdat[0]
pstart = max(pstart, 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: if not use_taup is True or origin:
Lc = pstop - pstart Lc = pstop - pstart
@ -628,8 +629,8 @@ def autopickstation(wfstream, pickparam, verbose=False,
round(max([mpickP + sstart, 0])), # MP MP relative time axis round(max([mpickP + sstart, 0])), # MP MP relative time axis
round(min([ round(min([
mpickP + sstop, mpickP + sstop,
edat[0].stats.endtime-edat[0].stats.starttime, edat[0].stats.endtime - edat[0].stats.starttime,
ndat[0].stats.endtime-ndat[0].stats.starttime ndat[0].stats.endtime - ndat[0].stats.starttime
])) ]))
] ]

View File

@ -215,7 +215,7 @@ class AICPicker(AutoPicker):
tsafety = self.TSNR[1] # safety gap, AIC is usually a little bit too late tsafety = self.TSNR[1] # safety gap, AIC is usually a little bit too late
left_corner_ind = max([icfmax - lpickwindow, 2]) left_corner_ind = max([icfmax - lpickwindow, 2])
right_corner_ind = icfmax + int(tsafety / self.dt) right_corner_ind = icfmax + int(tsafety / self.dt)
aic_snip = aicsmooth[left_corner_ind : right_corner_ind] aic_snip = aicsmooth[left_corner_ind: right_corner_ind]
minima = argrelmin(aic_snip)[0] # 0th entry of tuples for axes minima = argrelmin(aic_snip)[0] # 0th entry of tuples for axes
if len(minima) > 0: if len(minima) > 0:
pickindex = minima[-1] + left_corner_ind pickindex = minima[-1] + left_corner_ind
@ -264,7 +264,8 @@ class AICPicker(AutoPicker):
& (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: else:
islope = np.where((self.Tcf <= min([self.Pick + tslope, self.Tcf[-1]])) \ 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 # find maximum within slope determination window
# 'cause slope should be calculated up to first local minimum only! # 'cause slope should be calculated up to first local minimum only!
try: try:
@ -306,11 +307,13 @@ class AICPicker(AutoPicker):
ax.set_title(self.Data[0].stats.station) ax.set_title(self.Data[0].stats.station)
if plt_flag in [1, 2]: if plt_flag in [1, 2]:
fig.show() fig.show()
try: input() try:
except SyntaxError: pass input()
except SyntaxError:
pass
plt.close(fig) plt.close(fig)
return return
iislope = islope[0][0:imax+1] iislope = islope[0][0:imax + 1]
# MP MP change slope calculation # MP MP change slope calculation
# get all maxima of aicsmooth # get all maxima of aicsmooth
iaicmaxima = argrelmax(aicsmooth)[0] iaicmaxima = argrelmax(aicsmooth)[0]
@ -320,7 +323,7 @@ class AICPicker(AutoPicker):
iaicmax = aicmax[0] iaicmax = aicmax[0]
else: else:
iaicmax = -1 iaicmax = -1
dataslope = aicsmooth[pickindex : iaicmax] dataslope = aicsmooth[pickindex: iaicmax]
# calculate slope as polynomal fit of order 1 # calculate slope as polynomal fit of order 1
xslope = np.arange(0, len(dataslope), 1) xslope = np.arange(0, len(dataslope), 1)
P = np.polyfit(xslope, dataslope, 1) P = np.polyfit(xslope, dataslope, 1)
@ -345,7 +348,7 @@ class AICPicker(AutoPicker):
fig._tight = True fig._tight = True
ax1 = fig.add_subplot(211) ax1 = fig.add_subplot(211)
if len(self.Tcf) > len(cf): # why? LK if len(self.Tcf) > len(cf): # why? LK
self.Tcf = self.Tcf[0:len(self.Tcf)-1] 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, 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') ax1.plot(self.Tcf, aicsmooth / max(aicsmooth), 'r', label='Smoothed AIC-CF')
if self.Pick is not None: if self.Pick is not None:
@ -368,7 +371,8 @@ class AICPicker(AutoPicker):
label='Signal Window') label='Signal Window')
ax2.axvspan(self.Tcf[iislope[0]], self.Tcf[iislope[-1]], color='g', alpha=0.2, lw=0, ax2.axvspan(self.Tcf[iislope[0]], self.Tcf[iislope[-1]], color='g', alpha=0.2, lw=0,
label='Slope Window') 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: if self.slope is not None:
ax1.set_title('Station %s, SNR=%7.2f, Slope= %12.2f counts/s' % (self.Data[0].stats.station, 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]: if plt_flag in [1, 2]:
fig.show() fig.show()
try: input() try:
except SyntaxError: pass input()
except SyntaxError:
pass
plt.close(fig) plt.close(fig)
if plt_flag == 3: if plt_flag == 3:
stats = self.Data[0].stats stats = self.Data[0].stats
@ -450,11 +456,11 @@ class PragPicker(AutoPicker):
# prominent trend: decrease aus # prominent trend: decrease aus
# flat: use given aus # flat: use given aus
cfdiff = np.diff(cfipick) cfdiff = np.diff(cfipick)
if len(cfdiff)<20: if len(cfdiff) < 20:
print('PragPicker: Very few samples for CF. Check LTA window dimensions!') print('PragPicker: Very few samples for CF. Check LTA window dimensions!')
i0diff = np.where(cfdiff > 0) i0diff = np.where(cfdiff > 0)
cfdiff = cfdiff[i0diff] cfdiff = cfdiff[i0diff]
if len(cfdiff)<1: if len(cfdiff) < 1:
print('PragPicker: Negative slope for CF. Check LTA window dimensions! STOP') print('PragPicker: Negative slope for CF. Check LTA window dimensions! STOP')
self.Pick = None self.Pick = None
return return
@ -478,7 +484,7 @@ class PragPicker(AutoPicker):
break break
# now we look to the left # 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): 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 self.cf[i + 1] > self.cf[i] and self.cf[i - 1] >= self.cf[i]:
if cfsmooth[i - 1] * (1 + aus1) >= cfsmooth[i]: if cfsmooth[i - 1] * (1 + aus1) >= cfsmooth[i]:
@ -489,7 +495,7 @@ class PragPicker(AutoPicker):
cfpick_l = self.cf[i] cfpick_l = self.cf[i]
break break
else: 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.' Stop finalizing pick to the left.'
print(msg) print(msg)
@ -519,15 +525,18 @@ class PragPicker(AutoPicker):
ax.plot(Tcfpick, cfipick, color=self._linecolor, linewidth=0.7, label='CF') ax.plot(Tcfpick, cfipick, color=self._linecolor, linewidth=0.7, label='CF')
ax.plot(Tcfpick, cfsmoothipick, 'r', label='Smoothed CF') ax.plot(Tcfpick, cfsmoothipick, 'r', label='Smoothed CF')
if pickflag > 0: 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_xlabel('Time [s] since %s' % self.Data[0].stats.starttime)
ax.set_yticks([]) ax.set_yticks([])
ax.set_title(self.Data[0].stats.station) ax.set_title(self.Data[0].stats.station)
ax.legend(loc=1) ax.legend(loc=1)
if plt_flag == 1: if plt_flag == 1:
fig.show() fig.show()
try: input() try:
except SyntaxError: pass input()
except SyntaxError:
pass
plt.close(fig) plt.close(fig)
return return

View File

@ -16,7 +16,6 @@ from obspy.core import Stream, UTCDateTime
from pylot.core.util.utils import real_Bool, real_None from pylot.core.util.utils import real_Bool, real_None
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'):
""" """
Function to derive earliest and latest possible pick after Diehl & Kissling (2009) 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.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[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.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', ax.plot(t[pis[zc]], np.zeros(len(zc)), '*g',
markersize=14, label='Zero Crossings') 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([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([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([LPick, LPick], [max(x) / 2, -max(x) / 2], color=linecolor, linewidth=0.7, linestyle='dashed',
ax.plot([EPick, EPick], [max(x) / 2, -max(x) / 2], color=linecolor, linewidth=0.7, linestyle='dashed', label='epp') 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], ax.plot([Pick1 + PickError, Pick1 + PickError],
[max(x) / 2, -max(x) / 2], 'r--', label='spe') [max(x) / 2, -max(x) / 2], 'r--', label='spe')
ax.plot([Pick1 - PickError, Pick1 - PickError], 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) ax.legend(loc=1)
if plt_flag == 1: if plt_flag == 1:
fig.show() fig.show()
try: input() try:
except SyntaxError: pass input()
except SyntaxError:
pass
plt.close(fig) plt.close(fig)
return EPick, LPick, PickError return EPick, LPick, PickError
@ -359,8 +363,10 @@ def fmpicker(Xraw, Xfilt, pickwin, Pick, iplot=0, fig=None, linecolor='k'):
ax2.set_yticks([]) ax2.set_yticks([])
if plt_flag == 1: if plt_flag == 1:
fig.show() fig.show()
try: input() try:
except SyntaxError: pass input()
except SyntaxError:
pass
plt.close(fig) plt.close(fig)
return FM return FM
@ -654,7 +660,7 @@ def wadaticheck(pickdic, dttolerance, iplot=0, fig_dict=None):
checkedSPtimes.append(checkedSPtime) checkedSPtimes.append(checkedSPtime)
pickdic[key]['S']['marked'] = marker pickdic[key]['S']['marked'] = marker
#pickdic[key]['S']['marked'] = marker # pickdic[key]['S']['marked'] = marker
print("wadaticheck: the following stations failed the check:") print("wadaticheck: the following stations failed the check:")
print(badstations) print(badstations)
@ -696,8 +702,8 @@ def wadaticheck(pickdic, dttolerance, iplot=0, fig_dict=None):
ax.plot(Ppicks, SPtimes, 'ro', label='Skipped S-Picks') ax.plot(Ppicks, SPtimes, 'ro', label='Skipped S-Picks')
if wfitflag == 0: if wfitflag == 0:
ax.plot(Ppicks, wdfit, color=linecolor, linewidth=0.7, label='Wadati 1') 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, 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)
ax.plot(checkedPpicks, wdfit2, 'g', label='Wadati 2') ax.plot(checkedPpicks, wdfit2, 'g', label='Wadati 2')
ax.plot(checkedPpicks, checkedSPtimes, color=linecolor, ax.plot(checkedPpicks, checkedSPtimes, color=linecolor,
linewidth=0, marker='o', label='Reliable S-Picks') linewidth=0, marker='o', label='Reliable S-Picks')
@ -828,8 +834,10 @@ def checksignallength(X, pick, TSNR, minsiglength, nfac, minpercent, iplot=0, fi
ax.set_yticks([]) ax.set_yticks([])
if plt_flag == 1: if plt_flag == 1:
fig.show() fig.show()
try: input() try:
except SyntaxError: pass input()
except SyntaxError:
pass
plt.close(fig) plt.close(fig)
return returnflag return returnflag
@ -1064,7 +1072,6 @@ def checkZ4S(X, pick, zfac, checkwin, iplot, fig=None, linecolor='k'):
else: else:
iplot = 0 iplot = 0
assert isinstance(X, Stream), "%s is not a stream object" % str(X) assert isinstance(X, Stream), "%s is not a stream object" % str(X)
print("Check for spuriously picked S onset instead of P onset ...") print("Check for spuriously picked S onset instead of P onset ...")
@ -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) ax.set_xlabel('Time [s] since %s' % zdat[0].stats.starttime)
if plt_flag == 1: if plt_flag == 1:
fig.show() fig.show()
try: input() try:
except SyntaxError: pass input()
except SyntaxError:
pass
plt.close(fig) plt.close(fig)
return returnflag return returnflag
@ -1204,6 +1213,7 @@ def getQualityFromUncertainty(uncertainty, Errors):
return quality return quality
if __name__ == '__main__': if __name__ == '__main__':
import doctest import doctest

View File

@ -94,7 +94,7 @@ class Array_map(QtGui.QWidget):
self.comboBox_phase.currentIndexChanged.connect(self._refresh_drawings) self.comboBox_phase.currentIndexChanged.connect(self._refresh_drawings)
self.comboBox_am.currentIndexChanged.connect(self._refresh_drawings) self.comboBox_am.currentIndexChanged.connect(self._refresh_drawings)
self.canvas.mpl_connect('motion_notify_event', self.mouse_moved) 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): def _from_dict(self, function, key):
return function(self.stations_dict.values(), key=lambda x: x[key])[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.canvas, 1)
self.main_box.addWidget(self.status_label, 0) self.main_box.addWidget(self.status_label, 0)
def init_stations(self): def init_stations(self):
def stat_info_from_parser(parser): def stat_info_from_parser(parser):
stations_dict = {} stations_dict = {}
@ -354,7 +353,7 @@ class Array_map(QtGui.QWidget):
def add_cbar(self, label): def add_cbar(self, label):
self.cbax_bg = inset_axes(self.main_ax, width="6%", height="75%", loc=5) 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) 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) cbar.set_label(label)
cbax.yaxis.tick_left() cbax.yaxis.tick_left()
cbax.yaxis.set_label_position('left') cbax.yaxis.set_label_position('left')

View File

@ -33,7 +33,7 @@ class Metadata(object):
for index, inventory in enumerate(self.inventories): for index, inventory in enumerate(self.inventories):
if index < 2 or (ntotal - index) < 3: if index < 2 or (ntotal - index) < 3:
repr += '{}\n'.format(inventory) repr += '{}\n'.format(inventory)
if ntotal > 4 and int(ntotal/2) == index: if ntotal > 4 and int(ntotal / 2) == index:
repr += '...\n' repr += '...\n'
if ntotal > 4: if ntotal > 4:
repr += '\nTotal of {} inventories. Use Metadata.inventories to see all.'.format(ntotal) 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) self.inventories.remove(path_to_inventory)
for filename in self.inventory_files.keys(): for filename in self.inventory_files.keys():
if filename.startswith(path_to_inventory): if filename.startswith(path_to_inventory):
del(self.inventory_files[filename]) del (self.inventory_files[filename])
for seed_id in self.seed_ids.keys(): for seed_id in self.seed_ids.keys():
if self.seed_ids[seed_id].startswith(path_to_inventory): 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): def get_metadata(self, seed_id, time=None):
""" """
@ -123,7 +122,6 @@ class Metadata(object):
fname = self.seed_ids[seed_id] fname = self.seed_ids[seed_id]
return self.inventory_files[fname] return self.inventory_files[fname]
def read_all(self): def read_all(self):
""" """
Read all metadata files found in all inventories Read all metadata files found in all inventories
@ -134,7 +132,6 @@ class Metadata(object):
if not self.read_single_file(inv_fname): if not self.read_single_file(inv_fname):
continue continue
def read_single_file(self, inv_fname): 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. 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} 'data': robj}
return True return True
def get_coordinates(self, seed_id, time=None): def get_coordinates(self, seed_id, time=None):
""" """
Get coordinates of given seed id. Get coordinates of given seed id.
@ -176,7 +172,6 @@ class Metadata(object):
return return
return metadata['data'].get_coordinates(seed_id, time) return metadata['data'].get_coordinates(seed_id, time)
def get_paz(self, 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) resp = metadata['data'].get_response(seed_id, time)
return resp.get_paz(seed_id) return resp.get_paz(seed_id)
def _read_inventory_data(self, seed_id=None): def _read_inventory_data(self, seed_id=None):
for inventory in self.inventories: for inventory in self.inventories:
if self._read_metadata_iterator(path_to_inventory=inventory, station_seed_id=seed_id): if self._read_metadata_iterator(path_to_inventory=inventory, station_seed_id=seed_id):
return return
def _read_metadata_iterator(self, path_to_inventory, station_seed_id): def _read_metadata_iterator(self, path_to_inventory, station_seed_id):
""" """
Search for metadata for a specific station iteratively. Search for metadata for a specific station iteratively.
@ -236,7 +229,6 @@ class Metadata(object):
continue continue
print('Could not find metadata for station_seed_id {} in path {}'.format(station_seed_id, path_to_inventory)) 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): def _read_metadata_file(self, path_to_inventory_filename):
""" """
function reading metadata files (either dataless seed, xml or resp) function reading metadata files (either dataless seed, xml or resp)
@ -262,7 +254,6 @@ class Metadata(object):
return file_type, robj return file_type, robj
return None, None return None, None
@staticmethod @staticmethod
def _read_dless(path_to_inventory): def _read_dless(path_to_inventory):
exc = None exc = None
@ -272,7 +263,6 @@ class Metadata(object):
parser = None parser = None
return parser, exc return parser, exc
@staticmethod @staticmethod
def _read_inventory_file(path_to_inventory): def _read_inventory_file(path_to_inventory):
exc = None exc = None
@ -283,7 +273,6 @@ class Metadata(object):
return inv, exc return inv, exc
def time_from_header(header): 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. 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 # return metadata_objects
def restitute_trace(input_tuple): def restitute_trace(input_tuple):
def no_metadata(tr, seed_id): def no_metadata(tr, seed_id):
print('no metadata file found ' print('no metadata file found '

View File

@ -16,7 +16,6 @@ from pylot.core.loc import hyposat
from pylot.core.loc import nll from pylot.core.loc import nll
from pylot.core.loc import velest from pylot.core.loc import velest
# determine system dependent path separator # determine system dependent path separator
system_name = platform.system() system_name = platform.system()
if system_name in ["Linux", "Darwin"]: if system_name in ["Linux", "Darwin"]:

View File

@ -4,6 +4,7 @@
import os import os
from obspy import UTCDateTime from obspy import UTCDateTime
def check_obspydmt_structure(path): def check_obspydmt_structure(path):
''' '''
Check path for obspyDMT event structure. Check path for obspyDMT event structure.
@ -16,6 +17,7 @@ def check_obspydmt_structure(path):
return True return True
return False return False
def check_obspydmt_eventfolder(folder): def check_obspydmt_eventfolder(folder):
try: try:
time = folder.split('.')[0] time = folder.split('.')[0]
@ -25,6 +27,7 @@ def check_obspydmt_eventfolder(folder):
except Exception as e: except Exception as e:
return False, e return False, e
def qml_from_obspyDMT(path): def qml_from_obspyDMT(path):
import pickle import pickle
from obspy.core.event import Event, Magnitude, Origin from obspy.core.event import Event, Magnitude, Origin
@ -41,4 +44,3 @@ def qml_from_obspyDMT(path):
ev.magnitudes.append(mag) ev.magnitudes.append(mag)
ev.origins.append(origin) ev.origins.append(origin)
return ev return ev

View File

@ -33,8 +33,8 @@ class Thread(QThread):
self._executed = False self._executed = False
self._executedError = e self._executedError = e
traceback.print_exc() traceback.print_exc()
exctype, value = sys.exc_info ()[:2] exctype, value = sys.exc_info()[:2]
self._executedErrorInfo = '{} {} {}'.\ self._executedErrorInfo = '{} {} {}'. \
format(exctype, value, traceback.format_exc()) format(exctype, value, traceback.format_exc())
sys.stdout = sys.__stdout__ sys.stdout = sys.__stdout__
@ -75,6 +75,7 @@ class Worker(QRunnable):
''' '''
Worker class to be run by MultiThread(QThread). Worker class to be run by MultiThread(QThread).
''' '''
def __init__(self, fun, args, def __init__(self, fun, args,
progressText=None, progressText=None,
pb_widget=None, pb_widget=None,
@ -82,7 +83,7 @@ class Worker(QRunnable):
super(Worker, self).__init__() super(Worker, self).__init__()
self.fun = fun self.fun = fun
self.args = args self.args = args
#self.kwargs = kwargs # self.kwargs = kwargs
self.signals = WorkerSignals() self.signals = WorkerSignals()
self.progressText = progressText self.progressText = progressText
self.pb_widget = pb_widget self.pb_widget = pb_widget
@ -96,9 +97,9 @@ class Worker(QRunnable):
try: try:
result = self.fun(self.args) result = self.fun(self.args)
except: except:
exctype, value = sys.exc_info ()[:2] exctype, value = sys.exc_info()[:2]
print(exctype, value, traceback.format_exc()) 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: else:
self.signals.result.emit(result) self.signals.result.emit(result)
finally: finally:
@ -146,7 +147,7 @@ class MultiThread(QThread):
self.ncores = multiprocessing.cpu_count() self.ncores = multiprocessing.cpu_count()
pool = multiprocessing.Pool(self.ncores) pool = multiprocessing.Pool(self.ncores)
self.data = pool.map_async(self.func, self.args, callback=self.emitDone) 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() pool.close()
self._executed = True self._executed = True
except Exception as e: except Exception as e:

View File

@ -28,12 +28,14 @@ except Exception as e:
print('PyLoT: Could not import pyqtgraph. {}'.format(e)) print('PyLoT: Could not import pyqtgraph. {}'.format(e))
pg = None pg = None
def _pickle_method(m): def _pickle_method(m):
if m.im_self is None: if m.im_self is None:
return getattr, (m.im_class, m.im_func.func_name) return getattr, (m.im_class, m.im_func.func_name)
else: else:
return getattr, (m.im_self, m.im_func.func_name) return getattr, (m.im_self, m.im_func.func_name)
def getAutoFilteroptions(phase, parameter): def getAutoFilteroptions(phase, parameter):
filtername = {'P': 'bpz2', filtername = {'P': 'bpz2',
'S': 'bph2'} 'S': 'bph2'}
@ -44,6 +46,7 @@ def getAutoFilteroptions(phase, parameter):
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 return filteroptions
def readDefaultFilterInformation(fname): def readDefaultFilterInformation(fname):
""" """
Read default filter information from pylot.in file 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)} bpc = base_phase_colors(picktype, phase) # returns dict like {'modifier': 'g', 'rgba': (0, 0, 255, 255)}
rgba = bpc['rgba'] rgba = bpc['rgba']
modifier = bpc['modifier'] modifier = bpc['modifier']
intensity = 255.*quality/min_quality intensity = 255. * quality / min_quality
rgba = modify_rgba(rgba, modifier, intensity) rgba = modify_rgba(rgba, modifier, intensity)
return rgba return rgba
@ -791,6 +794,7 @@ def base_phase_colors(picktype, phase):
phasecolors = style_settings.phasecolors phasecolors = style_settings.phasecolors
return phasecolors[picktype][phase] return phasecolors[picktype][phase]
def transform_colors_mpl_str(colors, no_alpha=False): 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] 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) colors_mpl = '({}, {}, {}, {})'.format(*colors_mpl)
return colors_mpl return colors_mpl
def transform_colors_mpl(colors): def transform_colors_mpl(colors):
""" """
Transform rgba colors from [0, 255] to [0, 1] 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]) colors_mpl = tuple([color / 255. for color in colors])
return colors_mpl return colors_mpl
def remove_underscores(data): def remove_underscores(data):
""" """
takes a `obspy.core.stream.Stream` object and removes all underscores 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]) wfstream[2], azimuts[2], dips[2])
print('check4rotated: rotated trace {} to ZNE'.format(trace_id)) print('check4rotated: rotated trace {} to ZNE'.format(trace_id))
# replace old data with rotated data, change the channel code to ZNE # 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].data = z
wfstream[z_index].stats.channel = wfstream[z_index].stats.channel[0:-1] + 'Z' wfstream[z_index].stats.channel = wfstream[z_index].stats.channel[0:-1] + 'Z'
del trace_ids[z_index] del trace_ids[z_index]

View File

@ -17,6 +17,7 @@ import time
import numpy as np import numpy as np
import matplotlib import matplotlib
matplotlib.use('QT4Agg') matplotlib.use('QT4Agg')
from matplotlib.figure import Figure from matplotlib.figure import Figure
@ -381,8 +382,8 @@ class ComparisonWidget(QWidget):
ax = axes_dict[phase]['exp'] ax = axes_dict[phase]['exp']
xlims = ax.get_xlim() xlims = ax.get_xlim()
ylims = ax.get_ylim() 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([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([0, xlims[1]], ylims[0], ylims[1], color=(1.0, 0.9, 0.9, 0.5), label='later than manual')
legend = ax.legend() legend = ax.legend()
legend.draggable() legend.draggable()
@ -474,7 +475,7 @@ class WaveformWidgetPG(QtGui.QWidget):
self.pen_linecolor_syn = self.pg.mkPen((100, 0, 255, 255)) self.pen_linecolor_syn = self.pg.mkPen((100, 0, 255, 255))
self.reinitMoveProxy() self.reinitMoveProxy()
self._proxy = self.pg.SignalProxy(self.plotWidget.scene().sigMouseMoved, rateLimit=60, slot=self.mouseMoved) 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): def reinitMoveProxy(self):
self.vLine = self.pg.InfiniteLine(angle=90, movable=False, pen=self.pen_multicursor) 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.syn_checkbox = QtGui.QCheckBox('synthetics')
self.addQCboxItem('processed', 'green') self.addQCboxItem('processed', 'green')
self.addQCboxItem('raw', 'black') self.addQCboxItem('raw', 'black')
#self.perm_qcbox_right.setAlignment(2) # self.perm_qcbox_right.setAlignment(2)
self.setLayout(self.main_layout) self.setLayout(self.main_layout)
def getPlotDict(self): def getPlotDict(self):
@ -608,7 +609,7 @@ class WaveformWidgetPG(QtGui.QWidget):
print('Warning: Could not set zoom limits') print('Warning: Could not set zoom limits')
for n, (network, station, channel) in enumerate(nsc): for n, (network, station, channel) in enumerate(nsc):
n+=1 n += 1
st = st_select.select(network=network, station=station, channel=channel) st = st_select.select(network=network, station=station, channel=channel)
trace = st[0].copy() trace = st[0].copy()
st_syn = wfsyn.select(network=network, station=station, channel=channel) st_syn = wfsyn.select(network=network, station=station, channel=channel)
@ -645,7 +646,8 @@ class WaveformWidgetPG(QtGui.QWidget):
trace_syn.normalize(np.max(np.abs(trace_syn.data)) * 2) trace_syn.normalize(np.max(np.abs(trace_syn.data)) * 2)
# TODO: change this to numpy operations instead of lists? # 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 = 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.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) 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 [])
@ -665,11 +667,11 @@ class WaveformWidgetPG(QtGui.QWidget):
''' '''
npixel = self.orig_parent.width() npixel = self.orig_parent.width()
ndata = len(trace.data) ndata = len(trace.data)
pts_per_pixel = ndata/npixel pts_per_pixel = ndata / npixel
if pts_per_pixel < 2: if pts_per_pixel < 2:
return trace.data, time_ax return trace.data, time_ax
remaining_samples = ndata%pts_per_pixel remaining_samples = ndata % pts_per_pixel
npixel = ndata//pts_per_pixel npixel = ndata // pts_per_pixel
if remaining_samples: if remaining_samples:
data = trace.data[:-remaining_samples] data = trace.data[:-remaining_samples]
else: else:
@ -849,7 +851,7 @@ class PylotCanvas(FigureCanvas):
break break
if not ax_check: return 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) # calculate delta (relative values in axis)
old_x, old_y = self.press_rel old_x, old_y = self.press_rel
@ -902,13 +904,13 @@ class PylotCanvas(FigureCanvas):
d_upper = abs(origin - upper_b) d_upper = abs(origin - upper_b)
if positive: if positive:
d_lower *= 1 - 1/factor d_lower *= 1 - 1 / factor
d_upper *= 1 - 1/factor d_upper *= 1 - 1 / factor
lower_b += d_lower lower_b += d_lower
upper_b -= d_upper upper_b -= d_upper
else: else:
d_lower /= 1 + 1/factor d_lower /= 1 + 1 / factor
d_upper /= 1 + 1/factor d_upper /= 1 + 1 / factor
lower_b -= d_lower lower_b -= d_lower
upper_b += d_upper upper_b += d_upper
@ -1133,9 +1135,9 @@ class PylotCanvas(FigureCanvas):
if noiselevel is not None: if noiselevel is not None:
for level in [-noiselevel[channel], noiselevel[channel]]: for level in [-noiselevel[channel], noiselevel[channel]]:
ax.plot([time_ax[0], time_ax[-1]], ax.plot([time_ax[0], time_ax[-1]],
[n+level, n+level], [n + level, n + level],
color = linecolor, color=linecolor,
linestyle = 'dashed') linestyle='dashed')
self.setPlotDict(n, (station, channel, network)) self.setPlotDict(n, (station, channel, network))
if plot_additional and additional_channel: if plot_additional and additional_channel:
compare_stream = wfdata.select(channel=additional_channel) compare_stream = wfdata.select(channel=additional_channel)
@ -1441,7 +1443,6 @@ class PickDlg(QDialog):
self.multicompfig.draw() self.multicompfig.draw()
self.multicompfig.setFocus() self.multicompfig.setFocus()
# set plot labels # set plot labels
self.setPlotLabels() self.setPlotLabels()
@ -1467,7 +1468,6 @@ class PickDlg(QDialog):
self.setWindowTitle('Pickwindow on station: {}'.format(self.getStation())) self.setWindowTitle('Pickwindow on station: {}'.format(self.getStation()))
self.setWindowState(QtCore.Qt.WindowMaximized) self.setWindowState(QtCore.Qt.WindowMaximized)
def setupUi(self): def setupUi(self):
menuBar = QtGui.QMenuBar(self) menuBar = QtGui.QMenuBar(self)
if not self._embedded: if not self._embedded:
@ -1814,7 +1814,6 @@ class PickDlg(QDialog):
filterMenu.addAction(self.autoFilterAction) filterMenu.addAction(self.autoFilterAction)
filterMenu.addAction(filterOptionsAction) filterMenu.addAction(filterOptionsAction)
def filterOptions(self): def filterOptions(self):
if self.orig_parent.adjustFilterOptions(): if self.orig_parent.adjustFilterOptions():
phase = None phase = None
@ -1953,7 +1952,7 @@ class PickDlg(QDialog):
self.draw() self.draw()
else: else:
self.draw() self.draw()
#self.pick_block = self.togglePickBlocker() # self.pick_block = self.togglePickBlocker()
self.disconnect_pick_delete() self.disconnect_pick_delete()
def deactivatePicking(self): def deactivatePicking(self):
@ -2101,7 +2100,7 @@ class PickDlg(QDialog):
def calcNoiseScaleFactor(noiselevel, zoomfactor=5., norm=1): def calcNoiseScaleFactor(noiselevel, zoomfactor=5., norm=1):
# calculate factor to upscale a trace normed to 'norm' in a way that all values # 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 # zoomfactor*noiselevel are found within -0.5*norm and 0.5*norm
scaleFactor = (norm/2.) / (zoomfactor * noiselevel) scaleFactor = (norm / 2.) / (zoomfactor * noiselevel)
return scaleFactor return scaleFactor
def setIniPick(self, gui_event): def setIniPick(self, gui_event):
@ -2175,7 +2174,7 @@ class PickDlg(QDialog):
try: try:
data.detrend('linear') data.detrend('linear')
data.filter(**filteroptions) 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: except ValueError as e:
self.qmb = QtGui.QMessageBox(QtGui.QMessageBox.Icon.Information, self.qmb = QtGui.QMessageBox(QtGui.QMessageBox.Icon.Information,
'Denied', 'setIniPick{}: Could not filter waveform: {}'.format(phase, e)) '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')) x_res = getResolutionWindow(np.mean(snr), parameter.get('extent'))
xlims = [ini_pick - x_res, ini_pick + x_res] 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' title = self.getStation() + ' picking mode'
if filterphase: if filterphase:
@ -2298,8 +2297,8 @@ class PickDlg(QDialog):
self.disconnectPressEvent() self.disconnectPressEvent()
self.enable_ar_buttons() self.enable_ar_buttons()
self.zoomAction.setEnabled(True) self.zoomAction.setEnabled(True)
#self.pick_block = self.togglPickBlocker() # self.pick_block = self.togglPickBlocker()
#self.resetZoom() # self.resetZoom()
self.leave_picking_mode() self.leave_picking_mode()
def savePick(self, phase, phasepicks): def savePick(self, phase, phasepicks):
@ -2368,7 +2367,7 @@ class PickDlg(QDialog):
label='{}-Pick (quality: {})'.format(phase, quality), picker=5) label='{}-Pick (quality: {})'.format(phase, quality), picker=5)
self.phaseLines[phase] = vl self.phaseLines[phase] = vl
if spe: 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)) alpha=.25, color=color, label='{}-SPE'.format(phase))
if picks['epp']: if picks['epp']:
linestyle_epp, width_epp = pick_linestyle_plt(picktype, 'epp') linestyle_epp, width_epp = pick_linestyle_plt(picktype, 'epp')
@ -2414,7 +2413,7 @@ class PickDlg(QDialog):
def on_motion(self, event): def on_motion(self, event):
x = event.xdata x = event.xdata
if x is not None: 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 |' \ user_help = ' - Left-Click to Drag | Right-Click to Pan-Zoom |' \
' Mousewheel to Zoom | Middle-Click to Delete Pick' ' Mousewheel to Zoom | Middle-Click to Delete Pick'
self.statusbar.showMessage(time_code + user_help) self.statusbar.showMessage(time_code + user_help)
@ -2516,10 +2515,10 @@ class PickDlg(QDialog):
allpicks[picktype].pop(phase) allpicks[picktype].pop(phase)
# delete line from vlines dictionary # delete line from vlines dictionary
if phase in self.phaseLines.keys(): if phase in self.phaseLines.keys():
del(self.phaseLines[phase]) del (self.phaseLines[phase])
# information output # information output
msg = 'Deleted {} pick for phase {}, at timestamp {} (relative time: {} s)' 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) self.setDirty(True)
def identify_selected_picks(self, x): def identify_selected_picks(self, x):
@ -2545,8 +2544,6 @@ class PickDlg(QDialog):
pick_rel, phase, picktype = X[index] pick_rel, phase, picktype = X[index]
return allpicks, pick_rel, phase, picktype return allpicks, pick_rel, phase, picktype
def drawPhaseText(self): def drawPhaseText(self):
self.drawPicks(picktype='manual', textOnly=True) self.drawPicks(picktype='manual', textOnly=True)
self.drawPicks(picktype='auto', textOnly=True) self.drawPicks(picktype='auto', textOnly=True)
@ -2583,7 +2580,7 @@ class PickDlg(QDialog):
return return
self.cur_xlim = self.multicompfig.axes[0].get_xlim() self.cur_xlim = self.multicompfig.axes[0].get_xlim()
self.cur_ylim = self.multicompfig.axes[0].get_ylim() self.cur_ylim = self.multicompfig.axes[0].get_ylim()
#self.multicompfig.updateCurrentLimits() # self.multicompfig.updateCurrentLimits()
data = self.getWFData().copy() data = self.getWFData().copy()
title = self.getStation() title = self.getStation()
if filter: if filter:
@ -2677,7 +2674,6 @@ class PickDlg(QDialog):
rval = False rval = False
return rval return rval
def resetPlot(self): def resetPlot(self):
self.resetZoom() self.resetZoom()
self.refreshPlot() self.refreshPlot()
@ -2716,8 +2712,8 @@ class PickDlg(QDialog):
# set channel labels # set channel labels
self.multicompfig.setYTickLabels(pos, labels) self.multicompfig.setYTickLabels(pos, labels)
#self.multicompfig.setXLims(ax, self.getXLims()) # self.multicompfig.setXLims(ax, self.getXLims())
#self.multicompfig.setYLims(ax, self.getYLims()) # self.multicompfig.setYLims(ax, self.getYLims())
def zoom(self): def zoom(self):
if self.zoomAction.isChecked() and self.pick_block: if self.zoomAction.isChecked() and self.pick_block:
@ -2779,7 +2775,7 @@ class CanvasWidget(QWidget):
''' '''
def __init__(self, parent, canvas): def __init__(self, parent, canvas):
QtGui.QWidget.__init__(self, parent)#, 1) QtGui.QWidget.__init__(self, parent) # , 1)
canvas = canvas canvas = canvas
self.main_layout = QtGui.QVBoxLayout() self.main_layout = QtGui.QVBoxLayout()
self.setLayout(self.main_layout) self.setLayout(self.main_layout)
@ -2792,6 +2788,7 @@ class MultiEventWidget(QWidget):
''' '''
''' '''
def __init__(self, options=None, parent=None, windowflag=1): def __init__(self, options=None, parent=None, windowflag=1):
QtGui.QWidget.__init__(self, parent, windowflag) QtGui.QWidget.__init__(self, parent, windowflag)
@ -2851,7 +2848,7 @@ class MultiEventWidget(QWidget):
self.pb.setRange(0, 0) self.pb.setRange(0, 0)
self.pb.setVisible(False) self.pb.setVisible(False)
#space holder for progressbar # space holder for progressbar
self._pb_space = QtGui.QWidget() self._pb_space = QtGui.QWidget()
self.rb_layout.addWidget(self.start_button) self.rb_layout.addWidget(self.start_button)
@ -2869,7 +2866,7 @@ class MultiEventWidget(QWidget):
eventlist = func() eventlist = func()
if not type(eventlist) == list: if not type(eventlist) == list:
eventlist = [eventlist] eventlist = [eventlist]
tooltip='' tooltip = ''
for index, event in enumerate(eventlist): for index, event in enumerate(eventlist):
if not event: if not event:
continue continue
@ -2885,13 +2882,13 @@ class MultiEventWidget(QWidget):
for rb in self.rb_dict.values(): for rb in self.rb_dict.values():
if rb.isChecked(): if rb.isChecked():
check_events = (rb.toolTip() == 'No events for this selection') 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): def enable(self, bool):
for rb in self.rb_dict.values(): for rb in self.rb_dict.values():
rb.setEnabled(bool) rb.setEnabled(bool)
self.start_button.setEnabled(bool) self.start_button.setEnabled(bool)
self.pb.setVisible(not(bool)) self.pb.setVisible(not (bool))
self._pb_space.setVisible(bool) self._pb_space.setVisible(bool)
self.eventbox.setEnabled(bool) self.eventbox.setEnabled(bool)
self.button_clear.setEnabled(bool) self.button_clear.setEnabled(bool)
@ -2973,7 +2970,7 @@ class AutoPickWidget(MultiEventWidget):
def reinitEvents2plot(self): def reinitEvents2plot(self):
for eventID, eventDict in self.events2plot.items(): for eventID, eventDict in self.events2plot.items():
for widget_key, widget in eventDict.items(): for widget_key, widget in eventDict.items():
del(widget) del (widget)
self.events2plot = {} self.events2plot = {}
self.eventbox.clear() self.eventbox.clear()
self.refresh_plot_tabs() self.refresh_plot_tabs()
@ -3507,7 +3504,7 @@ class TuneAutopicker(QWidget):
if hasattr(self, 'pdlg_widget'): if hasattr(self, 'pdlg_widget'):
if self.pdlg_widget: if self.pdlg_widget:
self.pdlg_widget.setParent(None) self.pdlg_widget.setParent(None)
del(self.pdlg_widget) del (self.pdlg_widget)
if hasattr(self, 'overview'): if hasattr(self, 'overview'):
self.overview.setParent(None) self.overview.setParent(None)
if hasattr(self, 'p_tabs'): if hasattr(self, 'p_tabs'):
@ -4725,7 +4722,8 @@ class FilterOptionsDialog(QDialog):
'S': FilterOptions()} 'S': FilterOptions()}
self.setWindowTitle(titleString) self.setWindowTitle(titleString)
self.filterOptionWidgets = {'P': FilterOptionsWidget(self.filterOptions['P'], self.parent().getAutoFilteroptions('P')), self.filterOptionWidgets = {
'P': FilterOptionsWidget(self.filterOptions['P'], self.parent().getAutoFilteroptions('P')),
'S': FilterOptionsWidget(self.filterOptions['S'], self.parent().getAutoFilteroptions('S'))} 'S': FilterOptionsWidget(self.filterOptions['S'], self.parent().getAutoFilteroptions('S'))}
self.setupUi() self.setupUi()
self.updateUi() self.updateUi()
@ -5074,7 +5072,7 @@ class HelpForm(QDialog):
toolBar.addWidget(self.pageLabel) toolBar.addWidget(self.pageLabel)
self.webBrowser = QWebView() self.webBrowser = QWebView()
self.webBrowser.load(page) 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 = QVBoxLayout()
layout.addWidget(toolBar) layout.addWidget(toolBar)

View File

@ -5,18 +5,18 @@
# the base color # the base color
phasecolors = { phasecolors = {
'manual': { 'manual': {
'P':{ 'P': {
'rgba': (0, 0, 255, 255), 'rgba': (0, 0, 255, 255),
'modifier': 'g'}, 'modifier': 'g'},
'S':{ 'S': {
'rgba': (255, 0, 0, 255), 'rgba': (255, 0, 0, 255),
'modifier': 'b'} 'modifier': 'b'}
}, },
'auto':{ 'auto': {
'P':{ 'P': {
'rgba': (140, 0, 255, 255), 'rgba': (140, 0, 255, 255),
'modifier': 'g'}, 'modifier': 'g'},
'S':{ 'S': {
'rgba': (255, 140, 0, 255), 'rgba': (255, 140, 0, 255),
'modifier': 'b'} 'modifier': 'b'}
} }
@ -24,8 +24,8 @@ phasecolors = {
# Set plot colors and stylesheet for each style # Set plot colors and stylesheet for each style
stylecolors = { stylecolors = {
'default':{ 'default': {
'linecolor':{ 'linecolor': {
'rgba': (0, 0, 0, 255)}, 'rgba': (0, 0, 0, 255)},
'background': { 'background': {
'rgba': (255, 255, 255, 255)}, 'rgba': (255, 255, 255, 255)},
@ -67,4 +67,3 @@ stylecolors = {
'filename': 'bright.qss'} 'filename': 'bright.qss'}
} }
} }

View File

@ -7,6 +7,7 @@ from obspy.io.xseed import Parser
from pylot.core.util.dataprocessing import Metadata from pylot.core.util.dataprocessing import Metadata
from tests.utils import HidePrints from tests.utils import HidePrints
class TestMetadata(unittest.TestCase): class TestMetadata(unittest.TestCase):
def setUp(self): def setUp(self):
@ -16,9 +17,12 @@ class TestMetadata(unittest.TestCase):
self.m = Metadata(metadata_folder) self.m = Metadata(metadata_folder)
def test_get_coordinates_sucess(self): 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}, expected = {'Z': {u'elevation': 607.0, u'longitude': 12.87571, u'local_depth': 0.0, u'azimuth': 0.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}, u'latitude': 49.14502, u'dip': -90.0},
'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} '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 = {} result = {}
for channel in ('Z', 'N', 'E'): for channel in ('Z', 'N', 'E'):
@ -28,9 +32,12 @@ class TestMetadata(unittest.TestCase):
self.assertDictEqual(result[channel], expected[channel]) self.assertDictEqual(result[channel], expected[channel])
def test_get_coordinates_sucess_no_time(self): 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}, expected = {'Z': {u'elevation': 607.0, u'longitude': 12.87571, u'local_depth': 0.0, u'azimuth': 0.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}, u'latitude': 49.14502, u'dip': -90.0},
'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} '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 = {} result = {}
for channel in ('Z', 'N', 'E'): 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') fpath = os.path.join(self.metadata_folders[0], 'DATALESS.BW.WETR..HHZ')
self.m.add_inventory_file(fpath) self.m.add_inventory_file(fpath)
# adding an inventory file should append its folder to the list of inventories and the file to the # 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([os.path.join(self.metadata_folders[0], 'DATALESS.BW.WETR..HHZ')],
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.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.assertDictEqual({}, self.m.seed_ids)
self.assertEqual([self.metadata_folders[0]], self.m.inventories) self.assertEqual([self.metadata_folders[0]], self.m.inventories)