%[arr, Tree] = GetComb (Myarr, sorted, DivChar)
%
%This function Generates a cell-array of the different combinations of
%rows in an array.
%
%Input variables:
% Myarr: a cell array, of each row, the values of each cell will be
% combined into a single string
% sorted: boolean value: indicates whether the output arr needs to be
% sorted; if false, Tree will not be returned
% DivChar: char array: default ' / ': is the string which will separate
% different items in a row of Myarr
%
%Output variables:
% arr: a cellstring array representing the different combinations of
% rows in the input array
% Tree: the corresponding BTree object, including the positions
% of the combinations in the original array, if output is not sorted:
% then this parameter is not returned.
%
%The Biodata toolbox for MATLAB: a spectral database system for storing and
%processing spectra
%C 2004-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) 2004-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 [arr, Tree] = GetComb (Myarr, sorted, DivChar)
switch nargin
case 2
DivChar = ' / ';
case 3
if ischar (DivChar) == false
error ('Biodata:msg', 'Input parameter DivChar is not a string.');
end
if length (DivChar) == 1
if DivChar ~= ' '
DivChar = [' ' DivChar ' '];
end
end
otherwise
error ('Biodata:msg', 'Wrong number of input parameters.');
end
Tree = [];
if iscell (Myarr{1,1}) %is it a nested cell array: then it must be a column
arr = cell (length (Myarr),1);
for i = 1:length (Myarr)
arr(i) = DoComb (Myarr{i}(:)', DivChar);
end
else
arr = DoComb (Myarr, DivChar);
end
if sorted == true
Tree = BTree(arr);
[Items, arr] = GetItems(Tree); %#ok<ASGLU>
end
function arr = DoComb (Myarr, DivChar)
arr = cell (size (Myarr, 1),1); %predefine array
for p = 1:size (Myarr, 1)
tmpstr = str (Myarr{p,1});
for i=2:size (Myarr, 2)
tmp = Myarr{p,i};
t = str (tmp);
if isempty(t)
tmpstr = [tmpstr DivChar '[]']; %#ok<AGROW>
else
tmpstr = [tmpstr DivChar t]; %#ok<AGROW>
end
end
arr{p} = tmpstr;
end