Back to the main page.
Bug 2575 - Setting channel types based on labels
Status | CLOSED FIXED |
Reported | 2014-05-12 20:37:00 +0200 |
Modified | 2014-07-15 17:25:12 +0200 |
Product: | FieldTrip |
Component: | fileio |
Version: | unspecified |
Hardware: | PC |
Operating System: | Windows |
Importance: | P5 normal |
Assigned to: | Robert Oostenveld |
URL: | |
Tags: | |
Depends on: | |
Blocks: | |
See also: |
Vladimir Litvak - 2014-05-12 20:37:52 +0200
I noticed that ft_chantype only works for 1020 EEG labels (not sure if it's always been the case, I don't think so because in SPM automatic channel type setting also worked for Biosemi). Looking around line 544 in ft_chantype I see that it checks 1020 labels 3 times which I think is redundant, it's enough to only compare with 1005. But instead I suggest to have: type(match_str(label, ft_senslabel(ft_senstype(input)))) = {'eeg'}; This will work for any EEG label set. I tried it and it seems to work well. Do you see any problems with it? Vladimir
Robert Oostenveld - 2014-05-13 09:40:48 +0200
I suspect that it works for Biosemi because of lines 86 and further: if isfield(input, 'chantype') % start with the provided channel types type = input.chantype(:); else % start with unknown type for all channels type = repmat({'unknown'}, numchan, 1); end This only has effect if the input is a header or grad structure, not if it only channel labels. The 1005 system indeed includes all 1010 and 1020 labels, also the M, A and T channels, so the 3 calls could be changed by a single one. I am not sure whether your suggestion will always work. ft_senstype is not so robust, due to unusual combinations of channel labels, e.g. a mix of system specific labels (like EGI or Biosemi) with a subset of 1020 labels. How about changing line 544 it into elseif ft_senstype(input, 'eeg') && islabel % use an external helper function to define the list with EEG channel names type(match_str(label, ft_senslabel('eeg1005'))) = {'eeg'}; % this includes all channels from the 1010 and 1020 arrangement type(match_str(label, ft_senslabel(ft_senstype(input)))) = {'eeg'}; % this will work for biosemi, egi and other detected channel arrangements
Vladimir Litvak - 2014-05-13 13:17:21 +0200
(In reply to Robert Oostenveld from comment #1) I'm not sure it'll work so well because it'll detect any channel whose name matches one of the 1005 labels in any system. I suspect you can have names like C3 or P3 also in something which is not 1020. In most cases it'll be benign but who knows...
Robert Oostenveld - 2014-05-13 13:44:10 +0200
(In reply to Vladimir Litvak from comment #2) Agreed. But it would only be for systems with ft_senstype=eeg, and for those I would assume that almost all channels have chantype=eeg anyway. Furthermore, this has been the behaviour for some time now and would not change. The only change is that non-1020 channels can also be marked as chantype=eeg.
Robert Oostenveld - 2014-05-15 08:38:41 +0200
mac011> svn commit fileio/ft_chantype.m Sending fileio/ft_chantype.m Transmitting file data . Committed revision 9534. See https://code.google.com/p/fieldtrip/source/detail?r=9534 for details I hope you agree with the solution.
Robert Oostenveld - 2014-05-15 08:38:55 +0200
see previous comment