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) 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:
if filename != None: plt.savefig(filename) else: plt.show() g = DataField() g.load('tg_0.25deg_reg_v9.0.nc', 'tg') means = True daily = False if means: idx = 0 y = 1950 while idx < g.data.shape[0]: idx2 = g.find_date_ndx(date(y, 1, 1)) render_geo_field(g.data[idx:idx2, ...], g.lats, g.lons, None, None, False, 'Yearly mean temperature %s' % str(y), 'temperature [$^{\circ}C$]', 'imgs/temp_mean%s.png' % str(y)) y += 1 idx = idx2 if daily: idx = g.find_date_ndx(date(2012, 1, 1)) for i in range(idx, idx + 59): render_geo_field(g.data[i, ...], g.lats, g.lons, None, None, False, 'Temperature %s' % str(date.fromordinal(g.time[i])), 'temperature [$^{\circ}C$]', 'imgs/temp%s.png' % str(i + 1))
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) 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:
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,
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) phase = phase[0, idx[0] : idx[1]]
plt.title(title) cbar = plt.colorbar(format = r"%2.2f", shrink = 0.75, ticks = np.arange(mi, ma + step, (ma-mi)/8), aspect = 25, drawedges = False) cbar.set_label(cbar_label) cbar_obj = plt.getp(cbar.ax.axes, 'yticklabels') plt.setp(cbar_obj, fontsize = 10, color = (.1, .1, .1)) if filename != None: plt.savefig(filename) else: plt.show() g = DataField() g.load('tg_0.25deg_reg_v9.0.nc', 'tg') means = True daily = False if means: idx = 0 y = 1950 while idx < g.data.shape[0]: idx2 = g.find_date_ndx(date(y,1,1)) render_geo_field(g.data[idx:idx2, ...], g.lats, g.lons, None, None, False, 'Yearly mean temperature %s' % str(y), 'temperature [$^{\circ}C$]', 'imgs/temp_mean%s.png' % str(y)) y += 1 idx = idx2 if daily: idx = g.find_date_ndx(date(2012,1,1)) for i in range(idx,idx+59): render_geo_field(g.data[i, ...], g.lats, g.lons, None, None, False, 'Temperature %s' % str(date.fromordinal(g.time[i])), 'temperature [$^{\circ}C$]', 'imgs/temp%s.png' % str(i+1))