diff --git a/geomagio/processing/obsrio.py b/geomagio/processing/obsrio.py index e960fe23c874fff7b9475251ed94e77f7bdba809..7d29f1fd50a262f0432d6458fe5fb94366e753c0 100644 --- a/geomagio/processing/obsrio.py +++ b/geomagio/processing/obsrio.py @@ -134,6 +134,76 @@ def obsrio_tenhertz( ) +def obsrio_hour( + observatory: str, + input_factory: Optional[TimeseriesFactory] = None, + output_factory: Optional[TimeseriesFactory] = None, + realtime_interval: int = 600, + update_limit: int = 10, +): + """Filter 1 second edge H,E,Z,F to 1 hour U,V,W,F.""" + starttime, endtime = get_realtime_interval(realtime_interval) + # filter 10Hz U,V,W to H,E,Z + controller = Controller( + algorithm=FilterAlgorithm( + input_sample_period=60.0, output_sample_period=3600.0 + ), + inputFactory=input_factory or get_edge_factory(data_type="variation"), + inputInterval="minute", + outputFactory=output_factory or get_miniseed_factory(data_type="variation"), + outputInterval="hour", + ) + renames = {"H": "U", "E": "V", "Z": "W", "F": "F"} + for input_channel in renames.keys(): + output_channel = renames[input_channel] + controller.run_as_update( + observatory=(observatory,), + output_observatory=(observatory,), + starttime=starttime, + endtime=endtime, + input_channels=(input_channel,), + output_channels=(output_channel,), + realtime=realtime_interval, + rename_output_channel=((input_channel, output_channel),), + update_limit=update_limit, + ) + + +def obsrio_day( + observatory: str, + input_factory: Optional[TimeseriesFactory] = None, + output_factory: Optional[TimeseriesFactory] = None, + realtime_interval: int = 86400, + update_limit: int = 7, +): + """Filter 1 second edge H,E,Z,F to 1 day U,V,W,F.""" + starttime, endtime = get_realtime_interval(realtime_interval) + # filter 10Hz U,V,W to H,E,Z + controller = Controller( + algorithm=FilterAlgorithm( + input_sample_period=60.0, output_sample_period=86400.0 + ), + inputFactory=input_factory or get_edge_factory(data_type="variation"), + inputInterval="minute", + outputFactory=output_factory or get_miniseed_factory(data_type="variation"), + outputInterval="day", + ) + renames = {"H": "U", "E": "V", "Z": "W", "F": "F"} + for input_channel in renames.keys(): + output_channel = renames[input_channel] + controller.run_as_update( + observatory=(observatory,), + output_observatory=(observatory,), + starttime=starttime, + endtime=endtime, + input_channels=(input_channel,), + output_channels=(output_channel,), + realtime=realtime_interval, + rename_output_channel=((input_channel, output_channel),), + update_limit=update_limit, + ) + + def filter_realtime( observatory: str, input_factory: Optional[TimeseriesFactory] = None,