// determination of a
// phase-response curve of a neuron
// K. M. Stiefel, CNL, Salk, 2004
steps=64
objref prc[100], prcplot, xvec
nrprc=0
prcplot = new Graph()
prcplot.exec_menu("Keep Lines")
xvec = new Vector()
for k=1, steps { xvec.append(k/steps*2*PI) }
proc makeprc() {
prc[nrprc]= new Vector()
spikesouttimes = new Vector()
spikesout.record(spikesouttimes)
// 1. determine spikenr where stationarity is reached
// set simulation run length to that time
tstop=2000
input.start=2001
init()
run()
n=2
while ((spikesouttimes.x[n]-spikesouttimes.x[n-1])-(spikesouttimes.x[n-1]-spikesouttimes.x[n-2])>(spikesouttimes.x[n]-spikesouttimes.x[n-1])/50) { n=n+1 }
stable=n
tstop=spikesouttimes.x[n+1]
delay=spikesouttimes.x[stable-1]
isi=spikesouttimes.x[stable]-spikesouttimes.x[stable-1]
print "ISIs stationary after spike ", n
print "at a frequency of ", 1/isi*1000, "Hz"
// determine PRC
// vary stimulus time from delay to delay+isi
for phase=0, steps {
spikesouttimes = new Vector()
spikesout.record(spikesouttimes)
input.start=delay+isi*phase/steps
init()
run()
prc[nrprc].append(-(spikesouttimes.x[stable]-spikesouttimes.x[stable-1]-isi)/isi)
}
for j=0, nrprc { prc[j].plot(prcplot, xvec) }
nrprc=nrprc+1
}