function a_md = model_data_vcs(model_f, data_vc, id, props)
% model_data_vcs - Combines model description that fits a voltage clamp data.
%
% Usage:
% a_md = model_data_vcs(model_f, data_vc, id, props)
%
% Parameters:
% model_f: Model as a param_func object or a NeuroFit file name.
% Make sure to specify required param_I_Neurofit props below.
% data_vc: Data as a voltage_clamp object directly or in a MAT file or
% from an ABF file.
% id: Identification string.
% props: A structure with any optional properties.
%
% Returns a structure object with the following fields:
% model_f, data_vc,
% model_vc: Obtained by simulating model.
%
% Description:
% For tasks such as plotting comparison of model to data and generating
% initial fits for model. Can also have a GUI here for fitting.
%
% General methods of model_data_vcs objects:
% model_data_vcs - Construct a new model_data_vcs object.
%
% Additional methods:
% See methods('model_data_vcs')
%
% See also: voltage_clamp, param_func
%
% $Id$
%
% Author: Cengiz Gunay <cgunay@emory.edu>, 2010/10/11
% Copyright (c) 2007-2010 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.
if nargin == 0 % Called with no params
a_md = struct;
a_md.model_f = param_func;
a_md.model_vc = voltage_clamp;
a_md.data_vc = voltage_clamp;
a_md.id = '';
a_md.props = struct;
a_md = class(a_md, 'model_data_vcs');
elseif isa(model_f, 'model_data_vcs') % copy constructor?
a_md = model_f;
else
if ~ exist('props', 'var')
props = struct;
end
% load model if necessary
if ischar(model_f)
[pathstr, filename, ext] = fileparts(model_f);
if strcmpi(ext, '.txt')
% assume Neurofit filename
model_f = ...
param_I_Neurofit(paramsNeurofit(model_f), ...
'I', ...
mergeStructs(props, ...
struct('tauDt', 1, 'gmaxDS', 1e-6, ...
'parfor', 1)));
elseif strcmpi(ext, '.mat')
model_f = getfield(load(model_f), 'a_model');
else
error(['Model data file ''' model_f ''' not recognized. Only Neurofit ' ...
'reports (.txt) and Matlab (.mat) files accepted.']);
end
end
% load data if necessary
if ischar(data_vc)
[pathstr, filename, ext] = fileparts(data_vc);
if strcmpi(ext, '.abf')
data_vc = ...
abf2voltage_clamp(data_vc, [ ', ' name]);
elseif strcmpi(ext, '.mat')
s = load(data_vc);
data_vc = s.sub_vc;
else
error([ 'Format of data file ''' data_vc ''' not recognized. Only know ' ...
'.MAT or .ABF files.']);
end
end
a_md = struct;
a_md.model_f = model_f;
a_md.model_vc = simModel(data_vc, model_f, props); % simulate model
a_md.data_vc = data_vc;
a_md.id = defaultValue('id', [ get(a_md.model_f, 'id') ' vs. ' get(a_md.data_vc, 'id')]);
a_md.props = props;
a_md = class(a_md, 'model_data_vcs');
end