TITLE calculates Na+/K+ charge overlap and excess Na+ influx COMMENT Hallermann, de Kock, Stuart and Kole, Nature Neuroscience, 2012 doi:10.1038/nn.3132 ENDCOMMENT NEURON { SUFFIX charge_ : changed "charge" to "charge_" because of conflicts with NEURON's "charge" USEION na READ ina USEION k READ ik RANGE vmax, vmin, tmax, tmin RANGE na_ch, na_ch_overl, overl RANGE na_ch_before_peak RANGE na_ch_after_peak RANGE na_ch_excess_ratio RANGE peak_reached RANGE peak_time } PARAMETER { tStart (ms) tEnd (ms) peak_tolerance (mV) peak_lowest (mV) } ASSIGNED { v (millivolt) vmin (millivolt) tmin (ms) vmax (millivolt) tmax (ms) na_ch (milliamp/cm2) na_ch_overl (milliamp/cm2) na_ch_overl_tmp (milliamp/cm2) overl na_ch_excess_ratio na_ch_before_peak na_ch_after_peak peak_reached peak_time ina (milliamp/cm2) ik (milliamp/cm2) } INITIAL { vmin = 1e6 tmin = 0 vmax = -1e6 tmax = 0 peak_reached = 0 peak_time = 0 na_ch = 0 na_ch_before_peak = 0 na_ch_after_peak = 0 na_ch_excess_ratio = 0 na_ch_overl = 0 overl = 0 : tStart = 500 : tEnd = 1000 : peak_tolerance = 0.1 (millivolt) : peak_lowest = -60 (millivolt) } BREAKPOINT { VERBATIM if (t > tStart) { if (t < tEnd) { if (v < vmin) { vmin = v; tmin = t; } if (v > vmax) { vmax = v; tmax = t; } na_ch = na_ch + ina; na_ch_overl_tmp = ina; if (-ik > ina) { na_ch_overl_tmp = -ik; } na_ch_overl = na_ch_overl + na_ch_overl_tmp; if (na_ch != 0) { //na_ch is negative overl = (na_ch - na_ch_overl) / na_ch; } if ( (v < vmax - peak_tolerance) && (v > peak_lowest) && (peak_reached == 0) ) { peak_reached = 1; peak_time = t; } if (peak_reached == 0) { na_ch_before_peak = na_ch_before_peak + ina; } else { na_ch_after_peak = na_ch_after_peak + ina; } if (na_ch_before_peak != 0) { na_ch_excess_ratio = (na_ch_before_peak + na_ch_after_peak) / na_ch_before_peak; } } } ENDVERBATIM }