eeg_getepochevent.m

来自「含有多种ICA算法的eeglab工具箱」· M 代码 · 共 252 行

M
252
字号
% eeg_getepochevent() - Return dataset event field values for all events %                                of one or more specified types% Usage:%       >> epochval = eeg_getepochevent( EEG, types);%       >> epochval = eeg_getepochevent( EEG, types, timewin, fieldname);%% Inputs:%   EEG       - Input dataset%% Optional inputs:%   types     - String containing an event type. Cell array of string%               may be used to select several event types; %               {} is all types of events. Note: Requires that %               a field named 'type' is defined in 'EEG.event'.%   timewin   - Event time window [start, end] in milliseconds%               (default []=whole epoch).%   fieldname - Name of the field to return the values for. %               Default field is 'EEG.event.latency' in milliseconds%               (though internally this information is stored in %               real frames).% Outputs:%   epochval    - A value of the selected field for each epoch. This is%                 NaN if no selected event occurred during the epoch. If%                 several vales are available for each epoch, only the%                 first one is taken into consideration.%                 Latencies are measured in msec relative to epoch onset.%   allepochval - cell array with same length as the number of epoch %                 containing all values for all epochs. This output is%                 usefull when several value are found within each epoch.%% Notes: 1) Each epoch structure refers to the events that occurred%        during its time window. This function allows the user to return %        specified field values for a subset of the defined events. %%        2) If several of the selected events occur during a single epoch, %        a warning is issued, and value of ONLY THE FIRST event in the epoch %        is returned. %%        If NO EVENT is selected in a given epoch, the value returned %        is NaN.%%        3) If the user elects to return the latency field, eeg_getepochevent()%        recomputes the latency of each event relative to the epoch time%        limits.%% Example: %  >> latencies = eeg_getepochevent(EEG, 'rt');%  % Return the latencies (by default) in milliseconds of events having %  % type 'rt' (reaction time)%%  >> latencies = eeg_getepochevent(EEG, {'target','rare'}, [0 300], 'position');%  % Return the position (field 'position') of 'target' or 'rare' type%  % events occurring between 0 and 300 milliseconds of each epoch.%  % Returns NaN for epochs with no such events. (See Notes above).%% Author: Arnaud Delorme & Scott Makeig, CNL / Salk Institute, 15 Feb 2002%% See also: eeglab(), epoch() %123456789012345678901234567890123456789012345678901234567890123456789012% Copyright (C) 15 Feb 2002 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: eeg_getepochevent.m,v $% Revision 1.16  2004/06/03 18:32:59  arno% msg%% Revision 1.15  2004/06/03 14:53:44  arno% remove count%% Revision 1.14  2004/06/03 14:51:12  arno% debug allepochvals%% Revision 1.13  2004/06/02 18:21:45  arno% adding extra output%% Revision 1.12  2004/06/02 16:49:00  arno% allowing to process continuous data%% Revision 1.11  2004/06/01 21:43:06  arno% adding more examples in header%% Revision 1.10  2003/01/03 20:46:38  scott% header edits -sm%% Revision 1.9  2002/08/15 16:29:35  arno% update message%% Revision 1.8  2002/07/27 00:24:26  arno% updating header%% Revision 1.7  2002/05/03 01:53:54  arno% using eeg_point2lat%% Revision 1.6  2002/04/22 22:05:53  arno% debuggig last change%% Revision 1.5  2002/04/22 22:01:07  arno% corrected time limits%% Revision 1.4  2002/04/22 21:51:49  arno% removing error message for latency%% Revision 1.3  2002/04/18 18:22:27  arno% typo can not%% Revision 1.2  2002/04/10 03:08:57  arno% reprogrammed event selection%% Revision 1.1  2002/04/05 17:32:13  jorn% Initial revision%% 02/15/02 modified function according to new event structure -adfunction [epochval, allepochval] = eeg_getepochevent(EEG, type, timewin, fieldname, timeformat);if nargin <2    help eeg_getepochevent;    return;end;    if nargin <3    timewin = [-Inf Inf];else 	if isempty(timewin)        timewin = [-Inf Inf];	end;end;if nargin <4    fieldname = 'latency';end;if nargin <5    timeformat = 'points';end;if isempty(EEG.event)    disp('Getepochevent: no event structure, aborting.'); return;end;    % check if EEG.epoch contain references to events% -----------------------------------------------if ~isfield( EEG.event, 'epoch' )    disp('Getepochevent: no epoch indices in events, considering continuous values.');end;    % check if EEG.epoch and EEG.event contains 'latency' field% ------------------------------------------if ~isfield( EEG.event, fieldname)    disp(['Getepochevent: no ''' fieldname ''' field in events, aborting.']); return;end;% deal with empty types% ---------------------if ~isempty(type) & ~iscell(type)	type = { type };end;% convert types% -------------for indextype=1:length(type)     if isstr(type{indextype}) & isnumeric(EEG.event(1).type)         if ~isempty(str2num(type{indextype}))   			 type{indextype} = str2num(type{indextype}); 		 else			 error('eeg_getepochevent: string type cannot be found in numeric event type array');		 end;		 	 elseif isnumeric(type{indextype}) & isstr(EEG.event(1).type)		  type{indextype} = num2str(type{indextype});	 end;end;% select epochs% -------------if ~isempty(type)	Ieventtmp = [];	for indextype=1:length(type)		typeval = type{indextype};		test = 0;		if isstr(typeval)			Ieventtmp = [Ieventtmp strmatch(typeval, { EEG.event.type })' ];		else			Ieventtmp = [Ieventtmp find(typeval == cell2mat({ EEG.event.type })) ];		end;	end;else	Ieventtmp = [1:length(EEG.event)];end;% select latencies% ----------------if isfield(EEG.event, 'latency') & (timewin(1) ~= -Inf | timewin(2) ~= Inf)	selected = ones(size(Ieventtmp));	for index=1:length(Ieventtmp)        if ~isfield(EEG.event, 'epoch'), epoch = 1;        else                             epoch = EEG.event(Ieventtmp(index)).epoch;        end;		reallat = eeg_point2lat(EEG.event(Ieventtmp(index)).latency, epoch, ...								EEG.srate, [EEG.xmin EEG.xmax]*1000, 1E-3); 		if reallat < timewin(1) | reallat > timewin(2)			selected(index) = 0;		end;	end;	Ieventtmp = Ieventtmp( find(selected == 1) );end;% select events% -------------epochval       = zeros(1,EEG.trials); epochval(:) = nan;allepochval    = cell(1, EEG.trials);if strcmp(fieldname, 'latency')	for index = 1:length(Ieventtmp)        if ~isfield(EEG.event, 'epoch'), epoch = 1;        else                             epoch = EEG.event(Ieventtmp(index)).epoch;        end;        allepochval{epoch}(end+1) = eeg_point2lat(EEG.event(Ieventtmp(index)).latency, epoch, ...                                            EEG.srate, [EEG.xmin EEG.xmax]*1000, 1E-3);		if length(allepochval{epoch}) == 1			epochval(epoch) = allepochval{epoch}(end);		else            if length(allepochval{epoch}) == 2 & nargout < 2                disp(['Warning: multiple event latencies found in epoch ' int2str(epoch) ]);                 %, ignoring event ' int2str(Ieventtmp(index)) ' (''' num2str(EEG.event(Ieventtmp(index)).type) ''' type)' ]);            end;		end;	end;else	for index = 1:length(Ieventtmp)		eval( [ 'val = EEG.event(Ieventtmp(index)).' fieldname ';']);		if ~isempty(val)            if ~isfield(EEG.event, 'epoch'), epoch = 1;            else                             epoch = EEG.event(Ieventtmp(index)).epoch;            end;            epochval(epoch)           = val;            allepochval{epoch}(end+1) = val;		end;	end;end;    

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?