/*--------------------------------------------------------------------------
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 CN_ABSYNAPSEECPLAST2_CC
#define CN_ABSYNAPSEECPLAST2_CC
#include "CN_absynapse.cc"
absynapseECplast2::absynapseECplast2(neuron *insource, neuron *intarget,
double inksyn, double inEsyn, double inEpre,
double inasyn, double inbsyn,
double inVslope,
double inlrnampl):
absynapse(insource, intarget, inksyn, inEsyn, inEpre, inasyn,
inbsyn, inVslope,
ABECPLAST2IVARNO, ABECPLAST2PNO, ABECPLAST2)
{
p[6]= inlrnampl;
synapse_change= 0;
}
absynapseECplast2::~absynapseECplast2()
{
}
void absynapseECplast2::update_gsyn(double *x)
{
static double chng;
if ((source->start_spiking) || (target->start_spiking)) {
if ((source->spike_time > 0.0) && (target->spike_time > 0.0)) {
double tau= target->spike_time-source->spike_time;
chng= STDP_func(tau);
if (chng != 0.0) {
synapse_change= 1;
p[0]+=chng;
if (p[0] < 0.0) p[0]= 0.0;
}
else synapse_change= 0;
}
}
}
double absynapseECplast2::STDP_func(double t)
{
if (t > 0.0) {
return p[6]*pow(t, 10.0)*exp(-abs(t))*5.14e-9;
// amplitude is fit to data ...
}
else {
return -p[6]*pow(t, 10.0)*exp(-abs(t))*5.14e-9;
}
}
// end of class implementation
#undef TINFIN
#endif
|