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
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];
#include"Vector.h"

Vector :: Vector ( ) 
{
   	xcoord = 0.0 ;
   	ycoord = 0.0 ;
}

/*************************************************************/

Vector :: Vector ( double x, double y ) 
{
	xcoord = x ;
	ycoord = y ;
}

/*************************************************************/

void Vector :: setVector (double x, double y)
{
	xcoord = x ;
	ycoord = y ;
}

/*************************************************************/

double Vector :: getxcoord ( ) 
{
	return xcoord ;
}

/*************************************************************/


double Vector :: getycoord ( ) 
{
	return ycoord  ;
}

/*************************************************************/

Vector Vector :: operator + ( Vector & f1 ) 
{
	Vector temp;
	double xcoo =  xcoord + f1. xcoord ;
	double ycoo = ycoord + f1.ycoord ;
	temp.xcoord=xcoo;
	temp.ycoord=ycoo;
	return temp ;
}

/*************************************************************/

Vector Vector :: operator - ( Vector & f1 ) 
{
	Vector temp;
	double xcoo =  xcoord - f1. xcoord ;
	double ycoo = ycoord - f1.ycoord ;
	temp.xcoord=xcoo;
	temp.ycoord=ycoo;
	return temp ;
}

/*************************************************************/

Vector Vector :: operator * ( double c  ) 
{
	Vector temp;
	double xcoo = xcoord * c ; 
	double ycoo = ycoord * c ;
	temp.xcoord=xcoo;
	temp.ycoord=ycoo;
	return temp ; 
}


/*************************************************************/

ostream & operator << (ostream & s, Vector vect ) 
{
	s << vect . xcoord << "  " << vect . ycoord << endl ;
	return s ; 
}

/*************************************************************/

istream & operator >> ( istream & s , Vector & vect ) 
{
	if(s == cin)
	    cout <<"\nGive Xcoord: " ;
	s >> vect . xcoord ;
	if(s == cin)
	    cout <<"\nGive Ycoord: " ;
	s >> vect . ycoord ;
	return s ;
}

/*************************************************************/

Vector Vector :: operator / ( double s ) 
{
	Vector temp;
	double xcoo = xcoord / s ; 
	double ycoo = ycoord / s ;
	temp.xcoord=xcoo;
	temp.ycoord=ycoo;
	return temp ; 
}

/*************************************************************/

void Vector :: operator += (Vector v)
{
  	xcoord += v.xcoord ;
	ycoord += v.ycoord ;
}

/*************************************************************/

void Vector :: operator -= (Vector v)
{
  	xcoord -= v.xcoord ;
	ycoord -= v.ycoord ;
}

/*************************************************************/

Vector  Vector :: multiplywith  ( double xmul, double ymul ) 
{
	Vector temp;
	double xcoo = xcoord * xmul ;
	double ycoo = ycoord * ymul ;
	temp.xcoord=xcoo;
	temp.ycoord=ycoo;
	return temp ;
}

/*************************************************************/

Vector Vector :: divideby ( double xdiv , double ydiv ) 
{
	Vector temp;
	double xcoo = xcoord / xdiv ;
	double ycoo = ycoord / ydiv ;
	temp.xcoord=xcoo;
	temp.ycoord=ycoo;
	return temp ;
}

/*************************************************************/

double Euclidean(Vector v1, Vector v2)
{
	return (sqrt((v1.xcoord-v2.xcoord)*(v1.xcoord-v2.xcoord)+
		     (v1.ycoord-v2.ycoord)*(v1.ycoord-v2.ycoord)));
}

/*************************************************************/

double Norm (Vector v)
{
	return(sqrt(v.xcoord*v.xcoord+v.ycoord*v.ycoord));
}

/*************************************************************/

double InnerProduct(Vector v1, Vector v2)
{
	return(v1.xcoord*v2.xcoord+v1.ycoord*v2.ycoord);
}


/*************************************************************/


Loading data, please wait...