// Potassium channel from original HH model
// Voltage clamp simulations with non-stationary noise analysis
// UNcoupled activation particles (2-state independent particles), Diffusion approximation algorithm
// See "StochHH_K5 CWopt Vclamp noise.sci" for more comments
stacksize('max');
nsim=200; //number of sweeps to be simulated
Tstop=6; dt=0.001; //Total time and dt in ms
points = round(Tstop/dt) //number of points per sweep
NK=300; //number of potassium channels
Vhold=-90; //voltage at t=0
Vtest=70;
rand('uniform');
tic();
p=1;
Norec = zeros(points,nsim);
v = Vhold*ones(1,nsim);
alpha_n=0.01*(v+55)./(1-exp(-(v+55)/10));
beta_n=0.125*exp(-(v+65)/80);
n=ones(1,nsim)./(1+beta_n./alpha_n);
Nn=round(n*NK*4); //number of ACTIVE 'n' particles (the total is 4*NK)
v = Vtest*ones(1,nsim);
alpha_n=0.01*(v+55)./(1-exp(-(v+55)/10));
beta_n=0.125*exp(-(v+65)/80);
next_evn=-log(1-rand())./(Nn.*beta_n + (NK*4-Nn).*alpha_n);
for t = dt:dt:Tstop
Norec(p,:)=round(NK*(Nn/(4*NK)).^4);
p=p+1;
while or(t>=next_evn)
//'ii' contains the indices of simulations (sweeps) where a transition has to occur
ii=find(t>=next_evn);
//If rand() < active*beta / (active*beta + inactive*alpha)
//Then a particle will inactivate; otherwise a particle will activate
Nn(ii)=Nn(ii)+1-2*(rand(1,size(ii,'*'))<=(Nn(ii).*beta_n(ii)./(Nn(ii).*beta_n(ii)+(NK*4-Nn(ii)).*alpha_n(ii))));
prev_ev=next_evn(ii);
next_evn(ii)=prev_ev-log(1-rand())./(Nn(ii).*beta_n(ii) + (NK*4-Nn(ii)).*alpha_n(ii));
end
end
time=toc()
printf("time = %g\n",time);
scf(0);
clf
plot(dt:dt:Tstop,Norec)
scf(1);
clf
plot(dt:dt:Tstop,[mean(Norec,2),variance(Norec,2)])
scf(2);
clf
plot(mean(Norec,2),variance(Norec,2))