def nearestSampleFile(self, inFile, tyme, onlyVars=None): """ Sample some or all variables of inFile. This simply returns the values of the gridbox the pixel fall into (nearest neighbor). """ from gfio import GFIOctl if self.varTime: # tyme is hour mark, and scanTime displaces from this in seconds tymes = np.array([tyme+timedelta(seconds=int(s)) for s in self.scanTime]) else: # constant time tymes = np.repeat(tyme,self.nobs) # Instiate grads and open file # ---------------------------- f = GFIOctl(inFile) if self.sample == None: self.sample = GCS03Handle(inFile) if onlyVars is None: onlyVars = f.vname # Loop over variables on file # --------------------------- for v in onlyVars: if self.verb: print " <> Nearest sampling ", v var = f.sample(v,self.lon,self.lat,tymes, algorithm='nearest',Verbose=self.verb) if var.ndim == 1: self.sample.__dict__[v] = var elif var.ndim == 2: self.sample.__dict__[v] = var.T # -> (nobs,nz) else: raise IndexError, 'variable <%s> has rank = %d' % var.ndim
def linearSampleFile(self, inFile, tyme, onlyVars=None): """ Interpolates some or all variables of inFile. """ from gfio import GFIOctl if self.varTime: # tyme is hour mark, and scanTime displaces from this in seconds tymes = np.array([tyme+timedelta(seconds=int(s)) for s in self.scanTime]) else: # constant time tymes = np.repeat(tyme,self.nobs) # Open file # --------- f = GFIOctl(inFile) if self.sample == None: self.sample = GCS03Handle(inFile) if onlyVars is None: onlyVars = f.vname # Loop over variables on file # --------------------------- for v in onlyVars: if self.verb: print " <> Linear sampling ", v var = f.sample(v,self.lon,self.lat,tymes,Verbose=self.verb) if var.ndim == 1: self.sample.__dict__[v] = var elif var.ndim == 2: self.sample.__dict__[v] = var.T # -> (nobs,nz) else: raise IndexError, 'variable <%s> has rank = %d' % var.ndim
def linearSampleFile(self, inFile, tyme, onlyVars=None): """ Interpolates some or all variables of inFile. """ from gfio import GFIOctl # constant time tymes = np.repeat(tyme, self.nobs) # Open file # --------- f = GFIOctl(inFile) if self.sample == None: self.sample = SEV03Handle(inFile) if onlyVars is None: onlyVars = f.vname # Loop over variables on file # --------------------------- for v in onlyVars: if self.verb: print " <> Linear sampling ", v var = f.sample(v, self.lon, self.lat, tymes, Verbose=self.verb) if var.ndim == 1: self.sample.__dict__[v] = var elif var.ndim == 2: self.sample.__dict__[v] = var.T # -> (nobs,nz) else: raise IndexError, 'variable <%s> has rank = %d' % var.ndim
def sampleVar(self, ctlfile, vname, aname=None, I=None, **kwds): """ Interpolates variable *vname* from a gridded GFIO collection to obs location/time. On input, *aname* is the attribute name to be defined; if not specified it defaults to *vname*. """ from gfio import GFIOctl f = GFIOctl(ctlfile) if aname == None: aname = vname if I is None: self.__dict__[aname] = f.sample(vname, self.lon, self.lat, self.time, **kwds) else: self.__dict__[aname][I] = MISSING * ones(len(self.lon)) self.__dict__[aname][I] = f.sample(vname, self.lon[I], self.lat[I], self.time[I], **kwds)
def sampleFile(self, inFile, npzFile=None, onlyVars=None, Verbose=True): """ Interpolates all variables of inFile and optionally save them to file *npzFile*. On input, I is an optional filtering index. """ from gfio import GFIOctl, GFIOHandle # Instiate grads and open file # ---------------------------- f = GFIOctl(inFile) # Check if all variables in file are upper case # --------------------------------------------- lc = False for v in f.vname: if v != v.upper(): lc = True self.sample = GFIOHandle(inFile) if onlyVars is None: onlyVars = f.vname # Flatten coordinates # ------------------- nt, nr = self.lon.shape tyme = tile(self.time, (nr, 1)).T lons = self.lon.ravel() lats = self.lat.ravel() tymes = tyme.ravel() # Loop over variables on file # --------------------------- for v in onlyVars: if Verbose: print "<> Sampling ", v if not lc: v_ = v.upper() else: v_ = v var = f.sample(v_, lons, lats, tymes, Verbose=Verbose) if len(var.shape) == 1: self.sample.__dict__[v] = var.reshape((nt, nr)) elif len(var.shape) == 2: var = var.T # shape should be (nobs,nz) self.sample.__dict__[v] = var.reshape((nt, nr, -1)) else: raise IndexError, 'variable <%s> has rannk = %d' % len( var.shape) if npzFile is not None: savez(npzFile, **self.sample.__dict__)
def nearestSampleFile(self, inFile, onlyVars=None): """ Sample some or all variables of inFile. This simply returns the values of the gridbox the pixel fall into (nearest neighbor). """ from gfio import GFIOctl # Instiate grads and open file # ---------------------------- f = GFIOctl(inFile) if self.sample == None: self.sample = GOCIHandle(inFile) if onlyVars is None: onlyVars = f.vname # Flatten coordinates # ------------------- nt, nr = self.lon.shape #tyme = tile(self.tyme,(nr,1)).T lons = self.lon.ravel() lats = self.lat.ravel() tymes = self.tyme.ravel() #tymes[:] = self.gtime # use mean granule time tymes[isnan(self.Observation_time_minute.ravel())] = self.gtime # Loop over variables on file # --------------------------- for v in onlyVars: if self.verb: print " <> Nearest sampling ", v var = f.sample(v, lons, lats, tymes, algorithm='nearest', Verbose=self.verb) self.var = var if len(var.shape) == 1: self.sample.__dict__[v] = var.reshape((nt, nr)) elif len(var.shape) == 2: var = var.T # shape should be (nobs,nz) self.sample.__dict__[v] = var.reshape((nt, nr, -1)) else: raise IndexError, 'variable <%s> has rannk = %d' % len( var.shape)
def linearSampleFile(self, inFile, onlyVars=None): """ Interpolates some or all variables of inFile. """ from gfio import GFIOctl # Open file # --------- f = GFIOctl(inFile) if self.sample == None: self.sample = GOCIHandle(inFile) if onlyVars is None: onlyVars = f.vname # Flatten coordinates # ------------------- nt, nr = self.lon.shape #tyme = tile(self.tyme,(nr,1)).T lons = self.lon.ravel() lats = self.lat.ravel() tymes = self.tyme.ravel() #tymes[:] = self.gtime # use mean granule time tymes[isnan(self.Observation_time_minute.ravel())] = self.gtime # Loop over variables on file # --------------------------- for v in onlyVars: if self.verb: print " <> Linear sampling ", v var = f.sample(v, lons, lats, tymes, Verbose=self.verb) if len(var.shape) == 1: self.sample.__dict__[v] = var.reshape((nt, nr)) elif len(var.shape) == 2: var = var.T # shape should be (nobs,nz) self.sample.__dict__[v] = var.reshape((nt, nr, -1)) else: raise IndexError, 'variable <%s> has rannk = %d' % len( var.shape)
def sampleFile(self, inFile, npzFile=None, onlyVars=None, Verbose=True): """ Interpolates all variables of inFile and optionally save them to file *npzFile* """ from gfio import GFIOctl, GFIOHandle # Instiate grads and open file # ---------------------------- fh = GFIOctl(inFile) self.sample = GFIOHandle(inFile) if onlyVars is None: onlyVars = fh.vname nt = self.lon.shape nz = self.nz tymes = self.tyme lons = self.lon lats = self.lat # Loop over variables on file # --------------------------- for v in onlyVars: if Verbose: print "<> Sampling ", v var = fh.sample(v,lons,lats,tymes,Verbose=Verbose) if len(var.shape) == 1: self.sample.__dict__[v] = var elif len(var.shape) == 2: var = var.T # shape should be (nobs,nz) self.sample.__dict__[v] = var else: raise IndexError, 'variable <%s> has rannk = %d'%len(var.shape) if npzFile is not None: savez(npzFile,**self.sample.__dict__)
interpXY = NC4ctl.interpXY_LatLon if __name__ == "__main__": from time import time as now from gfio import GFIOctl kbeg = 36 kount = 72 - kbeg + 1 filename = '/home/adasilva/iesa/MERRAero/inst3d_prog_v.ddf' # interp using NC4ctl # ------------------- print "------ NC4ctl ----------" f = NC4ctl_(filename) lons = linspace(-45.,-30.,100) lats = linspace(30.,50.,100) dt = f.dt/10 t0 = datetime(2008,6,29,12) times = array([ t0 + i * dt for i in range(100)]) slp = f.sample('SLP',lons,lats,times,Verbose=True) t = f.sample('T',lons,lats,times,kbeg=kbeg,kount=kount,Verbose=True) # Redo with GFIOctl for testing # ----------------------------- print "\n------ GFIOctl ----------" g = GFIOctl(filename) SLP = g.sample('SLP',lons,lats,times,Verbose=True) T = g.sample('T',lons,lats,times,Verbose=True,kbeg=kbeg,kount=kount)