//spines.g for including spines in the MSN model.
include MScell/AddCaSpines.g
//****************make the spines************************************
function make_spines
float surf_neck, vol_neck, len_neck, dia_neck,dia_head,len_head,dia_head, surf_head,vol_head, shell_thick, dia_shell, shell_head, Ca_tau, kB, kE,r,Ca_base
//int shellmode
str buffer1 = "spineCa" // name of the calcium pool in the spine
str buffer2 = "spineCaL"
str buffer3 = "buffer_NMDA" // only to record NMDA-dependent [Ca]
// parameters:
// for spine neck:
len_neck=1e-6 //0.16-2.13
dia_neck=0.1e-6 //(0.038-0.46)e-6
// for spine head:
dia_head=0.5e-6 //adopt common size, no exact data are available now
len_head=0.5e-6
surf_head=dia_head*len_head*{PI}
surf_neck=len_neck*dia_neck*{PI}
// for calcium shells:
shell_thick=0.1e-6
dia_shell= dia_head - shell_thick*2
shell_head={PI}*(dia_head*dia_head-dia_shell*dia_shell)/4
kE =86.0 // Cater and Sabatini, 2004
Ca_tau = 25.0e-3
r= (1+kE)/Ca_tau
Ca_base = 50e-6 // baseline: 50 nM
// vol_neck={len_neck*dia_neck*dia_neck*PI/4.0}
if (!{exists spine})
create compartment spine
end
addfield spine position
setfield spine \
Cm {{CM}*surf_neck} \
Ra { 4.0*len_neck*{RA}/(dia_neck*dia_neck*{PI})} \
Em {ELEAK} \
initVm {EREST_ACT} \
Rm {{RM}/surf_neck} \
inject 0.0 \
dia {dia_neck} \
len {len_neck} \
position 0.0
create compartment spine/head
addfield spine/head position
setfield spine/head \
Cm {{CM}*surf_head} \
Ra { 4.0*{RA}*len_head/(dia_head*dia_head*{PI})} \
Em {ELEAK} \
initVm {EREST_ACT} \
Rm {{RM}/surf_head} \
inject 0.0 \
dia {dia_head} \
len {len_head} \
position 0.0
/*combine neck-head of CA1 CA1_spine */
addmsg spine/head spine RAXIAL Ra Vm
addmsg spine spine/head AXIAL Vm
// make calcium buffers
str buffer1 = "spineCa" // calcium pool for the other calcium channels
str buffer2 = "spineCaL" // calcium pool for L-type Ca2+ channels
str buffer3 = "buffer_NMDA" // only to record NMDA-dependent [Ca]
if ({shellMode}==0)
makeCaBuffer {buffer1} spine/head // to create detailed calcium shells
copy spine/head/{buffer1} spine/head/{buffer2}
copy spine/head/{buffer1} spine/head/{buffer3}
elif ({shellMode}==1) // Sabatini's model. Sabatini, 2001,2004
create Ca_concen spine/head/{buffer1} // to create simplified Ca_pool here!
if ({CaDyeFlag}==2)
kB = 220 // Fluo-4, taken from Yasuda,et,al. 2004,STEK
Ca_tau = (1+kE+kB)/r // re-calculate time constant because of application of the new calcium-dye
elif({CaDyeFlag}==3)
kB = 70 // Fluo-5F
Ca_tau = (1+kE+kB)/r
end
float shell_dia= dia_head - shell_thick*2
float shell_vol= {PI}*(dia_head*dia_head/4-shell_dia*shell_dia/4)*len_head
setfield spine/head/{buffer1} \
B {1.0/(2.0*96494*shell_vol*(1+kE+kB))} \
tau {Ca_tau} \
Ca_base {Ca_base} \
thick {shell_thick}
copy spine/head/{buffer1} spine/head/{buffer2}
copy spine/head/{buffer1} spine/head/{buffer3}
setfield spine/head/{buffer2} Ca_base 50e-6
end
create neutral spine/presyn_ext
create neutral spine/presyn_inh
pushe spine/head
/**************************************************************************************
******************to add NMDA/AMPA channels*******************************************
**************************************************************************************/
addSynChannel . {AMPAname} {AMPAgmax}
addNMDAchannel . {NMDAname} {buffer3} {NMDAgmax} 0
setfield ../presyn_ext z 0
addmsg ../presyn_ext ./{NMDAname} ACTIVATION z
addmsg ../presyn_ext ./{AMPAname} ACTIVATION z
/**********************************end**********************************************
/// now to add GABA
setfield ../presyn_inh z 0
if({GABA2Spine}==1)
addGABAchannel . GABA_1 {GABAcond} // added to spine head
addmsg ../presyn_inh ./GABA_1 ACTIVATION z
addGABAchannel . GABA_2 {GABAcond} // added to spine head
addmsg ../presyn_inh ./GABA_2 ACTIVATION z
elif({GABA2Spine}==2)
addGABAchannel .. GABA_1 {GABAcond} // added to spine neck
addmsg ../presyn_inh ../GABA_1 ACTIVATION z
addGABAchannel .. GABA_2 {GABAcond} // added to spine neck
addmsg ../presyn_inh ../GABA_2 ACTIVATION z
end
*/
if({addCa2Spine}==1)
/*************************************************************************************
****************** to add Calcium Channels********************************************
******************* L-type, R-type, and T-type
**************************************************************************************/
// addCaChannel {obj} {compt} {Gchan} {CalciumBuffer}
float Pbar_CaL12, Pbar_CaL13, Pbar_CaR, Pbar_CaT
Pbar_CaL12 = 3.35e-7
Pbar_CaL13 = 4.25e-7
Pbar_CaR = 13e-7
Pbar_CaT = 0.235e-7
addCaChannelspines CaL12_channel . {Pbar_CaL12} {buffer2} // HVA CaL
addCaChannelspines CaL13_channel . {Pbar_CaL13} {buffer2} // LVA CaL
addCaChannelspines CaR_channel . {Pbar_CaR} {buffer1}
addCaChannelspines CaT_channel . {Pbar_CaT} {buffer1}
end
/***************************************************************************************
*********************** to add Na+ channels*********************************************
****************************************************************************************/
pope
end
//******************done making spines*********************************
//*****************begin function to add spines*********************************
function add_spines_evenly(cellpath,spine,a,b,density)
/* "spine" : spine prototype
** "density" : 1/um, spine density; The number of spines in one compartment = density * compartment length.
*/
str cellpath,compt,spine,thespine,path
int number,i
float dia,len,surf_head,k,dia_dend,len_dend,surf_dend,a,b,density,position
if(!{exists /library/{spine}})
echo The spine protomodel has not been made!
return
end
foreach compt ({el {cellpath}/##[TYPE=compartment]})
if (!{{compt}=={{cellpath}@"/axIS"} || {compt}=={{cellpath}@"/ax"}})
dia={getfield {compt} dia}
position={getfield {compt} position}
len={getfield {compt} len}
if ({{getpath {compt} -tail}=="soma"})
len = dia
end
//if the compartment is not a spine ,
// and its position is between [a,b]
if ({position>=a} && {position<b} )
number = density * len * 1e6
// make sure that one compartment has at least one spine
if (number == 0)
number = number + 1
end
for(i=1;i<=number;i=i+1)
thespine = "spine"@"_"@{i}
copy /library/{spine} {compt}/{thespine}
addmsg {compt}/{thespine} {compt} RAXIAL Ra Vm
addmsg {compt} {compt}/{thespine} AXIAL Vm
end
end // end of if position...
end // end of if ... axIS
end // end of "foreach" loop
end
function add_spines(cellpath,compt_list,spine,number)
str cellpath,compt,spine,thespine,path,compt_list
int number,i
float dia,len,surf_head,k,dia_dend,len_dend,surf_dend
dia= 0.5e-6
len= 0.5e-6
if(!{exists /library/{spine}})
echo The spine protomodel has not been made!
return
end
foreach compt ({arglist {compt_list}})
for(i=1;i<=number;i=i+1)
thespine = "spine"@"_"@{i}
if ({exists {cellpath}/{compt}/{thespine}})
delete {cellpath}/{compt}/{thespine}
reclaim
end
copy /library/{spine} {cellpath}/{compt}/{thespine}
addmsg {cellpath}/{compt}/{thespine} {cellpath}/{compt} RAXIAL Ra Vm
addmsg {cellpath}/{compt} {cellpath}/{compt}/{thespine} AXIAL Vm
end // end of for
end // end of foreach
end
/******** add clustered random spines to the compartments of interest*************************/
function add_Rand_ClusterSpines(cellpath,compt_list,spine_density,filepath, spine_name , mode, maxnum,maxtime,j)
// number: num of AMPA/NMDA per compartment
// mode: "0", all synapses receiving the same random input; "1", receiving different random inputs
str cellpath,compt,NMDAname,AMPAname,spikegen,spiketrain,new_spiketrain,NMDA,AMPA,filepath,fname,compt_list,spine_name,compt2, thespine
float a,b,position,len,spine_density,position,maxtime
int number,i,method,j, mode,maxnum,k //
str NMDAname = "NMDA_ghk"
str AMPAname = "AMPA_ghk"
if (!{ exists /spikes})
create neutral /spikes
end
spiketrain = "/spikes/"@{spine_name}
if (!{ exists {spiketrain}})
create neutral {spiketrain}
end
if(!{exists /library/spine})
echo The spine protomodel "spine" has not been made!
return
end
//j = 20 // spike train
k=1
int all_num = 0
foreach compt ({arglist {compt_list}})
compt = {cellpath}@"/"@{compt}
position ={getfield {compt} position}
// len ={getfield {compt} len}
// number = len*1e6*spine_density
number = spine_density
compt2 = {getpath {compt} -tail}
for(i=1;i<=number;i=i+1)
// new_spiketrain = {spiketrain}@"/"@{i}@"_"@{compt2} // note: there is a bug in the GENESIS
// the command "exists" can not compare two strings like" a[3]_1" and "a[3]_2"
// so we have to name two strings like "1_a[3]" and "2_a[3]" to make them distinguished by "exists"
new_spiketrain = {spiketrain}@"/"@{k}
// echo the spiketrain is {new_spiketrain} and the existence is { exists {new_spiketrain}}
// name each spine in the same compartment
thespine = "spine"@"_"@{i}
if (!{exists {compt}/{thespine}})
copy /library/spine {compt}/{thespine}
addmsg {compt}/{thespine} {compt} RAXIAL Ra Vm
addmsg {compt} {compt}/{thespine} AXIAL Vm
position = {getfield {compt}/{thespine} position}
// just for drawing spines in the cell
setfield {compt}/{thespine} position {position}
setfield {compt}/{thespine}/head position {position}
end
if({mode}==1)
fname = {filepath}@"-"@{j}
else
fname = filepath
end
j=j+1
if ({all_num<maxnum})
if (!{ exists {new_spiketrain}})
create timetable {new_spiketrain}
k=k+1
echo create {new_spiketrain}
setfield {new_spiketrain} maxtime {maxtime} method 4 act_val 1.0 fname {fname}
echo the file name is {fname}
//setfield {new_spiketrain} maxtime 10.0 method 1 act_val 1.0 meth_desc1 0.2
// note: we need to set a delay here
call {new_spiketrain} TABFILL
spikegen = {new_spiketrain}@"/spike"
create spikegen {spikegen}
setfield {spikegen} output_amp 1 thresh 0.5 abs_refract 0.0001
addmsg {new_spiketrain} {spikegen} INPUT activation
addmsg {spikegen} {compt}/{thespine}/head/{NMDAname} SPIKE
addmsg {spikegen} {compt}/{thespine}/head/{AMPAname} SPIKE
else // if (!{ exists {new_spiketrain}}).....
setfield {new_spiketrain} method 4 // need to change it back
setfield {new_spiketrain} fname {fname}
call {new_spiketrain} TABFILL
end // end for if (!{ exists...
all_num = all_num+1
end // end of "if all_num....
end // end of "for...
end // end of "foreach...
end
function activate_spines(cellpath,compt_list,spine,number, interval ,j0)
// j0: the number of first spine to be activated
str cellpath,compt,spine,thespine,path,compt_list
int number,i,j0,j
float interval
if(!{exists /library/{spine}})
echo The spine protomodel has not been made!
return
end
foreach compt ({arglist {compt_list}})
for(i=1;i<=number;i=i+1)
j=j0+(i-1)
thespine = "spine"@"_"@{j}
if (!{exists {cellpath}/{compt}/{thespine}})
echo No {cellpath}/{compt}/{thespine} !
return
end
setfield {cellpath}/{compt}/{thespine}/presyn_ext z {1/{getclock 0}}
step 1
setfield {cellpath}/{compt}/{thespine}/presyn_ext z 0
step {interval} -time
echo activate {compt}/{thespine} now!
end // end of for
end // end of foreach
end
/***********************************************************************************************
************************** MSN Spines***********************************************************
************************************************************************************************/
function make2_spines
float surf_neck, vol_neck, len_neck, dia_neck,dia_head,len_head,dia_head, surf_head,vol_head, shell_thick, dia_shell, shell_head, Ca_tau, kB, kE,r,Ca_base
//int shellmode
str buffer1 = "spineCa" // name of the calcium pool in the spine
str buffer2 = "spineCaL"
str buffer3 = "buffer_NMDA" // only to record NMDA-dependent [Ca]
str NMDAname = "NMDA_channel"
str AMPAname = "AMPA_channel"
// float AMPAcond = 80e-12
// float NMDAcond = 220e-12
//float AMPAcond = 170e-12
//float NMDAcond = 470e-12
//float AMPAcond = {170e-12}*2.5 //2.5 when generating plateau
//float NMDAcond = {470e-12}*2.5
float GABAcond = 1500e-12 // phasic GABA = 40-80 pA according Valence's data
// parameters:
// for spine neck:
len_neck=1e-6 //0.16-2.13
dia_neck=0.1e-6 //(0.038-0.46)e-6
// for spine head:
dia_head=0.5e-6 //adopt common size, no exact data are available now
len_head=0.5e-6
surf_head=dia_head*len_head*{PI}
surf_neck=len_neck*dia_neck*{PI}
// for calcium shells:
shell_thick=0.1e-6
dia_shell= dia_head - shell_thick*2
shell_head={PI}*(dia_head*dia_head-dia_shell*dia_shell)/4
kE =86.0 // Cater and Sabatini, 2004
Ca_tau = 25.0e-3
r= (1+kE)/Ca_tau
Ca_base = 50e-6 // baseline: 50 nM
// vol_neck={len_neck*dia_neck*dia_neck*PI/4.0}
if (!{exists spine})
create compartment spine
end
addfield spine position
setfield spine \
Cm {{CM}*surf_neck} \
Ra { 4.0*len_neck*{RA}/(dia_neck*dia_neck*{PI})} \
Em {ELEAK} \
initVm {EREST_ACT} \
Rm {{RM}/surf_neck} \
inject 0.0 \
dia {dia_neck} \
len {len_neck} \
position 0.0
create compartment spine/head
addfield spine/head position
setfield spine/head \
Cm {{CM}*surf_head} \
Ra { 4.0*{RA}*len_head/(dia_head*dia_head*{PI})} \
Em {ELEAK} \
initVm {EREST_ACT} \
Rm {{RM}/surf_head} \
inject 0.0 \
dia {dia_head} \
len {len_head} \
position 0.0
/*combine neck-head of CA1 CA1_spine */
addmsg spine/head spine RAXIAL Ra Vm
addmsg spine spine/head AXIAL Vm
// // make calcium buffers
// if ({shellMode}==0)
// makeCaBuffer {buffername} spine/head // to create detailed calcium shells
// copy spine/head/{buffername} spine/head/{buffer2}
// elif ({shellMode}==1) // Sabatini's model. Sabatini, 2001,2004
// create Ca_concen spine/head/{buffername} // to create simplified Ca_pool here!
// if ({CaDyeFlag}==2)
// kB = 220 // Fluo-4, taken from Yasuda,et,al. 2004,STEK
// Ca_tau = (1+kE+kB)/r // re-calculate time constant because of application of indicators
// elif({CaDyeFlag}==3)
// kB = 70 // Fluo-5F
// Ca_tau = (1+kE+kB)/r
// end
// float shell_dia= dia_head - shell_thick*2
// float shell_vol= {PI}*(dia_head*dia_head/4-shell_dia*shell_dia/4)*len_head
// setfield spine/head/{buffername} \
// B {1.0/(2.0*96494*shell_vol*(1+kE+kB))} \
// tau {Ca_tau} \
// Ca_base {Ca_base} \
// thick {shell_thick}
// copy spine/head/{buffername} spine/head/{buffer2}
// setfield spine/head/{buffer2} Ca_base 50e-6
// end
// make calcium buffers
if ({shellMode}==0)
makeCaBuffer {buffer1} spine/head // to create detailed calcium shells
copy spine/head/{buffer1} spine/head/{buffer2}
copy spine/head/{buffer1} spine/head/{buffer3}
elif ({shellMode}==1) // Sabatini's model. Sabatini, 2001,2004
create Ca_concen spine/head/{buffer1} // to create simplified Ca_pool here!
if ({CaDyeFlag}==2)
kB = 220 // Fluo-4, taken from Yasuda,et,al. 2004,STEK
Ca_tau = (1+kE+kB)/r // re-calculate time constant because of application of the new calcium-dye
elif({CaDyeFlag}==3)
kB = 70 // Fluo-5F
Ca_tau = (1+kE+kB)/r
end
float shell_dia= dia_head - shell_thick*2
float shell_vol= {PI}*(dia_head*dia_head/4-shell_dia*shell_dia/4)*len_head
setfield spine/head/{buffer1} \
B {1.0/(2.0*96494*shell_vol*(1+kE+kB))} \
tau {Ca_tau} \
Ca_base {Ca_base} \
thick {shell_thick}
copy spine/head/{buffer1} spine/head/{buffer2}
copy spine/head/{buffer1} spine/head/{buffer3}
setfield spine/head/{buffer2} Ca_base 50e-6
end
create neutral spine/presyn_ext
create neutral spine/presyn_inh
pushe spine/head
/**************************************************************************************
******************to add NMDA/AMPA channels*******************************************
**************************************************************************************
*/
int NMDABufferMode = 0 // 1, connect both NMDA and AMPA calcium to NMDA_buffer
// 0, connect only NMDA currents to NMDA_buffer
addAMPAchannelGHKCa . "AMPA_channel_GHKCa" {AMPAname} {buffer3} {AMPAcond2}
addNMDAchannelGHKCa . "NMDA_channel_GHKCa" {NMDAname} {buffer3} {NMDAcond2}
setfield ./{NMDAname}/Mg_block_NMDA CMg {CMg_spine}
// if ({isa dif_shell ./buffer_NMDA} ) // dif_shell
// // echo spine calcium model is dif_shell
// addmsg ./{NMDAname}/GHK ./buffer_NMDA FINFLUX Ik 1
// if({NMDABufferMode}==1)
// addmsg ./{AMPAname}/GHK ./buffer_NMDA FINFLUX Ik 1
// end
// elif ({isa Ca_concen ./buffer_NMDA}) // Ca_conc
// // echo spine calcium model is Ca_conc
// addmsg ./{NMDAname}/GHK ./buffer_NMDA fI_Ca Ik 1
// if({NMDABufferMode}==1)
// addmsg ./{AMPAname}/GHK ./buffer_NMDA fI_Ca Ik 1
// end
// end
if ({isa dif_shell ./{buffer3}} ) // dif_shell
echo spine calcium model is dif_shell
addmsg ./{NMDAname}/GHK ./{buffer3} FINFLUX Ik 1
if({NMDABufferMode}==1)
addmsg ./{AMPAname}/GHK ./{buffer3} FINFLUX Ik 1
end
elif ({isa Ca_concen ./{buffer3}}) // Ca_conc
echo spine calcium model is Ca_conc
addmsg ./{NMDAname}/GHK ./{buffer3} fI_Ca Ik 1
if({NMDABufferMode}==1)
addmsg ./{AMPAname}/GHK ./{buffer3} fI_Ca Ik 1
end
end
setfield ../presyn_ext z 0
addmsg ../presyn_ext ./{NMDAname} ACTIVATION z
addmsg ../presyn_ext ./{AMPAname} ACTIVATION z
/**********************************end**********************************************/
/// now to add GABA
/*
setfield ../presyn_inh z 0
if({GABA2Spine}==1)
addGABAchannel . GABA_1 {GABAcond} // added to spine head
addmsg ../presyn_inh ./GABA_1 ACTIVATION z
// addGABAchannel . GABA_2 {GABAcond} // added to spine head
// addmsg ../presyn_inh ./GABA_2 ACTIVATION z
elif({GABA2Spine}==2)
addGABAchannel .. GABA_1 {GABAcond} // added to spine neck
addmsg ../presyn_inh ../GABA_1 ACTIVATION z
// addGABAchannel .. GABA_2 {GABAcond} // added to spine neck
// addmsg ../presyn_inh ../GABA_2 ACTIVATION z
end
*/
if({addCa2Spine}==1)
/*************************************************************************************
****************** to add Calcium Channels********************************************
******************* L-type, R-type, and T-type
**************************************************************************************/
// addCaChannel {obj} {compt} {Gchan} {CalciumBuffer}
float k_CaT, k_CaR
float Pbar_CaL12, Pbar_CaL13,Pbar_CaT
k_CaT = 1
k_CaR = 1
Pbar_CaL12 = 3.35e-7
Pbar_CaL13 = 4.25e-7
addCaChannelspines CaL12_channel . {Pbar_CaL12} {buffer2} // HVA CaL
addCaChannelspines CaL13_channel . {Pbar_CaL13} {buffer2} // LVA CaL
if ({usingCaR}==1)
addCaChannelspines CaR_channel . {Pbar_CaR*k_CaR} {buffer1}
end
if ({usingCaT}==1)
//addCaChannelspines CaT_channel . {Pbar_CaT*k_CaT} {buffer1}
addCaChannelspines CaT33_channel . {Pbar_CaV33*k_CaT} {buffer1}
addCaChannelspines CaT32_channel . {Pbar_CaV32*k_CaT} {buffer1}
end
//copy /library/KIR_channel .
//setfield ./KIR_channel Gbar {2*gKIRdist*surf_head}
//addmsg . ./KIR_channel VOLTAGE Vm
//addmsg ./KIR_channel . CHANNEL Gk Ek
end
/***************************************************************************************
*********************** to add Na+ channels*********************************************
****************************************************************************************/
pope
end
function make3_spines(spine_name,AMPAcond,NMDAcond)
float surf_neck, vol_neck, len_neck, dia_neck,dia_head,len_head,dia_head, surf_head,vol_head, shell_thick, dia_shell, shell_head, Ca_tau, kB, kE,r,Ca_base,AMPAcond,NMDAcond
str spine_name
//int shellmode
str buffer1 = "spineCa" // name of the calcium pool in the spine
str buffer2 = "spineCaL"
str buffer3 = "buffer_NMDA" // only to record NMDA-dependent [Ca]
str NMDAname = "NMDA_channel"
str AMPAname = "AMPA_channel"
float GABAcond = 1500e-12 // phasic GABA = 40-80 pA according Valence's data
// parameters:
// for spine neck:
len_neck=1e-6 //0.16-2.13
dia_neck=0.1e-6 //(0.038-0.46)e-6
// for spine head:
dia_head=0.5e-6 //adopt common size, no exact data are available now
len_head=0.5e-6
surf_head=dia_head*len_head*{PI}
surf_neck=len_neck*dia_neck*{PI}
// for calcium shells:
shell_thick=0.1e-6
dia_shell= dia_head - shell_thick*2
shell_head={PI}*(dia_head*dia_head-dia_shell*dia_shell)/4
kE =86.0 // Cater and Sabatini, 2004
Ca_tau = 25.0e-3
r= (1+kE)/Ca_tau
Ca_base = 50e-6 // baseline: 50 nM
// vol_neck={len_neck*dia_neck*dia_neck*PI/4.0}
if (!{exists {spine_name}})
create compartment {spine_name}
end
addfield {spine_name} position
setfield {spine_name} \
Cm {{CM}*surf_neck} \
Ra { 4.0*len_neck*{RA}/(dia_neck*dia_neck*{PI})} \
Em {ELEAK} \
initVm {EREST_ACT} \
Rm {{RM}/surf_neck} \
inject 0.0 \
dia {dia_neck} \
len {len_neck} \
position 0.0
create compartment {spine_name}/head
addfield {spine_name}/head position
setfield {spine_name}/head \
Cm {{CM}*surf_head} \
Ra { 4.0*{RA}*len_head/(dia_head*dia_head*{PI})} \
Em {ELEAK} \
initVm {EREST_ACT} \
Rm {{RM}/surf_head} \
inject 0.0 \
dia {dia_head} \
len {len_head} \
position 0.0
/*combine neck-head of CA1 CA1_spine */
addmsg {spine_name}/head {spine_name} RAXIAL Ra Vm
addmsg {spine_name} {spine_name}/head AXIAL Vm
// // make calcium buffers
// if ({shellMode}==0)
// makeCaBuffer {buffername} spine/head // to create detailed calcium shells
// copy spine/head/{buffername} spine/head/{buffer2}
// elif ({shellMode}==1) // Sabatini's model. Sabatini, 2001,2004
// create Ca_concen spine/head/{buffername} // to create simplified Ca_pool here!
// if ({CaDyeFlag}==2)
// kB = 220 // Fluo-4, taken from Yasuda,et,al. 2004,STEK
// Ca_tau = (1+kE+kB)/r // re-calculate time constant because of application of indicators
// elif({CaDyeFlag}==3)
// kB = 70 // Fluo-5F
// Ca_tau = (1+kE+kB)/r
// end
// float shell_dia= dia_head - shell_thick*2
// float shell_vol= {PI}*(dia_head*dia_head/4-shell_dia*shell_dia/4)*len_head
// setfield spine/head/{buffername} \
// B {1.0/(2.0*96494*shell_vol*(1+kE+kB))} \
// tau {Ca_tau} \
// Ca_base {Ca_base} \
// thick {shell_thick}
// copy spine/head/{buffername} spine/head/{buffer2}
// setfield spine/head/{buffer2} Ca_base 50e-6
// end
// make calcium buffers
if ({shellMode}==0)
makeCaBuffer {buffer1} {spine_name}/head // to create detailed calcium shells
copy {spine_name}/head/{buffer1} {spine_name}/head/{buffer2}
copy {spine_name}/head/{buffer1} {spine_name}/head/{buffer3}
elif ({shellMode}==1) // Sabatini's model. Sabatini, 2001,2004
create Ca_concen {spine_name}/head/{buffer1} // to create simplified Ca_pool here!
if ({CaDyeFlag}==2)
kB = 220 // Fluo-4, taken from Yasuda,et,al. 2004,STEK
Ca_tau = (1+kE+kB)/r // re-calculate time constant because of application of the new calcium-dye
elif({CaDyeFlag}==3)
kB = 70 // Fluo-5F
Ca_tau = (1+kE+kB)/r
end
float shell_dia= dia_head - shell_thick*2
float shell_vol= {PI}*(dia_head*dia_head/4-shell_dia*shell_dia/4)*len_head
setfield {spine_name}/head/{buffer1} \
B {1.0/(2.0*96494*shell_vol*(1+kE+kB))} \
tau {Ca_tau} \
Ca_base {Ca_base} \
thick {shell_thick}
copy {spine_name}/head/{buffer1} {spine_name}/head/{buffer2}
copy {spine_name}/head/{buffer1} {spine_name}/head/{buffer3}
setfield {spine_name}/head/{buffer2} Ca_base 50e-6
end
create neutral {spine_name}/presyn_ext
create neutral {spine_name}/presyn_inh
pushe {spine_name}/head
/**************************************************************************************
******************to add NMDA/AMPA channels*******************************************
**************************************************************************************
*/
int NMDABufferMode = 0 // 1, connect both NMDA and AMPA calcium to NMDA_buffer
// 0, connect only NMDA currents to NMDA_buffer
addAMPAchannelGHKCa . "AMPA_channel_GHKCa" {AMPAname} {buffer3} {AMPAcond2}
addNMDAchannelGHKCa . "NMDA_channel_GHKCa" {NMDAname} {buffer3} {NMDAcond2}
// if ({isa dif_shell ./buffer_NMDA} ) // dif_shell
// // echo {spine_name} calcium model is dif_shell
// addmsg ./{NMDAname}/GHK ./buffer_NMDA FINFLUX Ik 1
// if({NMDABufferMode}==1)
// addmsg ./{AMPAname}/GHK ./buffer_NMDA FINFLUX Ik 1
// end
// elif ({isa Ca_concen ./buffer_NMDA}) // Ca_conc
// // echo {spine_name} calcium model is Ca_conc
// addmsg ./{NMDAname}/GHK ./buffer_NMDA fI_Ca Ik 1
// if({NMDABufferMode}==1)
// addmsg ./{AMPAname}/GHK ./buffer_NMDA fI_Ca Ik 1
// end
// end
if ({isa dif_shell ./{buffer3}} ) // dif_shell
echo {spine_name} calcium model is dif_shell
addmsg ./{NMDAname}/GHK ./{buffer3} FINFLUX Ik 1
if({NMDABufferMode}==1)
addmsg ./{AMPAname}/GHK ./{buffer3} FINFLUX Ik 1
end
elif ({isa Ca_concen ./{buffer3}}) // Ca_conc
echo {spine_name} calcium model is Ca_conc
addmsg ./{NMDAname}/GHK ./{buffer3} fI_Ca Ik 1
if({NMDABufferMode}==1)
addmsg ./{AMPAname}/GHK ./{buffer3} fI_Ca Ik 1
end
end
setfield ../presyn_ext z 0
addmsg ../presyn_ext ./{NMDAname} ACTIVATION z
addmsg ../presyn_ext ./{AMPAname} ACTIVATION z
/**********************************end**********************************************/
/// now to add GABA
/*
setfield ../presyn_inh z 0
if({GABA2Spine}==1)
addGABAchannel . GABA_1 {GABAcond} // added to spine head
addmsg ../presyn_inh ./GABA_1 ACTIVATION z
// addGABAchannel . GABA_2 {GABAcond} // added to spine head
// addmsg ../presyn_inh ./GABA_2 ACTIVATION z
elif({GABA2Spine}==2)
addGABAchannel .. GABA_1 {GABAcond} // added to spine neck
addmsg ../presyn_inh ../GABA_1 ACTIVATION z
// addGABAchannel .. GABA_2 {GABAcond} // added to spine neck
// addmsg ../presyn_inh ../GABA_2 ACTIVATION z
end
*/
if({addCa2Spine}==1)
/*************************************************************************************
****************** to add Calcium Channels********************************************
******************* L-type, R-type, and T-type
**************************************************************************************/
// addCaChannel {obj} {compt} {Gchan} {CalciumBuffer}
float k_CaT, k_CaR
float Pbar_CaL12, Pbar_CaL13,Pbar_CaT
k_CaT = 1
k_CaR = 1
Pbar_CaL12 = 3.35e-7
Pbar_CaL13 = 4.25e-7
addCaChannelspines CaL12_channel . {Pbar_CaL12} {buffer2} // HVA CaL
addCaChannelspines CaL13_channel . {Pbar_CaL13} {buffer2} // LVA CaL
if ({usingCaR}==1)
addCaChannelspines CaR_channel . {Pbar_CaR*k_CaR} {buffer1}
end
if ({usingCaT}==1)
//addCaChannelspines CaT_channel . {Pbar_CaT*k_CaT} {buffer1}
addCaChannelspines CaT33_channel . {Pbar_CaV33*k_CaT} {buffer1}
addCaChannelspines CaT32_channel . {Pbar_CaV32*k_CaT} {buffer1}
end
//copy /library/KIR_channel .
//setfield ./KIR_channel Gbar {2*gKIRdist*surf_head}
//addmsg . ./KIR_channel VOLTAGE Vm
//addmsg ./KIR_channel . CHANNEL Gk Ek
end
/***************************************************************************************
*********************** to add Na+ channels*********************************************
****************************************************************************************/
pope
end