#!/usr/bin/env python # Wenchang Yang (wenchang@princeton.edu) # Sun Apr 7 17:00:19 EDT 2024 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 from misc import roll_lon import salem from modelout import get_modelout_data # if __name__ == '__main__': tt.check('end import') # #start from here """ daname = 'RH2m' daname_long = '2m_relative_humidity' daname = 'q2m' daname_long = '2m_specific_humidity' daname = 'sp' daname_long = 'surface_pressure' """ daname = 't2m' daname_long = '2m_temperature' if daname in ('RH2m', 'q2m'): #from analysis monthly data idir = f'/tigress/wenchang/data/era5/analysis_wy/{daname_long}/monthly' else: #from raw monthly data idir = f'/tigress/wenchang/data/era5/raw/monthly/{daname_long}' years = range(1980,2020+1) funcname = 'westUS' ofile = f'era5.{daname_long}.{years[0]}-{years[-1]}.{funcname}.nc' if os.path.exists(ofile): print('[exists]:', ofile) sys.exit() #shape of the 6 western states shapefile = '/tigress/wenchang/analysis/climate_and_disease/data/US_states/cb_2016_us_state_5m/cb_2016_us_state_5m.shp' dfsh = salem.read_shapefile(shapefile) states = 'CA','NV','AZ','NM','UT','CO' dfsh = dfsh[dfsh['STUSPS'].isin(states)] #data over the selected states def sel_states(da): return da.rename(longitude='lon', latitude='lat').pipe(roll_lon).salem.subset(shape=dfsh, margin=1).salem.roi(shape=dfsh) das = [] for year in years: ifile = os.path.join(idir, f'era5.{daname_long}.monthly.{year}.nc') print(year, 'of', years[-1], ifile) da = xr.open_dataarray(ifile).load().pipe(sel_states) das.append(da) #concat da = xr.concat(das, dim='time') #save encoding = {daname: {'zlib': True, 'complevel': 1}} da.to_dataset(name=daname).to_netcdf(ofile, encoding=encoding) print('[saved]:', ofile) if __name__ == '__main__': #from wyconfig import * #my plot settings #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) tt.check(f'**Done**') print() if 'notshowfig' in sys.argv or 'n' in sys.argv: pass else: if 'plt' in globals(): plt.show()