diff --git a/geomagio/Controller.py b/geomagio/Controller.py index 6d522516ccc7d6836c63791e819e76cf6f2d44d6..be4eb2d72662fb44e536ffa3741217217a23e14b 100644 --- a/geomagio/Controller.py +++ b/geomagio/Controller.py @@ -5,6 +5,7 @@ import argparse import sys from obspy.core import Stream, UTCDateTime from algorithm import algorithms +from PlotTimeseriesFactory import PlotTimeseriesFactory import TimeseriesUtility import edge @@ -368,6 +369,8 @@ def main(args): locationCode=locationcode, tag=args.output_edge_tag, forceout=args.output_edge_forceout) + elif args.output_plot is not None: + outputfactory = PlotTimeseriesFactory() else: print >> sys.stderr, "Missing required output directive" @@ -558,6 +561,10 @@ def parse_args(args): help='Example: file://./%%(obs)s%%(Y)s%%(j)s.%%(i)s') output_group.add_argument('--output-edge', help='Edge IP #. See --output-edge-* for other optional arguments') + output_group.add_argument('--output-plot', + action='store_true', + default=False, + help='Plot the algorithm output using matplotlib') # Algorithms group parser.add_argument('--algorithm', diff --git a/geomagio/PlotTimeseriesFactory.py b/geomagio/PlotTimeseriesFactory.py new file mode 100644 index 0000000000000000000000000000000000000000..0406872397785879e1772c15bb4075b938429c85 --- /dev/null +++ b/geomagio/PlotTimeseriesFactory.py @@ -0,0 +1,54 @@ +"""Abstract Timeseries Factory Interface.""" +from obspy.core import Stream +from TimeseriesFactory import TimeseriesFactory + + +class PlotTimeseriesFactory(TimeseriesFactory): + """TimeseriesFactory that generates a plot. + """ + def __init__(self, *args, **kwargs): + TimeseriesFactory.__init__(self, *args, **kwargs) + + def get_timeseries(self, starttime, endtime, observatory=None, + channels=None, type=None, interval=None): + """This factory does not support get_timeseries. + """ + raise NotImplementedError('"get_timeseries" not implemented') + + def put_timeseries(self, timeseries, starttime=None, endtime=None, + channels=None, type=None, interval=None): + """Store timeseries data. + + Parameters + ---------- + timeseries : obspy.core.Stream + stream containing traces to store. + starttime : UTCDateTime + time of first sample in timeseries to store. + uses first sample if unspecified. + endtime : UTCDateTime + time of last sample in timeseries to store. + uses last sample if unspecified. + channels : array_like + list of channels to store, optional. + uses default if unspecified. + type : {'definitive', 'provisional', 'quasi-definitive', 'variation'} + data type, optional. + uses default if unspecified. + interval : {'daily', 'hourly', 'minute', 'monthly', 'second'} + data interval, optional. + uses default if unspecified. + Raises + ------ + TimeseriesFactoryException + if any errors occur. + """ + if starttime is not None or endtime is not None: + timeseries = timeseries.copy() + timeseries.trim(starttime=starttime, endtime=endtime) + if channels is not None: + filtered = Stream() + for channel in channels: + filtered += timeseries.select(channel=channel) + timeseries = filtered + timeseries.plot() diff --git a/geomagio/__init__.py b/geomagio/__init__.py index 9e086ee633914218db2d191bafdd1a54bc6f4b4a..b61b5c801417c54956145f352c55a4c4377f4683 100644 --- a/geomagio/__init__.py +++ b/geomagio/__init__.py @@ -6,6 +6,7 @@ import StreamConverter from Controller import Controller from ObservatoryMetadata import ObservatoryMetadata +from PlotTimeseriesFactory import PlotTimeseriesFactory from TimeseriesFactory import TimeseriesFactory from TimeseriesFactoryException import TimeseriesFactoryException import TimeseriesUtility @@ -16,6 +17,7 @@ __all__ = [ 'Controller', 'DeltaFAlgorithm', 'ObservatoryMetadata', + 'PlotTimeseriesFactory', 'StreamConverter', 'TimeseriesFactory', 'TimeseriesFactoryException',