101 lines
3.8 KiB
Matlab
101 lines
3.8 KiB
Matlab
function[obj] = setFailSafePatternRelativeToPattern(obj, relativeTotype,type, timing)
|
|
%% Specify a new marker/pattern relative in time to an existing pattern
|
|
% time should be milliseconds (ms).
|
|
|
|
if ~isnumeric(timing)
|
|
error('Timing is not numeric');
|
|
end
|
|
|
|
ton_codings = {'trial onset','trial on', 'start trial', 'trial start', 'trial_start'};
|
|
toff_codings = {'trial offset','trial off', 'end trial', 'trial end', 'trial_end'};
|
|
|
|
son_codings = {'stimulus onset','stimulus on', 'soa', 'stim on', 'stim_on'};
|
|
soff_codings = {'stimulus offset','stimulus off', 'stim off', 'stim_off'};
|
|
|
|
bon_codings = {'baseline on', 'baseline start', 'baseline onset', 'bl on', 'bl'};
|
|
boff_codings = {'baseline off', 'baseline end', 'baseline offset', 'bl off'};
|
|
|
|
|
|
%% check whether the type exists, otherwise no failsafe is possible
|
|
ton = ismember(lower(type), ton_codings);
|
|
toff = ismember(lower(type), toff_codings);
|
|
|
|
son = ismember(lower(type), son_codings);
|
|
soff = ismember(lower(type), soff_codings);
|
|
|
|
bon = ismember(lower(type), bon_codings);
|
|
boff = ismember(lower(type), boff_codings);
|
|
|
|
type_list = [ton toff son soff bon boff];
|
|
existing_type_ind = find(type_list==1);
|
|
if isempty(existing_type_ind)
|
|
error('No correct type entered');
|
|
else
|
|
err=0;
|
|
switch typeexisting_type_ind_ind
|
|
case 1
|
|
if (isempty(obj.trial_start_pattern)), err=1; else target = 'trial_start'; end
|
|
case 2
|
|
if (isempty(obj.trial_end_pattern)), err=1; else target = 'trial_end'; end
|
|
case 3
|
|
if (isempty(obj.stimulus_onset_pattern)), err=1; else target = 'stimulus_onset'; end
|
|
case 4
|
|
if (isempty(obj.stimulus_offset_pattern)), err=1; else target = 'stimulus_offset'; end
|
|
case 5
|
|
if (isempty(obj.baseline_onset_pattern)), err=1; else target = 'baseline_onset'; end
|
|
case 6
|
|
if (isempty(obj.baseline_offset_pattern)), err=1; else target = 'baseline_offset'; end
|
|
end
|
|
end
|
|
|
|
if err
|
|
error('Failsafe for empty type is not allowed');
|
|
end
|
|
|
|
|
|
|
|
%% check for valid relativeTotype
|
|
ton = ismember(lower(relativeTotype), ton_codings);
|
|
toff = ismember(lower(relativeTotype), toff_codings);
|
|
|
|
son = ismember(lower(relativeTotype), son_codings);
|
|
soff = ismember(lower(relativeTotype), soff_codings);
|
|
|
|
bon = ismember(lower(relativeTotype), bon_codings);
|
|
boff = ismember(lower(relativeTotype), boff_codings);
|
|
|
|
types = [ton toff son soff bon boff];
|
|
|
|
type_ind = find(types==1);
|
|
|
|
if isempty(type_ind)
|
|
error('No correct type entered');
|
|
else
|
|
err=0;
|
|
switch type_ind
|
|
case 1
|
|
if (isempty(obj.trial_start_pattern)), err=1; else target = 'trial_start'; end
|
|
case 2
|
|
if (isempty(obj.trial_end_pattern)), err=1; else target = 'trial_end'; end
|
|
case 3
|
|
if (isempty(obj.stimulus_onset_pattern)), err=1; else target = 'stimulus_onset'; end
|
|
case 4
|
|
if (isempty(obj.stimulus_offset_pattern)), err=1; else target = 'stimulus_offset'; end
|
|
case 5
|
|
if (isempty(obj.baseline_onset_pattern)), err=1; else target = 'baseline_onset'; end
|
|
case 6
|
|
if (isempty(obj.baseline_offset_pattern)), err=1; else target = 'baseline_offset'; end
|
|
end
|
|
end
|
|
|
|
if err
|
|
error('Dependent type has not been defined');
|
|
end
|
|
|
|
if (ismember(lower(type), ton_codings)) obj.trial_start_pattern = {timing target}; end
|
|
if (ismember(lower(type), toff_codings)) obj.trial_end_pattern = {timing target}; end
|
|
if (ismember(lower(type), son_codings)) obj.stimulus_onset_pattern = {timing target}; end
|
|
if (ismember(lower(type), soff_codings)) obj.stimulus_onset_pattern = {timing target}; end
|
|
if (ismember(lower(type), bon_codings)) obj.baseline_onset_pattern = {timing target}; end
|
|
if (ismember(lower(type), boff_codings)) obj.baseline_offset_pattern = {timing target}; end
|