COMMENT
toggle a flag at beginning and end of a spike
ENDCOMMENT

INDEPENDENT {t FROM 0 TO 1 WITH 1 (ms)}

NEURON {
	POINT_PROCESS Spike
	RANGE thresh
	RANGE spike
	RANGE spike_on
	RANGE spike_time
	RANGE spike_count
	RANGE spike_freq_isi	: a rough estimate based on 1/(last ISI)
	RANGE spike_freq_count	: a rough estimate based on spike_count/t
}

UNITS {
	(mV) = (millivolt)
}

PARAMETER {
	thresh = 0 (mV)	: threshold for spike identification
}

ASSIGNED {
	spike
	spike_on
	spike_time
	spike_freq_isi
	spike_freq_count
	spike_count
}

INITIAL {
	spike=0
	spike_time=0
	spike_freq_isi=0
	spike_on = 0
	spike_count=0
	spike_freq_count=0
	if (v > thresh) {
		spike_on = 1
	}
}

BREAKPOINT {
	SOLVE check
}

PROCEDURE check() {
	if (spike) {
		spike=0 : spike=1 just for the initial dt of the spike
	}
	if (spike_on && v < thresh) {
		spike_on = 0
	}
	if (!spike_on && v > thresh) {
		spike=1
		spike_on = 1
		spike_count=spike_count+1
		if (t) {
			spike_freq_isi=1000/(t-spike_time)
			spike_freq_count=spike_count/t*1000
		}
		spike_time = t
	}
}