1# https://pyrocko.org - GPLv3
2#
3# The Pyrocko Developers, 21st Century
4# ---|P------/S----------~Lg----------
6from __future__ import absolute_import, print_function, division
8from pyrocko.gui.snuffler import snuffling as sn
9from pyrocko import obspy_compat as oc
12class ObsPyStreamSnuffling(sn.Snuffling):
13 '''
14 Snuffling to fiddle with an ObsPy stream.
15 '''
17 def __init__(self, obspy_stream=None, *args, **kwargs):
18 sn.Snuffling.__init__(self, *args, **kwargs)
19 self.obspy_stream_orig = obspy_stream
20 self.obspy_stream = obspy_stream.copy()
22 def setup(self):
23 self.set_name('ObsPy Stream Fiddler')
25 if len(self.obspy_stream_orig) != 0:
26 fmax = 0.5/min(
27 tr.stats.delta for tr in self.obspy_stream_orig)
28 fmin = fmax / 1000.
29 else:
30 fmin = 0.001
31 fmax = 1000.
33 self.add_parameter(
34 sn.Param(
35 'Highpass', 'highpass_corner', None, fmin, fmax,
36 low_is_none=True))
37 self.add_parameter(
38 sn.Param(
39 'Lowpass', 'lowpass_corner', None, fmin, fmax,
40 high_is_none=True))
42 def init_gui(self, *args, **kwargs):
43 sn.Snuffling.init_gui(self, *args, **kwargs)
44 pyrocko_traces = oc.to_pyrocko_traces(self.obspy_stream_orig)
45 self.add_traces(pyrocko_traces)
47 def call(self):
48 try:
49 obspy_stream = self.obspy_stream_orig.copy()
50 if None not in (self.highpass_corner, self.lowpass_corner):
51 obspy_stream.filter(
52 'bandpass',
53 freqmin=self.highpass_corner,
54 freqmax=self.lowpass_corner)
56 elif self.lowpass_corner is not None:
57 obspy_stream.filter(
58 'lowpass',
59 freq=self.lowpass_corner)
61 elif self.highpass_corner is not None:
62 obspy_stream.filter(
63 'highpass',
64 freq=self.highpass_corner)
66 self.cleanup()
67 pyrocko_traces = oc.to_pyrocko_traces(obspy_stream)
68 self.add_traces(pyrocko_traces)
69 self.obspy_stream = obspy_stream
71 except Exception:
72 raise # logged by caller
74 def get_obspy_stream(self):
75 return self.obspy_stream