#!/usr/bin/env python # Wenchang Yang (wenchang@princeton.edu) # Mon Jul 19 14:39:12 EDT 2021 if __name__ == '__main__': from misc.timer import Timer tt = Timer(f'start {__file__}') import sys, os.path, os, glob, datetime import xarray as xr, numpy as np, pandas as pd, matplotlib.pyplot as plt #more imports import regionmask # if __name__ == '__main__': tt.check('end import') # #start from here #read lons/lats from txt file ifile = 'mask.txt' df = pd.read_csv(ifile, sep='\s') #create regions object based on the outline outline = [(lon, lat) for lon,lat in zip(df.lon.values, df.lat.values)] region = regionmask.Regions(name='mask', numbers=[1,], names=['euroflooding2021',], abbrevs=['EF2021',], outlines=[outline,]) lons = slice(3,7) lats = slice(48,52) #used to generate mask datafile = '/tigress/wenchang/MODEL_OUT/AM2.5C360/amipHadISST_chancorr_tigercpu_intelmpi_18_1080PE/en01/POSTP/20180101.atmos_month.nc' ofile = f'mask_p25_3E7E48N52N.nc' #datafile = '/tigress/wenchang/MODEL_OUT/HistRCP45_tigercpu_intelmpi_18_576PE/en01/POSTP/20180101.atmos_month.nc' #ofile = f'mask_p5_3E7E48N52N.nc' if os.path.exists(ofile): mask = xr.open_dataarray(ofile) print('[loaded]:', ofile) else: #create mask for model output data da = xr.open_dataset(datafile)['precip'].rename(grid_xt='lon', grid_yt='lat').sel(lon=lons, lat=lats) mask = region.mask(da) #save mask to nc file mask.to_dataset().to_netcdf(ofile) print('[saved]:', ofile) if __name__ == '__main__': from wyconfig import * #my plot settings import cartopy.crs as ccrs from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter fig = plt.figure(figsize=(6,5)) region.plot() ax = plt.gca() mask.plot(ax=ax, add_colorbar=False) #ax.gridlines(draw_labels=True, dms=True, x_inline=False, y_inline=False) ax.set_xticks(range(3,8))#, crs=ccrs.PlateCarree()) ax.set_yticks(range(48,53)) lon_formatter = LongitudeFormatter(zero_direction_label=True) lat_formatter = LatitudeFormatter() ax.xaxis.set_major_formatter(lon_formatter) ax.yaxis.set_major_formatter(lat_formatter) ax.gridlines() ax.set_xlabel('') ax.set_ylabel('') ax.set_title(ofile.replace('.nc', '')) #savefig if 'savefig' in sys.argv: #figname = __file__.replace('.py', f'.png') figname = ofile.replace('.nc', '.png') wysavefig(figname) tt.check(f'**Done**') plt.show()