Пример #1
0
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
Пример #2
0
    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,
Пример #3
0
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))
Пример #4
0
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)
Пример #5
0
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)
Пример #6
0
 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)
Пример #7
0
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)
Пример #8
0
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)