/* WHAT THIS DOES It searches for the coordinates of the maximum inside the specified interval. Note: You need to open a new window for each signal you want to measure values. If recording a vector (as opposed to picking one after), you need to select the vector before hitting "Init & Run" HOW TO USE If using this tool individually (not via extra.hoc), place this file along with other model hoc files. In the oc> prompt, type... load_file("maxvalue.hoc") Find the Max Value window in 'Tools' -> 'Miscellaneous' -- Leo Ng July 27, 2004 */ begintemplate MaxValue // rec record values of the signal. // vec points to either rec or picked vector hoc_obj public Select, max, time, start, finish, rec, box, vec external hoc_obj_ objref this, rec, sc, box, vec strdef sig, cmd, title // Sets the default values and creates the vectors. proc init() { time = 0 amp = 0 start = 0 finish = 0 sig = "" rec = new Vector() vec = rec sc = new SymChooser("Choose signal") CreatePanel() } // Creates the GUI. proc CreatePanel() { box = new VBox() box.ref(this) box.intercept(1) xpanel("MaxValue") xbutton("Select Signal", "Select()") xvarlabel(sig) xvarlabel("") xradiobutton("Use recorded vector (above)", "vec = rec", 1) xradiobutton("Use picked vector", "vec = hoc_obj_[0]", 0) xvarlabel("") xpvalue("Interval Start (ms)", &start, 1, "Find()") xpvalue("Interval End (ms)", &finish, 1, "Find()") xvalue("Max Value", "max", 2) xvalue("at time (ms)", "time", 2) xpanel() box.intercept(0) sprint(title, "%s", this) box.map(title) } // Loads the vector choosing menu. proc Select() { // Opens the SymChooser menu. // Stores the chosen variable in 'sig'. // Tells rec to record 'sig'. if (sc.run()) { sc.text(sig) sprint(cmd, "%s.rec.record(&%s)", this, sig) execute(cmd) } } // Find Max value and its index proc Find() { if (finish > start) { max = vec.max(start / dt, finish / dt) time = vec.max_ind(start / dt, finish / dt) * dt } } endtemplate MaxValue // Adds windows to NEURON's main menu. objref maxValue proc MakeMaxValue() { maxValue = new MaxValue() objref maxValue } nrnmainmenu_.miscellaneous_add("MaxValue", "MakeMaxValue()")