Development of orientation-selective simple cell receptive fields (Rishikesh and Venkatesh, 2003)

 Download zip file 
Help downloading and running models
Accession:147929
Implementation of a computational model for the development of simple-cell receptive fields spanning the regimes before and after eye-opening. The before eye-opening period is governed by a correlation-based rule from Miller (Miller, J. Neurosci., 1994), and the post eye-opening period is governed by a self-organizing, experience-dependent dynamics derived in the reference below.
Reference:
1 . Rishikesh N, Venkatesh YV (2003) A computational model for the development of simple-cell receptive fields spanning the regimes before and after eye-opening Neurocomputing 50:125-158
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Realistic Network; Neuron or other electrically excitable cell; Synapse;
Brain Region(s)/Organism: Neocortex;
Cell Type(s):
Channel(s):
Gap Junctions:
Receptor(s):
Gene(s):
Transmitter(s):
Simulation Environment: C or C++ program;
Model Concept(s): Rate-coding model neurons; Unsupervised Learning; Winner-take-all; Development; Orientation selectivity; Vision;
Implementer(s): Narayanan, Rishikesh [rishi at iisc.ac.in];
#ifndef __ORIENT_H__
#define __ORIENT_H__

#include<fstream.h>
#include<iostream.h>
#include<stdlib.h>
#include<stdio.h>
#include<math.h>
#include<assert.h>
#include<string.h>

struct CortexNeuron{
	double ** OnWeights ;
	double ** OfWeights ;
};

struct WtChange{
	double OnCh; 
	double OfCh;
};

struct WeightChange{
	WtChange ** wd;
	WtChange ** wd1;
	WtChange ** wd2;
};


class Orient
{

protected :

	CortexNeuron ** cortex ;		// Cortex Neurons..
	WeightChange ** wch ;			// Weight Changes..
	int rows, cols ; 				// No of LGN & cortex rows and cols..
	int ab ;						// Arbor Diameter..
	double rC ;			// Parameter controlling spread of correlation fn.
	double rI ;			// Parameter controlling spread of Intracortical fn.
	double Smax ;		// Upper Bound on Synapse Values..
	double lamda ;		// Growth Constant..
	int it;				// Current Iteration number;
	char outfilename[35];
	char oflnm[50];

public :
	
	Orient();
	void LoadParams(char * = NULL);
	void LoadStatus(char * = NULL);
	void Start();

protected :

	void assignspace ();
	void assignInitialWeights();
	double A (double distance);
	double I (double distance);
	double G(double distance, double sigma);
	double Cx_x (double distance);
	double Cx_y (double distance);
	void computeUWtChange();
	void uOnWtChange(int xx, int xy, int ax, int ay);
	void uOfWtChange(int xx, int xy, int ax, int ay);
	void computeCWtChange();
	void adjustsynapse();
	void threestep(int i, int j, int k, int l);
	int cutoff (int i, int j, int k, int l);
	void renormalize(int i, int j);
	double perc();
	double wrapdis(int xx, int xy, int yx, int yy);
	double cordis(int iax, int iay, int ik, int il);
	void store();
	void storediff();
	void saveStatus();
    int wrapx(int);
    int wrapy(int);
};

#endif