def test_make_inverse_operator_fixed(): """Test MNE inverse computation (fixed orientation) """ fwd_op = read_forward_solution(fname_fwd, surf_ori=True) fwd_1 = read_forward_solution(fname_fwd, surf_ori=False, force_fixed=False) fwd_2 = read_forward_solution(fname_fwd, surf_ori=False, force_fixed=True) evoked = _get_evoked() noise_cov = read_cov(fname_cov) # can't make depth-weighted fixed inv without surf ori fwd assert_raises(ValueError, make_inverse_operator, evoked.info, fwd_1, noise_cov, depth=0.8, loose=None, fixed=True) # can't make fixed inv with depth weighting without free ori fwd assert_raises(ValueError, make_inverse_operator, evoked.info, fwd_2, noise_cov, depth=0.8, loose=None, fixed=True) # compare to C solution w/fixed inv_op = make_inverse_operator(evoked.info, fwd_op, noise_cov, depth=0.8, loose=None, fixed=True) _compare_io(inv_op) inverse_operator_fixed = read_inverse_operator(fname_inv_fixed) _compare_inverses_approx(inverse_operator_fixed, inv_op, evoked, 2) # Inverse has 306 channels - 4 proj = 302 assert_true(compute_rank_inverse(inverse_operator_fixed) == 302) # now compare to C solution # note that the forward solution must not be surface-oriented # to get equivalency (surf_ori=True changes the normals) inv_op = make_inverse_operator(evoked.info, fwd_2, noise_cov, depth=None, loose=None, fixed=True) inverse_operator_nodepth = read_inverse_operator(fname_inv_nodepth) _compare_inverses_approx(inverse_operator_nodepth, inv_op, evoked, 2) # Inverse has 306 channels - 4 proj = 302 assert_true(compute_rank_inverse(inverse_operator_fixed) == 302)
def test_make_inverse_operator_fixed(self): """Test MNE inverse computation w/ fixed orientation (& no depth weighting) """ # can't make fixed inv without surf ori fwd assert_raises(ValueError, make_inverse_operator, evoked.info, self.fwd_1, noise_cov, depth=0.8, loose=None, fixed=True) # can't make fixed inv with depth weighting without free ori fwd assert_raises(ValueError, make_inverse_operator, evoked.info, self.fwd_2, noise_cov, depth=0.8, loose=None, fixed=True) inv_op = make_inverse_operator(evoked.info, self.fwd_op, noise_cov, depth=0.8, loose=None, fixed=True) _compare_io(inv_op) inverse_operator_fixed = read_inverse_operator(fname_inv_fixed) _compare_inverses_approx(inverse_operator_fixed, inv_op, evoked, 2) # Inverse has 306 channels - 4 proj = 302 assert_true(compute_rank_inverse(inverse_operator_fixed) == 302) # Now without depth weighting, these should be equivalent inv_op = make_inverse_operator(evoked.info, self.fwd_2, noise_cov, depth=None, loose=None, fixed=True) inv_2 = make_inverse_operator(evoked.info, self.fwd_op, noise_cov, depth=None, loose=None, fixed=True) _compare_inverses_approx(inv_op, inv_2, evoked, 2) _compare_io(inv_op) # now compare to C solution inverse_operator_nodepth = read_inverse_operator(fname_inv_nodepth) _compare_inverses_approx(inverse_operator_nodepth, inv_op, evoked, 2) # Inverse has 306 channels - 4 proj = 302 assert_true(compute_rank_inverse(inverse_operator_fixed) == 302)
def test_apply_inverse_operator(): """Test MNE inverse application """ inverse_operator = read_inverse_operator(fname_full) evoked = _get_evoked() # Inverse has 306 channels - 4 proj = 302 assert_true(compute_rank_inverse(inverse_operator) == 302) # Inverse has 306 channels - 4 proj = 302 assert_true(compute_rank_inverse(inverse_operator) == 302) stc = apply_inverse(evoked, inverse_operator, lambda2, "MNE") assert_true(stc.subject == 'sample') assert_true(stc.data.min() > 0) assert_true(stc.data.max() < 10e-9) assert_true(stc.data.mean() > 1e-11) # test if using prepared and not prepared inverse operator give the same # result inv_op = prepare_inverse_operator(inverse_operator, nave=evoked.nave, lambda2=lambda2, method="MNE") stc2 = apply_inverse(evoked, inv_op, lambda2, "MNE") assert_array_almost_equal(stc.data, stc2.data) assert_array_almost_equal(stc.times, stc2.times) stc = apply_inverse(evoked, inverse_operator, lambda2, "sLORETA") assert_true(stc.subject == 'sample') assert_true(stc.data.min() > 0) assert_true(stc.data.max() < 10.0) assert_true(stc.data.mean() > 0.1) stc = apply_inverse(evoked, inverse_operator, lambda2, "dSPM") assert_true(stc.subject == 'sample') assert_true(stc.data.min() > 0) assert_true(stc.data.max() < 35) assert_true(stc.data.mean() > 0.1) # test without using a label (so delayed computation is used) label = read_label(fname_label % 'Aud-lh') stc = apply_inverse(evoked, inv_op, lambda2, "MNE") stc_label = apply_inverse(evoked, inv_op, lambda2, "MNE", label=label) assert_equal(stc_label.subject, 'sample') label_stc = stc.in_label(label) assert_true(label_stc.subject == 'sample') assert_array_almost_equal(stc_label.data, label_stc.data) # Test we get errors when using custom ref or no average proj is present evoked.info['custom_ref_applied'] = True assert_raises(ValueError, apply_inverse, evoked, inv_op, lambda2, "MNE") evoked.info['custom_ref_applied'] = False evoked.info['projs'] = [] # remove EEG proj assert_raises(ValueError, apply_inverse, evoked, inv_op, lambda2, "MNE")
def test_inverse_operator_noise_cov_rank(): """Test MNE inverse operator with a specified noise cov rank.""" fwd_op = read_forward_solution_meg(fname_fwd, surf_ori=True) evoked = _get_evoked() noise_cov = read_cov(fname_cov) inv = make_inverse_operator(evoked.info, fwd_op, noise_cov, rank=64) assert (compute_rank_inverse(inv) == 64) fwd_op = read_forward_solution_eeg(fname_fwd, surf_ori=True) inv = make_inverse_operator(evoked.info, fwd_op, noise_cov, rank=dict(eeg=20)) assert (compute_rank_inverse(inv) == 20)
def test_apply_inverse_operator(): """Test MNE inverse computation (precomputed and non-precomputed) """ inverse_operator = read_inverse_operator(fname_inv) evoked = _get_evoked() noise_cov = read_cov(fname_cov) # Test old version of inverse computation starting from forward operator fwd_op = read_forward_solution(fname_fwd, surf_ori=True) my_inv_op = make_inverse_operator(evoked.info, fwd_op, noise_cov, loose=0.2, depth=0.8, limit_depth_chs=False) _compare_io(my_inv_op) assert_true(inverse_operator['units'] == 'Am') _compare_inverses_approx(my_inv_op, inverse_operator, evoked, 2, check_depth=False) # Inverse has 306 channels - 4 proj = 302 assert_true(compute_rank_inverse(inverse_operator) == 302) # Test MNE inverse computation starting from forward operator my_inv_op = make_inverse_operator(evoked.info, fwd_op, noise_cov, loose=0.2, depth=0.8) _compare_io(my_inv_op) _compare_inverses_approx(my_inv_op, inverse_operator, evoked, 2) # Inverse has 306 channels - 4 proj = 302 assert_true(compute_rank_inverse(inverse_operator) == 302) stc = apply_inverse(evoked, inverse_operator, lambda2, "MNE") assert_true(stc.subject == 'sample') assert_true(stc.data.min() > 0) assert_true(stc.data.max() < 10e-10) assert_true(stc.data.mean() > 1e-11) stc = apply_inverse(evoked, inverse_operator, lambda2, "sLORETA") assert_true(stc.subject == 'sample') assert_true(stc.data.min() > 0) assert_true(stc.data.max() < 10.0) assert_true(stc.data.mean() > 0.1) stc = apply_inverse(evoked, inverse_operator, lambda2, "dSPM") assert_true(stc.subject == 'sample') assert_true(stc.data.min() > 0) assert_true(stc.data.max() < 35) assert_true(stc.data.mean() > 0.1) my_stc = apply_inverse(evoked, my_inv_op, lambda2, "dSPM") assert_true('dev_head_t' in my_inv_op['info']) assert_true('mri_head_t' in my_inv_op) assert_true(my_stc.subject == 'sample') assert_equal(stc.times, my_stc.times) assert_array_almost_equal(stc.data, my_stc.data, 2)
def test_inverse_operator_noise_cov_rank(evoked, noise_cov): """Test MNE inverse operator with a specified noise cov rank.""" fwd_op = read_forward_solution_meg(fname_fwd, surf_ori=True) with pytest.deprecated_call(): # rank int inv = make_inverse_operator(evoked.info, fwd_op, noise_cov, rank=64) assert (compute_rank_inverse(inv) == 64) inv = make_inverse_operator(evoked.info, fwd_op, noise_cov, rank=dict(meg=64)) assert (compute_rank_inverse(inv) == 64) fwd_op = read_forward_solution_eeg(fname_fwd, surf_ori=True) inv = make_inverse_operator(evoked.info, fwd_op, noise_cov, rank=dict(eeg=20)) assert (compute_rank_inverse(inv) == 20)
def test_make_inverse_operator_fixed(): """Test MNE inverse computation (fixed orientation).""" fwd = read_forward_solution_meg(fname_fwd) evoked = _get_evoked() noise_cov = read_cov(fname_cov) # can't make fixed inv with depth weighting without free ori fwd fwd_fixed = convert_forward_solution(fwd, force_fixed=True, use_cps=True) assert_raises(ValueError, make_inverse_operator, evoked.info, fwd_fixed, noise_cov, depth=0.8, fixed=True) # now compare to C solution # note that the forward solution must not be surface-oriented # to get equivalency (surf_ori=True changes the normals) inv_op = make_inverse_operator(evoked.info, fwd, noise_cov, depth=None, fixed=True, use_cps=False) assert 'EEG channels: 0' in repr(inv_op) assert 'MEG channels: 305' in repr(inv_op) del fwd_fixed inverse_operator_nodepth = read_inverse_operator(fname_inv_fixed_nodepth) # XXX We should have this but we don't (MNE-C doesn't restrict info): # assert 'EEG channels: 0' in repr(inverse_operator_nodepth) assert 'MEG channels: 305' in repr(inverse_operator_nodepth) _compare_inverses_approx(inverse_operator_nodepth, inv_op, evoked, rtol=1e-5, atol=1e-4) # Inverse has 306 channels - 6 proj = 302 assert_true(compute_rank_inverse(inverse_operator_nodepth) == 302) # Now with depth fwd_surf = convert_forward_solution(fwd, surf_ori=True) # not fixed for kwargs, use_fwd in zip( [dict(fixed=True), dict(loose=0.)], [fwd, fwd_surf]): # Should be equiv. inv_op_depth = make_inverse_operator(evoked.info, use_fwd, noise_cov, depth=0.8, use_cps=True, **kwargs) inverse_operator_depth = read_inverse_operator(fname_inv_fixed_depth) # Normals should be the adjusted ones assert_allclose(inverse_operator_depth['source_nn'], fwd_surf['source_nn'][2::3], atol=1e-5) _compare_inverses_approx(inverse_operator_depth, inv_op_depth, evoked, rtol=1e-3, atol=1e-4)
def test_apply_inverse_operator(self): """Test MNE inverse computation (precomputed and non-precomputed) """ # Test old version of inverse computation starting from forward # operator my_inv_op = make_inverse_operator(evoked.info, self.fwd_op, noise_cov, loose=0.2, depth=0.8, limit_depth_chs=False) _compare_io(my_inv_op) _compare_inverses_approx(my_inv_op, self.inv_op, evoked, 2, check_depth=False) # Inverse has 306 channels - 4 proj = 302 assert_true(compute_rank_inverse(self.inv_op) == 302) # Test MNE inverse computation starting from forward operator my_inv_op = make_inverse_operator(evoked.info, self.fwd_op, noise_cov, loose=0.2, depth=0.8) _compare_io(my_inv_op) _compare_inverses_approx(my_inv_op, self.inv_op, evoked, 2) # Inverse has 306 channels - 4 proj = 302 assert_true(compute_rank_inverse(self.inv_op) == 302) stc = apply_inverse(evoked, self.inv_op, lambda2, "MNE") assert_true(stc.data.min() > 0) assert_true(stc.data.max() < 10e-10) assert_true(stc.data.mean() > 1e-11) stc = apply_inverse(evoked, self.inv_op, lambda2, "sLORETA") assert_true(stc.data.min() > 0) assert_true(stc.data.max() < 9.0) assert_true(stc.data.mean() > 0.1) stc = apply_inverse(evoked, self.inv_op, lambda2, "dSPM") assert_true(stc.data.min() > 0) assert_true(stc.data.max() < 35) assert_true(stc.data.mean() > 0.1) my_stc = apply_inverse(evoked, my_inv_op, lambda2, "dSPM") assert_true('dev_head_t' in my_inv_op['info']) assert_true('mri_head_t' in my_inv_op) assert_equal(stc.times, my_stc.times) assert_array_almost_equal(stc.data, my_stc.data, 2)
def test_make_inverse_operator_diag(): """Test MNE inverse computation with diagonal noise cov """ fwd_op = read_forward_solution(fname_fwd, surf_ori=True) inv_op = make_inverse_operator(evoked.info, fwd_op, noise_cov.as_diag(), loose=0.2, depth=0.8) _compare_io(inv_op) inverse_operator_diag = read_inverse_operator(fname_inv_diag) # This one's only good to zero decimal places, roundoff error (?) _compare_inverses_approx(inverse_operator_diag, inv_op, evoked, 0) # Inverse has 306 channels - 4 proj = 302 assert_true(compute_rank_inverse(inverse_operator_diag) == 302)
def test_make_inverse_operator_diag(self): """Test MNE inverse computation with diagonal noise cov """ inv_op = make_inverse_operator(evoked.info, self.fwd_op, noise_cov.as_diag(), loose=0.2, depth=0.8) _compare_io(inv_op) inverse_operator_diag = read_inverse_operator(fname_inv_diag) # This one's only good to zero decimal places, roundoff error (?) _compare_inverses_approx(inverse_operator_diag, inv_op, evoked, 0) # Inverse has 306 channels - 4 proj = 302 assert_true(compute_rank_inverse(inverse_operator_diag) == 302)
def test_apply_inverse_operator(): """Test MNE inverse application """ inverse_operator = read_inverse_operator(fname_full) evoked = _get_evoked() # Inverse has 306 channels - 4 proj = 302 assert_true(compute_rank_inverse(inverse_operator) == 302) # Inverse has 306 channels - 4 proj = 302 assert_true(compute_rank_inverse(inverse_operator) == 302) stc = apply_inverse(evoked, inverse_operator, lambda2, "MNE") assert_true(stc.subject == 'sample') assert_true(stc.data.min() > 0) assert_true(stc.data.max() < 10e-9) assert_true(stc.data.mean() > 1e-11) # test if using prepared and not prepared inverse operator give the same # result inv_op = prepare_inverse_operator(inverse_operator, nave=evoked.nave, lambda2=lambda2, method="MNE") stc2 = apply_inverse(evoked, inv_op, lambda2, "MNE") assert_array_almost_equal(stc.data, stc2.data) assert_array_almost_equal(stc.times, stc2.times) stc = apply_inverse(evoked, inverse_operator, lambda2, "sLORETA") assert_true(stc.subject == 'sample') assert_true(stc.data.min() > 0) assert_true(stc.data.max() < 10.0) assert_true(stc.data.mean() > 0.1) stc = apply_inverse(evoked, inverse_operator, lambda2, "dSPM") assert_true(stc.subject == 'sample') assert_true(stc.data.min() > 0) assert_true(stc.data.max() < 35) assert_true(stc.data.mean() > 0.1)
def test_make_inverse_operator_diag(): """Test MNE inverse computation with diagonal noise cov """ evoked = _get_evoked() noise_cov = read_cov(fname_cov).as_diag(copy=False) fwd_op = read_forward_solution(fname_fwd, surf_ori=True) inv_op = make_inverse_operator(evoked.info, fwd_op, noise_cov, loose=0.2, depth=0.8) _compare_io(inv_op) inverse_operator_diag = read_inverse_operator(fname_inv_meeg_diag) # This one's only good to zero decimal places, roundoff error (?) _compare_inverses_approx(inverse_operator_diag, inv_op, evoked, 0, 1e0) # Inverse has 366 channels - 6 proj = 360 assert_true(compute_rank_inverse(inverse_operator_diag) == 360)
def test_make_inverse_operator_diag(): """Test MNE inverse computation with diagonal noise cov """ evoked = _get_evoked() noise_cov = read_cov(fname_cov) fwd_op = read_forward_solution(fname_fwd, surf_ori=True) inv_op = make_inverse_operator(evoked.info, fwd_op, noise_cov.as_diag(), loose=0.2, depth=0.8) _compare_io(inv_op) inverse_operator_diag = read_inverse_operator(fname_inv_meeg_diag) # This one's only good to zero decimal places, roundoff error (?) _compare_inverses_approx(inverse_operator_diag, inv_op, evoked, 0, 1e0) # Inverse has 366 channels - 6 proj = 360 assert_true(compute_rank_inverse(inverse_operator_diag) == 360)
def test_make_inverse_operator_diag(evoked, noise_cov): """Test MNE inverse computation with diagonal noise cov.""" noise_cov = noise_cov.as_diag() fwd_op = convert_forward_solution(read_forward_solution(fname_fwd), surf_ori=True) inv_op = make_inverse_operator(evoked.info, fwd_op, noise_cov, loose=0.2, depth=0.8) _compare_io(inv_op) inverse_operator_diag = read_inverse_operator(fname_inv_meeg_diag) # This one is pretty bad _compare_inverses_approx(inverse_operator_diag, inv_op, evoked, rtol=1e-1, atol=1e-1, ctol=0.99, check_K=False) # Inverse has 366 channels - 6 proj = 360 assert (compute_rank_inverse(inverse_operator_diag) == 360)
def test_make_inverse_operator_fixed(): """Test MNE inverse computation (fixed orientation).""" fwd = read_forward_solution_meg(fname_fwd) evoked = _get_evoked() noise_cov = read_cov(fname_cov) # can't make fixed inv with depth weighting without free ori fwd fwd_fixed = convert_forward_solution(fwd, force_fixed=True, use_cps=True) pytest.raises(ValueError, make_inverse_operator, evoked.info, fwd_fixed, noise_cov, depth=0.8, fixed=True) # now compare to C solution # note that the forward solution must not be surface-oriented # to get equivalency (surf_ori=True changes the normals) with catch_logging() as log: inv_op = make_inverse_operator( # test depth=0. alias for depth=None evoked.info, fwd, noise_cov, depth=0., fixed=True, use_cps=False, verbose=True) log = log.getvalue() assert 'rank 302 (3 small eigenvalues omitted)' in log assert 'EEG channels: 0' in repr(inv_op) assert 'MEG channels: 305' in repr(inv_op) del fwd_fixed inverse_operator_nodepth = read_inverse_operator(fname_inv_fixed_nodepth) # XXX We should have this but we don't (MNE-C doesn't restrict info): # assert 'EEG channels: 0' in repr(inverse_operator_nodepth) assert 'MEG channels: 305' in repr(inverse_operator_nodepth) _compare_inverses_approx(inverse_operator_nodepth, inv_op, evoked, rtol=1e-5, atol=1e-4) # Inverse has 306 channels - 6 proj = 302 assert (compute_rank_inverse(inverse_operator_nodepth) == 302) # Now with depth fwd_surf = convert_forward_solution(fwd, surf_ori=True) # not fixed for kwargs, use_fwd in zip([dict(fixed=True), dict(loose=0.)], [fwd, fwd_surf]): # Should be equiv. inv_op_depth = make_inverse_operator( evoked.info, use_fwd, noise_cov, depth=0.8, use_cps=True, **kwargs) inverse_operator_depth = read_inverse_operator(fname_inv_fixed_depth) # Normals should be the adjusted ones assert_allclose(inverse_operator_depth['source_nn'], fwd_surf['source_nn'][2::3], atol=1e-5) _compare_inverses_approx(inverse_operator_depth, inv_op_depth, evoked, rtol=1e-3, atol=1e-4)
def test_apply_inverse_operator(evoked): """Test MNE inverse application.""" # use fname_inv as it will be faster than fname_full (fewer verts and chs) inverse_operator = read_inverse_operator(fname_inv) # Inverse has 306 channels - 4 proj = 302 assert (compute_rank_inverse(inverse_operator) == 302) # Inverse has 306 channels - 4 proj = 302 assert (compute_rank_inverse(inverse_operator) == 302) stc = apply_inverse(evoked, inverse_operator, lambda2, "MNE") assert stc.subject == 'sample' assert stc.data.min() > 0 assert stc.data.max() < 13e-9 assert stc.data.mean() > 1e-11 # test if using prepared and not prepared inverse operator give the same # result inv_op = prepare_inverse_operator(inverse_operator, nave=evoked.nave, lambda2=lambda2, method="MNE") stc2 = apply_inverse(evoked, inv_op, lambda2, "MNE") assert_array_almost_equal(stc.data, stc2.data) assert_array_almost_equal(stc.times, stc2.times) # This is little more than a smoke test... stc = apply_inverse(evoked, inverse_operator, lambda2, "sLORETA") assert stc.subject == 'sample' assert stc.data.min() > 0 assert stc.data.max() < 10.0 assert stc.data.mean() > 0.1 stc = apply_inverse(evoked, inverse_operator, lambda2, "eLORETA") assert stc.subject == 'sample' assert stc.data.min() > 0 assert stc.data.max() < 3.0 assert stc.data.mean() > 0.1 stc = apply_inverse(evoked, inverse_operator, lambda2, "dSPM") assert stc.subject == 'sample' assert stc.data.min() > 0 assert stc.data.max() < 35 assert stc.data.mean() > 0.1 # test without using a label (so delayed computation is used) label = read_label(fname_label % 'Aud-lh') stc = apply_inverse(evoked, inv_op, lambda2, "MNE") stc_label = apply_inverse(evoked, inv_op, lambda2, "MNE", label=label) assert_equal(stc_label.subject, 'sample') label_stc = stc.in_label(label) assert label_stc.subject == 'sample' assert_allclose(stc_label.data, label_stc.data) # Test that no errors are raised with loose inverse ops and picking normals noise_cov = read_cov(fname_cov) fwd = read_forward_solution_meg(fname_fwd) inv_op_meg = make_inverse_operator(evoked.info, fwd, noise_cov, loose=1, fixed='auto', depth=None) apply_inverse(evoked, inv_op_meg, 1 / 9., method='MNE', pick_ori='normal') # Test we get errors when using custom ref or no average proj is present evoked.info['custom_ref_applied'] = True pytest.raises(ValueError, apply_inverse, evoked, inv_op, lambda2, "MNE") evoked.info['custom_ref_applied'] = False evoked.info['projs'] = [] # remove EEG proj pytest.raises(ValueError, apply_inverse, evoked, inv_op, lambda2, "MNE") # But test that we do not get EEG-related errors on MEG-only inv (gh-4650) apply_inverse(evoked, inv_op_meg, 1. / 9.)
def test_apply_inverse_operator(): """Test MNE inverse application.""" inverse_operator = read_inverse_operator(fname_full) evoked = _get_evoked() # Inverse has 306 channels - 4 proj = 302 assert_true(compute_rank_inverse(inverse_operator) == 302) # Inverse has 306 channels - 4 proj = 302 assert_true(compute_rank_inverse(inverse_operator) == 302) stc = apply_inverse(evoked, inverse_operator, lambda2, "MNE") assert_true(stc.subject == 'sample') assert_true(stc.data.min() > 0) assert_true(stc.data.max() < 10e-9) assert_true(stc.data.mean() > 1e-11) # test if using prepared and not prepared inverse operator give the same # result inv_op = prepare_inverse_operator(inverse_operator, nave=evoked.nave, lambda2=lambda2, method="MNE") stc2 = apply_inverse(evoked, inv_op, lambda2, "MNE") assert_array_almost_equal(stc.data, stc2.data) assert_array_almost_equal(stc.times, stc2.times) stc = apply_inverse(evoked, inverse_operator, lambda2, "sLORETA") assert_true(stc.subject == 'sample') assert_true(stc.data.min() > 0) assert_true(stc.data.max() < 10.0) assert_true(stc.data.mean() > 0.1) stc = apply_inverse(evoked, inverse_operator, lambda2, "dSPM") assert_true(stc.subject == 'sample') assert_true(stc.data.min() > 0) assert_true(stc.data.max() < 35) assert_true(stc.data.mean() > 0.1) # test without using a label (so delayed computation is used) label = read_label(fname_label % 'Aud-lh') stc = apply_inverse(evoked, inv_op, lambda2, "MNE") stc_label = apply_inverse(evoked, inv_op, lambda2, "MNE", label=label) assert_equal(stc_label.subject, 'sample') label_stc = stc.in_label(label) assert_true(label_stc.subject == 'sample') assert_allclose(stc_label.data, label_stc.data) # Test that no errors are raised with loose inverse ops and picking normals noise_cov = read_cov(fname_cov) fwd = read_forward_solution_meg(fname_fwd) inv_op2 = make_inverse_operator(evoked.info, fwd, noise_cov, loose=1, fixed='auto', depth=None) apply_inverse(evoked, inv_op2, 1 / 9., method='MNE', pick_ori='normal') # Test we get errors when using custom ref or no average proj is present evoked.info['custom_ref_applied'] = True assert_raises(ValueError, apply_inverse, evoked, inv_op, lambda2, "MNE") evoked.info['custom_ref_applied'] = False evoked.info['projs'] = [] # remove EEG proj assert_raises(ValueError, apply_inverse, evoked, inv_op, lambda2, "MNE")
def test_apply_inverse_operator(): """Test MNE inverse application.""" # use fname_inv as it will be faster than fname_full (fewer verts and chs) inverse_operator = read_inverse_operator(fname_inv) evoked = _get_evoked() # Inverse has 306 channels - 4 proj = 302 assert (compute_rank_inverse(inverse_operator) == 302) # Inverse has 306 channels - 4 proj = 302 assert (compute_rank_inverse(inverse_operator) == 302) stc = apply_inverse(evoked, inverse_operator, lambda2, "MNE") assert stc.subject == 'sample' assert stc.data.min() > 0 assert stc.data.max() < 13e-9 assert stc.data.mean() > 1e-11 # test if using prepared and not prepared inverse operator give the same # result inv_op = prepare_inverse_operator(inverse_operator, nave=evoked.nave, lambda2=lambda2, method="MNE") stc2 = apply_inverse(evoked, inv_op, lambda2, "MNE") assert_array_almost_equal(stc.data, stc2.data) assert_array_almost_equal(stc.times, stc2.times) # This is little more than a smoke test... stc = apply_inverse(evoked, inverse_operator, lambda2, "sLORETA") assert stc.subject == 'sample' assert stc.data.min() > 0 assert stc.data.max() < 10.0 assert stc.data.mean() > 0.1 stc = apply_inverse(evoked, inverse_operator, lambda2, "eLORETA") assert stc.subject == 'sample' assert stc.data.min() > 0 assert stc.data.max() < 3.0 assert stc.data.mean() > 0.1 stc = apply_inverse(evoked, inverse_operator, lambda2, "dSPM") assert stc.subject == 'sample' assert stc.data.min() > 0 assert stc.data.max() < 35 assert stc.data.mean() > 0.1 # test without using a label (so delayed computation is used) label = read_label(fname_label % 'Aud-lh') stc = apply_inverse(evoked, inv_op, lambda2, "MNE") stc_label = apply_inverse(evoked, inv_op, lambda2, "MNE", label=label) assert_equal(stc_label.subject, 'sample') label_stc = stc.in_label(label) assert label_stc.subject == 'sample' assert_allclose(stc_label.data, label_stc.data) # Test that no errors are raised with loose inverse ops and picking normals noise_cov = read_cov(fname_cov) fwd = read_forward_solution_meg(fname_fwd) inv_op_meg = make_inverse_operator(evoked.info, fwd, noise_cov, loose=1, fixed='auto', depth=None) apply_inverse(evoked, inv_op_meg, 1 / 9., method='MNE', pick_ori='normal') # Test we get errors when using custom ref or no average proj is present evoked.info['custom_ref_applied'] = True pytest.raises(ValueError, apply_inverse, evoked, inv_op, lambda2, "MNE") evoked.info['custom_ref_applied'] = False evoked.info['projs'] = [] # remove EEG proj pytest.raises(ValueError, apply_inverse, evoked, inv_op, lambda2, "MNE") # But test that we do not get EEG-related errors on MEG-only inv (gh-4650) apply_inverse(evoked, inv_op_meg, 1. / 9.)