/****************************************************************/ /* */ /* tectum_88.c */ /* */ /****************************************************************/ # include "nsl_include.h" extern void ganglion_cell_def(nsl_input_matrix&,int,float,float,float); extern void erf_func(nsl_input_matrix&,nsl_input_matrix&,int,float,float,float); NETWORK(TECTUM_88); INPUT_MAT(IN,32,32); // network input INPUT_MAT(R2,8,8); // ganglion cells as network input layers INPUT_MAT(R3,8,8); INPUT_MAT(R4,8,8); MATRIX(gl,8,8); MATRIX(GL,8,8); MATRIX(lp,8,8); MATRIX(LP,8,8); MATRIX(sp,8,8); MATRIX(SP,8,8); MATRIX(sn,8,8); MATRIX(SN,8,8); MATRIX(py,8,8); MATRIX(PY,8,8); MATRIX(tp,8,8); MATRIX(TP,8,8); DATA(C); DATA(gl_tm); DATA(lp_tm); DATA(sp_tm); DATA(sn_tm); DATA(py_tm); DATA(tp_tm); MATRIX(Wr2gl,3,3); MATRIX(Wlpgl,3,3); MATRIX(Wspgl,3,3); MATRIX(Wr2lp,3,3); MATRIX(Wgllp,3,3); MATRIX(Wsplp,3,3); MATRIX(Wsnlp,3,3); MATRIX(Wtplp,3,3); MATRIX(Wr2sp,3,3); MATRIX(Wglsp,3,3); MATRIX(Wsnsp,3,3); MATRIX(Wtpsp,3,3); MATRIX(Wlpsn,3,3); MATRIX(Wr2py,3,3); MATRIX(Wr3py,3,3); MATRIX(Wr4py,3,3); MATRIX(Wsppy,3,3); MATRIX(Wlppy,3,3); MATRIX(Wtppy,3,3); MATRIX(Wr3tp,3,3); MATRIX(Wr4tp,3,3); INIT_MODULE(tectum88_init) { IN = 0; R2 = 0; R3 = 0; R4 = 0; gl = 0; GL = 0; lp = -0.09; LP = 0; sp = -0.18; SP = 0; sn = 0; SN = 0; py = -0.36; PY = 0; tp = 0; TP = 0; } MODULE(tectum88_IN) { IN.run(); } MODULE(tectum88_R2) { // type = 2 // d = 0.7 // erf = 4.0 // val = 1.0 erf_func(IN,R2,2,0.7,4.0,1.0); } MODULE(tectum88_R3) { // type = 3 // d = 1.2 // erf = 8.0 // val = 0.65 erf_func(IN,R3,3,1.2,8.0,0.65); } MODULE(tectum88_R4) { // type = 4 // d = 1.1 // erf = 12.0 // val = 0.4 erf_func(IN,R4,4,1.1,16.0,0.4); } RUN_MODULE(tectum88_GL) { DIFF.eq(gl,gl_tm) = -gl + Wr2gl*R2 + Wlpgl*LP + Wspgl*SP; GL = gl; } RUN_MODULE(tectum88_LP) { DIFF.eq(lp,lp_tm) = -lp+Wr2lp*R2+Wgllp*GL+Wsplp*SP-Wsnlp*SN-Wtplp*TP; LP = NSLstep(lp,1.0); } RUN_MODULE(tectum88_SP) { DIFF.eq(sp,sp_tm) = -sp + Wr2sp*R2 + Wglsp*GL - Wsnsp*SN - Wtpsp*TP; SP = NSLstep(sp,1.7); } RUN_MODULE(tectum88_SN) { DIFF.eq(sn,sn_tm) = -sn + Wlpsn*LP; SN = NSLramp(sn,0.2,0,0.2); } RUN_MODULE(tectum88_PY) { DIFF.eq(py,py_tm) = -py + Wr2py*R2 + Wr3py*R3 + Wr4py*R4 + Wsppy*SP + Wlppy*LP - Wtppy*TP; PY = NSLsat(py,1.91,5); } RUN_MODULE(tectum88_TP) { DIFF.eq(tp,tp_tm) = -tp + Wr3tp*R3 + Wr4tp*R4; TP = NSLramp(tp,3.7,0,3.7); }