Skip to content
Snippets Groups Projects
Controller.py 2.42 KiB
Newer Older
"""Controller class for geomag algorithms"""

class Controller(object):
    """Controller for geomag algorithms.

    Parameters
    ----------
Hal Simpson's avatar
Hal Simpson committed
    inputFactory: TimeseriesFactory
        the factory that will read in timeseries data
Hal Simpson's avatar
Hal Simpson committed
    outputFactory: TimeseriesFactory
        the factory that will output the timeseries data
    algorithm: the algorithm(s) that will take procees the timeseries data
    """
    def __init__(self, inputFactory, outputFactory, algorithm, update=False):
Hal Simpson's avatar
Hal Simpson committed
        self._inputFactory = inputFactory
        self._algorithm = algorithm
        self._outputFactory = outputFactory
Hal Simpson's avatar
Hal Simpson committed

    def run(self, starttime, endtime):
        """run an algorithm as setup up by the main script.

        Parameters
        ----------
        starttime : UTCDateTime
            time of first sample to be worked on.
        endtime : UTCDateTime
            time of last sample to be worked on.
        """
        if (self._update):
            self.run_as_update(starttime, endtime)
        else:
            self.run_as_timeseries(starttime, endtime)

    def run_as_update(self, starttime, endtime):
        input_channels = self._algorithm.get_input_channels()
        output_channels = self._algorithm.get_output_channels()

        timeseries_in = self._inputFactory.get_timeseries(starttime,
                endtime, channels=input_channels)
        timeseries_out = self._inputFactory.get_timeseries(starttime,
                endtime, channels=output_channels)

        output_gaps = TimeseriesUtilities.get_timeseries_gaps(
            timeseries_out, output_channels, starttime, endtime)
        output_merged_gaps = TimeseriesUtilities.get_merged_gaps(output_gaps,
                output_channels)
        # TODO compare gaps.
        #   if there is new data, run algorithm over entire time.
        #   save any new data.

        #TODO iterate is starttime of gaps is starttime and new data found


    def run_as_timeseries(self, starttime, endtime):
Hal Simpson's avatar
Hal Simpson committed
        input_channels = self._algorithm.get_input_channels()
Hal Simpson's avatar
Hal Simpson committed
        timeseries = self._inputFactory.get_timeseries(starttime, endtime,
Hal Simpson's avatar
Hal Simpson committed
        processed = self._algorithm.process(timeseries)
Hal Simpson's avatar
Hal Simpson committed
        output_channels = self._algorithm.get_output_channels()
        self._outputFactory.put_timeseries(timeseries=processed,
                channels=output_channels)