#!/usr/bin/env python # Wenchang Yang (wenchang@princeton.edu) # Mon Mar 24 11:50:41 AM EDT 2025 if __name__ == '__main__': import sys,os try: from misc.timer import Timer tt = Timer(f'[{os.getcwd()}] start ' + ' '.join(sys.argv)) except: pass 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 import xfilter # if __name__ == '__main__': try: tt.check('end import') except: pass # #start from here basin = """ global WP NA """.split()[-1] timeslice_ref = slice('1900', '1999') yearslice_ref = slice(1900, 1999) #timeslice_ref = slice('1351', '1550') #yearslice_ref = slice(1351, 1550) norm = lambda da: da/da.sel(year=yearslice_ref).mean('year')*100 - 100 norm_bound = lambda da: da/da_lizzie.sel(year=yearslice_ref).mean('year')*100 - 100 units = f'% of {timeslice_ref.start}-{timeslice_ref.stop} mean' func_units = lambda da: da.assign_attrs(units=units, long_name='HU') pct_diff = lambda da: da.sel(year=slice(1451, 1550)).mean('year') - da.sel(year=slice(1351,1450)).mean('year') #lowpass n_window = 40 #40 years lowpass = lambda da: da.filter.lowpass(1/n_window, dim='year', padtype='even') #seeds ifile = '/projects/w/wenchang/analysis/TC/HIRAM/amipLMR2019SST0850ic_tigercpu_intelmpi_18_540PE/netcdf/tc_counts.seeds.ens01.0850-1999.minohour12.nc' ds_sd = xr.open_dataset(ifile) #spi ifile = 'spi_HIRAM_amipLMR2019SST0850ic_tigercpu_intelmpi_18_540PE_ens01_0850-1999_NAmean.nc' da = xr.open_dataarray(ifile)#.groupby('time.year').mean('time') da = da.assign_coords(time=ds_sd.time) da_spi = da #adjust for HU from TC #pvi ifile = 'pvi_HIRAM_amipLMR2019SST0850ic_tigercpu_intelmpi_18_540PE_ens01_0850-1999_NAmean.nc' da = xr.open_dataarray(ifile)#.groupby('time.year').mean('time') da = da.assign_coords(time=ds_sd.time) da_pvi = da ** 2 #adjust for HU from TC if __name__ == '__main__': from wyconfig import * #my plot settings fig,ax = plt.subplots() #seeds label = 'seeds' da = ds_sd[basin].groupby('time.month') * da_pvi.sel(time=timeslice_ref).groupby('time.month').mean('time') da = da.groupby('time.year').sum('time') da.pipe(norm).pipe(lowpass).pipe(func_units).plot(label=label, ax=ax) #spi label = 'SPI' da = da_spi.groupby('time.month') * da_pvi.sel(time=timeslice_ref).groupby('time.month').mean('time') da = da.groupby('time.year').sum('time') da.pipe(norm).pipe(lowpass).pipe(func_units).plot(label=label, ax=ax) ax.axhline(0, color='gray', ls='--') ax.legend() ax.set_title(f'HiRAM seeds vs. SPI over the last millennium') ax.set_ylabel(units) #savefig if 'savefig' in sys.argv or 's' in sys.argv: figname = __file__.replace('.py', f'.png') if 'overwritefig' in sys.argv or 'o' in sys.argv: wysavefig(figname, overwritefig=True) else: wysavefig(figname) try: tt.check(f'**Done**') except: pass print() if 'notshowfig' in sys.argv or 'n' in sys.argv: pass else: if 'plt' in globals(): plt.show()