pop_selectcomps.m
来自「含有多种ICA算法的eeglab工具箱」· M 代码 · 共 271 行
M
271 行
% pop_selectcomps() - Display components with button to vizualize their% properties and label them for rejection.% Usage:% >> OUTEEG = pop_selectcomps( INEEG, compnum );%% Inputs:% INEEG - Input dataset% compnum - vector of component numbers%% Output:% OUTEEG - Output dataset with updated rejected components%% Note:% if the function POP_REJCOMP is ran prior to this function, some % fields of the EEG datasets will be present and the current function % will have some more button active to tune up the automatic rejection. %% Author: Arnaud Delorme, CNL / Salk Institute, 2001%% See also: pop_prop(), eeglab()%123456789012345678901234567890123456789012345678901234567890123456789012% Copyright (C) 2001 Arnaud Delorme, Salk Institute, arno@salk.edu%% This program is free software; you can redistribute it and/or modify% it under the terms of the GNU General Public License as published by% the Free Software Foundation; either version 2 of the License, or% (at your option) any later version.%% This program is distributed in the hope that it will be useful,% but WITHOUT ANY WARRANTY; without even the implied warranty of% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the% GNU General Public License for more details.%% You should have received a copy of the GNU General Public License% along with this program; if not, write to the Free Software% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA% $Log: pop_selectcomps.m,v $% Revision 1.25 2004/07/09 17:00:24 arno% only show electrode if less than 64 channels%% Revision 1.24 2004/03/18 00:31:45 arno% remove skirt%% Revision 1.23 2004/02/23 15:30:18 scott% added 'shrink','skirt' to topoplot call%% Revision 1.22 2004/02/23 15:28:08 scott% turned 'electrodes','off' in topoplots%% Revision 1.21 2003/07/24 23:17:27 arno% removing extra plot%% Revision 1.20 2003/07/24 18:52:10 arno% typo% /%% Revision 1.19 2003/07/21 15:25:31 arno% allowing to select component to reject%% Revision 1.18 2003/05/12 22:29:10 arno% verbose off% for topoplot%% Revision 1.17 2003/05/10 17:31:52 arno% adding name of dataset to title%% Revision 1.16 2003/02/11 02:02:16 arno% making it compatible for one row%% Revision 1.15 2003/02/10 23:25:52 arno% allowing to plot less than 35 components%% Revision 1.14 2002/09/04 23:31:22 arno% spetial aborting plot feature%% Revision 1.13 2002/09/04 23:25:40 arno% debugging last%% Revision 1.12 2002/09/04 23:24:34 arno% updating pop_compprop -> pop_prop%% Revision 1.11 2002/08/19 22:05:37 arno% removing comment%% Revision 1.10 2002/08/12 18:35:09 arno% questdlg2%% Revision 1.9 2002/08/12 14:59:30 arno% button color%% Revision 1.8 2002/08/12 01:42:46 arno% colors%% Revision 1.7 2002/08/11 22:19:37 arno% *** empty log message ***%% Revision 1.6 2002/07/26 23:57:37 arno% same%% Revision 1.5 2002/07/26 23:56:27 arno% window location%% Revision 1.4 2002/07/26 14:35:27 arno% debugging: if nb comps~=nb chans%% Revision 1.3 2002/04/26 21:21:08 arno% updating eeg_store call%% Revision 1.2 2002/04/18 18:40:01 arno% retrIeve%% Revision 1.1 2002/04/05 17:32:13 jorn% Initial revision%% 01-25-02 reformated help & license -ad function [EEG, com] = pop_selectcomps( EEG, compnum, fig );COLREJ = '[1 0.6 0.6]';COLACC = '[0.75 1 0.75]';PLOTPERFIG = 35;com = '';if nargin < 1 help pop_selectcomps; return;end; if nargin < 2 promptstr = { 'Components to plot:' }; initstr = { [ '1:' int2str(size(EEG.icaweights,1)) ] }; result = inputdlg2(promptstr, 'Reject comp. by map -- pop_selectcomps',1, initstr); if isempty(result), return; end; compnum = eval( [ '[' result{1} ']' ]); if length(compnum) > PLOTPERFIG ButtonName=questdlg2(strvcat(['More than ' int2str(PLOTPERFIG) ' components so'],'this function will pop-up several windows'), ... 'Confirmation', 'Cancel', 'OK','OK'); if ~isempty( strmatch(lower(ButtonName), 'cancel')), return; end; end;end;fprintf('Drawing figure...\n');currentfigtag = ['selcomp' num2str(rand)]; % generate a random figure tagif length(compnum) > PLOTPERFIG for index = 1:PLOTPERFIG:length(compnum) pop_selectcomps(EEG, compnum([index:min(length(compnum),index+PLOTPERFIG-1)])); end; com = [ 'pop_selectcomps(' inputname(1) ', ' vararg2str(compnum) ');' ]; return;end;if isempty(EEG.reject.gcompreject) EEG.reject.gcompreject = zeros( size(EEG.icawinv,2));end;try, icadefs; catch, BACKCOLOR = [0.8 0.8 0.8]; GUIBUTTONCOLOR = [0.8 0.8 0.8]; end;% set up the figure% -----------------column =ceil(sqrt( length(compnum) ))+1;rows = ceil(length(compnum)/column);if ~exist('fig') figure('name', [ 'Reject components by map - pop_selectcomps() (dataset: ' EEG.setname ')'], 'tag', currentfigtag, ... 'numbertitle', 'off', 'color', BACKCOLOR); set(gcf,'MenuBar', 'none'); pos = get(gcf,'Position'); set(gcf,'Position', [pos(1) 20 800/7*column 600/5*rows]); incx = 120; incy = 110; sizewx = 100/column; if rows > 2 sizewy = 90/rows; else sizewy = 80/rows; end; pos = get(gca,'position'); % plot relative to current axes hh = gca; q = [pos(1) pos(2) 0 0]; s = [pos(3) pos(4) pos(3) pos(4)]./100; axis off;end;% figure rows and columns% ----------------------- if EEG.nbchan > 64 disp('More than 64 electrodes: electrode locations not shown'); plotelec = 0;else plotelec = 1;end;count = 1;for ri = compnum if exist('fig') button = findobj('parent', fig, 'tag', ['comp' num2str(ri)]); if isempty(button) error( 'pop_selectcomps, figure does not contain the component button'); end; else button = []; end; if isempty( button ) % compute coordinates % ------------------- X = mod(count-1, column)/column * incx-10; Y = (rows-floor((count-1)/column))/rows * incy - sizewy*1.3; % plot the head % ------------- if ~strcmp(get(gcf, 'tag'), currentfigtag); disp('Aborting plot'); return; end; ha = axes('Units','Normalized', 'Position',[X Y sizewx sizewy].*s+q); if plotelec topoplot( EEG.icawinv(:,ri), EEG.chanlocs, 'verbose', ... 'off', 'style' , 'fill'); else topoplot( EEG.icawinv(:,ri), EEG.chanlocs, 'verbose', ... 'off', 'style' , 'fill','electrodes','off'); end; axis square; % plot the button % --------------- button = uicontrol(gcf, 'Style', 'pushbutton', 'Units','Normalized', 'Position',... [X Y+sizewy sizewx sizewy*0.25].*s+q, 'tag', ['comp' num2str(ri)]); command = sprintf('pop_prop( %s, 0, %d, %3.15f);', inputname(1), ri, button); set( button, 'callback', command ); end; set( button, 'backgroundcolor', eval(fastif(EEG.reject.gcompreject(ri), COLREJ,COLACC)), 'string', int2str(ri)); drawnow; count = count +1;end;% draw the bottom button% ----------------------if ~exist('fig') hh = uicontrol(gcf, 'Style', 'pushbutton', 'string', 'Cancel', 'Units','Normalized', 'backgroundcolor', GUIBUTTONCOLOR, ... 'Position',[-10 -10 15 sizewy*0.25].*s+q, 'callback', 'close(gcf); fprintf(''Operation cancelled\n'')' ); hh = uicontrol(gcf, 'Style', 'pushbutton', 'string', 'Set threhsolds', 'Units','Normalized', 'backgroundcolor', GUIBUTTONCOLOR, ... 'Position',[10 -10 15 sizewy*0.25].*s+q, 'callback', 'pop_icathresh(EEG); pop_selectcomps( EEG, gcbf);' ); if isempty( EEG.stats.compenta ), set(hh, 'enable', 'off'); end; hh = uicontrol(gcf, 'Style', 'pushbutton', 'string', 'See comp. stats', 'Units','Normalized', 'backgroundcolor', GUIBUTTONCOLOR, ... 'Position',[30 -10 15 sizewy*0.25].*s+q, 'callback', ' ' ); if isempty( EEG.stats.compenta ), set(hh, 'enable', 'off'); end; hh = uicontrol(gcf, 'Style', 'pushbutton', 'string', 'See projection', 'Units','Normalized', 'backgroundcolor', GUIBUTTONCOLOR, ... 'Position',[50 -10 15 sizewy*0.25].*s+q, 'callback', ' ', 'enable', 'off' ); hh = uicontrol(gcf, 'Style', 'pushbutton', 'string', 'Help', 'Units','Normalized', 'backgroundcolor', GUIBUTTONCOLOR, ... 'Position',[70 -10 15 sizewy*0.25].*s+q, 'callback', 'pophelp(''pop_selectcomps'');' ); command = '[ALLEEG EEG] = eeg_store(ALLEEG, EEG, CURRENTSET); h(''[ALLEEG EEG] = eeg_store(ALLEEG, EEG, CURRENTSET);''); close(gcf)'; hh = uicontrol(gcf, 'Style', 'pushbutton', 'string', 'OK', 'Units','Normalized', 'backgroundcolor', GUIBUTTONCOLOR, ... 'Position',[90 -10 15 sizewy*0.25].*s+q, 'callback', command); % sprintf(['eeg_global; if %d pop_rejepoch(%d, %d, find(EEG.reject.sigreject > 0), EEG.reject.elecreject, 0, 1);' ... % ' end; pop_compproj(%d,%d,1); close(gcf); eeg_retrieve(%d); eeg_updatemenu; '], rejtrials, set_in, set_out, fastif(rejtrials, set_out, set_in), set_out, set_in));end;com = [ 'pop_selectcomps(' inputname(1) ', ' vararg2str(compnum) ');' ];return;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?