// 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
}