/* This file generates current pulses to measure AP & AHP properties of model */ objref vecP, vecB, ff, IclP strdef fn, outf // PROC ana_AP_AHP() proc ana_AP_AHP() { if (numarg() < 1) { print "ana_AP_AHP(): call with FR cell for argument" return } fn = $s1 if (! xopen(fn)) { printf("ana_AP_AHP(): Fail to open requested cell file %s\n", fn) return } sprint(myfile, "%s/AP_AHP.ses", codeloc) load_file(myfile) KICKIT=120 vecP = new Vector() vecB = new Vector() IclP = new IClamp(0.5) access soma IclP.del = 30 IclP.dur = 0.2 IclP.amp = KICKIT tstop = 200 printf("Running cell model %s\n", fn) load_file(fn) sprint(outf, "AP_AHP_%s.csv", fn) ff = new File() ff.wopen(outf) baseAP() capAP() anaAP() anaAHP() ff.close() } proc baseAP() { IclP.amp=0 objref vecB vecB=new Vector() vecP.record(&v(0.5)) printf("Now running baseAP, tstop=%d\n", tstop) init() run() } proc capAP() { IclP.amp=KICKIT objref vecP vecP = new Vector() vecP.record(&v(0.5)) printf("Now running capAP, tstop=%d\n", tstop) init() run() } proc anaAP() {local i APbase=vecP.x[IclP.del*40] APpk=APbase timepk = 0 for i=0,vecP.size-1 { if (vecP.x[i] > APpk) { APpk = vecP.x[i] timepk = i } } printf("APpk = %.1f mV at %.2f msec\n", APpk-APbase, timepk/40-IclP.del) halfpk0 = APbase halfpk1 = APpk for i=0, timepk { if (vecP.x[i] > (APpk-APbase)/2+APbase) { halfpk0 = vecP.x[i] thpk0 = i break } } for i=timepk, vecP.size-1 { if (vecP.x[i] < (APpk-APbase)/2+APbase) { halfpk1 = vecP.x[i] thpk1 = i break } } printf("halfup: v=%.1f at %.2f msec\n", halfpk0, thpk0/40-IclP.del) printf("halfdn: v=%.1f at %.2f msec\n", halfpk1, thpk1/40-IclP.del) printf("AP width at half-height = %.3f\n", (thpk1-thpk0)/40) ff.printf("AP_height,%.1f\nAP_peak_time,%.2f\n", APpk-APbase, timepk/40-IclP.del) ff.printf("AP_halfwidth,%.3f\n", (thpk1-thpk0)/40) } proc anaAHP() {local i APbase=vecP.x[IclP.del*40] AHPpk=APbase timeAHPpk = 0 for i=0,vecP.size-1 { if (vecP.x[i] < AHPpk) { AHPpk = vecP.x[i] timeAHPpk = i } } printf("AHPpk = %.1f mV at %.2f msec\n", AHPpk-APbase, timeAHPpk/40-IclP.del) halfAHPpk0 = APbase halfAHPpk1 = AHPpk for i=0, timeAHPpk { if (vecP.x[i] < (AHPpk-APbase)/2+APbase) { halfAHPpk0 = vecP.x[i] tAHPhpk0 = i break } } for i=timeAHPpk, vecP.size-1 { if (vecP.x[i] > (AHPpk-APbase)/2+APbase) { halfAHPpk1 = vecP.x[i] tAHPhpk1 = i break } } printf("AHPhalfup: v=%.1f at %.2f msec\n", halfAHPpk0, tAHPhpk0/40-IclP.del) printf("AHPhalfdn: v=%.1f at %.2f msec\n", halfAHPpk1, tAHPhpk1/40-IclP.del) printf("AHP width at half-height = %.3f\n", (tAHPhpk1-tAHPhpk0)/40) ff.printf("AHP_height,%.1f\nAHP_peak_time,%.2f\n", AHPpk-APbase, timeAHPpk/40-IclP.del) ff.printf("AHP_halfwidth,%.3f\n", (tAHPhpk1-tAHPhpk0)/40) } proc active_3types() { printf("FRvar61B\n") load_file("FRvar61B") baseAP() capAP() anaAP() anaAHP() printf("\nFRvar61lt\n") load_file("FRvar61lt") baseAP() capAP() anaAP() anaAHP() printf("\nFRvar61ht\n") load_file("FRvar61ht") baseAP() capAP() anaAP() anaAHP() } proc active_type() { printf("%s\n", $s1) load_file($s1) baseAP() capAP() anaAP() anaAHP() printf("\n") }