function a_db = XPPrange2CIPdb(filename, cip_times, cip_vals, props)

% XPPrange2CIPdb - Converts XPP model data to CIP measures database (i.e., extracts spiking measures in response to current injection).
%
% Usage: 
% a_db = XPPrange2CIPdb(filename, cip_times, cip_vals, props)
%
% Parameters:
%   filename: DAT filename obtained with the XPPAUTO's Graphics->Export
%   	data option.
%   cip_times: Start and end times of current injection [ms].
%   cip_vals: A vector of current injection (CIP) parameter values in the XPPAUTO
%   	simulation [nA]. At least provide a vector with the correct number of
%   	parameter values so the data file can be parsed. If there is only
%   	one trace, provide its applied current level as a scalar.
%   props: A structure with any optional properties.
%     recalc: If 1, overwrite DB file even if it exists.
%     Ihold: [nA] Specifies holding current if different than first step value.
%     dt: Simulation time step of recorded data [s]. Use dt*nout of XPP (Default=1e-3).
%     paramsVary: Structure with variable name associated with an
%     		array. If only one value is given cip_vals, use the
%     		values for this variable for the multiple trials found in file.
%     (others are passed to XPP2current_clamp)
%
% Returns:
%   a_db: A params_tests_db.
%
% Description:
%   Saves the database as a MAT file for loading later and it will skip
% generating the database if it finds an existing file.
%
% See also: XPP2current_clamp, plotXPPparamRanges, current_clamp
%
% $Id: XPPrange2CIPdb.m 1188 2010-04-09 19:56:27Z cengiz $
%
% Author: Cengiz Gunay <cgunay@emory.edu>, 2011/03/25

% Copyright (c) 2011 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);

file_suffix = '_db.mat';
db_file = '';

[pathstr,basename,ext] = fileparts(filename);

if ~isempty(pathstr)
  db_file = [pathstr filesep];
end
db_file = [db_file basename file_suffix];

if exist(db_file , 'file')
  disp(['Loading existing DB file: ' db_file ]);
  load(db_file);
else
  a_db = ...
      params_tests_db(XPP2current_clamp(filename, ...
                                        cip_times, cip_vals, ...
                                        props));
  disp(['Saving DB to file: ' db_file ]);
  save(db_file, 'a_db');
end