/************************ VTA v2.14 MakeCell.g *********************
*****Functions for making compartments, making channels, and making cell*****
Functions in this file:
make_compartment: called by function make_cell (makes prototype compartment and channels)
set_position: called by make_cell
add_pool: called by make_cell
add_channel: called by function add_intrinsic_channels
add_synaptic_channel: called by function add_shaft_synapses
add_intrinsic_channels: called by function make_cell
add_shaft_synapses: called by function make_cell
make_cell: called by RunCell.g
Rebekah Evans rebekah.evans@nih.gov
**************************************************************************/
include DAcell/globals.g
include DAcell/tabchanforms.g
include DAcell/ConnectCalcium.g
//includes for making each channel
include DAcell/channels/Naf.g
include DAcell/channels/NaL.g
include DAcell/channels/Kaf.g
include DAcell/channels/Kv2.g
include DAcell/channels/Ih.g
include DAcell/channels/CaL12CDI.g
include DAcell/channels/CaL13CDI.g
include DAcell/channels/CaRCDI.g
include DAcell/channels/CaNCDI.g
include DAcell/channels/CaT.g
include DAcell/channels/SK.g
include DAcell/channels/BK.g
include DAcell/channels/NMDA.g
include DAcell/channels/AMPA.g
include DAcell/channels/GABA.g
function make_compartment
create neutral /library
disable /library
pushe /library
if (!{exists compartment})
create compartment compartment
end
addfield compartment position //add a new field "postion" to store distance to soma
setfield compartment \
Em {ELEAK} \
initVm {EREST_ACT} \
inject 0.0 \
position 0.0
//makes voltage gated channels in library
make_Na_channel
make_NaP_channel
make_Ka_channel
make_Kdr_channel
make_Ih_channel
//voltage gated calcium channels in library
make_CaL12_channel
make_CaL13_channel
make_CaR_channel
make_CaN_channel
make_CaT_channel
//calcium activated potassium channels in library
make_SK_channel
make_BK_channel
//synaptic channels in library
make_NMDA_channel
make_AMPA_channel
make_GABA_channel
//make spines in library
make_spine
pope
end
function set_position (cellpath)
str compt, cellpath
float dist2soma,x,y,z
echo "running set_position"
foreach compt ({el {cellpath}/##[TYPE=compartment]})
x={getfield {compt} x}
y={getfield {compt} y}
z={getfield {compt} z}
dist2soma={sqrt {({pow {x} 2 }) + ({pow {y} 2}) + ({pow {z} 2})} }
setfield {compt} position {dist2soma}
end
end
function add_pool (cellpath, poolname)
str cellpath, poolname, compt
float len, dia, kb
float shell_thick = 0.1e-6 //meters
float Ca_base = 50e-6 //mM
float Ca_tau = 25e-3 //seconds
foreach compt ({el {cellpath}/##[TYPE=compartment]})
if (!{{compt} == {{cellpath}@"/axIS"} || {compt} == {{cellpath}@"/ax"}})
dia = {getfield {compt} dia}
len = {getfield {compt} len}
if ({{getpath {compt} -tail} == "soma"})
len = dia
kb = 200
else
kb = 96
end
float shell_dia = dia - shell_thick*2
float shell_vol= {PI}*(dia*dia/4-shell_dia*shell_dia/4)*len
create Ca_concen {compt}/{poolname} // create Ca_pool here!
setfield {compt}/{poolname} \
B {1.0/(2.0*96494*shell_vol*(1+kb))} \
tau {Ca_tau} \
Ca_base {Ca_base} \
thick {shell_thick}
end
end
end
function add_channel(obj, a, b, Gchan, cellpath, chantype)
echo "adding channel" {obj}
str obj, compt, cellpath, chantype
float dia, len, surf, a, b, position, Gchan
if (!{exists /library/{obj}} )
echo the object {obj} has not been made
return
end
foreach compt ({el {cellpath}/##[TYPE=compartment]})
dia = {getfield {compt} dia}
position = {getfield {compt} position}
if ({({dia} > 0.11e-6) && {position > a} && {position <= b} })
//checks that compartment is not a spine, and that position is between [a,b]
len = {getfield {compt} len}
if ({{getpath {compt} -tail} == "soma"})
len = dia
end
surf = dia*{PI}*len
//calculates surface area
copy /library/{obj} {compt}
addmsg {compt} {compt}/{obj} VOLTAGE Vm
setfield {compt}/{obj} Gbar {Gchan*surf} //sets maximal conductance
if ({chantype} == "V")
addmsg {compt}/{obj} {compt} CHANNEL Gk Ek
elif ({chantype} == "KC")
connect_potassium {obj} {compt} {ca_pool} //in ConnectCalcium.g
elif ({chantype}=="C")
connect_calcium {obj} {compt} {ca_pool} //in ConnectCalcium.g
end
end
end
end
function add_synaptic_channel (obj, a, b, gchan, cellpath, ca_pool)
str obj, cellpath, compt, ca_pool
float gchan, a, b, position
echo "adding synaptic channel" {obj}
if (!{exists /library/{obj}} )
echo the object {obj} has not been made
return
end
foreach compt ({el {cellpath}/##[TYPE=compartment]})
position = {getfield {compt} position}
if ({position > a} && {position <= b})
//checks that position is between [a,b]
copy /library/{obj} {compt}
setfield {compt}/{obj} gmax {gchan}
if ({obj} == "NMDA")
addmsg {compt} {compt}/{obj}/block VOLTAGE Vm
addmsg {compt} {compt}/{obj} VOLTAGE Vm
addmsg {compt}/{obj}/block {compt} CHANNEL Gk Ek
connect_NMDA {obj} {compt} {ca_pool} 0 //in ConnectCalcium.g sets GHK to 0 for off or 1 for on
elif ({obj} == "AMPA" || {obj} == "GABA")
addmsg {compt} {compt}/{obj} VOLTAGE Vm
addmsg {compt}/{obj} {compt} CHANNEL Gk Ek
end
end
end
end
function add_intrinsic_channels (cellpath)
str cellpath
add_channel "Na_channel" 0 {TheEnd} {GNa} {cellpath} "V"
add_channel "NaL_channel" 0 {TheEnd} {GNaL} {cellpath} "V"
add_channel "Ka_channel" 0 {prox} {GKa} {cellpath} "V"
add_channel "Kdr_channel" 0 {TheEnd} {GKdr} {cellpath} "V"
add_channel "Ih_channel" 0 {TheEnd} {GIh} {cellpath} "V"
add_channel "CaL12_channel" 0 {TheEnd} {GCaL12} {cellpath} "C"
add_channel "CaL13_channel" 0 {TheEnd} {GCaL13} {cellpath} "C"
add_channel "CaR_channel" 0 {TheEnd} {GCaR} {cellpath} "C"
add_channel "CaN_channel" 0 {TheEnd} {GCaN} {cellpath} "C"
add_channel "CaT_channel" {soma} {TheEnd} {GCaT} {cellpath} "C"
add_channel "SK_channel" 0 {TheEnd} {GSK} {cellpath} "KC"
add_channel "BK_channel" 0 {TheEnd} {GBK} {cellpath} "KC"
echo "intrinsic channels added"
end
function add_shaft_synapses (cellpath)
add_synaptic_channel "NMDA" 0 {TheEnd} {gNMDA} {cellpath} {ca_pool}
add_synaptic_channel "AMPA" 0 {TheEnd} {gAMPA} {cellpath} {ca_pool}
add_synaptic_channel "GABA" 0 {TheEnd} {gGABA} {cellpath} {ca_pool}
echo "synaptic channels added"
end
function make_cell(cellpath, pfile)
str cellpath, pfile
make_compartment
readcell {pfile} {cellpath}
set_position {cellpath}
add_pool {cellpath} {ca_pool}
add_intrinsic_channels {cellpath}
add_shaft_synapses {cellpath}
end