def get_onset(years, pcp_sm): i_onset = np.zeros(nyears) i_retreat = np.zeros(nyears) i_peak = np.zeros(nyears) for y, year in enumerate(years): i_onset[y], i_retreat[y], i_peak[y] = onset_WLH_1D(pcp_sm[y]) return i_onset, i_retreat, i_peak
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 # Convert from pentads to day of year if pentad: d_onset = [int(atm.pentad_to_jday(i, pmin=0)) for i in i_onset] d_retreat = [int(atm.pentad_to_jday(i, pmin=0)) for i in i_retreat] else: d_onset = [np.nan if np.isnan(i) else days[int(i)] for i in i_onset] d_retreat = [np.nan if np.isnan(i) else days[int(i)] for i in i_retreat] # Pack into Dataset index = xray.Dataset() days = xray.DataArray(days, {'day' : days}) years = xray.DataArray(years, {'year' : years}) index['tseries'] = xray.DataArray(pcp_sm, dims=['year', 'day'], coords={'year' : years, 'day': days}) index['onset'] = xray.DataArray(d_onset, coords={'year' : years}) index['retreat'] = xray.DataArray(d_retreat, coords={'year' : years}) index.attrs['title'] = titlestr return index
def single_WLH(cmap_file, yrmin, yrmax, lat0, lon0, loc_nm, kmax, kann, onset_min=20): # Single grid point and single year/climatology precip = precipdat.read_cmap(cmap_file, yrmin, yrmax) if yrmax > yrmin: precip = precip.mean(axis=0) titlestr = 'CMAP %d-%d' % (yrmin, yrmax) else: precip = precip[0] titlestr = 'CMAP %d' % yrmin latval, ilat0 = atm.find_closest(precip.lat, lat0) lonval, ilon0 = atm.find_closest(precip.lon, lon0) d = 1.25 latstr = atm.latlon_labels(latval+d, 'lat', '%.1f', deg_symbol=False) lonstr = atm.latlon_labels(lonval+d, 'lon', '%.1f', deg_symbol=False) titlestr = '%s %s (%s, %s)' % (titlestr, loc_nm, latstr, lonstr) pcp = precip[:, ilat0, ilon0] pcp_sm, Rsq = atm.fourier_smooth(pcp, kmax) pcp_ann, Rsq_ann = atm.fourier_smooth(pcp, kann) i_onset, i_retreat, i_peak = onset_WLH_1D(pcp_sm, threshold, onset_min) plot_single_WLH(pcp, pcp_sm, pcp_ann, Rsq, Rsq_ann, i_onset, i_retreat, i_peak, kmax, kann, titlestr) return pcp, pcp_sm, pcp_ann, Rsq, Rsq_ann, i_onset, i_retreat, i_peak