function [data_table,column_titles] = dsDataField2Table (data,fieldname,verbose_flag)
% Converts DynaSim structure to 1D cell array format. Later can use to
% import to MDD. In this case, pulls out a specific field from data,
% along with the varied information.
if nargin < 3
verbose_flag = 0;
end
% Create dummy varied variable if none there
for i = 1:length(data)
if ~isfield(data(i),'varied')
data(i).varied = [];
end
if isempty(data(i).varied)
data(i).varied = {'Varied1'}; % Random name for varied data
data(i).Varied1 = i; % Random value
end
end
% ## VARIED parameter sweeps ##
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)
%param_mat=zeros(num_sims,num_varied); % values for each simulation
for j=1:num_varied
if isnumeric(data(1).(varied{j}))
params{j} = [data.(varied{j})]; % values for each simulation
else
for i = 1:length(data)
params{j}{i} = data(i).(varied{j}); %vals for each sim
end
end
end
% ## Build a large linear list ##
z=0;
num_alllabels = 1;
for i = 1:num_sims
for k = 1:num_alllabels
z=z+1;
data_linear{z} = data(i).(fieldname);
% Number of parameter sweeps, plus populations, plus variables (Vm, state variables, functions, etc.)
for j = 1:num_varied
if isnumeric(data(1).(varied{j})); ax{j}(z) = params{j}(i);
else
ax{j}{z} = params{j}{i};
end
end
end
end
ax_names = varied;
% Transpose everything to make it in terms of columns instead of rows.
data_linear = data_linear(:);
for i = 1:length(ax)
ax{i} = ax{i}';
end
% Combine everything into one data table
data_table = horzcat({data_linear},ax);
% List table column names
column_titles = {'data',ax_names{:}};
if verbose_flag
previewTable(data_table,column_titles);
end
end