sm = date.fromordinal(g.time[0]).month sd = date.fromordinal(g.time[0]).day start_idx = 0 end_idx = to_wavelet _, _, idx = g.get_data_of_precise_length(WINDOW_LENGTH, date.fromordinal(g.time[4 * y]), None, False) first_mid_year = date.fromordinal(g.time[idx[0] + WINDOW_LENGTH / 2]).year while end_idx < g.data.shape[0]: # data g_working.data = g.data[start_idx:end_idx].copy() g_working.time = g.time[start_idx:end_idx].copy() if np.all(np.isnan(g_working.data) == False): wave, _, _, _ = wavelet_analysis.continous_wavelet( g_working.data, 1, False, wavelet_analysis.morlet, dj=0, s0=s0, j1=0, k0=k0) # perform wavelet phase = np.arctan2(np.imag(wave), np.real(wave)) # get phases from oscillatory modes start_cut = date(start_year + cnt * WINDOW_SHIFT, sm, sd) idx = g_working.get_data_of_precise_length(WINDOW_LENGTH, start_cut, None, True) # 16k or 13462
if USE_SURR: result_temp_surr = np.zeros((NUM_SURR, 8, 2)) for surr in range(NUM_SURR): sg.construct_surrogates_with_residuals() sg.add_seasonality(mean[:-1], var[:-1], trend[:-1]) # so SAT data g.data = sg.surr_data.copy() tg_sat = g.copy_data() g.time = g.time[:-1] g.anomalise() g_temp = DataField() tg_temp = tg_sat.copy() sy = int(MIDDLE_YEAR - (WINDOW_LENGTH / year) / 2) g_temp.data = g.data.copy() g_temp.time = g.time.copy() start = g_temp.find_date_ndx(date(sy - 4, sm, sd)) end = start + 16384 if WINDOW_LENGTH < 16000 else start + 32768 g_temp.data = g_temp.data[start:end] g_temp.time = g_temp.time[start:end] tg_temp = tg_temp[start:end] k0 = 6. # wavenumber of Morlet wavelet used in analysis fourier_factor = (4 * np.pi) / (k0 + np.sqrt(2 + np.power(k0, 2))) period = PERIOD * year # frequency of interest s0 = period / fourier_factor # get scale wave, _, _, _ = wvlt.continous_wavelet(g_temp.data, 1, False, wvlt.morlet,
start_idx = 0 end_idx = to_wavelet _, _, idx = g.get_data_of_precise_length(WINDOW_LENGTH, date.fromordinal(g.time[4 * y]), None, False) first_mid_year = date.fromordinal(g.time[idx[0] + WINDOW_LENGTH / 2]).year last_mid_year = first_mid_year if PLOT_PHASE: phase_total = [] if PLOT_PHASE and not BEGIN: last_day = g.get_date_from_ndx(4 * y) while end_idx < g.data.shape[0]: # data g_working.data = g.data[start_idx:end_idx].copy() g_working.time = g.time[start_idx:end_idx].copy() if AMPLITUDE: g_working_amp.data = g_amp.data[start_idx:end_idx].copy() if np.all(np.isnan(g_working.data) == False): wave, _, _, _ = wavelet_analysis.continous_wavelet( g_working.data, 1, False, wavelet_analysis.morlet, dj=0, s0=s0, j1=0, k0=k0 ) # perform wavelet phase = np.arctan2(np.imag(wave), np.real(wave)) # get phases from oscillatory modes if AMPLITUDE: wave, _, _, _ = wavelet_analysis.continous_wavelet( g_working_amp.data, 1, False, wavelet_analysis.morlet, dj=0, s0=s0_amp, j1=0, k0=k0 ) # perform wavelet amplitude = np.sqrt(np.power(np.real(wave), 2) + np.power(np.imag(wave), 2)) amplitude = amplitude[0, :] phase_amp = np.arctan2(np.imag(wave), np.real(wave))
scaling = [] hw = [] cw = [] if JUST_SCALING: scaling_min = [] scaling_max = [] for i in range(phase_bins.shape[0] - 1): ndx = ((phase >= phase_bins[i]) & (phase <= phase_bins[i + 1])) data_temp = g.data[ndx].copy() #g.data[ndx].copy() time_temp = g.time[ndx].copy() max_temp = g_max.data[ndx].copy() min_temp = g_min.data[ndx].copy() tg_sat_temp = tg_sat[ndx].copy() if not JUST_SCALING: g_temp.time = time_temp.copy() _, m, _ = g_temp.extract_day_month_year() # positive extremes - 2sigma g_e = np.greater_equal(data_temp, np.mean(g.data) + 2 * sigma_max) result[i, 0] = np.sum((m[g_e] == 12) | (m[g_e] <= 2)) # DJF result[i, 1] = np.sum((m[g_e] > 2) & (m[g_e] <= 5)) # MAM result[i, 2] = np.sum((m[g_e] > 5) & (m[g_e] <= 8)) # JJA result[i, 3] = np.sum((m[g_e] > 8) & (m[g_e] <= 11)) # SON # positive extremes - 3sigma g_e = np.greater_equal(data_temp, np.mean(g.data) + 3 * sigma_max) result[i, 4] = np.sum((m[g_e] == 12) | (m[g_e] <= 2)) # DJF result[i, 5] = np.sum((m[g_e] > 2) & (m[g_e] <= 5)) # MAM result[i, 6] = np.sum((m[g_e] > 5) & (m[g_e] <= 8)) # JJA result[i, 7] = np.sum((m[g_e] > 8) & (m[g_e] <= 11)) # SON # negative extremes - 2sigma l_e = np.less_equal(data_temp, np.mean(g.data) - 2 * sigma_min)
ts = OscillatoryTimeSeries('TG_STAID000027.txt', date(1834,7,28), date(2014,1,1), False) sg = SurrogateField() g = DataField() daily_var = np.zeros((365,3)) mean, var_data, trend = ts.g.get_seasonality(True) sg.copy_field(ts.g) #MF sg.construct_multifractal_surrogates() sg.add_seasonality(mean, var_data, trend) g.data = sg.surr_data.copy() g.time = sg.time.copy() _, var_surr_MF, _ = g.get_seasonality(True) #FT sg.construct_fourier_surrogates_spatial() sg.add_seasonality(mean, var_data, trend) g.data = sg.surr_data.copy() g.time = sg.time.copy() _, var_surr_FT, _ = g.get_seasonality(True) delta = timedelta(days = 1) d = date(1895,1,1)
if USE_SURR: result_temp_surr = np.zeros((NUM_SURR, 8,2)) for surr in range(NUM_SURR): sg.construct_surrogates_with_residuals() sg.add_seasonality(mean[:-1], var[:-1], trend[:-1]) # so SAT data g.data = sg.surr_data.copy() tg_sat = g.copy_data() g.time = g.time[:-1] g.anomalise() g_temp = DataField() tg_temp = tg_sat.copy() sy = int(MIDDLE_YEAR - (WINDOW_LENGTH/year)/2) g_temp.data = g.data.copy() g_temp.time = g.time.copy() start = g_temp.find_date_ndx(date(sy - 4, sm, sd)) end = start + 16384 if WINDOW_LENGTH < 16000 else start + 32768 g_temp.data = g_temp.data[start : end] g_temp.time = g_temp.time[start : end] tg_temp = tg_temp[start : end] k0 = 6. # wavenumber of Morlet wavelet used in analysis fourier_factor = (4 * np.pi) / (k0 + np.sqrt(2 + np.power(k0,2))) period = PERIOD * year # frequency of interest s0 = period / fourier_factor # get scale wave, _, _, _ = wvlt.continous_wavelet(g_temp.data, 1, False, wvlt.morlet, dj = 0, s0 = s0, j1 = 0, k0 = k0) # perform wavelet phase = np.arctan2(np.imag(wave), np.real(wave)) # get phases from oscillatory modes idx = g_temp.get_data_of_precise_length(WINDOW_LENGTH, date(sy, sm, sd), None, True)
scaling = [] hw = [] cw = [] if JUST_SCALING: scaling_min = [] scaling_max = [] for i in range(phase_bins.shape[0] - 1): ndx = (phase >= phase_bins[i]) & (phase <= phase_bins[i + 1]) data_temp = g.data[ndx].copy() # g.data[ndx].copy() time_temp = g.time[ndx].copy() max_temp = g_max.data[ndx].copy() min_temp = g_min.data[ndx].copy() tg_sat_temp = tg_sat[ndx].copy() if not JUST_SCALING: g_temp.time = time_temp.copy() _, m, _ = g_temp.extract_day_month_year() # positive extremes - 2sigma g_e = np.greater_equal(data_temp, np.mean(g.data) + 2 * sigma_max) result[i, 0] = np.sum((m[g_e] == 12) | (m[g_e] <= 2)) # DJF result[i, 1] = np.sum((m[g_e] > 2) & (m[g_e] <= 5)) # MAM result[i, 2] = np.sum((m[g_e] > 5) & (m[g_e] <= 8)) # JJA result[i, 3] = np.sum((m[g_e] > 8) & (m[g_e] <= 11)) # SON # positive extremes - 3sigma g_e = np.greater_equal(data_temp, np.mean(g.data) + 3 * sigma_max) result[i, 4] = np.sum((m[g_e] == 12) | (m[g_e] <= 2)) # DJF result[i, 5] = np.sum((m[g_e] > 2) & (m[g_e] <= 5)) # MAM result[i, 6] = np.sum((m[g_e] > 5) & (m[g_e] <= 8)) # JJA result[i, 7] = np.sum((m[g_e] > 8) & (m[g_e] <= 11)) # SON # negative extremes - 2sigma l_e = np.less_equal(data_temp, np.mean(g.data) - 2 * sigma_min)
ts = OscillatoryTimeSeries('TG_STAID000027.txt', date(1834, 7, 28), date(2014, 1, 1), False) sg = SurrogateField() g = DataField() daily_var = np.zeros((365, 3)) mean, var_data, trend = ts.g.get_seasonality(True) sg.copy_field(ts.g) #MF sg.construct_multifractal_surrogates() sg.add_seasonality(mean, var_data, trend) g.data = sg.surr_data.copy() g.time = sg.time.copy() _, var_surr_MF, _ = g.get_seasonality(True) #FT sg.construct_fourier_surrogates_spatial() sg.add_seasonality(mean, var_data, trend) g.data = sg.surr_data.copy() g.time = sg.time.copy() _, var_surr_FT, _ = g.get_seasonality(True) delta = timedelta(days=1) d = date(1895, 1, 1)