[add] scaling by channel (untested)

This commit is contained in:
Marcel Paffrath 2018-01-15 16:35:19 +01:00
parent 4835c0ca8a
commit a22e64889d
2 changed files with 46 additions and 11 deletions

View File

@ -1 +1 @@
975b-dirty 4835-dirty

View File

@ -902,7 +902,7 @@ class PylotCanvas(FigureCanvas):
def plotWFData(self, wfdata, title=None, zoomx=None, zoomy=None, def plotWFData(self, wfdata, title=None, zoomx=None, zoomy=None,
noiselevel=None, scaleddata=False, mapping=True, noiselevel=None, scaleddata=False, mapping=True,
component='*', nth_sample=1, iniPick=None, verbosity=0, component='*', nth_sample=1, iniPick=None, verbosity=0,
plot_additional=False, additional_channel=None): plot_additional=False, additional_channel=None, scaleToChannel=None):
ax = self.axes[0] ax = self.axes[0]
ax.cla() ax.cla()
@ -940,7 +940,7 @@ class PylotCanvas(FigureCanvas):
for n, (network, station, channel) in enumerate(nsc): for n, (network, station, channel) in enumerate(nsc):
st = st_select.select(network=network, station=station, channel=channel) st = st_select.select(network=network, station=station, channel=channel)
trace = st[0] trace = st[0].copy()
if mapping: if mapping:
comp = channel[-1] comp = channel[-1]
n = compclass.getPlotPosition(str(comp)) n = compclass.getPlotPosition(str(comp))
@ -953,9 +953,17 @@ class PylotCanvas(FigureCanvas):
stime = trace.stats.starttime - wfstart stime = trace.stats.starttime - wfstart
time_ax = prepTimeAxis(stime, trace) time_ax = prepTimeAxis(stime, trace)
if time_ax is not None: if time_ax is not None:
if scaleToChannel:
st_scale = wfdata.select(channel=scaleToChannel)
if st_scale:
tr = st_scale[0]
trace.detrend('constant')
trace.normalize(np.max(np.abs(tr.data)) * 2)
scaleddata = True
if not scaleddata: if not scaleddata:
trace.detrend('constant') trace.detrend('constant')
trace.normalize(np.max(np.abs(trace.data)) * 2) trace.normalize(np.max(np.abs(trace.data)) * 2)
times = [time for index, time in enumerate(time_ax) if not index % nth_sample] times = [time for index, time in enumerate(time_ax) if not index % nth_sample]
data = [datum + n for index, datum in enumerate(trace.data) if not index % nth_sample] data = [datum + n for index, datum in enumerate(trace.data) if not index % nth_sample]
ax.plot(times, data, color=linecolor, linewidth=0.7) ax.plot(times, data, color=linecolor, linewidth=0.7)
@ -970,6 +978,13 @@ class PylotCanvas(FigureCanvas):
compare_stream = wfdata.select(channel=additional_channel) compare_stream = wfdata.select(channel=additional_channel)
if compare_stream: if compare_stream:
trace = compare_stream[0] trace = compare_stream[0]
if scaleToChannel:
st_scale = wfdata.select(channel=scaleToChannel)
if st_scale:
tr = st_scale[0]
trace.detrend('constant')
trace.normalize(np.max(np.abs(tr.data)) * 2)
scaleddata = True
if not scaleddata: if not scaleddata:
trace.detrend('constant') trace.detrend('constant')
trace.normalize(np.max(np.abs(trace.data)) * 2) trace.normalize(np.max(np.abs(trace.data)) * 2)
@ -1191,6 +1206,10 @@ class PickDlg(QDialog):
self.compareChannel = QtGui.QComboBox() self.compareChannel = QtGui.QComboBox()
self.compareChannel.activated.connect(self.resetPlot) self.compareChannel.activated.connect(self.resetPlot)
# scale channel
self.scaleChannel = QtGui.QComboBox()
self.scaleChannel.activated.connect(self.resetPlot)
# initialize panning attributes # initialize panning attributes
self.press = None self.press = None
self.xpress = None self.xpress = None
@ -1212,10 +1231,12 @@ class PickDlg(QDialog):
self.stime, self.etime = full_range(self.getWFData()) self.stime, self.etime = full_range(self.getWFData())
# fill compare channels # fill compare and scale channels
self.compareChannel.addItem('', None) self.compareChannel.addItem('-', None)
self.scaleChannel.addItem('normalized', None)
for trace in self.getWFData(): for trace in self.getWFData():
self.compareChannel.addItem(trace.stats.channel, trace) self.compareChannel.addItem(trace.stats.channel, trace)
self.scaleChannel.addItem(trace.stats.channel, trace)
# initialize plotting widget # initialize plotting widget
self.multicompfig = PylotCanvas(parent=self, multicursor=True) self.multicompfig = PylotCanvas(parent=self, multicursor=True)
@ -1399,6 +1420,9 @@ class PickDlg(QDialog):
_dialtoolbar.addSeparator() _dialtoolbar.addSeparator()
_dialtoolbar.addWidget(QtGui.QLabel('Compare to channel: ')) _dialtoolbar.addWidget(QtGui.QLabel('Compare to channel: '))
_dialtoolbar.addWidget(self.compareChannel) _dialtoolbar.addWidget(self.compareChannel)
_dialtoolbar.addSeparator()
_dialtoolbar.addWidget(QtGui.QLabel('Scale: '))
_dialtoolbar.addWidget(self.scaleChannel)
# layout the innermost widget # layout the innermost widget
_innerlayout = QVBoxLayout() _innerlayout = QVBoxLayout()
@ -1930,6 +1954,9 @@ class PickDlg(QDialog):
self.setXLims([ini_pick - x_res, ini_pick + x_res]) self.setXLims([ini_pick - x_res, ini_pick + x_res])
self.setYLims(np.array([-noiselevel * 3.5, noiselevel * 3.5]) + self.setYLims(np.array([-noiselevel * 3.5, noiselevel * 3.5]) +
trace_number) trace_number)
plot_additional = bool(self.compareChannel.currentText())
additional_channel = self.compareChannel.currentText()
scale_channel = self.scaleChannel.currentText()
self.multicompfig.plotWFData(wfdata=data, self.multicompfig.plotWFData(wfdata=data,
title=self.getStation() + title=self.getStation() +
' picking mode', ' picking mode',
@ -1938,8 +1965,9 @@ class PickDlg(QDialog):
noiselevel=(trace_number + noiselevel, noiselevel=(trace_number + noiselevel,
trace_number - noiselevel), trace_number - noiselevel),
iniPick=ini_pick, iniPick=ini_pick,
plot_additional=bool(self.compareChannel.currentText()), plot_additional=plot_additional,
additional_channel=self.compareChannel.currentText()) additional_channel=additional_channel,
scaleToChannel=scale_channel)
def setIniPickS(self, gui_event, wfdata): def setIniPickS(self, gui_event, wfdata):
@ -2000,6 +2028,8 @@ class PickDlg(QDialog):
noiselevels = [trace + 1 / (2.5 * 2) for trace in traces] + \ noiselevels = [trace + 1 / (2.5 * 2) for trace in traces] + \
[trace - 1 / (2.5 * 2) for trace in traces] [trace - 1 / (2.5 * 2) for trace in traces]
plot_additional = bool(self.compareChannel.currentText())
additional_channel = self.compareChannel.currentText()
self.multicompfig.plotWFData(wfdata=data, self.multicompfig.plotWFData(wfdata=data,
title=self.getStation() + title=self.getStation() +
' picking mode', ' picking mode',
@ -2008,8 +2038,8 @@ class PickDlg(QDialog):
noiselevel=noiselevels, noiselevel=noiselevels,
scaleddata=True, scaleddata=True,
iniPick=ini_pick, iniPick=ini_pick,
plot_additional=bool(self.compareChannel.currentText()), plot_additional=plot_additional,
additional_channel=self.compareChannel.currentText()) additional_channel=additional_channel)
def setPick(self, gui_event): def setPick(self, gui_event):
@ -2363,11 +2393,16 @@ class PickDlg(QDialog):
data.filter(**filtoptions) data.filter(**filtoptions)
filtops_str = transformFilteroptions2String(filtoptions) filtops_str = transformFilteroptions2String(filtoptions)
title += ' | Filteroptions: {}'.format(filtops_str) title += ' | Filteroptions: {}'.format(filtops_str)
plot_additional = bool(self.compareChannel.currentText())
additional_channel = self.compareChannel.currentText()
scale_channel = self.scaleChannel.currentText()
self.multicompfig.plotWFData(wfdata=data, title=title, self.multicompfig.plotWFData(wfdata=data, title=title,
zoomx=self.getXLims(), zoomx=self.getXLims(),
zoomy=self.getYLims(), zoomy=self.getYLims(),
plot_additional=bool(self.compareChannel.currentText()), plot_additional=plot_additional,
additional_channel=self.compareChannel.currentText()) additional_channel=additional_channel,
scaleToChannel=scale_channel)
self.setPlotLabels() self.setPlotLabels()
self.drawAllPicks() self.drawAllPicks()
self.draw() self.draw()