//genesis //MScellSynSpines.g /*************************** MS Model, Version 12 ********************* This is the top level model file, to be called by MSsim.g Avrama Blackwell kblackw1@gmu.edu Rebekah Evans rcolema2@gmu.edu Sriram dsriraman@gmail.com ******************************************************************************/ include MScell/MScell.g //MScell without synapses or spines if ({exists {getglobal EkAMPA}}) include MScell/SynParamsCtx.g //parameters for synaptic channel end include MScell/channels/synaptic_channel.g // function to make non-nmda synaptic channels in library include MScell/channels/nmda_channel.g //function to make nmda channel, either GHK or not, in library include MScell/AddSynapticChannels.g // contains functions to add synaptic channels to compartments include MScell/AddCaSpines.g //includes calcium channels, creates difshells in spine include MScell/spines.g //creates spines, puts channels & calcium in spines function make_MS_cell_SynSpine (cellname,pfile,spinesYN, DA) str cellname,pfile int spinesYN str CompName, DA //******** make the cell without spines or synapses make_MS_cell {cellname} {pfile} {DA} //************* create synaptic channels and spine proto in library * pushe /library make_synaptic_channel {AMPAname} {AMPAtau1} {AMPAtau2} {AMPAgmax} {EkAMPA} {AMPAdes} {AMPAdestau} make_NMDA_channel {NMDAname} {EkNMDA} {Kmg} {NMDAtau2} {NMDAgmax} {ghk_yesno} {NMDAdes} {NMDAdestau} make_synaptic_channel {GABAname} {GABAtau1} {GABAtau2} {GABAgmax} {EkGABA} 0 0 int neckslabs={make_spineProto} pope {cellname} //********************* add spines (with synapses) or just synapses int totspines=0 if (spinesYN==1) // NMDA and AMPA channels are already added in the spine prototype //Also, calcium is already implemented in the spines totspines = {add_spines_evenly {cellname} spine {spineStart} {spineEnd} {spineDensity} {neckslabs}} if(synYesNo==1) foreach CompName ({el {cellname}/#[TYPE={compartment}]}) addSynChannel {CompName} {GABAname} {GABAgmax} "dummyshell" end end str compt /* put in subroutine add comments explain why only in tertdends stemming from secdend11*/ foreach compt ({el {cellname}/#[TYPE={compartment}]}) if (!{{compt}=={{cellname}@"/axIS"} || {compt}=={{cellname}@"/ax"}}) str parentS={getfield {compt} parentsec} if ({{parentS}=={"/cell/secdend11"}}) float dia={getfield {compt} dia} float position={getfield {compt} position} float parentPathlen={getfield {compt} pathlen} float len={getfield {compt} len} float surfaceArea = PI*dia*len float singleSpineSurf = {{{dia_head}*{len_head}*{PI}} + {{dia_neck}*{len_neck}*{PI}}} float Cm_old = {getfield {compt} Cm} float Rm_old = {getfield {compt} Rm} if ({position>={spineStart}} && {position<{spineEnd}} ) //it's a compartment that would have spines int numspines = {{spineDensity} * {len} * 1e6} //echo numspines= {numspines} float totalSpineSurf = singleSpineSurf*numspines setfield {compt} \ Cm {{Cm_old}/{{{surfaceArea}+{totalSpineSurf}}/{surfaceArea}}} \ Rm {{Rm_old}*{{{surfaceArea}+{totalSpineSurf}}/{surfaceArea}}} //echo {compt} oldRm= {Rm_old} NewRm= {getfield {compt} Rm} oldCm= {Cm_old} NewCm= {getfield {compt} Cm} numspines= {numspines} SingleSpineSurf= {singleSpineSurf} surfacearea= {surfaceArea} areafraction= {{{surfaceArea}+{totalSpineSurf}}/{surfaceArea}} //echo {compt} oldCm= {Cm_old} NewCm= {getfield {compt} Cm} str subcompt foreach subcompt ({el {compt}/##[TYPE={compartment}]}) float Cm_old = {getfield {subcompt} Cm} float Rm_old = {getfield {subcompt} Rm} setfield {subcompt} \ Cm {{Cm_old}/{{{surfaceArea}+{totalSpineSurf}}/{surfaceArea}}} \ Rm {{Rm_old}*{{{surfaceArea}+{totalSpineSurf}}/{surfaceArea}}} // echo {subcompt} oldRm= {Rm_old} NewRm= {getfield {subcompt} Rm} oldCm= {Cm_old} NewCm= {getfield {subcompt} Cm} SingleSpineSurf= {singleSpineSurf} surfacearea= {surfaceArea} areafraction= {{{surfaceArea}+{totalSpineSurf}}/{surfaceArea}} //echo {subcompt} oldCm= {Cm_old} NewCm= {getfield {subcompt} Cm} end //end foreach subcompartment (correcting spine neck and head) // float NaF_channel_old = {getfield {compt}/NaF_channel Gbar} // float KAs_channel_old = {getfield {compt}/KAs_channel Gbar} //float Krp_channel_old = {getfield {compt}/Krp_channel Gbar} //float KAf_channel_old = {getfield {compt}/KAf_channel Gbar} // float KIR_channel_old = {getfield {compt}/KIR_channel Gbar} // setfield {compt}/NaF_channel Gbar {NaF_channel_old/{{{surfaceArea}+{totalSpineSurf}}/{surfaceArea}}} // setfield {compt}/KAs_channel Gbar {KAs_channel_old/{{{surfaceArea}+{totalSpineSurf}}/{surfaceArea}}} // setfield {compt}/Krp_channel Gbar {Krp_channel_old/{{{surfaceArea}+{totalSpineSurf}}/{surfaceArea}}} // setfield {compt}/KAf_channel Gbar {KAf_channel_old/{{{surfaceArea}+{totalSpineSurf}}/{surfaceArea}}} // setfield {compt}/KIR_channel Gbar {KIR_channel_old/{{{surfaceArea}+{totalSpineSurf}}/{surfaceArea}}} // echo {compt} NaF_channel_old {NaF_channel_old} NaF_channel_new {getfield {compt}/NaF_channel Gbar} // float gKCaL12_old = {getfield {compt}"/CaL12_channelGHK" Gk} //float gKCaL13_old = {getfield {compt}"/CaL13_channelGHK" Gk} //float gKCaR_old = {getfield {compt}"/CaR_channelGHK" Gk} //float gKCaT_old = {getfield {compt}"/CaT_channelGHK" Gk} // setfield {{compt}@"/CaL12_channelGHK" Gk {gKCaL12_old*surfaceArea+ end end end end else //if no spines, add all synaptic channels to dendrite, add dendritic pool of calcium for NMDA //*******************foreach compartment that WOULD have spines, compensate RM and CM accordingly // Cm_new = Cm_old * (compartment_area + spine_area)/comparment_area // Rm_new = Rm_old/(compartment_area + spine_area)/compartment_area /* str compt foreach compt ({el {cellname}/#[TYPE=compartment]}) if (!{{compt}=={{cellname}@"/axIS"} || {compt}=={{cellname}@"/ax"}}) float dia={getfield {compt} dia} float position={getfield {compt} position} float parentPathlen={getfield {compt} pathlen} float len={getfield {compt} len} float surfaceArea ={{PI}*{dia}*{len}} echo {compt} SurfaceArea= {surfaceArea} float singleSpineSurf = {{{dia_head}*{len_head}*{PI}} + {{dia_neck}*{len_neck}*{PI}} } echo {compt} singleSpineSurfaceArea= {singleSpineSurf} float Cm_old = {getfield {compt} Cm} float Rm_old = {getfield {compt} Rm} if ({position>={spineStart}} && {position<{spineEnd}} ) //it's a compartment that would have spines int numspines = {{spineDensity} * {len} * 1e6} // numspines = 1 echo numspines= {numspines} float totalSpineSurf = {{singleSpineSurf}*{numspines}} echo {compt} TotalSpineSurfaceArea= {totalSpineSurf} setfield {compt} \ Cm {1.0*{Cm_old}*{{surfaceArea}+{totalSpineSurf}}/{surfaceArea}} \ Rm {{Rm_old}/{{{surfaceArea}+{totalSpineSurf}}/{surfaceArea}}} echo {compt} oldRm= {Rm_old} NewRm= {getfield {compt} Rm} echo {compt} oldCm= {Cm_old} NewCm= {getfield {compt} Cm} // float gKCaL12_old = {getfield {compt}"/CaL12_channelGHK" Gk} //float gKCaL13_old = {getfield {compt}"/CaL13_channelGHK" Gk} //float gKCaR_old = {getfield {compt}"/CaR_channelGHK" Gk} // float gKCaT_old = {getfield {compt}"/CaT_channelGHK" Gk} // setfield {{compt}@"/CaL12_channelGHK" Gk {gKCaL12_old*surfaceArea+ end end end*/ if (synYesNo==1) if ({calciumtype}==1) add_CaConcen {NMDApool} 0 500e-6 {cellname} end foreach CompName ({el {cellname}/#[TYPE={compartment}]}) addNMDAchannel {CompName} {NMDAname} {NMDApool} {NMDAgmax} {ghk_yesno} addSynChannel {CompName} {AMPAname} {AMPAgmax} {NMDApool} addSynChannel {CompName} {GABAname} {GABAgmax} "dummyshell" end end end return totspines end