function test_suite=test_meeg_find_layout()
% tests for cosmo_meeg_find_layout
%
% # 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_meeg_find_layout_()
if cosmo_skip_test_if_no_external('fieldtrip')
return;
end
coverage=1; % allow for covering subset only
props=get_props();
n=numel(props);
prev_name='';
rp=randperm(n);
rp=rp(1:ceil((coverage*n)));
for k=1:numel(rp)
prop=props{rp(k)};
name=prop{1};
chantype=prop{2};
lay_prop=prop{3};
parent_lay_prop=prop{4};
unsupp=prop{5};
if ~strcmp(prev_name,name)
ds=cosmo_synthetic_dataset('type','meeg','size','big',...
'sens',name,'ntargets',1,'nchunks',1);
end
lay=cosmo_meeg_find_layout(ds,'chantype',chantype);
check_lay(lay,lay_prop);
if ~isempty(parent_lay_prop)
check_lay(lay.parent,parent_lay_prop);
end
for j=1:numel(unsupp)
assertExceptionThrown(@()cosmo_meeg_find_layout(ds,...
'chantype',unsupp{j}),'');
end
prev_name=name;
end
function check_lay(lay,lay_prop)
if isempty(lay.name) && isempty(lay_prop{1})
return
end
assertEqual(lay.name,lay_prop{1});
nchans=lay_prop{2};
keep=find(~cosmo_match(lay.label,{'COMNT','SCALE'}));
assertEqual(numel(keep),nchans);
assertEqual(size(lay.pos,1),numel(lay.width));
assertEqual(size(lay.pos,1),numel(lay.height));
assertEqual(size(lay.pos,1),numel(lay.label));
chans=lay_prop{3};
has_child=~isempty(lay_prop{5});
assertEqual(has_child, isfield(lay,'child_label'));
for j=1:numel(chans)
if j==1
cpos=1;
elseif j==numel(chans)
cpos=nchans-2;
end
if ~strcmp(chans{j},lay.label(cpos))
cpos=find(strcmp(chans{j},lay.label));
assert(numel(cpos)==1)
end
assertVectorsAlmostEqual(lay.pos(cpos,:),lay_prop{4}(j,:),...
'absolute',1e-4);
if has_child
assertEqual(lay.child_label{cpos}(:),lay_prop{5}{j}(:));
end
end
function props=get_props()
props={{'neuromag306_all','meg_planar',...
{'neuromag306planar.lay',204,...
{'MEG0113', 'MEG2643'},...
[-0.4084 0.2532;0.3733 -0.0820],...
[]},...
[],...
{'eeg', 'meg_planar_combined'}},...
{'neuromag306_all','meg_axial',...
{'neuromag306mag.lay',102,...
{'MEG0111', 'MEG2641'},...
[-0.4084 0.2732;0.3733 -0.1036],...
[]},...
[],...
{'eeg', 'meg_planar_combined'}},...
{'neuromag306_all','meg_combined_from_planar',...
{'neuromag306planar.lay',204,...
{'MEG0113', 'MEG2643'},...
[-0.4084 0.2532;0.3733 -0.0820],...
[]},...
{'neuromag306cmb.lay',102,...
{'MEG0112+0113', 'MEG2642+2643'},...
[-0.4084 0.2732;0.3733 -0.1036],...
{{'MEG0112', 'MEG0113'},{'MEG2642', 'MEG2643'}}},...
{'eeg', 'meg_planar_combined'}},...
{'neuromag306_planar','meg_planar',...
{'neuromag306planar.lay',204,...
{'MEG0113', 'MEG2643'},...
[-0.4084 0.2532;0.3733 -0.0820],...
[]},...
[],...
{'eeg', 'meg_axial', 'meg_planar_combined'}},...
{'neuromag306_planar','meg_combined_from_planar',...
{'neuromag306planar.lay',204,...
{'MEG0113', 'MEG2643'},...
[-0.4084 0.2532;0.3733 -0.0820],...
[]},...
{'neuromag306cmb.lay',102,...
{'MEG0112+0113', 'MEG2642+2643'},...
[-0.4084 0.2732;0.3733 -0.1036],...
{{'MEG0112', 'MEG0113'},{'MEG2642', 'MEG2643'}}},...
{'eeg', 'meg_axial', 'meg_planar_combined'}},...
{'neuromag306_planar_combined','meg_planar_combined',...
{'neuromag306cmb.lay',102,...
{'MEG0112+0113', 'MEG2642+2643'},...
[-0.4084 0.2732;0.3733 -0.1036],...
[]},...
[],...
{'eeg', 'meg_axial', 'meg_combined_from_planar', 'meg_planar'}},...
{'ctf151','meg_axial',...
{'CTF151.lay',151,...
{'MLC11', 'MZP02'},...
[-0.0344 0.1732;0.0008 -0.2668],...
[]},...
[],...
{'eeg', 'meg_combined_from_planar', 'meg_planar'}},...
{'ctf151_planar','meg_planar',...
{'',302,...
{'MLC11_dH', 'MZP02_dV'},...
[-0.0344 0.1732;0.0008 -0.2668],...
[]},...
[],...
{'eeg', 'meg_axial', 'meg_planar_combined'}},...
{'ctf151_planar','meg_combined_from_planar',...
{'',302,...
{'MLC11_dH', 'MZP02_dV'},...
[-0.0344 0.1732;0.0008 -0.2668],...
[]},...
{'CTF151.lay',151,...
{'MLC11', 'MZP02'},...
[-0.0344 0.1732;0.0008 -0.2668],...
{{'MLC11_dH', 'MLC11_dV'},{'MZP02_dH', 'MZP02_dV'}}},...
{'eeg', 'meg_axial', 'meg_planar_combined'}},...
{'ctf151_planar_combined','meg_planar_combined',...
{'CTF151.lay',151,...
{'MLC11', 'MZP02'},...
[-0.0344 0.1732;0.0008 -0.2668],...
[]},...
[],...
{'eeg', 'meg_combined_from_planar', 'meg_planar'}},...
{'4d148','meg_axial',...
{'4D148.lay',148,...
{'A1', 'A148'},...
[-0.0109 0.0939;0.3709 0.3364],...
[]},...
[],...
{'eeg', 'meg_combined_from_planar', 'meg_planar'}},...
{'4d148_planar','meg_planar',...
{'',296,...
{'A1_dH', 'A148_dV'},...
[-0.0109 0.0939;0.3709 0.3364],...
[]},...
[],...
{'eeg', 'meg_axial', 'meg_planar_combined'}},...
{'4d148_planar','meg_combined_from_planar',...
{'',296,...
{'A1_dH', 'A148_dV'},...
[-0.0109 0.0939;0.3709 0.3364],...
[]},...
{'4D148.lay',148,...
{'A1', 'A148'},...
[-0.0109 0.0939;0.3709 0.3364],...
{{'A1_dH', 'A1_dV'},{'A148_dH', 'A148_dV'}}},...
{'eeg', 'meg_axial', 'meg_planar_combined'}},...
{'4d148_planar_combined','meg_planar_combined',...
{'4D148.lay',148,...
{'A1', 'A148'},...
[-0.0109 0.0939;0.3709 0.3364],...
[]},...
[],...
{'eeg', 'meg_combined_from_planar', 'meg_planar'}},...
{'4d248','meg_axial',...
{'4D248.lay',248,...
{'A1', 'A248'},...
[0.0038 0.0232;0.3897 0.3453],...
[]},...
[],...
{'eeg', 'meg_combined_from_planar', 'meg_planar'}},...
{'4d248_planar','meg_planar',...
{'',496,...
{'A1_dH', 'A248_dV'},...
[0.0038 0.0232;0.3897 0.3453],...
[]},...
[],...
{'eeg', 'meg_axial', 'meg_planar_combined'}},...
{'4d248_planar','meg_combined_from_planar',...
{'',496,...
{'A1_dH', 'A248_dV'},...
[0.0038 0.0232;0.3897 0.3453],...
[]},...
{'4D248.lay',248,...
{'A1', 'A248'},...
[0.0038 0.0232;0.3897 0.3453],...
{{'A1_dH', 'A1_dV'},{'A248_dH', 'A248_dV'}}},...
{'eeg', 'meg_axial', 'meg_planar_combined'}},...
{'4d248_planar_combined','meg_planar_combined',...
{'4D248.lay',248,...
{'A1', 'A248'},...
[0.0038 0.0232;0.3897 0.3453],...
[]},...
[],...
{'eeg', 'meg_combined_from_planar', 'meg_planar'}},...
{'eeg1020','',...
{'EEG1020.lay',21,...
{'Fp1', 'O2'},...
[-0.1390 0.4280;0.1390 -0.4280],...
[]},...
[],...
{'meg_axial', 'meg_combined_from_planar', 'meg_planar', 'meg_planar_combined'}},...
{'eeg1010','',...
{'EEG1010.lay',86,...
{'Fp1', 'I2'},...
[-0.1112 0.4260;0.1390 -0.4256],...
[]},...
[],...
{'meg_axial', 'meg_combined_from_planar', 'meg_planar', 'meg_planar_combined'}},...
{'eeg1005','',...
{'EEG1005.lay',335,...
{'Fp1', 'OI2'},...
[-0.1112 0.3880;0.1252 -0.3814],...
[]},...
[],...
{'meg_axial', 'meg_combined_from_planar', 'meg_planar', 'meg_planar_combined'}},...
};