#!/usr/bin/env python # Wenchang Yang (wenchang@princeton.edu) # Wed Sep 20 10:55:27 EDT 2023 if __name__ == '__main__': import sys,os from misc.timer import Timer tt = Timer(f'[{os.getcwd()}] 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 wython = '/tigress/wenchang/wython' if wython not in sys.path: sys.path.append(wython); print('added to python path:', wython) from misc import get_kws_from_argv # if __name__ == '__main__': tt.check('end import') # #start from here model = 'HIRAM' minWindmax = 33 if '33' in sys.argv else 17 #default is 17m/s yearspan = range(1981,2010) ofile = f'TS{minWindmax}_scale_factor_{model}.nc' #model ifile = f'tc_counts.TS{minWindmax}.5ens.1971-2018.yearly.nc' print(ifile) ds = xr.open_dataset(ifile) #obs idir = '/tigress/wenchang/data/ibtracs/v04r00/analysis/v2' ifile = f'{idir}/IBTrACS.ALL.v04r00.2022-01-25.counts.TS{minWindmax}.1980-2021.yearly.nc' print(ifile) ds0 = xr.open_dataset(ifile) if os.path.exists(ofile): ds_scale = xr.open_dataset(ofile) print('[loaded]:', ofile) else: ds_scale = ds0.sel(year=yearspan).mean('year')/ds.sel(year=yearspan).mean(['year', 'en']) ds_scale.to_netcdf(ofile) print('[saved]:', ofile) if __name__ == '__main__': from wyconfig import * #my plot settings basin = get_kws_from_argv('basin', 'global') ds0[basin].plot(color='k', label=f'IBTrACS TS{minWindmax}') ds[basin].mean('en').plot(label=f'{model} raw') scale_factor = ds_scale[basin].item() ds[basin].mean('en').pipe(lambda x: x*scale_factor).plot(label=f'{model} scaled (by {scale_factor:.2g})', ls='--') ax = plt.gca() ax.legend() ax.set_title(f'{basin} TS{minWindmax} counts in {model} and IBTrACS') ax.set_ylabel('#') #savefig if 'savefig' in sys.argv or 's' in sys.argv: figname = __file__.replace('.py', f'__TS{minWindmax}_{model}_{basin}.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 or 'n' in sys.argv: pass else: if 'plt' in globals(): plt.show()