|
26 | 26 | compute_rank, |
27 | 27 | compute_raw_covariance, |
28 | 28 | convert_forward_solution, |
| 29 | + create_info, |
29 | 30 | make_ad_hoc_cov, |
30 | 31 | make_forward_solution, |
31 | 32 | make_sphere_model, |
|
35 | 36 | read_cov, |
36 | 37 | read_evokeds, |
37 | 38 | read_forward_solution, |
| 39 | + setup_volume_source_space, |
38 | 40 | ) |
| 41 | +from mne.channels import make_standard_montage |
39 | 42 | from mne.datasets import testing |
40 | 43 | from mne.epochs import Epochs, EpochsArray, make_fixed_length_epochs |
41 | 44 | from mne.event import read_events |
@@ -1726,3 +1729,38 @@ def test_allow_mixed_source_spaces(mixed_fwd_cov_evoked): |
1726 | 1729 | inv_op = make_inverse_operator(evoked.info, fwd, cov, loose=0.0) |
1727 | 1730 | stc = apply_inverse(evoked, inv_op, lambda2=1.0 / 9.0) # normal |
1728 | 1731 | assert (stc.data < 0).any() |
| 1732 | + |
| 1733 | + |
| 1734 | +@testing.requires_testing_data |
| 1735 | +def test_make_inverse_no_meg(tmp_path): |
| 1736 | + """Test that we can make and I/O forward solution with no MEG channels.""" |
| 1737 | + pos = dict(rr=[[0.05, 0, 0]], nn=[[0, 0, 1.0]]) |
| 1738 | + src = setup_volume_source_space(pos=pos) |
| 1739 | + bem = make_sphere_model() |
| 1740 | + trans = None |
| 1741 | + montage = make_standard_montage("standard_1020") |
| 1742 | + info = create_info(["Cz", "Fz"], 1000.0, "eeg").set_montage(montage) |
| 1743 | + data = np.random.default_rng(0).standard_normal((len(info["ch_names"]), 10)) |
| 1744 | + evoked = EvokedArray(data, info) |
| 1745 | + evoked.set_eeg_reference(projection=True) |
| 1746 | + del info, data |
| 1747 | + fwd = make_forward_solution(evoked.info, trans, src, bem) |
| 1748 | + assert fwd["info"]["dev_head_t"] is None |
| 1749 | + cov = make_ad_hoc_cov(evoked.info) |
| 1750 | + # Ensure we maintain backward-compatible behavior with when we *did* save |
| 1751 | + # the forward with an identity dev_head_t |
| 1752 | + fname = tmp_path / "test-inv.fif" |
| 1753 | + invs = list() |
| 1754 | + for dev_head_t in (None, mne.Transform("meg", "head")): |
| 1755 | + fwd["info"]["dev_head_t"] = dev_head_t |
| 1756 | + inv = make_inverse_operator(evoked.info, fwd, cov) |
| 1757 | + assert inv["info"]["dev_head_t"] == dev_head_t |
| 1758 | + stc = apply_inverse(evoked, inv, lambda2=1.0 / 9.0) |
| 1759 | + assert stc.data.shape == (1, 10) |
| 1760 | + write_inverse_operator(fname, inv, overwrite=True) |
| 1761 | + inv_read = read_inverse_operator(fname) |
| 1762 | + assert inv_read["info"]["dev_head_t"] == dev_head_t |
| 1763 | + invs.append(inv) |
| 1764 | + assert invs[1]["info"]["dev_head_t"] is not None |
| 1765 | + invs[1]["info"]["dev_head_t"] = None # for comparison |
| 1766 | + _compare(invs[0], invs[1]) |
0 commit comments