pop_eegplot.m
来自「含有多种ICA算法的eeglab工具箱」· M 代码 · 共 315 行
M
315 行
% pop_eegplot() - Visually inspect EEG data using a scrolling display.% Perform rejection or marking for rejection of visually % (and/or previously) selected data portions (i.e., stretches % of continuous data or whole data epochs).% Usage:% >> pop_eegplot( EEG ) % Scroll EEG channel data. Allow marking for rejection via% % button 'Update Marks' but perform no actual data rejection.% % Do not show or use marks from previous visual inspections% % or from semi-auotmatic rejection.% >> pop_eegplot( EEG, typerej, superpose, reject );%% Graphic interface:% "Add to previously marked rejections" - [edit box] Either YES or NO. % Command line equivalent: 'superpose'.% "Reject marked trials" - [edit box] Either YES or NO. Command line% equivalent 'reject'.% Inputs:% EEG - input EEG dataset% typerej - type of rejection 0 = independent components; % 1 = data channels. {Default: 1 = data channels}% superpose - 0 = Show new marks only: Do not color the background of data portions % previously marked for rejection by visual inspection. Mark new data % portions for rejection by first coloring them (by dragging the left % mouse button), finally pressing the 'Update Marks' or 'Reject' % buttons (see 'reject' below). Previous markings from visual inspection % will be lost.% 1 = Show data portions previously marked by visual inspection plus % data portions selected in this window for rejection (by dragging % the left mouse button in this window). These are differentiated % using a lighter and darker hue, respectively). Pressing the % 'Update Marks' or 'Reject' buttons (see 'reject' below)% will then mark or reject all the colored data portions.% {Default: 0, show and act on new marks only}% reject - 0 = Mark for rejection. Mark data portions by dragging the left mouse % button on the data windows (producing a background coloring indicating % the extent of the marked data portion). Then press the screen button % 'Update Marks' to store the data portions marked for rejection % (stretches of continuous data or whole data epochs). No 'Reject' button % is present, so data marked for rejection cannot be actually rejected % from this eegplot() window. % 1 = Reject marked trials. After inspecting/selecting data portions for% rejection, press button 'Reject' to reject (remove) them from the EEG % dataset (i.e., those portions plottted on a colored background. % {default: 0, mark for rejection only}% Outputs:% Modifications are applied to the current EEG dataset at the end of the% eegplot() call, when the user presses the 'Update Marks' or 'Reject' button.% NOTE: The modifications made are not saved into EEGLAB history. As of v4.2,% events contained in rejected data portions are remembered in the EEG.urevent% structure (see EEGLAB tutorial).%% Author: Arnaud Delorme, CNL / Salk Institute, 2001%% See also: eeglab(), eegplot(), pop_rejepoch()%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_eegplot.m,v $% Revision 1.36 2004/05/08 16:08:28 scott% typo%% Revision 1.35 2004/03/13 03:01:37 arno% history%% Revision 1.34 2004/03/13 02:58:24 arno% debuging history%% Revision 1.33 2004/01/30 19:48:36 arno% disable submean if more than 100 channels%% Revision 1.32 2003/12/24 17:32:33 scott% help msg and text output edits%% Revision 1.31 2003/12/05 00:19:52 arno% history in dataset%% Revision 1.30 2003/07/29 15:43:00 arno% always plot events%% Revision 1.29 2003/07/22 17:25:07 arno% event -> events%% Revision 1.28 2003/07/22 17:14:44 arno% do not pop up help window if 4 argumentes%% Revision 1.27 2003/07/12 01:24:34 arno% plotting events%% Revision 1.26 2003/05/14 18:12:58 arno% implementing checkbox%% Revision 1.25 2003/05/12 15:33:41 arno% same%% Revision 1.24 2003/05/12 15:32:00 arno% reject continuous data debug% for command line%% Revision 1.23 2003/02/23 08:28:21 scott% header edit -sm%% Revision 1.22 2003/02/18 22:17:52 arno% typo in header%% Revision 1.21 2003/02/18 22:08:54 arno% update header for GUI%% Revision 1.20 2003/02/03 18:36:53 scott% header msg clarified -sm%% Revision 1.19 2003/01/10 01:11:49 arno% removing default position%% Revision 1.18 2002/11/15 19:52:53 arno% do not plot channel names for ICA continuous data%% Revision 1.17 2002/11/12 19:20:26 arno% warning for rejecting continuous data%% Revision 1.16 2002/08/24 02:04:06 scott% help msg%% Revision 1.15 2002/08/12 21:54:13 arno% text%% Revision 1.14 2002/08/12 16:26:20 arno% inputdlg2%% Revision 1.13 2002/08/08 01:33:56 arno% adding history for continuous rejection%% Revision 1.12 2002/08/07 22:41:01 arno% editing text%% Revision 1.11 2002/07/31 17:16:15 arno% debugging%% Revision 1.10 2002/07/31 16:32:09 arno% debugging%% Revision 1.9 2002/07/30 22:21:11 arno% debugging%% Revision 1.8 2002/07/30 22:19:24 arno% removing multieegplot.m%% Revision 1.7 2002/07/27 01:35:55 arno% editing header%% Revision 1.6 2002/07/26 16:53:22 arno% switching icacomp%% Revision 1.5 2002/07/08 22:03:02 arno% nothing%% Revision 1.4 2002/06/25 22:23:56 scott% *** empty log message ***%% Revision 1.3 2002/04/26 21:28:17 arno% eeg_updatemenu%% Revision 1.2 2002/04/26 21:25:03 arno% update call to eeg_store%% Revision 1.1 2002/04/05 17:32:13 jorn% Initial revision%% 01-25-02 reformated help & license -ad % 03-07-02 added srate argument to eegplot call -ad% 03-27-02 added event latency recalculation for continuous data -adfunction [com] = pop_eegplot( EEG, icacomp, superpose, reject, topcommand);com = '';if nargin < 1 help pop_eegplot; return;end; if nargin < 2 icacomp = 1;end; if nargin < 3 superpose = 0;end;if nargin < 4 reject = 1;end;if icacomp == 0 if isempty( EEG.icasphere ) disp('Error: you must run ICA first'); return; end;end;if nargin < 3 & EEG.trials > 1 % which set to save % ----------------- uilist = { { 'style' 'text' 'string' 'Add to previously marked rejections? (checked=yes)'} , ... { 'style' 'checkbox' 'string' '' 'value' 1 } , ... { 'style' 'text' 'string' 'Reject marked trials? (checked=yes)'} , ... { 'style' 'checkbox' 'string' '' 'value' 0 } }; result = inputgui( { [ 2 0.2] [ 2 0.2]} , uilist, 'pophelp(''pop_eegplot'');', ... fastif(icacomp==0, 'Manual component rejection -- pop_eegplot()', ... 'Reject epochs by visual inspection -- pop_eegplot()')); size_result = size( result ); if size_result(1) == 0 return; end; if result{1}, superpose=1; end; if ~result{2}, reject=0; end;end;if EEG.trials > 1 if icacomp == 1 macrorej = 'EEG.reject.rejmanual'; macrorejE = 'EEG.reject.rejmanualE'; else macrorej = 'EEG.reject.icarejmanual'; macrorejE = 'EEG.reject.icarejmanualE'; end; elecrange = [1:EEG.nbchan]; colrej = EEG.reject.rejmanualcol; rej = eval(macrorej); rejE = eval(macrorejE); eeg_rejmacro; % script macro for generating command and old rejection arrayselse % case of a single trial (continuous data) %if icacomp, % command = ['if isempty(EEG.event) EEG.event = [eegplot2event(TMPREJ, -1)];' ... % 'else EEG.event = [EEG.event(find(EEG.event(:,1) ~= -1),:); eegplot2event(TMPREJ, -1, [], [0.8 1 0.8])];' ... % 'end;']; %else, command = ['if isempty(EEG.event) EEG.event = [eegplot2event(TMPREJ, -1)];' ... % 'else EEG.event = [EEG.event(find(EEG.event(:,1) ~= -2),:); eegplot2event(TMPREJ, -1, [], [0.8 1 0.8])];' ... % 'end;']; %end; %if reject % command = ... % [ command ... % '[EEG.data EEG.xmax] = eegrej(EEG.data, EEG.event(find(EEG.event(:,1) < 0),3:end), EEG.xmax-EEG.xmin);' ... % 'EEG.xmax = EEG.xmax+EEG.xmin;' ... % 'EEG.event = EEG.event(find(EEG.event(:,1) >= 0),:);' ... % 'EEG.icaact = [];' ... % 'EEG = eeg_checkset(EEG);' ]; eeg_options; % changed from eeglaboptions 3/30/02 -sm if reject == 0, command = []; else, command = ... [ '[EEGTMP LASTCOM] = eeg_eegrej(EEG,eegplot2event(TMPREJ, -1));' ... 'if ~isempty(LASTCOM),' ... ' [ALLEEG EEG CURRENTSET tmpcom] = pop_newset(ALLEEG, EEGTMP, CURRENTSET);' ... ' if ~isempty(tmpcom),' ... ' EEG = h(LASTCOM, EEG);' ... ' h(tmpcom);' ... ' eeglab(''redraw'');' ... ' end;' ... 'end;' ... 'clear EEGTMP tmpcom;' ]; if nargin < 4 res = questdlg2( strvcat('Mark stretches of continuous data for rejection', ... 'by dragging the left mouse button. Click on marked', ... 'stretches to unmark. When done,press "REJECT" to', ... 'excise marked stretches (Note: Leaves rejection', ... 'boundary markers in the event table).'), 'Warning', 'Cancel', 'Continue', 'Continue'); if strcmpi(res, 'Cancel'), return; end; end; end; eegplotoptions = { 'winlength', 5, 'events', EEG.event }; if ~isempty(EEG.chanlocs) & icacomp eegplotoptions = { eegplotoptions{:} 'eloc_file', EEG.chanlocs }; end;end;if EEG.nbchan > 100 disp('pop_eegplot() note: Baseline subtraction disabled to speed up display'); eegplotoptions = { eegplotoptions{:} 'submean' 'off' };end;if icacomp == 1 eegplot( EEG.data, 'srate', EEG.srate, 'title', 'Scroll channel activities -- eegplot()', ... 'limits', [EEG.xmin EEG.xmax]*1000 , 'command', command, eegplotoptions{:}); %eeg_multieegplot( EEG.data, [], [], oldrej, oldrejE, 'title', 'Scroll channel activities -- eegplot()', 'srate', ... % EEG.srate, 'limits', [EEG.xmin EEG.xmax]*1000 , 'command', command); else eeg_options; % changed from eeglaboptions 3/30/02 -sm if option_computeica tmpdata = EEG.icaact; else tmpdata = (EEG.icaweights*EEG.icasphere)*reshape(EEG.data, EEG.nbchan, EEG.trials*EEG.pnts); tmpdata = reshape( tmpdata, size(tmpdata,1), EEG.pnts, EEG.trials); end; eegplot( tmpdata, 'srate', EEG.srate, 'title', 'Scroll component activities -- eegplot()', ... 'limits', [EEG.xmin EEG.xmax]*1000 , 'command', command, eegplotoptions{:}); %eeg_multieegplot( tmpdata, [], [], oldrej, oldrejE, 'title', 'Scroll component activities -- eegplot()', 'srate', ... % EEG.srate, 'limits', [EEG.xmin EEG.xmax]*1000 , 'command', command); end;com = [ com sprintf('pop_eegplot( %s, %d, %d, %d);', inputname(1), icacomp, superpose, reject) ]; return;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?