if AMPLITUDE: amplitude = amplitude[idx[0]:idx[1]] if PLOT_PHASE and BEGIN: phase_till = date(start_year + (cnt + 1) * WINDOW_SHIFT, sm, sd) ndx = g_working.find_date_ndx(phase_till) if ndx != None and cnt < 125: phase_total.append(phase[:ndx]) else: phase_total.append(phase) if PLOT_PHASE and not BEGIN: ndx = g_working.find_date_ndx(last_day) phase_total.append(phase[ndx:]) last_day = g_working.get_date_from_ndx(-1) # season if SEASON != None: ndx_season = g_working.select_months(SEASON) phase = phase[ndx_season] if AMPLITUDE: amplitude = amplitude[ndx_season] else: ndx_season = None phase_bins = get_equidistant_bins() # equidistant bins # if AMPLITUDE: smooth_amp.append(np.std(g_working.data)) for i in range(cond_means.shape[0] ): # get conditional means for current phase range ndx = ((phase >= phase_bins[i]) & (phase <= phase_bins[i + 1])) if MOMENT == 'std': if AMPLITUDE: cond_means[i] = func(amplitude[ndx], ddof=1) else:
cond_means = np.zeros((BINS, )) def get_equidistant_bins(num): return np.array(np.linspace(-np.pi, np.pi, num + 1)) start_cut = date(1958, 1, 1) g_data.data, g_data.time, idx = g.get_data_of_precise_length( '16k', start_cut, None, False) phase = phase[0, idx[0]:idx[1]] if AMPLITUDE: amplitude = amplitude[idx[0]:idx[1]] # subselect season if EVAL_SEASON: ndx_season = g_data.select_months(season) phase = phase[ndx_season] if AMPLITUDE: amplitude = amplitude[ndx_season] phase_bins = get_equidistant_bins(BINS) # equidistant bins if AMPLITUDE: data_mom = func(amplitude) else: data_mom = func(g_data.data) for i in range(cond_means.shape[0]): ndx = ((phase >= phase_bins[i]) & (phase <= phase_bins[i + 1])) if AMPLITUDE: cond_means[i] = func(amplitude[ndx]) else:
if AMPLITUDE: amplitude = amplitude[idx[0] : idx[1]] if PLOT_PHASE and BEGIN: phase_till = date(start_year + (cnt + 1) * WINDOW_SHIFT, sm, sd) ndx = g_working.find_date_ndx(phase_till) if ndx != None and cnt < 125: phase_total.append(phase[:ndx]) else: phase_total.append(phase) if PLOT_PHASE and not BEGIN: ndx = g_working.find_date_ndx(last_day) phase_total.append(phase[ndx:]) last_day = g_working.get_date_from_ndx(-1) # season if SEASON != None: ndx_season = g_working.select_months(SEASON) phase = phase[ndx_season] if AMPLITUDE: amplitude = amplitude[ndx_season] else: ndx_season = None phase_bins = get_equidistant_bins() # equidistant bins # if AMPLITUDE: smooth_amp.append(np.std(g_working.data)) for i in range(cond_means.shape[0]): # get conditional means for current phase range ndx = (phase >= phase_bins[i]) & (phase <= phase_bins[i + 1]) if MOMENT == "std": if AMPLITUDE: cond_means[i] = func(amplitude[ndx], ddof=1) else: cond_means[i] = func(g_working.data[ndx], ddof=1)
pool = Pool(NUM_WORKERS) net.wavelet(1, 'y', pool = pool, cut = 1) net.get_continuous_phase(pool = pool) net.get_phase_fluctuations(rewrite = True, pool = pool) pool.close() pool.join() nao = DataField() raw = np.loadtxt("%sNAO.station.monthly.1865-2016.txt" % (path_to_data)) raw = raw[:, 1:] nao.data = raw.reshape(-1) nao.create_time_array(date_from = date(1865, 1, 1), sampling = 'm') nao.select_date(date(1949, 1, 1), date(2015, 1, 1)) nao.anomalise() jfm_index = nao.select_months([1,2,3], apply_to_data = False) jfm_nao = nao.data[jfm_index] _, _, y = nao.extract_day_month_year() y = y[jfm_index] ann_nao = [] for year in np.unique(y): ann_nao.append(np.mean(jfm_nao[np.where(year == y)[0]])) ann_nao = np.array(ann_nao) ann_phase_fluc = np.zeros([ann_nao.shape[0]] + list(net.get_spatial_dims())) for lat in range(net.lats.shape[0]): for lon in range(net.lons.shape[0]): jfm_data = net.phase[jfm_index, lat, lon] for i, year in zip(range(np.unique(y).shape[0]), np.unique(y)):
print("Oscillatory series fitted to SAT data with coeff. %.3f and intercept %.3f" % (m, c)) cond_means = np.zeros((BINS,)) def get_equidistant_bins(num): return np.array(np.linspace(-np.pi, np.pi, num+1)) start_cut = date(1958,1,1) g_data.data, g_data.time, idx = g.get_data_of_precise_length('16k', start_cut, None, False) phase = phase[0, idx[0] : idx[1]] if AMPLITUDE: amplitude = amplitude[idx[0] : idx[1]] # subselect season if EVAL_SEASON: ndx_season = g_data.select_months(season) phase = phase[ndx_season] if AMPLITUDE: amplitude = amplitude[ndx_season] phase_bins = get_equidistant_bins(BINS) # equidistant bins if AMPLITUDE: data_mom = func(amplitude) else: data_mom = func(g_data.data) for i in range(cond_means.shape[0]): ndx = ((phase >= phase_bins[i]) & (phase <= phase_bins[i+1])) if AMPLITUDE: cond_means[i] = func(amplitude[ndx]) else:
pool = Pool(NUM_WORKERS) net.wavelet(1, 'y', pool=pool, cut=1) net.get_continuous_phase(pool=pool) net.get_phase_fluctuations(rewrite=True, pool=pool) pool.close() pool.join() nao = DataField() raw = np.loadtxt("%sWeMO.monthly.1821-2013.txt" % (path_to_data)) raw = raw[:, 1:] nao.data = raw.reshape(-1) nao.create_time_array(date_from=date(1821, 1, 1), sampling='m') nao.select_date(date(1949, 1, 1), date(2014, 1, 1)) nao.anomalise() jfm_index = nao.select_months([1, 2, 3], apply_to_data=False) jfm_nao = nao.data[jfm_index] _, _, y = nao.extract_day_month_year() y = y[jfm_index] ann_nao = [] for year in np.unique(y): ann_nao.append(np.mean(jfm_nao[np.where(year == y)[0]])) ann_nao = np.array(ann_nao) ann_phase_fluc = np.zeros([ann_nao.shape[0]] + list(net.get_spatial_dims())) for lat in range(net.lats.shape[0]): for lon in range(net.lons.shape[0]): jfm_data = net.phase[jfm_index, lat, lon] for i, year in zip(range(np.unique(y).shape[0]), np.unique(y)):
else: for i in range(len(STATIONS)): locals()['g_data' + str(i)].data, locals()['g_data' + str(i)].time, idx = locals()['g' + str(i)].get_data_of_precise_length('16k', start_cut, None, False) locals()['phase' + str(i)] = locals()['phase' + str(i)][0, idx[0] : idx[1]] if AMPLITUDE: locals()['amplitude' + str(i)] = locals()['amplitude' + str(i)][idx[0] : idx[1]] phase_bins = get_equidistant_bins(BINS) mons = {0: 'J', 1: 'F', 2: 'M', 3: 'A', 4: 'M', 5: 'J', 6: 'J', 7: 'A', 8: 'S', 9: 'O', 10: 'N', 11: 'D'} if SEASON != None: idx = 0 for se in SEASON: print("[%s] Only %s season will be evaluated.." % (str(datetime.now()), ''.join([mons[m-1] for m in se]))) g_seasons = DataField(data = g_data.copy_data(), time = g_data.time.copy()) phase_seasons = phase.copy() ndx_season = g_seasons.select_months(se) phase_seasons = phase_seasons[ndx_season] if AMPLITUDE: amplitude = amplitude[ndx_season] phase_bins = get_equidistant_bins(BINS) for i in range(cond_means.shape[0]): print se, i ndx = ((phase_seasons >= phase_bins[i]) & (phase_seasons <= phase_bins[i+1])) if AMPLITUDE: cond_means[i, 0, idx] = np.mean(amplitude[ndx]) cond_means[i, 1, idx] = np.std(amplitude[ndx], ddof = 1) else: cond_means[i, 0, idx] = np.mean(g_seasons.data[ndx]) cond_means[i, 1, idx] = np.std(g_seasons.data[ndx], ddof = 1) idx += 1