/*--------------------------------------------------------------------------
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_NEUROSYNRATE_CC
#define CN_NEUROSYNRATE_CC
#include "CN_neuron.cc"
NeuroSynRate::NeuroSynRate(int inlabel, double *the_p= NEUROSYNRATE_p):
neuron(inlabel, NEUROSYNRATE_IVARNO, NEUROSYNRATE, the_p, NEUROSYN_PNO)
{
mVrest = -55;;
}
NeuroSynRate::NeuroSynRate(int inlabel, vector<int> inpos, double *the_p= NEUROSYNRATE_p):
neuron(inlabel, NEUROSYNRATE_IVARNO, NEUROSYNRATE, inpos, the_p, NEUROSYN_PNO)
{
}
inline double NeuroSynRate::E(double *x)
{
assert(enabled);
return mVrest;
}
inline double NeuroSynRate::F(double *x)
{
return mF;
}
double NeuroSynRate::S(double *x)
{
assert(enabled);
return x[idx];
}
void NeuroSynRate::derivative(double *x, double *dx)
{
Isyn= 0.0;
forall(den, den_it) {
Isyn+= (*den_it)->Isyn(x);
}
double beta = p[15];
dx[idx] = -x[idx]*beta+Transfer(Isyn+p[11]);
}
void NeuroSynRate::init(double *x, double *iniVars)
{
assert(enabled);
mF=0;
for (int i= 0; i < iVarNo; i++)
x[idx+i]= iniVars[i];
}
double NeuroSynRate::Transfer(double isyn) {
double alpha = p[14];
double tr = p[16];
double currentIn;
currentIn= isyn;
//currentIn = max(isyn, 0.0);
mF = M * currentIn + C;
mF = max(mF, 0.0);
mF = min(mF, 0.2);
// if(mF<0.004)
// mF = 0.0;
return alpha * tr * mF;
}
void NeuroSynRate::ResetSynapse(double *x){
x[idx] = 0;
}
#endif