function [param_mat,varied,param_cell] = dsCollectVariedParams(data, varargin)
%COLLECTVARIEDPARAMS - Gathers info on parameters that have been varied in a batch
%
% Usage: [deprecated?]
%   [all_values,param_names,unique_values]=dsCollectVariedParams(data)
%
% Inputs:
%   - data: DynaSim data structure
%
% Outputs:
%   - all_values: [num_sets x num_params_varied], values used for each data set
%   - param_names: list of names of varied parameters
%   - unique_values: cell array of unique values used for each varied  parameter
% 
% Author: Jason Sherfey, PhD <jssherfey@gmail.com>
% Copyright (C) 2016 Jason Sherfey, Boston University, USA

% Check inputs
%% auto_gen_test_data_flag argin
options = dsCheckOptions(varargin,{'auto_gen_test_data_flag',0,{0,1}},false);
if options.auto_gen_test_data_flag
  varargs = varargin;
  varargs{find(strcmp(varargs, 'auto_gen_test_data_flag'))+1} = 0;
  varargs(end+1:end+2) = {'unit_test_flag',1};
  argin = [{data}, varargs]; % specific to this function
end

if ~isstruct(data)
  fprintf('input must be a structure...exiting dsCollectVariedParams.\n');
  return;
end
if ~isfield(data,'varied')
  fprintf('no varied info in data.\n');
  return;
end

% collect info on parameters varied
varied=data(1).varied;
num_varied=length(varied); % number of model components varied across simulations
num_sims=length(data); % number of data sets (one per simulation)

% collect info on parameters varied
param_mat=zeros(num_sims,num_varied); % values for each simulation
param_cell=cell(1,num_varied); % unique values for each parameter

% loop over varied components and collect values
for j=1:num_varied
  if isnumeric(data(1).(varied{j}))
    param_mat(:,j)=[data.(varied{j})]; % values for each simulation
    param_cell{j}=unique([data.(varied{j})]); % unique values for each parameter
  else
    % TODO: handle sims varying non-numeric model components
    % (eg, mechanisms) (also in dsPlotFR and dsSelect)
  end
end

%% auto_gen_test_data_flag argout
if options.auto_gen_test_data_flag
  argout = {param_mat, varied, param_cell}; % specific to this function
  
  dsUnitSaveAutoGenTestData(argin, argout);
end