// $Id: control_spiketuft.hoc,v 1.10 2007/03/17 01:39:06 ted Exp $ // based on control_probetuft.hoc // doit() runs a simulation, then plots max v in tuft vs. distance from soma objref paramfil, areafil, resultfil, vpeakfil strdef paramfilname, areafilname, resultfilname, vpeakfilname paramfilname="parameters.dat" areafilname="areas.dat" resultfilname="results.dat" vpeakfilname="vpeak.dat" proc write_paramfil() { local tally // open, write, and close paramfil paramfil = new File() paramfil.wopen(paramfilname) paramfil.printf("Parameters\n") paramfil.printf("Model cell\n") paramfil.printf("Ra\t cm\t e_pas\t g_pas\n") paramfil.printf("%5.1f\t %5.3g\t %5.1g\t %g\n", Ra, cm, e_pas, g_pas) tally = 0 forsec tuft tally+=nseg paramfil.printf("%d segments in tuft\n", tally) paramfil.printf("Tuft origin clamped to follow a spike waveform\n") paramfil = new File() } proc write_areafil() { local ii // open, write, and close areafil areafil = new File() areafil.wopen(areafilname) areafil.printf("Segment areas are tab separated in same order as segments in tuft SectionList\n") areavec.printf(areafil, "\t %9.4f") areafil = new File() } proc output_to_files() { local ii, jj print "in output_to_files" write_paramfil() write_areafil() resultfil = new File() resultfil.wopen(resultfilname) resultfil.printf("Simulation results\n") resultfil.printf("\t mean\t min\t max\t var\t stdev\n") vpeakfil = new File() vpeakfil.wopen(vpeakfilname) vpeakfil.printf("Peak depolarization\n") vpeakfil.printf("Values are tab separated in same sequence as segments in tuft SectionList\n") // we have already analyzed the results! no need to do it again! // analyze() resultvec.printf(resultfil, "\t %7.4f") // no point printing run number as first item on the line vpeakvec.printf(vpeakfil, "\t %7.4f") resultfil = new File() vpeakfil = new File() } /////////////////////////// // nice controls BOTHCONTROL = 0 CMx2 = 1 RAx2 = 2 BOTHx2 = 3 status = BOTHCONTROL proc restoreRa() { forall Ra/=2 } proc restorecm() { forall for (x,0) cm(x)/=2 } proc doubleRa() { forall Ra*=2 } proc doublecm() { forall for (x,0) cm(x)*=2 } proc setparams() { if ($1==BOTHCONTROL) { // if (status==BOTHCONTROL) if (status==CMx2) restorecm() if (status==RAx2) restoreRa() if (status==BOTHx2) { restorecm() restoreRa() } } if ($1==CMx2) { if (status==BOTHCONTROL) doublecm() // if (status==CMx2) if (status==RAx2) { doublecm() restoreRa() } if (status==BOTHx2) restoreRa() } if ($1==RAx2) { if (status==BOTHCONTROL) doubleRa() if (status==CMx2) { doubleRa() restorecm() } // if (status==RAx2) if (status==BOTHx2) restorecm() } if ($1==BOTHx2) { if (status==BOTHCONTROL) { doublecm() doubleRa() } if (status==CMx2) doubleRa() if (status==RAx2) doublecm() // if (status==BOTHx2) } status = $1 } proc doit() { run() plotvmax() plotvmaxnorm(1) analyze() plotpercentiles() output_to_files() } { xpanel("Simulation control", 0) xlabel("Parameters (default is control)") xradiobutton("control", "setparams(BOTHCONTROL)") xradiobutton("cm = 2*control", "setparams(CMx2)") xradiobutton("Ra = 2*control", "setparams(RAx2)") xradiobutton("both cm and Ra = 2*control", "setparams(BOTHx2)") xbutton("Execute a run","doit()") xpanel(2,507) }