00001 #ifndef COMPOSITELIFNEURON_H_
00002 #define COMPOSITELIFNEURON_H_
00003
00004 #include "LifNeuron.h"
00005 #include "CompositeNeuron.h"
00006 #include "StaticSpikingSynapse.h"
00007
00008 class LIFCurrAlphaNeuron : public CompositeNeuron< LifNeuron >
00009 {
00010 SIMOBJECT( LIFCurrAlphaNeuron, AdvancePhase::One )
00011 public:
00012 LIFCurrAlphaNeuron( float taum = 3e-2,
00013 float Cm = 3e-8,
00014 float Vresting =-0.06,
00015 float Vthresh =-0.045,
00016 float Vreset =-0.06,
00017 float Vinit =-0.06,
00018 float Trefract = 3e-3,
00019 float Inoise = 0.0,
00020 float Iinject = 0.0,
00021 float TauSynExc= 3e-3,
00022 float TauSynInh= 3e-3) :
00023 CompositeNeuron< LifNeuron >(StaticCurrAlphaSynapse(1.0, TauSynExc),
00024 StaticCurrAlphaSynapse(1.0, TauSynInh))
00025 {
00026 this->Rm = taum/Cm;
00027 this->taum = taum;
00028 this->Cm = Cm;
00029 this->Vresting = Vresting;
00030 this->Vthresh = Vthresh;
00031 this->Vreset = Vreset;
00032 this->Vinit = Vinit;
00033 this->Trefract = Trefract;
00034 this->Inoise = Inoise;
00035 this->Iinject = Iinject;
00036 this->TauSynExc = TauSynExc;
00037 this->TauSynInh = TauSynInh;
00038 }
00039
00040 virtual int reset(double dt)
00041 {
00042 this->Rm = taum/Cm;
00043 dynamic_cast<StaticCurrAlphaSynapse*>(getInnerSynapse(0))->tau = TauSynExc;
00044 dynamic_cast<StaticCurrAlphaSynapse*>(getInnerSynapse(1))->tau = TauSynInh;
00045 return CompositeNeuron< LifNeuron >::reset(dt);
00046 }
00047
00049 float taum;
00050
00052 float TauSynExc;
00053 float TauSynInh;
00054 };
00055
00056 class LIFCurrExpNeuron : public CompositeNeuron< LifNeuron >
00057 {
00058 SIMOBJECT( LIFCurrExpNeuron, AdvancePhase::One )
00059 public:
00060
00061
00062 LIFCurrExpNeuron( float taum = 3e-2,
00063 float Cm = 3e-8,
00064 float Vresting =-0.06,
00065 float Vthresh =-0.045,
00066 float Vreset =-0.06,
00067 float Vinit =-0.06,
00068 float Trefract = 3e-3,
00069 float Inoise = 0.0,
00070 float Iinject = 0.0,
00071 float TauSynExc = 3e-3,
00072 float TauSynInh = 3e-3 ) :
00073 CompositeNeuron< LifNeuron >(StaticCurrExpSynapse(1.0, TauSynExc),
00074 StaticCurrExpSynapse(1.0, TauSynInh) )
00075 {
00076 this->Rm = taum/Cm;
00077 this->taum = taum;
00078 this->Cm = Cm;
00079 this->Vresting = Vresting;
00080 this->Vthresh = Vthresh;
00081 this->Vreset = Vreset;
00082 this->Vinit = Vinit;
00083 this->Trefract = Trefract;
00084 this->Inoise = Inoise;
00085 this->Iinject = Iinject;
00086 this->TauSynExc = TauSynExc;
00087 this->TauSynInh = TauSynInh;
00088 }
00089
00090 virtual int reset(double dt)
00091 {
00092 this->Rm = taum/Cm;
00093 dynamic_cast<StaticCurrExpSynapse*>(getInnerSynapse(0))->tau = TauSynExc;
00094 dynamic_cast<StaticCurrExpSynapse*>(getInnerSynapse(1))->tau = TauSynInh;
00095 return CompositeNeuron< LifNeuron >::reset(dt);
00096 }
00097
00099 float taum;
00100
00102 float TauSynExc;
00103
00105 float TauSynInh;
00106 };
00107
00108
00109 class LIFCondAlphaNeuron : public CompositeNeuron< CbLifNeuron >
00110 {
00111 SIMOBJECT( LIFCondAlphaNeuron, AdvancePhase::One )
00112 public:
00113 LIFCondAlphaNeuron( float taum = 3e-2,
00114 float Cm = 3e-8,
00115 float Vresting =-0.06,
00116 float Vthresh =-0.045,
00117 float Vreset =-0.06,
00118 float Vinit =-0.06,
00119 float Trefract = 3e-3,
00120 float Inoise = 0.0,
00121 float Iinject = 0.0,
00122 float ErevExc = 0.0,
00123 float ErevInh = -80e-3,
00124 float TauSynExc = 3e-3,
00125 float TauSynInh = 3e-3) :
00126 CompositeNeuron< CbLifNeuron >(StaticCondAlphaSynapse(1.0, ErevExc, TauSynExc),
00127 StaticCondAlphaSynapse(1.0, ErevInh, TauSynInh) )
00128 {
00129 this->Rm = taum/Cm;
00130 this->taum = taum;
00131 this->Cm = Cm;
00132 this->Vresting = Vresting;
00133 this->Vthresh = Vthresh;
00134 this->Vreset = Vreset;
00135 this->Vinit = Vinit;
00136 this->Trefract = Trefract;
00137 this->Inoise = Inoise;
00138 this->Iinject = Iinject;
00139 this->TauSynExc = TauSynExc;
00140 this->TauSynInh = TauSynInh;
00141 this->ErevExc = ErevExc;
00142 this->ErevInh = ErevInh;
00143 }
00144
00145 virtual int reset(double dt)
00146 {
00147 this->Rm = taum/Cm;
00148 dynamic_cast<StaticCondAlphaSynapse*>(getInnerSynapse(0))->tau = TauSynExc;
00149 dynamic_cast<StaticCondAlphaSynapse*>(getInnerSynapse(1))->tau = TauSynInh;
00150 dynamic_cast<StaticCondAlphaSynapse*>(getInnerSynapse(0))->Erev = ErevExc;
00151 dynamic_cast<StaticCondAlphaSynapse*>(getInnerSynapse(1))->Erev = ErevInh;
00152 return CompositeNeuron< CbLifNeuron >::reset(dt);
00153 }
00154
00156 float taum;
00157
00159 float TauSynExc;
00161 float TauSynInh;
00162
00164 float ErevExc;
00165
00167 float ErevInh;
00168 };
00169
00170
00171 class LIFCondExpNeuron : public CompositeNeuron< CbLifNeuron >
00172 {
00173 SIMOBJECT( LIFCondExpNeuron, AdvancePhase::One )
00174 public:
00175 LIFCondExpNeuron( float taum = 3e-2,
00176 float Cm = 3e-8,
00177 float Vresting =-0.06,
00178 float Vthresh =-0.045,
00179 float Vreset =-0.06,
00180 float Vinit =-0.06,
00181 float Trefract = 3e-3,
00182 float Inoise = 0.0,
00183 float Iinject = 0.0,
00184 float ErevExc = 0.0,
00185 float ErevInh = -80e-3,
00186 float TauSynExc = 3e-3,
00187 float TauSynInh = 3e-3) :
00188 CompositeNeuron< CbLifNeuron >(StaticCondExpSynapse(1.0, ErevExc, TauSynExc),
00189 StaticCondExpSynapse(1.0, ErevInh, TauSynInh) )
00190 {
00191 this->Rm = taum/Cm;
00192 this->taum = taum;
00193 this->Cm = Cm;
00194 this->Vresting = Vresting;
00195 this->Vthresh = Vthresh;
00196 this->Vreset = Vreset;
00197 this->Vinit = Vinit;
00198 this->Trefract = Trefract;
00199 this->Inoise = Inoise;
00200 this->Iinject = Iinject;
00201 this->TauSynExc = TauSynExc;
00202 this->TauSynInh = TauSynInh;
00203 this->ErevExc = ErevExc;
00204 this->ErevInh = ErevInh;
00205 }
00206
00207 virtual int reset(double dt)
00208 {
00209 this->Rm = taum/Cm;
00210 dynamic_cast<StaticCondExpSynapse*>(getInnerSynapse(0))->tau = TauSynExc;
00211 dynamic_cast<StaticCondExpSynapse*>(getInnerSynapse(1))->tau = TauSynInh;
00212 dynamic_cast<StaticCondExpSynapse*>(getInnerSynapse(0))->Erev = ErevExc;
00213 dynamic_cast<StaticCondExpSynapse*>(getInnerSynapse(1))->Erev = ErevInh;
00214 return CompositeNeuron< CbLifNeuron >::reset(dt);
00215 }
00216
00218 float taum;
00219
00221 float TauSynExc;
00222
00224 float TauSynInh;
00225
00227 float ErevExc;
00228
00230 float ErevInh;
00231 };
00232
00233
00234
00235
00236 #endif