Test cross-hemisphere morphing.
()
| 138 | |
| 139 | @testing.requires_testing_data |
| 140 | def test_xhemi_morph(): |
| 141 | """Test cross-hemisphere morphing.""" |
| 142 | stc = read_source_estimate(fname_stc, subject="sample") |
| 143 | # smooth 1 for speed where possible |
| 144 | smooth = 4 |
| 145 | spacing = 4 |
| 146 | n_grade_verts = 2562 |
| 147 | stc = compute_source_morph( |
| 148 | stc, |
| 149 | "sample", |
| 150 | "fsaverage_sym", |
| 151 | smooth=smooth, |
| 152 | warn=False, |
| 153 | spacing=spacing, |
| 154 | subjects_dir=subjects_dir, |
| 155 | ).apply(stc) |
| 156 | morph = compute_source_morph( |
| 157 | stc, |
| 158 | "fsaverage_sym", |
| 159 | "fsaverage_sym", |
| 160 | smooth=1, |
| 161 | xhemi=True, |
| 162 | warn=False, |
| 163 | spacing=[stc.vertices[0], []], |
| 164 | subjects_dir=subjects_dir, |
| 165 | ) |
| 166 | stc_xhemi = morph.apply(stc) |
| 167 | assert stc_xhemi.data.shape[0] == n_grade_verts |
| 168 | assert stc_xhemi.rh_data.shape[0] == 0 |
| 169 | assert len(stc_xhemi.vertices[1]) == 0 |
| 170 | assert stc_xhemi.lh_data.shape[0] == n_grade_verts |
| 171 | assert len(stc_xhemi.vertices[0]) == n_grade_verts |
| 172 | # complete reversal mapping |
| 173 | morph = compute_source_morph( |
| 174 | stc, |
| 175 | "fsaverage_sym", |
| 176 | "fsaverage_sym", |
| 177 | smooth=smooth, |
| 178 | xhemi=True, |
| 179 | warn=False, |
| 180 | spacing=stc.vertices, |
| 181 | subjects_dir=subjects_dir, |
| 182 | ) |
| 183 | mm = morph.morph_mat |
| 184 | assert mm.shape == (n_grade_verts * 2,) * 2 |
| 185 | assert mm.size > n_grade_verts * 2 |
| 186 | assert mm[:n_grade_verts, :n_grade_verts].size == 0 # L to L |
| 187 | assert mm[n_grade_verts:, n_grade_verts:].size == 0 # R to L |
| 188 | assert mm[n_grade_verts:, :n_grade_verts].size > n_grade_verts # L to R |
| 189 | assert mm[:n_grade_verts, n_grade_verts:].size > n_grade_verts # R to L |
| 190 | # more complicated reversal mapping |
| 191 | vertices_use = [stc.vertices[0], np.arange(10242)] |
| 192 | n_src_verts = len(vertices_use[1]) |
| 193 | assert vertices_use[0].shape == (n_grade_verts,) |
| 194 | assert vertices_use[1].shape == (n_src_verts,) |
| 195 | # ensure it's sufficiently different to manifest round-trip errors |
| 196 | assert np.isin(vertices_use[1], stc.vertices[1]).mean() < 0.3 |
| 197 | morph = compute_source_morph( |
nothing calls this directly
no test coverage detected