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 print 'data ', g.get_date_from_ndx( start_idx), ' - ', g.get_date_from_ndx(end_idx) print 'cut from ', start_cut, ' to ', g_working.get_date_from_ndx(-1) last_mid_year = date.fromordinal(g_working.time[WINDOW_LENGTH / 2]).year phase = phase[0, idx[0]:idx[1]] phase_bins = get_equidistant_bins() # equidistant bins 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 MEANS: cond_means[i] = np.mean(g_working.data[ndx]) else: cond_means[i] = np.var(g_working.data[ndx], ddof=1) difference_data.append(cond_means.max() - cond_means.min()) # append difference to list meanvar_data.append(np.mean(cond_means)) else:
_, _, 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 print 'data ', g.get_date_from_ndx(start_idx), ' - ', g.get_date_from_ndx(end_idx) print 'cut from ', start_cut, ' to ', g_working.get_date_from_ndx(-1) last_mid_year = date.fromordinal(g_working.time[WINDOW_LENGTH/2]).year phase = phase[0, idx[0] : idx[1]] phase_bins = get_equidistant_bins() # equidistant bins 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 MEANS: cond_means[i] = np.mean(g_working.data[ndx]) else: cond_means[i] = np.var(g_working.data[ndx], ddof = 1) difference_data.append(cond_means.max() - cond_means.min()) # append difference to list meanvar_data.append(np.mean(cond_means)) else: difference_data.append(np.nan) meanvar_data.append(np.nan)
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)) phase_amp = phase_amp[0, :] reconstruction = amplitude * np.cos(phase_amp) fit_x = np.vstack([reconstruction, np.ones(reconstruction.shape[0])]).T m, c = np.linalg.lstsq(fit_x, g_working_amp.data)[0] amplitude = m * amplitude + c start_cut = date(start_year + cnt * WINDOW_SHIFT, sm, sd) idx = g_working.get_data_of_precise_length(WINDOW_LENGTH, start_cut, None, True) print "data ", g.get_date_from_ndx(start_idx), " - ", g.get_date_from_ndx(end_idx) print "cut from ", start_cut, " to ", g_working.get_date_from_ndx(-1) # last_mid_year = date.fromordinal(g_working.time[WINDOW_LENGTH/2]).year last_mid_year += 1 print last_mid_year phase = phase[0, idx[0] : idx[1]] 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)
if SEASON == None: cond_means = np.zeros((BINS, 2, 1)) else: cond_means = np.zeros((BINS, 2, 2)) else: cond_means = np.zeros((BINS, 2, 2)) def get_equidistant_bins(num): return np.array(np.linspace(-np.pi, np.pi, num+1)) # start_cut = date(1958,1,1) start_cut = date(1962,1,1) l = 17532 if STATIONS == None: g_data.data, g_data.time, idx = g.get_data_of_precise_length(l, start_cut, None, False) print g_data.get_date_from_ndx(0), g_data.get_date_from_ndx(-1) phase = phase[0, idx[0] : idx[1]] if AMPLITUDE: amplitude = amplitude[idx[0] : idx[1]] 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: