function a_db = mergePages(db, page_tests, page_suffixes)

% mergePages - Merges tests from separate pages into a 2D params_tests_db.
%
% Usage:
% a_db = mergePages(db, page_tests, page_suffixes)
%
% Description:
%   Keeps uniqueness by adding suffixes to test names.
% If you're using invarParams, do swapRowsPages, then use joinRows with original db to get
% the parameter values.
%
%   Parameters:
%	db: A tests_3D_db object.
%	page_tests: Cell array of list of tests to take from each page.
%	page_suffixes: Cell array of suffixes to append to tests from each page.
%		
%   Returns:
%	a_db: A tests_db object.
%
% See also: tests_db, tests_3D_db, tests_db/joinRows
%
% $Id$
%
% Author: Cengiz Gunay <cgunay@emory.edu>, 2005/01/13

% Copyright (c) 2007 Cengiz Gunay <cengique@users.sf.net>.
% This work is licensed under the Academic Free License ("AFL")
% v. 3.0. To view a copy of this license, please look at the COPYING
% file distributed with this software or visit
% http://opensource.org/licenses/afl-3.0.php.

% For each page to get tests from
num_pages = length(page_tests);

%dbs = repmat(tests_3D_db, num_pages, 1);

row_index_col = [];
if isfield(get(db, 'col_idx'), 'RowIndex')
  row_index_col = tests2cols(db, 'RowIndex');
end

% Get desired tests from each page
num_tests = 0;
tests_list = cell(1, num_pages);
for page_num=1:num_pages
  tests = tests2cols(db, page_tests{page_num});

  % Add the RowIndex column even if it's not specified
  % (only for suffixes that hasn't been used yet)
  if ~isempty(row_index_col) && length(find(row_index_col == tests)) == 0 && ...
	length(find(strmatch(page_suffixes{page_num}, {page_suffixes{1:page_num}}))) == 1
    tests = [tests, row_index_col];
  end

  % Count tests
  num_tests = num_tests + length(tests);
  tests_list{page_num} = tests;
end

% New data matrix
data = repmat(NaN, dbsize(db, 1), num_tests);

% Fill data matrix
num_tests = 0;
all_tests = {};
orig_tests = fieldnames(get(db, 'col_idx'));
for page_num=1:num_pages
  tests = tests_list{page_num};
  %these_tests = fieldnames(get(dbs(page_num), 'col_idx'));
  these_tests = orig_tests(tests);
  for test_num = 1:length(these_tests)
    these_tests{test_num} = [ these_tests{test_num} page_suffixes{page_num} ];
  end
  all_tests = { all_tests{:}, these_tests{:}};
  data(:, (num_tests + 1):(num_tests + length(these_tests))) = ...
      get(onlyRowsTests(db, ':', tests, page_num), 'data');
  num_tests = num_tests + length(these_tests);
end

% Create the new db
a_db = tests_db(data, all_tests, {}, get(db, 'id'), get(db, 'props'));
