diff --git a/geomagio/ImagCDFFactory.py b/geomagio/ImagCDFFactory.py index 9644c23e3823ec671fa0a394adeca0038b64eb1e..157ad0cf0546c7e804183978424de1600214ce0a 100644 --- a/geomagio/ImagCDFFactory.py +++ b/geomagio/ImagCDFFactory.py @@ -19,6 +19,7 @@ from typing import List, Optional, Union from datetime import datetime, timezone import numpy as np from obspy import Stream, Trace, UTCDateTime +from sqlalchemy import true from geomagio.TimeseriesFactory import TimeseriesFactory from geomagio.api.ws.Element import TEMPERATURE_ELEMENTS_ID @@ -87,6 +88,8 @@ class ImagCDFFactory(TimeseriesFactory): This class extends the TimeseriesFactory to support writing geomagnetic time series data to files in the ImagCDF format using the cdflib library. """ + + isUniqueTimes=True #used to determine depend_0 and CDF Time Variable Name def __init__( self, @@ -138,7 +141,7 @@ class ImagCDFFactory(TimeseriesFactory): cdf_writer.write_globalattrs(global_attrs) # Time variables - time_vars = self._create_time_stamp_variables(timeseries) + time_vars = self._create_time_stamp_variables(timeseries) #modifies self.isUniqueTimes for ts_name, ts_data in time_vars.items(): # Define time variable specification var_spec = { @@ -186,8 +189,7 @@ class ImagCDFFactory(TimeseriesFactory): 'Compress': 6, 'Pad': None, } - - var_attrs = self._create_var_attrs(trace, temperature_index) + var_attrs = self._create_var_attrs(trace, temperature_index, self.isUniqueTimes) # Write data variable cdf_writer.write_var(var_spec, var_attrs, trace.data) @@ -409,7 +411,15 @@ class ImagCDFFactory(TimeseriesFactory): time_vars['GeomagneticScalarTimes'] = scalar_times if temperature_times: time_vars.update(temperature_times) - return time_vars + + last_times = [] + self.isUniqueTimes = len(time_vars) == 1 #true if only one set of times, else default to false. + for index, times in enumerate(time_vars.values()): + if index > 0: + self.isUniqueTimes = not np.array_equal(last_times, times) + last_times = times + + return time_vars if self.isUniqueTimes else {"DataTimes": last_times} def _create_var_spec( @@ -455,7 +465,7 @@ class ImagCDFFactory(TimeseriesFactory): } return var_spec - def _create_var_attrs(self, trace: Trace, temperature_index: Optional[int] = None) -> dict: + def _create_var_attrs(self, trace: Trace, temperature_index: Optional[int] = None, isUniqueTimes: Optional[bool] = True) -> dict: channel = trace.stats.channel fieldnam = f"Geomagnetic Field Element {channel}" # “Geomagnetic Field Element †+ the element code or “Temperature †+ the name of the location where the temperature was recorded. units = '' # Must be one of “nTâ€, “Degrees of arc†or “Celsius†@@ -496,7 +506,7 @@ class ImagCDFFactory(TimeseriesFactory): 'FILLVAL': 99999.0, 'VALIDMIN': validmin, 'VALIDMAX': validmax, - 'DEPEND_0': depend_0, + 'DEPEND_0': depend_0 if isUniqueTimes else "DataTimes", 'DISPLAY_TYPE': 'time_series', 'LABLAXIS': channel, }