From 8aefe1056fb83ace65c3dcdc4273ed174a95d154 Mon Sep 17 00:00:00 2001 From: pcain-usgs <pcain@usgs.gov> Date: Tue, 28 Jan 2020 15:11:59 -0700 Subject: [PATCH] Fixes continuation indenting, initialization of custom/default filter, and starttime equation for custom filter --- geomagio/algorithm/FilterAlgorithm.py | 45 +++++++++++++++------------ 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/geomagio/algorithm/FilterAlgorithm.py b/geomagio/algorithm/FilterAlgorithm.py index 74b9478d0..b59527e73 100644 --- a/geomagio/algorithm/FilterAlgorithm.py +++ b/geomagio/algorithm/FilterAlgorithm.py @@ -19,6 +19,7 @@ class FilterAlgorithm(Algorithm): Algorithm.__init__(self, inchannels=None, outchannels=None) self.window = window + self.steparr = steparr self.coeff_filename = coeff_filename self.filtertype = filtertype self.numtaps = numtaps @@ -26,12 +27,27 @@ class FilterAlgorithm(Algorithm): self.bin_conv = bin_conv self.input_sample_period = input_sample_period self.output_sample_period = output_sample_period + + # Initialize filter to execute filtering step with custom coefficients + if self.filtertype == 'custom': + self.load_state() + self.decimation = int(self.output_sample_period / + self.input_sample_period) + self.numtaps = len(self.window) + # initialize filter to execute cascading filtering steps + else: + self.steparr = np.array([0.1, 1, 60, 3600]) + self.window = [sps.firwin(123, 0.45 / 5.0, window='blackman'), + sps.get_window(window=('gaussian', 15.8734), Nx=91), + sps.windows.boxcar(91)] + self.decimation = np.array([1, 10, 60, 60]) + self.numtaps = np.array([123, 91, 91]) + # Set volt/bin conversions to defaults if using Python if self.volt_conv is None: self.volt_conv = 100 if self.bin_conv is None: self.bin_conv = 500 - self.steparr = np.array([0.1, 1, 60, 3600]) def load_state(self): """Load algorithm state from a file. @@ -101,39 +117,28 @@ class FilterAlgorithm(Algorithm): # if input stream is 10 Hz, convert data to nT if self.input_sample_period == 0.1: stream = self.convert_miniseed(stream) + output_sample_period = self.output_sample_period input_sample_period = self.input_sample_period out = Stream() # perform one filter operation for custom type filter if self.filtertype == 'custom': - self.decimation = int(output_sample_period / - input_sample_period) - self.load_state() - self.numtaps = len(self.window) for trace in stream: data = trace.data - step = int(output_sample_period / - input_sample_period) + step = self.decimation filtered = self.firfilter(data, self.window, step) stats = Stats(trace.stats) - self.numtaps = len(self.window) stats.starttime = trace.stats.starttime + \ - self.numtaps * self.input_sample_period // \ - 2 + self.input_sample_period + + self.numtaps * self.input_sample_period // 2 + \ + + self.input_sample_period stats.delta = stats.delta * step stats.npts = filtered.shape[0] trace_out = self.create_trace( - stats.channel, stats, filtered) + stats.channel, stats, filtered) out += trace_out return out - # initialize filter to execute cascading filtering steps - self.window = [sps.firwin(123, 0.45 / 5.0, window='blackman'), - sps.get_window(window=('gaussian', 15.8734), Nx=91), - sps.windows.boxcar(91)] - self.decimation = np.array([1, 10, 60, 60]) - self.numtaps = np.array([123, 91, 91]) # set stop index to where the sampling period in steparr # equals the desired output sample period stop_idx = np.argwhere(self.steparr == self.output_sample_period)[0][0] @@ -148,7 +153,7 @@ class FilterAlgorithm(Algorithm): # timeshift value summing all shift to the starttime required in # each step to receive desired timeseries timeshift = sum(np.array(self.steparr[start_idx:stop_idx]) * - (np.array(self.numtaps[start_idx:stop_idx]) // 2)) + (np.array(self.numtaps[start_idx:stop_idx]) // 2)) while start_idx != stop_idx: # set input_sample_period to next filtering step input_sample_period = self.steparr[start_idx] @@ -309,8 +314,8 @@ class FilterAlgorithm(Algorithm): # input and output time intervals are managed by Controller parser.add_argument('--filter-type', - help='Specify default filters or custom filter', - choices=['default', 'custom']) + help='Specify default filters or custom filter', + choices=['default', 'custom']) parser.add_argument('--filter-coefficients', help='File storing custom filter coefficients') -- GitLab