def generate_W_grid(self,p):
'''
Generate connection matrix for neurons in a two-dimensional grid
Specifically for VIP-SOM connections
'''
p['p_vip2som_arbor'] = 0.6
# Consider a grid of 400\mum * 400\mum
# Assign locations of neurons
p['n_vip_scale'] = 625
p['grid_size_vip'] = 400*np.sqrt(p['n_vip_scale']/p['n_vip']) # mu m
p['n_vip_scale_sqrt'] = np.round(np.sqrt(p['n_vip_scale']))
p['n_som_sqrt'] = np.floor(np.sqrt(p['n_som']))
# x and y locations of VIP neurons, randomly drawn
p['vip_x'] = np.tile(np.linspace(-0.5,0.5,p['n_vip_scale_sqrt']),p['n_vip_scale_sqrt'])*p['grid_size_vip']
p['vip_y'] = np.repeat(np.linspace(-0.5,0.5,p['n_vip_scale_sqrt']),p['n_vip_scale_sqrt'])*p['grid_size_vip']
# x and y locations of SOM neurons, randomly drawn
p['som_x'] = np.tile(np.linspace(-0.5,0.5,p['n_som_sqrt']),p['n_som_sqrt'])*400
p['som_y'] = np.repeat(np.linspace(-0.5,0.5,p['n_som_sqrt']),p['n_som_sqrt'])*400
p['som_x'] = np.concatenate((p['som_x'],(np.random.rand(p['n_som']-p['n_som_sqrt']**2)-0.5)*400))
p['som_y'] = np.concatenate((p['som_y'],(np.random.rand(p['n_som']-p['n_som_sqrt']**2)-0.5)*400))
# Assume that each VIP only targets SOM within vicinity (vip_arbor) with probability p_vip2som_arbor
p['W_vip2som'] = np.zeros((p['n_som'],p['n_vip_scale']))
for i_som in xrange(p['n_som']):
dist2vip = np.sqrt((p['som_x'][i_som]-p['vip_x'])**2+(p['som_y'][i_som]-p['vip_y'])**2)
# Make connections if p>p_vip2som_arbor and dist<vip_arbor
ind_vip2som_conn = np.where(dist2vip<(p['vip_arbor']))[0]
np.random.shuffle(ind_vip2som_conn)
ind_vip2som_conn = ind_vip2som_conn[:int(p['p_vip2som_arbor']*len(ind_vip2som_conn))]
p['W_vip2som'][i_som,ind_vip2som_conn] = 1
n_vip2som = np.sum(p['W_vip2som'],axis=1)
# uIPSQ is about 0.7 pC=0.7 pA/Hz for VIP-SOM connection, Pfeffer et al. Nat Neurosci. 2012
#syn_weight_vip2som = 10/n_vip2som
for i_som in xrange(p['n_som']):
p['W_vip2som'][i_som,:] = p['W_vip2som'][i_som,:]*0.7*60/n_vip2som[i_som]
return p
InterneuronalCircuit.py 文件源码
python
阅读 17
收藏 0
点赞 0
评论 0
评论列表
文章目录