Ejemplo n.º 1
0

def get_equidistant_bins(bins = 8):
    return np.array(np.linspace(-np.pi, np.pi, bins+1))

mons = {1: 'J', 2: 'F', 3: 'M', 4: 'A', 5: 'M', 6: 'J', 7: 'J', 8: 'A', 9: 'S', 10: 'O', 11: 'N', 12: 'D'}

NUM_SURRS = 10000
WINDOW_LENGTH = 36 # years
# SEASON = [12,1,2]
SEASON = None
# param_window = 32 # years

for SEASON in [[12, 1, 2], [3,4,5], [6,7,8], [9,10,11]]:

    g = load_ECA_D_data_daily('../data/ECAD.tg.daily.0.50deg.nc', 'tg', date(1950,1,1), date(2016,8,31), 
                                  [35, 75], [-20, 50], False)
    g.get_monthly_data()

    pool = Pool(5)
    bins = get_equidistant_bins()

    g.wavelet(1, 'y', cut = 1, cut_time = False, cut_data = False, regress_amp_to_data = True, pool = pool)
    annual_amp = g.amplitude.copy()
    annual_phase = g.phase.copy()

    g.anomalise()
    g.wavelet(8, 'y', cut = 1, cut_time = False, cut_data = False, regress_amp_to_data = True, continuous_phase = False, 
        pool = pool)
    amplitude = g.amplitude.copy()
    g.wavelet(8, 'y', cut = 1, cut_time = True, cut_data = True, regress_amp_to_data = False, continuous_phase = False, 
        pool = pool)
Ejemplo n.º 2
0
    9: 'S',
    10: 'O',
    11: 'N',
    12: 'D'
}

NUM_SURRS = 10000
WINDOW_LENGTH = 36  # years
# SEASON = [12,1,2]
SEASON = None
# param_window = 32 # years

for SEASON in [[12, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11]]:

    g = load_ECA_D_data_daily('../data/ECAD.tg.daily.0.50deg.nc', 'tg',
                              date(1950, 1, 1), date(2016, 8, 31), [35, 75],
                              [-20, 50], False)
    g.get_monthly_data()

    pool = Pool(5)
    bins = get_equidistant_bins()

    g.wavelet(1,
              'y',
              cut=1,
              cut_time=False,
              cut_data=False,
              regress_amp_to_data=True,
              pool=pool)
    annual_amp = g.amplitude.copy()
    annual_phase = g.phase.copy()
Ejemplo n.º 3
0
            h_ex[iota] = np.sum(g_e)

            l_e = np.less_equal(sat_temp, np.mean(sat) - 2 * sig)
            c_ex[iota] = np.sum(l_e)

    return i, j, h_ex, c_ex


PERIOD = 8
START_DATE = date(1958, 1, 1)
WORKERS = 16
SAVE = False

if SAVE:
    g = load_ECA_D_data_daily('tg_0.25deg_reg_v10.0.nc', 'tg',
                              date(1950, 1, 1), date(2014, 1,
                                                     1), None, None, False)

    tg_sat = g.copy_data()
    g.anomalise()

    idx = g.get_data_of_precise_length('16k', START_DATE, None, True)
    END_DATE = g.get_date_from_ndx(-1)
    tg_sat = tg_sat[idx[0]:idx[1], ...]

    print("[%s] Running wavelet analysis using %d workers..." %
          (str(datetime.now()), WORKERS))
    k0 = 6.  # wavenumber of Morlet wavelet used in analysis
    y = 365.25  # year in days
    fourier_factor = (4 * np.pi) / (k0 + np.sqrt(2 + np.power(k0, 2)))
    period = PERIOD * y  # frequency of interest
Ejemplo n.º 4
0
def log(msg):
    if LOG:
        log_file.write('[%s] %s\n' % (str(datetime.now()), msg))
        log_file.flush()
    else:
        print("[%s] %s" % (str(datetime.now()), msg))


## load and prepare data
# ECA&D
if ECA:
    g = load_ECA_D_data_daily('../data/tg_0.25deg_reg_v10.0.nc',
                              'tg',
                              date(1950, 1, 1),
                              date(2014, 1, 1),
                              LATS,
                              LONS,
                              False,
                              logger_function=log)
    if AMPLITUDE:
        log("Evaluating amplitude of the yearly cycle instead of total SAT(A) variability..."
            )
        g_amp = g.copy_data()
        log("SAT data copied...")

# ERA-40 + ERA-Interim
else:
    g = load_ERA_data_daily('ERA40_EU',
                            't2m',
                            date(1958, 1, 1),
                            date(2004, 1, 1),
Ejemplo n.º 5
0
            
            l_e = np.less_equal(sat_temp, np.mean(sat) - 2 * sig)
            c_ex[iota] = np.sum(l_e)
            
    return i, j, h_ex, c_ex
    
  

PERIOD = 8
START_DATE = date(1958,1,1)  
WORKERS = 16
SAVE = False
    

if SAVE:    
    g = load_ECA_D_data_daily('tg_0.25deg_reg_v10.0.nc', 'tg', date(1950,1,1), date(2014,1,1), 
                              None, None, False)
                              
    tg_sat = g.copy_data()
    g.anomalise()

    idx = g.get_data_of_precise_length('16k', START_DATE, None, True)
    END_DATE = g.get_date_from_ndx(-1)
    tg_sat = tg_sat[idx[0]:idx[1], ...]

    print("[%s] Running wavelet analysis using %d workers..." % (str(datetime.now()), WORKERS))
    k0 = 6. # wavenumber of Morlet wavelet used in analysis
    y = 365.25 # year in days
    fourier_factor = (4 * np.pi) / (k0 + np.sqrt(2 + np.power(k0,2)))
    period = PERIOD * y # frequency of interest
    s0 = period / fourier_factor # get scale
Ejemplo n.º 6
0
if LOG and ECA:
    log_file = open('result/ECA-D_%s_cond_mean_var_%s.log' % ('SATA' if ANOMALISE else 'SAT', datetime.now().strftime('%Y%m%d-%H%M')), 'w')
elif LOG and not ECA:
    log_file = open('result/ERA_%s_cond_mean_var_%s.log' % ('SATA' if ANOMALISE else 'SAT', datetime.now().strftime('%Y%m%d-%H%M')), 'w')

def log(msg):
    if LOG:
        log_file.write('[%s] %s\n' % (str(datetime.now()), msg))
        log_file.flush()
    else:
        print("[%s] %s" % (str(datetime.now()), msg))

## load and prepare data
# ECA&D
if ECA:
    g = load_ECA_D_data_daily('../data/tg_0.25deg_reg_v10.0.nc', 'tg', date(1950,1,1), date(2014,1,1), 
                                LATS, LONS, False, logger_function = log)
    if AMPLITUDE:
        log("Evaluating amplitude of the yearly cycle instead of total SAT(A) variability...")
        g_amp = g.copy_data()
        log("SAT data copied...")
                            
# ERA-40 + ERA-Interim
else:
    g = load_ERA_data_daily('ERA40_EU', 't2m', date(1958,1,1), date(2004,1,1), LATS, LONS, False, 
                             parts = 3, logger_function = log)
                             
idx = g.get_data_of_precise_length('16k', START_DATE, None, True) # get 2^n data because of MF surrogates
if AMPLITUDE:
    g_amp = g_amp[idx[0] : idx[1], ...]
END_DATE = g.get_date_from_ndx(-1)