%%% eVal = [number of inputs, rise_time, fall_time] (epsp)
%%% iVal = [number of inputs, rise_time, fall_time] (ipsp)
function [tv,epsp_data, ipsp_data, spike_data] = epsp_ipsp(eVal,iVal)
%%% Create Inputs %%%%%
span=50; %msec
e_input=zeros(1,span+1);
i_input=e_input;
%%% set epsp input; spreads input evenly over 50 msec
e_taur=eVal(2);
e_tauf=eVal(3);
if (eVal(1))
gap1=span/(eVal(1)+1);
p1=floor(1:gap1:span);
e_input(p1)=1;
e_input=e_input(2:span+1);
end
%%% set ipsp input; spreads input evenly over 50 msec
i_taur=iVal(2);
i_tauf=iVal(3);
if (iVal(1))
gap2=span/(iVal(1)+1);
p2=floor(1:gap2:span);
i_input(p2)=1;
i_input=i_input(2:span+1);
end
%General parameters
dt = 0.005; %Integration step (ms) Note that dt=0.05 leads to errors
dt_len=round(1/dt);
len=span*dt_len;
g_E = zeros(1,len); %Conductance for epsp to post
g_I = g_E; %Conductance for ipsp to post
w_E=eVal(4)*0.001;%0.005; %strength of epsp (based on distance from soma 0=far
w_I=iVal(4)*0.001;%0.015; %strength of ipsp (based on distance from soma 0=far
E_12 = 20; %AMPA channel (epsp)
E_22 = -120; %GABA channel (ipsp)
%Izhikevich neuron parameters
a = 0.02;
b = 0.2;
c = -65;
d = 2;
vPost=-65*ones(1,len);
uPost=zeros(1,len);
sPost=uPost;
%EPSP parameters
g_e=0;
C_e=0;
%IPSP parameters
g_i=0;
C_i=0;
% Iterations parameters
dur=10;
e_=0;
i_=0;
for i=2:span*dt_len
p=(ceil(i*dt));
%% set epsp and ipsp conductances %%
[g_e, C_e] = epsp(e_taur,e_tauf,dt,w_E,e_input(p), g_e, C_e);
[g_i, C_i] = epsp(i_taur,i_tauf,dt,w_I,i_input(p), g_i, C_i);
%% store to graph data %%
g_E(i)=g_e(1);
g_I(i)=g_i(1);
cur=g_E(i)*(E_12 - vPost(i-1))+g_I(i)*(E_22 - vPost(i-1));
[vPost(i), uPost(i), sPost(i) ] = izhikevich2(vPost(i-1),uPost(i-1),a,b,c,d,cur,dt);
%% set spikes %%
if (vPost(i)>=20)
vPost(i)=100;
end
%%%%%% for display purposes only %%%%%%%%%%%%%%%
%% to display points of EPSP spikes
if(e_input(p) && e_