function data = dsImportCSV(file)
%IMPORTCSV - load CSV data into DynaSim formatted data structure.
%
% Usage:
%   data=dsImportCSV(csvfile)
%
% Inputs:
%   - datafile: CSV file organized according to output from dsWriteDynaSimSolver
%
% Outputs:
%   - DynaSim data structure:
%     data.(state_variables)
%     data.(monitors)
%     data.time
%     data.simulator_options
%
% Note:
%   - CSV file structure assumes CSV file contains data organized according to
%   output from dsWriteDynaSimSolver: time points along rows; state variables and
%   monitors are columns; first column is time vector; next columns are state
%   variables; final columns are monitors. first row has headers for each
%   column. if a population has more than one cell, different cells are
%   sequential columns with same header repeated for each cell.
%
% See also: dsImport
% 
% Author: Jason Sherfey, PhD <jssherfey@gmail.com>
% Copyright (C) 2016 Jason Sherfey, Boston University, USA

% check inputs
if ~exist(file,'file')
  error('file not found.');
end

% load data
contents=importdata(file,',');
fields=unique_wrapper(contents.colheaders,'stable');
data.labels=fields([2:length(fields) 1]); % move time vector to end of labels
for i=1:length(fields)
  data.(fields{i})=contents.data(:,ismember(contents.colheaders,fields{i}));
end
data.datafile=file;