#ifndef REWARDGENERATOR_H_
#define REWARDGENERATOR_H_
#include "SimObject.h"
#include "SpikeSender.h"
class RewardGenerator : public SimObject, public SingleOutputSpikeSender
{
SIMOBJECT( RewardGenerator, AdvancePhase::One )
public:
RewardGenerator(double Rduration = 5,
double Rnegbase = 0.0,
bool AvgRewardZero = false,
bool OneOverRateScale = false);
virtual ~RewardGenerator();
virtual int reset(double dt);
virtual int advance( AdvanceInfo const& );
virtual int spikeHit( spikeport_t port, SpikeEvent const& spike );
virtual double getAnalogOutput(analog_port_id_t port = 0) const;
virtual void setAnalogInput(double value, analog_port_id_t port = 0);
virtual int nSpikeInputPorts() const;
virtual int nAnalogOutputPorts() const;
virtual int nAnalogInputPorts() const;
virtual PortType outputPortType(port_t p) const;
virtual PortType inputPortType(port_t p) const;
bool isActive;
protected:
double reward;
int stepsLeftForReward;
double rewardDuration;
double Rnegbase;
double A;
bool AvgRewardZero;
double lastSpikeTime;
bool OneOverRateScale;
double instRate;
};
#endif /*REWARDGENERATOR_H_*/