Browse Source

added cfg folder

Susana Contreras 3 years ago
parent
commit
e6a0adce33
3 changed files with 313 additions and 0 deletions
  1. 123 0
      cfg/MTM_W_sPNaS_sICD.json
  2. 15 0
      cfg/PLOSmpl.json
  3. 175 0
      cfg/m_MTM_W_sPNaS_sICD.py

+ 123 - 0
cfg/MTM_W_sPNaS_sICD.json

@@ -0,0 +1,123 @@
+{
+    
+    "ode": [
+      "C*(dv/dt) = - I_Na - I_K - I_L - i_p + I_app",
+      "dm_Na/dt = alpha_m*(1-m_Na)-beta_m*m_Na",
+      "dh_Na/dt = alpha_h*(1-h_Na)-beta_h*h_Na",
+      "dn_K/dt = alpha_n*(1-n_K)-beta_n*n_K",
+      "dNa_i/dt = rho/F*(-parstNa*i_p-I_Na-I_L_Na)*r_fast_vs_ion",
+      "dK_i/dt = rho/F*(parstK*i_p-I_K-I_L_K)*r_fast_vs_ion",
+      "dK_o/dt = rho/F*(parstK*i_p-I_K-I_L_K)*-remim*r_fast_vs_ion"
+       
+    ],
+    
+     "init_states": {
+      "m_Na":"0.1",
+      "h_Na":"0.6",
+      "n_K":"0.4",
+      "Na_i":"(10.0*mM)",
+      "K_i":"(150.0*mM)",
+      "K_o":"(8.0*mM)",
+      "v":"(-60.0*mV)"
+    },
+    
+     "definitions":
+    {
+      "I_Na": "g_Na*(m_Na**3)*h_Na*(v-E_Na)*Q10_gNa**((T-T0)/(10*kelvin))",
+      "I_K": "g_K*(n_K**4)*(v-E_K)*Q10_gK**((T-T0)/(10*kelvin))",
+      "I_L": "I_L_K+I_L_Na",
+      "i_p": "(Piecewise((0,(Na_i<=(Na_sens0/2))),(1,(Na_i>(Na_sens0/2)))))*(I_max*(1/(1+exp(-Na_sens*(Na_i-Na_sens0)))-1/(1+exp(-Na_sens*-Na_sens0/2))))*Q10_gPump**((T-T0)/(10*kelvin))"
+    },
+    
+     "functions":
+    {
+      "q_m": "Q10_m**((T-T0)/(10*kelvin))",
+      "q_n": "Q10_n**((T-T0)/(10*kelvin))",
+      "q_h": "Q10_h**((T-T0)/(10*kelvin))",
+      "alpha_m": "0.32*(v/mV+alpha_mV)/(1-exp(-(v/mV+alpha_mV)/4))*q_m/ms",
+      "beta_m": "0.28*(v/mV+beta_mV)/(exp((v/mV+beta_mV)/5)-1)*q_m/ms",
+      "alpha_h": "0.128*exp(-(v/mV+alpha_hV)/18)*q_h/ms",
+      "beta_h": "4/(1+exp(-(v/mV+beta_hV)/5))*q_h/ms",
+      "alpha_n": "0.032*(v/mV+alpha_nV)/(1-exp(-(v/mV+alpha_nV)/5))*q_n/ms",
+      "beta_n": "0.5*exp(-(v/mV+beta_nV)/40)*q_n/ms",
+      "m_Na_inf":"alpha_m/(alpha_m+beta_m)",
+      "h_Na_inf":"alpha_h/(alpha_h+beta_h)",
+      "n_K_inf":"alpha_n/(alpha_n+beta_n)",
+      "I_Nainf":"g_Na*(m_Na_inf**3)*h_Na_inf*(v-E_Na)*Q10_gNa**((T-T0)/(10*kelvin))",
+      "I_Kinf": "g_K*(n_K_inf**4)*(v-E_K)*Q10_gK**((T-T0)/(10*kelvin))",
+      "I_Linf": "g_L*(v-E_L)*Q10_gL**((T-T0)/(10*kelvin))",
+      "i_pinf": "(Piecewise((0,Na_i<=(Na_sens0/2)),(1,Na_i>(Na_sens0/2))))*(I_max*(1/(1+exp(-Na_sens*(Na_i-Na_sens0)))-1/(1+exp(-Na_sens*-Na_sens0/2))))*Q10_gPump**((T-T0)/(10*kelvin))",
+      "E_Na": "R*T/F*log(Na_o/Na_i)",
+      "E_K":"R*T/F*log(K_o/K_i)",
+      "E_L":"R*T/F*log((K_o*P_K+Na_o*P_Na)/(K_i*P_K+Na_i*P_Na))",
+      "I_L_K": "g_L*P_K*(v-E_K)*Q10_gL**((T-T0)/(10*kelvin))",
+      "I_L_Na": "g_L*P_Na*(v-E_Na)*Q10_gL**((T-T0)/(10*kelvin))"
+
+    },
+    
+     "currents": {
+        "I_Na": "I_Na",
+        "I_K": "I_K",
+        "I_L": "I_L",
+        "i_p": "i_p"
+    },
+    
+    "resting_membrane_pot": {
+      "E_Na": "E_Na",
+      "E_K":"E_K",
+      "E_L":"E_L"
+    },
+    "ss_currents": {
+          "I_Nainf":"I_Nainf",
+          "I_Kinf": "I_Kinf",
+          "I_Linf": "I_Linf",
+          "i_pinf": "i_pinf"
+      },
+    "parameters": {
+        "I_app": "1.0 * uA/cm2",
+
+        "C": "1.0 * uF/cm2",
+        "P_K":"(0.96)",
+        "P_Na":"(0.04)",
+        "F":"96484.6*coulomb/mol",
+        "R":"8314.4*mjoule/(mol*kelvin)",
+        "T": "293.15 * kelvin",
+
+        "rho":"4000/cm",
+        "remim":"0.2",
+        "parstNa":"3",
+        "parstK":"2",
+
+        "g_Na":"100.0* msiemens/cm2",
+        "g_K":"200.0* msiemens/cm2",
+        "g_L":"0.1* msiemens/cm2",
+
+        "alpha_mV":"54.0",
+        "beta_mV":"27.0",
+        "alpha_hV":"50.0",
+        "beta_hV":"27.0",
+
+        "alpha_nV":"52.0",
+        "beta_nV":"57.0",
+
+        "T0": "291.15 * kelvin",
+
+        "Q10_gL":"1.2",
+        "Q10_gNa":"1.2",
+        "Q10_gK":"1.2",
+        "Q10_gPump":"1.2",
+        "Q10_n":"2.0",
+        "Q10_m":"2.0",
+        "Q10_h":"2.0",
+
+        "I_max":"40.0*uA/cm2",
+        "Na_sens0":"20.0*mM",
+        "Na_sens":"0.1/mM",
+        "i_p0":"-2.59284862*uA/cm2",
+        "Na_o":"140.0*mM",
+        
+        "r_fast_vs_ion":"0.001*second/ms"
+        
+    },
+    "source": "Miles Traub model ++ Na sens Pump, with dynamic concentrations"
+}

+ 15 - 0
cfg/PLOSmpl.json

@@ -0,0 +1,15 @@
+{
+  "font.family"         : "sans-serif",
+  "font.sans-serif"     : "Arial",
+  "font.size"           : 12,
+  "axes.titlesize"      : 10,
+  "axes.labelsize"      : 10,
+  "axes.linewidth"      : 0.5,
+  "xtick.labelsize"     : 8,
+  "ytick.labelsize"     : 8,
+  "legend.fontsize"     : 9,
+  "xtick.major.size"    : 1.5,
+  "ytick.major.size"    : 1.5,
+  "figure.titlesize"    : 12,
+  "figure.figsize"      : [5.2,4.5]
+}

+ 175 - 0
cfg/m_MTM_W_sPNaS_sICD.py

@@ -0,0 +1,175 @@
+from scipy import integrate
+from scipy.integrate import odeint
+import numpy as np
+from copy import copy
+
+Pars_MTM_W_sPNaS_sICD={
+    'I_app':1, #uA/cm2
+    'I_app_m':1, #uA/cm2
+    'I_app_a':1, #uA/cm2
+    'cof':500,#Hz
+    'C':1,#uF/cm2
+    #Conductances
+    'g_Na':100, #mS/cm2
+    'g_K':200, #mS/cm2
+    'g_L':0.1, #mS/cm2
+    #Activation and inactivation parameters
+    #I_Na
+    'alpha_mV':54,
+    'beta_mV':27,
+    'alpha_hV':50,
+    'beta_hV':27,
+    # 'alpha_h_mag':0.128,
+    # 'alpha_h_ts':18,
+    #I_K
+    'alpha_nV':52,
+    'beta_nV':57,
+    #Extracellular concentrations
+    'Na_o':140,#mM
+    'K_o':15,#mM
+    #Cell properties
+    'rho':4000,#check.. (cellular Area/Volume [1/cm]  Vitzthum,2009)
+    #(http://nitrolab.engr.wisc.edu/pubs/vitzthumIB09.pdf)
+    'remim':0.2,#Ratio ef extra to intra-cellular volume Zhang 2010,
+    #( http://www.ncbi.nlm.nih.gov/pmc/articles/PMC2920647/ )
+    'P_K':0.96,
+    'P_Na':0.04,
+    'F':96484.6,#C/mol (Faraday constant)
+    'R':8314.4,#mJ/[mol*K] (Ideal gas constant)
+    'T':273.15+20,#K Temperature
+    #Pump parameters
+    'I_max':40,#uA/uF... Paper Luo y Rudi 1.5!!
+    #Simple pump parameters
+    'Na_sens0':20,
+    'Na_sens':0.1,
+    'parstNa':3,#Pump stoichiometry
+    'parstK':2,#Pump stoichiometry
+    #Relative Timing of ionic accumulation
+    'r_fast_vs_ion':0.001,## Accounting for the fact the units of the change in concentrations is 1mM/S.. and the fast variables are in 1/ms
+    #Temperature dependencies Q10s
+    'T0':273.15+18,
+    'Q10_gL':1.2,
+    'Q10_gNa':1.2,
+    'Q10_gK':1.2,
+    'Q10_gPump':1.2,
+    'Q10_n':2,
+    'Q10_m':2,
+    'Q10_h':2,
+    #Initial conditions.. easy to manipulate from here at
+    #the time of parameter exploration
+    'm_Na0':0.1,
+    'h_Na0':0.6,
+    'n_K0':0.4,
+    'Na_i0':10,
+    'K_i0':150,#Very high...(To initialize it far from the dep block)
+    'K_o0':8,
+    'V0':-60
+    }
+
+# Mile traub model with simple pump[Na sensitive] definition
+class neuron_MTM_W_sPNaS_sICD():
+
+        def __init__(self, p):
+            self.s_model_tag="Traub-Miles Model with Na sensitive Pump, and temperature dependencies"
+            self.s_model_reference=""
+            self.p = p
+            self.n_state_vars=7
+            self.s_state_vars=["m_Na", "h_Na", "n_K", "Na_i",
+            "K_i", "K_o", "V"]
+            self.s_currents=["I_Na", "I_K", "I_1", "i_p", "I_L","I_L_K", "I_L_Na"]
+            self.s_concentrations=["Na_i","K_i","K_o"]
+            self.s_resting_membrane_potentials=["E_Na","E_K","E_L"]
+            self.step_protocol=[]
+            self.current_state=[self.p['m_Na0'],self.p['h_Na0'],self.p['n_K0'],
+            self.p['Na_i0'],self.p['K_i0'],self.p['K_o0'],self.p['V0']]
+            self.ode_solver="odeint"
+            self.noisy_current=[]
+        def resting_membrane_potentials(self,v_State_Vars):
+            #Resting potential for each neuron
+            m_Na, h_Na, n_K, Na_i, K_i, K_o, V = v_State_Vars
+            E_Na=self.p['R']*self.p['T']/self.p['F']*np.log(self.p['Na_o']/Na_i)
+            E_K=self.p['R']*self.p['T']/self.p['F']*np.log(K_o/K_i)
+            E_L=self.p['R']*self.p['T']/self.p['F']*np.log((K_o*self.p['P_K']+
+            self.p['Na_o']*self.p['P_Na'])/(K_i*self.p['P_K']+Na_i*self.p['P_Na']))
+            return E_Na, E_K, E_L
+
+        def neuron_currents(self,v_State_Vars,t=[],i_p_f=[]):
+            #Resting potential for each neuron
+            m_Na, h_Na, n_K, Na_i, K_i, K_o, V = v_State_Vars# Voltage it's always the last state variable
+            E_Na, E_K, E_L=self.resting_membrane_potentials(v_State_Vars)
+            #Pump
+            if i_p_f==[]:
+                if Na_i<=self.p['Na_sens0']/2:
+                    i_p=0
+                if Na_i>self.p['Na_sens0']/2:
+                    temp_factor_p=self.p['Q10_gPump']**(
+                    (self.p['T']-self.p['T0'])/10)
+                    i_p=self.p['I_max']*(1/(1+np.exp(-self.p['Na_sens']*(
+                    Na_i-self.p['Na_sens0'])))-1/(1+np.exp(-self.p['Na_sens']*(
+                    -self.p['Na_sens0']/2))))*temp_factor_p
+            else:
+                i_p=i_p_f(t) ##Argument to force the pump to be f_i_p value
+            # Fast Na current
+            I_Na=self.p['g_Na']*m_Na**3*h_Na*(V-E_Na)*self.p['Q10_gNa']**(
+            (self.p['T']-self.p['T0'])/10)
+            #K+ delayed rectifier
+            I_K=self.p['g_K']*n_K**4*(V-E_K)*self.p['Q10_gK']**(
+            (self.p['T']-self.p['T0'])/10)
+            #Leak
+            I_L_K=self.p['g_L']*self.p['P_K']*(V-E_K)*self.p['Q10_gL']**(
+            (self.p['T']-self.p['T0'])/10)#[uA/cm2]
+            I_L_Na=self.p['g_L']*self.p['P_Na']*(V-E_Na)*self.p['Q10_gL']**(
+            (self.p['T']-self.p['T0'])/10)#[uA/cm2]
+            I_L=I_L_K+I_L_Na
+            I_1=I_L+i_p*(self.p['parstNa']-self.p['parstK'])#[uA/cm2]
+            return I_Na, I_K, I_1, i_p, I_L, I_L_K, I_L_Na
+
+        def activation_inactivation_Dynamics(self,v_State_Vars):
+            m_Na, h_Na, n_K, Na_i, K_i, K_o, V = v_State_Vars
+            #Activation and inactivation variables
+            #fast Na current
+            alpha_m=0.32*(V+self.p['alpha_mV'])/(1-np.exp(
+            -(V+self.p['alpha_mV'])/4))*self.p['Q10_m']**(
+            (self.p['T']-self.p['T0'])/10)
+            beta_m=0.28*(V+self.p['beta_mV'])/(np.exp(
+            (V+self.p['beta_mV'])/5)-1)*self.p['Q10_m']**(
+            (self.p['T']-self.p['T0'])/10)
+            alpha_h=0.128*np.exp(-(V+self.p['alpha_hV'])/18)*self.p['Q10_h']**(
+            (self.p['T']-self.p['T0'])/10)
+            beta_h=4/(1+np.exp(-(V+self.p['beta_hV'])/5))*self.p['Q10_h']**(
+            (self.p['T']-self.p['T0'])/10)
+            #K+ delayed rectifier
+            alpha_n=0.032*(V+self.p['alpha_nV'])/(1
+            -np.exp(-(V+self.p['alpha_nV'])/5))*self.p['Q10_n']**(
+            (self.p['T']-self.p['T0'])/10)
+            beta_n=0.5*np.exp(-(V+self.p['beta_nV'])/40)*self.p['Q10_n']**(
+            (self.p['T']-self.p['T0'])/10)
+            return alpha_m, beta_m, alpha_h, beta_h, alpha_n, beta_n
+
+        def neuron_changing_state(self,v_State_Vars,t,I_app,i_p_f):
+            m_Na, h_Na, n_K, Na_i, K_i, K_o, V = v_State_Vars
+            I_Na, I_K, I_1, i_p, I_L, I_L_K, I_L_Na=self.neuron_currents(v_State_Vars,t,i_p_f)
+            alpha_m,beta_m,alpha_h,beta_h,alpha_n,beta_n=self.activation_inactivation_Dynamics(v_State_Vars)
+            #Change of state variables
+            dm_Na=alpha_m*(1-m_Na)-beta_m*m_Na
+            dh_Na=alpha_h*(1-h_Na)-beta_h*h_Na
+            dn_K=alpha_n*(1-n_K)-beta_n*n_K
+            dNa_i=(self.p['rho']/self.p['F']*(
+            -self.p['parstNa']*i_p-I_Na-I_L_Na)
+            )*self.p['r_fast_vs_ion']
+            dK_i=(self.p['rho']/self.p['F']*(self.p['parstK']*i_p
+            -I_K-I_L_K))*self.p['r_fast_vs_ion']#Shut off o on..
+            dK_o=-(dK_i)*self.p['remim']#Shut off o on..
+            dV=1/self.p['C']*(I_app(t)-I_1-I_Na-I_K)
+            return dm_Na, dh_Na, dn_K, dNa_i, dK_i, dK_o, dV
+
+        def stimulate_neuron(self,t,c_ini,I_stim,i_p_f=[]):
+            import copy
+            sol= odeint(self.neuron_changing_state, c_ini,
+            t, args=(I_stim,i_p_f))
+            s_results=[]
+            s_results=copy.copy(self.s_state_vars)
+            s_results.append("t")
+            t_prov=t[...,None]
+            v_results=np.append(sol,t_prov,1)
+            return s_results, v_results