00001 #ifndef BiasAsymmHomeostMECHANISM_H_
00002 #define BiasAsymmHomeostMECHANISM_H_
00003
00004 #include "EvSimObject.h"
00005 #include "EvSimObjectTypeUtils.h"
00006
00007 class BiasAsymmHomeostMechanism : public EvSimObject {
00008
00009 EV_SIM_OBJECT( BiasAsymmHomeostMechanism )
00010
00011 public:
00012 BiasAsymmHomeostMechanism(float eta_plus = 1e-5,
00013 float eta_minus = 1e-5,
00014 float rTarget = 20,
00015 float tau = 5.0,
00016 bool isActive = true)
00017 {
00018 this->eta_plus = eta_plus;
00019 this->eta_minus = eta_minus;
00020 this->tau = tau;
00021 this->rTarget = rTarget;
00022 this->isActive = isActive;
00023 }
00024
00025 float eta_plus;
00026
00027 float eta_minus;
00028
00029 float tau;
00030
00031 float rTarget;
00032
00033 bool isActive;
00034
00035 virtual ~BiasAsymmHomeostMechanism();
00036
00037 virtual void postMountAsMountedObj(EvSimNetwork &net, EvSimObject::ID self, EvSimObject::ID mountpoint);
00038
00039 virtual void reset(SimContext &sim_ctxt);
00040
00041 virtual void eventHit(SimContext & sim_ctxt, Time time, port_id_t port);
00042
00043 protected:
00044
00045 inline double C( double const& delta ) {
00046 return exp( -delta/tau );
00047 };
00048
00049 float r_estim;
00050
00051 float *bias_ptr;
00052
00053 double last_update_time;
00054 };
00055
00056 #endif