In [4]:
from scipy.integrate import ode
from models import nmda, LR, LR_ICa, HH, na_current, cable
#from sympy import plot_implicit, symbols, Eq
#import sympy
%pylab inline
%load_ext autoreload
%autoreload 2
In [26]:
def nmda_impulse(t, y, T=10, t_in=500, t_end=1500):
rb = 0.005
dy = nmda(y)
if t_in <= t < t_end:
dy[0] += -rb * T * y[0]
dy[1] += rb * T * y[0] - rb * y[1] * T
dy[2] += rb * y[1]
return dy
def ica(O, V):
Mg = 2.0
gNMDA = 1.0
VCa = 100.0
B = 1.0 / (1 + exp(-0.062 * V)*Mg/3.57)
ICa = gNMDA * B * O * (V - VCa)
return ICa
def v_dendrite(t, y):
dy = zeros_like(y)
dy[:4] = nmda_impulse(t, y[:4])
ICa = ica(y[3], y[4])
dy[4] = -ICa - 0.3*y[4]
return dy
def nmda_LR(t, y):
dy = zeros_like(y)
dy[:4] = nmda_impulse(t, y[:4])
ICa = ica(y[3], y[4])
dy[4:] = LR(y[4:], ICa)
#dy[6] = 0.007*(-0.0275* ICa - 0.02*y[6])
return dy
def nmda_HH(t, y):
dy = zeros_like(y)
dy[:4] = HH(y[:4])
dy[4:] = nmda_impulse(t, y[4:])
Ica = ca_current(y[7], y[0])
dy[0] -= Ica
return dy
solver = ['dopri5', 'dop853', 'vode']
In [3]:
x, y = symbols('x y')
gna = 120.0
gk = 36.0
gl = 0.3
Vna = 115.0
Vk = -12.0
Vl = 10.6
alpha_m = 0.1 * (25.0 - x) / (sympy.exp((25.0 - x) / 10.0) - 1.0)
beta_m = 4.0 * sympy.exp(-x / 18.0)
m_inf = alpha_m / (alpha_m + beta_m)
INa = gna * m_inf**3 * (0.8 - y) * (x - Vna)
IK = gk * y**4 * (x - Vk)
IL = gl * (x - Vl)
plot_implicit(Eq(INa + IK + IL, 0), (x, -20, 120), (y, 0, 1), adaptive=False);
In [44]:
#r = ode( lambda t, y: HH(y) + array([5, 0, 0, 0]) if 5<= t < 7 else HH(y)).set_integrator(solver[0])
HH_input = lambda t, y: HH(y) + array([140, 0, 0, 0]) if 100<= t < 1100 else HH(y)
#print(HH_input(array(1, 0, 0, 0),0))
y0 = array([0.0, 0.3176, 0.053, 0.596])
r = ode(HH_input).set_integrator(solver[0])
r.set_initial_value(y0, 0)
t1 = 1200.0
dt = .01
v = []
time = []
while r.successful() and r.t < t1:
r.integrate(r.t+dt)
v.append(r.y[0])
time.append(r.t)
figure(1)
plot(time, v)
xlabel('timepo (ms)')
ylabel('V (mV)')
grid(True)
In [13]:
#y0 = array([-50.0, 0.530, 0.7])
#r = ode(lambda t, y: LR(y)).set_integrator(solver[0])
y0 = array([-50.0, 0.530, 0.1])
r = ode(lambda t, y: array([LR(y)[0], LR(y)[1], 0])).set_integrator(solver[0])
r.set_initial_value(y0, 0)
t1 = 1000.0
dt = 1.0
v = []
n = []
ca = []
time = []
while r.successful() and r.t < t1:
r.integrate(r.t+dt)
v.append(r.y[0])
n.append(r.y[1])
ca.append(r.y[2])
time.append(r.t)
figure(1)
plot(time, v)
xlabel('timepo (ms)')
ylabel('V (mV)')
grid(True)
figure(2)
plot(time, n)
xlabel('timepo (ms)')
ylabel('n')
grid(True)
figure(3)
plot(time, ca)
xlabel('timepo (ms)')
ylabel('[Ca] (M)')
grid(True)
show()
In [82]:
y0 = array([1, 0, 0, 0, 0])
#r = ode(lambda t, y: nmda_impulse(t, y)).set_integrator(solver[0])
r = ode(lambda t, y: v_dendrite(t, y)).set_integrator(solver[0])
r.set_initial_value(y0, 0)
t1 = 4000.0
dt = 1.0
o = []
ICa = []
v = []
time = []
while r.successful() and r.t < t1:
r.integrate(r.t + dt)
o.append(r.y[3])
v.append(r.y[4])
time.append(r.t)
figure(1)
plot(time, o)
grid(True)
xlabel('timepo (ms)')
ylabel('Fraccion de canales abiertos')
figure(2)
plot(time, v)
grid(True)
xlabel('timepo (ms)')
ylabel('V')
show()
In [87]:
y0 = array([1, 0, 0, 0, -50.0, 0.530, 0.4])
r = ode(nmda_LR).set_integrator(solver[0])
r.set_initial_value(y0, 0)
t1 = 4000.0
dt = 1.0
v = []
ca = []
time = []
while r.successful() and r.t < t1:
r.integrate(r.t+dt)
v.append(r.y[4])
ca.append(r.y[6])
time.append(r.t)
figure(1)
plot(time, v)
xlabel('timepo (s)')
ylabel('V (mV)')
grid(True)
figure(2)
plot(time, ca)
grid(True)
show()
In [28]:
y0 = array([0.0, 0.3176, 0.053, 0.596])
r = ode(lambda t, y: HH(y) + array([5, 0, 0, 0]) if 5<= t < 7 else HH(y)).set_integrator(solver[0])
r.set_initial_value(y0, 0)
t1 = 20
dt = 0.01
v = []
time = []
while r.successful() and r.t < t1:
r.integrate(r.t+dt)
v.append(r.y[0])
time.append(r.t)
figure(1)
plot(time, v)
xlabel('timepo (ms)')
ylabel('V (mV)')
grid(True)
In [27]:
y0 = array([-40.0, 0.3176, 0.053, 0.596, 1, 0, 0, 0])
r = ode(nmda_HH).set_integrator(solver[0])
r.set_initial_value(y0, 0)
t1 = 2000.0
dt = 1.0
v = []
o = []
ICa = []
time = []
while r.successful() and r.t < t1: #
r.integrate(r.t+dt)
v.append(r.y[0])
o.append(r.y[7])
ICa.append(ica(r.y[7], r.y[0]))
time.append(r.t)
figure(1)
plot(time, v)
xlabel('timepo (ms)')
ylabel('V (mV)')
grid(True)
figure(2)
plot(time, o)
xlabel('timepo (ms)')
ylabel('fraction open')
grid(True)
figure(3)
plot(time, ICa)
xlabel('timepo (ms)')
ylabel('Calcium Current')
grid(True)
In [16]:
y0 = zeros((100,))
y0[40:50] = 10 * ones(10,)
r = ode(lambda t, y: cable(y)).set_integrator(solver[0])
r.set_initial_value(y0, 0)
t1 = 10.0
dt = 1.0
v = [y0]
time = []
while r.successful() and r.t < t1: #
r.integrate(r.t+dt)
v.append(r.y)
time.append(r.t)
figure(1)
for x in v:
plot(x)
xlim([30, 50])
ylim([0, 0.01])
xlabel('distancia')
ylabel('V (mV)')
grid(True)
In [18]:
a = linspace(0, 9, 10)
N = a.shape[0]
print(a[1:N-1].shape)
print(a[:N-2].shape)
print(a[2:].shape)