function test_suite = test_meeg_chantype
% tests for cosmo_meeg_chantype
%
% # 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_chantype_
if cosmo_skip_test_if_no_external('fieldtrip')
return
end
props = get_senstype_properties();
n = numel(props);
for k = 1:n
prop = props{k};
name = prop{1};
nchan = prop{2};
chan_labels = prop{3};
chan_mapping = prop{4};
sizes = {'small', 'big'};
for j = 1:2
size_ = sizes{j};
ds = cosmo_synthetic_dataset('type', 'meeg', 'sens', name, ...
'size', size_, ...
'ntargets', 1, 'nchunks', 1);
nf = numel(ds.a.fdim.values{1});
if strcmp(size_, 'big')
assertEqual(nf, nchan);
end
[tp, mp] = cosmo_meeg_chantype(ds);
if ischar(chan_labels)
assertEqual(unique(tp), {chan_labels});
else
chan_rep = repmat(chan_labels(:), ...
ceil(nchan / numel(chan_labels)), 1);
assertEqual(tp(:), chan_rep(1:nf));
end
for m = 1:numel(chan_mapping)
cm = chan_mapping{m};
assertEqual(mp.(cm{1}), cm{2});
end
end
end
function props = get_senstype_properties()
props = { {'neuromag306_all', 306, ...
{'meg_axial', 'meg_planar', 'meg_planar'}, ...
{{'meg_axial', 'neuromag306alt_mag'}, ...
{'meg_planar', 'neuromag306alt_planar'}}}, ...
{'neuromag306_planar', 204, ...
'meg_planar', ...
{{'meg_planar', 'neuromag306alt_planar'}}}, ...
{'neuromag306_planar_combined', 102, ...
'meg_planar_combined', ...
{{'meg_planar_combined', ...
'neuromag306alt_planar_combined'}}}, ...
{'ctf151', 151, ...
'meg_axial', ...
{{'meg_axial', 'ctf151'}}}, ...
{'ctf151_planar', 302, ...
'meg_planar', ...
{{'meg_planar', 'ctf151_planar'}}}, ...
{'ctf151_planar_combined', 151, ...
'meg_axial', ...
{{'meg_axial', 'ctf151'}}}, ...
{'4d148', 148, ...
'meg_axial', ...
{{'meg_axial', 'bti148'}}}, ...
{'4d148_planar', 296, ...
'meg_planar', ...
{{'meg_planar', 'bti148_planar'}}}, ...
{'4d148_planar_combined', 148, ...
'meg_axial', ...
{{'meg_axial', 'bti148'}}, false}, ... % not essential
{'4d248', 248, ...
'meg_axial', ...
{{'meg_axial', 'bti248'}}}, ...
{'4d248_planar', 496, ...
'meg_planar', ...
{{'meg_planar', 'bti248_planar'}}}, ...
{'4d248_planar_combined', 248, ...
'meg_axial', ...
{{'meg_axial', 'bti248'}}, false}, ... % not essential
{'yokogawa64_planar_combined', 64, ...
'meg_axial', ...
{{'meg_axial', 'yokogawa64'}}}, ...
{'yokogawa64', 64, ...
'meg_axial', ...
{{'meg_axial', 'yokogawa64'}}}, ...
{'yokogawa64_planar', 128, ...
'meg_planar', ...
{{'meg_planar', 'yokogawa64_planar'}}}, ...
{'yokogawa64_planar_combined', 64, ...
'meg_axial', ...
{{'meg_axial', 'yokogawa64'}}}, ...
{'eeg1020', 29, ...
'eeg', ...
{{'eeg', 'eeg1020'}}}, ...
{'eeg1010', 94, ...
'eeg', ...
{{'eeg', 'eeg1010'}}}, ...
{'eeg1005', 343, ...
'eeg', ...
{{'eeg', 'eeg1005'}}} ...
};
% these properties were generated by the following code:
%
% props={{'neuromag306',{'all','planar','planar_combined'}},...
% {'ctf151',{'','planar','planar_combined'}},...
% {'4d148',{'','planar','planar_combined'}},...
% {'4d248',{'','planar','planar_combined'}},...
% {'yokogawa64',{'','planar','planar_combined'}},...
% {'yokogawa64',{'','planar','planar_combined'}}};
% n=numel(props);
%
% for k=1:n
% prop=props{k};
% name=prop{1};
% sens=prop{2};
%
% opt=struct();
% opt.sens=sens;
% opt.type='meeg';
% opt.size='big';
%
% cp=cosmo_cartprod(opt);
% for j=1:numel(cp)
% x=cp{j};
%
% if isempty(x.sens)
% x.sens=name;
% else
% x.sens=[name '_' x.sens];
% end
% ds=cosmo_synthetic_dataset(x);
% nchan=numel(ds.a.fdim.values{1});
% [tp,mp]=cosmo_meeg_chantype(ds);
%
% utp=unique(tp);
% if numel(utp)==1
% s=['''' tp{1} ''''];
% else
% tps=tp(1:3);
% s=['{''' cosmo_strjoin(tps,''', ''') '''}'];
% end
%
%
% t=cellfun(@(x)sprintf('{''%s'',''%s''}',x,mp.(x)),utp,...
% 'UniformOutput',false);
%
% fprintf('{''%s'',%d,...\n\t%s,...\n\t%s},...\n',...
% x.sens,nchan,s,['{' cosmo_strjoin(t,',...\n\t') '}']);
%
%
% end
% end