/*-------------------------------------------------------------------------- Author: Thomas Nowotny Institute: Institute for Nonlinear Dynamics University of California San Diego La Jolla, CA 92093-0402 email to: tnowotny@ucsd.edu initial version: 2002-01-25 --------------------------------------------------------------------------*/ #ifndef POISSONINPUT_CC #define POISSONINPUT_CC Poissoninput::Poissoninput(int inlabel, double *the_p= POI_p): neuron(inlabel, POI_IVARNO, POISSONINPUT, the_p, POI_PNO) { spiking= 0; refract= 0; spike_time= -1.0; Evalid= 0; Isynvalid= 0; mS = 0; mSLast =0.0; } Poissoninput::~Poissoninput() { delete[] p; } void Poissoninput::set_input(double inLambda) { p[0]= inLambda; } void Poissoninput::init() { spike_time= -1.0; spiking= 0; refract= 0; } void Poissoninput::advance(double *x, double dt) { if (spiking) { spiking= 0; refract= 1; } if (refract) { if (x[0] - spike_time > p[1]) { refract= 0; } } if (!refract) { if (R.n() < p[0]*dt) { spiking= 1; spike_time= x[0]; } } double tsls = x[0] - spike_time; if ((tsls >= 0) && (tsls <= p[16])) { mS = mSLast + dt * (p[14] - p[15] * mSLast); } else { mS = mSLast + dt * (-p[15] * mSLast); } mSLast = mS; } double Poissoninput::E(double *x) { if (spiking) { return p[2]; } else { return p[3]; } } double Poissoninput::S(double *x) { return mS; } #endif