Ejemplo n.º 1
0
 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
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
    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)          
Ejemplo n.º 4
0
    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)