#!/usr/bin/env python # Wenchang Yang (wenchang@princeton.edu) # Fri Sep 9 16:18:43 EDT 2022 if __name__ == '__main__': import sys from misc.timer import Timer tt = Timer('start ' + ' '.join(sys.argv)) import sys, os.path, os, glob, datetime import xarray as xr, numpy as np, pandas as pd, matplotlib.pyplot as plt #more imports from misc.seasons import sel_season # if __name__ == '__main__': tt.check('end import') # #start from here def roll_lon(da, lonmax=180): if lonmax == 180: if da.lon.max() > 180: da = da.roll(lon=da.lon.size//2, roll_coords=True) lon_new = da.lon.where(da.lon<=180, other=da.lon-360).values da = da.assign_coords(lon=lon_new) elif lonmax == 360: if da.lon.min() < 0: da = da.roll(lon=da.lon.size//2, roll_coords=True) lon_new = da.lon.where(da.lon>0, other=da.lon+360).values da = da.assign_coords(lon=lon_new) return da #model = 'AM2.5C360' if 'AM2.5C360' in sys.argv else 'FLOR' model = os.path.basename(os.getcwd()) #print(model); exit() if model == 'FLOR': ifile = 'precip_FLOR_HistRCP45_tigercpu_intelmpi_18_576PE_10ens_1860-2100_EA.nc' else: ifile = 'precip_AM2.5C360_amipHadISSTrcp45_tigercpu_intelmpi_18_1080PE_3ens_1871-2100_EA.nc' #ifiles = 'precip_FLOR_HistRCP45_tigercpu_intelmpi_18_576PE_ens??_1860-2100_NHE.nc' years = slice('1991', '2020') season = """ OND MAM """.split()[-1] tag = f'{model}_{season}{years.start}-{years.stop}' ofile = __file__.replace('.py', f'_{tag}.nc') if os.path.exists(ofile) and not 'o' in sys.argv: print('[loaded]:', ofile) da = xr.open_dataarray(ofile) else: #ds = xr.open_mfdataset(ifiles, combine='nested', concat_dim=['time', 'ens']) #daname = list(ds.data_vars)[0] #da = ds[daname].sel(time=years).pipe(sel_season).load().mean(['time', 'ens'], keep_attrs=True) print('loading...') da = xr.open_dataarray(ifile) da = da.sel(time=years).load().pipe(sel_season, season=season).mean(['time', 'ens'], keep_attrs=True) print('saving...') da.to_dataset().to_netcdf(ofile) print('[saved]:', ofile) def plot_subregion(region_name='region of the event', **kws): ax = kws.pop('ax', plt.gca()) label = kws.pop('label', region_name) df = pd.read_csv('../region.txt', sep='\s+') lon, lat = df['x'], df['y'] if lon.min()<0: lon += 360 ax.plot(lon, lat, label=label, **kws) if __name__ == '__main__': from wyconfig import * #my plot settings from geoplots import mapplot fig, ax = plt.subplots(figsize=(5,4)) #da.plot(cmap='YlGnBu', vmax=10, vmin=0, levels=11) #func = lambda da: (da - 273.15).assign_attrs(units='degC') #da.pipe(func).plot(center=False, vmin=0, vmax=30, levels=31, cmap='Spectral_r') func = lambda da: da.assign_attrs(units='mm/day') da.pipe(func).plot(center=False, vmin=0, vmax=15, levels=16, cmap='YlGnBu', extend='max') mapplot() plot_subregion(color='k', lw=1) #plot_subregion('IndusBasin', color='C1') ax.set_xlabel('') ax.set_ylabel('') #ax.legend(loc='upper left') ax.set_title(f'{model} {da.name} {tag.replace("_", " ")}') #savefig if 'savefig' in sys.argv or 's' in sys.argv: #figname = __file__.replace('.py', f'.png') figname = ofile.replace('.nc', f'.png') if 'overwritefig' in sys.argv or 'o' in sys.argv: wysavefig(figname, overwritefig=True) else: wysavefig(figname) tt.check(f'**Done**') print() if 'notshowfig' in sys.argv: pass else: plt.show()