function a_tests_db = diff2D(a_db, test, props)
% diff2D - Creates a tests_db by taking the derivative of the given test.
%
% Usage:
% a_tests_db = diff2D(a_db, test, props)
%
% Description:
% Applies the diff function to the chosen test, and collapses the middle
% dimension of the 3D DB to create a 2D DB and transposes it. The result is
% that the pages of the 3D DB becomes the rows of the new database, and the
% differenced rows appear as new columns, each named uniquely. The column
% index would correspons to the row index in the 3D DB. A new column
% 'PageNumber' is appended to point back to the 3D DB.
%
% Parameters:
% a_db: A tests_3D_db object.
% test: Test column.
% props: Optional properties.
%
% Returns:
% a_tests_db: A tests_db that holds the requested differences of parameter values.
%
% See also: boxplot, plot_abstract
%
% $Id$
%
% Author: Cengiz Gunay <cgunay@emory.edu>, 2005/05/22
% 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.
if ~ exist('props', 'var')
props = struct([]);
end
if dbsize(a_db, 1) <= 1
error('More than one row is required to take diffs!');
end
test_names = fieldnames(get(a_db, 'col_idx'));
col_names = {};
for col=1:(dbsize(a_db, 1) - 1)
col_names{col} = [ 'd' num2str(col) '_' num2str(col + 1) ];
end
a_db_props = get(a_db, 'props');
db_id = [ 'Change of ' test_names{tests2cols(a_db, test)} ...
' between levels of ' a_db_props.invarName ];
a_tests_db = ...
tests_db([ permute(diff(get(onlyRowsTests(a_db, ':', test), 'data')), [3 1 2]), (1:dbsize(a_db, 3))'], ...
{ col_names{:}, 'PageIndex' }, {}, db_id);