function test_suite = test_meeg_senstype_collection
% tests for cosmo_meeg_senstype_collection
%
% # 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_senstype_collection_
if cosmo_skip_test_if_no_external('fieldtrip')
return
end
% get senstype properties
% order is:
% - senstype name
% - acquisition system
% - sensor type
% - number of rows in channels
% - number of columns in channels
% - first and last channel label
senstype_props = get_senstype_properties();
% test each one
n = numel(senstype_props);
clear('cosmo_meeg_senstype_collection');
stc = cosmo_meeg_senstype_collection();
stc_cached = cosmo_meeg_senstype_collection();
assertEqual(stc, stc_cached);
for k = 1:n
prop = senstype_props{k};
key = prop{1};
is_required = numel(prop) >= 7 && prop{7};
if isfield(stc, key)
sens = prop{2};
type = prop{3};
size_ = [prop{4:5}];
labels = prop{6}(:);
assert(isfield(stc, key));
st = stc.(key);
assertEqual(st.sens, sens);
assertEqual(st.type, type);
assertEqual(size(st.label), size_);
assertEqual(st.label([1; end]), labels);
elseif is_required
error('Missing key %s', key);
end
end
function test_meeg_senstype_collection_ft_regr_2016june
if cosmo_skip_test_if_no_external('fieldtrip')
return
end
% since the following commit, ft_senstype supports
% ft_senslabel('neuromag306_combined')
% but its output is different than was expected in
% cosmo_meeg_senstype_collection. In particular the recent commit
% includes the magnetometers, whereas the meeg_senstype
% does not include those. This test is added as check for
% such regressions
% FieldTrip (https://github.com/fieldtrip/fieldtrip.git)
% commit 882dba3426db583f7f4f9ac0cdf4eb3c26aaefc1
% Author: Robert Oostenveld <r.oostenveld@gmail.com>
% Date: Wed Jun 22 12:47:47 2016 +0200
%
% ENH - improve combined planar MEG sensor handling, see
% http://bugzilla.fieldtriptoolbox.org/show_bug.cgi?id=3144
stc = cosmo_meeg_senstype_collection();
label = stc.neuromag306_planar_combined.label;
assertEqual(size(label), [102 1]);
present_labels = {'MEG 2642+2643', 'MEG 0112+0113'};
absent_labels = {'MEG0111'',MEG0112', 'MEG0113', ...
'MEG2641'',MEG2642', 'MEG2643'};
assert(all(cosmo_match(present_labels, label(:))));
assert(~any(cosmo_match(absent_labels, label(:))));
function props = get_senstype_properties()
props = {{ 'biosemi64', ...
'biosemi64', 'eeg', ...
64, 1, {'A1', 'B32'}}, ...
{'biosemi128', ...
'biosemi128', 'eeg', ...
128, 1, {'A1', 'D32'}}, ...
{'biosemi256', ...
'biosemi256', 'eeg', ...
256, 1, {'A1', 'H32'}}, ...
{'bti148', ...
'bti148', 'meg_axial', ...
148, 1, {'A1', 'A148'}}, ...
{'bti148_planar', ...
'bti148', 'meg_planar', ...
148, 2, {'A1_dH', 'A148_dV'}}, ...
{'bti148_planar_combined', ...
'bti148', 'meg_planar_combined', ...
148, 1, {'A1', 'A148'}, false}, ... % not required
{'bti248', ...
'bti248', 'meg_axial', ...
248, 1, {'A1', 'A248'}}, ...
{'bti248_planar', ...
'bti248', 'meg_planar', ...
248, 2, {'A1_dH', 'A248_dV'}}, ...
{'bti248_planar_combined', ...
'bti248', 'meg_planar_combined', ...
248, 1, {'A1', 'A248'}, false}, ... % not required
{'ctf151', ...
'ctf151', 'meg_axial', ...
151, 1, {'MLC11', 'MZP02'}}, ...
{'ctf151_planar', ...
'ctf151', 'meg_planar', ...
151, 2, {'MLC11_dH', 'MZP02_dV'}}, ...
{'ctf151_planar_combined', ...
'ctf151', 'meg_planar_combined', ...
151, 1, {'MLC11', 'MZP02'}}, ...
{'ctf275', ...
'ctf275', 'meg_axial', ...
275, 1, {'MLC11', 'MZP01'}}, ...
{'ctf275_planar', ...
'ctf275', 'meg_planar', ...
275, 2, {'MLC11_dH', 'MZP01_dV'}}, ...
{'ctf275_planar_combined', ...
'ctf275', 'meg_planar_combined', ...
275, 1, {'MLC11', 'MZP01'}}, ...
{'eeg1005', ...
'ext1020', 'eeg', ...
343, 1, {'Fp1', 'T6'}}, ...
{'eeg1010', ...
'ext1020', 'eeg', ...
94, 1, {'Fp1', 'T6'}}, ...
{'eeg1020', ...
'ext1020', 'eeg', ...
29, 1, {'Fp1', 'T6'}}, ...
{'egi32', ...
'egi32', 'eeg', ...
34, 1, {'E1', 'Cz'}}, ...
{'egi64', ...
'egi64', 'eeg', ...
66, 1, {'E1', 'Cz'}}, ...
{'egi128', ...
'egi128', 'eeg', ...
130, 1, {'E1', 'Cz'}}, ...
{'egi256', ...
'egi256', 'eeg', ...
258, 1, {'E1', 'Cz'}}, ...
{'neuromag122_planar_combined', ...
'neuromag122', 'meg_planar_combined', ...
61, 1, {'MEG 001+002', 'MEG 121+122'}}, ...
{'neuromag306_planar_combined', ...
'neuromag306', 'meg_planar_combined', ...
102, 1, {'MEG 0112+0113', 'MEG 2642+2643'}}, ...
{'itab153', ...
'itab153', 'meg', ...
153, 1, {'MAG_000', 'MAG_152'}}, ...
{'itab153_planar', ...
'itab153', 'meg_planar', ...
153, 2, {'MAG_000_dH', 'MAG_152_dV'}}, ...
{'itab153_planar_combined', ...
'itab153', 'meg_planar_combined', ...
153, 1, {'MAG_000', 'MAG_152'}}, ...
{'yokogawa64', ...
'yokogawa64', 'meg_axial', ...
64, 1, {'AG001', 'AG064'}}, ...
{'yokogawa64_planar', ...
'yokogawa64', 'meg_planar', ...
64, 2, {'AG001_dH', 'AG064_dV'}}, ...
{'yokogawa64_planar_combined', ...
'yokogawa64', 'meg_planar_combined', ...
64, 1, {'AG001', 'AG064'}}, ...
{'yokogawa160', ...
'yokogawa160', 'meg_axial', ...
160, 1, {'AG001', 'AG160'}}, ...
{'yokogawa160_planar', ...
'yokogawa160', 'meg_planar', ...
160, 2, {'AG001_dH', 'AG160_dV'}}, ...
{'yokogawa160_planar_combined', ...
'yokogawa160', 'meg_planar_combined', ...
160, 1, {'AG001', 'AG160'}}, ...
{'yokogawa440', ...
'yokogawa440', 'meg_axial', ...
412, 1, {'AG001', 'RM412'}}, ...
{'yokogawa440_planar', ...
'yokogawa440', 'meg_planar', ...
210, 2, {'AG001_dH', 'AG392_dV'}}, ...
{'yokogawa440_planar_combined', ...
'yokogawa440', 'meg_planar_combined', ...
210, 1, {'AG001', 'AG392'}}, ...
{'neuromag122alt_planar_combined', ...
'neuromag122', 'meg_planar_combined', ...
61, 1, {'MEG001+002', 'MEG121+122'}}, ...
{'neuromag306alt_planar_combined', ...
'neuromag306', 'meg_planar_combined', ...
102, 1, {'MEG0112+0113', 'MEG2642+2643'}}, ...
{'neuromag306_planar', ...
'neuromag306', 'meg_planar', ...
102, 2, {'MEG 0112', 'MEG 2643'}}, ...
{'neuromag306_mag', ...
'neuromag306', 'meg_axial', ...
102, 1, {'MEG 0111', 'MEG 2641'}}, ...
{'neuromag306alt_planar', ...
'neuromag306', 'meg_planar', ...
102, 2, {'MEG0112', 'MEG2643'}}, ...
{'neuromag306alt_mag', ...
'neuromag306', 'meg_axial', ...
102, 1, {'MEG0111', 'MEG2641'}}, ...
{'neuromag122_planar', ...
'neuromag122', 'meg_planar', ...
61, 2, {'MEG 001', 'MEG 122'}}, ...
{'neuromag122alt_planar', ...
'neuromag122', 'meg_planar', ...
61, 2, {'MEG001', 'MEG122'}}};
% the data anobe was produced by the code below
%
% sc=cosmo_meeg_senstype_collection();
% names=fieldnames(sc);
%
% names={'biosemi64','biosemi128','biosemi256',...
% 'bti148','bti148_planar','bti148_planar_combined',...
% 'bti248','bti248_planar','bti248_planar_combined',...
% 'ctf151','ctf151_planar','ctf151_planar_combined',...
% 'ctf275','ctf275_planar','ctf275_planar_combined',...
% 'eeg1005','eeg1010','eeg1020',...
% 'egi32','egi64','egi128','egi256',...
% 'neuromag122_planar_combined',...
% 'neuromag306_planar_combined',...
% 'itab153','itab153_planar','itab153_planar_combined',...
% 'yokogawa64','yokogawa64_planar','yokogawa64_planar_combined',...
% 'yokogawa160','yokogawa160_planar',...
% 'yokogawa160_planar_combined',...
% 'yokogawa440','yokogawa440_planar',...
% 'yokogawa440_planar_combined',...
% 'neuromag122alt_planar_combined',...
% 'neuromag306alt_planar_combined',...
% 'neuromag306_planar',...
% 'neuromag306_mag',...
% 'neuromag306alt_planar',...
% 'neuromag306alt_mag',...
% 'neuromag122_planar',...
% 'neuromag122alt_planar'};
% for k=1:numel(names)
% name=names{k};
% s=sc.(name);
% fprintf(['{''%s'',...\n\t\t''%s'',''%s'',...\n\t\t'...
% '%d,%d,{''%s'',''%s''}},...\n'],...
% name,s.sens,s.type,size(s.label),s.label{1},s.label{end})
% end
%