//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // // NOTICE OF COPYRIGHT AND OWNERSHIP OF SOFTWARE // // Copyright 2010, The University Of Michigan // // All rights reserved. // For research use only; commercial use prohibited. // No Distribution without permission of William Stacey // wstacey@umich.edu //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% begintemplate IApp public set, get, getloc, set_random, getConv, setValue, set_random_play objref iapp, iappR, loc, rR, rC, rD // ================================================================================================= // // init() // // ================================================================================================= proc init() { loc = new SectionRef() loc.sec iappR = new IClamp(0.5) loc.sec iapp = new IClamp(0.5) } // ================================================================================================= // // set() // // ================================================================================================= proc set() { //print "SET" if (numarg()==1 || numarg()==2) { iapp.dur = 1e9 iapp.del = 0 if (numarg()==2) iapp.del = $2 loc.sec iapp.amp = $1 * area(0.5) * 1e-5 } else { print "USAGE: set( i (uA/cm2) )" } } // ================================================================================================= // // getConv() // // ================================================================================================= func getConv() { local c loc.sec c = area(0.5) * 1e-5 return c } // ======================================================================== // // setValue( i [nA], { del [ms]} ) // // ======================================================================== proc setValue() { //print "SETVALUE" if (numarg()==1 || numarg()==2) { iapp.dur = 1e9 iapp.del = 0 if (numarg()==2) iapp.del = $2 loc.sec iapp.amp = $1 } else { print "USAGE: set( i (nA) )" } } // ================================================================================================= // // set_random_play(mean, sd, isUnitsPerCm2, gid) // // ================================================================================================= proc set_random_play() {local mean, sd mean = $1 sd = $2 isUnitsPerCm2 = $3 //loc.sec print secname(), " mean=", mean, " sd=", sd, "UNITS:", isUnitsPerCm2 if (isUnitsPerCm2) { // conversion from uA/cm2 to nA loc.sec mean = 1e-5 * mean * area(0.5) loc.sec sd = 1e-5 * sd * area(0.5) //loc.sec print secname(), " mena=", mean, " sd=", sd }else{ // otherwise mean and sd are in pA, and need to be converted to nA mean = 1e-3 * mean sd = 1e-3 * sd //loc.sec print secname(), " mean=", mean, " sd=", sd } rD = new Random((startsw()+$4)%10000) iappR.del = 0 //rD.uniform(0, 750) //###changed to 0 7/8/8 iappR.dur = 1e9 //loc.sec print secname(), iappR.del rR = new Random((startsw()*$4)%10000) rR.normal(mean, sd*sd) rR.play(&iappR.amp) } // ================================================================================================= // // set_random() // // ================================================================================================= proc set_random() { rC = new Random((startsw()+$1)%10000) iapp.dur = rC.uniform(0, 500) iapp.del = 0 loc.sec iapp.amp = rC.uniform(-5, 5) * area(0.5) * 1e-5 //print "amp: ", iappR.amp, secname(), $1 } // ================================================================================================= // // getloc() // // ================================================================================================= proc getloc() { loc.sec print secname() } // ================================================================================================= // // get() // // ================================================================================================= proc get() { loc.sec printf("iapp = %g (nA), loc= %s\n", iapp.amp, secname()) } endtemplate IApp