Contrast invariance by LGN synaptic depression (Banitt et al. 2007)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:114637
"Simple cells in layer 4 of the primary visual cortex of the cat show contrast-invariant orientation tuning, in which the amplitude of the peak response is proportional to the stimulus contrast but the width of the tuning curve hardly changes with contrast. This study uses a detailed model of spiny stellate cells (SSCs) from cat area 17 to explain this property. The model integrates our experimental data, including morphological and intrinsic membrane properties and the number and spatial distribution of four major synaptic input sources of the SSC: the dorsal lateral geniculate nucleus (dLGN) and three cortical sources. ... The model response is in close agreement with experimental results, in terms of both output spikes and membrane voltage (amplitude and fluctuations), with reasonable exceptions given that recurrent connections were not incorporated."
References:
1 . Banitt Y, Martin KA, Segev I (2007) A biologically realistic model of contrast invariant orientation tuning by thalamocortical synaptic depression. J Neurosci 27:10230-9 [PubMed]
2 . Anderson JC, Douglas RJ, Martin KA, Nelson JC (1994) Map of the synapses formed with the dendrites of spiny stellate neurons of cat visual cortex. J Comp Neurol 341:25-38 [PubMed]
3 . Anderson JC, Douglas RJ, Martin KA, Nelson JC (1994) Synaptic output of physiologically identified spiny stellate neurons in cat visual cortex. J Comp Neurol 341:16-24 [PubMed]
4 . Banitt Y, Martin KA, Segev I (2005) Depressed responses of facilitatory synapses. J Neurophysiol 94:865-70 [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Neuron or other electrically excitable cell;
Brain Region(s)/Organism:
Cell Type(s): Neocortex spiny stellate cell;
Channel(s): I Na,t; I A; I K; I K,Ca; I Calcium;
Gap Junctions:
Receptor(s):
Gene(s):
Transmitter(s):
Simulation Environment: NEURON;
Model Concept(s): Pattern Recognition; Activity Patterns; Parameter Fitting; Active Dendrites; Synaptic Integration; Vision;
Implementer(s):
Search NeuronDB for information about:  I Na,t; I A; I K; I K,Ca; I Calcium;
/
SSC_model
ReadMe.html
ReadMe_orig
iA.mod
iap.mod
ic.mod
ical.mod
VectorSynNS.mod
axon.hoc
InitArrays.hoc
InitSSCArrays.hoc
InitSynapses.hoc
j3886d_sdt.hoc
MeasureDist.hoc
mosinit.hoc
ssc.hoc
sscDistCl1
sscDistCl2
sscDistCl3
sscDistCl4
sscProxCl1
sscProxCl2
sscProxCl3
sscProxCl4
sscSomaCl1 *
sscSomaCl2 *
sscSomaCl3 *
sscSomaCl4 *
                            
/**********************************************************
Define methods to let user initialize the synapses and netstims.
The file is desinged to allow also the intialization of a basket
cell (bc).
************************************************************/

/*---------------------------------------------------------
WriteSynLoc writes into files that specify synapse locations:
--------------------------------------------------------*/
proc WriteSynLoc(){local i,loc,size,type,location localobj ve,LocArray,rnd,fp
	
	type 	 = $1 
	location = $2
	ve 		 = WRSynFile(type,location,fp)
	LocArray = new Vector(ve.x(0))
	rnd		 = new Random()
	
	for i=0,ve.x(0)-1{
		LocArray.x(i) = int ( rnd.uniform ( 0 , ve.x (1) ) )
	}
	
	fp.wopen()
	LocArray.printf(fp)
	fp.close()
}

/**************************************
WRSynFile generates a file by the name of the cell type (ssc),
the location on the dendritic tree (soma, prox, dist) 
and the type of synapse (Cl1=LGN; CL2=L4; CL3=L6; CL4=inhibition). 
it also returns a vector (ve) with the number of synapses (ve.x(0))
of the input source specified in $1 & $2. ve.x(1) is the number of 
distal/proximal sections. the file opened here can be used to wrtie
synapse locations (in WriteSynLoc) or to read them (in ReadSynapses)
********************************************/
strdef s,r
obfunc WRSynFile(){local nos,nsyns,type,location localobj ve,seclist
	type	 = $1
	location = $2
	ve		 = new Vector(2)
	seclist	 = SecLists.o(location)
	
	//string s with type of neuron:
	if ( NumOfSomaSyn[1] == 0 )   {
		sprint(s,"ssc")
	} else {
		sprint(s,"bc")
	}
	
	if (location==0)  {					//soma
		ve.x(0)	= NumOfSomaSyn[type]
		ve.x(1)	= 1
		sprint(r,"%s\SomaCl%g",s,$1)
	}	else if ( location == 1 ) {		//proximal
	
		ve.x(0)	= NumOfProxSyn[type]
		ve.x(1)	= seclist.count()
		sprint(r,"%s\ProxCl%g",s,$1)
	} 	else if ( location == 2 ) {		//distal
		
		ve.x(0)	= NumOfDistSyn[type]
		ve.x(1)	= seclist.count()
		sprint(r,"%s\DistCl%g",s,$1)
	} 	else {print "unknown location"}
	
	//print "#ofsyn (ve.x(0))=",$o3.x(0),", #ofsections (ve.x(1))=",$o3.x(1)
	$o3	= new File(r)
	s	= ""
	r	= ""
	return ve
}


/****************************************
read the synapse locations file (from WRSynFile), and initialize 
VectorSynapses. ve.x(0) is the number of synapses in the array. 
ve.x(1) is the location of the synapses (code of sections)
****************************************/
proc ReadSynapses(){local loc,scpa,i  localobj ve,ns,nslist,nclist,seclist,codevec,vsyn,nc,fp,tmp  
	type=$1
	location=$2
	
	//get number of synapses in ve.x(0) and open file with synapse locations:
	ve=WRSynFile(type,location,fp)		
	fp.ropen()			
	
	//# of synaptic contacts:
	scpa=SynContsPerAxons[type]			
	
	//list of netstims:
	nslist=NSLists.o(location).o(type)	
	
	//list of netcons:
	nclist=NCLists.o(location).o(type)	
	
	//list of sections:
	seclist=SecLists.o(location)		
	
	//vector of section codes to Vsyn:
	codevec=SectionCodeToVsynList.o(location)	
	
	for i = 0, ve.x(0)-1 {												
		
		//get the location specified in the file and go to section:
		loc	= fp.scanvar()
		seclist.o(loc).sec{						
		
			//print i,"\t",secname(),"\t",distance(0.5)
			
			//get the Vsysn there, and add a synapse of type type:
			vsyn = VSynList.o( codevec.x(loc) )				
			vsyn.add(type)											

			//get corresponding netstim (make one if needed):
			if ( (i%scpa) ==0 ){										
				ns = new NetStim(0.5)
				SetNetStim(ns,1e9,1e9,1)					
				ns.number = 20000								
				nslist.append(ns)									
			}
			
			//connect new synapses to nnetstim:
			nc = new NetCon(ns,vsyn,0,0,vsyn.syncount-1)
			nclist.append(nc)
			//print "ns and nc: ",ns,"\t",nc,"\t",vsyn.syncount-1,"\n"
		}
	}
	fp.close()
	//print "read synapses type", type, ", location",location
}

//Set the parameters of the netstim ($o1)
proc SetNetStim(){
	$o1.start	 = $2
	$o1.interval = $3
	$o1.noise	 = $4
}


/*---------------------------------------------------------------
set netstim parameters for $1 synapses at location $2
--------------------------------------------------------------*/
proc SetInputSourceLocationFrequency(){local i,start,interval,noise localobj nslist
	type	 = $1
	location = $2
	start	 = $3
	interval = $4
	noise	 = $5
	nslist	 = NSLists.o(location).o(type)	
	
	for i = 0, nslist.count()-1{
		SetNetStim(nslist.o(i),start,interval,noise)
	}
}

/*---------------------------------------------------------------
set input parameters for input source $1 at all locations
--------------------------------------------------------------*/
proc SetInputSourceFrequency(){local i, start, interval, noise
	start	 = $2
	interval = $3
	noise	 = $4
	for i = 0, 2{
		SetInputSourceLocationFrequency($1,i,start,interval,noise)
	}
}

Loading data, please wait...