00001 #include "PoissonInputNeuron.h"
00002
00003 ThreadSpecificRandomDistribution< ExponentialDistribution > PoissonInputNeuron::isi_gen;
00004
00005 PoissonInputNeuron::PoissonInputNeuron(double rate, double duration, double Tstart, double Trefract)
00006 : rate(rate), Tstart(Tstart), duration(duration), Trefract(Trefract)
00007 {
00008 }
00009
00010
00011 PoissonInputNeuron::PoissonInputNeuron()
00012 : rate(5), Tstart(0), duration(1), Trefract(5e-3)
00013 {
00014 }
00015
00016
00017 PoissonInputNeuron::~PoissonInputNeuron()
00018 {
00019 }
00020
00021
00022 int PoissonInputNeuron::reset(double dt)
00023 {
00024 if (Trefract == 0)
00025 Trefract = dt;
00026 isi_gen.set( ExponentialDistribution(rate) );
00027 nextSpikeTime = Tstart + isi_gen();
00028 endTime = Tstart + duration;
00029 active = true;
00030 return 0;
00031 }
00032
00033 int PoissonInputNeuron::advance(AdvanceInfo const &ai)
00034 {
00035 if (active) {
00036 if ((nextSpikeTime - ai.t.in_sec()) < ai.dt.in_sec() )
00037 {
00038 out_port.setSpike( ai, nextSpikeTime );
00039 nextSpikeTime += isi_gen() + Trefract;
00040 if (nextSpikeTime > endTime)
00041 active = false;
00042 return ADVANCEFLAG_HASSPIKED;
00043 }
00044 else
00045 return 0;
00046 }
00047 return 0;
00048 }
00049
00050