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