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
Example #3
0
    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)
Example #4
0
        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)
Example #6
0
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)