Concentration dependent nonlinear K+ and Cl- leak current (Huang et al. 2015)

 Download zip file   Auto-launch 
Help downloading and running models
"In their seminal works on squid giant axons, Hodgkin, and Huxley approximated the membrane leak current as Ohmic, i.e., linear, since in their preparation, sub-threshold current rectification due to the influence of ionic concentration is negligible. Most studies on mammalian neurons have made the same, largely untested, assumption. Here we show that the membrane time constant and input resistance of mammalian neurons (when other major voltage-sensitive and ligand-gated ionic currents are discounted) varies non-linearly with membrane voltage, following the prediction of a Goldman-Hodgkin-Katz-based passive membrane model. ..." (see paper for details and more).
1 . Huang S, Hong S, De Schutter E (2015) Corrigendum: Non-linear leak currents affect mammalian neuron physiology. Front Cell Neurosci 9:475 [PubMed]
2 . Huang S, Hong S, De Schutter E (2015) Non-linear leak currents affect mammalian neuron physiology. Front Cell Neurosci 9:432 [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type:
Brain Region(s)/Organism:
Cell Type(s): Cerebellum Purkinje GABA cell; Hodgkin-Huxley neuron;
Channel(s): I K,leak; I Cl, leak;
Gap Junctions:
Simulation Environment: NEURON; Python;
Model Concept(s):
Implementer(s): Huang, Shiwei [shiweihuang at]; Hong, Sungho [shhong at];
Search NeuronDB for information about:  Cerebellum Purkinje GABA cell; I K,leak; I Cl, leak;

Make Fig. 2A in Huang S, Hong S, and De Schutter E. 2015. Non-linear leak currents affect mammalian neuron physiology. Front Cell Neurosci 9: 4602-10, based on simulated data created by

Written by Shiwei Huang, Computational Neuroscience Unit, OIST (
Updated 2015


#import matplotlib
import matplotlib.pyplot as plt
import os
import pickle
import matplotlib as mpl
mpl.rcParams['pdf.fonttype'] = 42

def get_index_of_prev_element(np_array, curr_element):
    for i, val in enumerate(np_array):
        if(val >= curr_element):
            return i-1

allfiles  = os.listdir('data')
pklfiles  = [os.path.join('data', x) for x in allfiles if( 'Pr_1.341_ecl_-67.9_CONC_10_EL_-85_IHOLD_0.3_ISTEP_' in x and ('0.015' in x) )]
pklfiles1 = [os.path.join('data', x) for x in allfiles if( ('Pr_1.341_ecl_-67.9_CONC_10_EL_-85_IHOLD_0_ISTEP_' in x) and ('0.015' in x) )]
pklfiles2 = [os.path.join('data', x) for x in allfiles if( 'Pr_1.341_ecl_-67.9_CONC_10_EL_-85_IHOLD_-0.3_ISTEP_' in x and ('0.015' in x) )]

fig = plt.figure()
ax1 = fig.add_subplot(321)
ax2 = fig.add_subplot(322)
ax3 = fig.add_subplot(323)
ax4 = fig.add_subplot(324)
ax5 = fig.add_subplot(325)
ax6 = fig.add_subplot(326)

def load_and_plottraces(dataset, ax1, ax2):
    for n, fname in enumerate(dataset):
        f = open(fname)
        gdat = pickle.load(f)
        odat = pickle.load(f)

        v0 = gdat['v']
        t  = gdat['t']
        t0 = get_index_of_prev_element(t, 3999)
        v  = gdat['v'] - gdat['v'][t0]

        vo0 = odat['v']
        to  = odat['t']
        to0 = get_index_of_prev_element(to, 3999)
        vo  = odat['v'] - odat['v'][to0]

        if (gdat['ISTEP'] < 0):
            v = abs(v)
            ax2.plot(t, v, color='orange', linestyle='dotted', linewidth=3)
            vo = abs(vo)
            ax1.plot(to, vo, color='blue', linestyle='dotted', linewidth=3)

            ax2.plot(t, v, 'orange')
            ax1.plot(to, vo, 'blue')

        for l in ax1, ax2:
            l.set_ylim([0, 3])
            l.set_xlim([3500, 7000])


load_and_plottraces(pklfiles, ax1, ax2)
load_and_plottraces(pklfiles1, ax3, ax4)
load_and_plottraces(pklfiles2, ax5, ax6)

for ax in (ax5, ax6): ax.set_xlabel('Time (ms)')