MCPcopy
hub / github.com/mne-tools/mne-python / test_label_geometry

Function test_label_geometry

mne/tests/test_label.py:1227–1260  ·  view source on GitHub ↗

Test label geometric computations.

(fname, area)

Source from the content-addressed store, hash-verified

1225 ],
1226)
1227def test_label_geometry(fname, area):
1228 """Test label geometric computations."""
1229 pytest.importorskip("nibabel")
1230 label = read_label(fname, subject="sample")
1231 got_area = label.compute_area(subjects_dir=subjects_dir)
1232 assert_allclose(got_area, area, rtol=1e-3)
1233 # using a sparse label emits a warning
1234 label_sparse = label.restrict(src_fname)
1235 assert 0 < len(label_sparse.vertices) < len(label.vertices)
1236 with pytest.warns(RuntimeWarning, match="No complete triangles"):
1237 assert label_sparse.compute_area(subjects_dir=subjects_dir) == 0.0
1238 dist, outside = label.distances_to_outside(subjects_dir=subjects_dir)
1239 rr, tris = read_surface(subjects_dir / "sample" / "surf" / "lh.white")
1240 mask = np.zeros(len(rr), bool)
1241 mask[label.vertices] = 1
1242 border_mask = np.isin(label.vertices, _mesh_borders(tris, mask))
1243 # The distances of the border vertices is smaller than that of non-border
1244 lo, mi, hi = np.percentile(dist[border_mask], (0, 50, 100))
1245 assert 0.1e-3 < lo < 0.5e-3 < mi < 1.0e-3 < hi < 2.0e-3
1246 lo, mi, hi = np.percentile(dist[~border_mask], (0, 50, 100))
1247 assert 0.5e-3 < lo < 1.0e-3 < mi < 9.0e-3 < hi < 25e-3
1248 # check that the distances are close but uniformly <= than euclidean
1249 assert not np.isin(outside, label.vertices).any()
1250 border_dist = dist[border_mask]
1251 border_euc = 1e-3 * np.linalg.norm(
1252 rr[label.vertices[border_mask]] - rr[outside[border_mask]], axis=1
1253 )
1254 assert_allclose(border_dist, border_euc, atol=1e-4)
1255 inside_dist = dist[~border_mask]
1256 inside_euc = 1e-3 * np.linalg.norm(
1257 rr[label.vertices[~border_mask]] - rr[outside[~border_mask]], axis=1
1258 )
1259 assert_array_less(inside_euc, inside_dist)
1260 assert_array_less(0.25 * inside_dist, inside_euc)

Callers

nothing calls this directly

Calls 7

read_labelFunction · 0.90
read_surfaceFunction · 0.90
_mesh_bordersFunction · 0.90
compute_areaMethod · 0.80
restrictMethod · 0.80
distances_to_outsideMethod · 0.80
normMethod · 0.80

Tested by

no test coverage detected