rtsBaselineCorrect.m 1.39 KB
function R = rtsBaselineCorrect(A, b, dim)

%This function baselines an n-dimensional array given a series of points b
%B = baseline-corrected data
%A = raw data
%b = baseline points in the format [b0 b1 ... bn]
%dim = dimension along which the baseline correction will occur


%allocate space for the sub-component indices
sz = size(A);
inds = repmat({1},1,ndims(A));

%allocate space for the result
R = zeros(size(A));

%for each baseline point
for bp = 1:length(b) - 1
    
    %extract the data at the first baseline point
    n = b(bp);
    inds = getIndices(A, n, dim);
    BP1 = A(inds{:});

    %extract the data at the second baseline point
    n = b(bp+1);
    inds = getIndices(A, n, dim);
    BP2 = A(inds{:});

    %for each point in between the baseline points
    for p = b(bp):b(bp+1)

        %compute the weighting of the linear function between BP1 and BP2
        a2 = (p - b(bp))/(b(bp+1) - b(bp));
        a1 = 1.0 - a2;

        n = p;
        inds = getIndices(A, n, dim);

        baseFunc = a1 * BP1 + a2 * BP2;
        R(inds{:}) = A(inds{:}) - baseFunc;
    end
end


function I = getIndices(A, n, dim)

%this function returns indices for all elements in S at
%point n along dimension dim

sz = size(A);
I = repmat({1},1,ndims(A));

for d = 1:ndims(A)
    if d ~= dim
        I{d} = 1:sz(d);
    else
        I{d} = n;
    end
end