Exemplo n.º 1
0
 if NUM_SURR != 0:
     surr_completed = 0
     diffs = np.zeros((NUM_SURR, ))
     mean_vars = np.zeros_like(diffs)
     g_surrs.data = g.data[start_idx:end_idx].copy()
     g_surrs.time = g.time[start_idx:end_idx].copy()
     if np.all(np.isnan(g_surrs.data) == False):
         # construct the job queue
         jobQ = Queue()
         resQ = Queue()
         for i in range(NUM_SURR):
             jobQ.put(1)
         for i in range(WORKERS):
             jobQ.put(None)
         a = g_surrs.get_seasonality(DETREND=True)
         sg = SurrogateField()
         sg.copy_field(g_surrs)
         if SURR_TYPE == 'AR':
             sg.prepare_AR_surrogates()
         workers = [
             Process(target=_cond_difference_surrogates,
                     args=(sg, g_surrs, a, start_cut, jobQ, resQ))
             for iota in range(WORKERS)
         ]
         for w in workers:
             w.start()
         while surr_completed < NUM_SURR:
             # get result
             diff, meanVar = resQ.get()
             diffs[surr_completed] = diff
             mean_vars[surr_completed] = meanVar
WINDOW_LENGTH = 16384
WINDOW_SHIFT = 1  # years, delta in the sliding window analysis
MEANS = True  # if True, compute conditional means, if False, compute conditional variance
WORKERS = 16
NUM_SURR = 100  # how many surrs will be used to evaluate
SURR_TYPE = 'AR'  # MF, FT, AR
diff_ax = (0, 2)  # means -> 0, 2, var -> 1, 8
mean_ax = (18, 22)  # means -> -1, 1.5, var -> 9, 18
PLOT_PHASE = False
PHASE_ANALYSIS_YEAR = None  # year of detailed analysis - phase and bins, or None
AMPLITUDE = True

## loading data
g = load_station_data('TG_STAID000027.txt', date(1834, 7, 28),
                      date(2014, 1, 1), ANOMALISE)
sg = SurrogateField()
if AMPLITUDE:
    g_amp = load_station_data('TG_STAID000027.txt', date(1834, 7, 28),
                              date(2014, 1, 1), False)
    sg_amp = SurrogateField()

print(
    "[%s] Wavelet analysis in progress with %d year window shifted by %d year(s)..."
    % (str(datetime.now()), WINDOW_LENGTH, WINDOW_SHIFT))
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

cond_means = np.zeros((8, ))
Exemplo n.º 3
0
            if MEANS:
                cond_means[iota] = np.mean(g.data[ndx])
            else:
                cond_means[iota] = np.var(g.data[ndx], ddof=1)
        difference[i, j] = cond_means.max() - cond_means.min(
        )  # append difference to list
        mean_var[i, j] = np.mean(cond_means)

print(
    "[%s] Wavelet analysis done. Now computing wavelet for MF surrogates in parallel..."
    % str(datetime.now()))
surrogates_difference = np.zeros([num_surr] + list(difference.shape))
surrogates_mean_var = np.zeros_like(surrogates_difference)
surr_completed = 0

sg = SurrogateField()
sg.copy_field(g)
mean, var, trend = g.get_seasonality(DETREND=True)


def _cond_difference_surrogates(sg, jobq, resq):
    while jobq.get() is not None:
        difference = np.zeros((sg.lats.shape[0], sg.lons.shape[0]))
        mean_var = np.zeros_like(difference)
        sg.construct_multifractal_surrogates()
        sg.add_seasonality(mean, var, trend)
        for i in range(sg.lats.shape[0]):
            for j in range(sg.lons.shape[0]):
                wave, _, _, _ = wavelet_analysis.continous_wavelet(
                    sg.surr_data[:, i, j],
                    1,
Exemplo n.º 4
0
        plt.savefig(fname)
    else:
        plt.show()


cond_means_surr = np.zeros((NUM_SURR, BINS))
surr_mom = []

mean, var, trend = g.get_seasonality(True)
if AMPLITUDE:
    mean2, var2, trend2 = g_amp.get_seasonality(True)
su = 0
tot = 0
while su < NUM_SURR:
    if AMPLITUDE:
        sg_amp = SurrogateField()
        sg_amp.copy_field(g_amp)
    sg = SurrogateField()
    sg.copy_field(g)
    if SURR_TYPE == 'MF':
        if AMPLITUDE:
            sg_amp.construct_multifractal_surrogates()
            sg_amp.add_seasonality(mean2, var2, trend2)
        sg.construct_multifractal_surrogates()
        sg.add_seasonality(mean, var, trend)
    elif SURR_TYPE == 'FT':
        if AMPLITUDE:
            sg_amp.construct_fourier_surrogates_spatial()
            sg_amp.add_seasonality(mean2, var2, trend2)
        sg.construct_fourier_surrogates_spatial()
        sg.add_seasonality(mean, var, trend)
WINDOW_LENGTH = 16384
WINDOW_SHIFT = 1 # years, delta in the sliding window analysis
MEANS = True # if True, compute conditional means, if False, compute conditional variance
WORKERS = 16
NUM_SURR = 100 # how many surrs will be used to evaluate
SURR_TYPE = 'AR' # MF, FT, AR
diff_ax = (0, 2) # means -> 0, 2, var -> 1, 8
mean_ax = (18, 22) # means -> -1, 1.5, var -> 9, 18
PLOT_PHASE = False
PHASE_ANALYSIS_YEAR = None # year of detailed analysis - phase and bins, or None
AMPLITUDE = True


## loading data
g = load_station_data('TG_STAID000027.txt', date(1834,7,28), date(2014,1,1), ANOMALISE)
sg = SurrogateField()
if AMPLITUDE:
    g_amp = load_station_data('TG_STAID000027.txt', date(1834,7,28), date(2014, 1, 1), False)
    sg_amp = SurrogateField()



print("[%s] Wavelet analysis in progress with %d year window shifted by %d year(s)..." % (str(datetime.now()), WINDOW_LENGTH, WINDOW_SHIFT))
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 

cond_means = np.zeros((8,))
Exemplo n.º 6
0
data_diff = cond_means[:, 1].max() - cond_means[:, 1].min()

if SURR:
    cond_means_surr = np.zeros((NUM_SURR, BINS, 2))
    amp_diff_surr = np.zeros((NUM_SURR, ))
    surr_diff_surr = np.zeros((NUM_SURR, ))
    amp_surr = np.zeros((NUM_SURR, ))
    surr_completed = 0
    jobQ = Queue()
    resQ = Queue()
    for i in range(NUM_SURR):
        jobQ.put(1)
    for i in range(WORKERS):
        jobQ.put(None)
    a = g_amp.get_seasonality(True)
    sg = SurrogateField()
    sg.copy_field(g_amp)
    phase_bins = get_equidistant_bins(BINS)
    workers = [
        Process(target=_reconstruction_surrs, args=(sg, a, jobQ, resQ, idx))
        for iota in range(WORKERS)
    ]
    for w in workers:
        w.start()

    while surr_completed < NUM_SURR:
        surr_means = resQ.get()
        cond_means_surr[surr_completed, :, 0] = surr_means[0][:, 0]
        cond_means_surr[surr_completed, :, 1] = surr_means[0][:, 1]
        amp_diff_surr[surr_completed] = surr_means[1]
        surr_diff_surr[surr_completed] = surr_means[2]

if SURR:
    cond_means_surr = np.zeros((NUM_SURR, BINS, 2))
    amp_diff_surr = np.zeros((NUM_SURR,))
    surr_diff_surr = np.zeros((NUM_SURR,))
    amp_surr = np.zeros((NUM_SURR,))
    surr_completed = 0
    jobQ = Queue()
    resQ = Queue()
    for i in range(NUM_SURR):
        jobQ.put(1)
    for i in range(WORKERS):
        jobQ.put(None)
    a = g_amp.get_seasonality(True)
    sg = SurrogateField()
    sg.copy_field(g_amp)
    phase_bins = get_equidistant_bins(BINS)
    workers = [Process(target = _reconstruction_surrs, args = (sg, a, jobQ, resQ, idx)) for iota in range(WORKERS)]
    for w in workers:
        w.start()

    while surr_completed < NUM_SURR:
        surr_means = resQ.get()
        cond_means_surr[surr_completed, :, 0] = surr_means[0][:, 0]
        cond_means_surr[surr_completed, :, 1] = surr_means[0][:, 1]
        amp_diff_surr[surr_completed] = surr_means[1]
        surr_diff_surr[surr_completed] = surr_means[2]
        amp_surr[surr_completed] = surr_means[3]

Exemplo n.º 8
0
            phase_bins = get_equidistant_bins() # equidistant bins
            ndx = ((phase[0,:] >= phase_bins[iota]) & (phase[0,:] <= phase_bins[iota+1]))
            if MEANS:
                cond_means[iota] = np.mean(g.data[ndx])
            else:
                cond_means[iota] = np.var(g.data[ndx], ddof = 1)
        difference[i, j] = cond_means.max() - cond_means.min() # append difference to list    
        mean_var[i, j] = np.mean(cond_means)
        

print("[%s] Wavelet analysis done. Now computing wavelet for MF surrogates in parallel..." % str(datetime.now()))
surrogates_difference = np.zeros([num_surr] + list(difference.shape))
surrogates_mean_var = np.zeros_like(surrogates_difference)
surr_completed = 0

sg = SurrogateField()
sg.copy_field(g)
mean, var, trend = g.get_seasonality(DETREND = True)

def _cond_difference_surrogates(sg, jobq, resq):
    while jobq.get() is not None:
        difference = np.zeros((sg.lats.shape[0], sg.lons.shape[0]))
        mean_var = np.zeros_like(difference)
        sg.construct_multifractal_surrogates()
        sg.add_seasonality(mean, var, trend)
        for i in range(sg.lats.shape[0]):
            for j in range(sg.lons.shape[0]):
                wave, _, _, _ = wavelet_analysis.continous_wavelet(sg.surr_data[:, i, j], 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
                for iota in range(cond_means.shape[0]): # get conditional means for current phase range
                    #phase_bins = get_equiquantal_bins(phase_temp) # equiquantal bins
Exemplo n.º 9
0
 if NUM_SURR != 0:
     surr_completed = 0
     diffs = np.zeros((NUM_SURR,))
     mean_vars = np.zeros_like(diffs)
     g_surrs.data = g.data[start_idx : end_idx].copy()
     g_surrs.time = g.time[start_idx : end_idx].copy()
     if np.all(np.isnan(g_surrs.data) == False):
         # construct the job queue
         jobQ = Queue()
         resQ = Queue()
         for i in range(NUM_SURR):
             jobQ.put(1)
         for i in range(WORKERS):
             jobQ.put(None)
         a = g_surrs.get_seasonality(DETREND = True)
         sg = SurrogateField()
         sg.copy_field(g_surrs)
         if SURR_TYPE == 'AR':
             sg.prepare_AR_surrogates()
         workers = [Process(target = _cond_difference_surrogates, args = (sg, g_surrs, a, start_cut, jobQ, resQ)) for iota in range(WORKERS)]
         for w in workers:
             w.start()
         while surr_completed < NUM_SURR:
             # get result
             diff, meanVar = resQ.get()
             diffs[surr_completed] = diff
             mean_vars[surr_completed] = meanVar
             surr_completed += 1
         for w in workers:
             w.join()
             
Exemplo n.º 10
0
created on May 6, 2014

@author: Nikola Jajcay
"""

from src.oscillatory_time_series import OscillatoryTimeSeries
from src.data_class import DataField
from datetime import date, timedelta
import matplotlib.pyplot as plt
import numpy as np
from surrogates.surrogates import SurrogateField
import calendar


ts = OscillatoryTimeSeries('TG_STAID000027.txt', date(1834,7,28), date(2014,1,1), False)
sg = SurrogateField()
g = DataField()


daily_var = np.zeros((365,3))
mean, var_data, trend = ts.g.get_seasonality(True)
sg.copy_field(ts.g)

#MF
sg.construct_multifractal_surrogates()
sg.add_seasonality(mean, var_data, trend)

g.data = sg.surr_data.copy()
g.time = sg.time.copy()

_, var_surr_MF, _ = g.get_seasonality(True)
Exemplo n.º 11
0
    else:
        plt.show()
    
    
    
cond_means_surr = np.zeros((NUM_SURR, BINS))
surr_mom = []

mean, var, trend = g.get_seasonality(True)
if AMPLITUDE:
    mean2, var2, trend2 = g_amp.get_seasonality(True)
su = 0
tot = 0
while su < NUM_SURR:
    if AMPLITUDE:
        sg_amp = SurrogateField()
        sg_amp.copy_field(g_amp)
    sg = SurrogateField()
    sg.copy_field(g)
    if SURR_TYPE == 'MF':
        if AMPLITUDE:
            sg_amp.construct_multifractal_surrogates()
            sg_amp.add_seasonality(mean2, var2, trend2)
        sg.construct_multifractal_surrogates()
        sg.add_seasonality(mean, var, trend)
    elif SURR_TYPE == 'FT':
        if AMPLITUDE:
            sg_amp.construct_fourier_surrogates_spatial()
            sg_amp.add_seasonality(mean2, var2, trend2)
        sg.construct_fourier_surrogates_spatial()
        sg.add_seasonality(mean, var, trend)
Exemplo n.º 12
0
phase_bins = get_equidistant_bins(BINS)
cond_means = np.zeros((BINS, 2)) # :,0 - SATA, :,1 - SATamp

for i in range(cond_means.shape[0]):
    ndx = ((phase >= phase_bins[i]) & (phase <= phase_bins[i+1]))
    cond_means[i, 1] = np.mean(amplitude[ndx])
    cond_means[i, 0] = np.mean(g_data.data[ndx])

cond_means_surr = np.zeros((NUM_SURR, BINS, 2))

mean, var, trend = g.get_seasonality(True)
mean2, var2, trend2 = g_amp.get_seasonality(True)

for su in range(NUM_SURR):
    sg_amp = SurrogateField()
    sg_amp.copy_field(g_amp)
    sg = SurrogateField()
    sg.copy_field(g)

    # MF
    sg_amp.construct_multifractal_surrogates()
    sg_amp.add_seasonality(mean2, var2, trend2)
    sg.construct_multifractal_surrogates()
    sg.add_seasonality(mean, var, trend)

    # AR
    # sg_amp.prepare_AR_surrogates()
    # sg_amp.construct_surrogates_with_residuals()
    # sg_amp.add_seasonality(mean2[:-1], var2[:-1], trend2[:-1])
    # sg.prepare_AR_surrogates()
Exemplo n.º 13
0
created on May 6, 2014

@author: Nikola Jajcay
"""

from src.oscillatory_time_series import OscillatoryTimeSeries
from src.data_class import DataField
from datetime import date, timedelta
import matplotlib.pyplot as plt
import numpy as np
from surrogates.surrogates import SurrogateField
import calendar

ts = OscillatoryTimeSeries('TG_STAID000027.txt', date(1834, 7, 28),
                           date(2014, 1, 1), False)
sg = SurrogateField()
g = DataField()

daily_var = np.zeros((365, 3))
mean, var_data, trend = ts.g.get_seasonality(True)
sg.copy_field(ts.g)

#MF
sg.construct_multifractal_surrogates()
sg.add_seasonality(mean, var_data, trend)

g.data = sg.surr_data.copy()
g.time = sg.time.copy()

_, var_surr_MF, _ = g.get_seasonality(True)