-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathtest-surface_dist.R
36 lines (29 loc) · 2.08 KB
/
test-surface_dist.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
test_that("We can compute the vertex closest to an MNI152 coordinate on the fsaverage surface.", {
testthat::skip_on_cran(); # cannot download testdata on CRAN.
skip_if(tests_running_on_cran_under_macos(), message = "Skipping on CRAN under MacOS, required test data cannot be downloaded.");
freesurferformats::download_opt_data();
subjects_dir = freesurferformats::get_opt_data_filepath("subjects_dir");
# WARNING: This surface is NOT the fsaverage surface, as we do not ship this surface with
# freesurferformats. You have to replace this with the fsaverage surface for this demo to
# do what you expect, e.g., if you have FreeSurfer installed and setup correctly:
#surface_file_lh = file.path(Sys.getenv("FREESURFER_HOME"), "subjects", "fsaverage", "surf", "lh.white");
#surface_file_rh = file.path(Sys.getenv("FREESURFER_HOME"), "subjects", "fsaverage", "surf", "rh.white");
# or
#surface_file_lh = file.path("~/software/freesurfer/", "subjects", "fsaverage", "surf", "lh.white");
#surface_file_rh = file.path("~/software/freesurfer/", "subjects", "fsaverage", "surf", "rh.white");
#
# Also, keep in mind that the point could be on the other hemisphere and handle that.
surface_file_lh = file.path(subjects_dir, "subject1", "surf", "lh.white");
surface_file_rh = file.path(subjects_dir, "subject1", "surf", "rh.white");
skip_if_not(file.exists(surface_file_lh), message="Test data missing.");
skip_if_not(file.exists(surface_file_rh), message="Test data missing.");
surf_lh = read.fs.surface(surface_file_lh);
surf_rh = read.fs.surface(surface_file_rh);
mni_152_point = c(-47.0, 46.0, 22.0); # see the point at http://human.brain-map.org/mri_viewers/data
surface_space_point = doapply.transform.mtx(mni_152_point, solve(mni152reg()));
surface_vertex_lh = closest.vert.to.point(surf_lh, surface_space_point);
surface_vertex_rh = closest.vert.to.point(surf_rh, surface_space_point);
#testthat::expect_equal(surface_vertex_lh$vertex_id[1], 93970);
#testthat::expect_equal(surface_vertex_lh$dist[1], 10.85414, tolerance = 1e-4);
testthat::expect_equal(1L, 1L);
})