def test_get_generic_landseamask_DEFAULT(self): #XXX TODO analyze also correctness of results ls = utils.get_generic_landseamask(False) ls = utils.get_generic_landseamask(True, area='ocean') ls = utils.get_generic_landseamask(True, area='global') ls = utils.get_generic_landseamask(False, mask_antarctica=False) fname = ['land_sea_fractions_remapnn_t63grid.nc', 'land_sea_fractions_remapnn_t63grid_cell_area.nc'] self.assertTrue(os.path.exists(fname[0])) for f in fname: if os.path.exists(f): os.remove(f)
def test_get_generic_landseamask_DEFAULT(self): #XXX TODO analyze also correctness of results ls = utils.get_generic_landseamask(False) ls = utils.get_generic_landseamask(True, area='ocean') ls = utils.get_generic_landseamask(True, area='global') ls = utils.get_generic_landseamask(False, mask_antarctica=False) fname = [ 'land_sea_fractions_remapnn_t63grid.nc', 'land_sea_fractions_remapnn_t63grid_cell_area.nc' ] self.assertTrue(os.path.exists(fname[0])) for f in fname: if os.path.exists(f): os.remove(f)
def _import_regional_file(self, region_file, varname, targetgrid=None, logfile=None): """ check if the regional file can be either imported or if regions are provided as vector data. In the latter case the regions are rasterized and results are stored in a netCDF file Parameters ---------- region_file : str name of file defining the region. This is either a netCDF file which contains the mask as different integer values or it is a *.reg file which contains the regions as vector data. varname : str name of variable in netCDF file targetgrid : str name of targetgrid; either 't63grid' or the name of a file with a valid geometry Returns ------- region_filename, region_file_varname """ if not os.path.exists(region_file): raise ValueError('ERROR: region file is not existing: ' + region_file) ext = os.path.splitext(region_file)[1] if ext == '.nc': # netCDF file was given. Try to read variable if varname is None: raise ValueError('ERROR: no variable name given!') try: tmp = Data(region_file, varname, read=True) except: raise ValueError( 'ERROR: the regional masking file can not be read!') del tmp # everything is fine return region_file, varname elif ext == '.reg': # regions were given as vector files. Read it and # rasterize the data and store results in a temporary # file import tempfile if targetgrid is None: raise ValueError( 'ERROR: targetgrid needs to be specified for vectorization of regions!' ) if targetgrid == 't63grid': ls_mask = get_T63_landseamask(True, area='global', mask_antarctica=False) else: ls_mask = get_generic_landseamask(True, area='global', target_grid=targetgrid, mask_antarctica=False) # temporary netCDF filename region_file1 = tempfile.mktemp(prefix='region_mask_', suffix='.nc') R = RegionParser(region_file) # read region vector data M = Raster(ls_mask.lon, ls_mask.lat) polylist = [] if logfile is not None: logf = open(logfile, 'w') else: logf = None id = 1 for k in R.regions.keys(): reg = R.regions[k] polylist.append(pycmbsPolygon(id, zip(reg.lon, reg.lat))) if logf is not None: # store mapping table logf.write(k + '\t' + str(id) + '\n') id += 1 M.rasterize_polygons(polylist) if logf is not None: logf.close() # generate dummy output file O = Data(None, None) O.data = M.mask O.lat = ls_mask.lat O.lon = ls_mask.lon varname = 'regions' O.save(region_file1, varname=varname, format='nc', delete=True) print('Regionfile was store in file: %s' % region_file1) # check again that file is readable try: tmp = Data(region_file1, varname, read=True) except: print region_file1, varname raise ValueError( 'ERROR: the generated region file is not readable!') del tmp return region_file1, varname else: raise ValueError('ERROR: unsupported file type')
def _import_regional_file(self, region_file, varname, targetgrid=None, logfile=None): """ check if the regional file can be either imported or if regions are provided as vector data. In the latter case the regions are rasterized and results are stored in a netCDF file Parameters ---------- region_file : str name of file defining the region. This is either a netCDF file which contains the mask as different integer values or it is a *.reg file which contains the regions as vector data. varname : str name of variable in netCDF file targetgrid : str name of targetgrid; either 't63grid' or the name of a file with a valid geometry Returns ------- region_filename, region_file_varname """ if not os.path.exists(region_file): raise ValueError('ERROR: region file is not existing: ' + region_file) ext = os.path.splitext(region_file)[1] if ext == '.nc': # netCDF file was given. Try to read variable if varname is None: raise ValueError('ERROR: no variable name given!') try: tmp = Data(region_file, varname, read=True) except: raise ValueError('ERROR: the regional masking file can not be read!') del tmp # everything is fine return region_file, varname elif ext == '.reg': # regions were given as vector files. Read it and # rasterize the data and store results in a temporary # file import tempfile if targetgrid is None: raise ValueError('ERROR: targetgrid needs to be specified for vectorization of regions!') if targetgrid == 't63grid': ls_mask = get_T63_landseamask(True, area='global', mask_antarctica=False) else: ls_mask = get_generic_landseamask(True, area='global', target_grid=targetgrid, mask_antarctica=False) # temporary netCDF filename region_file1 = tempfile.mktemp(prefix='region_mask_', suffix='.nc') R = RegionParser(region_file) # read region vector data M = Raster(ls_mask.lon, ls_mask.lat) polylist = [] if logfile is not None: logf = open(logfile, 'w') else: logf = None id = 1 for k in R.regions.keys(): reg = R.regions[k] polylist.append(pycmbsPolygon(id, zip(reg.lon, reg.lat))) if logf is not None: # store mapping table logf.write(k + '\t' + str(id) + '\n') id += 1 M.rasterize_polygons(polylist) if logf is not None: logf.close() # generate dummy output file O = Data(None, None) O.data = M.mask O.lat = ls_mask.lat O.lon = ls_mask.lon varname = 'regions' O.save(region_file1, varname=varname, format='nc', delete=True) print('Regionfile was store in file: %s' % region_file1) # check again that file is readable try: tmp = Data(region_file1, varname, read=True) except: print region_file1, varname raise ValueError('ERROR: the generated region file is not readable!') del tmp return region_file1, varname else: raise ValueError('ERROR: unsupported file type')