function test_suite = test_cosmo_fmri_dataset
% tests for cosmo_fmri_dataset
%
% # For CoSMoMVPA's copyright information and license terms, #
% # see the COPYING file distributed with CoSMoMVPA. #
try % assignment of 'localfunctions' is necessary in Matlab >= 2016
test_functions = localfunctions();
catch % no problem; early Matlab versions can use initTestSuite fine
end
initTestSuite;
function test_init()
ds = cosmo_synthetic_dataset();
assertTrue(numel(setxor(fieldnames(ds), ...
{'samples', 'a', 'sa', 'fa'})) == 0);
function test_nifti()
ni = generate_test_nifti_struct();
g = cosmo_synthetic_dataset('size', 'normal');
tmpfn = '__tmp1_.nii';
cleaner = onCleanup(@()delete(tmpfn));
save_nii(ni, tmpfn);
ds = cosmo_fmri_dataset(tmpfn, 'targets', g.sa.targets, ...
'chunks', g.sa.chunks);
assertTrue(numel(setxor(fieldnames(ds), ...
fieldnames(g))) == 0);
assertElementsAlmostEqual(ds.samples, g.samples, 'relative', 1e-6);
assertEqual(ds.sa.targets, g.sa.targets);
assertEqual(ds.sa.chunks, g.sa.chunks);
function test_io()
ds = cosmo_synthetic_dataset('size', 'normal');
tmpfn = '__tmp2_.nii';
cleaner = onCleanup(@()delete(tmpfn));
cosmo_map2fmri(ds, tmpfn);
es = cosmo_fmri_dataset(tmpfn);
assertElementsAlmostEqual(ds.samples, es.samples, 'relative', 1e-6);
assertEqual(ds.a.fdim, es.a.fdim);
function ni = generate_test_nifti_struct()
% Generates a struct that behaves like a NIFTI struct
ni = struct();
ds = cosmo_synthetic_dataset('size', 'normal');
ni.img = shiftdim(cosmo_unflatten(ds), 1);
hdr = struct();
dime = struct();
dime.datatype = 16; % single
dime.dim = [4 3 2 5 6 1 1 1];
dime.pixdim = [0 2 2 2 0 0 0 0];
fns = {'intent_p1', 'intent_p2', 'intent_p3', 'intent_code', ...
'slice_start', 'slice_duration', 'slice_end', ...
'scl_slope', 'scl_inter', 'slice_code', 'cal_max', ...
'cal_min', 'toffset'};
dime = nifti_helper_set_all(dime, fns);
dime.xyzt_units = 10;
hdr.dime = dime;
hk = struct();
hk.sizeof_hdr = 348;
hk.data_type = '';
hk.db_name = '';
hk.extents = 0;
hk.session_error = 0;
hk.regular = 'r';
hk.dim_info = 0;
hdr.hk = hk;
hist = struct();
hist.sform_code = 1;
hist.originator = [2 1 3 3];
hist = nifti_helper_set_all(hist, {'descrip', 'aux_file'}, '');
hist = nifti_helper_set_all(hist, {'qform_code', 'quatern_b', ...
'quatern_d', ...
'qoffset_x', 'qoffset_y', 'qoffset_z'});
hist = nifti_helper_set_all(hist, {'intent_name'}, '');
hist.srow_x = [2 0 0 -1];
hist.srow_y = [0 2 0 -1];
hist.srow_z = [0 0 2 -1];
hist.quatern_c = 0;
hdr.hist = hist;
ni.hdr = hdr;
function s = nifti_helper_set_all(s, fns, v)
% sets all fields in fns in struct s to v
% if v is omitted it is set to 0.
if nargin < 3
v = 0;
end
n = numel(fns);
for k = 1:n
fn = fns{k};
s.(fn) = v;
end