Phenomenological models of NaV1.5: Hodgkin-Huxley and kinetic formalisms (Andreozzi et al 2019)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:257747
"Computational models of ion channels represent the building blocks of conductance-based, biologically inspired models of neurons and neural networks. Ion channels are still widely modelled by means of the formalism developed by the seminal work of Hodgkin and Huxley (HH), although the electrophysiological features of the channels are currently known to be better fitted by means of kinetic Markov-type models. The present study is aimed at showing why simplified Markov-type kinetic models are more suitable for ion channels modelling as compared to HH ones, and how a manual optimization process can be rationally carried out for both. ..."
Reference:
1 . Andreozzi E, Carannante I, D'Addio G, Cesarelli M, Balbi P (2019) Phenomenological models of NaV1.5. A side by side, procedural, hands-on comparison between Hodgkin-Huxley and kinetic formalisms Scientific Reports 9:17493 [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Channel/Receptor;
Brain Region(s)/Organism:
Cell Type(s):
Channel(s): I Sodium;
Gap Junctions:
Receptor(s):
Gene(s): Nav1.5 SCN5A;
Transmitter(s):
Simulation Environment: NEURON; Python;
Model Concept(s): Markov-type model;
Implementer(s): Carannante, Ilaria [ilariac at kth.se]; Balbi, Pietro [piero.balbi at fsm.it]; Andreozzi, Emilio [emilio.andreozzi at unina.it];
Search NeuronDB for information about:  I Sodium;
# The following script contains a function 'finding_state_variables(v,celsius)', which takes as input # the holding potential in mV and the temperature in celsius and solves the ODE system, describing the # dynamic of the states, at equilibrium.  

import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint

dtype = np.float64


def finding_state_variables(v,celsius):

    global C1, C2, O1, I1, I2

    ### parameters
    C1C2b2	  = 8
    C1C2v2    = -16
    C1C2k2	  = -9

    C2C1b1	  = 2
    C2C1v1    = -82
    C2C1k1	  = 5
    C2C1b2	  = 8
    C2C1v2    = -16
    C2C1k2	  = -9

    C2O1b2	  = 8
    C2O1v2    = -26
    C2O1k2	  = -9

    O1C2b1	  = 3
    O1C2v1    = -92
    O1C2k1	  = 5
    O1C2b2	  = 8
    O1C2v2    = -26
    O1C2k2	  = -9

    O1I1b1	  = 8
    O1I1v1	  = -50
    O1I1k1	  = 4
    O1I1b2	  = 6
    O1I1v2	  = 10
    O1I1k2	  = -100

    I1O1b1	  = 0.00001
    I1O1v1	  = -20
    I1O1k1	  = 10

    I1C1b1	  = 0.35
    I1C1v1	  = -122
    I1C1k1	  = 9

    C1I1b2	  = 0.04
    C1I1v2	  = -78
    C1I1k2	  = -10

    I1I2b2	  = 0.00018
    I1I2v2	  = -60
    I1I2k2	  = -5

    I2I1b1	  = 0.001825
    I2I1v1	  = -88
    I2I1k1	  = 31

    ###
    def rates2(v,b,vv,k):
        return b/(1+np.exp((v-vv)/k))
    ###

    Q10 = 3**((celsius-20)/10)

    C1C2_a = Q10*(rates2(v, C1C2b2, C1C2v2, C1C2k2))
    C2C1_a = Q10*(rates2(v, C2C1b1, C2C1v1, C2C1k1) + rates2(v, C2C1b2, C2C1v2, C2C1k2))
    C2O1_a = Q10*(rates2(v, C2O1b2, C2O1v2, C2O1k2))
    O1C2_a = Q10*(rates2(v, O1C2b1, O1C2v1, O1C2k1) + rates2(v, O1C2b2, O1C2v2, O1C2k2))
    O1I1_a = Q10*(rates2(v, O1I1b1, O1I1v1, O1I1k1) + rates2(v, O1I1b2, O1I1v2, O1I1k2))
    I1O1_a = Q10*(rates2(v, I1O1b1, I1O1v1, I1O1k1))
    I1C1_a = Q10*(rates2(v, I1C1b1, I1C1v1, I1C1k1))
    C1I1_a = Q10*(rates2(v, C1I1b2, C1I1v2, C1I1k2))
    I1I2_a = Q10*(rates2(v, I1I2b2, I1I2v2, I1I2k2))
    I2I1_a = Q10*(rates2(v, I2I1b1, I2I1v1, I2I1k1))

    ### solving the ODE system at equilibrium taking into account the conservation law:
    ### C1+C2+O1+I1+I2 =1 ->
    ### solving the following linear system 

    A= np.array([[-(C1I1_a+C1C2_a),+C2C1_a,0,I1C1_a],
                 [C1C2_a,-(C2C1_a+C2O1_a),+O1C2_a,0],
                 [0,+ C2O1_a, -(O1C2_a+O1I1_a),+I1O1_a],
                 [(C1I1_a-I2I1_a), -I2I1_a, (O1I1_a-I2I1_a),-(I1C1_a+I1I2_a+I1O1_a+I2I1_a)]])


    b=np.array([0,0,0,-I2I1_a])


    x=np.linalg.solve(A,b)

    C1=x[0]
    C2=x[1]
    O1=x[2]
    I1=x[3]
    I2= 1-np.sum([x])

    return C1, C2, O1, I1, I2