From e087080e10d785649cd03e3de7f5c8fb049635b7 Mon Sep 17 00:00:00 2001 From: pcain-usgs <pcain@usgs.gov> Date: Fri, 19 Mar 2021 12:36:09 -0600 Subject: [PATCH 1/3] default factory intervals to controller intervals --- geomagio/Controller.py | 4 ++++ geomagio/processing/obsrio.py | 36 ++++++++++++----------------------- 2 files changed, 16 insertions(+), 24 deletions(-) diff --git a/geomagio/Controller.py b/geomagio/Controller.py index e91ef4d25..3d2222b3b 100644 --- a/geomagio/Controller.py +++ b/geomagio/Controller.py @@ -60,6 +60,10 @@ class Controller(object): self._inputInterval = inputInterval self._outputFactory = outputFactory self._outputInterval = outputInterval + self._inputFactory.interval = self._inputInterval or self._inputFactory.interval + self._outputFactory.interval = ( + self._outputInterval or self._outputFactory.interval + ) def _get_input_timeseries( self, observatory, channels, starttime, endtime, algorithm=None diff --git a/geomagio/processing/obsrio.py b/geomagio/processing/obsrio.py index b4510ffe1..bf0acf2b8 100644 --- a/geomagio/processing/obsrio.py +++ b/geomagio/processing/obsrio.py @@ -139,11 +139,9 @@ def obsrio_day( """Filter 1 second edge H,E,Z,F to 1 day miniseed U,V,W,F.""" starttime, endtime = get_realtime_interval(realtime_interval) controller = Controller( - inputFactory=input_factory - or get_edge_factory(data_type="variation", interval="minute"), + inputFactory=input_factory or get_edge_factory(), inputInterval="minute", - outputFactory=output_factory - or get_miniseed_factory(data_type="variation", interval="day"), + outputFactory=output_factory or get_miniseed_factory(), outputInterval="day", ) renames = {"H": "U", "E": "V", "Z": "W", "F": "F"} @@ -178,11 +176,9 @@ def obsrio_hour( """Filter 1 second edge H,E,Z,F to 1 hour miniseed U,V,W,F.""" starttime, endtime = get_realtime_interval(realtime_interval) controller = Controller( - inputFactory=input_factory - or get_edge_factory(data_type="variation", interval="minute"), + inputFactory=input_factory or get_edge_factory(), inputInterval="minute", - outputFactory=output_factory - or get_miniseed_factory(data_type="variation", interval="hour"), + outputFactory=output_factory or get_miniseed_factory(), outputInterval="hour", ) renames = {"H": "U", "E": "V", "Z": "W", "F": "F"} @@ -221,11 +217,9 @@ def obsrio_minute( """ starttime, endtime = get_realtime_interval(realtime_interval) controller = Controller( - inputFactory=input_factory - or get_edge_factory(data_type="variation", interval="second"), + inputFactory=input_factory or get_edge_factory(), inputInterval="second", - outputFactory=output_factory - or get_edge_factory(data_type="variation", interval="minute"), + outputFactory=output_factory or get_edge_factory(), outputInterval="minute", ) for channel in ["H", "E", "Z", "F"]: @@ -258,10 +252,8 @@ def obsrio_second( starttime, endtime = get_realtime_interval(realtime_interval) controller = Controller( algorithm=Algorithm(inchannels=("F",), outchannels=("F",)), - inputFactory=input_factory or get_miniseed_factory(data_type="variation"), - inputInterval="second", - outputFactory=output_factory or get_edge_factory(data_type="variation"), - outputInterval="second", + inputFactory=input_factory or get_miniseed_factory(), + outputFactory=output_factory or get_edge_factory(), ) controller.run_as_update( observatory=(observatory,), @@ -285,11 +277,9 @@ def obsrio_temperatures( """Filter temperatures 1Hz miniseed (LK1-4) to 1 minute legacy (UK1-4).""" starttime, endtime = get_realtime_interval(realtime_interval) controller = Controller( - inputFactory=input_factory - or get_miniseed_factory(data_type="variation", interval="second"), + inputFactory=input_factory or get_miniseed_factory(), inputInterval="second", - outputFactory=output_factory - or get_edge_factory(data_type="variation", interval="minute"), + outputFactory=output_factory or get_edge_factory(), outputInterval="minute", ) renames = {"LK1": "UK1", "LK2": "UK2", "LK3": "UK3", "LK4": "UK4"} @@ -324,11 +314,9 @@ def obsrio_tenhertz( """Filter 10Hz miniseed U,V,W to 1Hz legacy H,E,Z.""" starttime, endtime = get_realtime_interval(realtime_interval) controller = Controller( - inputFactory=input_factory - or get_miniseed_factory(data_type="variation", interval="tenhertz"), + inputFactory=input_factory or get_miniseed_factory(), inputInterval="tenhertz", - outputFactory=output_factory - or get_edge_factory(data_type="variation", interval="second"), + outputFactory=output_factory or get_edge_factory(), outputInterval="second", ) renames = {"U": "H", "V": "E", "W": "Z"} -- GitLab From 63b892b2a50c056edcad103a66689bdf87db2525 Mon Sep 17 00:00:00 2001 From: pcain-usgs <pcain@usgs.gov> Date: Mon, 22 Mar 2021 09:15:00 -0600 Subject: [PATCH 2/3] make intervals optional parameters to run methods --- geomagio/Controller.py | 41 +++++++++++++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 8 deletions(-) diff --git a/geomagio/Controller.py b/geomagio/Controller.py index 3d2222b3b..ec9b421e4 100644 --- a/geomagio/Controller.py +++ b/geomagio/Controller.py @@ -60,13 +60,15 @@ class Controller(object): self._inputInterval = inputInterval self._outputFactory = outputFactory self._outputInterval = outputInterval - self._inputFactory.interval = self._inputInterval or self._inputFactory.interval - self._outputFactory.interval = ( - self._outputInterval or self._outputFactory.interval - ) def _get_input_timeseries( - self, observatory, channels, starttime, endtime, algorithm=None + self, + observatory, + channels, + starttime, + endtime, + algorithm=None, + interval=None, ): """Get timeseries from the input factory for requested options. @@ -106,7 +108,7 @@ class Controller(object): starttime=input_start, endtime=input_end, channels=channels, - interval=self._inputInterval, + interval=interval or self._inputInterval, ) return timeseries @@ -133,7 +135,14 @@ class Controller(object): t.stats.channel = to_name return timeseries - def _get_output_timeseries(self, observatory, channels, starttime, endtime): + def _get_output_timeseries( + self, + observatory, + channels, + starttime, + endtime, + interval=None, + ): """Get timeseries from the output factory for requested options. Parameters @@ -158,7 +167,7 @@ class Controller(object): starttime=starttime, endtime=endtime, channels=channels, - interval=self._outputInterval, + interval=interval or self._outputInterval, ) return timeseries @@ -228,6 +237,8 @@ class Controller(object): input_channels: Optional[List[str]] = None, input_timeseries: Optional[Stream] = None, output_channels: Optional[List[str]] = None, + inputInterval: Optional[str] = None, + outputInterval: Optional[str] = None, no_trim: bool = False, realtime: Union[bool, int] = False, rename_input_channel: Optional[List[List[str]]] = None, @@ -254,6 +265,8 @@ class Controller(object): algorithm = algorithm or self._algorithm input_channels = input_channels or algorithm.get_input_channels() output_channels = output_channels or algorithm.get_output_channels() + inputInterval = inputInterval or self._inputInterval + outputInterval = outputInterval or self._outputInterval next_starttime = algorithm.get_next_starttime() starttime = next_starttime or starttime # input @@ -263,6 +276,7 @@ class Controller(object): starttime=starttime, endtime=endtime, channels=input_channels, + interval=inputInterval, ) if timeseries.count() == 0: # no data to process @@ -299,6 +313,7 @@ class Controller(object): starttime=starttime, endtime=endtime, channels=output_channels, + interval=outputInterval, ) def run_as_update( @@ -310,6 +325,8 @@ class Controller(object): algorithm: Optional[Algorithm] = None, input_channels: Optional[List[str]] = None, output_channels: Optional[List[str]] = None, + inputInterval: Optional[str] = None, + outputInterval: Optional[str] = None, no_trim: bool = False, realtime: Union[bool, int] = False, rename_input_channel: Optional[List[List[str]]] = None, @@ -352,6 +369,8 @@ class Controller(object): raise AlgorithmException("Stateful algorithms cannot use run_as_update") input_channels = input_channels or algorithm.get_input_channels() output_channels = output_channels or algorithm.get_output_channels() + inputInterval = inputInterval or self._inputInterval + outputInterval = outputInterval or self._outputInterval print( "checking gaps", starttime, @@ -366,6 +385,7 @@ class Controller(object): starttime=starttime, endtime=endtime, channels=output_channels, + interval=outputInterval, ) if len(output_timeseries) > 0: # find gaps in output, so they can be updated @@ -388,6 +408,7 @@ class Controller(object): starttime=output_gap[0], endtime=output_gap[1], channels=input_channels, + interval=inputInterval, ) if not algorithm.can_produce_data( starttime=output_gap[0], endtime=output_gap[1], stream=input_timeseries @@ -407,6 +428,8 @@ class Controller(object): endtime=recurse_endtime, input_channels=input_channels, output_channels=output_channels, + inputInterval=inputInterval, + outputInterval=outputInterval, no_trim=no_trim, realtime=realtime, rename_input_channel=rename_input_channel, @@ -433,6 +456,8 @@ class Controller(object): input_channels=input_channels, input_timeseries=input_timeseries, output_channels=output_channels, + inputInterval=inputInterval, + outputInterval=outputInterval, no_trim=no_trim, realtime=realtime, rename_input_channel=rename_input_channel, -- GitLab From 604eca2056648ca8cecc0265b7725cd70e8da24f Mon Sep 17 00:00:00 2001 From: pcain-usgs <pcain@usgs.gov> Date: Mon, 22 Mar 2021 10:54:58 -0600 Subject: [PATCH 3/3] Convert interval parameters to snake case --- geomagio/Controller.py | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/geomagio/Controller.py b/geomagio/Controller.py index ec9b421e4..4342bd856 100644 --- a/geomagio/Controller.py +++ b/geomagio/Controller.py @@ -237,8 +237,8 @@ class Controller(object): input_channels: Optional[List[str]] = None, input_timeseries: Optional[Stream] = None, output_channels: Optional[List[str]] = None, - inputInterval: Optional[str] = None, - outputInterval: Optional[str] = None, + input_interval: Optional[str] = None, + output_interval: Optional[str] = None, no_trim: bool = False, realtime: Union[bool, int] = False, rename_input_channel: Optional[List[List[str]]] = None, @@ -254,6 +254,8 @@ class Controller(object): input_channels: list of channels to read input_timeseries: used by run_as_update, which has already read input. output_channels: list of channels to write + input_interval: input data interval + output_interval: output data interval no_trim: whether to trim output to starttime/endtime interval realtime: number of seconds in realtime interval rename_input_channel: list of input channel renames @@ -265,8 +267,8 @@ class Controller(object): algorithm = algorithm or self._algorithm input_channels = input_channels or algorithm.get_input_channels() output_channels = output_channels or algorithm.get_output_channels() - inputInterval = inputInterval or self._inputInterval - outputInterval = outputInterval or self._outputInterval + input_interval = input_interval or self._inputInterval + output_interval = output_interval or self._outputInterval next_starttime = algorithm.get_next_starttime() starttime = next_starttime or starttime # input @@ -276,7 +278,7 @@ class Controller(object): starttime=starttime, endtime=endtime, channels=input_channels, - interval=inputInterval, + interval=input_interval, ) if timeseries.count() == 0: # no data to process @@ -313,7 +315,7 @@ class Controller(object): starttime=starttime, endtime=endtime, channels=output_channels, - interval=outputInterval, + interval=output_interval, ) def run_as_update( @@ -325,8 +327,8 @@ class Controller(object): algorithm: Optional[Algorithm] = None, input_channels: Optional[List[str]] = None, output_channels: Optional[List[str]] = None, - inputInterval: Optional[str] = None, - outputInterval: Optional[str] = None, + input_interval: Optional[str] = None, + output_interval: Optional[str] = None, no_trim: bool = False, realtime: Union[bool, int] = False, rename_input_channel: Optional[List[List[str]]] = None, @@ -345,6 +347,8 @@ class Controller(object): input_channels: list of channels to read input_timeseries: used by run_as_update, which has already read input. output_channels: list of channels to write + input_interval: input data interval + output_interval: output data interval no_trim: whether to trim output to starttime/endtime interval realtime: number of seconds in realtime interval rename_input_channel: list of input channel renames @@ -369,8 +373,8 @@ class Controller(object): raise AlgorithmException("Stateful algorithms cannot use run_as_update") input_channels = input_channels or algorithm.get_input_channels() output_channels = output_channels or algorithm.get_output_channels() - inputInterval = inputInterval or self._inputInterval - outputInterval = outputInterval or self._outputInterval + input_interval = input_interval or self._inputInterval + output_interval = output_interval or self._outputInterval print( "checking gaps", starttime, @@ -385,7 +389,7 @@ class Controller(object): starttime=starttime, endtime=endtime, channels=output_channels, - interval=outputInterval, + interval=output_interval, ) if len(output_timeseries) > 0: # find gaps in output, so they can be updated @@ -408,7 +412,7 @@ class Controller(object): starttime=output_gap[0], endtime=output_gap[1], channels=input_channels, - interval=inputInterval, + interval=input_interval, ) if not algorithm.can_produce_data( starttime=output_gap[0], endtime=output_gap[1], stream=input_timeseries @@ -428,8 +432,8 @@ class Controller(object): endtime=recurse_endtime, input_channels=input_channels, output_channels=output_channels, - inputInterval=inputInterval, - outputInterval=outputInterval, + input_interval=input_interval, + output_interval=output_interval, no_trim=no_trim, realtime=realtime, rename_input_channel=rename_input_channel, @@ -456,8 +460,8 @@ class Controller(object): input_channels=input_channels, input_timeseries=input_timeseries, output_channels=output_channels, - inputInterval=inputInterval, - outputInterval=outputInterval, + input_interval=input_interval, + output_interval=output_interval, no_trim=no_trim, realtime=realtime, rename_input_channel=rename_input_channel, -- GitLab