[refactor] automatic code reformatting (Pycharm)
This commit is contained in:
@@ -223,14 +223,14 @@ class LocalMagnitude(Magnitude):
|
||||
in 'Z3']
|
||||
# checking horizontal count and calculating power_sum accordingly
|
||||
if len(power) == 1:
|
||||
print ('WARNING: Only one horizontal found for station {0}.'.format(st[0].stats.station))
|
||||
power_sum = power[0]
|
||||
print('WARNING: Only one horizontal found for station {0}.'.format(st[0].stats.station))
|
||||
power_sum = power[0]
|
||||
elif len(power) == 2:
|
||||
power_sum = power[0] + power[1]
|
||||
else:
|
||||
raise ValueError('Wood-Anderson aomplitude defintion only valid for'
|
||||
' up to two horizontals: {0} given'.format(len(power)))
|
||||
|
||||
power_sum = power[0] + power[1]
|
||||
else:
|
||||
raise ValueError('Wood-Anderson aomplitude defintion only valid for'
|
||||
' up to two horizontals: {0} given'.format(len(power)))
|
||||
|
||||
sqH = np.sqrt(power_sum)
|
||||
|
||||
# get time array
|
||||
@@ -325,7 +325,7 @@ class LocalMagnitude(Magnitude):
|
||||
if self.verbose:
|
||||
print(
|
||||
"Local Magnitude for station {0}: ML = {1:3.1f}".format(
|
||||
station, magnitude.mag))
|
||||
station, magnitude.mag))
|
||||
magnitude.origin_id = self.origin_id
|
||||
magnitude.waveform_id = pick.waveform_id
|
||||
magnitude.amplitude_id = amplitude.resource_id
|
||||
@@ -404,7 +404,7 @@ class MomentMagnitude(Magnitude):
|
||||
if not wf:
|
||||
continue
|
||||
try:
|
||||
scopy = wf.copy()
|
||||
scopy = wf.copy()
|
||||
except AssertionError:
|
||||
print("WARNING: Something's wrong with the data,"
|
||||
"station {},"
|
||||
@@ -464,7 +464,7 @@ def calcMoMw(wfstream, w0, rho, vp, delta, verbosity=False):
|
||||
|
||||
# additional common parameters for calculating Mo
|
||||
# average radiation pattern of P waves (Aki & Richards, 1980)
|
||||
rP = 2 / np.sqrt(15)
|
||||
rP = 2 / np.sqrt(15)
|
||||
freesurf = 2.0 # free surface correction, assuming vertical incidence
|
||||
|
||||
Mo = w0 * 4 * np.pi * rho * np.power(vp, 3) * delta / (rP * freesurf)
|
||||
@@ -524,7 +524,7 @@ def calcsourcespec(wfstream, onset, vp, delta, azimuth, incidence,
|
||||
iplot = 2
|
||||
else:
|
||||
iplot = 0
|
||||
|
||||
|
||||
# get Q value
|
||||
Q, A = qp
|
||||
|
||||
@@ -594,13 +594,13 @@ def calcsourcespec(wfstream, onset, vp, delta, azimuth, incidence,
|
||||
|
||||
# fft
|
||||
fny = freq / 2
|
||||
#l = len(xdat) / freq
|
||||
# l = len(xdat) / freq
|
||||
# number of fft bins after Bath
|
||||
#n = freq * l
|
||||
# n = freq * l
|
||||
# find next power of 2 of data length
|
||||
m = pow(2, np.ceil(np.log(len(xdat)) / np.log(2)))
|
||||
N = min(int(np.power(m, 2)), 16384)
|
||||
#N = int(np.power(m, 2))
|
||||
# N = int(np.power(m, 2))
|
||||
y = dt * np.fft.fft(xdat, N)
|
||||
Y = abs(y[: N / 2])
|
||||
L = (N - 1) / freq
|
||||
@@ -643,8 +643,8 @@ def calcsourcespec(wfstream, onset, vp, delta, azimuth, incidence,
|
||||
w0 = np.median([w01, w02])
|
||||
Fc = np.median([fc1, fc2])
|
||||
if verbosity:
|
||||
print("calcsourcespec: Using w0-value = %e m/Hz and fc = %f Hz" % (
|
||||
w0, Fc))
|
||||
print("calcsourcespec: Using w0-value = %e m/Hz and fc = %f Hz" % (
|
||||
w0, Fc))
|
||||
if iplot >= 1:
|
||||
f1 = plt.figure()
|
||||
tLdat = np.arange(0, len(Ldat) * dt, dt)
|
||||
@@ -733,7 +733,7 @@ def fitSourceModel(f, S, fc0, iplot, verbosity=False):
|
||||
iplot = 2
|
||||
else:
|
||||
iplot = 0
|
||||
|
||||
|
||||
w0 = []
|
||||
stdw0 = []
|
||||
fc = []
|
||||
|
||||
@@ -3,16 +3,16 @@
|
||||
|
||||
import copy
|
||||
import os
|
||||
|
||||
from PySide2.QtWidgets import QMessageBox
|
||||
from obspy import read_events
|
||||
from obspy.core import read, Stream, UTCDateTime
|
||||
from obspy.core.event import Event as ObsPyEvent
|
||||
from obspy.io.sac import SacIOError
|
||||
|
||||
from PySide2.QtWidgets import QMessageBox
|
||||
|
||||
import pylot.core.loc.velest as velest
|
||||
import pylot.core.loc.focmec as focmec
|
||||
import pylot.core.loc.hypodd as hypodd
|
||||
import pylot.core.loc.velest as velest
|
||||
from pylot.core.io.phases import readPILOTEvent, picks_from_picksdict, \
|
||||
picksdict_from_pilot, merge_picks, PylotParameter
|
||||
from pylot.core.util.errors import FormatError, OverwriteError
|
||||
@@ -100,7 +100,7 @@ class Data(object):
|
||||
old_pick.phase_hint == new_pick.phase_hint,
|
||||
old_pick.method_id == new_pick.method_id]
|
||||
if all(comparison):
|
||||
del(old_pick)
|
||||
del (old_pick)
|
||||
old_picks.append(new_pick)
|
||||
elif not other.isNew() and self.isNew():
|
||||
new = other + self
|
||||
@@ -112,7 +112,7 @@ class Data(object):
|
||||
return self + other
|
||||
else:
|
||||
raise ValueError("both Data objects have differing "
|
||||
"unique Event identifiers")
|
||||
"unique Event identifiers")
|
||||
return self
|
||||
|
||||
def getPicksStr(self):
|
||||
@@ -250,7 +250,7 @@ class Data(object):
|
||||
for pick in self.get_evt_data().picks:
|
||||
if picktype in str(pick.method_id.id):
|
||||
picks.append(pick)
|
||||
|
||||
|
||||
def exportEvent(self, fnout, fnext='.xml', fcheck='auto', upperErrors=None):
|
||||
"""
|
||||
Export event to file
|
||||
@@ -260,7 +260,7 @@ class Data(object):
|
||||
can be a str or a list of strings of ['manual', 'auto', 'origin', 'magnitude']
|
||||
"""
|
||||
from pylot.core.util.defaults import OUTPUTFORMATS
|
||||
|
||||
|
||||
if not type(fcheck) == list:
|
||||
fcheck = [fcheck]
|
||||
|
||||
@@ -293,7 +293,7 @@ class Data(object):
|
||||
return
|
||||
self.checkEvent(event, fcheck)
|
||||
self.setEvtData(event)
|
||||
|
||||
|
||||
self.get_evt_data().write(fnout + fnext, format=evtformat)
|
||||
|
||||
# try exporting event
|
||||
@@ -360,13 +360,13 @@ class Data(object):
|
||||
nllocfile = open(fnout + fnext)
|
||||
l = nllocfile.readlines()
|
||||
# Adding A0/Generic Amplitude to .obs file
|
||||
#l2 = []
|
||||
#for li in l:
|
||||
# l2 = []
|
||||
# for li in l:
|
||||
# for amp in evtdata_org.amplitudes:
|
||||
# if amp.waveform_id.station_code == li[0:5].strip():
|
||||
# li = li[0:64] + '{:0.2e}'.format(amp.generic_amplitude) + li[73:-1] + '\n'
|
||||
# l2.append(li)
|
||||
#l = l2
|
||||
# l = l2
|
||||
nllocfile.close()
|
||||
l.insert(0, header)
|
||||
nllocfile = open(fnout + fnext, 'w')
|
||||
@@ -503,7 +503,8 @@ class Data(object):
|
||||
real_or_syn_data[synthetic] += read(fname, format='GSE2', starttime=self.tstart, endtime=self.tstop)
|
||||
except Exception as e:
|
||||
try:
|
||||
real_or_syn_data[synthetic] += read(fname, format='SEGY', starttime=self.tstart, endtime=self.tstop)
|
||||
real_or_syn_data[synthetic] += read(fname, format='SEGY', starttime=self.tstart,
|
||||
endtime=self.tstop)
|
||||
except Exception as e:
|
||||
warnmsg += '{0}\n{1}\n'.format(fname, e)
|
||||
except SacIOError as se:
|
||||
|
||||
@@ -515,9 +515,9 @@ defaults = {'rootpath': {'type': str,
|
||||
'namestring': 'TauPy model'},
|
||||
|
||||
'taup_phases': {'type': str,
|
||||
'tooltip': 'Specify possible phases for TauPy (comma separated). See Obspy TauPy documentation for possible values.',
|
||||
'value': 'ttall',
|
||||
'namestring': 'TauPy phases'},
|
||||
'tooltip': 'Specify possible phases for TauPy (comma separated). See Obspy TauPy documentation for possible values.',
|
||||
'value': 'ttall',
|
||||
'namestring': 'TauPy phases'},
|
||||
}
|
||||
|
||||
settings_main = {
|
||||
|
||||
@@ -8,14 +8,10 @@
|
||||
Edited for use in PyLoT
|
||||
JG, igem, 01/2022
|
||||
"""
|
||||
import pdb
|
||||
import os
|
||||
import argparse
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
import glob
|
||||
|
||||
from obspy.core.event import read_events
|
||||
from pyproj import Proj
|
||||
import glob
|
||||
|
||||
"""
|
||||
Creates an eventlist file summarizing all events found in a certain folder. Only called by pressing UI Button eventlis_xml_action
|
||||
@@ -24,14 +20,15 @@ Creates an eventlist file summarizing all events found in a certain folder. Only
|
||||
:param path: Path to root folder where single Event folder are to found
|
||||
"""
|
||||
|
||||
|
||||
def geteventlistfromxml(path, outpath):
|
||||
p = Proj(proj='utm', zone=32, ellps='WGS84')
|
||||
|
||||
|
||||
# open eventlist file and write header
|
||||
evlist = outpath + '/eventlist'
|
||||
evlistobj = open(evlist, 'w')
|
||||
evlistobj.write('EventID Date To Lat Lon EAST NORTH Dep Ml NoP NoS RMS errH errZ Gap \n')
|
||||
evlistobj.write(
|
||||
'EventID Date To Lat Lon EAST NORTH Dep Ml NoP NoS RMS errH errZ Gap \n')
|
||||
|
||||
# data path
|
||||
dp = path + "/e*/*.xml"
|
||||
@@ -52,28 +49,31 @@ def geteventlistfromxml(path, outpath):
|
||||
NoP = []
|
||||
NoS = []
|
||||
except IndexError:
|
||||
print ('Insufficient data found for event (not localised): ' + names.split('/')[-1].split('_')[-1][:-4] + ' Skipping event for eventlist.' )
|
||||
print('Insufficient data found for event (not localised): ' + names.split('/')[-1].split('_')[-1][
|
||||
:-4] + ' Skipping event for eventlist.')
|
||||
continue
|
||||
|
||||
|
||||
for i in range(len(cat.events[0].origins[0].arrivals)):
|
||||
if cat.events[0].origins[0].arrivals[i].phase == 'P':
|
||||
NoP.append(cat.events[0].origins[0].arrivals[i].phase)
|
||||
elif cat.events[0].origins[0].arrivals[i].phase == 'S':
|
||||
NoS.append(cat.events[0].origins[0].arrivals[i].phase)
|
||||
#NoP = cat.events[0].origins[0].quality.used_station_count
|
||||
# NoP = cat.events[0].origins[0].quality.used_station_count
|
||||
errH = cat.events[0].origins[0].origin_uncertainty.max_horizontal_uncertainty
|
||||
errZ = cat.events[0].origins[0].depth_errors.uncertainty
|
||||
Gap = cat.events[0].origins[0].quality.azimuthal_gap
|
||||
#evID = names.split('/')[6]
|
||||
# evID = names.split('/')[6]
|
||||
evID = names.split('/')[-1].split('_')[-1][:-4]
|
||||
Date = str(st.year) + str('%02d' % st.month) + str('%02d' % st.day)
|
||||
To = str('%02d' % st.hour) + str('%02d' % st.minute) + str('%02d' % st.second) + \
|
||||
'.' + str('%06d' % st.microsecond)
|
||||
'.' + str('%06d' % st.microsecond)
|
||||
|
||||
# write into eventlist
|
||||
evlistobj.write('%s %s %s %9.6f %9.6f %13.6f %13.6f %8.6f %3.1f %d %d NaN %d %d %d\n' %(evID, \
|
||||
Date, To, Lat, Lon, EAST, NORTH, Dep, Ml, len(NoP), len(NoS), errH, errZ, Gap))
|
||||
print ('Adding Event ' + names.split('/')[-1].split('_')[-1][:-4] + ' to eventlist')
|
||||
evlistobj.write('%s %s %s %9.6f %9.6f %13.6f %13.6f %8.6f %3.1f %d %d NaN %d %d %d\n' % (evID, \
|
||||
Date, To, Lat, Lon,
|
||||
EAST, NORTH, Dep, Ml,
|
||||
len(NoP), len(NoS),
|
||||
errH, errZ, Gap))
|
||||
print('Adding Event ' + names.split('/')[-1].split('_')[-1][:-4] + ' to eventlist')
|
||||
print('Eventlist created and saved in: ' + outpath)
|
||||
evlistobj.close()
|
||||
|
||||
|
||||
@@ -9,15 +9,15 @@
|
||||
Edited for usage in PyLoT: Jeldrik Gaal, igem, 01/2022
|
||||
"""
|
||||
|
||||
import argparse
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
from obspy.core.event import read_events
|
||||
import glob
|
||||
|
||||
def getQualitiesfromxml(path):
|
||||
import matplotlib.pyplot as plt
|
||||
import numpy as np
|
||||
from obspy.core.event import read_events
|
||||
|
||||
# uncertainties
|
||||
|
||||
def getQualitiesfromxml(path):
|
||||
# uncertainties
|
||||
ErrorsP = [0.02, 0.04, 0.08, 0.16]
|
||||
ErrorsS = [0.04, 0.08, 0.16, 0.32]
|
||||
|
||||
@@ -31,48 +31,48 @@ def getQualitiesfromxml(path):
|
||||
Sw2 = []
|
||||
Sw3 = []
|
||||
Sw4 = []
|
||||
|
||||
|
||||
# data path
|
||||
dp = path + '/e*/*.xml'
|
||||
# list of all available xml-files
|
||||
xmlnames = glob.glob(dp)
|
||||
|
||||
# read all onset weights
|
||||
for names in xmlnames:
|
||||
for names in xmlnames:
|
||||
print("Getting onset weights from {}".format(names))
|
||||
cat = read_events(names)
|
||||
arrivals = cat.events[0].picks
|
||||
for Pick in arrivals:
|
||||
if Pick.phase_hint[0] == 'P':
|
||||
if Pick.time_errors.uncertainty <= ErrorsP[0]:
|
||||
Pw0.append(Pick.time_errors.uncertainty)
|
||||
if Pick.time_errors.uncertainty <= ErrorsP[0]:
|
||||
Pw0.append(Pick.time_errors.uncertainty)
|
||||
elif Pick.time_errors.uncertainty > ErrorsP[0] and \
|
||||
Pick.time_errors.uncertainty <= ErrorsP[1]:
|
||||
Pw1.append(Pick.time_errors.uncertainty)
|
||||
Pick.time_errors.uncertainty <= ErrorsP[1]:
|
||||
Pw1.append(Pick.time_errors.uncertainty)
|
||||
elif Pick.time_errors.uncertainty > ErrorsP[1] and \
|
||||
Pick.time_errors.uncertainty <= ErrorsP[2]:
|
||||
Pw2.append(Pick.time_errors.uncertainty)
|
||||
Pick.time_errors.uncertainty <= ErrorsP[2]:
|
||||
Pw2.append(Pick.time_errors.uncertainty)
|
||||
elif Pick.time_errors.uncertainty > ErrorsP[2] and \
|
||||
Pick.time_errors.uncertainty <= ErrorsP[3]:
|
||||
Pw3.append(Pick.time_errors.uncertainty)
|
||||
Pick.time_errors.uncertainty <= ErrorsP[3]:
|
||||
Pw3.append(Pick.time_errors.uncertainty)
|
||||
elif Pick.time_errors.uncertainty > ErrorsP[3]:
|
||||
Pw4.append(Pick.time_errors.uncertainty)
|
||||
Pw4.append(Pick.time_errors.uncertainty)
|
||||
else:
|
||||
pass
|
||||
elif Pick.phase_hint[0] == 'S':
|
||||
if Pick.time_errors.uncertainty <= ErrorsS[0]:
|
||||
Sw0.append(Pick.time_errors.uncertainty)
|
||||
if Pick.time_errors.uncertainty <= ErrorsS[0]:
|
||||
Sw0.append(Pick.time_errors.uncertainty)
|
||||
elif Pick.time_errors.uncertainty > ErrorsS[0] and \
|
||||
Pick.time_errors.uncertainty <= ErrorsS[1]:
|
||||
Sw1.append(Pick.time_errors.uncertainty)
|
||||
Pick.time_errors.uncertainty <= ErrorsS[1]:
|
||||
Sw1.append(Pick.time_errors.uncertainty)
|
||||
elif Pick.time_errors.uncertainty > ErrorsS[1] and \
|
||||
Pick.time_errors.uncertainty <= ErrorsS[2]:
|
||||
Sw2.append(Pick.time_errors.uncertainty)
|
||||
Pick.time_errors.uncertainty <= ErrorsS[2]:
|
||||
Sw2.append(Pick.time_errors.uncertainty)
|
||||
elif Pick.time_errors.uncertainty > ErrorsS[2] and \
|
||||
Pick.time_errors.uncertainty <= ErrorsS[3]:
|
||||
Sw3.append(Pick.time_errors.uncertainty)
|
||||
Pick.time_errors.uncertainty <= ErrorsS[3]:
|
||||
Sw3.append(Pick.time_errors.uncertainty)
|
||||
elif Pick.time_errors.uncertainty > ErrorsS[3]:
|
||||
Sw4.append(Pick.time_errors.uncertainty)
|
||||
Sw4.append(Pick.time_errors.uncertainty)
|
||||
else:
|
||||
pass
|
||||
else:
|
||||
@@ -133,7 +133,6 @@ def getQualitiesfromxml(path):
|
||||
plt.xticks(y_pos, weights)
|
||||
plt.xlim([-0.5, 4.5])
|
||||
plt.xlabel('Qualities')
|
||||
plt.title('{0} P-Qualities, {1} S-Qualities'.format(numPweights, numSweights))
|
||||
plt.title('{0} P-Qualities, {1} S-Qualities'.format(numPweights, numSweights))
|
||||
plt.legend([p1, p2], ['P-Weights', 'S-Weights'])
|
||||
plt.show()
|
||||
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
import glob
|
||||
import os
|
||||
import warnings
|
||||
|
||||
import matplotlib.pyplot as plt
|
||||
import numpy as np
|
||||
import obspy.core.event as ope
|
||||
import os
|
||||
import scipy.io as sio
|
||||
import warnings
|
||||
from obspy.core import UTCDateTime
|
||||
from obspy.core.event import read_events
|
||||
from obspy.core.util import AttribDict
|
||||
@@ -507,14 +508,14 @@ def writephases(arrivals, fformat, filename, parameter=None, eventinfo=None):
|
||||
:param eventinfo: optional, needed for VELEST-cnv file
|
||||
and FOCMEC- and HASH-input files
|
||||
:type eventinfo: `obspy.core.event.Event` object
|
||||
"""
|
||||
"""
|
||||
if fformat == 'NLLoc':
|
||||
print("Writing phases to %s for NLLoc" % filename)
|
||||
fid = open("%s" % filename, 'w')
|
||||
# write header
|
||||
fid.write('# EQEVENT: %s Label: EQ%s Loc: X 0.00 Y 0.00 Z 10.00 OT 0.00 \n' %
|
||||
(parameter.get('database'), parameter.get('eventID')))
|
||||
arrivals = chooseArrivals(arrivals) # MP MP what is chooseArrivals? It is not defined anywhere
|
||||
arrivals = chooseArrivals(arrivals) # MP MP what is chooseArrivals? It is not defined anywhere
|
||||
for key in arrivals:
|
||||
# P onsets
|
||||
if arrivals[key].has_key('P'):
|
||||
@@ -568,20 +569,20 @@ def writephases(arrivals, fformat, filename, parameter=None, eventinfo=None):
|
||||
sweight = 0 # do not use pick
|
||||
except KeyError as e:
|
||||
print(str(e) + '; no weight set during processing')
|
||||
Ao = arrivals[key]['S']['Ao'] # peak-to-peak amplitude
|
||||
Ao = arrivals[key]['S']['Ao'] # peak-to-peak amplitude
|
||||
if Ao == None:
|
||||
Ao = 0.0
|
||||
#fid.write('%s ? ? ? S %s %d%02d%02d %02d%02d %7.4f GAU 0 0 0 0 %d \n' % (key,
|
||||
# fid.write('%s ? ? ? S %s %d%02d%02d %02d%02d %7.4f GAU 0 0 0 0 %d \n' % (key,
|
||||
fid.write('%s ? ? ? S %s %d%02d%02d %02d%02d %7.4f GAU 0 %9.2f 0 0 %d \n' % (key,
|
||||
fm,
|
||||
year,
|
||||
month,
|
||||
day,
|
||||
hh,
|
||||
mm,
|
||||
ss_ms,
|
||||
Ao,
|
||||
sweight))
|
||||
fm,
|
||||
year,
|
||||
month,
|
||||
day,
|
||||
hh,
|
||||
mm,
|
||||
ss_ms,
|
||||
Ao,
|
||||
sweight))
|
||||
|
||||
fid.close()
|
||||
elif fformat == 'HYPO71':
|
||||
@@ -590,7 +591,7 @@ def writephases(arrivals, fformat, filename, parameter=None, eventinfo=None):
|
||||
# write header
|
||||
fid.write(' %s\n' %
|
||||
parameter.get('eventID'))
|
||||
arrivals = chooseArrivals(arrivals) # MP MP what is chooseArrivals? It is not defined anywhere
|
||||
arrivals = chooseArrivals(arrivals) # MP MP what is chooseArrivals? It is not defined anywhere
|
||||
for key in arrivals:
|
||||
if arrivals[key]['P']['weight'] < 4:
|
||||
stat = key
|
||||
@@ -765,7 +766,7 @@ def writephases(arrivals, fformat, filename, parameter=None, eventinfo=None):
|
||||
arrivals = picksdict_from_picks(evt)
|
||||
# check for automatic and manual picks
|
||||
# prefer manual picks
|
||||
usedarrivals = chooseArrival(arrivals)
|
||||
usedarrivals = chooseArrival(arrivals)
|
||||
for key in usedarrivals:
|
||||
# P onsets
|
||||
if usedarrivals[key].has_key('P'):
|
||||
@@ -811,9 +812,9 @@ def writephases(arrivals, fformat, filename, parameter=None, eventinfo=None):
|
||||
event = eventinfo['pylot_id']
|
||||
hddID = event.split('.')[0][1:5]
|
||||
except:
|
||||
print ("Error 1111111!")
|
||||
hddID = "00000"
|
||||
# write header
|
||||
print("Error 1111111!")
|
||||
hddID = "00000"
|
||||
# write header
|
||||
fid.write('# %d %d %d %d %d %5.2f %7.4f +%6.4f %7.4f %4.2f 0.1 0.5 %4.2f %s\n' % (
|
||||
stime.year, stime.month, stime.day, stime.hour, stime.minute, stime.second,
|
||||
eventsource['latitude'], eventsource['longitude'], eventsource['depth'] / 1000,
|
||||
@@ -1005,6 +1006,7 @@ def writephases(arrivals, fformat, filename, parameter=None, eventinfo=None):
|
||||
fid1.close()
|
||||
fid2.close()
|
||||
|
||||
|
||||
def chooseArrival(arrivals):
|
||||
"""
|
||||
takes arrivals and returns the manual picks if manual and automatic ones are there
|
||||
|
||||
@@ -4,11 +4,12 @@
|
||||
import glob
|
||||
import os
|
||||
import subprocess
|
||||
|
||||
from obspy import read_events
|
||||
|
||||
from pylot.core.io.phases import writephases
|
||||
from pylot.core.util.utils import getPatternLine, runProgram
|
||||
from pylot.core.util.gui import which
|
||||
from pylot.core.util.utils import getPatternLine, runProgram
|
||||
from pylot.core.util.version import get_git_version as _getVersionString
|
||||
|
||||
__version__ = _getVersionString()
|
||||
|
||||
@@ -9,21 +9,21 @@ function conglomerate utils.
|
||||
:author: MAGS2 EP3 working group / Ludger Kueperkoch
|
||||
"""
|
||||
import copy
|
||||
import traceback
|
||||
|
||||
import matplotlib.pyplot as plt
|
||||
import numpy as np
|
||||
import traceback
|
||||
from obspy import Trace
|
||||
from obspy.taup import TauPyModel
|
||||
|
||||
from pylot.core.pick.charfuns import CharacteristicFunction
|
||||
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, get_pickparams, get_quality_class
|
||||
from pylot.core.util.utils import getPatternLine, gen_Pool,\
|
||||
getSNR, fmpicker, checkPonsets, wadaticheck, get_quality_class
|
||||
from pylot.core.util.utils import getPatternLine, gen_Pool, \
|
||||
get_Bool, identifyPhaseID, get_None, correct_iplot
|
||||
|
||||
from obspy.taup import TauPyModel
|
||||
from obspy import Trace
|
||||
|
||||
def autopickevent(data, param, iplot=0, fig_dict=None, fig_dict_wadatijack=None, ncores=0, metadata=None, origin=None):
|
||||
"""
|
||||
@@ -182,25 +182,25 @@ class PickingResults(dict):
|
||||
# TODO What are those?
|
||||
self.w0 = None
|
||||
self.fc = None
|
||||
self.Ao = None # Wood-Anderson peak-to-peak amplitude
|
||||
self.Ao = None # Wood-Anderson peak-to-peak amplitude
|
||||
|
||||
# Station information
|
||||
self.network = None
|
||||
self.channel = None
|
||||
|
||||
# pick information
|
||||
self.picker = 'auto' # type of pick
|
||||
self.picker = 'auto' # type of pick
|
||||
self.marked = []
|
||||
|
||||
# pick results
|
||||
self.epp = None # earliest possible pick
|
||||
self.mpp = None # most likely onset
|
||||
self.lpp = None # latest possible pick
|
||||
self.fm = 'N' # first motion polarity, can be set to 'U' (Up) or 'D' (Down)
|
||||
self.snr = None # signal-to-noise ratio of onset
|
||||
self.snrdb = None # signal-to-noise ratio of onset [dB]
|
||||
self.spe = None # symmetrized picking error
|
||||
self.weight = 4 # weight of onset
|
||||
self.epp = None # earliest possible pick
|
||||
self.mpp = None # most likely onset
|
||||
self.lpp = None # latest possible pick
|
||||
self.fm = 'N' # first motion polarity, can be set to 'U' (Up) or 'D' (Down)
|
||||
self.snr = None # signal-to-noise ratio of onset
|
||||
self.snrdb = None # signal-to-noise ratio of onset [dB]
|
||||
self.spe = None # symmetrized picking error
|
||||
self.weight = 4 # weight of onset
|
||||
|
||||
# to correctly provide dot access to dictionary attributes, all attribute access of the class is forwarded to the
|
||||
# dictionary
|
||||
@@ -335,9 +335,10 @@ class AutopickStation(object):
|
||||
"""
|
||||
waveform_data = {}
|
||||
for key in self.channelorder:
|
||||
waveform_data[key] = self.wfstream.select(component=key) # try ZNE first
|
||||
waveform_data[key] = self.wfstream.select(component=key) # try ZNE first
|
||||
if len(waveform_data[key]) == 0:
|
||||
waveform_data[key] = self.wfstream.select(component=str(self.channelorder[key])) # use 123 as second option
|
||||
waveform_data[key] = self.wfstream.select(
|
||||
component=str(self.channelorder[key])) # use 123 as second option
|
||||
return waveform_data['Z'], waveform_data['N'], waveform_data['E']
|
||||
|
||||
def get_traces_from_streams(self):
|
||||
@@ -524,7 +525,7 @@ class AutopickStation(object):
|
||||
|
||||
self.plot_pick_results()
|
||||
self.finish_picking()
|
||||
return [{'P': self.p_results, 'S':self.s_results}, self.ztrace.stats.station]
|
||||
return [{'P': self.p_results, 'S': self.s_results}, self.ztrace.stats.station]
|
||||
|
||||
def finish_picking(self):
|
||||
|
||||
@@ -573,7 +574,7 @@ class AutopickStation(object):
|
||||
|
||||
self.s_results.channel = self.etrace.stats.channel
|
||||
self.s_results.network = self.etrace.stats.network
|
||||
self.s_results.fm = None # override default value 'N'
|
||||
self.s_results.fm = None # override default value 'N'
|
||||
|
||||
def plot_pick_results(self):
|
||||
if self.iplot > 0:
|
||||
@@ -588,12 +589,14 @@ class AutopickStation(object):
|
||||
plt_flag = 0
|
||||
fig._tight = True
|
||||
ax1 = fig.add_subplot(311)
|
||||
tdata = np.linspace(start=0, stop=self.ztrace.stats.endtime-self.ztrace.stats.starttime, num=self.ztrace.stats.npts)
|
||||
tdata = np.linspace(start=0, stop=self.ztrace.stats.endtime - self.ztrace.stats.starttime,
|
||||
num=self.ztrace.stats.npts)
|
||||
# plot tapered trace filtered with bpz2 filter settings
|
||||
ax1.plot(tdata, self.tr_filt_z_bpz2.data/max(self.tr_filt_z_bpz2.data), color=linecolor, linewidth=0.7, label='Data')
|
||||
ax1.plot(tdata, self.tr_filt_z_bpz2.data / max(self.tr_filt_z_bpz2.data), color=linecolor, linewidth=0.7,
|
||||
label='Data')
|
||||
if self.p_results.weight < 4:
|
||||
# plot CF of initial onset (HOScf or ARZcf)
|
||||
ax1.plot(self.cf1.getTimeArray(), self.cf1.getCF()/max(self.cf1.getCF()), 'b', label='CF1')
|
||||
ax1.plot(self.cf1.getTimeArray(), self.cf1.getCF() / max(self.cf1.getCF()), 'b', label='CF1')
|
||||
if self.p_data.p_aic_plot_flag == 1:
|
||||
aicpick = self.p_data.aicpick
|
||||
refPpick = self.p_data.refPpick
|
||||
@@ -631,23 +634,28 @@ class AutopickStation(object):
|
||||
if self.horizontal_traces_exist() and self.s_data.Sflag == 1:
|
||||
# plot E trace
|
||||
ax2 = fig.add_subplot(3, 1, 2, sharex=ax1)
|
||||
th1data = np.linspace(0, self.etrace.stats.endtime-self.etrace.stats.starttime, self.etrace.stats.npts)
|
||||
th1data = np.linspace(0, self.etrace.stats.endtime - self.etrace.stats.starttime,
|
||||
self.etrace.stats.npts)
|
||||
# plot filtered and tapered waveform
|
||||
ax2.plot(th1data, self.etrace.data / max(self.etrace.data), color=linecolor, linewidth=0.7, label='Data')
|
||||
ax2.plot(th1data, self.etrace.data / max(self.etrace.data), color=linecolor, linewidth=0.7,
|
||||
label='Data')
|
||||
if self.p_results.weight < 4:
|
||||
# plot initial CF (ARHcf or AR3Ccf)
|
||||
ax2.plot(self.arhcf1.getTimeArray(), self.arhcf1.getCF() / max(self.arhcf1.getCF()), 'b', label='CF1')
|
||||
ax2.plot(self.arhcf1.getTimeArray(), self.arhcf1.getCF() / max(self.arhcf1.getCF()), 'b',
|
||||
label='CF1')
|
||||
if self.s_data.aicSflag == 1 and self.s_results.weight <= 4:
|
||||
aicarhpick = self.aicarhpick
|
||||
refSpick = self.refSpick
|
||||
# plot second cf, used for determing precise onset (ARHcf or AR3Ccf)
|
||||
ax2.plot(self.arhcf2.getTimeArray(), self.arhcf2.getCF() / max(self.arhcf2.getCF()), 'm', label='CF2')
|
||||
ax2.plot(self.arhcf2.getTimeArray(), self.arhcf2.getCF() / max(self.arhcf2.getCF()), 'm',
|
||||
label='CF2')
|
||||
# plot preliminary onset time, calculated from CF1
|
||||
ax2.plot([aicarhpick.getpick(), aicarhpick.getpick()], [-1, 1], 'g', label='Initial S Onset')
|
||||
ax2.plot([aicarhpick.getpick() - 0.5, aicarhpick.getpick() + 0.5], [1, 1], 'g')
|
||||
ax2.plot([aicarhpick.getpick() - 0.5, aicarhpick.getpick() + 0.5], [-1, -1], 'g')
|
||||
# plot precise onset time, calculated from CF2
|
||||
ax2.plot([refSpick.getpick(), refSpick.getpick()], [-1.3, 1.3], 'g', linewidth=2, label='Final S Pick')
|
||||
ax2.plot([refSpick.getpick(), refSpick.getpick()], [-1.3, 1.3], 'g', linewidth=2,
|
||||
label='Final S Pick')
|
||||
ax2.plot([refSpick.getpick() - 0.5, refSpick.getpick() + 0.5], [1.3, 1.3], 'g', linewidth=2)
|
||||
ax2.plot([refSpick.getpick() - 0.5, refSpick.getpick() + 0.5], [-1.3, -1.3], 'g', linewidth=2)
|
||||
ax2.plot([self.s_results.lpp, self.s_results.lpp], [-1.1, 1.1], 'g--', label='lpp')
|
||||
@@ -667,15 +675,19 @@ class AutopickStation(object):
|
||||
|
||||
# plot N trace
|
||||
ax3 = fig.add_subplot(3, 1, 3, sharex=ax1)
|
||||
th2data= np.linspace(0, self.ntrace.stats.endtime-self.ntrace.stats.starttime, self.ntrace.stats.npts)
|
||||
th2data = np.linspace(0, self.ntrace.stats.endtime - self.ntrace.stats.starttime,
|
||||
self.ntrace.stats.npts)
|
||||
# plot trace
|
||||
ax3.plot(th2data, self.ntrace.data / max(self.ntrace.data), color=linecolor, linewidth=0.7, label='Data')
|
||||
ax3.plot(th2data, self.ntrace.data / max(self.ntrace.data), color=linecolor, linewidth=0.7,
|
||||
label='Data')
|
||||
if self.p_results.weight < 4:
|
||||
p22, = ax3.plot(self.arhcf1.getTimeArray(), self.arhcf1.getCF() / max(self.arhcf1.getCF()), 'b', label='CF1')
|
||||
p22, = ax3.plot(self.arhcf1.getTimeArray(), self.arhcf1.getCF() / max(self.arhcf1.getCF()), 'b',
|
||||
label='CF1')
|
||||
if self.s_data.aicSflag == 1:
|
||||
aicarhpick = self.aicarhpick
|
||||
refSpick = self.refSpick
|
||||
ax3.plot(self.arhcf2.getTimeArray(), self.arhcf2.getCF() / max(self.arhcf2.getCF()), 'm', label='CF2')
|
||||
ax3.plot(self.arhcf2.getTimeArray(), self.arhcf2.getCF() / max(self.arhcf2.getCF()), 'm',
|
||||
label='CF2')
|
||||
ax3.plot([aicarhpick.getpick(), aicarhpick.getpick()], [-1, 1], 'g', label='Initial S Onset')
|
||||
ax3.plot([aicarhpick.getpick() - 0.5, aicarhpick.getpick() + 0.5], [1, 1], 'g')
|
||||
ax3.plot([aicarhpick.getpick() - 0.5, aicarhpick.getpick() + 0.5], [-1, -1], 'g')
|
||||
@@ -716,7 +728,8 @@ class AutopickStation(object):
|
||||
if aicpick.getpick() is None:
|
||||
msg = "Bad initial (AIC) P-pick, skipping this onset!\nAIC-SNR={0}, AIC-Slope={1}counts/s\n " \
|
||||
"(min. AIC-SNR={2}, min. AIC-Slope={3}counts/s)"
|
||||
msg = msg.format(aicpick.getSNR(), aicpick.getSlope(), self.pickparams["minAICPSNR"], self.pickparams["minAICPslope"])
|
||||
msg = msg.format(aicpick.getSNR(), aicpick.getSlope(), self.pickparams["minAICPSNR"],
|
||||
self.pickparams["minAICPslope"])
|
||||
self.vprint(msg)
|
||||
return 0
|
||||
# Quality check initial pick with minimum signal length
|
||||
@@ -726,14 +739,16 @@ class AutopickStation(object):
|
||||
if len(self.nstream) == 0 or len(self.estream) == 0:
|
||||
msg = 'One or more horizontal component(s) missing!\n' \
|
||||
'Signal length only checked on vertical component!\n' \
|
||||
'Decreasing minsiglengh from {0} to {1}'\
|
||||
.format(minsiglength, minsiglength / 2)
|
||||
'Decreasing minsiglengh from {0} to {1}' \
|
||||
.format(minsiglength, minsiglength / 2)
|
||||
self.vprint(msg)
|
||||
minsiglength = minsiglength / 2
|
||||
else:
|
||||
# filter, taper other traces as well since signal length is compared on all traces
|
||||
trH1_filt, _ = self.prepare_wfstream(self.estream, freqmin=self.pickparams["bph1"][0], freqmax=self.pickparams["bph1"][1])
|
||||
trH2_filt, _ = self.prepare_wfstream(self.nstream, freqmin=self.pickparams["bph1"][0], freqmax=self.pickparams["bph1"][1])
|
||||
trH1_filt, _ = self.prepare_wfstream(self.estream, freqmin=self.pickparams["bph1"][0],
|
||||
freqmax=self.pickparams["bph1"][1])
|
||||
trH2_filt, _ = self.prepare_wfstream(self.nstream, freqmin=self.pickparams["bph1"][0],
|
||||
freqmax=self.pickparams["bph1"][1])
|
||||
zne += trH1_filt
|
||||
zne += trH2_filt
|
||||
minsiglength = minsiglength
|
||||
@@ -819,15 +834,18 @@ class AutopickStation(object):
|
||||
# get preliminary onset time from AIC-CF
|
||||
self.set_current_figure('aicFig')
|
||||
aicpick = AICPicker(aiccf, self.pickparams["tsnrz"], self.pickparams["pickwinP"], self.iplot,
|
||||
Tsmooth=self.pickparams["aictsmooth"], fig=self.current_figure, linecolor=self.current_linecolor)
|
||||
Tsmooth=self.pickparams["aictsmooth"], fig=self.current_figure,
|
||||
linecolor=self.current_linecolor)
|
||||
# save aicpick for plotting later
|
||||
self.p_data.aicpick = aicpick
|
||||
# add pstart and pstop to aic plot
|
||||
if self.current_figure:
|
||||
# TODO remove plotting from picking, make own plot function
|
||||
for ax in self.current_figure.axes:
|
||||
ax.vlines(self.pickparams["pstart"], ax.get_ylim()[0], ax.get_ylim()[1], color='c', linestyles='dashed', label='P start')
|
||||
ax.vlines(self.pickparams["pstop"], ax.get_ylim()[0], ax.get_ylim()[1], color='c', linestyles='dashed', label='P stop')
|
||||
ax.vlines(self.pickparams["pstart"], ax.get_ylim()[0], ax.get_ylim()[1], color='c', linestyles='dashed',
|
||||
label='P start')
|
||||
ax.vlines(self.pickparams["pstop"], ax.get_ylim()[0], ax.get_ylim()[1], color='c', linestyles='dashed',
|
||||
label='P stop')
|
||||
ax.legend(loc=1)
|
||||
|
||||
Pflag = self._pick_p_quality_control(aicpick, z_copy, tr_filt)
|
||||
@@ -841,7 +859,8 @@ class AutopickStation(object):
|
||||
error_msg = 'AIC P onset slope to small: got {}, min {}'.format(slope, self.pickparams["minAICPslope"])
|
||||
raise PickingFailedException(error_msg)
|
||||
if aicpick.getSNR() < self.pickparams["minAICPSNR"]:
|
||||
error_msg = 'AIC P onset SNR to small: got {}, min {}'.format(aicpick.getSNR(), self.pickparams["minAICPSNR"])
|
||||
error_msg = 'AIC P onset SNR to small: got {}, min {}'.format(aicpick.getSNR(),
|
||||
self.pickparams["minAICPSNR"])
|
||||
raise PickingFailedException(error_msg)
|
||||
|
||||
self.p_data.p_aic_plot_flag = 1
|
||||
@@ -849,7 +868,8 @@ class AutopickStation(object):
|
||||
'autopickstation: re-filtering vertical trace...'.format(aicpick.getSlope(), aicpick.getSNR())
|
||||
self.vprint(msg)
|
||||
# refilter waveform with larger bandpass
|
||||
tr_filt, z_copy = self.prepare_wfstream(self.zstream, freqmin=self.pickparams["bpz2"][0], freqmax=self.pickparams["bpz2"][1])
|
||||
tr_filt, z_copy = self.prepare_wfstream(self.zstream, freqmin=self.pickparams["bpz2"][0],
|
||||
freqmax=self.pickparams["bpz2"][1])
|
||||
# save filtered trace in instance for later plotting
|
||||
self.tr_filt_z_bpz2 = tr_filt
|
||||
# determine new times around initial onset
|
||||
@@ -861,25 +881,29 @@ class AutopickStation(object):
|
||||
else:
|
||||
self.cf2 = None
|
||||
assert isinstance(self.cf2, CharacteristicFunction), 'cf2 is not set correctly: maybe the algorithm name () is ' \
|
||||
'corrupted'.format(self.pickparams["algoP"])
|
||||
'corrupted'.format(self.pickparams["algoP"])
|
||||
self.set_current_figure('refPpick')
|
||||
# get refined onset time from CF2
|
||||
refPpick = PragPicker(self.cf2, self.pickparams["tsnrz"], self.pickparams["pickwinP"], self.iplot, self.pickparams["ausP"],
|
||||
self.pickparams["tsmoothP"], aicpick.getpick(), self.current_figure, self.current_linecolor)
|
||||
refPpick = PragPicker(self.cf2, self.pickparams["tsnrz"], self.pickparams["pickwinP"], self.iplot,
|
||||
self.pickparams["ausP"],
|
||||
self.pickparams["tsmoothP"], aicpick.getpick(), self.current_figure,
|
||||
self.current_linecolor)
|
||||
# save PragPicker result for plotting
|
||||
self.p_data.refPpick = refPpick
|
||||
self.p_results.mpp = refPpick.getpick()
|
||||
if self.p_results.mpp is None:
|
||||
msg = 'Bad initial (AIC) P-pick, skipping this onset!\n AIC-SNR={}, AIC-Slope={}counts/s\n' \
|
||||
'(min. AIC-SNR={}, min. AIC-Slope={}counts/s)'
|
||||
msg.format(aicpick.getSNR(), aicpick.getSlope(), self.pickparams["minAICPSNR"], self.pickparams["minAICPslope"])
|
||||
msg.format(aicpick.getSNR(), aicpick.getSlope(), self.pickparams["minAICPSNR"],
|
||||
self.pickparams["minAICPslope"])
|
||||
self.vprint(msg)
|
||||
self.s_data.Sflag = 0
|
||||
raise PickingFailedException(msg)
|
||||
# quality assessment, get earliest/latest pick and symmetrized uncertainty
|
||||
#todo quality assessment in own function
|
||||
# todo quality assessment in own function
|
||||
self.set_current_figure('el_Ppick')
|
||||
elpicker_results = earllatepicker(z_copy, self.pickparams["nfacP"], self.pickparams["tsnrz"], self.p_results.mpp,
|
||||
elpicker_results = earllatepicker(z_copy, self.pickparams["nfacP"], self.pickparams["tsnrz"],
|
||||
self.p_results.mpp,
|
||||
self.iplot, fig=self.current_figure, linecolor=self.current_linecolor)
|
||||
self.p_results.epp, self.p_results.lpp, self.p_results.spe = elpicker_results
|
||||
snr_results = getSNR(z_copy, self.pickparams["tsnrz"], self.p_results.mpp)
|
||||
@@ -887,7 +911,8 @@ class AutopickStation(object):
|
||||
|
||||
# weight P-onset using symmetric error
|
||||
self.p_results.weight = get_quality_class(self.p_results.spe, self.pickparams["timeerrorsP"])
|
||||
if self.p_results.weight <= self.pickparams["minfmweight"] and self.p_results.snr >= self.pickparams["minFMSNR"]:
|
||||
if self.p_results.weight <= self.pickparams["minfmweight"] and self.p_results.snr >= self.pickparams[
|
||||
"minFMSNR"]:
|
||||
# if SNR is high enough, try to determine first motion of onset
|
||||
self.set_current_figure('fm_picker')
|
||||
self.p_results.fm = fmpicker(self.zstream, z_copy, self.pickparams["fmpickwin"], self.p_results.mpp,
|
||||
@@ -960,7 +985,7 @@ class AutopickStation(object):
|
||||
trH1_filt, _ = self.prepare_wfstream(self.zstream, filter_freq_min, filter_freq_max)
|
||||
trH2_filt, _ = self.prepare_wfstream(self.estream, filter_freq_min, filter_freq_max)
|
||||
trH3_filt, _ = self.prepare_wfstream(self.nstream, filter_freq_min, filter_freq_max)
|
||||
h_copy =self. hdat.copy()
|
||||
h_copy = self.hdat.copy()
|
||||
h_copy[0].data = trH1_filt.data
|
||||
h_copy[1].data = trH2_filt.data
|
||||
h_copy[2].data = trH3_filt.data
|
||||
@@ -1115,7 +1140,8 @@ class AutopickStation(object):
|
||||
# get preliminary onset time from AIC cf
|
||||
self.set_current_figure('aicARHfig')
|
||||
aicarhpick = AICPicker(haiccf, self.pickparams["tsnrh"], self.pickparams["pickwinS"], self.iplot,
|
||||
Tsmooth=self.pickparams["aictsmoothS"], fig=self.current_figure, linecolor=self.current_linecolor)
|
||||
Tsmooth=self.pickparams["aictsmoothS"], fig=self.current_figure,
|
||||
linecolor=self.current_linecolor)
|
||||
# save pick for later plotting
|
||||
self.aicarhpick = aicarhpick
|
||||
|
||||
@@ -1126,8 +1152,10 @@ class AutopickStation(object):
|
||||
|
||||
# get refined onset time from CF2
|
||||
self.set_current_figure('refSpick')
|
||||
refSpick = PragPicker(arhcf2, self.pickparams["tsnrh"], self.pickparams["pickwinS"], self.iplot, self.pickparams["ausS"],
|
||||
self.pickparams["tsmoothS"], aicarhpick.getpick(), self.current_figure, self.current_linecolor)
|
||||
refSpick = PragPicker(arhcf2, self.pickparams["tsnrh"], self.pickparams["pickwinS"], self.iplot,
|
||||
self.pickparams["ausS"],
|
||||
self.pickparams["tsmoothS"], aicarhpick.getpick(), self.current_figure,
|
||||
self.current_linecolor)
|
||||
# save refSpick for later plotitng
|
||||
self.refSpick = refSpick
|
||||
self.s_results.mpp = refSpick.getpick()
|
||||
@@ -1151,7 +1179,6 @@ class AutopickStation(object):
|
||||
self.current_linecolor = plot_style['linecolor']['rgba_mpl']
|
||||
|
||||
|
||||
|
||||
def autopickstation(wfstream, pickparam, verbose=False, iplot=0, fig_dict=None, metadata=None, origin=None):
|
||||
"""
|
||||
Main function to calculate picks for the station.
|
||||
@@ -1239,11 +1266,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" % (
|
||||
|
||||
@@ -18,8 +18,8 @@ autoregressive prediction: application ot local and regional distances, Geophys.
|
||||
"""
|
||||
|
||||
import numpy as np
|
||||
from scipy import signal
|
||||
from obspy.core import Stream
|
||||
from scipy import signal
|
||||
|
||||
|
||||
class CharacteristicFunction(object):
|
||||
@@ -159,7 +159,7 @@ class CharacteristicFunction(object):
|
||||
zz = self.orig_data.copy()
|
||||
z1 = zz[0].copy()
|
||||
zz[0].data = z1.data[int(start):int(stop)]
|
||||
if zz[0].stats.npts == 0: # cut times do not fit data length!
|
||||
if zz[0].stats.npts == 0: # cut times do not fit data length!
|
||||
zz[0].data = z1.data # take entire data
|
||||
data = zz
|
||||
return data
|
||||
@@ -241,7 +241,7 @@ class AICcf(CharacteristicFunction):
|
||||
ff = np.where(inf is True)
|
||||
if len(ff) >= 1:
|
||||
cf[ff] = 0
|
||||
|
||||
|
||||
self.cf = cf - np.mean(cf)
|
||||
self.xcf = x
|
||||
|
||||
@@ -305,7 +305,7 @@ class HOScf(CharacteristicFunction):
|
||||
if ind.size:
|
||||
first = ind[0]
|
||||
LTA[:first] = LTA[first]
|
||||
|
||||
|
||||
self.cf = LTA
|
||||
self.xcf = x
|
||||
|
||||
@@ -313,7 +313,8 @@ class HOScf(CharacteristicFunction):
|
||||
class ARZcf(CharacteristicFunction):
|
||||
|
||||
def __init__(self, data, cut, t1, t2, pickparams):
|
||||
super(ARZcf, self).__init__(data, cut, t1=t1, t2=t2, order=pickparams["Parorder"], fnoise=pickparams["addnoise"])
|
||||
super(ARZcf, self).__init__(data, cut, t1=t1, t2=t2, order=pickparams["Parorder"],
|
||||
fnoise=pickparams["addnoise"])
|
||||
|
||||
def calcCF(self, data):
|
||||
"""
|
||||
@@ -448,7 +449,8 @@ class ARZcf(CharacteristicFunction):
|
||||
class ARHcf(CharacteristicFunction):
|
||||
|
||||
def __init__(self, data, cut, t1, t2, pickparams):
|
||||
super(ARHcf, self).__init__(data, cut, t1=t1, t2=t2, order=pickparams["Sarorder"], fnoise=pickparams["addnoise"])
|
||||
super(ARHcf, self).__init__(data, cut, t1=t1, t2=t2, order=pickparams["Sarorder"],
|
||||
fnoise=pickparams["addnoise"])
|
||||
|
||||
def calcCF(self, data):
|
||||
"""
|
||||
@@ -600,7 +602,8 @@ class ARHcf(CharacteristicFunction):
|
||||
class AR3Ccf(CharacteristicFunction):
|
||||
|
||||
def __init__(self, data, cut, t1, t2, pickparams):
|
||||
super(AR3Ccf, self).__init__(data, cut, t1=t1, t2=t2, order=pickparams["Sarorder"], fnoise=pickparams["addnoise"])
|
||||
super(AR3Ccf, self).__init__(data, cut, t1=t1, t2=t2, order=pickparams["Sarorder"],
|
||||
fnoise=pickparams["addnoise"])
|
||||
|
||||
def calcCF(self, data):
|
||||
"""
|
||||
|
||||
@@ -2,10 +2,11 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import copy
|
||||
import matplotlib.pyplot as plt
|
||||
import numpy as np
|
||||
import operator
|
||||
import os
|
||||
|
||||
import matplotlib.pyplot as plt
|
||||
import numpy as np
|
||||
from obspy.core import AttribDict
|
||||
|
||||
from pylot.core.util.pdf import ProbabilityDensityFunction
|
||||
@@ -117,7 +118,7 @@ class Comparison(object):
|
||||
|
||||
pdf_a = self.get('auto').generate_pdf_data(type)
|
||||
pdf_b = self.get('manu').generate_pdf_data(type)
|
||||
|
||||
|
||||
for station, phases in pdf_a.items():
|
||||
if station in pdf_b.keys():
|
||||
compare_pdf = dict()
|
||||
@@ -400,6 +401,7 @@ class PDFstatistics(object):
|
||||
This object can be used to get various statistic values from probability density functions.
|
||||
Takes a path as argument.
|
||||
"""
|
||||
|
||||
# TODO: change root to datapath
|
||||
|
||||
def __init__(self, directory):
|
||||
|
||||
@@ -19,9 +19,10 @@ calculated after Diehl & Kissling (2009).
|
||||
:author: MAGS2 EP3 working group / Ludger Kueperkoch
|
||||
"""
|
||||
|
||||
import warnings
|
||||
|
||||
import matplotlib.pyplot as plt
|
||||
import numpy as np
|
||||
import warnings
|
||||
from scipy.signal import argrelmax, argrelmin
|
||||
|
||||
from pylot.core.pick.charfuns import CharacteristicFunction
|
||||
@@ -476,7 +477,7 @@ class PragPicker(AutoPicker):
|
||||
cfpick_r = 0
|
||||
cfpick_l = 0
|
||||
lpickwindow = int(round(self.PickWindow / self.dt))
|
||||
#for i in range(max(np.insert(ipick, 0, 2)), min([ipick1 + lpickwindow + 1, len(self.cf) - 1])):
|
||||
# for i in range(max(np.insert(ipick, 0, 2)), min([ipick1 + lpickwindow + 1, len(self.cf) - 1])):
|
||||
# # local minimum
|
||||
# if self.cf[i + 1] > self.cf[i] <= self.cf[i - 1]:
|
||||
# if cfsmooth[i - 1] * (1 + aus1) >= cfsmooth[i]:
|
||||
@@ -509,7 +510,7 @@ class PragPicker(AutoPicker):
|
||||
self.Pick = pick_l
|
||||
pickflag = 1
|
||||
elif flagpick_l > 0 and flagpick_r > 0 and cfpick_l >= cfpick_r:
|
||||
self.Pick = pick_r # MP MP there is no pick_r defined, commented out after commit of LK on 29.07.2020 (see above)
|
||||
self.Pick = pick_r # MP MP there is no pick_r defined, commented out after commit of LK on 29.07.2020 (see above)
|
||||
pickflag = 1
|
||||
elif flagpick_l == 0 and flagpick_r > 0 and cfpick_l >= cfpick_r:
|
||||
self.Pick = pick_l
|
||||
|
||||
@@ -9,10 +9,11 @@
|
||||
"""
|
||||
|
||||
import warnings
|
||||
|
||||
import matplotlib.pyplot as plt
|
||||
import numpy as np
|
||||
from scipy.signal import argrelmax
|
||||
from obspy.core import Stream, UTCDateTime
|
||||
from scipy.signal import argrelmax
|
||||
|
||||
from pylot.core.util.utils import get_Bool, get_None, SetChannelComponents
|
||||
|
||||
@@ -73,7 +74,7 @@ def earllatepicker(X, nfac, TSNR, Pick1, iplot=0, verbosity=1, fig=None, linecol
|
||||
|
||||
x = X[0].data
|
||||
t = np.linspace(0, X[0].stats.endtime - X[0].stats.starttime,
|
||||
X[0].stats.npts)
|
||||
X[0].stats.npts)
|
||||
inoise = getnoisewin(t, Pick1, TSNR[0], TSNR[1])
|
||||
# get signal window
|
||||
isignal = getsignalwin(t, Pick1, TSNR[2])
|
||||
@@ -218,7 +219,7 @@ def fmpicker(Xraw, Xfilt, pickwin, Pick, iplot=0, fig=None, linecolor='k'):
|
||||
xraw = Xraw[0].data
|
||||
xfilt = Xfilt[0].data
|
||||
t = np.linspace(0, Xraw[0].stats.endtime - Xraw[0].stats.starttime,
|
||||
Xraw[0].stats.npts)
|
||||
Xraw[0].stats.npts)
|
||||
# get pick window
|
||||
ipick = np.where((t <= min([Pick + pickwin, len(Xraw[0])])) & (t >= Pick))
|
||||
if len(ipick[0]) <= 1:
|
||||
@@ -536,9 +537,10 @@ def getslopewin(Tcf, Pick, tslope):
|
||||
:rtype: `numpy.ndarray`
|
||||
"""
|
||||
# TODO: fill out docstring
|
||||
slope = np.where( (Tcf <= min(Pick + tslope, Tcf[-1])) & (Tcf >= Pick) )
|
||||
slope = np.where((Tcf <= min(Pick + tslope, Tcf[-1])) & (Tcf >= Pick))
|
||||
return slope[0]
|
||||
|
||||
|
||||
def getResolutionWindow(snr, extent):
|
||||
"""
|
||||
Produce the half of the time resolution window width from given SNR value
|
||||
@@ -848,7 +850,7 @@ def checksignallength(X, pick, minsiglength, pickparams, iplot=0, fig=None, line
|
||||
print("Presumably picked noise peak, pick is rejected!")
|
||||
print("(min. signal length required: %s s)" % minsiglength)
|
||||
returnflag = 0
|
||||
else:
|
||||
else:
|
||||
# calculate minimum adjusted signal level
|
||||
minsiglevel = np.mean(rms[inoise]) * nfac
|
||||
# minimum adjusted number of samples over minimum signal level
|
||||
@@ -1207,7 +1209,7 @@ def checkZ4S(X, pick, pickparams, iplot, fig=None, linecolor='k'):
|
||||
rms = rms_dict[key]
|
||||
trace = traces_dict[key]
|
||||
t = np.linspace(diff_dict[key], trace.stats.endtime - trace.stats.starttime + diff_dict[key],
|
||||
trace.stats.npts)
|
||||
trace.stats.npts)
|
||||
if i == 0:
|
||||
if get_None(fig) is None:
|
||||
fig = plt.figure() # self.iplot) ### WHY? MP MP
|
||||
@@ -1329,6 +1331,7 @@ def get_quality_class(uncertainty, weight_classes):
|
||||
quality = len(weight_classes)
|
||||
return quality
|
||||
|
||||
|
||||
def set_NaNs_to(data, nan_value):
|
||||
"""
|
||||
Replace all NaNs in data with nan_value
|
||||
@@ -1344,6 +1347,7 @@ def set_NaNs_to(data, nan_value):
|
||||
data[nn] = nan_value
|
||||
return data
|
||||
|
||||
|
||||
def taper_cf(cf):
|
||||
"""
|
||||
Taper cf data to get rid off of side maximas
|
||||
@@ -1355,6 +1359,7 @@ def taper_cf(cf):
|
||||
tap = np.hanning(len(cf))
|
||||
return tap * cf
|
||||
|
||||
|
||||
def cf_positive(cf):
|
||||
"""
|
||||
Shifts cf so that all values are positive
|
||||
@@ -1365,6 +1370,7 @@ def cf_positive(cf):
|
||||
"""
|
||||
return cf + max(abs(cf))
|
||||
|
||||
|
||||
def smooth_cf(cf, t_smooth, delta):
|
||||
"""
|
||||
Smooth cf by taking samples over t_smooth length
|
||||
@@ -1393,6 +1399,7 @@ def smooth_cf(cf, t_smooth, delta):
|
||||
cf_smooth -= offset # remove offset from smoothed function
|
||||
return cf_smooth
|
||||
|
||||
|
||||
def check_counts_ms(data):
|
||||
"""
|
||||
check if data is in counts or m/s
|
||||
@@ -1452,9 +1459,9 @@ def calcSlope(Data, datasmooth, Tcf, Pick, TSNR):
|
||||
if imax == 0:
|
||||
print("AICPicker: Maximum for slope determination right at the beginning of the window!")
|
||||
print("Choose longer slope determination window!")
|
||||
raise IndexError
|
||||
raise IndexError
|
||||
iislope = islope[0][0:imax + 1] # cut index so it contains only the first maximum
|
||||
dataslope = Data[0].data[iislope] # slope will only be calculated to the first maximum
|
||||
dataslope = Data[0].data[iislope] # slope will only be calculated to the first maximum
|
||||
# calculate slope as polynomal fit of order 1
|
||||
xslope = np.arange(0, len(dataslope))
|
||||
P = np.polyfit(xslope, dataslope, 1)
|
||||
@@ -1475,8 +1482,10 @@ def get_pickparams(pickparam):
|
||||
:rtype: (dict, dict, dict, dict)
|
||||
"""
|
||||
# Define names of all parameters in different groups
|
||||
p_parameter_names = 'algoP pstart pstop use_taup taup_model tlta tsnrz hosorder bpz1 bpz2 pickwinP aictsmooth tsmoothP ausP nfacP tpred1z tdet1z Parorder addnoise Precalcwin minAICPslope minAICPSNR timeerrorsP checkwindowP minfactorP'.split(' ')
|
||||
s_parameter_names = 'algoS sstart sstop bph1 bph2 tsnrh pickwinS tpred1h tdet1h tpred2h tdet2h Sarorder aictsmoothS tsmoothS ausS minAICSslope minAICSSNR Srecalcwin nfacS timeerrorsS zfac checkwindowS minfactorS'.split(' ')
|
||||
p_parameter_names = 'algoP pstart pstop use_taup taup_model tlta tsnrz hosorder bpz1 bpz2 pickwinP aictsmooth tsmoothP ausP nfacP tpred1z tdet1z Parorder addnoise Precalcwin minAICPslope minAICPSNR timeerrorsP checkwindowP minfactorP'.split(
|
||||
' ')
|
||||
s_parameter_names = 'algoS sstart sstop bph1 bph2 tsnrh pickwinS tpred1h tdet1h tpred2h tdet2h Sarorder aictsmoothS tsmoothS ausS minAICSslope minAICSSNR Srecalcwin nfacS timeerrorsS zfac checkwindowS minfactorS'.split(
|
||||
' ')
|
||||
first_motion_names = 'minFMSNR fmpickwin minfmweight'.split(' ')
|
||||
signal_length_names = 'minsiglength minpercent noisefactor'.split(' ')
|
||||
# Get list of values from pickparam by name
|
||||
@@ -1494,6 +1503,7 @@ def get_pickparams(pickparam):
|
||||
|
||||
return p_params, s_params, first_motion_params, signal_length_params
|
||||
|
||||
|
||||
def getQualityFromUncertainty(uncertainty, Errors):
|
||||
# set initial quality to 4 (worst) and change only if one condition is hit
|
||||
quality = 4
|
||||
@@ -1517,6 +1527,7 @@ def getQualityFromUncertainty(uncertainty, Errors):
|
||||
|
||||
return quality
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
import doctest
|
||||
|
||||
|
||||
@@ -1,27 +1,22 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import sys
|
||||
import os
|
||||
import matplotlib
|
||||
|
||||
from PySide2 import QtCore, QtGui, QtWidgets
|
||||
from PySide2.QtCore import Qt
|
||||
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
|
||||
import matplotlib.patheffects as PathEffects
|
||||
import traceback
|
||||
|
||||
import cartopy.crs as ccrs
|
||||
import matplotlib.pyplot as plt
|
||||
import cartopy.feature as cf
|
||||
from cartopy.mpl.gridliner import LongitudeFormatter, LatitudeFormatter
|
||||
|
||||
import traceback
|
||||
import obspy
|
||||
import matplotlib
|
||||
import matplotlib.patheffects as PathEffects
|
||||
import matplotlib.pyplot as plt
|
||||
import numpy as np
|
||||
import obspy
|
||||
from PySide2 import QtWidgets
|
||||
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
|
||||
from mpl_toolkits.axes_grid1.inset_locator import inset_axes
|
||||
from scipy.interpolate import griddata
|
||||
from pylot.core.util.widgets import PickDlg
|
||||
|
||||
from pylot.core.pick.utils import get_quality_class
|
||||
from pylot.core.util.widgets import PickDlg
|
||||
|
||||
matplotlib.use('Qt5Agg')
|
||||
|
||||
@@ -173,7 +168,8 @@ class Array_map(QtWidgets.QWidget):
|
||||
self.canvas.fig.tight_layout()
|
||||
|
||||
def add_merid_paral(self):
|
||||
self.gridlines = self.canvas.axes.gridlines(draw_labels=False, alpha=0.6, color='gray', linewidth=self.linewidth/2, zorder=7)
|
||||
self.gridlines = self.canvas.axes.gridlines(draw_labels=False, alpha=0.6, color='gray',
|
||||
linewidth=self.linewidth / 2, zorder=7)
|
||||
# TODO: current cartopy version does not support label removal. Devs are working on it.
|
||||
# Should be fixed in coming cartopy versions
|
||||
# self.gridlines.xformatter = LONGITUDE_FORMATTER
|
||||
@@ -513,7 +509,7 @@ class Array_map(QtWidgets.QWidget):
|
||||
levels = np.linspace(self.get_min_from_picks(), self.get_max_from_picks(), nlevel)
|
||||
|
||||
self.contourf = self.canvas.axes.contourf(self.longrid, self.latgrid, self.picksgrid_active, levels,
|
||||
linewidths=self.linewidth*5, transform=ccrs.PlateCarree(),
|
||||
linewidths=self.linewidth * 5, transform=ccrs.PlateCarree(),
|
||||
alpha=0.4, zorder=8, cmap=self.get_colormap())
|
||||
|
||||
def get_colormap(self):
|
||||
|
||||
@@ -2,9 +2,10 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import glob
|
||||
import numpy as np
|
||||
import os
|
||||
import sys
|
||||
|
||||
import numpy as np
|
||||
from obspy import UTCDateTime, read_inventory, read
|
||||
from obspy.io.xseed import Parser
|
||||
|
||||
@@ -46,7 +47,7 @@ class Metadata(object):
|
||||
def __repr__(self):
|
||||
return self.__str__()
|
||||
|
||||
def add_inventory(self, path_to_inventory, obspy_dmt_inv = False):
|
||||
def add_inventory(self, path_to_inventory, obspy_dmt_inv=False):
|
||||
"""
|
||||
Add path to list of inventories.
|
||||
:param path_to_inventory: Path to a folder
|
||||
@@ -211,6 +212,7 @@ class Metadata(object):
|
||||
self.stations_dict[st_id] = {'latitude': station[0].latitude,
|
||||
'longitude': station[0].longitude,
|
||||
'elevation': station[0].elevation}
|
||||
|
||||
read_stat = {'xml': stat_info_from_inventory,
|
||||
'dless': stat_info_from_parser}
|
||||
|
||||
@@ -380,6 +382,7 @@ def check_time(datetime):
|
||||
except ValueError:
|
||||
return False
|
||||
|
||||
|
||||
# TODO: change root to datapath
|
||||
def get_file_list(root_dir):
|
||||
"""
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import os
|
||||
|
||||
from obspy import UTCDateTime
|
||||
from obspy.core.event import Event as ObsPyEvent
|
||||
from obspy.core.event import Origin, ResourceIdentifier
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
# small script that creates array maps for each event within a previously generated PyLoT project
|
||||
|
||||
import os
|
||||
|
||||
num_thread = "16"
|
||||
os.environ["OMP_NUM_THREADS"] = num_thread
|
||||
os.environ["OPENBLAS_NUM_THREADS"] = num_thread
|
||||
@@ -15,6 +16,7 @@ import multiprocessing
|
||||
import sys
|
||||
import glob
|
||||
import matplotlib
|
||||
|
||||
matplotlib.use('Qt5Agg')
|
||||
sys.path.append(os.path.join('/'.join(sys.argv[0].split('/')[:-1]), '../../..'))
|
||||
|
||||
@@ -52,7 +54,8 @@ def array_map_worker(input_dict):
|
||||
print('Working on event: {} ({}/{})'.format(eventdir, input_dict['index'] + 1, input_dict['nEvents']))
|
||||
xml_picks = glob.glob(os.path.join(eventdir, f'*{input_dict["f_ext"]}.xml'))
|
||||
if not len(xml_picks):
|
||||
print('Event {} does not have any picks associated with event file extension {}'. format(eventdir, input_dict['f_ext']))
|
||||
print('Event {} does not have any picks associated with event file extension {}'.format(eventdir,
|
||||
input_dict['f_ext']))
|
||||
return
|
||||
# check for picks
|
||||
manualpicks = event.getPicks()
|
||||
@@ -92,4 +95,3 @@ if __name__ == '__main__':
|
||||
|
||||
for infile in args.infiles:
|
||||
main(os.path.join(args.dataroot, infile), f_ext='_correlated_0.03-0.1', ncores=args.ncores)
|
||||
|
||||
|
||||
@@ -11,7 +11,6 @@ try:
|
||||
except Exception as e:
|
||||
print('Warning: Could not import module QtCore.')
|
||||
|
||||
|
||||
from pylot.core.util.utils import pick_color
|
||||
|
||||
|
||||
@@ -53,7 +52,7 @@ def which(program, parameter):
|
||||
settings = QSettings()
|
||||
for key in settings.allKeys():
|
||||
if 'binPath' in key:
|
||||
os.environ['PATH'] += ':{0}'.format(settings.value(key))
|
||||
os.environ['PATH'] += ':{0}'.format(settings.value(key))
|
||||
nllocpath = ":" + parameter.get('nllocbin')
|
||||
os.environ['PATH'] += nllocpath
|
||||
except Exception as e:
|
||||
@@ -73,7 +72,7 @@ def which(program, parameter):
|
||||
return program
|
||||
else:
|
||||
for path in os.environ["PATH"].split(os.pathsep):
|
||||
exe_file = os.path.join(path, program)
|
||||
exe_file = os.path.join(path, program)
|
||||
for candidate in ext_candidates(exe_file):
|
||||
if is_exe(candidate):
|
||||
return candidate
|
||||
@@ -101,4 +100,3 @@ def make_pen(picktype, phase, key, quality):
|
||||
linestyle, width = pick_linestyle_pg(picktype, key)
|
||||
pen = pg.mkPen(rgba, width=width, style=linestyle)
|
||||
return pen
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import os
|
||||
|
||||
from obspy import UTCDateTime
|
||||
|
||||
|
||||
@@ -36,12 +37,12 @@ def qml_from_obspyDMT(path):
|
||||
return IOError('Could not find Event at {}'.format(path))
|
||||
|
||||
with open(path, 'rb') as infile:
|
||||
event_dmt = pickle.load(infile)#, fix_imports=True)
|
||||
event_dmt = pickle.load(infile) # , fix_imports=True)
|
||||
|
||||
event_dmt['origin_id'].id = str(event_dmt['origin_id'].id)
|
||||
|
||||
ev = Event(resource_id=event_dmt['event_id'])
|
||||
#small bugfix "unhashable type: 'newstr' "
|
||||
# small bugfix "unhashable type: 'newstr' "
|
||||
event_dmt['origin_id'].id = str(event_dmt['origin_id'].id)
|
||||
|
||||
origin = Origin(resource_id=event_dmt['origin_id'],
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import numpy as np
|
||||
import warnings
|
||||
|
||||
import numpy as np
|
||||
from obspy import UTCDateTime
|
||||
|
||||
from pylot.core.util.utils import fit_curve, clims
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
import sys, os, traceback
|
||||
import multiprocessing
|
||||
import os
|
||||
import sys
|
||||
import traceback
|
||||
|
||||
from PySide2.QtCore import QThread, Signal, Qt, Slot, QRunnable, QObject
|
||||
from PySide2.QtWidgets import QDialog, QProgressBar, QLabel, QHBoxLayout, QPushButton
|
||||
|
||||
@@ -102,9 +105,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:
|
||||
|
||||
@@ -2,12 +2,13 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import hashlib
|
||||
import numpy as np
|
||||
import os
|
||||
import platform
|
||||
import re
|
||||
import subprocess
|
||||
import warnings
|
||||
|
||||
import numpy as np
|
||||
from obspy import UTCDateTime, read
|
||||
from obspy.core import AttribDict
|
||||
from obspy.signal.rotate import rotate2zne
|
||||
|
||||
@@ -35,9 +35,9 @@ from __future__ import print_function
|
||||
|
||||
__all__ = "get_git_version"
|
||||
|
||||
import inspect
|
||||
# NO IMPORTS FROM PYLOT IN THIS FILE! (file gets used at installation time)
|
||||
import os
|
||||
import inspect
|
||||
from subprocess import Popen, PIPE
|
||||
|
||||
# NO IMPORTS FROM PYLOT IN THIS FILE! (file gets used at installation time)
|
||||
|
||||
@@ -8,15 +8,16 @@ Created on Wed Mar 19 11:27:35 2014
|
||||
import copy
|
||||
import datetime
|
||||
import getpass
|
||||
import matplotlib
|
||||
import multiprocessing
|
||||
import numpy as np
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
import time
|
||||
import traceback
|
||||
|
||||
import matplotlib
|
||||
import numpy as np
|
||||
|
||||
matplotlib.use('QT5Agg')
|
||||
|
||||
from matplotlib.figure import Figure
|
||||
@@ -36,7 +37,7 @@ from PySide2.QtWidgets import QAction, QApplication, QCheckBox, QComboBox, \
|
||||
QGridLayout, QLabel, QLineEdit, QMessageBox, \
|
||||
QTabWidget, QToolBar, QVBoxLayout, QHBoxLayout, QWidget, \
|
||||
QPushButton, QFileDialog, QInputDialog
|
||||
from PySide2.QtCore import QSettings, Qt, QUrl, Signal, Slot
|
||||
from PySide2.QtCore import QSettings, Qt, QUrl, Signal
|
||||
from PySide2.QtWebEngineWidgets import QWebEngineView as QWebView
|
||||
from obspy import Stream, Trace, UTCDateTime
|
||||
from obspy.core.util import AttribDict
|
||||
@@ -65,19 +66,20 @@ else:
|
||||
raise ImportError(f'Python version {sys.version_info.major} of current interpreter not supported.'
|
||||
f'\nPlease use Python 3+.')
|
||||
|
||||
|
||||
# workaround to prevent PyCharm from deleting icons_rc import when optimizing imports
|
||||
# icons_rc = icons_rc
|
||||
icons_rc = icons_rc
|
||||
|
||||
|
||||
class QSpinBox(QtWidgets.QSpinBox):
|
||||
''' Custom SpinBox, insensitive to Mousewheel (prevents accidental changes when scrolling through parameters) '''
|
||||
|
||||
def wheelEvent(self, event):
|
||||
event.ignore()
|
||||
|
||||
|
||||
class QDoubleSpinBox(QtWidgets.QDoubleSpinBox):
|
||||
''' Custom DoubleSpinBox, insensitive to Mousewheel (prevents accidental changes when scrolling through parameters) '''
|
||||
|
||||
def wheelEvent(self, event):
|
||||
event.ignore()
|
||||
|
||||
@@ -131,7 +133,7 @@ class LogWidget(QtWidgets.QWidget):
|
||||
def reset_error(self):
|
||||
# used to make sure that write errors is finished before raising new Message box etc.
|
||||
self.current_active_error = False
|
||||
self.stderr.append(60*'#' + '\n\n')
|
||||
self.stderr.append(60 * '#' + '\n\n')
|
||||
|
||||
|
||||
def getDataType(parent):
|
||||
|
||||
Reference in New Issue
Block a user