def get_weights(self):
     conn_list_fn = self.params['conn_list_ee_fn_base'] + '0.dat'
     self.conn_mat, self.delays = utils.convert_connlist_to_matrix(conn_list_fn, self.params['n_exc'], self.params['n_exc'])
     self.w_in_sum = np.zeros(self.params['n_exc'])
     n_cells = self.params['n_exc']
     for i in xrange(n_cells):
         self.w_in_sum[i] = self.conn_mat[:, i].sum()
Exemple #2
0
    def plot_conductance_composition(self):

        self.load_nspikes()
        if self.no_spikes:
            return

        self.load_input_spikes()
        self.g_exc_noise = self.params['w_exc_noise'] * self.params['tau_syn_exc'] * self.params['f_exc_noise']
        self.g_inh_noise = self.params['w_inh_noise'] * self.params['tau_syn_inh'] * self.params['f_inh_noise']

        conn_list_ee = self.params['merged_conn_list_ee']
        conn_list_ei = self.params['merged_conn_list_ei']
        conn_list_ie = self.params['merged_conn_list_ie']
        conn_list_ii = self.params['merged_conn_list_ii']
        if not os.path.exists(conn_list_ee):
            os.system("python merge_connlists.py")

        print 'Getting connection matrices ...'
        w_ee, delays_ee = utils.convert_connlist_to_matrix(conn_list_ee, self.params['n_exc'], self.params['n_exc'])
        w_ei, delays_ei = utils.convert_connlist_to_matrix(conn_list_ei, self.params['n_exc'], self.params['n_inh'])
        w_ie, delays_ie = utils.convert_connlist_to_matrix(conn_list_ie, self.params['n_inh'], self.params['n_exc'])
        w_ii, delays_ii = utils.convert_connlist_to_matrix(conn_list_ii, self.params['n_inh'], self.params['n_inh'])
        c_ee = self.get_cond_matrix(self.nspikes_exc, w_ee, 'ee')
        c_ei = self.get_cond_matrix(self.nspikes_exc, w_ei, 'ei')
        c_ie = self.get_cond_matrix(self.nspikes_inh, w_ie, 'ie')
        c_ii = self.get_cond_matrix(self.nspikes_inh, w_ii, 'ii')

        self.create_fig()
        self.n_fig_x, self.n_fig_y = 1, 1

        color_net_exc = 'r'
        color_net_inh = 'b'
        color_stim = 'g'
        color_noise = 'w'

        ax = self.fig.add_subplot(111)
        lw = 4
        width=.5
        for gid in xrange(self.params['n_exc']):
            x = self.nspikes_exc[gid]
            y0 = self.g_stim[gid]
            y1 = c_ee[:, gid].sum()
            y3 = c_ie[:, gid].sum()
            ax.bar(x, y0, width=width, color=color_stim)
            ax.bar(x, y1, width=width, bottom=y0, color=color_net_exc)
#            ax.bar(x, self.g_exc_noise, width=width, bottom=y1+y0, color=color_noise)
            ax.bar(x, -y3, width=width, color=color_net_inh)
Exemple #3
0
 def print_delays(self):
     fn = self.params['merged_conn_list_ee']
     if not os.path.exists(fn):
         print 'File: %s not found\nCalling merge_connlists.py now...\n'
         os.system('python merge_connlists.py')
     conn_mat, delays = utils.convert_connlist_to_matrix(fn, self.params['n_exc'], self.params['n_exc'])
     for i_, src  in enumerate(self.gids_to_plot):
         for j_, tgt in enumerate(self.gids_to_plot):
             if src != tgt:
                 t1 = self.time_of_max_stim[src] 
                 t2 = self.time_of_max_stim[tgt] 
                 w, delay = conn_mat[src, tgt], delays[src, tgt]
                 if t1 < t2:
                     optimal_tau_prediction = (t2 - t1) / self.params['t_stimulus']
                     optimal_delay_scale = delay / (self.params['delay_scale'] * (t2 - t1))
                     print '%d (%d)\t->\t%d (%d)\t: dt_max_stim = %.1f\toptimal_tau_prediction = %.1f\toptimal_delay_scale = %.1f' % (src, t1, tgt, t2, t2 - t1, optimal_tau_prediction, optimal_delay_scale)
    def load_connection_matrices(self, conn_type):
        """
        deprecated - should not be used because of unnecessary memory consumption
        use load_connection_list instead to get sources / targets
        """

        if conn_type == 'ee':
            n_src, n_tgt = self.params['n_exc'], self.params['n_exc']
            loaded = self.conn_mat_loaded[0]
        elif conn_type == 'ei':
            n_src, n_tgt = self.params['n_exc'], self.params['n_inh']
            loaded = self.conn_mat_loaded[1]
        elif conn_type == 'ie':
            n_src, n_tgt = self.params['n_inh'], self.params['n_exc']
            loaded = self.conn_mat_loaded[2]
        elif conn_type == 'ii':
            n_src, n_tgt = self.params['n_inh'], self.params['n_inh']
            loaded = self.conn_mat_loaded[3]

        if loaded:
            return

        conn_mat_fn = self.params['conn_mat_fn_base'] + '%s.dat' % (conn_type)
        delay_mat_fn = self.params['delay_mat_fn_base'] + '%s.dat' % (conn_type)
        if os.path.exists(conn_mat_fn):
            print 'Loading', conn_mat_fn
            self.connection_matrices[conn_type] = np.loadtxt(conn_mat_fn)
        #    delays_ee = np.loadtxt(delay_mat_ee_fn)
        else:
            self.connection_matrices[conn_type], self.delays[conn_type] = utils.convert_connlist_to_matrix(params['merged_conn_list_%s' % conn_type], n_src, n_tgt)
            np.savetxt(conn_mat_fn, self.connection_matrices[conn_type])
#            np.savetxt(delay_mat_fn, self.delays[conn_type])
            
        if conn_type == 'ee':
            self.conn_mat_loaded[0] = True
        elif conn_type == 'ei':
            self.conn_mat_loaded[1] = True
        elif conn_type == 'ie':
            self.conn_mat_loaded[2] = True
        elif conn_type == 'ii':
            self.conn_mat_loaded[3] = True
elif conn_type == 'ie':
    n_src, n_tgt = params['n_inh'], params['n_exc']
elif conn_type == 'ii':
    n_src, n_tgt = params['n_inh'], params['n_inh']

conn_list_fn = params['merged_conn_list_%s' % conn_type]
print 'Loading: ', conn_list_fn

conn_mat_fn = params['conn_mat_fn_base'] + '%s.dat' % (conn_type)
#delay_mat_fn = params['delay_mat_fn_base'] + '%s.dat' % (conn_type)
if os.path.exists(conn_mat_fn):
    print 'Loading', conn_mat_fn
    w = np.loadtxt(conn_mat_fn)
#    delays_ee = np.loadtxt(delay_mat_ee_fn)
else:
    w, delays = utils.convert_connlist_to_matrix(params['merged_conn_list_%s' % conn_type], n_src, n_tgt)
    print 'Saving:', conn_mat_fn
    np.savetxt(conn_mat_fn, w)

print 'Weights: min %.2e median %.2e max %.2e mean %.2e st %.2e' % (w.min(), w.max(), np.median(w), w.mean(), w.std())
fig = pylab.figure()
ax = fig.add_subplot(111)
print "plotting ...."
title = 'Connection matrix %s \nw_sigma_x(v): %.1f (%.1f)' % (conn_type, params['w_sigma_x'], params['w_sigma_v'])
ax.set_title(title)
cax = ax.pcolormesh(w)#, edgecolor='k', linewidths='1')
ax.set_ylim(0, w.shape[0])
ax.set_xlim(0, w.shape[1])
ax.set_ylabel('Target')
ax.set_xlabel('Source')
pylab.colorbar(cax)
def get_cond_matrix(nspikes, w):
    cond_matrix = np.zeros((params['n_exc'], params['n_exc']))
    for tgt in xrange(params['n_exc']):
        for src in xrange(params['n_exc']):
            if src != tgt:
                cond_matrix[src, tgt] =  w[src, tgt] * nspikes[src]
    return cond_matrix



# compute everything
input_cond = calculate_input_cond()
os.system("python merge_connlists.py")
conn_list_fn = params['merged_conn_list_ee']
print 'debug', conn_list_fn
w, delays = utils.convert_connlist_to_matrix(conn_list_fn, params['n_exc'], params['n_exc'])
cond_matrix = get_cond_matrix(nspikes, w)
np.savetxt(params['tmp_folder'] + 'input_cond.dat', input_cond)
np.savetxt(params['tmp_folder'] + 'cond_matrix.dat', cond_matrix)

# or load the computed cond_matrix etc (for replotting)
#input_cond = np.loadtxt(params['tmp_folder'] + 'input_cond.dat')
#cond_matrix = np.loadtxt(params['tmp_folder'] + 'cond_matrix.dat')

summed_network_cond = np.zeros(params['n_exc'])
for tgt in xrange(params['n_exc']):
    summed_network_cond[tgt] = cond_matrix[:, tgt].sum()



import utils
import simulation_parameters
import CreateConnections as CC

network_params = simulation_parameters.parameter_storage()  # network_params class containing the simulation parameters
params = network_params.load_params()                       # params stores cell numbers, etc as a dictionary
tp = np.loadtxt(params['tuning_prop_means_fn'])

mp = params['motion_params']
print "Motion parameters", mp
sigma_x, sigma_v = params['w_sigma_x'], params['w_sigma_v'] # small sigma values let p and w shrink

print 'utils.sort_gids_by_distance_to_stimulus...'
indices, distances = utils.sort_gids_by_distance_to_stimulus(tp , mp) # cells in indices should have the highest response to the stimulus
print 'utils.convert_connlist_to_matrix...'
conn_mat, delays = utils.convert_connlist_to_matrix(params['conn_list_ee_fn_base'] + '0.dat', params['n_exc'], params['n_exc'])
#n = 50
n = int(params['n_exc'] * .05) # fraction of 'interesting' cells

print "Loading nspikes", params['exc_spiketimes_fn_merged'] + '.ras'
nspikes = utils.get_nspikes(params['exc_spiketimes_fn_merged'] + '.ras', n_cells=params['n_exc'])
mans = (nspikes.argsort()).tolist() # mans = most active neurons
mans.reverse()
mans = mans[0:n]

print 'w_out_good = weights to other well tuned neurons'
print 'w_in_good = weights from other well tuned neurons'
print 'w_out_total = sum of all outgoing weights'
print 'w_in_total = sum of all incoming weights'
print 'distance_to_stim = minimal distance to the moving stimulus (linear sum of  (time-varying) spatial distance and (constant) distance in velocity)'
print "\nGID\tnspikes\tdistance_to_stim\tw_out_good\tw_in_good\tw_out_total\tw_in_total\ttuning_prop"
#    cax = ax.pcolor(data)#, edgecolor='k', linewidths='1')
#    ax.set_ylim(0, data.shape[0])
#    ax.set_xlim(0, data.shape[1])
#    pylab.colorbar(cax)

    #cax = ax.pcolor(data, cmap='binary')
    #cax = ax.pcolor(data, cmap='RdBu')
    #cax = ax.imshow(data[:,:12])

if (n_dw > 0):
#    dws = [np.zeros((n_cells, n_cells)) for i in xrange(n_dw)]
    # plot the difference weight matrix
    for i in xrange(len(fns)-1):
        fn1 = fns[i]
        fn2 = fns[i+1]
        d1 = utils.convert_connlist_to_matrix(fn1, n_cells)
        d2 = utils.convert_connlist_to_matrix(fn2, n_cells)
        dw = d2 - d1
        data = dw

        print "plotting dw"
        fig = pylab.figure()
        ax = fig.add_subplot(121)
        ax.set_title("Difference %s \n- %s" % (fn1, fn2))
        cax = ax.pcolor(data)#, edgecolor='k', linewidths='1')
        #cax = ax.pcolor(data, cmap='binary')
        #cax = ax.pcolor(data, cmap='RdBu')
        #cax = ax.imshow(data[:,:12])
        ax.set_ylim(0, data.shape[0])
        ax.set_xlim(0, data.shape[1])
        pylab.colorbar(cax)