//-------------------------------------------------------------------------- // 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: 2005-08-17 // //-------------------------------------------------------------------------- #ifndef CN_NEURON_CC #define CN_NEURON_CC #include "CN_neuron.h" neuron::neuron(int inlabel, int iniVarNo, int intype, double *inp, int inpno) { label= inlabel; iVarNo= iniVarNo; type= intype; pno= inpno; if (pno > 0) { p= new double[pno]; set_p(inp); } start_spiking= 0; spiking= 0; spike_time= -1.0; // we don't know our index number yet idx= 0; enabled= 0; } neuron::neuron(int inlabel, int iniVarNo, int intype, vector<int> inpos, double *inp, int inpno) { label= inlabel; iVarNo= iniVarNo; type= intype; pno= inpno; if (pno > 0) { p= new double[pno]; set_p(inp); } pos= inpos; start_spiking= 0; spiking= 0; spike_time= -1.0; // we don't know our index number yet idx= 0; enabled= 0; } neuron::~neuron() { forall(den, den_it) { (*den_it)->target= NULL; } delete[] p; } void neuron::set_p(double *inp) { for (int i= 0; i < pno; i++) p[i]= inp[i]; } void neuron::spike_detect(double *x) { assert(enabled); if (E(x) >= SPK_V_THRESH) { if (!spiking) { start_spiking= 1; spiking= 1; spike_time= x[0]; } else start_spiking= 0; } else { spiking= 0; start_spiking= 0; } } void neuron::init(double *x, double *iniVars) { assert(enabled); for (int i= 0; i < iVarNo; i++) { x[idx+i]= iniVars[i]; } start_spiking= 0; spiking= 0; spike_time= -1.0; } void neuron::setIdx(int inidx) { assert(!enabled); idx= inidx; enabled= 1; } void neuron::noise(double *x, double *dx) { for (int i= 0; i < iVarNo; i++) { dx[i]= 0.0; } } #endif