-
Notifications
You must be signed in to change notification settings - Fork 0
/
pop_erplabDeleteTimeSegments.m
256 lines (205 loc) · 7.9 KB
/
pop_erplabDeleteTimeSegments.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
function [outputEEG, commandHistory] = pop_erplabDeleteTimeSegments( inputEEG, varargin )
% Deletes data segments between 2 event codes if the size of the segment
% is greater than a user-specified threshold (in msec)
%
% USAGE
%
% EEG = erplab_deleteTimeSegments(EEG, inputMaxDistanceMS, inputStartPeriodBufferMS, inputEndPeriodBufferMS, ignoreEventCodes);
%
%
% Input:
%
% EEG - continuous EEG dataset (EEGLAB's EEG struct)
% maxDistanceMS - user-specified time threshold
% startEventCodeBufferMS - time buffer around first event code
% endEventCodeBufferMS - time buffer around end event code
%
% Optional
% ignoreEventCodes - array of event code numbers to ignore
% displayEEGPLOTGUI - (true|false)
%
% Output:
%
% EEG - continuous EEG dataset (EEGLAB's EEG struct)
%
%
% Example: Delete segment of data between any two event codes when it is
% longer than 3000 ms (3 secs).
%
% EEG = erplab_deleteTimeSegments(EEG, 3000, 100, 200, []);
%
%
% Requirements:
% -
%
% See also
%
%
% *** This function is part of ERPLAB Toolbox ***
% Author: Jason Arita
% Center for Mind and Brain
% University of California, Davis,
% Davis, CA
% 2009
%% Return help if given no input
if nargin < 1
help pop_erplabDeleteTimeSegments
return
end
%% Error Checks
% Error check: Input EEG structure
if isobject(inputEEG) % eegobj
whenEEGisanObject % calls a script for showing an error window
return
end
%% Call GUI
% When only 1 input is given the GUI is then called
if nargin==1
% Input validation setttings
serror = erplab_eegscanner(inputEEG, 'pop_erplabDeleteTimeSegments',...
0, ... % 0 = do not accept md;
0, ... % 0 = do not accept empty dataset;
0, ... % 0 = do not accept epoched EEG;
0, ... % 0 = do not accept if no event codes
2); % 2 = do not care if there exists an ERPLAB EVENTLIST struct
% Quit if there is an error with the input EEG
if serror; return; end
% Get previous input parameters
def = erpworkingmemory('pop_erplabDeleteTimeSegments');
if isempty(def); def = {}; end % if no parameters, clear DEF var
%% Call GUI: gui_erplabDeleteTimeSegments to get the input parameters
inputstrMat = gui_erplabDeleteTimeSegments(def); % GUI
% Exit when CANCEL button is pressed
if isempty(inputstrMat) && ~strcmp(inputstrMat,'')
commandHistory = 'User selected cancel';
return;
end
maxDistanceMS = inputstrMat{1};
startEventCodeBufferMS = inputstrMat{2};
endEventCodeBufferMS = inputstrMat{3};
ignoreEventCodes = inputstrMat{4};
displayEEG = inputstrMat{5};
% Save the GUI inputs to memory
erpworkingmemory('pop_erplabDeleteTimeSegments', ...
{ maxDistanceMS, ...
startEventCodeBufferMS, ...
endEventCodeBufferMS, ...
ignoreEventCodes, ...
displayEEG });
% New output EEG name
if length(inputEEG)==1
inputEEG.setname = [inputEEG.setname '_interpolated'];
end
%% Execute POP_ERPLABDELETETIMESEGMENTS
[outputEEG, commandHistory] = pop_erplabDeleteTimeSegments(inputEEG, ...
'maxDistanceMS' , maxDistanceMS, ...
'startEventCodeBufferMS' , startEventCodeBufferMS, ...
'endEventCodeBufferMS' , endEventCodeBufferMS, ...
'ignoreEventCodes' , ignoreEventCodes, ...
'displayEEG' , displayEEG, ...
'History' , 'gui');
return;
end
%% Parse named input parameters (vs positional input parameters)
%
% Input:
% EEG - continuous EEG dataset (EEGLAB's EEG struct)
% maxDistanceMS - user-specified time threshold
% startEventCodeBufferMS - time buffer around first event code
% endEventCodeBufferMS - time buffer around last event code
% ignoreEventCodes - array of event code numbers to ignore
% displayEEGPLOTGUI - (true|false)
inputParameters = inputParser;
inputParameters.FunctionName = mfilename;
inputParameters.CaseSensitive = false;
% Required parameters
inputParameters.addRequired('inputEEG');
% Optional named parameters (vs Positional Parameters)
inputParameters.addParameter('maxDistanceMS' , 0);
inputParameters.addParameter('startEventCodeBufferMS' , 0);
inputParameters.addParameter('endEventCodeBufferMS' , 0);
inputParameters.addParameter('ignoreEventCodes' , []);
inputParameters.addParameter('displayEEG' , false);
inputParameters.addParameter('History' , 'script', @ischar); % history from scripting
inputParameters.parse(inputEEG, varargin{:});
%% Execute corresponding function
maxDistanceMS = inputParameters.Results.maxDistanceMS;
startEventCodeBufferMS = inputParameters.Results.startEventCodeBufferMS;
endEventCodeBufferMS = inputParameters.Results.endEventCodeBufferMS;
ignoreEventCodes = inputParameters.Results.ignoreEventCodes;
displayEEG = inputParameters.Results.displayEEG;
outputEEG = erplab_deleteTimeSegments(inputEEG ...
, maxDistanceMS ...
, startEventCodeBufferMS ...
, endEventCodeBufferMS ...
, ignoreEventCodes ...
, displayEEG );
%% Generate equivalent history command
%
commandHistory = '';
skipfields = {'inputEEG', 'DisplayFeedback', 'History'};
fn = fieldnames(inputParameters.Results);
commandHistory = sprintf( '%s = pop_erplabDeleteTimeSegments( %s ', inputname(1), inputname(1));
for q=1:length(fn)
fn2com = fn{q}; % get fieldname
if ~ismember(fn2com, skipfields)
fn2res = inputParameters.Results.(fn2com); % get content of current field
if ~isempty(fn2res)
if iscell(fn2res)
commandHistory = sprintf( '%s, ''%s'', {', commandHistory, fn2com);
for c=1:length(fn2res)
getcont = fn2res{c};
if ischar(getcont)
fnformat = '''%s''';
else
fnformat = '%s';
getcont = num2str(getcont);
end
commandHistory = sprintf( [ '%s ' fnformat], commandHistory, getcont);
end
commandHistory = sprintf( '%s }', commandHistory);
else
if ischar(fn2res)
if ~strcmpi(fn2res,'off')
commandHistory = sprintf( '%s, ''%s'', ''%s''', commandHistory, fn2com, fn2res);
end
else
%if iscell(fn2res)
% fn2resstr = vect2colon(cell2mat(fn2res), 'Sort','on');
% fnformat = '{%s}';
%else
fn2resstr = vect2colon(fn2res, 'Sort','on');
fnformat = '%s';
%end
commandHistory = sprintf( ['%s, ''%s'', ' fnformat], commandHistory, fn2com, fn2resstr);
end
end
end
end
end
commandHistory = sprintf( '%s );', commandHistory);
% get history from script. EEG
switch inputParameters.Results.History
case 'gui' % from GUI
commandHistory = sprintf('%s %% GUI: %s', commandHistory, datestr(now));
%fprintf('%%Equivalent command:\n%s\n\n', commandHistory);
displayEquiComERP(commandHistory);
case 'script' % from script
inputEEG = erphistory(inputEEG, [], commandHistory, 1);
case 'implicit'
% implicit
otherwise %off or none
commandHistory = '';
end
%
% Completion statement
%
prefunc = dbstack;
nf = length(unique_bc2({prefunc.name}));
if nf==1
msg2end
end
return
end
function runGUI(EEG)
end