示例#1
0
def test_spod_low_ram_longtime_mean():
	'''
	spod tests on earthquake data for methodologies.
	'''

	# set longtime mean
	params['mean_type'] = 'longtime'
	params['savefft'] = False

	# SPOD analysis
	SPOD_analysis = SPOD_low_ram(data=X, params=params, data_handler=False, variables=variables)
	spod = SPOD_analysis.fit()

	# Test results
	T_approx = 12.5; 	tol = 1e-10
	freq_found, freq_idx = spod.find_nearest_freq(freq_required=1/T_approx, freq=spod.freq)
	modes_at_freq = spod.get_modes_at_freq(freq_idx=freq_idx)
	assert((np.abs(modes_at_freq[0,1,0,0])   < 8.199535402742477e-05+tol) & \
		   (np.abs(modes_at_freq[0,1,0,0])   > 8.199535402742477e-05-tol))
	assert((np.abs(modes_at_freq[10,3,0,2])  < 0.0007999776319885041+tol) & \
		   (np.abs(modes_at_freq[10,3,0,2])  > 0.0007999776319885041-tol))
	assert((np.abs(modes_at_freq[14,15,0,1]) < 0.0015377277700466196+tol) & \
		   (np.abs(modes_at_freq[14,15,0,1]) > 0.0015377277700466196-tol))
	assert((np.min(np.abs(modes_at_freq))    < 7.408898558077455e-10+tol) & \
		   (np.min(np.abs(modes_at_freq))    > 7.408898558077455e-10-tol))
	assert((np.max(np.abs(modes_at_freq))    < 0.41125867028788443  +tol) & \
		   (np.max(np.abs(modes_at_freq))    > 0.41125867028788443  -tol))
示例#2
0
def test_spod_low_ram_blockwise_mean():
	'''
	spod tests on earthquake data for methodologies.
	'''

	# set blockwise mean
	params['mean_type'] = 'blockwise'
	params['savefft'] = False

	# SPOD analysis
	SPOD_analysis = SPOD_low_ram(data=X, params=params, data_handler=False, variables=variables)
	spod = SPOD_analysis.fit()

	# Test results
	T_approx = 12.5; 	tol = 1e-10
	freq_found, freq_idx = spod.find_nearest_freq(freq_required=1/T_approx, freq=spod.freq)
	modes_at_freq = spod.get_modes_at_freq(freq_idx=freq_idx)
	assert((np.abs(modes_at_freq[0,1,0,0])   < 8.57413617152583e-05 +tol) & \
		   (np.abs(modes_at_freq[0,1,0,0])   > 8.57413617152583e-05 -tol))
	assert((np.abs(modes_at_freq[10,3,0,2])  < 0.0008816145245031309+tol) & \
		   (np.abs(modes_at_freq[10,3,0,2])  > 0.0008816145245031309-tol))
	assert((np.abs(modes_at_freq[14,15,0,1]) < 0.0018284295461606808+tol) & \
		   (np.abs(modes_at_freq[14,15,0,1]) > 0.0018284295461606808-tol))
	assert((np.min(np.abs(modes_at_freq))    < 8.819039169527213e-10+tol) & \
		   (np.min(np.abs(modes_at_freq))    > 8.819039169527213e-10-tol))
	assert((np.max(np.abs(modes_at_freq))    < 0.28627415402845796  +tol) & \
		   (np.max(np.abs(modes_at_freq))    > 0.28627415402845796  -tol))
示例#3
0
def test_basic_spod_low_ram():
    # Let's try the low_ram algorithm
    spod_ram = SPOD_low_ram(p,
                            params=params,
                            data_handler=False,
                            variables=['p'])
    spod_ram.fit()

    # Show results
    T_approx = 10  # approximate period = 10 days (in days)
    freq = spod_ram.freq
    freq_found, freq_idx = spod_ram.find_nearest_freq(freq_required=1 /
                                                      T_approx,
                                                      freq=freq)
    modes_at_freq = spod_ram.get_modes_at_freq(freq_idx=freq_idx)
    tol = 1e-10
    assert((np.abs(modes_at_freq[5,10,0,0]) < 0.010068515759308162  +tol) & \
        (np.abs(modes_at_freq[5,10,0,0]) > 0.010068515759308162  -tol))
    assert((np.abs(modes_at_freq[0,0,0,0])  < 0.01218020815439358   +tol) & \
        (np.abs(modes_at_freq[0,0,0,0])  > 0.01218020815439358   -tol))
    assert((np.max(np.abs(modes_at_freq))   < 0.02991911832816271   +tol) & \
        (np.max(np.abs(modes_at_freq))   > 0.02991911832816271   -tol))

    # clean up results
    try:
        shutil.rmtree(os.path.join(CWD, 'results'))
    except OSError as e:
        print("Error: %s : %s" % (os.path.join(CWD, 'results'), e.strerror))
示例#4
0
def test_spod_low_ram_savefft():
	'''
	spod tests on earthquake data for methodologies.
	'''
	# set blockwise mean
	params['mean_type'] = 'blockwise'
	params['savefft'] = False

	# SPOD analysis
	SPOD_analysis = SPOD_low_ram(data=X, params=params, data_handler=False, variables=variables)
	spod = SPOD_analysis.fit()

	# Test results 1
	T_approx = 12.5; 	tol = 1e-10
	freq_found, freq_idx = spod.find_nearest_freq(freq_required=1/T_approx, freq=spod.freq)
	modes_at_freq = spod.get_modes_at_freq(freq_idx=freq_idx)
	assert((np.abs(modes_at_freq[0,1,0,0])   < 8.57413617152583e-05 +tol) & \
		   (np.abs(modes_at_freq[0,1,0,0])   > 8.57413617152583e-05 -tol))
	assert((np.abs(modes_at_freq[10,3,0,2])  < 0.0008816145245031309+tol) & \
		   (np.abs(modes_at_freq[10,3,0,2])  > 0.0008816145245031309-tol))
	assert((np.abs(modes_at_freq[14,15,0,1]) < 0.0018284295461606808+tol) & \
		   (np.abs(modes_at_freq[14,15,0,1]) > 0.0018284295461606808-tol))
	assert((np.min(np.abs(modes_at_freq))    < 8.819039169527213e-10+tol) & \
		   (np.min(np.abs(modes_at_freq))    > 8.819039169527213e-10-tol))
	assert((np.max(np.abs(modes_at_freq))    < 0.28627415402845796  +tol) & \
		   (np.max(np.abs(modes_at_freq))    > 0.28627415402845796  -tol))

	# SPOD analysis
	params['savefft'] = True
	SPOD_analysis = SPOD_low_ram(data=X, params=params, data_handler=False, variables=variables)
	spod = SPOD_analysis.fit()

	# Test results 2 (after loading blocks from storage)
	T_approx = 12.5; 	tol = 1e-10
	freq_found, freq_idx = spod.find_nearest_freq(freq_required=1/T_approx, freq=spod.freq)
	modes_at_freq = spod.get_modes_at_freq(freq_idx=freq_idx)
	assert((np.abs(modes_at_freq[0,1,0,0])   < 8.57413617152583e-05 +tol) & \
		   (np.abs(modes_at_freq[0,1,0,0])   > 8.57413617152583e-05 -tol))
	assert((np.abs(modes_at_freq[10,3,0,2])  < 0.0008816145245031309+tol) & \
		   (np.abs(modes_at_freq[10,3,0,2])  > 0.0008816145245031309-tol))
	assert((np.abs(modes_at_freq[14,15,0,1]) < 0.0018284295461606808+tol) & \
		   (np.abs(modes_at_freq[14,15,0,1]) > 0.0018284295461606808-tol))
	assert((np.min(np.abs(modes_at_freq))    < 8.819039169527213e-10+tol) & \
		   (np.min(np.abs(modes_at_freq))    > 8.819039169527213e-10-tol))
	assert((np.max(np.abs(modes_at_freq))    < 0.28627415402845796  +tol) & \
		   (np.max(np.abs(modes_at_freq))    > 0.28627415402845796  -tol))

	# clean up results
	try:
		shutil.rmtree(os.path.join(CWD,'results'))
	except OSError as e:
		print("Error: %s : %s" % (os.path.join(CWD,'results'), e.strerror))
示例#5
0
freq_found, freq_idx = spod_ls.find_nearest_freq(freq_required=1 / T_approx,
                                                 freq=freq)
modes_at_freq = spod_ls.get_modes_at_freq(freq_idx=freq_idx)
spod_ls.plot_eigs()
spod_ls.plot_eigs_vs_frequency(freq=freq)
spod_ls.plot_eigs_vs_period(freq=freq, xticks=[1, 7, 30, 365, 1825])
spod_ls.plot_2D_modes_at_frequency(freq_required=freq_found,
                                   freq=freq,
                                   x1=x2,
                                   x2=x1,
                                   modes_idx=[0, 1],
                                   vars_idx=[0])

# Let's try the low_ram algorithm
spod_ram = SPOD_low_ram(data=os.path.join(CWD, 'data.nc'),
                        params=params,
                        data_handler=read_data_netCDF,
                        variables=variables)
spod_ram.fit()

# Show results
T_approx = 10  # approximate period = 10 days (in days)
freq = spod_ram.freq
freq_found, freq_idx = spod_ram.find_nearest_freq(freq_required=1 / T_approx,
                                                  freq=freq)
modes_at_freq = spod_ram.get_modes_at_freq(freq_idx=freq_idx)
spod_ram.plot_eigs()
spod_ram.plot_eigs_vs_frequency(freq=freq)
spod_ram.plot_eigs_vs_period(freq=freq, xticks=[1, 7, 30, 365, 1825])
spod_ram.plot_2D_modes_at_frequency(freq_required=freq_found,
                                    freq=freq,
                                    x1=x2,
示例#6
0
    'savefft'] = False  # save FFT blocks to reuse them in the future (saves time)
params['savedir'] = os.path.join(
    CWD, 'results',
    Path(file).stem)  # folder where to save results

# Set weights
weights = utils_weights.geo_trapz_3D(x1_dim=x2.shape[0],
                                     x2_dim=x1.shape[0],
                                     x3_dim=x3.shape[0],
                                     n_vars=len(variables),
                                     R=1)

# Perform SPOD analysis using low storage module
SPOD_analysis = SPOD_low_ram(data=X,
                             params=params,
                             data_handler=False,
                             variables=variables,
                             weights=weights)

# Fit SPOD
spod = SPOD_analysis.fit()

# Show results
T_approx = 744  # approximate period (in days)
freq_found, freq_idx = spod.find_nearest_freq(freq_required=1 / T_approx,
                                              freq=spod.freq)
modes_at_freq = spod.get_modes_at_freq(freq_idx=freq_idx)

freq = spod.freq * 24
spod.plot_eigs()
spod.plot_eigs_vs_frequency(freq=freq)
示例#7
0
params[
    'savefft'] = True  # save FFT blocks to reuse them in the future (saves time)
params['savedir'] = os.path.join(
    CWD, 'results',
    Path(file).stem)  # folder where to save results

# Set weights
weights = utils_weights.geo_trapz_2D(x1_dim=x2.shape[0],
                                     x2_dim=x1.shape[0],
                                     n_vars=len(variables),
                                     R=1)

# Perform SPOD analysis using low storage module
SPOD_analysis = SPOD_low_ram(data=ds,
                             params=params,
                             data_handler=read_data,
                             variables=variables,
                             weights=weights)

# Fit SPOD
spod = SPOD_analysis.fit()

# Show results
T_approx = 4 * 10  # approximate period = 10 days (in days)
freq = spod.freq * 4  # (in days)
freq_found, freq_idx = spod.find_nearest_freq(freq_required=1 / T_approx,
                                              freq=spod.freq)
modes_at_freq = spod.get_modes_at_freq(freq_idx=freq_idx)
spod.plot_eigs()
spod.plot_eigs_vs_frequency(freq=freq)
spod.plot_eigs_vs_period(freq=freq, xticks=[1, 7, 30, 365, 1825])
示例#8
0
freq_found, freq_idx = spod_ls.find_nearest_freq(freq_required=1/T_approx, freq=freq)
modes_at_freq = spod_ls.get_modes_at_freq(freq_idx=freq_idx)
spod_ls.plot_eigs()
spod_ls.plot_eigs_vs_frequency(freq=freq)
spod_ls.plot_eigs_vs_period   (freq=freq, xticks=[1, 7, 30, 365, 1825])
spod_ls.plot_2D_modes_at_frequency(
	freq_required=freq_found,
    freq=freq,
    x1=x2,
    x2=x1,
    modes_idx=[0,1],
    vars_idx=[0])


# Let's try the low_ram algorithm
spod_ram = SPOD_low_ram(p, params=params, data_handler=False, variables=['p'])
spod_ram.fit()

# Show results
T_approx = 10 # approximate period = 10 days (in days)
freq = spod_ram.freq
freq_found, freq_idx = spod_ram.find_nearest_freq(freq_required=1/T_approx, freq=freq)
modes_at_freq = spod_ram.get_modes_at_freq(freq_idx=freq_idx)
spod_ram.plot_eigs()
spod_ram.plot_eigs_vs_frequency(freq=freq)
spod_ram.plot_eigs_vs_period   (freq=freq, xticks=[1, 7, 30, 365, 1825])
spod_ram.plot_2D_modes_at_frequency(
	freq_required=freq_found,
    freq=freq,
    x1=x2,
    x2=x1,