#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
%file passive_membrane.py
%model of the response of a passive membrane to perturbations in voltage
%Figure 8.3


@author: bingalls
"""
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint



#assign parameter values

C= 0.98 # microfarad/cm^2 
g=0.0144 #  millisiemens/ cm^2
V_Nernst_K=-93.6 # millivolts 


#set time_grid for simulation
times1=np.linspace(0, 500, 1000) #generate time-grid list
times2=np.linspace(500, 1000, 1000) 
times3=np.linspace(1000, 1500, 1000) 
times4=np.linspace(1500, 2000, 1000) 
times5=np.linspace(2000, 2500, 1000) 


#assign initial condition.  
#state vector S=[A R C]
Sinit1=[-93.6]
Sinit2=[-63.6]
Sinit3=[-123.6]
Sinit4=[-78.6]
Sinit5=[-108.6]
 
#declare right-hand-side for original model
def dSdt_original(S,t):
    dS=np.zeros(1) #generate a list to store derivatives
    
    V=S[0]
   
    dS[0]=(1/C)*(-g*(V-V_Nernst_K))
   
    return dS


S1=odeint(dSdt_original, Sinit1, times1) #run simulation
S2=odeint(dSdt_original, Sinit2, times2)
S3=odeint(dSdt_original, Sinit3, times3)
S4=odeint(dSdt_original, Sinit4, times4)
S5=odeint(dSdt_original, Sinit5, times5)

times=np.concatenate((times1, times2, times3, times4, times5))
S=np.concatenate((S1, S2, S3, S4, S5))

#plot simulation
plt.figure() #generate figure 7.17A
plt.plot(times, S,  linewidth=2)
plt.xlabel("Time")
plt.ylabel("voltage")






 
 


