[add] obspy-like min/max function, removed testing area
This commit is contained in:
parent
5fcb07e647
commit
e72111a6fb
@ -35,7 +35,7 @@ from PySide.QtGui import QAction, QApplication, QCheckBox, QComboBox, \
|
|||||||
QPushButton, QFileDialog, QInputDialog, QKeySequence
|
QPushButton, QFileDialog, QInputDialog, QKeySequence
|
||||||
from PySide.QtCore import QSettings, Qt, QUrl, Signal, Slot
|
from PySide.QtCore import QSettings, Qt, QUrl, Signal, Slot
|
||||||
from PySide.QtWebKit import QWebView
|
from PySide.QtWebKit import QWebView
|
||||||
from obspy import Stream, UTCDateTime
|
from obspy import Stream, Trace, UTCDateTime
|
||||||
from obspy.core.util import AttribDict
|
from obspy.core.util import AttribDict
|
||||||
from obspy.taup import TauPyModel
|
from obspy.taup import TauPyModel
|
||||||
from obspy.taup.utils import get_phase_names
|
from obspy.taup.utils import get_phase_names
|
||||||
@ -540,7 +540,6 @@ class WaveformWidgetPG(QtGui.QWidget):
|
|||||||
n+=1
|
n+=1
|
||||||
st = st_select.select(network=network, station=station, channel=channel)
|
st = st_select.select(network=network, station=station, channel=channel)
|
||||||
st_syn = wfsyn.select(network=network, station=station, channel=channel)
|
st_syn = wfsyn.select(network=network, station=station, channel=channel)
|
||||||
trace = st[0].copy()
|
|
||||||
if st_syn:
|
if st_syn:
|
||||||
trace_syn = st_syn[0].copy()
|
trace_syn = st_syn[0].copy()
|
||||||
if mapping:
|
if mapping:
|
||||||
@ -553,31 +552,11 @@ class WaveformWidgetPG(QtGui.QWidget):
|
|||||||
msg = 'plotting %s channel of station %s' % (channel, station)
|
msg = 'plotting %s channel of station %s' % (channel, station)
|
||||||
print(msg)
|
print(msg)
|
||||||
stime = trace.stats.starttime - self.wfstart
|
stime = trace.stats.starttime - self.wfstart
|
||||||
|
|
||||||
time_ax = prepTimeAxis(stime, trace)
|
time_ax = prepTimeAxis(stime, trace)
|
||||||
if st_syn:
|
if st_syn:
|
||||||
stime_syn = trace_syn.stats.starttime - self.wfstart
|
stime_syn = trace_syn.stats.starttime - self.wfstart
|
||||||
time_ax_syn = prepTimeAxis(stime_syn, trace_syn)
|
time_ax_syn = prepTimeAxis(stime_syn, trace_syn)
|
||||||
|
|
||||||
# TEST TEST max/min plot
|
|
||||||
minsamples = argrelmin(trace.data)
|
|
||||||
maxsamples = argrelmax(trace.data)
|
|
||||||
plot_samples = np.sort(np.append(minsamples, maxsamples))
|
|
||||||
trace.data = trace.data[plot_samples]
|
|
||||||
time_ax = time_ax[plot_samples]
|
|
||||||
if st_syn:
|
|
||||||
minsamples_syn = argrelmin(trace_syn.data)
|
|
||||||
maxsamples_syn = argrelmax(trace_syn.data)
|
|
||||||
plot_samples_syn = np.sort(np.append(minsamples_syn, maxsamples_syn))
|
|
||||||
trace_syn.data = trace_syn.data[plot_samples_syn]
|
|
||||||
time_ax_syn = time_ax_syn[plot_samples_syn]
|
|
||||||
|
|
||||||
# TEST TEST Remove middle of seismograms for overview plot
|
|
||||||
# trace.data = trace.data[abs(trace.data) > 0.1 * max(abs(trace.data))]
|
|
||||||
# if st_syn:
|
|
||||||
# trace.data_syn = trace.data_syn[abs(trace.data_syn) > 0.1 * max(abs(trace.data))]
|
|
||||||
# TEST TEST ------
|
|
||||||
|
|
||||||
if time_ax not in [None, []]:
|
if time_ax not in [None, []]:
|
||||||
if not scaleddata:
|
if not scaleddata:
|
||||||
trace.detrend('constant')
|
trace.detrend('constant')
|
||||||
@ -600,6 +579,41 @@ class WaveformWidgetPG(QtGui.QWidget):
|
|||||||
self.setYLims([0.5, nmax + 0.5])
|
self.setYLims([0.5, nmax + 0.5])
|
||||||
return plots
|
return plots
|
||||||
|
|
||||||
|
def minMax(self, trace, time_ax):
|
||||||
|
'''
|
||||||
|
create min/max array for fast plotting (approach based on obspy __plot_min_max function)
|
||||||
|
:returns data, time_ax
|
||||||
|
'''
|
||||||
|
npixel = self.width()
|
||||||
|
ndata = len(trace.data)
|
||||||
|
pts_per_pixel = ndata/npixel
|
||||||
|
if pts_per_pixel < 2:
|
||||||
|
return trace.data, time_ax
|
||||||
|
remaining_samples = ndata%pts_per_pixel
|
||||||
|
npixel = ndata//pts_per_pixel
|
||||||
|
if remaining_samples:
|
||||||
|
data = trace.data[:-remaining_samples]
|
||||||
|
else:
|
||||||
|
data = trace.data
|
||||||
|
data = data.reshape(npixel, pts_per_pixel)
|
||||||
|
min_ = data.min(axis=1)
|
||||||
|
max_ = data.max(axis=1)
|
||||||
|
if remaining_samples:
|
||||||
|
extreme_values = np.empty((npixel + 1, 2), dtype=np.float)
|
||||||
|
extreme_values[:-1, 0] = min_
|
||||||
|
extreme_values[:-1, 1] = max_
|
||||||
|
extreme_values[-1, 0] = \
|
||||||
|
trace.data[-remaining_samples:].min()
|
||||||
|
extreme_values[-1, 1] = \
|
||||||
|
trace.data[-remaining_samples:].max()
|
||||||
|
else:
|
||||||
|
extreme_values = np.empty((npixel, 2), dtype=np.float)
|
||||||
|
extreme_values[:, 0] = min_
|
||||||
|
extreme_values[:, 1] = max_
|
||||||
|
data = extreme_values.flatten()
|
||||||
|
time_ax = np.linspace(time_ax[0], time_ax[-1], num=len(data))
|
||||||
|
return data, time_ax
|
||||||
|
|
||||||
# def getAxes(self):
|
# def getAxes(self):
|
||||||
# return self.axes
|
# return self.axes
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user