00001 #ifndef LinearPoissonNeuron_H_
00002 #define LinearPoissonNeuron_H_
00003
00004 #include "InputTargetTypes.h"
00005 #include "SpikeSender.h"
00006 #include "SimObject.h"
00007 #include "ThreadSpecificRandomDistribution.h"
00008
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 class LinearPoissonNeuron : public SimObject, public SingleOutputSpikeSender, public ConductanceInputTarget
00039 {
00040 SIMOBJECT( LinearPoissonNeuron , AdvancePhase::One )
00041 public:
00042
00043 LinearPoissonNeuron( float C = 1,
00044 float Rm = 1e8,
00045 float Trefract = 3e-3,
00046 float Inoise = 0.0,
00047 float Iinject = 0.0 )
00048 : C(C), Rm(Rm), Trefract(Trefract), Inoise(Inoise), Iinject(Iinject)
00049 {
00050
00051 }
00052
00053 virtual ~LinearPoissonNeuron()
00054 {
00055
00056 }
00057
00059 virtual int reset( double dt );
00060
00062 inline bool refractoryQ() { return (nStepsInRefr > 0); };
00063
00064 virtual void clearSynapticInput(void);
00065
00066
00068 float C;
00069
00071 float Rm;
00072
00074 float Trefract;
00075
00077 float Inoise;
00078
00080 float Iinject;
00081
00082 virtual double getManagedDelay() const { return 0; }
00083 virtual int nSpikeInputPorts() const { return 0; };
00084 virtual int nSpikeOutputPorts() const { return 1; };
00085 virtual int nAnalogInputPorts() const { return 0; };
00086 virtual int nAnalogOutputPorts() const { return 0; };
00087 virtual PortType outputPortType(port_t o) const
00088 {
00089 if( o==0) return spiking; else return undefined;
00090 };
00091 virtual PortType inputPortType(port_t i) const
00092 {
00093 return undefined;
00094 };
00096 virtual int adjust( double dt ) { return 0; };
00097
00099 virtual int advance(AdvanceInfo const &);
00100
00101
00102 virtual void currentInput( double Isyn );
00103
00104 virtual void conductanceInput( double g, double Erev );
00105
00106 protected:
00108 double Vm;
00109
00111 int nStepsInRefr;
00112
00114 double Isyn;
00115
00117 double Gsyn;
00118
00120
00123 double Twindow;
00124
00125
00126 static ThreadSpecificRandomDistribution< UniformDistribution > spike_gen;
00127
00129 static ThreadSpecificRandomDistribution< NormalDistribution > noise_gen;
00130
00131 };
00132
00133
00134 #endif