TITLE peak.mod COMMENT pk: record peak time and peak value of membrane potential Michael Hausser & Arnd Roth 25.9.1997 Philipp Vetter modified last 30.12.1998 Mickey London modified last 30.12.1998 vpeak/tpeak are locked to first peak dvdt2 is for time t - 2*dt AP measurements dvdtmax, dvdtmaxII, onset, vonset, halfwidth, vhalf, vrest, dVdr electrotonic lengths X, Xsec impedance mismatch Zmismatch, Rmismatch, aZmismatch, aRmismatch, f Copyright (C) 2001 Philipp Vetter, Arnd Roth and Michael Hausser This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ENDCOMMENT UNITS { (mV) = (millivolt) (Mohms) = (megohms) } INDEPENDENT {t FROM 0 TO 1 WITH 1 (ms)} NEURON { SUFFIX pk RANGE tpeak, vpeak, vpeakm,tpeakdvdt RANGE dvdtpeak, dvdt2peak, onset_ref, onset, vonset, halfwidth, vhalf, vrest, dvdr RANGE Zmismatch, Rmismatch, aZmismatch, aRmismatch, f RANGE Zback, Rback, aZback, aRback RANGE Zfwd, Rfwd, aZfwd, aRfwd RANGE Z, R, aZ, aR RANGE Xsec, Xfrc, Xlen, Xo, sign RANGE dvdt2,dvdt RANGE thresh } PARAMETER { vhalf (mV) v (mV) dt (ms) } ASSIGNED { tpeak (ms) tpeakdvdt (ms) vpeak (mV) vpeakm (mV) dvdt (ms) dvdt2 (mV/ms*ms) dvdt2peak (mV/ms*ms) dvdtpeak (mV/ms) onset_ref (mV/ms) onset (ms) v1 (mV) v2 (mV) v3 (mV) vonset (mV) halfwidth (ms) below below_old upstroke (ms) downstroke (ms) dvdr (mv/micron) vrest (mV) Rmismatch (1) Zmismatch (1) Rback (Mohm) Zback (Mohm) Rfwd (Mohm) Zfwd (Mohm) R (Mohm) Z (Mohm) aRmismatch (1) aZmismatch (1) aRback (Mohm) aZback (Mohm) aRfwd (Mohm) aZfwd (Mohm) aR (Mohm) aZ (Mohm) f (0.001/ms) Xo (1) Xlen (1) Xsec (1) Xfrc (1) sign (1) thresh (nA) } INITIAL { tpeak = 0 (ms) tpeakdvdt = 0 (ms) vpeak = -100 (mV) vpeakm = -100 (mV) onset = 0 (ms) dvdtpeak = 0 (mV/ms) dvdt2peak = 0 (mV/ms) downstroke = 0 (ms) upstroke = 0 (ms) vrest = v check() } BREAKPOINT { SOLVE check } PROCEDURE check() { if (v > vpeak && vpeakm==-100) { tpeak = t vpeak = v } if (v+4 < vpeak) { vpeakm = 1 } v1 = v2 v2 = v3 v3 = v dvdt = (v3 - v2)/(dt) dvdt2 = (v3 - 2*v2 +v1)/(dt*dt) if (t < 1) { dvdt2 =0 } if (dvdt > dvdtpeak) { dvdtpeak = dvdt tpeakdvdt = t } if (dvdt2 > dvdt2peak) { dvdt2peak = dvdt2 } if (dvdt > onset_ref && onset == 0 && t > 1) { onset = t-dt vonset = v2 } below = 0 if (vhalf > v) {below = 1} if (below == 0 && below_old == 1 && upstroke == 0) {upstroke = t} if (below == 1 && below_old == 0 && downstroke == 0) {downstroke = t} halfwidth = downstroke - upstroke below_old = below }