00001 #ifndef COMPOSITEAEIFNEURON_H_
00002 #define COMPOSITEAEIFNEURON_H_
00003
00004 #include "aEIFNeuron.h"
00005 #include "CompositeNeuron.h"
00006 #include "StaticSpikingSynapse.h"
00007
00008
00009 class aEIFCondAlphaNeuron : public CompositeNeuron< CbaEIFNeuron >
00010 {
00011 SIMOBJECT( aEIFCondAlphaNeuron, AdvancePhase::One )
00012 public:
00013
00014
00015 aEIFCondAlphaNeuron(
00016 double a = 4e-9,
00017 double b = 0.0805e-9,
00018 double Vt = -50.6e-3,
00019 double Vr = -70.4e-3,
00020 double El = -70.4e-3,
00021 double gl = 30e-9,
00022 double Cm = 281e-12,
00023 double tau_w = 144e-3,
00024 double slope = 2e-3,
00025 double Vpeak = 20.0e-3,
00026 double Vinit = -60.0e-3,
00027 double Inoise = 0.0,
00028 double Iinject = 0.0,
00029 double ErevExc = -80e-3,
00030 double ErevInh = 0.0,
00031 float TauSynExc= 3e-3,
00032 float TauSynInh= 3e-3 ) :
00033 CompositeNeuron< CbaEIFNeuron >(StaticCondAlphaSynapse(1.0, TauSynExc, ErevExc),
00034 StaticCondAlphaSynapse(1.0, TauSynInh, ErevInh) )
00035 {
00036 this->a = a;
00037 this->b = b;
00038 this->Vt = Vt;
00039 this->Vr = Vr;
00040 this->El = El;
00041 this->gl = gl;
00042 this->Cm = Cm;
00043 this->tau_w = tau_w;
00044 this->slope = 2e-3;
00045 this->Vpeak = 20.0e-3;
00046 this->Vinit = -60.0e-3;
00047 this->Inoise = 0.0;
00048 this->Iinject = 0.0;
00049 this->ErevExc = ErevExc;
00050 this->ErevInh = ErevInh;
00051 this->TauSynExc= TauSynExc;
00052 this->TauSynInh= TauSynInh;
00053 }
00054
00055 virtual int reset(double dt)
00056 {
00057 dynamic_cast<StaticCondExpSynapse*>(getInnerSynapse(0))->tau = TauSynExc;
00058 dynamic_cast<StaticCondExpSynapse*>(getInnerSynapse(1))->tau = TauSynInh;
00059 dynamic_cast<StaticCondExpSynapse*>(getInnerSynapse(0))->Erev = ErevExc;
00060 dynamic_cast<StaticCondExpSynapse*>(getInnerSynapse(1))->Erev = ErevInh;
00061 return CompositeNeuron< CbaEIFNeuron >::reset(dt);
00062 }
00063
00065 float TauSynExc;
00066
00068 float TauSynInh;
00069
00071 float ErevExc;
00072
00074 float ErevInh;
00075 };
00076
00077
00078 #endif