%% hh_phaseplane.m
%%
%% numerical phase-plane analysis of the Hodgkin-Huxley neuron.
%% needs data files phaseplane.txt and AP.txt written by
%% test_hh_phaseplane.sli
%% author Sven Schrader, Feb 2007

phasefile='phaseplane.txt';
apfile='AP.txt';

if( (exist(phasefile) ~= 2) | (exist(apfile) ~= 2) )
    error('could not find data file(s). Make sure you have run test_hh_phaseplane.sli!');
end

x=load(phasefile);
t=size(x,1);

V=unique(x(:,1));
n=unique(x(:,2));

r1=abs(reshape(x(:,3),length(n),length(V)));
r2=abs(reshape(x(:,4),length(n),length(V)));
 
nc_v=[];
nc_n=[];
count_v=0;
count_n=0;

f=figure; a=axes; hold on;

nullcline_V=[];
nullcline_n=[];
ncount=1;
vcount=1;

disp('searching nullclines');
for i=1:length(V)
  [dummy index] =  min(r1(:,i));
    if(index ~= 1 & index~=length(n))
      nullcline_V(vcount,:)= [V(i), n(index)];
      vcount=vcount+1;
  end
 
  [dummy index] =  min(r2(:,i));
  if(index ~= 1 & index~=length(n))
      nullcline_n(ncount,:)= [V(i), n(index)];
      ncount=ncount+1;
  end
  
end

disp('plotting vector field')
factor=0.1;
for i=1:3:t
    plot([x(i,1) x(i,1)+factor*x(i,3)], [x(i,2)  x(i,2)+factor*x(i,4)],'COLOR',[0.6 0.6 0.6]);
end

plot(nullcline_V(:,1), nullcline_V(:,2),'r','linewidth',2);
plot(nullcline_n(:,1), nullcline_n(:,2),'b','linewidth',2);

xlim([V(1) V(end)])
ylim([n(1) n(end)])

ap=load('AP.txt');
plot(ap(:,1),ap(:,2),'k','linewidth',1 )

% due to a 'legend' problem, the plot-order needs to be changed
ch=get(a,'Children');
set(a,'Children', flipud(ch))
legend('action potential','n-nullcline','V-nullcline');
set(a,'Children', (ch))

box on
set(a,'Layer','top')

xlabel('membrane potential V (mV)')
ylabel('inactivation variable n')
title('Phase space of the Hodgkin-Huxley Neuron')