Source code for pyacs.gts.Sgts_methods.get_dates

###############################################################################
[docs] def get_dates(self, fmt='isoformat'): ############################################################################### """Return start and end dates of all time series in this Sgts. Parameters ---------- fmt : str, optional Output format: 'isoformat', 'datetime', 'decyear', 'mjd', 'dayno', 'cal'. Default is 'isoformat'. Returns ------- tuple (start_date, end_date) in the requested format. Notes ----- Formats: isoformat (ISO 8601), datetime, decyear, mjd, dayno (dayno, year), cal (day, month, year). """ # import import numpy as np import pyacs.lib.astrotime as at import logging import pyacs.message.message as MESSAGE import pyacs.message.verbose_message as VERBOSE import pyacs.message.error as ERROR import pyacs.message.warning as WARNING import pyacs.message.debug_message as DEBUG import inspect VERBOSE("Running Sgts.%s" % inspect.currentframe().f_code.co_name) # Check if Sgts has any time series if len(self.lcode()) == 0: ERROR("Sgts object contains no time series", exit=True) # Collect all start and end dates start_dates = [] end_dates = [] for code in self.lcode(): gts = self.__dict__[code] # Check if Gts has data if gts.data is None or gts.data.shape[0] == 0: WARNING("Site %s has no data, skipping" % code) continue # Get start and end dates (first and last decimal years) start_date = gts.data[0, 0] # First observation date end_date = gts.data[-1, 0] # Last observation date start_dates.append(start_date) end_dates.append(end_date) DEBUG("Site %s: %f to %f" % (code, start_date, end_date)) if len(start_dates) == 0: ERROR("No valid time series found in Sgts object", exit=True) # Convert to numpy arrays and find global min/max start_dates = np.array(start_dates) end_dates = np.array(end_dates) global_start = np.min(start_dates) global_end = np.max(end_dates) VERBOSE("Global date range: %f to %f (decimal years)" % (global_start, global_end)) # Convert to requested format if fmt == 'decyear': return (global_start, global_end) elif fmt == 'datetime': start_datetime = at.decyear2datetime(global_start) end_datetime = at.decyear2datetime(global_end) return (start_datetime, end_datetime) elif fmt == 'isoformat': start_datetime = at.decyear2datetime(global_start) end_datetime = at.decyear2datetime(global_end) return (start_datetime.isoformat(), end_datetime.isoformat()) elif fmt == 'mjd': start_mjd = at.decyear2mjd(global_start) end_mjd = at.decyear2mjd(global_end) return (start_mjd, end_mjd) elif fmt == 'dayno': start_dayno = at.decyear2dayno(global_start) end_dayno = at.decyear2dayno(global_end) return (start_dayno, end_dayno) elif fmt == 'cal': start_cal = at.decyear2cal(global_start) end_cal = at.decyear2cal(global_end) return (start_cal, end_cal) else: ERROR("Unknown format '%s'. Available formats: 'isoformat', 'datetime', 'decyear', 'mjd', 'dayno', 'cal'" % fmt, exit=True)