Nothing
test_that("The dimensions of our demo 3D MGZ file are read correctly", {
brain_image = system.file("extdata", "brain.mgz", package = "freesurferformats", mustWork = TRUE);
vd = read.fs.mgh(brain_image);
expect_equal(class(vd), "array");
expect_equal(length(dim(vd)), 4); # It has 4 dimensions
expect_equal(dim(vd), c(256, 256, 256, 1));
})
test_that("The data values in the demo 3D MGZ file are read as in the reference implementation", {
# Tests that the data read is identical to the values returned by the matlab function $FREESURFER_HOME/matlab/MRIread.m
# You can also check with the `mri_info` command line tool, just be sure to shift the
# vertex indices (zero-based for mri_info, one-based in R). See comment below for an example.
brain_image = system.file("extdata", "brain.mgz", package = "freesurferformats", mustWork = TRUE);
vd = read.fs.mgh(brain_image);
expect_equal(class(vd), "array");
expect_equal(length(dim(vd)), 4); # It has 4 dimensions
expect_equal(dim(vd), c(256, 256, 256, 1));
expect_equal(vd[100, 100, 100, 1], 77); # try on command line: mri_info --voxel 99 99 99 inst/extdata/brain.mgz
expect_equal(vd[110, 110, 110, 1], 71);
expect_equal(vd[1, 1, 1, 1], 0);
expect_equal(sum(vd), 121035479);
})
test_that("The demo 1D MGZ file is read correctly", {
morph_file = system.file("extdata", "lh.curv.fwhm10.fsaverage.mgz", package = "freesurferformats", mustWork = TRUE);
vd = read.fs.mgh(morph_file);
expect_equal(class(vd), "array");
expect_equal(length(dim(vd)), 4); # It has 4 dimensions
num_vers_fsaverage = 163842
expect_equal(dim(vd), c(num_vers_fsaverage, 1, 1, 1));
vd2 = read.fs.volume(morph_file);
expect_equal(class(vd2), "array");
expect_equal(length(dim(vd2)), 4); # It has 4 dimensions
expect_equal(dim(vd2), c(num_vers_fsaverage, 1, 1, 1));
})
test_that("The header can be read", {
brain_image = system.file("extdata", "brain.mgz", package = "freesurferformats", mustWork = TRUE);
ret = read.fs.mgh(brain_image, with_header=TRUE);
expect_true(is.fs.volume(ret));
ret2 = read.fs.volume(brain_image, with_header=TRUE);
expect_true(is.fs.volume(ret2));
header = ret$header;
expect_true(is.mghheader(header));
expect_equal(header$dtype, 0); # MRI_UCHAR
expect_equal(header$dof, 0);
expect_equal(header$ras_good_flag, 1);
expect_equal(length(header$internal$delta), 3);
expect_equal(header$internal$delta, c(1, 1, 1), tolerance=1e-2);
expect_equal(length(header$internal$Mdc), 9);
expect_equal(header$internal$Mdc, matrix(c(-1,0,0,0,0,-1,0,1,0), nrow=3), tolerance=1e-2);
expect_equal(length(header$internal$Pxyz_c), 3);
expect_equal(header$internal$Pxyz_c, c(-0.5, 29.4, -48.9), tolerance=1e-2);
expect_equal(header$voldim, c(256, 256, 256, 1));
expect_equal(length(header$has_mr_params), 1);
expect_equal(length(header$mr_params), 5);
expect_equal(header$mr_params, c(2300.000000, 0.157080, 2.010000, 900.000000, 256.000), tolerance=1e-2);
expect_equal(length(header$internal$D), 9); # 3x3
expect_equal(length(header$internal$Pcrs_c), 3); # 3x1
expect_equal(length(header$internal$Pxyz_0), 3); # 3x1
expect_equal(length(header$vox2ras_matrix), 16);
expect_equal(header$vox2ras_matrix, matrix(c(-1,0,0,0, 0,0,-1,0, 0,1,0,0, 127.5,-98.6273,79.0953,1.000), nrow=4, byrow = FALSE), tolerance=1e-2);
header2 = ret2$header;
expect_true(is.mghheader(header2));
expect_equal(header2$dtype, 0); # MRI_UCHAR
expect_equal(header2$dof, 0);
expect_equal(header2$ras_good_flag, 1);
expect_equal(length(header2$internal$delta), 3);
vd = ret$data;
expect_equal(class(vd), "array");
expect_equal(length(dim(vd)), 4); # It has 4 dimensions
expect_equal(typeof(vd), "integer");
expect_equal(dim(vd), c(256, 256, 256, 1));
expect_equal(vd[80,80,80,1], 110); # value of voxel 80,80,80 must be 110 (known from ref. implementation)
expect_equal(vd[100,100,100,1], 77);
expect_equal(vd[100,100,80,1], 105);
vd2 = ret2$data;
expect_equal(class(vd2), "array");
expect_equal(length(dim(vd2)), 4); # It has 4 dimensions
expect_equal(typeof(vd2), "integer");
expect_equal(dim(vd2), c(256, 256, 256, 1));
expect_equal(vd2[80,80,80,1], 110); # value of voxel 80,80,80 must be 110 (known from ref. implementation)
expect_equal(vd2[100,100,100,1], 77);
expect_equal(vd2[100,100,80,1], 105);
})
test_that("Data is flattened when requested", {
brain_image = system.file("extdata", "brain.mgz", package = "freesurferformats", mustWork = TRUE);
vd = read.fs.mgh(brain_image, flatten=TRUE);
expect_equal(class(vd), "integer");
expect_equal(length((vd)), 16777216);
})
test_that("The gzip status is guessed as expected from a filename", {
expect_equal(guess.filename.is.gzipped("noway"), FALSE);
expect_equal(guess.filename.is.gzipped("/there/is/noway"), FALSE);
expect_equal(guess.filename.is.gzipped("file.tar.gz"), TRUE);
expect_equal(guess.filename.is.gzipped("relative/path/to/file.tar.gz"), TRUE);
expect_equal(guess.filename.is.gzipped("file.tar"), FALSE);
expect_equal(guess.filename.is.gzipped("brain.mgz"), TRUE);
expect_equal(guess.filename.is.gzipped("brain.mgh"), FALSE);
})
test_that("A real MGH can be read, rewritten, read again, and the data and header are preserved as expected.", {
brain_image = system.file("extdata", "brain.mgz", package = "freesurferformats", mustWork = TRUE);
ret_orig = read.fs.mgh(brain_image, with_header=TRUE);
expect_true(is.fs.volume(ret_orig));
new_copy = tempfile(fileext="mgz");
write.fs.mgh(new_copy, ret_orig$data, vox2ras_matrix = ret_orig$header$vox2ras_matrix, mr_params=ret_orig$header$mr_params)
ret = read.fs.mgh(new_copy, with_header=TRUE);
header = ret$header;
expect_true(is.mghheader(header));
expect_equal(header$dtype, 1); # IMPORTANT: The data type will have changed from MRI_UCHAR to MRI_INTEGER. This is fine with us for now.
expect_equal(header$dof, 0);
expect_equal(header$ras_good_flag, 1);
expect_equal(length(header$internal$delta), 3);
expect_equal(header$internal$delta, c(1, 1, 1), tolerance=1e-2);
expect_equal(length(header$internal$Mdc), 9);
expect_equal(header$internal$Mdc, matrix(c(-1,0,0,0,0,-1,0,1,0), nrow=3), tolerance=1e-2);
expect_equal(length(header$internal$D), 9); # 3x3
expect_equal(length(header$internal$Pcrs_c), 3); # 3x1
expect_equal(length(header$internal$Pxyz_0), 3); # 3x1
expect_equal(header$internal$Pxyz_c, c(-0.5, 29.4, -48.9), tolerance=1e-2);
expect_equal(header$voldim, c(256, 256, 256, 1));
expect_equal(length(header$has_mr_params), 1);
expect_equal(length(header$mr_params), 5);
expect_equal(header$mr_params, c(2300.000000, 0.157080, 2.010000, 900.000000, 256.000), tolerance=1e-2);
expect_equal(header$vox2ras_matrix, matrix(c(-1,0,0,0, 0,0,-1,0, 0,1,0,0, 127.5,-98.6273,79.0953,1.000), nrow=4, byrow = FALSE), tolerance=1e-2);
vd = ret$data;
expect_equal(class(vd), "array");
expect_equal(length(dim(vd)), 4); # It has 4 dimensions
expect_equal(dim(vd), c(256, 256, 256, 1));
expect_equal(vd[80,80,80,1], 110); # value of voxel 80,80,80 must be 110 (known from ref. implementation)
expect_equal(vd[100,100,100,1], 77);
expect_equal(vd[100,100,80,1], 105);
})
test_that("Invalid volume format leads to errors", {
brain_image = system.file("extdata", "brain.mgz", package = "freesurferformats", mustWork = TRUE);
expect_error(read.fs.volume(brain_image, format = 'invalid format')); # invalid format
})
test_that("Trying to read a non-existent file that does not match any of the file extension checks with read.fs.volume throws an error (issue #25)", {
non_existent_file = tempfile(, fileext = "");
testthat::expect_false(file.exists(non_existent_file)); # ensure it does not exist.
testthat::expect_error(read.fs.volume(non_existent_file));
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.