function a_plot = plot_abstract(a_stats_db, title_str, props)
% plot_abstract - Generates an error bar graph for each db columns.
%
% Usage:
% a_plot = plot_abstract(a_stats_db, title_str, props)
%
% Description:
% Generates a plot_simple object from this histogram. Looks for 'mean',
% 'min', 'max', and 'STD' labels in the row_idx for drawing the
% errorbars. Each column of a_stats_db is shown in a separate
% axis. Values from multiple pages of a_stats_db are shown as distinct
% points in the axis.
%
% Parameters:
% a_stats_db: A histogram_db object.
% title_str: A title string on the plot
% props: A structure with any optional properties.
%
% Returns:
% a_plot: A object of plot_abstract or one of its subclasses.
%
% See also: plot_abstract, plot_simple
%
% $Id$
%
% Author: Cengiz Gunay <cgunay@emory.edu>, 2004/10/08
% 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('title_str', 'var')
title_str = '';
end
if ~ exist('props', 'var')
props = struct([]);
end
% Setup lookup tables
col_names = properTeXLabel(fieldnames(get(a_stats_db, 'col_idx')));
data = get(a_stats_db, 'data');
row_idx = get(a_stats_db, 'row_idx');
if isfield(row_idx, 'mean')
mids = data(row_idx.mean, :, :);
elseif isfield(row_idx, 'median')
mids = data(row_idx.median, :, :);
else
disp('Row names:')
disp(fieldnames(row_idx));
error('Cannot find the middle values from the above row names in stats_db.');
end
if isfield(row_idx, 'min')
lows = mids - data(row_idx.min, :, :);
elseif isfield(row_idx, 'STD')
lows = data(row_idx.STD,:, :);
highs = data(row_idx.STD,:, :);
elseif isfield(row_idx, 'SE')
lows = data(row_idx.SE,:, :);
highs = data(row_idx.SE,:, :);
end
if isfield(row_idx, 'max')
highs = data(row_idx.max,:, :) - mids;
end
stats_props = get(a_stats_db, 'props');
if isfield(stats_props, 'axis_limits')
axis_limits = stats_props.axis_limits;
else
axis_limits = [];
end
swaprowspages = [3 2 1];
mids = permute(mids, swaprowspages);
lows = permute(lows, swaprowspages);
highs = permute(highs, swaprowspages);
a_plot = plot_errorbars(mids, lows, highs, ...
col_names, [ get(a_stats_db, 'id') title_str], ...
axis_limits, ...
mergeStructs(props, stats_props));