00001 #ifndef KernelSpikeResponseBase_H_
00002 #define KernelSpikeResponseBase_H_
00003
00004 #include "EvSimObject.h"
00005 #include "DirectEventSender.h"
00006 #include "SharedArray.h"
00007 #include "SharedArrayTypes.h"
00008 #include "SpikeResponse.h"
00009
00010
00011 class KernelSpikeResponseBase : public SpikeResponse, public DirectEventSender {
00012
00013 public:
00014
00015 KernelSpikeResponseBase() : resp_shape_amplitudes(0), resp_shape_timepoints(0) {};
00016
00017 KernelSpikeResponseBase(const SharedArray<double> &resp_shape_amplitudes,
00018 const SharedArray<double> &resp_shape_timepoints)
00019 : resp_shape_amplitudes(resp_shape_amplitudes.get()),
00020 resp_shape_timepoints(resp_shape_timepoints.get())
00021 {}
00022
00023 virtual ~KernelSpikeResponseBase() {};
00024
00025
00026 void setResponseKernel(const SharedArray<double> &resp_shape_amplitudes,
00027 const SharedArray<double> &resp_shape_timepoints) {
00028 this->resp_shape_amplitudes = resp_shape_amplitudes.get();
00029 this->resp_shape_timepoints = resp_shape_timepoints.get();
00030 }
00031
00032 virtual unsigned numInputPorts() const
00033 {
00034 return 2;
00035 };
00036
00037 virtual unsigned numOutputPorts() const
00038 {
00039 return 1;
00040 };
00041
00042
00043 virtual PortType getInputPortType(port_id_t p) const
00044 {
00045 if (p < 2)
00046 return eventPortDirect;
00047 return portUndefined;
00048 };
00049
00050 virtual PortType getOutputPortType(port_id_t p) const
00051 {
00052 if (p == 0)
00053 return eventPortDirect;
00054 return portUndefined;
00055 };
00056
00057 virtual void reset(SimContext &sim_ctxt)
00058 {
00059 curr_timepoint = RESPONSE_NOT_ACTIVE;
00060 next_expected_time = MAX_TIME;
00061 r = r_old = 0;
00062 };
00063
00064 virtual void postAddedInNetwork(EvSimNetwork &net, EvSimObject::ID self);
00065
00066 protected:
00067 static const unsigned RESPONSE_NOT_ACTIVE = ~(0u);
00068
00069 const vector<double> * resp_shape_amplitudes;
00070 const vector<double> * resp_shape_timepoints;
00071
00072 unsigned curr_timepoint;
00073 double next_expected_time;
00074 };
00075
00076 #endif
00077