feature/port-to-py3 #11
34
PyLoT.py
34
PyLoT.py
@ -487,7 +487,8 @@ class MainWindow(QMainWindow):
|
||||
icon=qualities_icon, tip='Histogram of pick qualities')
|
||||
self.qualities_action.setEnabled(False)
|
||||
# MP MP not yet implemented, therefore hide:
|
||||
self.qualities_action.setVisible(False)
|
||||
# LK will be implemented soon, basic script has already (03/2021) been finished
|
||||
self.qualities_action.setVisible(True)
|
||||
|
||||
printAction = self.createAction(self, "&Print event ...",
|
||||
self.show_event_information, QKeySequence.Print,
|
||||
@ -1529,7 +1530,6 @@ class MainWindow(QMainWindow):
|
||||
event = self.get_current_event()
|
||||
if not type(outformats) == list:
|
||||
outformats = [outformats]
|
||||
|
||||
def getSavePath(event, directory, outformats):
|
||||
if not directory:
|
||||
title = 'Save event data as {} to directory ...'.format(outformats)
|
||||
@ -1548,13 +1548,13 @@ class MainWindow(QMainWindow):
|
||||
|
||||
uppererrorP = self._inputs['timeerrorsP']
|
||||
uppererrorS = self._inputs['timeerrorsS']
|
||||
|
||||
# Inserted to prevent Bug in Eventlist
|
||||
self.get_data().setEvtData(event)
|
||||
try:
|
||||
self.get_data().applyEVTData(event, typ='event') # getPicks())
|
||||
except OverwriteError:
|
||||
self.get_data().resetPicks()
|
||||
return self.saveData(event, directory, outformats)
|
||||
|
||||
fcheck = ['auto', 'manual', 'origins', 'magnitude']
|
||||
|
||||
saved_as = str()
|
||||
@ -1570,7 +1570,6 @@ class MainWindow(QMainWindow):
|
||||
msg = 'Event {} saved as {} in format(s) {}'.format(event.pylot_id, fbasename, saved_as.strip())
|
||||
self.update_status(msg)
|
||||
print(msg)
|
||||
|
||||
event.dirty = False
|
||||
self.fill_eventbox()
|
||||
return True
|
||||
@ -3045,7 +3044,6 @@ class MainWindow(QMainWindow):
|
||||
self.locate_event()
|
||||
|
||||
ctrfile = os.path.join(locroot, 'run', parameter['ctrfile'])
|
||||
|
||||
ttt = parameter['ttpatter']
|
||||
outfile = parameter['outpatter']
|
||||
eventname = self.get_current_event_name()
|
||||
@ -3061,7 +3059,6 @@ class MainWindow(QMainWindow):
|
||||
print(e.message)
|
||||
# finally:
|
||||
# os.remove(phasefile)
|
||||
|
||||
self.get_data().applyEVTData(lt.read_location(locpath), typ='event')
|
||||
for event in self.calc_magnitude():
|
||||
self.get_data().applyEVTData(event, typ='event')
|
||||
@ -3244,7 +3241,7 @@ class MainWindow(QMainWindow):
|
||||
|
||||
# iterate through eventlist and generate items for table rows
|
||||
self.project._table = []
|
||||
for index, event in enumerate(eventlist):
|
||||
for index, event in enumerate(eventlist):
|
||||
phaseErrors = {'P': self._inputs['timeerrorsP'],
|
||||
'S': self._inputs['timeerrorsS']}
|
||||
|
||||
@ -3297,17 +3294,24 @@ class MainWindow(QMainWindow):
|
||||
item_depth.setText(str(origin.depth))
|
||||
if hasattr(event, 'magnitudes'):
|
||||
if event.magnitudes:
|
||||
moment_magnitude = event.magnitudes[0]
|
||||
moment_magnitude.mag = '%4.1f' % moment_magnitude.mag
|
||||
moment_mag = str(moment_magnitude.mag)
|
||||
if len(event.magnitudes) > 1:
|
||||
moment_magnitude = event.magnitudes[0]
|
||||
moment_magnitude.mag = '%4.1f' % moment_magnitude.mag
|
||||
item_momentmag.setText(str(moment_magnitude.mag))
|
||||
local_magnitude = event.magnitudes[1]
|
||||
local_magnitude.mag = '%4.1f' % local_magnitude.mag
|
||||
local_mag = str(local_magnitude.mag)
|
||||
item_localmag.setText(str(local_magnitude.mag))
|
||||
else:
|
||||
local_mag = None
|
||||
item_momentmag.setText(moment_mag)
|
||||
item_localmag.setText(local_mag)
|
||||
# check type of magnitude
|
||||
if event.magnitudes[0].magnitude_type == 'Mw':
|
||||
moment_magnitude = event.magnitudes[0]
|
||||
moment_magnitude.mag = '%4.1f' % moment_magnitude.mag
|
||||
item_momentmag.setText(str(moment_magnitude.mag))
|
||||
elif event.magnitudes[0].magnitude_type == 'ML':
|
||||
local_magnitude = event.magnitudes[0]
|
||||
local_magnitude.mag = '%4.1f' % local_magnitude.mag
|
||||
item_localmag.setText(str(local_magnitude.mag))
|
||||
|
||||
item_notes.setText(event.notes)
|
||||
|
||||
set_enabled(item_path, True, False)
|
||||
|
@ -221,11 +221,16 @@ class LocalMagnitude(Magnitude):
|
||||
|
||||
power = [np.power(tr.data, 2) for tr in st if tr.stats.channel[-1] not
|
||||
in 'Z3']
|
||||
if len(power) != 2:
|
||||
raise ValueError('Wood-Anderson amplitude defintion only valid for '
|
||||
'two horizontals: {0} given'.format(len(power)))
|
||||
power_sum = power[0] + power[1]
|
||||
#
|
||||
# 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]
|
||||
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)))
|
||||
|
||||
sqH = np.sqrt(power_sum)
|
||||
|
||||
# get time array
|
||||
@ -277,12 +282,13 @@ class LocalMagnitude(Magnitude):
|
||||
for a in self.arrivals:
|
||||
if a.phase not in 'sS':
|
||||
continue
|
||||
pick = a.pick_id.get_referred_object()
|
||||
station = pick.waveform_id.station_code
|
||||
# make sure calculating Ml only from reliable onsets
|
||||
# NLLoc: time_weight = 0 => do not use onset!
|
||||
if a.time_weight == 0:
|
||||
print("Uncertain pick at Station {}, do not use it!".format(station))
|
||||
continue
|
||||
pick = a.pick_id.get_referred_object()
|
||||
station = pick.waveform_id.station_code
|
||||
wf = select_for_phase(self.stream.select(
|
||||
station=station), a.phase)
|
||||
if not wf:
|
||||
@ -394,24 +400,28 @@ class MomentMagnitude(Magnitude):
|
||||
print("WARNING: No instrument corrected data available,"
|
||||
" no magnitude calculation possible! Go on.")
|
||||
continue
|
||||
scopy = self.stream.copy()
|
||||
wf = scopy.select(station=station)
|
||||
wf = self.stream.select(station=station)
|
||||
if not wf:
|
||||
continue
|
||||
try:
|
||||
scopy = wf.copy()
|
||||
except AssertionError:
|
||||
print("WARNING: Something's wrong with the data,"
|
||||
"station {},"
|
||||
"no calculation of moment magnitude possible! Go on.".format(station))
|
||||
continue
|
||||
onset = pick.time
|
||||
distance = degrees2kilometers(a.distance)
|
||||
azimuth = a.azimuth
|
||||
incidence = a.takeoff_angle
|
||||
w0, fc = calcsourcespec(wf, onset, self.p_velocity, distance,
|
||||
w0, fc = calcsourcespec(scopy, onset, self.p_velocity, distance,
|
||||
azimuth, incidence, self.p_attenuation,
|
||||
self.plot_flag, self.verbose)
|
||||
if w0 is None or fc is None:
|
||||
if self.verbose:
|
||||
print("WARNING: insufficient frequency information")
|
||||
continue
|
||||
WF = select_for_phase(self.stream.select(
|
||||
station=station), a.phase)
|
||||
WF = select_for_phase(WF, "P")
|
||||
WF = select_for_phase(scopy, "P")
|
||||
m0, mw = calcMoMw(WF, w0, self.rock_density, self.p_velocity,
|
||||
distance, self.verbose)
|
||||
self.moment_props = (station, dict(w0=w0, fc=fc, Mo=m0))
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/env python
|
||||
#!/usr/bin/env pyth n
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import copy
|
||||
@ -264,7 +264,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]
|
||||
|
||||
@ -297,7 +297,9 @@ class Data(object):
|
||||
return
|
||||
self.checkEvent(event, fcheck)
|
||||
self.setEvtData(event)
|
||||
|
||||
self.get_evt_data().write(fnout + fnext, format=evtformat)
|
||||
|
||||
# try exporting event
|
||||
else:
|
||||
evtdata_org = self.get_evt_data()
|
||||
@ -361,6 +363,14 @@ class Data(object):
|
||||
header = '# EQEVENT: Label: EQ%s Loc: X 0.00 Y 0.00 Z 10.00 OT 0.00 \n' % evid
|
||||
nllocfile = open(fnout + fnext)
|
||||
l = nllocfile.readlines()
|
||||
# Adding A0/Generic Amplitude to .obs file
|
||||
#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
|
||||
nllocfile.close()
|
||||
l.insert(0, header)
|
||||
nllocfile = open(fnout + fnext, 'w')
|
||||
|
@ -511,7 +511,7 @@ defaults = {'rootpath': {'type': str,
|
||||
|
||||
'taup_model': {'type': str,
|
||||
'tooltip': 'Define TauPy model for traveltime estimation. Possible values: 1066a, 1066b, ak135, ak135f, herrin, iasp91, jb, prem, pwdk, sp6',
|
||||
'value': 'iasp91',
|
||||
'value': None,
|
||||
'namestring': 'TauPy model'},
|
||||
|
||||
'taup_phases': {'type': str,
|
||||
|
@ -543,6 +543,7 @@ def writephases(arrivals, fformat, filename, parameter=None, eventinfo=None):
|
||||
try:
|
||||
if arrivals[key]['P']['weight'] >= 4:
|
||||
pweight = 0 # do not use pick
|
||||
print("Station {}: Uncertain pick, do not use it!".format(key))
|
||||
except KeyError as e:
|
||||
print(e.message + '; no weight set during processing')
|
||||
fid.write('%s ? ? ? P %s %d%02d%02d %02d%02d %7.4f GAU 0 0 0 0 %d \n' % (key,
|
||||
@ -805,7 +806,7 @@ def writephases(arrivals, fformat, filename, parameter=None, eventinfo=None):
|
||||
return
|
||||
stime = eventsource['time']
|
||||
event = parameter.get('eventID')
|
||||
hddID = event.split('.')[0][1:5]
|
||||
hddID = event.split('.')[0][1:5]
|
||||
# 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,
|
||||
|
@ -81,7 +81,6 @@ def locate(fnin, parameter=None):
|
||||
:param fnin: external program name
|
||||
:return: None
|
||||
"""
|
||||
|
||||
exe_path = which('NLLoc', parameter)
|
||||
if exe_path is None:
|
||||
raise NLLocError('NonLinLoc executable not found; check your '
|
||||
|
@ -7,6 +7,7 @@
|
||||
|
||||
:author: Ludger Kueperkoch, BESTEC GmbH
|
||||
"""
|
||||
|
||||
import warnings
|
||||
import matplotlib.pyplot as plt
|
||||
import numpy as np
|
||||
@ -595,6 +596,8 @@ def select_for_phase(st, phase):
|
||||
alter_comp = compclass.getCompPosition(comp)
|
||||
alter_comp = str(alter_comp[0])
|
||||
sel_st += st.select(component=comp)
|
||||
if len(sel_st) < 1:
|
||||
sel_st += st.select(component="Q")
|
||||
sel_st += st.select(component=alter_comp)
|
||||
elif phase.upper() == 'S':
|
||||
comps = 'NE'
|
||||
|
@ -53,7 +53,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 +73,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
|
||||
@ -100,4 +100,5 @@ def make_pen(picktype, phase, key, quality):
|
||||
rgba = pick_color(picktype, phase, quality)
|
||||
linestyle, width = pick_linestyle_pg(picktype, key)
|
||||
pen = pg.mkPen(rgba, width=width, style=linestyle)
|
||||
return pen
|
||||
return pen
|
||||
|
||||
|
@ -1594,7 +1594,7 @@ class PickDlg(QDialog):
|
||||
|
||||
def __init__(self, parent=None, data=None, station=None, network=None, location=None, picks=None,
|
||||
autopicks=None, rotate=False, parameter=None, embedded=False, metadata=None,
|
||||
event=None, filteroptions=None, model='iasp91', wftype=None):
|
||||
event=None, filteroptions=None, model=None, wftype=None):
|
||||
super(PickDlg, self).__init__(parent, Qt.Window)
|
||||
self.orig_parent = parent
|
||||
self.setAttribute(Qt.WA_DeleteOnClose)
|
||||
@ -1719,7 +1719,7 @@ class PickDlg(QDialog):
|
||||
|
||||
# init expected picks using obspy Taup
|
||||
try:
|
||||
if self.metadata:
|
||||
if self.metadata and model is not None:
|
||||
self.model = TauPyModel(model)
|
||||
self.get_arrivals()
|
||||
self.drawArrivals()
|
||||
@ -2703,8 +2703,11 @@ class PickDlg(QDialog):
|
||||
ax.plot(mpp, ylims[0], color=color, marker='^', zorder=baseorder + 3)
|
||||
# append phase text (if textOnly: draw with current ylims)
|
||||
self.phaseText.append(ax.text(mpp, ylims[1], phase, color=color, zorder=baseorder + 10))
|
||||
# indicate first motion
|
||||
self.phaseText.append(ax.text(mpp - 0.03 * mpp, ylims[1] - ylims[1] / 12, picks['fm'], color=color, zorder=baseorder + 10))
|
||||
# indicate first motion
|
||||
fm = picks.get('fm')
|
||||
if fm:
|
||||
self.phaseText.append(ax.text(mpp - 0.03 * mpp, ylims[1] - ylims[1] / 12, fm, color=color,
|
||||
zorder=baseorder + 10))
|
||||
ax.legend(loc=1)
|
||||
|
||||
def connect_mouse_motion(self):
|
||||
|
Loading…
Reference in New Issue
Block a user