68 lines
1.9 KiB
Mathematica
68 lines
1.9 KiB
Mathematica
|
function[baseline] = getBaseline(trial, settings)
|
||
|
%% Based on baseline interval samples, this routine
|
||
|
% determines a baseline value that can be subsequently
|
||
|
% used to correct the raw signal
|
||
|
%
|
||
|
% In this routine, currently 4 methods are available:
|
||
|
% 1) no correction
|
||
|
% 2) mean value across baseline samples
|
||
|
% 3) minimum value of all baseline samples
|
||
|
% 4) mean value for the lowest n percent of baseline samples
|
||
|
% 5) offset value for a fitted line of all baseline samples
|
||
|
|
||
|
baseline=NaN;
|
||
|
|
||
|
if isempty(trial.baseline_onset)
|
||
|
trial.baseline_onset = trial.trial_start;
|
||
|
end
|
||
|
|
||
|
if isempty(trial.baseline_offset)
|
||
|
|
||
|
if isempty(trial.stimulus_offset)
|
||
|
warning('Stimulus onset has not been set! Bailing out...');
|
||
|
return;
|
||
|
end
|
||
|
|
||
|
trial.baseline_offset = trial.stimulus_onset;
|
||
|
end
|
||
|
|
||
|
eyes = fieldnames(trial.data);
|
||
|
|
||
|
for e = 1:length(eyes)
|
||
|
eye = eyes{e};
|
||
|
signal = trial.data.(eye).uncorrected.interpolated;
|
||
|
|
||
|
if isempty(signal)
|
||
|
baseline_signal = NaN;
|
||
|
else
|
||
|
baseline_signal = trial.data.(eye).uncorrected.interpolated(intersect(find(trial.time >= trial.baseline_onset),...
|
||
|
find(trial.time < trial.baseline_offset)));
|
||
|
end
|
||
|
end
|
||
|
|
||
|
|
||
|
switch settings.BaselineCorrection
|
||
|
|
||
|
case 1
|
||
|
baseline = NaN; % No correction
|
||
|
case 2 % Mean value
|
||
|
baseline = nanmean(baseline_signal);
|
||
|
|
||
|
case 3 % Min-value between baseline
|
||
|
baseline = min(baseline_signal);
|
||
|
|
||
|
case 4 % Percentile
|
||
|
|
||
|
percentage = settings.BaselineCorrectionPercentile;
|
||
|
perc_val = prctile(baseline_signal, percentage);
|
||
|
|
||
|
baseline = perc_val; %mean(baseline_signal(find(baseline_signal <= perc_val)));
|
||
|
case 5 % Offset (fitted line)
|
||
|
P = polyfit(1:length(baseline_signal), baseline_signal, 0);
|
||
|
baseline = P(1);
|
||
|
case 6 % Fixed point
|
||
|
baseline = baseline_signam
|
||
|
end
|
||
|
end
|
||
|
|