def test_source_psd(method, pick_ori): """Test source PSD computation from raw.""" raw = read_raw_fif(fname_data) raw.crop(0, 5).load_data() inverse_operator = read_inverse_operator(fname_inv) fmin, fmax = 40, 65 # Hz n_fft = 512 assert inverse_operator['source_ori'] == FIFF.FIFFV_MNE_FREE_ORI stc, ev = compute_source_psd(raw, inverse_operator, lambda2=1. / 9., method=method, fmin=fmin, fmax=fmax, pick_ori=pick_ori, n_fft=n_fft, overlap=0., return_sensor=True, dB=True) assert ev.data.shape == (len(ev.info['ch_names']), len(stc.times)) assert ev.times[0] >= fmin assert ev.times[-1] <= fmax # Time max at line frequency (60 Hz in US) assert 58 <= ev.times[np.argmax(np.sum(ev.data, axis=0))] <= 61 assert ev.nave == 2 assert stc.shape[0] == inverse_operator['nsource'] assert stc.times[0] >= fmin assert stc.times[-1] <= fmax assert 58 <= stc.times[np.argmax(np.sum(stc.data, axis=0))] <= 61 if method in ('sLORETA', 'dSPM'): stc_dspm = stc stc_mne, _ = compute_source_psd(raw, inverse_operator, lambda2=1. / 9., method='MNE', fmin=fmin, fmax=fmax, pick_ori=pick_ori, n_fft=n_fft, overlap=0., return_sensor=True, dB=True) # normalize each source point by its power after undoing the dB stc_dspm.data = 10**(stc_dspm.data / 10.) stc_dspm /= stc_dspm.mean() stc_mne.data = 10**(stc_mne.data / 10.) stc_mne /= stc_mne.mean() assert_allclose(stc_dspm.data, stc_mne.data, atol=1e-4)
def test_source_psd(): """Test source PSD computation in label.""" raw = read_raw_fif(fname_data) inverse_operator = read_inverse_operator(fname_inv) tmin, tmax = 0, 20 # seconds fmin, fmax = 55, 65 # Hz n_fft = 2048 assert_equal(inverse_operator['source_ori'], FIFF.FIFFV_MNE_FREE_ORI) for pick_ori in ('normal', None): stc = compute_source_psd(raw, inverse_operator, lambda2=1. / 9., method="dSPM", tmin=tmin, tmax=tmax, fmin=fmin, fmax=fmax, pick_ori=pick_ori, n_fft=n_fft, overlap=0.1) assert_equal(stc.shape[0], inverse_operator['nsource']) assert_true(stc.times[0] >= fmin * 1e-3) assert_true(stc.times[-1] <= fmax * 1e-3) # Time max at line frequency (60 Hz in US) assert_true( 58e-3 <= stc.times[np.argmax(np.sum(stc.data, axis=0))] <= 61e-3)
def test_source_psd(): """Test source PSD computation in label""" raw = io.Raw(fname_data) inverse_operator = read_inverse_operator(fname_inv) label = read_label(fname_label) tmin, tmax = 0, 20 # seconds fmin, fmax = 55, 65 # Hz n_fft = 2048 stc = compute_source_psd(raw, inverse_operator, lambda2=1. / 9., method="dSPM", tmin=tmin, tmax=tmax, fmin=fmin, fmax=fmax, pick_ori="normal", n_fft=n_fft, label=label, overlap=0.1) assert_true(stc.times[0] >= fmin * 1e-3) assert_true(stc.times[-1] <= fmax * 1e-3) # Time max at line frequency (60 Hz in US) assert_true( 59e-3 <= stc.times[np.argmax(np.sum(stc.data, axis=0))] <= 61e-3)
def test_source_psd(): """Test source PSD computation in label.""" raw = read_raw_fif(fname_data) inverse_operator = read_inverse_operator(fname_inv) label = read_label(fname_label) tmin, tmax = 0, 20 # seconds fmin, fmax = 55, 65 # Hz n_fft = 2048 stc = compute_source_psd(raw, inverse_operator, lambda2=1. / 9., method="dSPM", tmin=tmin, tmax=tmax, fmin=fmin, fmax=fmax, pick_ori="normal", n_fft=n_fft, label=label, overlap=0.1) assert_true(stc.times[0] >= fmin * 1e-3) assert_true(stc.times[-1] <= fmax * 1e-3) # Time max at line frequency (60 Hz in US) assert_true(59e-3 <= stc.times[np.argmax(np.sum(stc.data, axis=0))] <= 61e-3)
def test_source_psd(): """Test source PSD computation in label.""" raw = read_raw_fif(fname_data) inverse_operator = read_inverse_operator(fname_inv) tmin, tmax = 0, 20 # seconds fmin, fmax = 55, 65 # Hz n_fft = 2048 assert_equal(inverse_operator['source_ori'], FIFF.FIFFV_MNE_FREE_ORI) for pick_ori in ('normal', None): stc = compute_source_psd(raw, inverse_operator, lambda2=1. / 9., method="dSPM", tmin=tmin, tmax=tmax, fmin=fmin, fmax=fmax, pick_ori=pick_ori, n_fft=n_fft, overlap=0.1) assert_equal(stc.shape[0], inverse_operator['nsource']) assert stc.times[0] >= fmin * 1e-3 assert stc.times[-1] <= fmax * 1e-3 # Time max at line frequency (60 Hz in US) assert 58e-3 <= stc.times[np.argmax(np.sum(stc.data, axis=0))] <= 61e-3
def test_source_psd(): """Test source PSD computation from raw.""" raw = read_raw_fif(fname_data) raw.crop(0, 5).load_data() inverse_operator = read_inverse_operator(fname_inv) fmin, fmax = 40, 65 # Hz n_fft = 512 assert inverse_operator['source_ori'] == FIFF.FIFFV_MNE_FREE_ORI stcs = list() for pick_ori, method in zip((None, 'normal', 'normal'), ('dSPM', 'dSPM', 'MNE')): stc, ev = compute_source_psd( raw, inverse_operator, lambda2=1. / 9., method=method, fmin=fmin, fmax=fmax, pick_ori=pick_ori, n_fft=n_fft, overlap=0., return_sensor=True, dB=True) assert ev.data.shape == (len(ev.info['ch_names']), len(stc.times)) assert ev.times[0] >= fmin assert ev.times[-1] <= fmax # Time max at line frequency (60 Hz in US) assert 58 <= ev.times[np.argmax(np.sum(ev.data, axis=0))] <= 61 assert ev.nave == 2 assert stc.shape[0] == inverse_operator['nsource'] assert stc.times[0] >= fmin assert stc.times[-1] <= fmax assert 58 <= stc.times[np.argmax(np.sum(stc.data, axis=0))] <= 61 stcs.append(stc) stc_dspm = stcs[-2] stc_mne = stcs[-1] # normalize each source point by its power after undoing the dB stc_dspm.data = 10 ** (stc_dspm.data / 10.) stc_dspm /= stc_dspm.mean() stc_mne.data = 10 ** (stc_mne.data / 10.) stc_mne /= stc_mne.mean() assert_allclose(stc_dspm.data, stc_mne.data, atol=1e-4)