• Main Page
  • Classes
  • Files
  • File List

GenericPLBasicSynapse.h

00001 #ifndef GenericPLBasicSynapse_H_
00002 #define GenericPLBasicSynapse_H_
00003 
00004 #include "EvSimObject.h"
00005 #include "SpikeResponse.h"
00006 #include "EvSimObjectTypeUtils.h"
00007 #include "Synapse.h"
00008 #include "SimException.h"
00009 #include "Neuron.h"
00010 
00011 #include <iostream>
00012 
00013 
00014 #ifndef SWIG
00015 
00016 #include <boost/format.hpp>
00017 using boost::str;
00018 
00019 #endif
00020 
00021 class PLSynapse : public Synapse {
00022 public:
00023 
00024     double getSlope() {return slope;};
00025 
00026     virtual ~PLSynapse();
00027 
00028 protected:
00029     void updatePSRSlope(double new_slope, Time time) {
00030         slope = new_slope;
00031     }
00032 
00033     void resetPSRSlope() {
00034         slope = 0;
00035     }
00036 
00037     double slope;
00038 };
00039 
00040 
00041 class PLActiveSynapse : public ActiveSynapse {
00042 public:
00043 
00044     virtual ~PLActiveSynapse();
00045 
00046 protected:
00047     inline void updatePSR(double new_psr, Time time)
00048     {
00049         psr_old = psr;
00050         if (time > cur_time) {
00051             psr_old += (time-cur_time)*slope;
00052             cur_time = time;
00053         }
00054         psr = new_psr;
00055         target_nrn->updatePSR(psr, psr - psr_old, time);
00056     }
00057 
00058     void updatePSRSlope(double new_slope, Time time)
00059     {
00060         slope_old = slope;
00061         slope = new_slope;
00062         target_nrn->updatePSRSlope(slope, slope - slope_old, time);
00063     }
00064 
00065     void resetPSRSlope()
00066     {
00067         slope = slope_old = 0;
00068         cur_time = 0;
00069     }
00070 
00071     double slope;
00072     double slope_old;
00073     Time cur_time;
00074 };
00075 
00076 
00077 template<class BaseSyn>
00078 class GenericPLBasicSynapse : public BaseSyn {
00079 public:
00080 
00081     GenericPLBasicSynapse(float W = 1)
00082     {
00083         this->W = W;
00084         this->syn_resp = 0;
00085     };
00086 
00087     virtual ~GenericPLBasicSynapse() {};
00088 
00089     double W;
00090 
00091     virtual void reset(SimContext &sim_ctxt)
00092     {
00093         BaseSyn::resetPSRs();
00094         BaseSyn::resetPSRSlope();        
00095     };
00096 
00097     virtual void setPostSynResponse(SpikeResponse *response) {
00098         syn_resp = response;
00099     }
00100 
00101     virtual void updateState(SimContext &sim_ctxt, Time time, update_id_t upd_id)
00102     {
00103         BaseSyn::updatePSR(W*syn_resp->get(), time);
00104         BaseSyn::updatePSRSlope(W*syn_resp->getSlope(), time);
00105     }
00106 
00107 protected:
00108     SpikeResponse *syn_resp;    
00109 };
00110 
00111 #endif /* GenericPLBasicSynapse_H_ */

Generated on Wed Sep 18 2013 11:25:40 for NEVESIM by  doxygen 1.7.1