From 10fe39c01d4a060bca55ebc842ef6cc67630eb66 Mon Sep 17 00:00:00 2001
From: Jeremy Fee <jmfee@usgs.gov>
Date: Mon, 6 Jun 2016 16:16:20 -0600
Subject: [PATCH] Update TimeseriesFactory to "trim" data to start/end extent,
 filling with numpy.nan if needed

---
 geomagio/TimeseriesFactory.py | 22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

diff --git a/geomagio/TimeseriesFactory.py b/geomagio/TimeseriesFactory.py
index 0b5ed602..abef4d15 100644
--- a/geomagio/TimeseriesFactory.py
+++ b/geomagio/TimeseriesFactory.py
@@ -1,4 +1,5 @@
 """Abstract Timeseries Factory Interface."""
+import numpy
 import obspy.core
 import os
 import sys
@@ -119,8 +120,18 @@ class TimeseriesFactory(object):
             except Exception as e:
                 print >> sys.stderr, "Error parsing data: " + str(e)
                 print >> sys.stderr, data
+        if channels is not None:
+            filtered = obspy.core.Stream()
+            for channel in channels:
+                filtered += timeseries.select(channel=channel)
+            timeseries = filtered
         timeseries.merge()
-        timeseries.trim(starttime, endtime)
+        timeseries.trim(
+                starttime=starttime,
+                endtime=endtime,
+                nearest_sample=False,
+                pad=True,
+                fill_value=numpy.nan)
         return timeseries
 
     def parse_string(self, data, **kwargs):
@@ -166,6 +177,9 @@ class TimeseriesFactory(object):
         TimeseriesFactoryException
             if any errors occur.
         """
+        if len(timeseries) == 0:
+            # no data to put
+            return
         if not self.urlTemplate.startswith('file://'):
             raise TimeseriesFactoryException('Only file urls are supported')
         channels = channels or self.channels
@@ -218,12 +232,6 @@ class TimeseriesFactory(object):
                 except NotImplementedError:
                     # factory only supports output
                     pass
-                except Exception as e:
-                    print >> sys.stderr, \
-                            'Unable to merge with existing data.' + \
-                            '\nfile={}' + \
-                            '\nerror={}'.format(url_file, str(e))
-                    raise e
             with open(url_file, 'wb') as fh:
                 try:
                     self.write_file(fh, url_data, channels)
-- 
GitLab