def _get_ndates(self, datetime_interval, datetime_list, hr_inc): if (datetime_interval) and (not datetime_list): startdate, enddate = datetime_interval ndates = gt.get_ndate_timeseries(startdate, enddate, hr_inc=hr_inc) elif (not datetime_interval) and datetime_list: ndates = datetime_list elif (not datetime_interval) and (not datetime_list) and ( self._datetime_interval): startdate, enddate = self._datetime_interval ndates = gt.get_ndate_timeseries(startdate, enddate, hr_inc=hr_inc) else: raise ValueError("Error in evaluating list of datetimes") return ndates
def get_ndate_timeseries(self, sdate=None, edate=None, inc=6, datetime=False): import gmao_tools as gt if (sdate is None): sdate = self.startdate if (edate is None): edate = self.enddate tarray = gt.get_ndate_timeseries(sdate, edate, hr_inc=inc, datetime=datetime) # sdt = ndate_to_dt(sdate) # edt = ndate_to_dt(edate) # # tarray = [] # while (sdt <= edt): # if (not datetime): # tarray.append(dt_to_ndate(sdt)) # else: # tarray.append(sdt) # sdt = sdt + dt.timedelta(hours=inc) return (tarray)
def stat_ts(self, stat, in_var, startdate=None, enddate=None, dates=None, hr_inc=None, masked=None, DataFrame=False): import gmao_tools as gt import pandas as pd if (masked or self.mask_enabled) and self.mask_logic is None: raise ValueError('Masked data requested, but mask logic is not set') elif ((masked or self.mask_enabled) and self.mask_logic is not None): msk = self.mask_logic else: msk = None if startdate is None: startdate=self.startdate if enddate is None: enddate=self.enddate if hr_inc is None: hr_inc=self.hr_inc if (startdate is None and enddate is None and dates is None): raise ValueError('No dates are specified, unable to retrieve data') elif (startdate is not None and enddate is not None and dates is not None): raise ValueError('Start/end dates and dates array specified, unable to retrieve data due to conflicting date specifications') elif ( (startdate is not None and enddate is None) or (startdate is None and enddate is not None) ): raise ValueError('Start/end date specified without the other') elif (startdate is not None and enddate is not None and dates is None): ndates = gt.get_ndate_timeseries(startdate,enddate,hr_inc=hr_inc) elif ( (startdate is None and enddate is None) and dates is not None): ndates = dates else: raise ValueError('Unexcepted failure on date inputs, startdate = {}, enddate = {}, dates = {}'.format(startdate,enddate,dates)) dts = gt.ndate_to_dt(ndates) data = None ts = None out_dates = None for dt in dts: fn = self.fn_from_tmpl(dt) if fn not in self.obdict: if self.verbose: print('Opening {}'.format(fn)) self.obdict[fn] = obs(fn,date=dt,verbose=self.verbose, reallyverbose=self.reallyverbose, in_data=self.data) if msk is not None: if self.verbose: print('setting mask on {} to {}'.format(fn,msk)) self.obdict[fn].set_mask(msk) # print(self.obdict[fn].stat('mean','omf',masked=msk)) if self.obdict[fn].v(in_var,masked=msk) is not None: if (ts is None): ts = self.obdict[fn].stat(stat,in_var,masked=msk) out_dates = np.array(gt.dt_to_ndate(dt)) else: ts = np.append(ts,self.obdict[fn].stat(stat,in_var,masked=msk)) out_dates = np.append(out_dates,gt.dt_to_ndate(dt)) if (DataFrame): return(pd.DataFrame.from_dict({'ndate':out_dates,'Val':ts,'datetime':gt.ndate_to_dt(out_dates)})) else: return(out_dates,ts)
def v(self, in_var, startdate=None, enddate=None, dates=None, hr_inc=None, masked=None): import gmao_tools as gt if (masked or self.mask_enabled) and self.mask_logic is None: raise ValueError('Masked data requested, but mask logic is not set') elif ((masked or self.mask_enabled) and self.mask_logic is not None): msk = self.mask_logic else: msk = None if startdate is None: startdate=self.startdate if enddate is None: enddate=self.enddate if hr_inc is None: hr_inc=self.hr_inc if (startdate is None and enddate is None and dates is None): raise ValueError('No dates are specified, unable to retrieve data') elif (startdate is not None and enddate is not None and dates is not None): raise ValueError('Start/end dates and dates array specified, unable to retrieve data due to conflicting date specifications') elif ( (startdate is not None and enddate is None) or (startdate is None and enddate is not None) ): raise ValueError('Start/end date specified without the other') elif (startdate is not None and enddate is not None and dates is None): ndates = gt.get_ndate_timeseries(startdate,enddate,hr_inc=hr_inc) elif ( (startdate is None and enddate is None) and dates is not None): ndates = dates else: raise ValueError('Unexcepted failure on date inputs, startdate = {}, enddate = {}, dates = {}'.format(startdate,enddate,dates)) dts = gt.ndate_to_dt(ndates) data = None for dt in dts: fn = self.fn_from_tmpl(dt) if fn not in self.obdict: if self.verbose: print('Opening {}'.format(fn)) self.obdict[fn] = obs(fn,date=dt,verbose=self.verbose, reallyverbose=self.reallyverbose, in_data=self.data) if msk is not None: self.obdict[fn].set_mask(msk) if self.obdict[fn].v(in_var,masked=msk) is not None: if (data is None): data = self.obdict[fn].v(in_var,masked=msk) else: data = np.append(data,self.obdict[fn].v(in_var,masked=msk),axis=0) return(data)