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)
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()
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
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),
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
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)