Engaging distinct oscillatory neocortical circuits (Vierling-Claassen et al. 2010)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:141273
"Selective optogenetic drive of fast-spiking (FS) interneurons (INs) leads to enhanced local field potential (LFP) power across the traditional “gamma” frequency band (20–80 Hz; Cardin et al., 2009). In contrast, drive to regular-spiking (RS) pyramidal cells enhances power at lower frequencies, with a peak at 8 Hz. The first result is consistent with previous computational studies emphasizing the role of FS and the time constant of GABAA synaptic inhibition in gamma rhythmicity. However, the same theoretical models do not typically predict low-frequency LFP enhancement with RS drive. To develop hypotheses as to how the same network can support these contrasting behaviors, we constructed a biophysically principled network model of primary somatosensory neocortex containing FS, RS, and low-threshold spiking (LTS) INs. ..."
Reference:
1 . Vierling-Claassen D, Cardin JA, Moore CI, Jones SR (2010) Computational modeling of distinct neocortical oscillations driven by cell-type selective optogenetic drive: separable resonant circuits controlled by low-threshold spiking and fast-spiking interneurons. Front Hum Neurosci 4:198 [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Realistic Network;
Brain Region(s)/Organism: Neocortex;
Cell Type(s): Neocortex L2/3 pyramidal GLU cell; Neocortex fast spiking (FS) interneuron; Neocortex spiking regular (RS) neuron; Neocortex spiking low threshold (LTS) neuron;
Channel(s): I Na,t; I T low threshold; I K; I M; I h; I K,Ca; I Calcium;
Gap Junctions:
Receptor(s):
Gene(s):
Transmitter(s):
Simulation Environment: NEURON;
Model Concept(s): Oscillations; Detailed Neuronal Models; Brain Rhythms; Evoked LFP; Touch;
Implementer(s): Vierling-Claassen, Dorea ;
Search NeuronDB for information about:  Neocortex L2/3 pyramidal GLU cell; I Na,t; I T low threshold; I K; I M; I h; I K,Ca; I Calcium;
/
Vierling-ClaassenEtAl2010
batchsims
confiles
README
ar.mod
ca.mod *
cad.mod *
cat.mod
fdsexp2syn.mod *
Gfluct.mod *
gnetstim.mod
kca.mod *
km.mod *
kv.mod *
na_2.mod
light_batch_FSdrive.hoc
light_genconn_DB.m
lightgamma_drive_DB.hoc
lightgamma_init_DB.hoc
lightgamma_LFP_DB.hoc
lightgamma_localconn_DB.hoc
lightgamma_network_DB.hoc
lightgamma_noise_DB.hoc
lightgamma_wiring_DB.hoc
lightgamma_wiring_proc_DB.hoc
                            
// Vierling-Claassen 2010
// Processes to generate fixed random synaptic connections, connection files generated by 
// light_genconn.m 
///////////////

// Directory for fixed random connectivity, generated by light_genconn.m.  
// Input files are four columns (x_pre y_pre x_post y_post), one row for each connection
strdef Con_FN
Con_FN="./confiles/con_2-3-2010-1/"

///////////
// Pyramidal to Pyramidal connection
///////////

proc IItoII_fr(){ local weight, delay, distX, distY, distance, preX, preY, postX, postY localobj con_file, con_x1, con_x2, con_y1, con_y2

// Connects Layer II/III to Layer II/III Pyramidals
 // with fixed random connectivity read in from files generated by light_genconn.m
 // Each file read in contains the x and y coordinates of the pre and post synaptic cells in the grid
 // order is xpre, ypre, xpost, y post
// Usage: IItoII( Max_Weight, Space constant, compartment [0-7] receptor type
// [0=ampa, 1=nmda],
// minimum_delay, delay_space_constant )

con_file = new File()
strdef con_str
sprint(con_str,"%s%s",Con_FN,"Con_EE.dat")
con_file.ropen(con_str)
con_x1 = new Vector()
con_y1 = new Vector()
con_x2 = new Vector()
con_y2 = new Vector()

con_x1.scanf(con_file,1,4)
con_file.seek
con_y1.scanf(con_file,2,4)
con_file.seek
con_x2.scanf(con_file,3,4)
con_file.seek
con_y2.scanf(con_file,4,4)

NumCon=con_x1.size

for k=0,NumCon-1{
	//print con_x1.x[k], con_y1.x[k], con_x2.x[k], con_y2.x[k]
	preX=con_x1.x[k]
	postX=con_x2.x[k]
	preY=con_y1.x[k]
	postY=con_y2.x[k]
	
	distX = abs(preX-postX)
   distY = abs(preY-postY)
   distance = sqrt(distX^2 + distY^2)
   weight = $1 * exp( -(distance^2) / ( $2^2) )
   delay = $5 * 1 / (exp( -(distance^2) / ( $6^2) ) )

	rconnect(PL2[preX][preY], PL2[postX][postY], $3, $4, weight, delay, 0) 
	
} // end loop through connections
print "connected II to II, Num Cons: ", NumCon
} // end process loop

//////////////////////////////////////////
// Inhibitory to Pyramidal connections 
//////////////////////////////////////////

proc IL2toII_fr(){ local weight,delay, distX, distY, distance, preX, preY, postX, postY localobj con_file, con_x1, con_x2, con_y1, con_y2

// Connects Layer II/III INHIBitory Basket cells to Layer II/III Pyramidals
 // with fixed random connectivity read in from files generated by light_genconn.m
 // Each file read in contains the x and y coordinates of the pre and post synaptic cells in the grid
 // order is xpre, ypre, xpost, y post
 // Note that loop is through connections, not through grid as in previous connection processes
// usage: IL2toII( L.2 Pyram_compartment [0-8], 
//        receptor type [ 2=GABAa, 3-GABAb ],
//        max_weight, weight_space_constant [>1],
//        min-delay [ms.] , delay-space-constant [>1] )
//

con_file = new File()
strdef con_str
sprint(con_str,"%s%s",Con_FN,"Con_IE.dat")
con_file.ropen(con_str)
con_x1 = new Vector()
con_y1 = new Vector()
con_x2 = new Vector()
con_y2 = new Vector()

con_x1.scanf(con_file,1,4)
con_file.seek
con_y1.scanf(con_file,2,4)
con_file.seek
con_x2.scanf(con_file,3,4)
con_file.seek
con_y2.scanf(con_file,4,4)

NumCon=con_x1.size

for k=0,NumCon-1{
	//print con_x1.x[k], con_y1.x[k], con_x2.x[k], con_y2.x[k]
	preX=3*con_x1.x[k] // multiple accounts for spacing between I cells in grid
	postX=con_x2.x[k]
	preY=2*con_y1.x[k]  // multiple accounts for spacing between I cells in grid
	postY=con_y2.x[k]

    distX = abs(preX-postX)
    distY = abs(preY-postY)
    distance = sqrt(distX^2 + distY^2)
    weight = $3 * exp( -(distance^2) / ( $4^2) )
    delay = $5 * 1 / (exp( -(distance^2) / ( $6^2) ) )


   rconnect(IPL2[preX][preY], PL2[postX][postY], $1, $2, weight, delay, 0) 
} 
print "connected IL2 to II, Num Cons: ", NumCon
}

//----------------------------

proc SL2toII_fr(){ local weight,delay, distX, distY, distance, preX, preY, postX, postY localobj con_file, con_x1, con_x2, con_y1, con_y2

// Connects Layer II/III INHIBitory Som cells to Layer II/III Pyramidals
 // with fixed random connectivity read in from files generated by light_genconn.m
 // Each file read in contains the x and y coordinates of the pre and post synaptic cells in the grid
 // order is xpre, ypre, xpost, y post
// usage: SL2toII( L.2 Pyram_compartment [0-8], 
//        receptor type [ 2=GABAa, 3-GABAb ],
//        max_weight, weight_space_constant [>1],
//        min-delay [ms.] , delay-space-constant [>1] )
//

con_file = new File()
strdef con_str
sprint(con_str,"%s%s",Con_FN,"Con_SE.dat")
con_file.ropen(con_str)
con_x1 = new Vector()
con_y1 = new Vector()
con_x2 = new Vector()
con_y2 = new Vector()

con_x1.scanf(con_file,1,4)
con_file.seek
con_y1.scanf(con_file,2,4)
con_file.seek
con_x2.scanf(con_file,3,4)
con_file.seek
con_y2.scanf(con_file,4,4)

NumCon=con_x1.size

for k=0,NumCon-1{
	//print con_x1.x[k], con_y1.x[k], con_x2.x[k], con_y2.x[k]
	preX=3*con_x1.x[k]+1 // multiple accounts for spacing between inhib cells in grid
	postX=con_x2.x[k]
	preY=2*con_y1.x[k]+1  // multiple accounts for spacing between inhib cells in grid
	postY=con_y2.x[k]

    distX = abs(preX-postX)
    distY = abs(preY-postY)
    distance = sqrt(distX^2 + distY^2)
    weight = $3 * exp( -(distance^2) / ( $4^2) )
    delay = $5 * 1 / (exp( -(distance^2) / ( $6^2) ) )

       rconnect(SPL2[preX][preY], PL2[postX][postY], $1, $2, weight, delay, 0) 
} 
print "connected SL2 to II, Num Cons: ", NumCon
} 

//////////////////////////////////////////
// Inhibitory to inhibitory, same population
//////////////////////////////////////////

proc IL2toIL2_fr(){ local preX, preY, postX, postY, distX, distY, distance, weight, delay localobj con_file, con_x1, con_x2, con_y1, con_y2

// Connect Layer II/III inhibitory cells to themselves, included target section
 // with fixed random connectivity read in from files generated by light_genconn.m
 // Each file read in contains the x and y coordinates of the pre and post synaptic cells in the grid
 // order is xpre, ypre, xpost, y post
// usage: IL2toIL2(Target Section in layer 2 basket, Max_Weight., Space_Constant, Min_Delay, Delay_Space_Constant, receptor_type )

con_file = new File()
strdef con_str
sprint(con_str,"%s%s",Con_FN,"Con_II.dat")
con_file.ropen(con_str)
con_x1 = new Vector()
con_y1 = new Vector()
con_x2 = new Vector()
con_y2 = new Vector()

con_x1.scanf(con_file,1,4)
con_file.seek
con_y1.scanf(con_file,2,4)
con_file.seek
con_x2.scanf(con_file,3,4)
con_file.seek
con_y2.scanf(con_file,4,4)

NumCon=con_x1.size

for k=0,NumCon-1{
	//print con_x1.x[k], con_y1.x[k], con_x2.x[k], con_y2.x[k]
	preX=3*con_x1.x[k] // multiple accounts for spacing between inhib cells in grid
	postX=3*con_x2.x[k]
	preY=2*con_y1.x[k]  // multiple accounts for spacing between inhib cells in grid
	postY=2*con_y2.x[k]

    distX = abs(preX-postX)
    distY = abs(preY-postY)
    distance = sqrt(distX^2 + distY^2)
    weight = $2 * exp( -(distance^2) / ( $3^2) )
    delay = $4 * 1 / (exp( -(distance^2) / ( $5^2) ) )

    rconnect(IPL2[preX][preY],IPL2[postX][postY],0,$6,weight,delay,0)
}
print "connected IL2 to IL2, Num Cons: ", NumCon
} 

//--------------------

proc SL2toSL2_fr(){ local preX, preY, postX, postY, distX, distY, distance, weight, delay localobj con_file, con_x1, con_x2, con_y1, con_y2
// Connect Layer II/III som cells to themselves, usually zero, but included for completeness
 // with fixed random connectivity read in from files generated by light_genconn.m
 // Each file read in contains the x and y coordinates of the pre and post synaptic cells in the grid
 // order is xpre, ypre, xpost, y post
// usage: SL2toSL2(Target Section in layer 2 som, Max_Weight., Space_Constant, Min_Delay, Delay_Space_Constant, receptor_type )

con_file = new File()
strdef con_str
sprint(con_str,"%s%s",Con_FN,"Con_SS.dat")
con_file.ropen(con_str)
con_x1 = new Vector()
con_y1 = new Vector()
con_x2 = new Vector()
con_y2 = new Vector()

con_x1.scanf(con_file,1,4)
con_file.seek
con_y1.scanf(con_file,2,4)
con_file.seek
con_x2.scanf(con_file,3,4)
con_file.seek
con_y2.scanf(con_file,4,4)

NumCon=con_x1.size

for k=0,NumCon-1{
	//print con_x1.x[k], con_y1.x[k], con_x2.x[k], con_y2.x[k]
	preX=3*con_x1.x[k]+1 // multiple accounts for spacing between inhib cells in grid
	postX=3*con_x2.x[k]+1
	preY=2*con_y1.x[k]+1  // multiple accounts for spacing between inhib cells in grid
	postY=2*con_y2.x[k]+1

    distX = abs(preX-postX)
    distY = abs(preY-postY)
    distance = sqrt(distX^2 + distY^2)
    weight = $2 * exp( -(distance^2) / ( $3^2) )
    delay = $4 * 1 / (exp( -(distance^2) / ( $5^2) ) )


   rconnect(SPL2[preX][preY],SPL2[postX][postY],0,$6,weight,delay,0)
} 
print "connected SL2 to SL2, Num Cons: ", NumCon
} 

//////////////////////////////////////////
// Inhibitory to inhibitory, across populations
//////////////////////////////////////////

proc IL2toSL2_fr(){ local preX, preY, postX, postY, distX, distY, distance, weight, delay localobj con_file, con_x1, con_x2, con_y1, con_y2

// Connect Layer II/III inhibitory cells to themselves, included target section
 // with fixed random connectivity read in from files generated by light_genconn.m
 // Each file read in contains the x and y coordinates of the pre and post synaptic cells in the grid
 // order is xpre, ypre, xpost, y post
// usage: IL2toIL2(Target Section in layer 2 basket, Max_Weight., Space_Constant, Min_Delay, Delay_Space_Constant, receptor_type )

con_file = new File()
strdef con_str
sprint(con_str,"%s%s",Con_FN,"Con_IS.dat")
con_file.ropen(con_str)
con_x1 = new Vector()
con_y1 = new Vector()
con_x2 = new Vector()
con_y2 = new Vector()

con_x1.scanf(con_file,1,4)
con_file.seek
con_y1.scanf(con_file,2,4)
con_file.seek
con_x2.scanf(con_file,3,4)
con_file.seek
con_y2.scanf(con_file,4,4)

NumCon=con_x1.size

for k=0,NumCon-1{
	//print con_x1.x[k], con_y1.x[k], con_x2.x[k], con_y2.x[k]
	preX=3*con_x1.x[k] // multiple accounts for spacing between inhib cells in grid
	postX=3*con_x2.x[k]+1
	preY=2*con_y1.x[k]  // multiple accounts for spacing between inhib cells in grid
	postY=2*con_y2.x[k]+1

    distX = abs(preX-postX)
    distY = abs(preY-postY)
    distance = sqrt(distX^2 + distY^2)
    weight = $2 * exp( -(distance^2) / ( $3^2) )
    delay = $4 * 1 / (exp( -(distance^2) / ( $5^2) ) )

    rconnect(IPL2[preX][preY],SPL2[postX][postY],0,$6,weight,delay,0)
}
print "connected IL2 to SL2, Num Cons: ", NumCon
} 

//-----------------------

proc SL2toIL2_fr(){ local preX, preY, postX, postY, distX, distY, distance, weight, delay localobj con_file, con_x1, con_x2, con_y1, con_y2
// Connect Layer II/III som cells to themselves, usually zero, but included for completeness
 // with fixed random connectivity read in from files generated by light_genconn.m
 // Each file read in contains the x and y coordinates of the pre and post synaptic cells in the grid
 // order is xpre, ypre, xpost, y post
// usage: SL2toSL2(Target Section in layer 2 som, Max_Weight., Space_Constant, Min_Delay, Delay_Space_Constant, receptor_type )

con_file = new File()
strdef con_str
sprint(con_str,"%s%s",Con_FN,"Con_SI.dat")
con_file.ropen(con_str)
con_x1 = new Vector()
con_y1 = new Vector()
con_x2 = new Vector()
con_y2 = new Vector()

con_x1.scanf(con_file,1,4)
con_file.seek
con_y1.scanf(con_file,2,4)
con_file.seek
con_x2.scanf(con_file,3,4)
con_file.seek
con_y2.scanf(con_file,4,4)

NumCon=con_x1.size

for k=0,NumCon-1{
	//print con_x1.x[k], con_y1.x[k], con_x2.x[k], con_y2.x[k]
	preX=3*con_x1.x[k]+1 // multiple accounts for spacing between inhib cells in grid
	postX=3*con_x2.x[k]
	preY=2*con_y1.x[k]+1  // multiple accounts for spacing between inhib cells in grid
	postY=2*con_y2.x[k]

    distX = abs(preX-postX)
    distY = abs(preY-postY)
    distance = sqrt(distX^2 + distY^2)
    weight = $2 * exp( -(distance^2) / ( $3^2) )
    delay = $4 * 1 / (exp( -(distance^2) / ( $5^2) ) )


   rconnect(SPL2[preX][preY],IPL2[postX][postY],0,$6,weight,delay,0)
} 
print "connected SL2 to IL2, Num Cons: ", NumCon
}

//////////////////////////////////////////
//Pyramidal to Inhibitory Connections
////////////////////////////////////////////

proc IItoIL2_fr(){ local preX, preY, postX, postY, distX, distY, distance, weight, delay localobj con_file, con_x1, con_x2, con_y1, con_y2

// Connects Layer II/III Pyramidal to Layer II/III Inhibitory basket cells
 // with fixed random connectivity read in from files generated by light_genconn.m
 // Each file read in contains the x and y coordinates of the pre and post synaptic cells in the grid
 // order is xpre, ypre, xpost, y post
// Usage: IItoIL2(Target Section in layer 2 basket, Max_Weight, Space_Constant, Min_Delay, Delay_Space_Constant, receptor_type )

con_file = new File()
strdef con_str
sprint(con_str,"%s%s",Con_FN,"Con_EI.dat")
con_file.ropen(con_str)
con_x1 = new Vector()
con_y1 = new Vector()
con_x2 = new Vector()
con_y2 = new Vector()

con_x1.scanf(con_file,1,4)
con_file.seek
con_y1.scanf(con_file,2,4)
con_file.seek
con_x2.scanf(con_file,3,4)
con_file.seek
con_y2.scanf(con_file,4,4)

NumCon=con_x1.size

for k=0,NumCon-1{
	preX=con_x1.x[k] // multiple accounts for spacing between inhib cells in grid
	postX=3*con_x2.x[k]
	preY=con_y1.x[k]  // multiple accounts for spacing between inhib cells in grid
	postY=2*con_y2.x[k]
    distX = abs(preX-postX)
    distY = abs(preY-postY)
    distance = sqrt(distX^2 + distY^2)
    weight = $2 * exp( -(distance^2) / ( $3^2) )
    delay = $4 * 1 / (exp( -(distance^2) / ( $5^2) ) )


       rconnect(PL2[preX][preY], IPL2[postX][postY], 0, $6, weight, delay, 0) 
} 
print "connected II to IL2, Num Cons: ", NumCon
}

//------------------------------

proc IItoSL2_fr(){ local preX, preY, postX, postY, distX, distY, distance, weight, delay localobj con_file, con_x1, con_x2, con_y1, con_y2

// Connects Layer II/III Pyramidal to Layer II/III Inhibitory basket cells
 // with fixed random connectivity read in from files generated by light_genconn.m
 // Each file read in contains the x and y coordinates of the pre and post synaptic cells in the grid
 // order is xpre, ypre, xpost, y post
// Usage: IItoIL2(Target Section in layer 2 basket, Max_Weight, Space_Constant, Min_Delay, Delay_Space_Constant, receptor_type )

con_file = new File()
strdef con_str
sprint(con_str,"%s%s",Con_FN,"Con_ES.dat")
con_file.ropen(con_str)
con_x1 = new Vector()
con_y1 = new Vector()
con_x2 = new Vector()
con_y2 = new Vector()

con_x1.scanf(con_file,1,4)
con_file.seek
con_y1.scanf(con_file,2,4)
con_file.seek
con_x2.scanf(con_file,3,4)
con_file.seek
con_y2.scanf(con_file,4,4)

NumCon=con_x1.size

for k=0,NumCon-1{
	preX=con_x1.x[k] // multiple accounts for spacing between inhib cells in grid
	postX=3*con_x2.x[k]+1
	preY=con_y1.x[k]  // multiple accounts for spacing between inhib cells in grid
	postY=2*con_y2.x[k]+1
    distX = abs(preX-postX)
    distY = abs(preY-postY)
    distance = sqrt(distX^2 + distY^2)
    weight = $2 * exp( -(distance^2) / ( $3^2) )
    delay = $4 * 1 / (exp( -(distance^2) / ( $5^2) ) )


       rconnect(PL2[preX][preY], SPL2[postX][postY], 0, $6, weight, delay, 0) 
} 
print "connected II to SL2, Num Cons: ", NumCon
}