// This channel is modified from the normal NMDA channel to take into // account the separate reversal potential for the Ca-current as compared // to the average reversal potential for the full NMDA-current. // This is done by using a GHK-object. The NMDA-synchan object is coupled // to a GHK object, which is then coupled to its own Mg_block object // (ie, we have two Mg_block objects, one for the Ca-current, and one // for the rest. // // // Todo: // * Add desensitisation of NMDA // * Add saturation of NMDA function make_NMDA_channel_GHKCa(chanPath) str chanPath float CMg = {CMg} //1 [Mg] in mM // Equation 1 from Vargas-Caballero Robinson 2003 // Fitted using optimizeMgBlockVCR.m float KMgA = 2.992 float KMgB = 0.01369 // echo "!!! Using Wolf's parameters temporarilly for comparison" // Same values as Wolf 2005, for comparison // float KMgA = 3.57 // float KMgB = 1/62.0 float Ek = 0.0 // ventral striatum // float tau1 = (5.63e-3)/2 // DE Chapman et al 2003, table 1 (15.31/e=5.63ms) // float tau2 = (320e-3)/2 // DE Chapman et al 2003, figure 2B, 320ms // dorsal striatum // DE Chapman et al 2003, table 1 gives 10-90 % rise time to 12.13 ms // Assume that there is a decay term which is 231 ms (as per the article) // We then see what tau_rise is needed to get the rise time. // NMDAtauFromRiseTime.m implements this. // // This gives tau_rise = 7.1e-3 s // Q-factor is 2. if ({TEMPERATURE} == 35) float tau1 = 7.1e-3/2 float tau2 = (231e-3)/2 // Dorsal striatum has 231 ms decay, same source // q-factor = 2 else float tau1 = 7.1e-3 float tau2 = (231e-3) echo we use room temprature end echo "Changed NMDA decaytime and risetime to match dorsal striatum" float gmax = 220e-12 // Calculated from Ding et al 2008, Wolf old: 300e-12 create synchan {chanPath} addfield {chanPath} gmax_satur setfield {chanPath} \ Ek {Ek} \ tau1 {tau1} \ tau2 {tau2} \ gmax {gmax} \ Gk 0 \ z {setSynBoundary} // NOTE!!! I have modified the source code , z =1, single synapse model create Mg_block {chanPath}/Mg_block_NMDA setfield {chanPath}/Mg_block_NMDA \ CMg {CMg} \ KMg_A {KMgA} \ // {1.0/eta} \ KMg_B {KMgB} // {1.0/gamma} addmsg {chanPath} {chanPath}/Mg_block_NMDA CHANNEL Gk Ek // Modification to account for NMDA Ca's reversal potential echo "Using separate Erev (from GHK) for Ca-part of NMDA current" create ghk {chanPath}/GHK // Using lower Ca conc, when replicating experiment: // BurnashevZhouNeherSakmann1995.pdf (Fig 9A) // setfield {chanPath}/GHK Cout 1.8 // echo "Using Cout = 1.8 for comparison with Burnashev, Zhou," // echo "Neher, Sakmann 1995 (Fig 9A)" setfield {chanPath}/GHK Cout 2 // Carter & Sabatini 2004 uses 2mM, Wolf 5mM setfield {chanPath}/GHK valency 2.0 setfield {chanPath}/GHK T {temperature} // Cin is set with message from Ca_concen object // Here we need to be careful. The GHK object wants the parent channel // to have conductance set to {gChannel*surfaceArea}, but we have set // it to just gChannel. See surfMultiplication further down. end function addNMDAchannelGHKCa(compPath, chanType,chanName,caBuffer,gbar) str compPath, chanName,chanType float gbar str caBuffer // str caBuffer = "CaTbuf" copy /library/MSsynaptic/{chanType} {compPath}/{chanName} addmsg {compPath}/{chanName}/Mg_block_NMDA {compPath} CHANNEL Gk Ek addmsg {compPath} {compPath}/{chanName}/Mg_block_NMDA VOLTAGE Vm addmsg {compPath} {compPath}/{chanName} VOLTAGE Vm // Set the new conductance float len = {getfield {compPath} len} float dia = {getfield {compPath} dia} float pi = 3.141592653589793 float surf = {len*dia*pi} // This is a bit tricky: // synchan wants gmax = gbar for calculation of normal nmda current // ghk object wants gmax = gbar*surfacearea // further, we want normal NMDA current to be 90% and Ca-component 10% float fracCaNMDA = 0.1 setfield {compPath}/{chanName} gmax {gbar*(1-fracCaNMDA)} // GHK object needs conductance times surface area in Gk message create table {compPath}/{chanName}/surfMultiplication // Set up the table with one element, that contains surface area / 9 call {compPath}/{chanName}/surfMultiplication TABCREATE 1 1 1 // Dont ask... tune to get 10% Ca current when GHK is used // Burnashev/Sakmann J Phys 1995 485 403-418 // /home/hjorth/artiklar/NMDA/BurnashevZhouNeherSakmann1995.pdf (Fig 9A) // Use -60mV and 1.8mM externa Ca when tuneing float magicFactorX = 3.46e-8 // 3.46e-8 //43//3.1e-8 // Reason for 0.1/0.9 is that Ca-component is 10% only, rest was 90% // GHK wants permeability scaled by surface area setfield {compPath}/{chanName}/surfMultiplication \ table->table[0] {fracCaNMDA/(1-fracCaNMDA)*magicFactorX} \ step_mode TAB_IO // We tuned it to soma-sized compartments, but made an error... // // // Reason for 0.1/0.9 is that Ca-component is 10% only, rest was 90% // // GHK wants permeability scaled by surface area // setfield {compPath}/{chanName}/surfMultiplication \ // table->table[0] {surf*fracCaNMDA/(1-fracCaNMDA)*magicFactorX} \ // step_mode TAB_IO addmsg {compPath}/{chanName}/Mg_block_NMDA \ {compPath}/{chanName}/surfMultiplication PRD Gk addmsg {compPath}/{chanName}/surfMultiplication \ {compPath}/{chanName}/GHK PERMEABILITY output // Send compartments Ca-conc and voltage to GHK object // addmsg {compPath}/{caBuffer} {compPath}/{chanName}/GHK CIN C addmsg {compPath} {compPath}/{chanName}/GHK VOLTAGE Vm if ({isa dif_shell {compPath}/{caBuffer}} ) // dif_shell //echo spine calcium model is dif_shell addmsg {compPath}/{chanName}/GHK {compPath}/{caBuffer} FINFLUX Ik 1 addmsg {compPath}/{caBuffer} {compPath}/{chanName}/GHK CIN C elif ({isa Ca_concen {compPath}/{caBuffer}}) // Ca_conc //echo spine calcium model is Ca_conc addmsg {compPath}/{chanName}/GHK {compPath}/{caBuffer} fI_Ca Ik 1 addmsg {compPath}/{caBuffer} {compPath}/{chanName}/GHK CIN Ca end addmsg {compPath}/{chanName}/GHK {compPath} CHANNEL Gk Ek // Ugly fix for hsolver to work // if({useHsolve}) // echo "nmda_channel_ghkCa: This has not been updated to account for Ca-block" // echo "as required by hsolver, see source code nmda_channel_ghkCa.g" // quit // int blockNum = {substring {chanName} {{findchar {chanName} _}+8}} // move {compPath}/{chanName}/Mg_block_NMDA \ // {compPath}/{chanName}/Mg_block{blockNum} // move {compPath}/{chanName}/GHK {compPath}/{chanName}/GHK{blockNum} // move {compPath}/{chanName}/surfMultiplication \ // {compPath}/{chanName}/surfMultiplication{blockNum} // end end