%function [data, mi, norms] = TransNorm(data, NormMethod);
%
%This function normalizes the data of the Biodata object in an alternative
%way. First TransNorm will substract the minimum value of each spectrum.
%Afterwards the normalisation is executed. One can choose to normalize by
%dividing all values of one spectrum
% - with the maximum value of that spectrum
% - with the length (or norm) of that vector
%
%Input parameters:
% - data: the datamatrix
% - NormMethod: method of normalisation: if
% 'Max': division by the maximum value of each spectrum
% 'Len': division by norm of each spectrum after substraction of
% the minimum value
%
%Output parameters:
% - data: the normalized spectra
% - mi: the minima of the spectra
% - norms: the normalisation factor
%
%Example:
% load data
% xaxis = 1:size(data,2);
% subplot (3,1,1);
% plot (xaxis, data);
% title ('Original dataset');
% subplot (3, 1, 2);
% plot (xaxis, TransNorm (data, 'Max'));
% title ('Normalized by maximum');
% subplot (3, 1, 3);
% plot (xaxis, TransNorm (data, 'Len'));
% title ('Normalized by vector length');
%The Biodata toolbox for MATLAB: a spectral database system for storing and
%processing spectra
%C 2005-2008, Kris De Gussem, Raman Spectroscopy Research Group, Department
%of analytical chemistry, Ghent University
%C 2009 Kris De Gussem
%
%This file is part of Biodata.
%
%Biodata is free software: you can redistribute it and/or modify
%it under the terms of the GNU General Public License as published by
%the Free Software Foundation, either version 3 of the License, or
%(at your option) any later version.
%
%Biodata is distributed in the hope that it will be useful,
%but WITHOUT ANY WARRANTY; without even the implied warranty of
%MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
%GNU General Public License for more details.
%
%You should have received a copy of the GNU General Public License
%along with Biodata. If not, see <http://www.gnu.org/licenses/>.
%Copyright (c) 2005-2009, Kris De Gussem
%All rights reserved.
%
%Redistribution and use in source and binary forms, with or without
%modification, are permitted provided that the following conditions are
%met:
%
% * Redistributions of source code must retain the above copyright
% notice, this list of conditions and the following disclaimer.
% * Redistributions in binary form must reproduce the above copyright
% notice, this list of conditions and the following disclaimer in
% the documentation and/or other materials provided with the distribution
% * Neither the name of Raman Spectroscopy Research Group, Department of
% analytical chemistry, Ghent University nor the names
% of its contributors may be used to endorse or promote products derived
% from this software without specific prior written permission.
%
%THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
%AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
%IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
%ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
%LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
%CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
%SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
%INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
%CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
%ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
%POSSIBILITY OF SUCH DAMAGE.
function [data, mi, norms] = TransNorm(data, NormMethod)
switch nargin
case 1
NormMethod = 'Len';
case 2
otherwise
error ('Biodata:msg', 'Wrong number of input parameters...');
end
si = size (data,2);
mi = min (data, [], 2);
data = data - repmat (mi, 1, si);
switch NormMethod
case 'Max'
norms = max(data,[], 2);
data = data ./ repmat (norms, 1, size (data,2));
case 'Len'
[data, norms] = normaliz (data);
otherwise
error ('Biodata:msg', 'Unsupported value for normalization method. See help Biodata/TransNorm...')
end