def test_wavelets_multicore(self): from ptsa.data.filters import MorletWaveletFilterCpp print 'hello' print sys.path wf_cpp_multi = MorletWaveletFilterCpp(time_series=self.base_eegs, freqs=np.logspace(np.log10(3), np.log10(180), 8), output='both', cpus=8 ) pow_wavelet_multi, phase_wavelet_multi = wf_cpp_multi.filter() wf_cpp = MorletWaveletFilterCpp(time_series=self.base_eegs, freqs=np.logspace(np.log10(3), np.log10(180), 8), output='both', cpus=1 ) pow_wavelet, phase_wavelet= wf_cpp.filter() assert_array_equal(pow_wavelet_multi,pow_wavelet) assert_array_equal(phase_wavelet_multi,phase_wavelet)
def compute_log_power(data, frequencies=np.logspace(np.log10(3), np.log10(180), 8), epsilon=1.0e-4, buffer=2.0): wf = MorletWaveletFilterCpp(time_series=data.T, freqs=frequencies, output='power', cpus=25) pow_wavelet, phase_wavelet = wf.filter() pow_wavelet = pow_wavelet.remove_buffer(duration=buffer) pow_wavelet = np.log10(pow_wavelet + epsilon) pow_wavelet_avg = pow_wavelet.mean(axis=2) return pow_wavelet_avg
def test_wavelets_multicore(self): from ptsa.data.filters import MorletWaveletFilterCpp print('hello') print(sys.path) wf_cpp_multi = MorletWaveletFilterCpp(time_series=self.base_eegs, freqs=np.logspace( np.log10(3), np.log10(180), 8), output='both', cpus=8) pow_wavelet_multi, phase_wavelet_multi = wf_cpp_multi.filter() wf_cpp = MorletWaveletFilterCpp(time_series=self.base_eegs, freqs=np.logspace( np.log10(3), np.log10(180), 8), output='both', cpus=1) pow_wavelet, phase_wavelet = wf_cpp.filter() assert_array_equal(pow_wavelet_multi, pow_wavelet) assert_array_equal(phase_wavelet_multi, phase_wavelet)
def test_wavelets_python_cpp(self): from ptsa.data.filters import MorletWaveletFilterCpp print('hello') wf = MorletWaveletFilter( time_series=self.base_eegs, freqs=np.logspace(np.log10(3), np.log10(180), 8), output='power', ) pow_wavelet, phase_wavelet = wf.filter() wf_cpp = MorletWaveletFilterCpp(time_series=self.base_eegs, freqs=np.logspace( np.log10(3), np.log10(180), 8), output='power', cpus=4) pow_wavelet_cpp, phase_wavelet_cpp = wf_cpp.filter() decimal = 2 freq_num = 0 from scipy.stats import describe desc_cpp = describe(pow_wavelet_cpp[freq_num, :, :, 500:-500]) desc_py = describe(pow_wavelet[freq_num, :, :, 500:-500]) try: assert_array_almost_equal( (pow_wavelet_cpp[freq_num, :, :, 500:-500] - pow_wavelet[freq_num, :, :, 500:-500]) / pow_wavelet_cpp[freq_num, :, :, 500:-500], np.zeros_like(pow_wavelet_cpp[freq_num, :, :, 500:-500]), decimal=decimal) except AssertionError: print( 'WARNING: Cpp and Python wavelets are not within 1%. Will try weaker test ' ) mean_min = np.min((desc_cpp.mean - desc_py.mean) / desc_cpp.mean) mean_max = np.max((desc_cpp.mean - desc_py.mean) / desc_cpp.mean) print('mean_max=', mean_max) print('mean_min=', mean_min) self.assertTrue(np.abs(mean_max) < 0.05) self.assertTrue(np.abs(mean_min) < 0.05)
def test_wavelets_python_cpp(self): from ptsa.data.filters import MorletWaveletFilterCpp print('hello') wf = MorletWaveletFilter(time_series=self.base_eegs, freqs=np.logspace(np.log10(3), np.log10(180), 8), output='power', ) pow_wavelet, phase_wavelet = wf.filter() wf_cpp = MorletWaveletFilterCpp(time_series=self.base_eegs, freqs=np.logspace(np.log10(3), np.log10(180), 8), output='power', cpus=4 ) pow_wavelet_cpp, phase_wavelet_cpp = wf_cpp.filter() decimal = 2 freq_num=0 from scipy.stats import describe desc_cpp = describe(pow_wavelet_cpp[freq_num,:,:,500:-500]) desc_py = describe(pow_wavelet[freq_num,:,:,500:-500]) try: assert_array_almost_equal( (pow_wavelet_cpp[freq_num,:,:,500:-500]-pow_wavelet[freq_num,:,:,500:-500])/pow_wavelet_cpp[freq_num,:,:,500:-500], np.zeros_like(pow_wavelet_cpp[freq_num,:,:,500:-500]), decimal=decimal) except AssertionError: print('WARNING: Cpp and Python wavelets are not within 1%. Will try weaker test ') mean_min = np.min((desc_cpp.mean-desc_py.mean)/desc_cpp.mean) mean_max = np.max((desc_cpp.mean-desc_py.mean)/desc_cpp.mean) print('mean_max=',mean_max) print('mean_min=',mean_min) self.assertTrue(np.abs(mean_max)<0.05) self.assertTrue(np.abs(mean_min)<0.05)