/*--------------------------------------------------------------------------
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_ABSYNAPSE_SMSTDP_CC
#define CN_ABSYNAPSE_SMSTDP_CC
#include "CN_synapse.cc"
// There is no constructor to be used directly (class is abstract) ...
absynapse_smSTDP::absynapse_smSTDP(neuron *insource, neuron *intarget,
int inIVARNO, int inPNO, int inTYPE):
synapse(insource, intarget, inIVARNO, inPNO, inTYPE)
{
tpre= -1e10;
tpost= -1e10;
dt= 0.0;
}
absynapse_smSTDP::~absynapse_smSTDP()
{
}
double absynapse_smSTDP::gsyn(double *x)
{
return x[idx+1];
}
// this function does not work ...
double absynapse_smSTDP::gsyn()
{
cerr << "using unsupported function!" << endl;
exit(1);
}
void absynapse_smSTDP::set_gsyn(double ingsyn, double *x)
{
x[idx+1]= ingsyn;
}
void absynapse_smSTDP::set_gsyn(double ingsyn)
{
cerr << "using unsupported function!" << endl;
exit(1);
}
double absynapse_smSTDP::Isyn(double *x)
{
return -x[idx+1]*x[idx]*(target->E(x)-p[0]);
}
void absynapse_smSTDP::calc_dg(double *x)
{
if (source->start_spiking) {
tpre= x[0];
dt= tpost-tpre;
x[idx+2]+= stdp_fn(dt);
}
if (target->start_spiking) {
tpost= x[0];
dt= tpost-tpre;
x[idx+2]+= stdp_fn(dt);
}
}
void absynapse_smSTDP::derivative(double *x, double *dx)
{
dx[idx]= p[2]*(1.0-x[idx])*(1.0+tanh((source->E(x)-p[1])/p[4]))/2.0
-p[3]*x[idx];
dx[idx+1]= x[idx+2]*x[idx+1]*(p[6]-x[idx+1])-p[8]*(x[idx+1]-p[7]);
dx[idx+2]= -p[5]*x[idx+2];
}
// end of class implementation
#endif
|