diff --git a/geomagio/DerivedTimeseriesFactory.py b/geomagio/DerivedTimeseriesFactory.py index 01d7a5c4485fc70a9d9fa541ad868d7e39637892..c2a4fca2b4284f088a859a723b7cc0d734ea2f40 100644 --- a/geomagio/DerivedTimeseriesFactory.py +++ b/geomagio/DerivedTimeseriesFactory.py @@ -63,6 +63,14 @@ class DerivedTimeseriesFactory(TimeseriesFactory): data_type=type, interval=interval, ) + for channel in channels: + self.factory._set_metadata( + stream=timeseries.select(channel=channel), + observatory=observatory, + channel=channel, + type=type, + interval=interval, + ) # file-based factories return all channels found in file timeseries = Stream([t for t in timeseries if t.stats.channel in channels]) return timeseries diff --git a/geomagio/TimeseriesFactory.py b/geomagio/TimeseriesFactory.py index 21fd3b37afb1c737ade2e3821bad076a4214b7f9..fe4e63cb4343d739b1478609f3d21f459f35c8da 100644 --- a/geomagio/TimeseriesFactory.py +++ b/geomagio/TimeseriesFactory.py @@ -320,13 +320,6 @@ class TimeseriesFactory(object): network=network, location=location, ) - self._set_metadata( - stream=[trace], - observatory=observatory, - channel=channel, - type=data_type, - interval=interval, - ) return trace def _get_file_from_url(self, url): @@ -558,7 +551,4 @@ class TimeseriesFactory(object): interval interval length {minute, second} """ - for trace in stream: - self.observatoryMetadata.set_metadata( - trace.stats, observatory, channel, type, interval - ) + return stream diff --git a/geomagio/edge/EdgeFactory.py b/geomagio/edge/EdgeFactory.py index e02b68982ce21bde4ba3469b7025dd8ca7719e45..43ad195243453c21677b1d80c66a01b4c6733d37 100644 --- a/geomagio/edge/EdgeFactory.py +++ b/geomagio/edge/EdgeFactory.py @@ -9,7 +9,6 @@ to take advantage of it's newer realtime abilities. Edge is the USGS earthquake hazard centers replacement for earthworm. """ from __future__ import absolute_import -from typing import Optional import sys import numpy @@ -23,7 +22,7 @@ from ..TimeseriesFactory import TimeseriesFactory from ..TimeseriesFactoryException import TimeseriesFactoryException from ..ObservatoryMetadata import ObservatoryMetadata from .RawInputClient import RawInputClient -from .LegacySNCL import LegacySNCL, get_location +from .LegacySNCL import LegacySNCL class EdgeFactory(TimeseriesFactory): @@ -347,7 +346,6 @@ class EdgeFactory(TimeseriesFactory): for trace in data: trace.data = trace.data.astype("i4") data.merge() - self._set_metadata(data, observatory, channel, type, interval) if data.count() == 0 and add_empty_channels: data += self._get_empty_trace( starttime=starttime, @@ -359,6 +357,7 @@ class EdgeFactory(TimeseriesFactory): network=sncl.network, location=sncl.location, ) + self._set_metadata(data, observatory, channel, type, interval) return data def _post_process(self, timeseries, starttime, endtime, channels): @@ -468,3 +467,28 @@ class EdgeFactory(TimeseriesFactory): if self.forceout: ric.forceout() ric.close() + + def _set_metadata( + self, + stream: obspy.core.Trace, + observatory: str, + channel: str, + type: str, + interval: str, + ): + """set metadata for a given stream/channel + Parameters + ---------- + observatory + observatory code + channel + edge channel code {MVH, MVE, MVD, ...} + type + data type {definitive, quasi-definitive, variation} + interval + interval length {minute, second} + """ + for trace in stream: + self.observatoryMetadata.set_metadata( + trace.stats, observatory, channel, type, interval + ) diff --git a/geomagio/edge/MiniSeedFactory.py b/geomagio/edge/MiniSeedFactory.py index 1b068437353722d0ebc5548c238433747216c855..7208e36e199175f0c433f865ce96c6d6518b2203 100644 --- a/geomagio/edge/MiniSeedFactory.py +++ b/geomagio/edge/MiniSeedFactory.py @@ -11,7 +11,6 @@ Edge is the USGS earthquake hazard centers replacement for earthworm. from __future__ import absolute_import import sys -from typing import Optional import numpy import numpy.ma @@ -24,7 +23,7 @@ from ..TimeseriesFactory import TimeseriesFactory from ..TimeseriesFactoryException import TimeseriesFactoryException from ..ObservatoryMetadata import ObservatoryMetadata from .MiniSeedInputClient import MiniSeedInputClient -from .SNCL import SNCL, get_location +from .SNCL import SNCL class MiniSeedFactory(TimeseriesFactory): @@ -353,7 +352,6 @@ class MiniSeedFactory(TimeseriesFactory): sncl.network, sncl.station, sncl.location, sncl.channel, starttime, endtime ) data.merge() - self._set_metadata(data, observatory, channel, type, interval) if data.count() == 0 and add_empty_channels: data += self._get_empty_trace( starttime=starttime, @@ -365,6 +363,7 @@ class MiniSeedFactory(TimeseriesFactory): network=sncl.network, location=sncl.location, ) + self._set_metadata(data, observatory, channel, type, interval) return data def _convert_timeseries( @@ -500,3 +499,28 @@ class MiniSeedFactory(TimeseriesFactory): trace.stats.channel = sncl.channel # finally, send to edge self.write_client.send(to_write) + + def _set_metadata( + self, + stream: obspy.core.Trace, + observatory: str, + channel: str, + type: str, + interval: str, + ): + """set metadata for a given stream/channel + Parameters + ---------- + observatory + observatory code + channel + edge channel code {MVH, MVE, MVD, ...} + type + data type {definitive, quasi-definitive, variation} + interval + interval length {minute, second} + """ + for trace in stream: + self.observatoryMetadata.set_metadata( + trace.stats, observatory, channel, type, interval + )