#!/usr/bin/env python # Wenchang Yang (wenchang@princeton.edu) # Fri Dec 31 12:49:58 EST 2021 if __name__ == '__main__': import sys from misc.timer import Timer s = ' ' tt = Timer(f'start {s.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 import xlinregress import xfilter import xpyleoclim # if __name__ == '__main__': tt.check('end import') # #start from here #params from sys.argv lmr = 2018 if len(sys.argv)>1 and '2019' in sys.argv[1:] else 2019 pyleoclim = True if len(sys.argv)>1 and 'pyleoclim' in sys.argv[1:] else False daname = 'sst' n_window = 40 lowpass = lambda da: da.filter.lowpass(1/n_window, dim='year', padtype='even') years = slice(850,1850) ofile = f'linregress_map_sedimentHU_on_LMR{lmr}SST_{years.start}-{years.stop}.nc' if pyleoclim: ofile = ofile.replace('.nc', '_pyleoclim_.nc') if os.path.exists(ofile): ds = xr.open_dataset(ofile) print('[loaded]:', ofile) else: ds_liz = xr.open_dataset('../Lizzie/sedimentHU_v20220121_noCaySal_smooth40yr_count.nc') if lmr == 2018: ds_lmr = xr.open_dataset('/tigress/gvecchi/DATA/LMR_2018/sst_MCruns_ensemble_mean.nc') elif lmr == 2019: ds_lmr = xr.open_dataset('/tigress/gvecchi/DATA/LMR_2019/sst_MCruns_ensemble_mean.nc') #sediment HU print('sediment HU...') da_liz = ds_liz['sedimentHUcount'].sel(member='sediment_estimate').sel(year=years) da_liz = ( da_liz - da_liz.mean() )/da_liz.std() #standardize #LMR SST print('LMR SST...') da = ds_lmr[daname] da = da.assign_coords(time=da.time.dt.year.values).rename(time='year') #da = ds_lmr[daname].groupby('time.year').mean('time').load() da_lmr = da.mean('MCrun').pipe(lowpass).sel(year=years) if pyleoclim: result = xpyleoclim.correlation(da_lmr, da_liz, seed=0) ds = result[['r', 'p', 'signif']].rename(p='pvalue') slope = ds['r'] * da_lmr.std('year')/da_liz.std('year') ds['slope'] = slope.assign_attrs(units='K per STD HU') else: print('linear regression...') rg = da_lmr.linregress.on(da_liz, dim='year', ess_on=True) ds = rg[['slope', 'r', 'dof', 'pvalue']] ds['slope'].attrs['units'] = 'K per STD HU' ds.to_netcdf(ofile) print('[saved]:', ofile) if __name__ == '__main__': from wyconfig import * #my plot settings from geoplots import mapplot plt.close() figsize = (8,4) fig, ax = plt.subplots(figsize=figsize) da = ds.r p = ds.pvalue da.plot(ax=ax) mapplot(ax=ax21) da.where(p<0.025).plot.contourf(ax=ax, colors='none', hatches=['///']) #savefig if len(sys.argv)>1 and 'savefig' in sys.argv[1:]: #figname = __file__.replace('.py', f'.png') figname = ofile.replace('.nc', '.png') wysavefig(figname) tt.check(f'**Done**') plt.show()