// Recfield.h class LayerA : public NslModule { public: NslDoutFloat4 g; // gaussian values for pairs of neurons private: NslFloat0 sp; // spreading NslFloat0 delta; // height of the gaussian public: LayerA(nsl_string, NslModule*,int,int); ~LayerA() {} void initRun(); }; class LayerB : public NslModule { public: NslDoutFloat4 g; // gaussian values for pairs of neurons private: NslFloat0 sp; // spreading NslFloat0 delta; // height of the gaussian public: LayerB(nsl_string, NslModule*,int,int); ~LayerB() {} void initRun(); }; class ConnectW : public NslModule { public: NslDinFloat4 g; // gaussian values for pairs of neurons NslDinFloat4 pp; // p terms NslDoutFloat4 e; // e terms private: NslFloat4 w; // activatory weights NslFloat0 beta; // integration parameter for act NslFloat0 ga; // cubic decay term for w NslFloat0 alpha; // to get the weights out from zero NslFloat0 maxinitval; // weight maximum initial value NslFloat0 seed; // random seed NslFloat0 randa; public: ConnectW(nsl_string, NslModule*,int,int,int,int); ~ConnectW() {} void initRun(); void simRun(); void convGauss(); void modifyWeights(); }; class ConnectQ : public NslModule { public: NslDinFloat4 g; // gaussian values for pairs of neurons NslDinFloat4 e; // e terms NslDoutFloat4 pp; // p terms private: NslFloat4 q; // inhibitory weights NslFloat0 beta; // integration parameter for act NslFloat0 ga; // cubic decay term for w NslFloat0 alpha; // to get the weights out from zero public: ConnectQ(nsl_string, NslModule*,int,int,int,int); ~ConnectQ() {} void initRun(); void simRun(); void convGauss(); void modifyWeights(); }; class Recfield : public NslModule { public: LayerA a; LayerB b; ConnectW w; ConnectQ q; Recfield(nsl_string,NslModule*,int,int,int,int); ~Recfield() {} void makeConn(); }; class RecfieldModel : public NslModel { public: Recfield rf; RecfieldModel(); ~RecfieldModel() {} };