//genesis /*********************************************************************/ /**begin to draw :) **/ // function make_xcell(xcell,tmax) // str xcell // float tmax // create xform /{xcell} [200,50,800,800] // create xlabel /{xcell}/label [10,0,95%,25] \ // -label " CA1 SPINE" \ // -fg red // create xgraph /{xcell}/v [10,10:label.bottom, 50%, 45%] \ // -title "Memberaine Potential" \ // -bg white // create xgraph /{xcell}/syncurrents [10,10:v.bottom,50%,45%] \ // -title "Synaptic currents" \ // -bg white // create xgraph /{xcell}/Ca [10:v.right,10:label.bottom,50%,45%] \ // -title "Calcium Concentration" \ // -bg white // create xgraph /{xcell}/channels [10:syncurrents.right,10:Ca.bottom,48%,45%] \ // -title "Channel Currents" \ // -bg white // setfield /{xcell}/v xmax {tmax+0.8} ymin -0.1 ymax 0.05 // setfield /{xcell}/Ca xmax {tmax+0.8} ymin 1e-6 ymax 1e-2 // setfield /{xcell}/syncurrents xmax {tmax+0.8} ymin 0 ymax 5.0e-12 // setfield /{xcell}/channels xmax {tmax+0.8} ymin -1e-9 ymax 1e-9 // useclock /{xcell}/v 1 // useclock /{xcell}/Ca 1 // useclock /{xcell}/syncurrents 1 // useclock /{xcell}/channels 1 // xshow /{xcell} // reset // end function make_xcells(xcell, label, title1,title2,title3,title4,tmin,tmax) str xcell,label, title1,title2,title3,title4 float tmin,tmax create xform /{xcell} [200,50,800,800] create xlabel /{xcell}/{label} [10,0,95%,25] \ -label {label} \ -fg red create xgraph /{xcell}/{title1} [10,10:{label}.bottom, 50%, 45%] \ -title {title1} \ -bg white create xgraph /{xcell}/{title2} [10,10:{title1}.bottom,50%,45%] \ -title {title2} \ -bg white create xgraph /{xcell}/{title3} [10:{title1}.right,10:{label}.bottom,50%,45%] \ -title {title3} \ -bg white create xgraph /{xcell}/{title4} [10:{title2}.right,10:{title3}.bottom,48%,45%] \ -title {title4} \ -bg white setfield /{xcell}/{title1} xmin {tmin} xmax {tmax} setfield /{xcell}/{title2} xmin {tmin} xmax {tmax} setfield /{xcell}/{title3} xmin {tmin} xmax {tmax} setfield /{xcell}/{title4} xmin {tmin} xmax {tmax} useclock /{xcell}/{title1} 1 useclock /{xcell}/{title2} 1 useclock /{xcell}/{title3} 1 useclock /{xcell}/{title4} 1 xshow /{xcell} reset end function make_VerticalXcells(xcell, label, allTitles,tmin,tmax) str xcell,label, allTitles,title1,title_old float tmin,tmax, height int num,n0 echo allTitles is {allTitles} num = {getarg {arglist {allTitles}} -count} // number of the xgraphs that is going to draw n0 = 1 height = 90.0/num create xform /{xcell} [620,50,400,400] create xlabel /{xcell}/{label} [10,0,100%,5] \ -label {label} \ -fg red foreach title1 ({arglist {allTitles}}) echo title1 is {title1} if (n0 == 1 ) create xgraph /{xcell}/{title1} [10,10:{label}.bottom, 95%, {height}%] \ -title {title1} \ -bg white else title_old = {getarg {arglist {allTitles}} -arg {(n0-1)}} echo title_old is {title_old} and n0 is {n0} create xgraph /{xcell}/{title1} [10,10:{title_old}.bottom, 95%, {height}%] \ -title {title1} \ -bg white end // end of if.... setfield /{xcell}/{title1} xmin {tmin} xmax {tmax} useclock /{xcell}/{title1} 1 n0 = n0+1 end // foreach... xshow /{xcell} reset end function record_channel(cellpath,compt,channel,xcell,label, name,color,ymin,ymax) str cellpath,compt,xcell,channel, path, color,label,name int chanmode // hsolve : 1 // normal : 0 float ymin,ymax // echo the cellpath is {cellpath} // echo the compatment is {compt} // echo the ion channel is {channel} // echo the xcell is {xcell} // echo th chanmode is {chanmode} if(!{exists {cellpath}}) echo the cell {cellpath} does not exist! Please check the cellpath return end if(!{exists {cellpath}/{compt}}) echo the compartment {cellpath}/{compt} does not exist! return end if(!{exists {cellpath}/{compt}/{channel}}) echo the channel {cellpath}/{compt}/{channel} does not exist! return end if(!{exists /{xcell}}) echo the xcell {xcell} does not exist! return end if (!{isa xform /{xcell}}) echo the xcell is not the "xform" object that we want!! return end path = {cellpath}@"/"@{compt}@"/"@{channel} // if ({channel}=="Ca_difshell_1"||{channel}=="Ca_difshell_2"||{channel}=="Ca_difshell_3") if( {isa difshell {path}}) addmsg {cellpath}/{compt}/{channel} /{xcell}/{label} PLOT C *{path} *{color} echo add {path} successfully! elif( {isa Ca_concen {path}}) addmsg {cellpath}/{compt}/{channel} /{xcell}/{label} PLOT Ca *{path} *{color} echo add {path} successfully! // end else // for synaptic and ion channels addmsg {cellpath}/{compt}/{channel} /{xcell}/{label} PLOT Ik *{name} *{color} echo add {path} successfully! end setfield /{xcell}/{label} ymin {ymin} ymax {ymax} end function record_channel_Gk(cellpath,compt,channel,xcell,label, color,ymin,ymax) str cellpath,compt,xcell,channel, path, color,label int chanmode // hsolve : 1 // normal : 0 float ymin,ymax // echo the cellpath is {cellpath} // echo the compatment is {compt} // echo the ion channel is {channel} // echo the xcell is {xcell} // echo th chanmode is {chanmode} if(!{exists {cellpath}}) echo the cell {cellpath} does not exist! Please check the cellpath return end if(!{exists {cellpath}/{compt}}) echo the compartment {cellpath}/{compt} does not exist! return end if(!{exists {cellpath}/{compt}/{channel}}) echo the channel {cellpath}/{compt}/{channel} does not exist! return end if(!{exists /{xcell}}) echo the xcell {xcell} does not exist! return end if (!{isa xform /{xcell}}) echo the xcell is not the "xform" object that we want!! return end path = {cellpath}@"/"@{compt}@"/"@{channel} addmsg {cellpath}/{compt}/{channel} /{xcell}/{label} PLOT Gk *{channel} *{color} echo add {path} successfully! setfield /{xcell}/{label} ymin {ymin} ymax {ymax} end function record_voltage (cellpath, compt, xcell,title,volt_label,color,ymin,ymax,chanmode) str cellpath,compt,xcell,path,path1,color,title,volt_label int chanmode float ymin,ymax if(!{exists {cellpath}}) echo the cell {cellpath} does not exist! Please check the cellpath return end if(!{exists {cellpath}/{compt}}) echo the compartment {cellpath}/{compt} does not exist! return end if(!{exists /{xcell}}) echo the xcell {xcell} does not exist! return end if (!{isa xform /{xcell}}) echo the xcell is not the "xform" object that we want!! return end if ({{chanmode} == 1} || {chanmode}==0 ) path = {getpath {compt} -tail} addmsg {cellpath}/{compt} /{xcell}/{title} PLOT Vm *{volt_label} *{color} elif ({chanmode} == 4) path = {getpath {compt} -tail} path1 = {findsolvefield {cellpath}/solve {path} Vm} addmsg {cellpath} /{xcell}/{title} PLOT {path1} *{volt_label} *{color} else echo The function record_channel currently does not support the chanmode {chanmode}! echo only chanmode 0, 1 and 4 are available! return end setfield /{xcell}/{title} ymin {ymin} ymax {ymax} echo the title is {title} end function increaseXcellDia(cellpath,compt_list,factor) str cellpath,compt_list,compt float dia,factor,dia_new foreach compt ({arglist {compt_list}}) compt = {cellpath}@"/"@{compt} dia = {getfield {compt} dia} dia_new = dia*factor setfield {compt} dia {dia_new} //echo the old dia of {compt} is {dia} and the new dia is {dia_new} end end function makeColorCode(cellpath,compt_list,field,value) str cellpath,compt_list,compt,field float value foreach compt ({arglist {compt_list}}) compt = {cellpath}@"/"@{compt} setfield {compt} {field} {value} end end // the file contains many numbers (such as "Ri") as the color codes // "the_num": which specific line in the file should be taken as the color code? function readColorData(cellpath,compt_list,field,filepath,the_num) str cellpath,compt_list,compt,field,filepath int the_num,n0 float value foreach compt ({arglist {compt_list}}) n0 = 1 openfile {filepath}/{compt}".txt" r while(n0<=the_num) value = {readfile {filepath}/{compt}".txt"} if (n0 == the_num) setfield {cellpath}/{compt} {field} {value} end n0 = n0+1 end // end of while closefile {filepath}/{compt}".txt" //echo the {compt} field {field} is {value} end // end of foreach end function makeSpheres(cellpath, compt_list,xdrawPath,xsphere_name,color,dia) str cellpath,compt_list,compt,color,xsphere_name float x,y,z,dia int i=1 pushe {xdrawPath} foreach compt ({arglist {compt_list}}) x = {getfield {cellpath}/{compt} x} y = {getfield {cellpath}/{compt} y} z = {getfield {cellpath}/{compt} z} if ({exists {xsphere_name}"_"{i}}) delete {xsphere_name}"_"{i} end create xsphere {xsphere_name}"_"{i} -fg {color} -tx {x} -ty {y} -tz {z} -r {dia} i=i+1 end // end of foreach pope end // delete the existed spheres first function makeSpheres_del(cellpath, compt_list,xdrawPath,xsphere_name,color,dia) str cellpath,compt_list,compt,color,xsphere_name float x,y,z,dia int i=1 if ({exists {xdrawPath}/xphere}) delete {xdrawPath}/xphere end create neutral {xdrawPath}/xphere pushe {xdrawPath}/xphere foreach compt ({arglist {compt_list}}) x = {getfield {cellpath}/{compt} x} y = {getfield {cellpath}/{compt} y} z = {getfield {cellpath}/{compt} z} if ({exists {xsphere_name}"_"{i}}) delete {xsphere_name}"_"{i} end create xsphere {xsphere_name}"_"{i} -fg {color} -tx {x} -ty {y} -tz {z} -r {dia} i=i+1 end // end of foreach pope end function plotActiveSynByTime(cellpath,spikeList,drawPath,xsphere_name,color,dia,tmin,tmax,ISI) str spikeList, drawPath, list, list1,cellpath,xsphere_name,color float tmin,tmax,ISI, dur, dt , t0,t1,dia int maxN,n dur = tmax - tmin int maxN = dur/ISI for (n=1;n<=maxN;n=n+1) t0 = tmin+(n-2)*ISI t1 = tmin +(n-1)*ISI echo t0 is {t0}, t1 is {t1} list1 = "" foreach list ({arglist {spikeList}}) list1=list1@" "@{findActivatedRandSyn {list} {t0} {t1}} end // end of foreach... makeSpheres_del {cellpath} {list1} {drawPath} {xsphere_name} {color} {dia} echo list1 is {list1} step {ISI} -time end // end of for ... end