def get_onset_indices(onset_nm, datafiles, years, data=None): """Return monsoon onset/retreat/length indices. """ # Options for CHP_MFC and CHP_PCP lat1, lat2 = 10, 30 lon1, lon2 = 60, 100 chp_opts = [None, lat1, lat2, lon1, lon2] if onset_nm == 'HOWI': maxbreak = 10 npts = 100 ds = atm.combine_daily_years(['uq_int', 'vq_int'], datafiles, years, yearname='year') index, _ = indices.onset_HOWI(ds['uq_int'], ds['vq_int'], npts, maxbreak=maxbreak) index.attrs['title'] = 'HOWI (N=%d)' % npts elif onset_nm == 'CHP_MFC': if data is None: tseries = get_mfc_box(datafiles, None, None, years, *chp_opts) data = tseries['MFC_ACC'] index['ts_daily'] = tseries['MFC'] index = indices.onset_changepoint(data) elif onset_nm == 'CHP_PCP': if data is None: tseries = get_mfc_box(None, datafiles, None, years, *chp_opts) data = tseries['PCP_ACC'] index = indices.onset_changepoint(data) index['ts_daily'] = tseries['PCP'] # Monsoon retreat and length indices if 'retreat' in index: index['length'] = index['retreat'] - index['onset'] else: index['retreat'] = np.nan * index['onset'] index['length'] = np.nan * index['onset'] return index
# ---------------------------------------------------------------------- def saveclose(name, isave, exts): if isave: for ext in exts: atm.savefigs(name, ext) plt.close('all') # ---------------------------------------------------------------------- # HOWI index (Webster and Fasullo 2003) maxbreak = 10 ds = atm.combine_daily_years(['uq_int', 'vq_int'], vimtfiles, years, yearname='year') ds_howi = {} for npts in [50, 100]: howi, ds_howi[npts] = indices.onset_HOWI(ds['uq_int'], ds['vq_int'], npts, maxbreak=maxbreak) howi.attrs['title'] = 'HOWI (N=%d)' % npts index['HOWI_%d' % npts] = howi # ---------------------------------------------------------------------- # Wang & LinHo method def get_onset_WLH(years, days, pcp_sm, threshold, titlestr, pentad=True, pcp_jan=None): nyears = len(years) i_onset = np.zeros(nyears) i_retreat = np.zeros(nyears) i_peak = np.zeros(nyears) for y, year in enumerate(years): vals = indices.onset_WLH_1D(pcp_sm[y], threshold, precip_jan=pcp_jan) i_onset[y], i_retreat[y], i_peak[y] = vals
lat1, lat2 = -20, 30 lon1, lon2 = 40, 100 with xray.open_dataset(datafile) as ds: uq_int = ds['uq_int'].load() vq_int = ds['vq_int'].load() npts = 100 #npts = 50 pre_days = 'May 18-24' post_days = 'June 8-14' namestr = 'HOWI_%dpts_' % npts exts = ['png', 'eps'] isave = True howi, ds = onset_HOWI(uq_int, vq_int, npts) # ---------------------------------------------------------------------- # MAPS # ---------------------------------------------------------------------- # Plot climatological VIMT composites lat = atm.get_coord(ds, 'lat') lon = atm.get_coord(ds, 'lon') x, y = np.meshgrid(lon, lat) axlims = (lat1, lat2, lon1, lon2) plt.figure(figsize=(12,10)) plt.subplot(221) m = atm.init_latlon(lat1, lat2, lon1, lon2) m.quiver(x, y, ds['uq_bar_pre'], ds['vq_bar_pre']) plt.title(pre_days + ' VIMT Climatology') plt.subplot(223)