def __init__(self,pattern,dimension,dim_func,variable=None,preload=False): files = glob(pattern) files.sort() if len(files) == 0: raise Exception("No files matching pattern", pattern) layer_dim = [dim_func(f) for f in files] self.variable = variable #import h5py #self.fh = h5py.File(filename,'r') self.file_layers = [_spatial_file_loader(filename,variable) for filename in files] self.ref_fh = self.file_layers[0] #lats,lons = self.fh['dimensions/latitude'][...], self.fh['dimensions/longitude'][...] self._flat_cs = self.ref_fh.get_coords() self.cs = mt.CoordinateSet((mt.Coordinates(dimension,layer_dim),self._flat_cs['latitude'],self._flat_cs['longitude'])) if preload: self.v =[fh.data[...] for fh in self.file_layers] else: self.v = [fh.data for fh in self.file_layers] self.dtype = self.v[0].dtype self._shaper = _3shaper
def __init__(self,path,pattern,nc_var,preload=False): import netCDF4 as nc self.fh = nc.Dataset(path+pattern,'r') self.v = self.fh.variables[nc_var] self.time_idx = self.fh.variables['time'][:] lats,lons = self.fh.variables['latitude'][...], self.fh.variables['longitude'][...] self.cs = mt.CoordinateSet(mt.latlon_to_coords(lats,lons))
def __init__(self, filename, variable, preload=False): import netCDF4 as nc self.fh = nc.Dataset(filename, 'r') lats, lons = self.fh.variables['latitude'][ ...], self.fh.variables['longitude'][...] self.cs = mt.CoordinateSet(mt.latlon_to_coords(lats, lons)) if preload: self.v = self.fh.variables[variable][...] else: self.v = self.fh.variables[variable]
def get_data(self,coords): idx = self._flat_cs.get_index(mt.CoordinateSet([coords.latitude,coords.longitude])) out_shape = tuple([len(self.cs[0])] + list(index_shape(idx))) out_data = np.empty(out_shape,dtype=self.dtype) for i,v in enumerate(self.v): out_data[i] = v[idx] return out_data.reshape(self._shaper(self.cs,coords))
def __setitem__(self, k, extent): group = self.f.create_group(k) g = DatasetManager(group) lats = mt.Coordinates(mt.latitude, extent.latitudes.to_degrees()) lons = mt.Coordinates(mt.longitude, extent.longitudes.to_degrees()) cs = mt.CoordinateSet([lats, lons]) v = mt.Variable( 'area', 'm2', dict(long_name='Metres squared covered by cell', cell_size=extent.cell_size.to_degrees(), lat_orient=extent.parent_ref.lat_orient)) mapped_var = mt.MappedVariable(v, cs, np.float64) ncv = g.create_variable(mapped_var) ncv[...] = extent.areas.data
def __init__(self,filename,variable,preload=False): self.filename = filename self.variable = variable self.preload = preload import h5py self.fh = h5py.File(filename,'r') lats,lons = self.fh['dimensions/latitude'][...], self.fh['dimensions/longitude'][...] self.cs = mt.CoordinateSet(mt.latlon_to_coords(lats,lons)) if preload: self.v = self.fh[variable][...] else: self.v = self.fh[variable] self.dtype = self.v.dtype
def get_data(self, coords): idx = self.cs.get_index( mt.CoordinateSet([coords.latitude, coords.longitude])) return self.v[idx].reshape(self._shaper(self.cs, coords))
def get_coords(self): return mt.CoordinateSet([ mt.Coordinates(mt.get_dimension(k, '', self._dim_handles[k].dtype), self._dim_handles[k][...]) for k in self.dims ])
def get_coords(self): return mt.CoordinateSet([mt.Coordinates(mt.get_dimension(k),self.fh['dimensions'][k][...]) for k in self.dims])