The compartmental model

Chapter 6.3

Read Chapter 6.3

Python / NEURON demonstration

Imports:

from neuron import h, gui
import numpy as np
import matplotlib.pyplot as plt

Model creation:

cells = {}

for i in range(3):

    soma = h.Section(name='soma') 
    soma.L = soma.diam = 12.6157 # [um]
    soma.Ra = 100                # Axial resistance [Ohm * cm]
    soma.cm = 1                  # Membrane capacitance [uF / cm^2]
    soma.insert('hh')            # Insert active Hodgkin-Huxley current in the soma
    soma.gnabar_hh = 0.12        # Sodium conductance [S/cm2]
    soma.gkbar_hh = 0.036        # Potassium conductance [S/cm2]
    soma.gl_hh = 0.0003          # Leak conductance [S/cm2]
    soma.el_hh = -54.3           # Reversal potential [mV]

    dend = h.Section(name='dend')
    dend.L = 200       # [um]
    dend.nseg = 101
    dend.Ra = 100      # Axial resistance [Ohm * cm]
    dend.cm = 1        # Membrane capacitance [uF / cm^2]
    dend.diam = 1      # [um]
    dend.insert('pas') # Insert passive current in the dendrite
    dend.g_pas = 0.001 # Passive conductance [S/cm2] 
    dend.e_pas = -65   # Leak reversal potential [mV]
    dend.connect(soma(1)) 
    
    cells[i] = {'soma': soma, 'dend': dend}

syns    = [h.ExpSyn(cells[1]['dend'](0.5)), h.ExpSyn(cells[2]['dend'](0.5))]
netcons = [h.NetCon(cells[0]['soma'](0.5)._ref_v, syns[0], sec=cells[0]['soma']), 
           h.NetCon(cells[1]['soma'](0.5)._ref_v, syns[1], sec=cells[1]['soma'])]

for netcon in netcons:
    netcon.weight[0] = 0.04
    netcon.delay = 5

syn_ = h.ExpSyn(cells[0]['dend'](0.5))

Stimulation:

stim = h.NetStim()
stim.number = 1
stim.start = 5
ncstim = h.NetCon(stim, syn_)
ncstim.delay = 1
ncstim.weight[0] = 0.04
stim_amp_array = [0.08]

Recording vectors:

t_vec = h.Vector() 
t_vec.record(h._ref_t)

for cell in cells:
    cells[cell]['soma_Vm'] = h.Vector()
    cells[cell]['soma_Vm'].record(cells[cell]['soma'](0.5)._ref_v)

dend_v_vec_array = []
string_array     = []

for i in np.flip(np.linspace(0, dend.L, 6)):
    dend_v_vec = h.Vector()
    string_array.append('{} %'.format(100*(i/cells[0]['dend'].L)))
    dend_v_vec.record(cells[0]['dend'](i/cells[0]['dend'].L)._ref_v)
    dend_v_vec_array.append(dend_v_vec)

Simulation parameters:

simdur = 40
h.tstop = simdur 

Simulating:

h.run()

Plotting:

plt.figure(figsize=(10,5))
cmap = plt.get_cmap('Blues')   
colors = cmap(np.linspace(0,1,len(dend_v_vec_array) * 2))
plt.figure(figsize=(8,4)) 

plt.plot(t_vec, dend_v_vec_array[0], linewidth = 3, color = colors[-1]) 
for i,v in enumerate(dend_v_vec_array[1:]):
    plt.plot(t_vec, v, color = colors[len(colors)-2-i]) 
plt.plot(t_vec, cells[0]['soma_Vm'], label='soma @ cell 1', color = 'red', linewidth=3)
plt.plot(t_vec, cells[1]['soma_Vm'], label='soma @ cell 2', color = 'green', linewidth=3)
plt.plot(t_vec, cells[2]['soma_Vm'], label='soma @ cell 3', color = 'orange', linewidth=3)
plt.title("Compartmental Model", fontSize=15)
plt.xlabel('Time (ms)', fontSize=15) 
plt.ylabel("Membrane Potential (mV)", fontSize=15) 
plt.legend()
plt.show()
    
h("forall {delete_section()}")

Results:

Last updated