1# https://pyrocko.org - GPLv3 

2# 

3# The Pyrocko Developers, 21st Century 

4# ---|P------/S----------~Lg---------- 

5 

6from __future__ import absolute_import, print_function, division 

7 

8from pyrocko.gui.snuffler import snuffling as sn 

9from pyrocko import obspy_compat as oc 

10 

11 

12class ObsPyStreamSnuffling(sn.Snuffling): 

13 ''' 

14 Snuffling to fiddle with an ObsPy stream. 

15 ''' 

16 

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() 

21 

22 def setup(self): 

23 self.set_name('ObsPy Stream Fiddler') 

24 

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. 

32 

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)) 

41 

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) 

46 

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) 

55 

56 elif self.lowpass_corner is not None: 

57 obspy_stream.filter( 

58 'lowpass', 

59 freq=self.lowpass_corner) 

60 

61 elif self.highpass_corner is not None: 

62 obspy_stream.filter( 

63 'highpass', 

64 freq=self.highpass_corner) 

65 

66 self.cleanup() 

67 pyrocko_traces = oc.to_pyrocko_traces(obspy_stream) 

68 self.add_traces(pyrocko_traces) 

69 self.obspy_stream = obspy_stream 

70 

71 except Exception: 

72 raise # logged by caller 

73 

74 def get_obspy_stream(self): 

75 return self.obspy_stream