DoubleExponentialSpikeResponse.h

Go to the documentation of this file.
00001 #ifndef DOUBLEEXPONENTIALSPIKERESPONSE_H_
00002 #define DOUBLEEXPONENTIALSPIKERESPONSE_H_
00003 
00004 #include "FiniteSpikeResponse.h"
00005 
00006 class DoubleExponentialSpikeResponse : public FiniteSpikeResponse
00007 {
00008 
00009         SIMOBJECT( DoubleExponentialSpikeResponse, AdvancePhase::SpikeDriven )
00010 
00011 public:
00012     DoubleExponentialSpikeResponse(
00013         const float tau1=1e-3,
00014         const float tau2=3e-3
00015     ): FiniteSpikeResponse(), tau1(tau1), tau2(tau2)
00016     { /* NOOP */ };
00017 
00018     virtual ~DoubleExponentialSpikeResponse()
00019     { /* NOOP */ };
00020 
00022     float tau1;
00023 
00025     float tau2;
00026 
00027     // Update internal variables
00028     virtual int adjust( double dt );
00029 
00030     // Reset to initial condition.
00031     virtual int reset( double dt );
00032 
00033     virtual int advance(AdvanceInfo const &);
00034 
00035     virtual int spikeHit( spikeport_t port, SpikeEvent const& spike );
00036 
00038 
00041     virtual int psrLength(double dt) const;
00042 
00043 private:
00044 
00045         inline double C1( double const& delta ) {
00046                 return exp( -delta/tau1 );
00047         };
00048 
00049         inline double C2( double const& dt ) {
00050                 return exp( - dt*(1.0/tau1+1.0/tau2) ) * ( exp(dt/tau2) - exp(dt/tau1) ) * pow( tau1 / tau2, (tau1+tau2)/(tau1-tau2) ) /
00051                        ( pow( tau1/tau2, tau1/( tau1-tau2 ) ) - pow( tau1/tau2 , tau2/(tau1-tau2) )  );
00052         };
00053 
00054         inline double C3( double const& delta ) {
00055                 return exp( - delta/tau2 );
00056         };
00057 
00059     double c1,c2,c3;
00060 
00062     double x;
00063 };
00064 
00065 
00066 #endif /*DOUBLEEXPONENTIALSPIKERESPONSE_H_*/

Generated on Wed Jul 9 16:34:38 2008 for PCSIM by  doxygen 1.5.5