def all_data(datafiles, npre, npost, lon1, lon2, compdays, comp_attrs): # Read daily data fields aligned relative to onset day data = collections.OrderedDict() sectordata = collections.OrderedDict() comp = collections.OrderedDict() sectorcomp = collections.OrderedDict() sector_latmax = {} for varnm in datafiles: print('Reading daily data for ' + varnm) var, onset, retreat = utils.load_dailyrel(datafiles[varnm]) var = atm.subset(var, {'dayrel' : (-npre, npost)}) var = housekeeping(var) # Compute sector mean and composite averages sectorvar = atm.dim_mean(var, 'lon', lon1, lon2) compvar = get_composites(var, compdays, comp_attrs) sectorcompvar = get_composites(sectorvar, compdays, comp_attrs) # Latitude of maximum subcloud theta_e if varnm == 'THETA_E950' or varnm == 'THETA_E_LML': sector_latmax[varnm] = theta_e_latmax(sectorvar) # Compute regression or take the climatology if 'year' in var.dims: var = atm.dim_mean(var, 'year') sectorvar = atm.dim_mean(sectorvar, 'year') compvar = atm.dim_mean(compvar, 'year') sectorcompvar = atm.dim_mean(sectorcompvar, 'year') # Pack everything into dicts for output data[varnm], sectordata[varnm] = var, sectorvar comp[varnm], sectorcomp[varnm] = compvar, sectorcompvar return data, sectordata, sector_latmax, comp, sectorcomp
def get_data(varnm, datafiles, regdays, seasons, lon1, lon2, nroll=None): var, onset, retreat = utils.load_dailyrel(datafiles[varnm]) if nroll is not None: var = atm.rolling_mean(var, nroll, axis=1, center=True) # Seasonal averages and daily lat-lon data data = xray.Dataset() for season in seasons: key = varnm + '_' + season data[key] = ssn_average(var, onset, retreat, season) # Daily data on regdays data[varnm + '_DAILY'] = var.sel(dayrel=regdays) # Sector mean data var_sector = atm.dim_mean(var, 'lon', lon1, lon2) alldata = {'data_latlon' : data, 'var_sector' : var_sector, 'onset' : onset, 'retreat' : retreat} return alldata
files = {nm : [filestr % (nm, onset_nm, yearstr)] for nm in varnms} return files datafiles = {key: data_filenames(comp_yrs[key], varnms, onset_nm, datadir) for key in comp_yrs} datafiles['clim'] = clim_filenames(clim_yearstr, varnms, onset_nm, datadir) # ---------------------------------------------------------------------- # Get daily data relative to onset day data = {} for key in datafiles: data[key] = {} for nm in datafiles[key]: var, _, _ = utils.load_dailyrel(datafiles[key][nm]) if 'year' in var.dims: var = var.mean(dim='year') data[key][nm] = var # ---------------------------------------------------------------------- # Housekeeping # Fill Ro200 with NaNs near equator varnm = 'Ro200' for key1 in data: if varnm in data[key1]: latbuf = 5 lat = atm.get_coord(data[key1][varnm], 'lat') latbig = atm.biggify(lat, data[key1][varnm], tile=True)
varid, plev = get_info(varnm) var = get_data_rel(varid, plev, year, files.get(varnm), data, d0, npre, npost) var.attrs = atm.odict_delete(var.attrs, 'd_onset') var.name = varid data[varnm] = var savefile = get_savefile(version, savedir, varnm, onset_nm, ind_nm, year) print('Saving to ' + savefile) atm.save_nc(savefile, var, onset_var, retreat_var) # ---------------------------------------------------------------------- # Compute climatologies and save relfiles = {} for key in datafiles: relfiles[key] = [get_savefile(version, savedir, key, onset_nm, ind_nm, yr) % yr for yr in years] for varnm in relfiles: varid, _ = get_info(varnm) var, onset, retreat = load_dailyrel(relfiles[varnm]) ds = xray.Dataset() ds[varid], ds['D_ONSET'], ds['D_RETREAT'] = var, onset, retreat print('Computing climatological mean') yearnm = atm.get_coord(ds, 'year', 'name') ds = ds.mean(dim=yearnm) ds[varid].attrs = var.attrs ds[varid].attrs['years'] = years filn = relfiles[varnm][0].replace('%d' % years[0], yearstr) print('Saving to ' + filn) ds.to_netcdf(filn)
years = np.arange(1979, 2015) datadir = atm.homedir() + 'datastore/merra/analysis/' varnms = ['U200', 'T200'] datafiles = collections.OrderedDict() filestr = datadir + 'merra_%s_dailyrel_%s_%d.nc' for nm in varnms: datafiles[nm] = [filestr % (nm, onset_nm, yr) for yr in years] # ---------------------------------------------------------------------- # Read data data = collections.OrderedDict() for nm in datafiles: var, onset, retreat = utils.load_dailyrel(datafiles[nm]) data[nm] = var # ---------------------------------------------------------------------- # Test atm.regress_field day = -60 # 1-d timeseries var = data['U200'].sel(dayrel=day) ts = atm.mean_over_geobox(var, 10, 30, 60, 100) ts_reg = atm.Linreg(onset, ts) ts_reg2 = atm.regress_field(ts, onset) print(ts_reg.r, ts_reg2.r.values) print(ts_reg.slope, ts_reg2.m.values) print(ts_reg.p, ts_reg2.p.values)