% example: create a logsig param_func for an activation variable
a_ps = param_func({'voltage [mV]', 'activation'}, [-50 10], {'V_half', 'k'}, ...
                 @(p,x) 1./(1 + exp((x-p(1)) ./ p(2))), ...
                 'inactivation', ...
                 struct('xMin', -100, 'xMax', 100))

% more direct way of creating act/inact curves
a_pa = param_act([-1 1], 'inactivation')
plot(a_pa)

% this time define ranges, so parameter values become ratios
a_pi = param_act([-50 10], 'inactivation', ...
                 struct('paramRanges', ...
                        [-80 0; 1 30]'))

getParams(a_pi, struct('direct', 1))
getParams(a_pi)
a_pi = setParams(a_pi, [0.7 0.5], struct('direct', 1))

% this is an activation gate
a_pa = param_act([-30 -10], 'activation', ...
                 struct('paramRanges', ...
                        [-70 0; -30 -1]'))

% V-dep tau curve
a_p_tau_v = param_tau_v([ 0.9450    1.8440  -14.8100   12.3900], 'tau')

% create an activation variable dependent on time
a_act_t = param_act_t(-90, 20, a_pa, a_p_tau_v, 'an act. gate');
a_inact_t = param_act_t(-90, 20, a_pi, a_p_tau_v, 'an inact. gate');

% create current
a_cur = ...
    param_I_t([3 1 -80 20 10], a_act_t, a_inact_t, 'act-inact cur');

% try with multiple voltage steps
a_act_t = param_act_t(-90, [20; 30], a_pa, a_p_tau_v, 'an act. gate');
a_inact_t = param_act_t(-90, [20; 30], a_pi, a_p_tau_v, 'an inact. gate');

a_cur = ...
    param_I_t([3 1 10 -80], [20; 30], a_act_t, a_inact_t, 'act-inact cur');


% TODO: 
% - create subclass for defining logsig functions easily
% - override plot commands
% - implement ranges
% - make ui to change params and ranges
% - embed uis from a master object