公開日 2011.02.28

日本生理学会実習書 シミュレーション神経 modelcell.hoc

カテゴリ:その他
 生理学研究所/小泉周
 

日本生理学会実習書に記載したNEURONシミュレーターを利用したシミュレーション実習用のmodelcell.hocです(小泉周 2011)。

以下の部分を新規のテキストファイルに、cut and pasteし、modelcell.hocという名前で保存してください。

-------------------------------ここから下の全て-------------------------------------------

/*生理学実習書用 modelcell.hoc generated by Amane Koizumi, 2011*/

load_file("nrngui.hoc")

nnode = 20
ndend = 3
axonlength = 500
nodelength = 10
dendlength = 200
hillocklength = 25
diamaxon = 5
v_init = -65 // mV


//////////////////////////////////////////////////
/* ************ CELL STRUCTURE   ************** */
//////////////////////////////////////////////////

// CELL TOPOLOGY

create soma, hillock, axon[nnode], node[nnode], dend[ndend]
access soma

connect hillock(0), soma(1)
connect axon[0](0), hillock(1)
connect node[0](0), axon[0](1)

for i=1, nnode-1 {
    connect axon[i](0), node[i-1](1)
    connect node[i](0), axon[i](1)
}

for i=0, ndend-1 {
    connect dend[i](0), soma(0)
}


// GEOMETRY

soma {
    L = 100 // um
    diam = 100
    nseg = 10
}

hillock {
    L= hillocklength
    diam = diamaxon
    nseg = 10
}

axon[0] {
    L= 100
    diam = diamaxon
    nseg = 10
}

for i=1, nnode-1 {
    axon[i] {
        L= axonlength
        diam = diamaxon
        nseg = 10
    }
}

for i=0, nnode-1 {
    node[i] {
        L= nodelength
        diam = diamaxon
        nseg = 4
    }
}

for i=0, ndend-1 {
    dend[i] {
        L= dendlength
        diam = 5
        nseg = 20
    }
}


// BIOPHYSICS

forall {
    Ra = 100
    cm = 1
}

/* Hodgkin-Huxley settings */
gnabar_init = 0.12
gkbar_init = 0.036
gl_init = 0.0003
el_init = -54.3


soma {
    insert hh
    gnabar_hh= gnabar_init
    gkbar_hh= gkbar_init 
    gl_hh= gl_init
    el_hh= el_init
}

hillock {
    insert hh
    gnabar_hh=gnabar_init
    gkbar_hh=gkbar_init 
    gl_hh=gl_init
    el_hh=el_init
}

for i=0, nnode-1 {
    node[i] {
        insert hh
        gnabar_hh=gnabar_init
        gkbar_hh=gkbar_init 
        gl_hh=gl_init
        el_hh=el_init
    }
}

for i=0, ndend-1 {
    dend[i] {
        insert pas
        g_pas = 0.0002
        e_pas = v_init
    }
}

for i=0, nnode-1 {
    axon[i] {
        insert hh
        gnabar_hh=gnabar_init
        gkbar_hh=gkbar_init 
        gl_hh=gl_init
        el_hh=el_init

        insert pas
        g_pas = 0.0002 // default
        e_pas = v_init
    }
}


//////////////////////////////////////////////////
/* ************ AXON myelination ************** */
//////////////////////////////////////////////////

myelination_flag = 1 // 0 non-myelinated, 1  myelinated

proc myelination_axon() {local i
    for i=0, nnode-1 {
        axon[i] {
            gnabar_hh=0
            gkbar_hh=0
            gl_hh=0
            g_pas = 0
            cm = 1

            if (myelination_flag == 0) { // myelinated
                gnabar_hh=gnabar_init
                gkbar_hh=gkbar_init 
                gl_hh=gl_init
            } else {                     // non-myelinated
                g_pas = 0.0002 / 10
                cm = 1 / 200
            }
        }
    }
}
myelination_axon()

{
xpanel("MyelinationControl", 0)
xcheckbox("Myelinated",&myelination_flag,"myelination_axon()")
xpanel(250,250)
}


//////////////////////////////////////////////////
/* ************ Synapse settings ************** */
//////////////////////////////////////////////////

/* Alpha Synapses on dendrites */

nsyn = ndend

objectvar syn[nsyn] // 3 synapses
double locsyn[3]
{
    locsyn[0] = 0.5
    locsyn[1] = 0.5
    locsyn[2] = 0.5
}


// synapse parameters

dend[0] syn[0] = new AlphaSynapse(locsyn[0])
syn[0].onset = 1
syn[0].tau = 0.1

dend[1] syn[1] = new AlphaSynapse(locsyn[1])
syn[1].onset = 1
syn[1].tau = 0.1

dend[2] syn[2] = new AlphaSynapse(locsyn[2])
syn[2].onset = 1
syn[2].tau = 0.1

synamp=0.12
e_syn0 = 0
e_syn1 = 0
e_syn2 = 0

proc synset() {
    syn[0].gmax = synamp
    syn[1].gmax = synamp
    syn[2].gmax = synamp
    syn[0].e = e_syn0
    syn[1].e = e_syn1
    syn[2].e = e_syn2
}

synset()

{
xpanel("SynapseControl", 0)
xvalue("Synapse G max","synamp", 0.12, "synset()", 0, 1)
xvalue("Synapse #1 Esyn (mV)","e_syn0", 0, "synset()")
xvalue("Synapse #2 Esyn (mV)","e_syn1", 0, "synset()")
xvalue("Synapse #3 Esyn (mV)","e_syn2", 0, "synset()")
xpanel(400,250)
}


////////////////////////////////////////////////////
/* ************ Procedure settings ************** */
////////////////////////////////////////////////////

run_time = 20

/* Run Control */

proc run_control() {
xpanel("RunControl", 0)
xvalue("Init","v_init", 1,"stdinit()", 1, 1 )
xbutton("Init & Run","run()")
xbutton("Stop","stoprun=1")
runStopAt = run_time
xvalue("Continue til","runStopAt", 1,"{continuerun(runStopAt) stoprun=1}", 1, 1 )
runStopIn = 1
xvalue("Continue for","runStopIn", 1,"{continuerun(t + runStopIn) stoprun=1}", 1, 1 )
xbutton("Single Step","steprun()")
t = 0
xvalue("t","t", 2 )
tstop = run_time
xvalue("Tstop","tstop", 1,"tstop_changed()", 0, 1 )
dt = 0.025
xvalue("dt","dt", 1,"setdt()", 0, 1 )
steps_per_ms = 40
xvalue("Points plotted/ms","steps_per_ms", 1,"setdt()", 0, 1 )
screen_update_invl = 0.05
xvalue("Scrn update invl","screen_update_invl", 1,"", 0, 1 )
realtime = 0
xvalue("Real Time","realtime", 0,"", 0, 1 )
xpanel(377,289)
}

run_control()


/* Graph */

objref g1, g2, g3
g1 = new Graph ()
addplot(g1, 0)
g1.size(0, run_time, -80, 40)
g1.addvar("hillock.v(0.5)", 1, 1, 0.6, 0.9, 2)
g1.addvar("node[19].v(0.5)", 2, 1, 0.6, 0.9, 2)

g2 = new Graph ()
addplot(g2, 0)
g2.size(0, run_time/2, -80, 40)
g2.addvar("dend[0].v(locsyn[0])", 1, 1, 0.6, 0.9, 2)
g2.addvar("dend[1].v(locsyn[1])", 2, 1, 0.6, 0.9, 2)
g2.addvar("dend[2].v(locsyn[2])", 3, 1, 0.6, 0.9, 2)

g3 = new Graph ()
addplot(g3, 0)
g3.size(0, run_time/2, -80, 40)
g3.addvar("soma.v(0.5)", 1, 1, 0.6, 0.9, 2)