//genesis //AddCaSpines.g //Two functions to add calcium (both shells and channels) to spines function add_difshell_spine (calname, type, dia, len, numslabs,thickness_increase) str calname str type float dia float len float r = 0.5*{dia} int numslabs, i str slabname float thickness //Need to add pumps to sides of compartments if (type == "head") thickness={PSD_thick} str compt = "spine/"@{spcomp1} elif (type == "neck") thickness = {len}/{numslabs} str compt="spine" else echo = "oh my god, what did you do???" end //add the difshells and difbuffers for (i = 1; i<=numslabs; i=i+1) slabname={calname} @ {i} create_difshell {compt}/{slabname} {Ca_basal} {thickness} {r} {thickness} {SLAB} add_difbuffer_to_difshell {compt}/{slabname} {bname1} {btotal1} {kf1} {kb1} {d1} {thickness} {r} {thickness} {SLAB} add_difbuffer_to_difshell {compt}/{slabname} {bname2} {btotal2} {kf2} {kb2} {d2} {thickness} {r} {thickness} {SLAB} add_difbuffer_to_difshell {compt}/{slabname} {bname4} {btotal4} {kf4} {kb4} {d4} {thickness} {r} {thickness} {SLAB} if (calciumdye>0) add_difbuffer_to_difshell {compt}/{slabname} {bnamefluor} {btotalfluor} {kffluor} {kbfluor} {dfluor} {thickness} {r} {thickness} {SLAB} if ({calciumdye} ==4) add_difbuffer_to_difshell {compt}/{slabname} {egtaname} {egtatot} {kfegta} {kbegta} {degta} {thickness} {r} {thickness} {SLAB} end end thickness=thickness*thickness_increase end if (type == "head") if (calciumdye==1) //add fura object make_fura {compt} {numslabs} {bnamefluor} {calname} elif (calciumdye > 1) //add wgtavg object for bound single wavelength indicator dye make_buffervolavg {compt} {numslabs} {calname} {bnamefluor} if ({calciumdye}==4) make_buffervolavg {compt} {numslabs} {calname} {egtaname} end end //add wgtavg object to calculated Ca concentration without dyes make_volavg {compt} {numslabs} {calname} end reset //diffusion between shells for (i = 1; i<numslabs; i=i+1) str sn = {calname} @ {i} str innerSn = {calname} @ {i+1} addmsg {compt}/{sn} {compt}/{innerSn} DIFF_DOWN prev_C thick addmsg {compt}/{innerSn} {compt}/{sn} DIFF_UP prev_C thick addmsg {compt}/{sn}{bname2} {compt}/{innerSn}{bname2} DIFF_DOWN prev_free thick addmsg {compt}/{innerSn}{bname2} {compt}/{sn}{bname2} DIFF_UP prev_free thick addmsg {compt}/{sn}{bname4} {compt}/{innerSn}{bname4} DIFF_DOWN prev_free thick addmsg {compt}/{innerSn}{bname4} {compt}/{sn}{bname4} DIFF_UP prev_free thick if (calciumdye>0) addmsg {compt}/{sn}{bnamefluor} {compt}/{innerSn}{bnamefluor} DIFF_DOWN prev_free thick addmsg {compt}/{innerSn}{bnamefluor} {compt}/{sn}{bnamefluor} DIFF_UP prev_free thick if (calciumdye == 4) addmsg {compt}/{sn}{egtaname} {compt}/{innerSn}{egtaname} DIFF_DOWN prev_free thick addmsg {compt}/{innerSn}{egtaname} {compt}/{sn}{egtaname} DIFF_UP prev_free thick end end //parameters needed to computer pump parameters float complen = {getfield {compt}/{sn} len} float compdia = {getfield {compt}/{sn} dia} float SAside = {PI}*{dia}*{len} float CaBase = {getfield {compt}/{sn} Ceq} float vol = {getfield {compt}/{sn} vol} //include top surface are for PSD shell of spine head if (i==1 && type == "head") float surfaceArea = {getfield {compt}/{sn} surf_up} + {SAside} echo "Add pump to PSD!!" {compt}/{sn} "SA: " {surfaceArea} int addncx=0 else float surfaceArea = {SAside} echo "Add pump to " {compt}/{sn} "SA: " {surfaceArea} int addncx=1 end add_mmpump {compt}/{sn} {surfaceArea} {kcatSpine} {km} {MMpumpName} float leak = {{kcatSpine*surfaceArea*CaBase}/{vol*{CaBase + km}}} setfield {compt}/{sn} leak {leak} //optionally add second pump - ncx - to spine if (({addncx}==1) && ({kcatSpineNCX}>0)) add_mmpump {compt}/{sn} {surfaceArea} {kcatSpineNCX} {kmNCX} {NCXname} float leak2 = {{kcatSpineNCX*surfaceArea*CaBase}/{vol*{CaBase + kmNCX}}} setfield {compt}/{sn} leak {leak+leak2} //add_taupump {compt}/{sn} {dia/4.0/tpump_kP} end end return {i} end function addCaChannelspines(channelName, compPath, conductance, caBufferName) str channelName, compPath float conductance str caBufferName pushe {compPath} // Copy the channel from library copy /library/{channelName} {channelName} copy /library/{channelName}GHK {channelName}GHK // Set the new conductance float len = {getfield {compPath} len} float dia = {getfield {compPath} dia} float surf = {len*dia*PI} echo "addCaChannelspines: "{channelName}", cond: "{conductance*GHKluge} ", Comp: "{compPath} ", SA: " {surf} setfield {channelName} Gbar {conductance*surf*GHKluge} coupleCaPoolCaChannel {caBufferName} {compPath} {channelName} // Couple channel, its GHK object and compartment together addmsg {compPath} {channelName}GHK VOLTAGE Vm addmsg {compPath} {channelName} VOLTAGE Vm addmsg {channelName}GHK {compPath} CHANNEL Gk Ek addmsg {channelName} {channelName}GHK PERMEABILITY Gk // float len = {getfield {compPath} len} // float dia = {getfield {compPath} dia} // float pi = 3.141592653589793 // float surf = {len*dia*pi} // // echo "conductance (unscaled): "{conductance} // // echo "Compartment: "{compPath}" surface area "{surf}"m²" // setfield {channelName} Gbar {conductance*surf} pope end