/* Relating dendritic geometry and signal propagation */
/* Philipp Vetter, Arnd Roth and Michael Hausser */
/* gui.hoc Version 1.0 11.10.1999 */
xopen("init.hoc")
/*********************************************************
GUI Graphical User Interface
*********************************************************/
proc Main() {
/* Calls main panel and allows */
/* - Loading a cell */
/* - Clearing the Screen */
/* - Plotting various Graphs */
/* - Loading other Panels */
/* - Miscellaneous */
/* - Quit */
xpanel("Main")
xbutton("Load Neuron","Load_cell()")
xbutton("Clear Screen","clf()")
Graph_menu()
xmenu("Other Panels")
xbutton("Electrophysiology","Electrophysiology()")
xbutton("Statistics","Statistics()")
xbutton("Channels","Conductances()")
xbutton("Simulation settings","Simulation()")
xbutton("Geometry","Geometry()")
xmenu()
/* copied from "graphpanel" */
xmenu("Miscellaneous")
xmenu("Clipboard")
xbutton("Save to File","load_proc(\"clipboard_save\") clipboard_save()")
xbutton("Retrieve from File","load_proc(\"clipboard_retrieve\") clipboard_retrieve()")
xbutton("Gather Values","load_template(\"GatherVec\") makeGatherVec()")
xbutton("Vector Play","load_template(\"VectorPlay\") makeVectorPlay()")
xbutton("Vector Wrapper","load_template(\"VecWrap\") makeVecWrap()")
xmenu()
xmenu("Family")
xbutton("Family","load_template(\"Family\") makeFamily()")
xbutton("Command","load_template(\"ExecCommand\") newcommand()")
xmenu()
xbutton("Parameterized Function","load_template(\"FunctionFitter\") makefitter()")
xbutton("Run Fitter","load_template(\"RunFitter\") makerunfitter()")
xmenu("Impedance")
xbutton("Frequency","load_template(\"ImpedanceRatio\") makeImpRatio()")
xbutton("Path","load_template(\"Impx\") makeImpx()")
xbutton("log(A) vs x","load_template(\"LogAvsX\") makelogax()")
xbutton("Shape","load_template(\"ImpShape\") makeImpShape()")
xmenu()
xmenu("Viewers")
xbutton("Shape Name","load_template(\"MenuExplore\") makeMenuExplore()")
xbutton("Name Values","nrnallsectionmenu()")
xmenu("Mechanisms (Globals)")
xbutton("na_ion","nrnglobalmechmenu(\"na_ion\")")
xbutton("k_ion","nrnglobalmechmenu(\"k_ion\")")
xbutton("hh","nrnglobalmechmenu(\"hh\")")
xbutton("ca_ion","nrnglobalmechmenu(\"ca_ion\")")
xbutton("ca","nrnglobalmechmenu(\"ca\")")
xbutton("cad","nrnglobalmechmenu(\"cad\")")
xbutton("kca","nrnglobalmechmenu(\"kca\")")
xbutton("km","nrnglobalmechmenu(\"km\")")
xbutton("kv","nrnglobalmechmenu(\"kv\")")
xbutton("na","nrnglobalmechmenu(\"na\")")
xmenu()
xmenu()
xmenu("Point Processes")
xbutton("IClamp","makePointBrowser(\"IClamp\")")
xbutton("SEClamp","makePointBrowser(\"SEClamp\")")
xbutton("AlphaSynapse","makePointBrowser(\"AlphaSynapse\")")
xbutton("syn2","makePointBrowser(\"syn2\")")
xbutton("TrigKSyn","makePointBrowser(\"TrigKSyn\")")
xbutton("SEClamp","makePointBrowser(\"SEClamp\")")
xbutton("VClamp","makePointBrowser(\"VClamp\")")
xbutton("APCount","makePointBrowser(\"APCount\")")
xmenu()
xmenu("Distributed Mechanisms")
xmenu("Managers")
xbutton("Inserter","load_template(\"Inserter\") makeinserter()")
xbutton("Homogeneous Spec","load_proc(\"makeshowmechanism\") makeshowmechanism()")
xmenu()
xmenu()
xmenu()
xbutton("Quit","quit()")
xpanel(400,0)
// Conductances()
}
proc Geometry() {
/* Calls Geometry panel and allows */
/* - Removing/Adding an Axon to cell */
/* - Calculate Geometric parameters */
/* - Shape Name */
vbox1 = new VBox()
vbox1.intercept(1)
xpanel("1",1)
xbutton("Remove Axon","remove_axon()")
xbutton("Connext Axon","clf()")
xpanel()
xpanel("1",1)
xbutton("Recalculate Geometry","geometry_calc()")
xbutton("Shape Name","load_template(\"MenuExplore\") makeMenuExplore()")
xpanel(400,0)
vbox1.intercept(0)
vbox1.map("Geometry",800,300,300,25)
}
proc Simulation() {
/* Calls Simulation panel and allows */
/* - Simulation duration,dt,recording delay */
/* - Stimulus electrode amplitude, delay & duration */
/* - Recording (for plotting purposes) duration, delay, dt */
xpanel("Simulation", 0)
xpvalue("rec dur",&rec_dur,1,"rec_set(rec_del,rec_dur,rec_dt)")
xpvalue("rec del",&rec_del,1,"rec_set(rec_del,rec_dur,rec_dt)")
xpvalue("rec dt",&rec_dt,1,"rec_set(rec_del,rec_dur,rec_dt)")
xpvalue("stim amp",&st_amp,1,"st_set(st_amp,st_del,st_dur)")
xpvalue("stim del",&st_del,1,"st_set(st_amp,st_del,st_dur)")
xpvalue("stim dur",&st_dur,1,"st_set(st_amp,st_del,st_dur)")
xpvalue("sim dur",&sim_dur,1,"sim_set(sim_dur,sim_dt,sim_durI,sim_dtI)")
xpvalue("sim dt",&sim_dt,1,"sim_set(sim_dur,sim_dt,sim_durI,sim_dtI)")
xpvalue("sim durI",&sim_durI,1,"sim_set(sim_dur,sim_dt,sim_durI,sim_dtI)")
xpvalue("sim dtI",&sim_dtI,1,"sim_set(sim_dur,sim_dt,sim_durI,sim_dtI)")
xpanel(950,270)
}
proc Nonuniform() {
/* Calls Nonuniform panel and allows */
/* - setting of nonuniform passive membrane properties */
nonuniform_Rm = 1
xpanel("Nonuniform", 0)
xlabel("nonuniformity")
xpvalue("rm",&rm,1,"passive_set(rm,rax,c_m,cm_myelin,rm_node,rm_end,rm_steep,rm_half)")
xpvalue("rm_end",&rm_end,1,"passive_set(rm,rax,c_m,cm_myelin,rm_node,rm_end,rm_steep,rm_half)")
xpvalue("rm_steep",&rm_steep,1,"passive_set(rm,rax,c_m,cm_myelin,rm_node,rm_end,rm_steep,rm_half)")
xpvalue("rm_half",&rm_half,1,"passive_set(rm,rax,c_m,cm_myelin,rm_node,rm_end,rm_steep,rm_half)")
xpanel(1050,270)
}
proc Electrophysiology() {
/* Calls Electrophysiology panel and allows */
/* - voltage clamping [press "voltage clamp"] */
/* - resetting location, scaling, and chosing waveform to be played */
/* - current clamping [press "current clamp"] */
/* - resetting location, amplitude of current */
/* - synaptic activation [press "synapse"] */
/* - resetting location, parameters of synapse */
vbox1 = new VBox()
vbox1.intercept(1)
xpanel("yo",1)
xvarlabel(cellnameact)
xcheckbox("movie",&movie)
xpanel()
xpanel("Voltage Clamp", 1)
xbutton("Voltage Clamp","gactive_run(1)")
xbutton("Location","PointLocator(0)")
xpvalue("scaling",&VClampScale)
xmenu("Waveform")
xbutton("somatic AP (p18)","set_waveform()")
xbutton("dendritic AP (p21)","set_waveform(\"dendspike_p21\",1)")
xbutton("currently picked waveform","set_waveform(hoc_obj_[0])")
xbutton("load waveform...","set_waveform(\"dendspike_p21\",1,1)")
xmenu()
xpanel()
xpanel("Current Clamp",1)
xbutton("Current Clamp","gactive_run(0)")
xbutton("Location","PointLocator(1)")
xpvalue("Amplitude",&st_amp,1,"st_set(st_amp,st_del,st_dur)")
xpanel()
xpanel("Synaptic",1)
xbutton("Synapse","gactive_run(5)")
xbutton("Location","PointLocator(2)")
xpvalue("gmax",&synapse_gmax,0.1,"set_synapse(synapse_gmax,synapse_tau0,synapse_tau1,synapse_onset,synapse_e)")
xpanel()
xpanel("other",1)
xbutton("Input Resistance","rinput_calc()")
xbutton("g_na threshold","threshold_find()")
xvarlabel(Nathreshold)
xpanel()
vbox1.intercept(0)
vbox1.map("Electrophysiology",500,0,400,180)
}
proc Statistics() { local i
/* Calls Statistics panel and allows */
/* [get_data] load simulation results for analysis */
/* [legend] plot legend of the different cell-types (see below) */
/* [Average] print cell-type averaged values of the parameter specified under [y] */
/* [Single] correlate parameter specified under [y] with [x1] */
/* [Double] correlate parameter specified under [y] with combination of [x1]&[x2] */
/* [Triple] correlate parameter specified under [y] with combination of [x1]&[x2]&[x3] */
/* [x powers] specifies whether correlations are optimized w.r.t power of x1 */
vbox1 = new VBox()
vbox1.intercept(1)
xpanel("Ho",1)
xbutton("Get Data","Getdata()")
xbutton("Legend","clegend()")
xvarlabel(actname)
xpanel()
xpanel("1",1)
xbutton("Average","averages(Yval)")
xbutton("Single","singlecorrelation(Yval,Xval1)")
xbutton("Double","doublecorrelation(Yval,Xval1,Xval2)")
xbutton("Triple","triplecorrelation(Yval,Xval1,Xval2,Xval3)")
xcheckbox("Powers",&powers)
xpanel(300,20)
for i=0,3 { stats_sub(i) }
vbox1.intercept(0)
vbox1.map("Statistics",500,0,380,260)
}
proc Graph_menu() {
xmenu("Graphs")
xmenu("New Graph")
xbutton("Voltage axis","newPlotV()")
xbutton("Current axis","newPlotI()")
xbutton("State axis","newPlotS()")
xbutton("Shape plot","newshapeplot()")
xbutton("Vector movie","newvectorplot()")
xbutton("Phase Plane","newphaseplane()")
xbutton("Grapher","load_proc(\"makegrapher\") makegrapher()")
xmenu()
xbutton("-------------------","n=1")
xmenu("Which Sections")
xradiobutton("trunk","sim_plt(1)")
xradiobutton("all","sim_plt(2)")
xradiobutton("branchpoints","sim_plt(3)")
xradiobutton("terminations","sim_plt(4)")
xradiobutton("branchpoints_noend","sim_plt(5)")
xradiobutton("all_noend","sim_plt(6)")
xmenu()
xmenu("Which Length")
xradiobutton("electrotonic","L_switch(1) sim_plt()")
xradiobutton("physical","L_switch(0) sim_plt()")
xmenu()
xbutton("-------------------","n=1")
xbutton("Simulation","sim_plot()")
xbutton("Geometric values","geom_plot()")
xbutton("Functional values","impedance_plot()")
xbutton("-------------------","n=1")
xmenu("Simulation X against distance")
xbutton("peak voltage change","APdvdr_plot()") /* dvpeak/dr(distance soma) */
xbutton("AP amplitude","APamp_plot()") /* AP amplitude(distance soma) */
xbutton("AP max velocity","APvmax_plot()") /* AP maxvelocity(distance soma) */
xbutton("AP peak latency","APplat_plot()") /* AP peak latency(distance soma) */
xbutton("AP onset latency","APolat_plot()") /* AP onset latency(distance soma) */
xbutton("AP halfwidth","APhalf_plot()") /* AP halfwidth(distance soma) */
xbutton("AP voltage vs time","APvolt_plot()")
xbutton("AP peak","APpeak_plot()")
xbutton("general info","APtext_plot()") /* general info on cell */
xmenu()
xmenu("Gemeotric individual")
xradiobutton("attenuation_plot()")
xradiobutton("interbranchdist()")
xradiobutton("areadist()")
xradiobutton("dareadist()")
xradiobutton("diamdist()")
xradiobutton("ralldistribution()")/* plot rall ration distribution */
xradiobutton("diam_distance()") /* plot distance upstream branchpoint v distance soma */
xradiobutton("branchhist()") /* histogram of branchpoints and terminations */
xradiobutton("branchgauss()") /* Gaussian distribution of branchpoints and terminations */
xradiobutton("crossarea()") /* plot crossectional area as fxn of distance */
xradiobutton("ralldarea()") /* plot "ralldarea" as a fxn of distance */
xmenu()
xmenu("Impedance individual")
xradiobutton("Rmismatch_plot()") /* Resistance mismatch */
xradiobutton("Zmismatch_plot()") /* Impedance mismatch */
xradiobutton("APsine()") /* AP sine frequency */
xradiobutton("mismatch_bar()") /* bar chart of R & Z mean values */
xradiobutton("Rmismatchgauss()") /* plot distribution of R (distal/distal + proximal) */
xradiobutton("Zmismatchgauss()")
xmenu()
xmenu()
}
proc runcontrol() {
xpanel("RunControl", 0)
xcheckbox("Use CVode",&using_cvode_,"cvode.active(using_cvode_)")
v_init = -70
xvalue("Init","v_init", 1,"stdinit()", 1, 1 )
xbutton("Init & Run","run()")
xbutton("Stop","stoprun=1")
runStopAt = 5
xvalue("Continue til","runStopAt", 1,"{continuerun(runStopAt) stoprun=1}", 1, 1 )
runStopIn = 1
xvalue("Continue for","runStopIn", 1,"{continuerun(t + runStopIn) stoprun=1}", 1, 1 )
xbutton("Single Step","steprun()")
t = 0
xvalue("t","t", 2 )
tstop = 1000
xvalue("Tstop","tstop", 1,"tstop_changed()", 0, 1 )
dt = 0.025
xvalue("dt","dt", 1,"setdt()", 0, 1 )
steps_per_ms = 40
xvalue("Points plotted/ms","steps_per_ms", 1,"setdt()", 0, 1 )
xpanel(970,340)
}
proc mainpanel() {
xpanel("NEURON Main Panel", 0)
xcheckbox("Quiet",&stdrun_quiet,"")
realtime = 0
xvalue("Real Time","realtime", 0,"", 0, 1 )
celsius = 37
xvalue("celsius","celsius", 1,"", 0, 1 )
global_ra = 150
xvalue("Axial Resistivity","global_ra", 1,"set_ra()", 1, 1 )
xbutton("RunControl","nrncontrolmenu()")
xmenu("New Graph")
xbutton("Voltage axis","newPlotV()")
xbutton("Current axis","newPlotI()")
xbutton("State axis","newPlotS()")
xbutton("Shape plot","newshapeplot()")
xbutton("Vector movie","newvectorplot()")
xbutton("Phase Plane","newphaseplane()")
xbutton("Grapher","load_proc(\"makegrapher\") makegrapher()")
xmenu()
xmenu("Point Processes")
xmenu("Managers")
xbutton("Point Manager","load_template(\"PointProcessManager\") makeppm()")
xbutton("Point Group","load_template(\"PointProcessGroupManager\") makeppgm()")
xbutton("Electrode","load_proc(\"makeelectrode\") makeelectrode()")
xmenu()
xmenu("Viewers")
xmenu("PointProcesses")
xbutton("IClamp","makePointBrowser(\"IClamp\")")
xbutton("AlphaSynapse","makePointBrowser(\"AlphaSynapse\")")
xbutton("Synapse","makePointBrowser(\"syn2\")")
xbutton("TrigKSyn","makePointBrowser(\"TrigKSyn\")")
xbutton("SEClamp","makePointBrowser(\"SEClamp\")")
xbutton("VClamp","makePointBrowser(\"VClamp\")")
xbutton("APCount","makePointBrowser(\"APCount\")")
xmenu()
xmenu()
xmenu()
xmenu("Distributed Mechanisms")
xmenu("Managers")
xbutton("Inserter","load_template(\"Inserter\") makeinserter()")
xbutton("Homogeneous Spec","load_proc(\"makeshowmechanism\") makeshowmechanism()")
xmenu()
xmenu("Viewers")
xbutton("Shape Name","load_template(\"MenuExplore\") makeMenuExplore()")
xbutton("Name Values","nrnallsectionmenu()")
xmenu("Mechanisms (Globals)")
xbutton("na_ion","nrnglobalmechmenu(\"na_ion\")")
xbutton("k_ion","nrnglobalmechmenu(\"k_ion\")")
xbutton("hh","nrnglobalmechmenu(\"hh\")")
xbutton("ca_ion","nrnglobalmechmenu(\"ca_ion\")")
xbutton("ca","nrnglobalmechmenu(\"ca\")")
xbutton("cad","nrnglobalmechmenu(\"cad\")")
xbutton("kca","nrnglobalmechmenu(\"kca\")")
xbutton("km","nrnglobalmechmenu(\"km\")")
xbutton("kv","nrnglobalmechmenu(\"kv\")")
xbutton("na","nrnglobalmechmenu(\"na\")")
xmenu()
xmenu()
xmenu()
xmenu("Miscellaneous")
xmenu("Clipboard")
xbutton("Save to File","load_proc(\"clipboard_save\") clipboard_save()")
xbutton("Retrieve from File","load_proc(\"clipboard_retrieve\") clipboard_retrieve()")
xbutton("Gather Values","load_template(\"GatherVec\") makeGatherVec()")
xbutton("Vector Play","load_template(\"VectorPlay\") makeVectorPlay()")
xbutton("Vector Wrapper","load_template(\"VecWrap\") makeVecWrap()")
xmenu()
xmenu("Family")
xbutton("Family","load_template(\"Family\") makeFamily()")
xbutton("Command","load_template(\"ExecCommand\") newcommand()")
xmenu()
xbutton("Parameterized Function","load_template(\"FunctionFitter\") makefitter()")
xbutton("Run Fitter","load_template(\"RunFitter\") makerunfitter()")
xmenu("Impedance")
xbutton("Frequency","load_template(\"ImpedanceRatio\") makeImpRatio()")
xbutton("Path","load_template(\"Impx\") makeImpx()")
xbutton("log(A) vs x","load_template(\"LogAvsX\") makelogax()")
xbutton("Shape","load_template(\"ImpShape\") makeImpShape()")
xmenu()
xmenu()
xpanel(910,70)
}
proc PointLocator() {
if ($1==0) ppl = new PointProcessLocator(vclamp)
if ($1==1) ppl = new PointProcessLocator(st)
if ($1==2) ppl = new PointProcessLocator(synapse)
}
proc select_ref() { ref2.loc(hoc_ac_)
ref.point_mark_remove()
ref.point_mark(ref2,3)
}
proc gactive_run() { local n
/* simupanel run for GUI */
n = numarg()
rinput_calc()
if (n>0) { simMode = $1 }
if (n>0) sim(VClampScale) else sim()
sim_calc()
sim_plot()
}
equiv=0
proc neuron_set() { local dummy,dummy2,ct,i
dummy=equiv
equiv=0
forward = 0
printcellnameact = 0
dcell = cell
dcore = core
dsuffix = suffix
dcellname = cellname
dcelladdress = celladdress
xmenu("Neuron")
for i=0,7 {
if (i==0) xmenu("Pyramidal")
if (i==1) xmenu("Nigral")
if (i==2) xmenu("Purkinje")
if (i==3) xmenu("DG granule cells")
if (i==4) xmenu("DG interneurons")
if (i==5) xmenu("CA1 Pyramidal")
if (i==6) xmenu("CA3 Pyramidal")
if (i==7) xmenu("CA3 interneurons")
for ct=0,CellList.count-1 { if (CellList.object(ct).type==i) {
cell_name(CellList.object(ct).loc)
sprint(str1,"xradiobutton(cellname,\"cell_name(CellList.object(%d).loc,1)\")",ct)
execute(str1)
}}
xmenu() }
xmenu()
equiv=dummy
printcellnameact = 1
cell = dcell
core = dcore
suffix = dsuffix
cellname = dcellname
celladdress = dcelladdress
}
proc stats_sub() { local ct
n = $1
if (n==0) str1 = "y"
if (n==1) str1 = "x1"
if (n==2) str1 = "x2"
if (n==3) str1 = "x3"
xpanel(str1)
xmenu(str1)
if (n==1) xbutton("functional","geometric=0 Xval1=-2 Xval1str = \"functional\"")
if (n==1) xbutton("geometric","geometric=1 Xval1=-1 Xval1str = \"geometric\"")
ct = 0
for i=0,parameters.count()-1 {
if ((mod(i,25)==0)) {
if (ct>0) xmenu()
sprint(str1,"%d",ct+1)
xmenu(str1)
ct += 1 }
str2 = parameters.object(i).str
N = parameters.object(i).n
sprint(str2,"xbutton(\"%s\",\"pick(%d,%d)\")",str2,n,N)
execute(str2) // makes button entry
}
xmenu()
if (n==0) xvarlabel(Yvalstr)
if (n==1) xvarlabel(Xval1str)
if (n==2) xvarlabel(Xval2str)
if (n==3) xvarlabel(Xval3str)
xmenu()
xpanel(300,0)
}
proc pick() {
dissect($2)
if ($1==0) { Yvalstr = Data[ci][cj][ck].str
Yval = $2 }
if ($1==1) { Xval1str = Data[ci][cj][ck].str
Xval1 = $2 }
if ($1==2) { Xval2str = Data[ci][cj][ck].str
Xval2 = $2 }
if ($1==3) { Xval3str = Data[ci][cj][ck].str
Xval3 = $2 }
}
proc singlecorrelation() { local i
if ($2==-2) { if (powers) single_corrf(Yval,1) else single_corrf(Yval) }
if ($2==-1) { if (powers) single_corr(Yval,1) else single_corr(Yval) }
if (($2<0)&&(powers==0)) { for i=0,5 cplot(Yval,goodcorr[1].x[i]) }
if (($2<0)&&(powers==1)) { for i=0,5 powerplot(Yval,goodcorr[1].x[i]) }
if ($2>-1) {if (powers) powerplot($1,$2) else cplot($1,$2)}
}
proc doublecorrelation() {
if ($2==-1) {if (powers) double_corr(Yval) else double_corr(Yval,1)}
if ($2==-2) continue_dialog("This is not implemented at present")
if ($2>-1) { if (powers) powerplot(Yval,Xval1,Xval2) else { c3(Yval,Xval1,Xval2) cplot()} }
}
proc triplecorrelation() {
if (($2>-1)&&(powers==1)) powerplot(Yval,Xval1,Xval2,Xval3) else {
continue_dialog("This is not implemented at present") }
}
proc sim_plot() { /* plot simulation results of trunk segments */
clf()
APvolt_plot()
APamp_plot()
// APvmax_plot()
// APplat_plot()
// APolat_plot()
// APhalf_plot()
if (cells >3) APvolt_plot(3)
// APpeak_plot()
APtext_plot()
APdvdr_plot()
}
proc geom_plot() { /* plot geometric measures */
if (!numarg()) { geometry_calc(1) }
// interbranchdist()
/* branchgauss() */
branchhist()
areadist()
dareadist()
if (electrotonicL) crossarea()
/* rallarea() */
ralldistribution()
/* diam_distance() */
diamdist()
}
proc geom_pt() { local i, max /* print some geometric values */
i = max = 0
forsec branchpoints {
if (max < ralldiam.x[i]) { max = ralldiam.x[i]
this_section() sref = new SectionRef()
}
print ralldiam.x[i] , " ", secname()
i+=1
}
sref.sec print "section ", secname(), " has the highest rall ratio (",max,")"
sref.sec get_children()
totaldiam = 0
forsec children { print 1
print (diam(0)^(1.5))
totaldiam += (diam(0)^(1.5))
}
sref.sec print totaldiam/(diam(1)^(1.5))
}
proc impedance_plot() { /* plot impedance values (all points) */
clf()
// mismatch_bar()
Rmismatch_plot()
Zmismatch_plot()
// APsine()
// Rmismatchgauss()
// Zmismatchgauss()
}
proc sim_plt2() { electrotonicL = $1
dist_switch()
sim_plt()
}
proc sim_plt() { /* plot simulation values */
if (numarg() == 1) dist_switch($1) else dist_switch()
sim_calc()
sim_plot()
}
/*****************************************************************
Single Plots
*****************************************************************/
proc APamp_plot() { local i /* AP amplitude(distance soma) */
fig(dist,amp,1,0,2,3)
ref = dist.c
ref.div(-amp_lmd).apply("exp").mul(amp_max).add(amp_bas)
sort(dist,ref)
if (!electrotonicL) fig(v1,v2,0,1,1)
figlab("AP amplitude",0.3,0.9)
}
proc APvmax_plot() { local i /* AP maxvelocity(distance soma) */
fig(dist,vmax,1,0,2,3)
ref = dist.c
ref.div(-vmax_lmd).apply("exp").mul(vmax_amp)
sort(dist,ref)
if (!electrotonicL) fig(v1,v2,0,1,1)
figlab("AP max velocity",0.3,0.9)
}
proc APplat_plot() { local i /* AP peak latency(distance soma) */
fig(dist,plat,1,0,2,3)
ref = dist.c
ref.div(plat_s)
sort(dist,ref)
if (!electrotonicL) fig(v1,v2,0,1,1)
figlab("AP peak latency",0.3,0.9)
}
proc APolat_plot() { local i /* AP onset latency(distance soma) */
fig(dist,olat,1,0,2,3)
ref = dist.c
ref.div(olat_s)
sort(dist,ref)
if (!electrotonicL) fig(v1,v2,0,1,1)
figlab("AP onset latency",0.3,0.9)
}
proc APhalf_plot() { local i,a /* AP halfwidth(distance soma) */
fig(dist,half,1,0,2,3)
ref = dist.c
ref.mul(half_s).add(half_b)
sort(dist,ref)
if (!electrotonicL) fig(v1,v2,0,1,1)
figlab("AP halfwidth",0.3,0.9)
}
proc APvolt_plot() { local n
fig(time,vsoma)
fig(time,vnode,0,1,3)
fig(time,vdend,0,1,2)
if (simMode==1 || simMode==3) fig(time,voltrec,0,1,4)
if (simMode==5 ) fig(time,synapserec,0,1,5)
if (n==0) figlab(activecell,0.7,0.9)\
figlab("soma")
figlab("node",3)
figlab("dendrite",2)
if (simMode==1 || simMode==3) figlab("vclamp site",4)
if (simMode==5) figlab("synaptic site",5)
}
proc APpeak_plot() {
sort(dist,vpk)
fig(v1,v2)
figlab("Vpeak",0.7,0.9)
}
proc APdvdr_plot() { local i /* AP maxvelocity(distance soma) */
fig(dist,dvdr,1,0,2,3)
figlab("dvpeak/dr",0.3,0.9)
}
proc APtext_plot() { /* general info on cell */
fig(dist,dist,0,0,0)
fsize = 1.2
figlab(activecell,0.02,0.9)
fsize = 0.9
figlab("active",0.02,0.7)
sprint(str1,"gna\t\t%g",g_na)
figlab(str1)
sprint(str1,"gkv\t\t%g",g_kv)
figlab(str1)
sprint(str1,"gna (node)\t%g",g_nanode)
figlab(str1)
sprint(str1,"gkv (node)\t%g",g_kvnode)
figlab(str1)
sprint(str1,"%1.2f nA",st.amp)
figlab(str1)
figlab("passive",0.4,0.7)
sprint(str1,"Rm %g",rm)
figlab(str1)
sprint(str1,"Ra %g",rax)
figlab(str1)
sprint(str1,"cm %1.2f",c_m)
figlab(str1)
sprint(str1,"err %3.1f",err)
figlab(str1,0.7,0.7)
sprint(str1,"tau %3.1f",(c_m*rm/1000))
figlab(str1)
if (cells>3) sprint(str1,"rin %3.1f+-%1.1f",rin.mean, rin.stdev)
if (cells<=3) sprint(str1,"rin %3.1f",rin.x[0])
figlab(str1)
figlab(date)
sprint(str1,"equiv_diam %2.2f",equiv_diam)
figlab(str1)
figure[figcurrent].yaxis(3)
// figure[figcurrent].unmap
// figure[figcurrent].view(0,0,1,1,650,300,250,125)
}
proc attenuation_plot() {
Soma.sec { impR = new Impedance()
impR.loc(0.5)
impR.compute($1)
}
rest()
ref.resize(0)
forsec distlist for k = 0,nseg-1 {ref.append(impR.transfer(0.5))}
ref.scale(ref.min/ref.max,1)
fig(dist,ref,1,add.x[i],colour.x[i])
ref = dist.c
ref.sort()
if (i==0) fig(ref,ref.mul(Slope).add(Offset),0,1)
figlab("passive attenuation",0.3,0.9)
figlab(activecell)
sprint(str1,"Input frequency %g Hz",$1)
figlab(str1)
}
proc interbranchdist() {
marksize = 4
fig(somadist,updst,1,0)
figlab("Distance to upstream branchpoint",0.2,0.9)
}
proc areadist() {
fig(gdist,Ar,0,0)
figlab("Area",0.3,0.9)
figure[figcurrent].color(2)
figlab(activecell)
}
proc dareadist() {
fig(gdist,dAr,0,0)
figlab("dArea/dr",0.3,0.9)
}
proc diamdist() {
fig(gdist,mdiam,0,0)
fig(gdist,sections,0,1,2)
fig(somadist,branchpointdiam,1,1,1,4,"o")
figlab("# sections",0.2,0.9,2)
figlab("average diam",0.42,0.9,1)
figlab("parent diam",0.7,0.9)
}
proc ralldistribution() { /* plot rall ration distribution */
gauss(ralldiam,0.01,0.01)
fig(gaussx,gaussy)
onex = new Vector(2,1)
oney = new Vector(2,0)
oney.x[1] = gaussy.max
fig(onex,oney,0,1,2)
figlab("d3/2 ratio distribution",0.3,0.9)
}
proc diam_distance() { /* plot distance upstream branchpoint v distance soma */
fig(somadist,ralldiam,1,0,1,4)
onex = new Vector(2,0)
onex.x[1] = gdist.max
oney = new Vector(2,1)
fig(onex,oney,0,1,2)
figlab("d3/2 ratio",0.3,0.9)
}
proc branchhist() { /* histogram of branchpoints and terminations */
hist(somadist,14,terminationdist.max,0)
fig(histx,histy,0,0,2,2)
hist(terminationdist,14,terminationdist.max,0)
fig(histx,histy,0,1,1)
figlab("Terminations",0.5,0.9)
figlab("Branchpoints",0.2,0.9,2)
}
proc branchgauss() { /* Gaussian distribution of branchpoints and terminations */
gauss(somadist,gstep(),somadist.max/2)
fig(gaussx,gaussy,0,0,2)
gauss(terminationdist,gstep(),terminationdist.max/2)
fig(gaussx,gaussy,0,1,1)
figlab("Branchpoints",0.2,0.9,2)
figlab("Terminations",0.5,0.9)
}
proc crossarea() { /* plot equivalent crosssectional" diameter as fxn of distance */
fig(gdist,mdiam)
figlab("membranearea diam",0.3,0.9)
fig(gdist,rdiam,0,1,2)
figlab("ralldiam",2)
fig(gdist,cdiam,0,1,3)
figlab("relcrossareadiam",3)
}
proc ralldarea() { /* plot "ralldarea" as a fxn of distance */
fig(gdist,rdiam.c.mul(PI))
figlab("ralldarea/dr",0.3,0.9)
}
proc Rmismatch_plot() { local i,x
/* Resistance mismatch */
Rmismatch.resize(0)
aRmismatch.resize(0)
forsec distlist {for i = 0,nseg-1 { x = (i+.5)/nseg
Rmismatch.append(Rmismatch_pk(x))
aRmismatch.append(aRmismatch_pk(x)) }}
fig(dist,Rmismatch, 1,0,1,3)
fig(dist,aRmismatch,1,1,2,3)
onex = new Vector(2,0)
onex.x[1] = dist.max
oney = new Vector(2,1)
fig(onex,oney,0,1,2)
figlab("Resistance mismatch",0.3,0.9)
}
proc Zmismatch_plot() { local i, x /* Impedance mismatch */
Zmismatch.resize(0)
aZmismatch.resize(0)
forsec distlist { for i = 0,nseg-1 { x = (i+.5)/nseg
Zmismatch.append(Zmismatch_pk(x))
aZmismatch.append(aZmismatch_pk(x)) }}
fig(dist,Zmismatch, 1,0,1,3)
fig(dist,aZmismatch,1,1,2,3)
onex = new Vector(2,0)
onex.x[1] = dist.max
oney = new Vector(2,1)
fig(onex,oney,0,1,2)
figlab("Impedance mismatch",0.3,0.9)
}
proc APsine() { /* AP sine frequency */
Zfrequency.resize(0)
ref.resize(0)
forsec distlist { Zfrequency.append(f_pk)
ref.append(fdistance(0.5)) }
fig(ref,Zfrequency,1)
figlab("AP sine frequency")
}
proc mismatch_bar() { /* bar chart of R & Z mean values */
ref.resize(0)
ref.append(Rmismatch_mean)
ref.append(aRmismatch_mean)
ref.append(Zmismatch_mean)
ref.append(aZmismatch_mean)
bar(ref,2,0.2)
fig(barx,bary)
figlab("Rp",0.27,0.2)
figlab("Ra",0.45,0.2,2)
figlab("Zp",0.62,0.2)
figlab("Za",0.82,0.2,2)
figlab(activecell,0.45,0.06)
figure[figcurrent].xaxis(1)
}
proc Rmismatchgauss() { /* plot distribution of R (distal/distal + proximal) */
gauss(Rmismatch,0.01,0.02)
fig(gaussx,gaussy)
gauss(aRmismatch,0.01,0.02)
fig(gaussx,gaussy,0,1,2)
gauss(Zmismatch,0.01,0.02) /* to scale with Z */
fig(gaussx,gaussy,0,1,0)
figlab("Resistance (distal/distal+proximal)",0.25,0.9)
figlab("passive")
figlab("active",2)
}
proc Zmismatchgauss() { /* plot distribution of R (distal/distal + proximal) */
gauss(Zmismatch,0.01,0.02)
fig(gaussx,gaussy)
gauss(aZmismatch,0.01,0.02)
fig(gaussx,gaussy,0,1,2)
gauss(Rmismatch,0.01,0.02) /* to scale with R */
fig(gaussx,gaussy,0,1,0)
figlab("Impedance (distal/distal+proximal)",0.25,0.9)
figlab("passive")
figlab("active",2)
}
proc branchinfo() { /* plot distance to upstream branchpoint against distance from soma */
histx.resize(0) /* distance to upstream branchpoint */
histy.resize(0) /* distance of branchpoint from soma */
forsec branchpoints { histy.append(upstreamdst())
histx.append(fdistance(0))
}
fig(histx,histy,1)
}
proc rall() { /* print rall ratio for given section */
p = diam(1)^1.5
get_children()
d = 0
forsec children d += diam(0)^1.5
print p,d, d/p, secname()
}
proc Getdata() {
dlog = new VBox()
dlog.intercept(1)
xpanel("signal propagation toolbox")
xvarlabel(actname)
activemodel_set()
xcheckbox("equivalent",&equiv)
xradiobutton("backpropagation","{forward=0 hdecay=0}")
xradiobutton("forward200","{forward=1 hdecay=0}")
xradiobutton("forwardhdecay","{forward=0 hdecay=1}")
xpanel()
dlog.intercept(0)
printcellnameact = 0
cell_name(n2.loc,1)
printcellnameact = 1
actname_set(0)
if (dlog.dialog("Select dataset to analyse","Load","Cancel")==1) {
get_data(ActiveModel)
}
}
proc Load_cell() {
dlog = new VBox()
dlog.intercept(1)
xpanel("signal propagation toolbox",1)
xvarlabel(cellnameact)
xpanel()
xpanel("",1)
neuron_set()
activemodel_set()
xpanel()
dlog.intercept(0)
printcellnameact = 0
cell_name(n2.loc,1)
printcellnameact = 1
actname_set(0)
if (dlog.dialog("Please pick a neuron and an active model")==1) {
get(cell,ActiveModel)
Electrophysiology()
// show()
}
}
/*********************************************************************/
/*********************************************************************/
/*********************************************************************/
if (boolean_dialog("Welcome to ProgagationGeometry","Load Cell","Statistics")==1) {
Main() Load_cell() } else { Getdata() Statistics() Main()}
proc Kap() {
/* Calls Nonuniform panel and allows */
/* - setting of nonuniform passive membrane properties */
xpanel("Kap", 0)
xlabel("nonuniformity")
xcheckbox("Kap",&Kap_current ,"insert_channels()")
xpvalue("gbar_kap",&gbar_kap,1,"kap_set(gbar_kap,kap_end,kap_steep,kap_half,kap_rel)")
xpvalue("kap_end",&kap_end,1,"kap_set(gbar_kap,kap_end,kap_steep,kap_half,kap_rel)")
xpvalue("kap_steep",&kap_steep,1,"kap_set(gbar_kap,kap_end,kap_steep,kap_half,kap_rel)")
xpvalue("kap_half",&kap_half,1,"kap_set(gbar_kap,kap_end,kap_steep,kap_half,kap_rel)")
xpvalue("kap_rel",&kap_rel,1,"kap_set(gbar_kap,kap_end,kap_steep,kap_half,kap_rel)")
xpanel(1050,270)
}
proc Kad() {
/* Calls Nonuniform panel and allows */
/* - setting of nonuniform passive membrane properties */
xpanel("Kad", 0)
xlabel("nonuniformity")
xcheckbox("Kad",&Kad_current ,"insert_channels()")
xpvalue("gbar_kad",&gbar_kad,1,"kad_set(gbar_kad,kad_end,kad_steep,kad_half,kad_rel)")
xpvalue("kad_end",&kad_end,1,"kad_set(gbar_kad,kad_end,kad_steep,kad_half,kad_rel)")
xpvalue("kad_steep",&kad_steep,1,"kad_set(gbar_kad,kad_end,kad_steep,kad_half,kad_rel)")
xpvalue("kad_half",&kad_half,1,"kad_set(gbar_kad,kad_end,kad_steep,kad_half,kad_rel)")
xpvalue("kad_rel",&kad_rel,1,"kad_set(gbar_kad,kad_end,kad_steep,kad_half,kad_rel)")
xpanel(1050,270)
}
proc Conductances() {
/* Calls Conductances panel and allows */
/* - setting of passive membrane properties */
/* - setting of channel parameters */
/* - setting of nonuniform passive membrane parameters */
xpanel("Conductances", 0)
xpvalue("Ra",&rax,1,"passive_set(rm,rax,c_m,cm_myelin,rm_node,rm_end,rm_steep,rm_half)")
xpvalue("Rm",&rm,1,"passive_set(rm,rax,c_m,cm_myelin,rm_node,rm_end,rm_steep,rm_half)")
xpvalue("cm",&c_m,1,"passive_set(rm,rax,c_m,cm_myelin,rm_node,rm_end,rm_steep,rm_half)")
xpvalue("gkv",&g_kv,1,"active_set(g_na,g_kv,g_nanode,g_kvnode)")
xpvalue("gna",&g_na,1,"active_set(g_na,g_kv,g_nanode,g_kvnode)")
xpvalue("gkv (node)",&g_kvnode,1,"active_set(g_na,g_kv,g_nanode,g_kvnode)")
xpvalue("gna (node)",&g_nanode,1,"active_set(g_na,g_kv,g_nanode,g_kvnode)")
if (Ca_current) xpvalue("gca",&g_ca,1,"ca_set(g_ca)")
if (KCa_current) xpvalue("gkca",&g_kca,1,"kca_set(g_kca)")
if (Km_current) xpvalue("gkm",&g_km,1,"km_set(g_km)")
if (Kad_current) {
xcheckbox("Kad",&Kad_current ,"insert_channels()")
xpvalue("gbar_kad",&gbar_kad,0.001,"lkad_set(gbar_kad,kad_slope,kad_rel)")
xpvalue("kad_slope",&kad_slope,0.1,"lkad_set(gbar_kad,kad_slope,kad_rel)")
xcheckbox("kad_rel",&kad_rel,"lkad_set(gbar_kad,kad_slope,kad_rel)")
xcheckbox("Kap",&Kap_current ,"insert_channels()")
xpvalue("gbar_kap",&gbar_kap,0.001,"lkap_set(gbar_kap,kap_slope,kap_rel)")
xpvalue("kap_slope",&kap_slope,0.1,"lkap_set(gbar_kap,kap_slope,kap_rel)")
xcheckbox("kap_rel",&kap_rel,"lkap_set(gbar_kap,kap_slope,kap_rel)")
}
xbutton("Nonuniform","Nonuniform()")
xpanel(950,0)
}