: $Id: intf.mod,v 1.40 2004/05/11 22:45:50 billl Exp $ NEURON { ARTIFICIAL_CELL INTF RANGE tau1, tau2, tau3, tau4, refrac, m1, m2, m3, m4, thresh, refractory, fflag RANGE adap,adapwt,tauadap } PARAMETER { tau1 = 10 (ms) tau2 = 10 (ms) tau3 = 10 (ms) tau4 = 10 (ms) adapwt = 0 tauadap= 10 (ms) refrac = 5 (ms) thresh = 1 fflag = 1 : don't change } ASSIGNED { m1 m2 m3 m4 adap t0(ms) refractory } INITIAL { adap = 0 m1 = 0 m2 = 0 m3 = 0 m4 = 0 t0 = t refractory = 0 : 0-integrates input, 1-refractory } NET_RECEIVE (w1,w2,w3,w4) { INITIAL { w2=w2 w3=w3 w4=w4 } : always update the state vars m1 = m1*exp(-(t - t0)/tau1) m2 = m2*exp(-(t - t0)/tau2) m3 = m3*exp(-(t - t0)/tau3) m4 = m4*exp(-(t - t0)/tau4) adap = adap*exp(-(t - t0)/tauadap) t0 = t if (flag==0) { : only add weights if an external excitation m1 = m1 + w1 m2 = m2 + w2 m3 = m3 + w3 m4 = m4 + w4 } if (flag==1) { refractory = 0 } if ((refractory==0 || flag==1) && (m1+m2+m3+m4>thresh)) { refractory = 1 adap = adap + adapwt net_send(refrac+adap*adap, refractory) net_event(t) } } FUNCTION M1() { M1 = m1*exp(-(t - t0)/tau1) } FUNCTION M2() { M2 = m2*exp(-(t - t0)/tau2) } FUNCTION M3() { M3 = m3*exp(-(t - t0)/tau3) } FUNCTION M4() { M4 = m4*exp(-(t - t0)/tau4) } FUNCTION AD() { AD = adap*exp(-(t - t0)/tauadap) } FUNCTION MT() { MT = m1*exp(-(t - t0)/tau1)+m2*exp(-(t - t0)/tau2)+m3*exp(-(t - t0)/tau3)+m4*exp(-(t - t0)/tau4) }