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