function [model] = model_active(X)
%DEFPATCH1 The default model, ver 1.0
% [model] = model_v1(X)
%
% X:
% X(1) gNat
% X(2) gNap
% X(3) gKs
% X(4) gKf
%
% default: [
% model:
% E GN GI A B X0
D = 14; %The defualt diameter of the nerve fiber
R = 8.3144;
F = 96485;
%Electrical properties
T = 37;
NAi = 0.009;
NAo = 0.1442;
Ki = 0.155;
Ko = 0.003;
eNa = (R*(273.15+T)/F)*log(NAo/NAi);
eK = (R*(273.15+T)/F)*log(Ko/Ki);
G = geometry(D);
[Cn,Ci,Cm] = electrical(G);
Ril = 41*1e6;
E = [Cn Ci Cm Ril eNa eK];
%Rate constants
q10m = 2.2;
q10h = 2.9;
q10p = 2.2;
q10n = 3.0;
q10s = 3.0;
Enap = -20;
A = [ q10(q10m,T)*1.86 -18.4 10.3;...
q10(q10h,T)*0.0336 -111.0 11;...
q10(q10p,T)*0.93 -18.4+Enap 10.3;...
q10(q10n,T)*0.00798 -93.2 1.1;...
q10(q10s,T)*0.00122 -12.5 16.9];
B = [ q10(q10m,T)*0.086 -22.7 9.16;...
q10(q10h,T)*2.3 -28.8 13.4;...
q10(q10p,T)*0.043 -22.7+Enap 9.16;...
q10(q10n,T)*0.0142 -76 10.5;...
q10(q10s,T)*0.000739 -80.1 12.6];
%The node
Vr = -83.5*1e-3;
m0n = m0(Vr*1e3,A,B);
h0n = h0(Vr*1e3,A,B);
p0n = p0(Vr*1e3,A,B);
n0n = n0(Vr*1e3,A,B);
s0n = s0(Vr*1e3,A,B);
area_n = (Cn+Cm)/1.4e-12;
area_i = Ci/1.4e-12;
gNap_n = 13*1000;
fracNap = 2.5/100;
gNaf_n = (1-fracNap) * gNap_n*2*pi*G.dn*G.l*X(1);
gNap_n = fracNap * gNap_n*2*pi*G.dn*G.l*X(2);
gKs_n = 800*2*pi*G.dn*G.l*X(3);
gKf_n = area_n * 15e-9 *X(4);
GN = [gNaf_n gNap_n gKf_n gKs_n];
%The internode
In = Iion_n(Vr,m0n,h0n,p0n,n0n,s0n,eNa,eK,gNaf_n,gNap_n,gKs_n,gKf_n);
Vi = Ril*In+Vr;
m0i = m0(Vi*1e3,A,B);
h0i = h0(Vi*1e3,A,B);
s0i = s0(Vi*1e3,A,B);
gNaf_i = 0;
gKs_i = X(2)*gKs_n*X(3);
eL_i = eNa;
Ii = Iion_i(Vi,m0i,h0i,s0i,eNa,eK,gNaf_i,gKs_i,0,0);
gL_i = -((Vi - Vr)/Ril + Ii)/(Vi-eL_i);
GI = [gNaf_i gKs_i gL_i eL_i];
X0 = [Vr Vi m0n h0n p0n n0n s0n m0i h0i s0i];
% E GN GI A B X0
model.PAR = X;
model.E = E;
model.GN = GN;
model.GI = GI;
model.A = A;
model.B = B;
model.X0 = X0;
function [k] = q10(q,T)
%Q10 Caculate the Q10 Factor
% [k] = q10(q,Th,Tl) this function returns the q10 factor with
% which the gating coefficients should be scaled in order to
% obtain a model for a higher temperatures than the original data
% was recorded with.
k = q^((T-20)/10);
return
function [x] = type1(E,A,B,C)
x = A*(E-B)/(1 - exp((B-E)/C));
return
function [x] = type2(E,A,B,C)
x = A*(B-E)/(1 - exp((E-B)/C));
return
function [x] = type3(E,A,B,C)
x = A./(1+exp((B-E)/C));
return
function [x] = m0(E,A,B)
alpha = type1(E,A(1,1),A(1,2),A(1,3));
beta = type2(E,B(1,1),B(1,2),B(1,3));
x = alpha/(alpha+beta);
return
function [x] = h0(E,A,B)
alpha = type2(E,A(2,1),A(2,2),A(2,3));
beta = type3(E,B(2,1),B(2,2),B(2,3));
x = alpha/(alpha+beta);
return
function [x] = p0(E,A,B)
alpha = type1(E,A(3,1),A(3,2),A(3,3));
beta = type2(E,B(3,1),B(3,2),B(3,3));
x = alpha/(alpha+beta);
return
function [x] = n0(E,A,B)
alpha = type1(E,A(4,1),A(4,2),A(4,3));
beta = type2(E,B(4,1),B(4,2),B(4,3));
x = alpha/(alpha+beta);
return
function [x] = s0(E,A,B)
alpha = type1(E,A(5,1),A(5,2),A(5,3));
beta = type2(E,B(5,1),B(5,2),B(5,3));
x = alpha/(alpha+beta);
return
function [I] = Iion_n(E,m,h,p,n,s,eNa,eK,gNaf,gNap,gKs,gKf)
iNaf = gNaf*(m^3)*h*(E-eNa);
iNap = gNap*(p^3)*(E-eNa);
iKs = gKs*s*(E-eK);
iKf = gKf*(n^4)*(E-eK);
I = iNaf + iNap + iKs + iKf;
return
function [I] = Iion_i(E,m,h,s,eNa,eK,gNaf,gKs,gL,eL)
iNaf = gNaf*(m^3)*h*(E-eNa);
iKs = gKs*s*(E-eK);
iL = gL*(E-eL);
I = iNaf + iKs + iL;
return