function [varargout] = hh(varargin)
%1='m','h','alfam','alfah','betam','betah'
%2=V[1:#node]
%3 (for m&h, old mgate & hgate have to be supplied
%4 = dt
persistent q10;
action=varargin{1};
switch action
case 'Initial'
model=[];%remove the old model
%-----------------------
model.name='hh';
%-----------------------
model.gate{1}='m';
model.gate{2}='h';
model.gate{3}='n';
%-----------------------
model.I{1}.name='Na';
model.I{1}.G=120; %(kOhm-Cm^2)^-1
model.I{1}.E=55; %(mV)
model.I{1}.gate=[1 3;
2 1]; %gate1^3.gate2^1
model.I{2}.name='K';
model.I{2}.G=36;
model.I{2}.E=-72;
model.I{2}.gate=[3 4];
model.I{3}.name='Lk';
model.I{3}.G=0.3;
model.I{3}.E=-49.4001;
model.I{3}.gate=[];
%-----------------------
%optional
model.vini=-60;
model.temperature=6;
%-----------------------
varargout{1}=model;
case 'setting'
%Setting is called every calculation
q=3;
q10=q^((varargin{2}-6.3)/10);
case 'm'
%v=varargin{2};
%gate=varargin{3};
%dt=varargin{4};
varargout{1}=Gate_Trap(varargin{3},varargin{4},hh('m_alfa',varargin{2}),hh('m_beta',varargin{2}));
case 'm_alfa'
%v=varargin{2};
varargout{1}= -0.1*q10*(varargin{2}+35)./( exp(-(varargin{2}+35)/10) -1 );
case 'm_beta'
%v=varargin{2};
varargout{1}=4*q10*exp( -(varargin{2}+60)/18 );
case 'h'
%v=varargin{2};
%gate=varargin{3};
%dt=varargin{4};
varargout{1}=Gate_Trap(varargin{3},varargin{4},hh('h_alfa',varargin{2}),hh('h_beta',varargin{2}));
case 'h_alfa'
%v=varargin{2};
varargout{1}=0.07*q10*exp( -(varargin{2}+60)/20);
case 'h_beta'
%v=varargin{2};
varargout{1}=q10./( exp(-(varargin{2}+30)/10) +1 );
case 'n'
%v=varargin{2};
%gate=varargin{3};
%dt=varargin{4};
varargout{1}=Gate_Trap(varargin{3},varargin{4},hh('n_alfa',varargin{2}),hh('n_beta',varargin{2}));
case 'n_alfa'
%v=varargin{2};
varargout{1}= -0.01*q10*(varargin{2}+50)./( exp( -(varargin{2}+50)/10 ) - 1 );
case 'n_beta'
%v=varargin{2};
varargout{1}=0.125*q10*exp( -(varargin{2}+60)/80);
otherwise
disp(':(')
end