-
Notifications
You must be signed in to change notification settings - Fork 0
/
pop_erplabShiftEventTime.m
234 lines (186 loc) · 6.78 KB
/
pop_erplabShiftEventTime.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
function [EEG, commandHistory] = pop_erplabShiftEventTime( EEG, varargin )
%POP_ERPLABSHIFTEVENTTIME In EEG data, shift the timing of user-specified event codes.
%
% FORMAT
%
% EEG = pop_erplabShiftEventTime(inEEG, eventcodes, timeshift)
%
% INPUT:
%
% EEG EEGLAB EEG dataset
% eventcodes list of event codes to shift
% timeshift time in sec. If timeshift is positive, the EEG event code time-values are shifted to the right (e.g. increasing delay).
% - If timeshift is negative, the event code time-values are shifted to the left (e.g decreasing delay).
% - If timeshift is 0, the EEG's time values are not shifted.
% rounding Type of rounding to use
% - 'nearest' (default) Round to the nearest integer
% - 'floor' Round to nearest ingtowards positive infinity
% - 'ceiling' Round to nearest integer towards negative infinity
%
% OPTIONAL INPUT:
%
% displayFeedback Type of feedback to display at Command window
% - 'summary' (default) Print summarized info to Command Window
% - 'detailed' Print event table with latency differences
% - 'both' Print both summarized & detailed info
%
% OUTPUT:
%
% EEG EEGLAB EEG dataset with latency shift.
%
%
% EXAMPLE:
%
% eventcodes = {'22', '19'};
% timeshift = 0.015;
% rounding = 'floor';
% outputEEG = erplabShiftEventTime(inputEEG, eventcodes, timeshift, rounding);
%
%
% Requirements:
% - EEG_CHECKSET (eeglab function)
%
% See also eegtimeshift.m erptimeshift.m
%
%
% *** This function is part of ERPLAB Toolbox ***
% Author: Jason Arita
% Center for Mind and Brain
% University of California, Davis,
% Davis, CA
% 2009
commandHistory = '';
% Return help if given no input
if nargin < 1
help pop_erplabShiftEventTime
return
end
% Input testing
if isobject(EEG) % 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 EEG error check
serror = erplab_eegscanner(EEG, 'pop_erplabShiftEventTime',...
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_erplabShiftEventTime');
if isempty(def)
def = {};
end
% Call GUI
inputstrMat = erplabShiftEventTimeGUI(def); % GUI
% Exit when CANCEL button is pressed
if isempty(inputstrMat) && ~strcmp(inputstrMat,'')
commandHistory = 'User selected cancel';
return;
end
eventcodes = inputstrMat{1};
timeshift = inputstrMat{2};
rounding = inputstrMat{3};
% displayFeedback = inputstrMat{4};
%
% erpworkingmemory('pop_erplabShiftEventTime', ...
% {eventcodes, timeshift, rounding, displayFeedback});
%
% New output EEG name
if length(EEG)==1
EEG.setname = [EEG.setname '_eventTimeshifted'];
end
[EEG, commandHistory] = pop_erplabShiftEventTime(EEG, ...
'Eventcodes' , eventcodes, ...
'Timeshift' , timeshift, ...
'Rounding' , rounding, ...
'History' , 'gui');
return
end
%% Parse named input parameters (vs positional input parameters)
inputParameters = inputParser;
inputParameters.FunctionName = mfilename;
inputParameters.CaseSensitive = false;
% Required parameters
inputParameters.addRequired('EEG');
% Optional named parameters (vs Positional Parameters)
inputParameters.addParameter('Eventcodes' , []);
inputParameters.addParameter('Timeshift' , 0);
inputParameters.addParameter('Rounding' , 'nearest');
inputParameters.addParameter('DisplayFeedback' , 'summary'); % old parameter for BoundaryString
inputParameters.addParameter('History' , 'script', @ischar); % history from scripting
inputParameters.parse(EEG, varargin{:});
%% Generate equivalent command (for history)
%
skipfields = {'EEG', 'DisplayFeedback', 'History'};
fn = fieldnames(inputParameters.Results);
commandHistory = sprintf( '%s = pop_erplabShiftEventTime( %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
EEG = erphistory(EEG, [], 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