function p_hists = paramsHists(a_db, props)
% paramsHists - Calculates histograms for all parameters and returns in a
% cell array.
%
% Usage:
% p_hists = paramsHists(a_db, props)
%
% Parameters:
% a_db: A tests_db object.
% props: A structure with any optional properties.
% paramVals: Array of histogram bins to use as parameter values.
%
% Returns:
% p_hists: An array of histograms for each parameter in a_db.
%
% Description:
% Useful for looking at subset databases and find out what parameter
% values are used most. Skips the 'ItemIndex' column(s). Finds unique values
% of each parameter to make histograms.
%
% See also: params_tests_profile
%
% $Id$
%
% Author: Cengiz Gunay <cgunay@emory.edu>, 2004/10/20
% Copyright (c) 2007-14 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.
props = defaultValue('props', struct);
% TODO: use regexp column matching here
colnames = fieldnames(get(a_db, 'col_idx'));
itemsFound = strfind(colnames, 'Index');
itemIndices = false(1, length(itemsFound));
for i=1:length(itemsFound)
if length(itemsFound{i}) > 0
itemIndices(i) = true(1);
end
end
% Strip out the NeuronId columns from parameters
colnames = setdiff(colnames(1:a_db.num_params), {'NeuronId', colnames{find(itemIndices)}});
% Preserve original column order
cols = sort(tests2cols(a_db, colnames));
% Filter relevant columns
reduced_db = onlyRowsTests(a_db, ':', cols);
num_params = reduced_db.num_params;
[p_hists(1:num_params)] = deal(histogram_db);
for param_num=1:num_params
% First find all unique values of the parameter
param_cols = sortrows(get(onlyRowsTests(reduced_db, ':', param_num), 'data'));
param_vals = ...
getFieldDefault(props, 'paramVals', ...
sortedUniqueValues(param_cols));
% Give the param_vals as bin centers
if length(param_vals) == 1
param_vals = 1; % A single histogram bin
end
p_hists(param_num) = histogram(reduced_db, param_num, param_vals');
end