Esempio n. 1
0
    def _connect(self):
        cl = []
        v = 0
        for i in numpy.nonzero(self.target.pop._mask_local)[0]:
            samples = self.target.get_neuron_annotation(i,self.parameters.annotation_reference_name)
            weights = self._obtain_weights(i)
            delays = self._obtain_delays(i)
            
            if self.parameters.num_samples == 0:
                co = Counter(sample_from_bin_distribution(weights, int(samples)))
            else:
                assert self.parameters.num_samples > 2*int(samples), ("%s: %d %d" % (self.name,self.parameters.num_samples,2*int(samples)))
                co = Counter(sample_from_bin_distribution(weights, int(self.parameters.num_samples - 2*int(samples))))
            v = v + numpy.sum(co.values())
            k = co.keys()
            a = numpy.array([k,numpy.zeros(len(k))+i,self.weight_scaler*numpy.multiply(self.parameters.base_weight.next(len(k)),co.values()),numpy.array(delays)[k]])
            cl.append(a)

        cl = numpy.hstack(cl).T
        method = self.sim.FromListConnector(cl)
        
        logger.warning("%s(%s): %g connections were created, %g per target neuron [%g]" % (self.name,self.__class__.__name__,len(cl),len(cl)/len(numpy.nonzero(self.target.pop._mask_local)[0]),v/len(numpy.nonzero(self.target.pop._mask_local)[0])))
        
        if len(cl) > 0:
            self.proj = self.sim.Projection(
                                self.source.pop,
                                self.target.pop,
                                method,
                                synapse_type=self.init_synaptic_mechanisms(),
                                label=self.name,
                                receptor_type=self.parameters.target_synapses)
        else:
            logger.warning("%s(%s): empty projection - pyNN projection not created." % (self.name,self.__class__.__name__))
Esempio n. 2
0
    def _connect(self):
        cl = []
        v = 0
        for i in numpy.nonzero(self.target.pop._mask_local)[0]:
            samples = self.target.get_neuron_annotation(i,self.parameters.annotation_reference_name)
            weights = self._obtain_weights(i)
            delays = self._obtain_delays(i)
            if self.parameters.num_samples == 0:
                co = Counter(sample_from_bin_distribution(weights, int(samples)))
            else:
                assert self.parameters.num_samples > 2*int(samples), ("%s: %d %d" % (self.name,self.parameters.num_samples,2*int(samples)))
                co = Counter(sample_from_bin_distribution(weights, int(self.parameters.num_samples - 2*int(samples))))
            v = v + numpy.sum(co.values())
            k = co.keys()
            a = numpy.array([k,numpy.zeros(len(k))+i,self.weight_scaler*numpy.multiply(self.parameters.base_weight.next(len(k)),co.values()),numpy.array(delays)[k]])
            cl.append(a)

        cl = numpy.hstack(cl).T
        method = self.sim.FromListConnector(cl)
        
        logger.warning("%s(%s): %g connections were created, %g per target neuron [%g]" % (self.name,self.__class__.__name__,len(cl),len(cl)/len(numpy.nonzero(self.target.pop._mask_local)[0]),v/len(numpy.nonzero(self.target.pop._mask_local)[0])))
        
        if len(cl) > 0:
            self.proj = self.sim.Projection(
                                self.source.pop,
                                self.target.pop,
                                method,
                                synapse_type=self.init_synaptic_mechanisms(),
                                label=self.name,
                                receptor_type=self.parameters.target_synapses)
        else:
            logger.warning("%s(%s): empty projection - pyNN projection not created." % (self.name,self.__class__.__name__))
Esempio n. 3
0
 def worker(ref,idxs):
     for i in idxs:
         samples = self.target.get_neuron_annotation(i,self.parameters.annotation_reference_name)
         weights = self._obtain_weights(i)
         delays = self._obtain_delays(i)
         if self.parameters.num_samples == 0:
             co = Counter(sample_from_bin_distribution(weights, int(samples)))
         else:
             assert self.parameters.num_samples > 2*int(samples), ("%s: %d %d" % (self.name,self.parameters.num_samples,2*int(samples)))
             a = sample_from_bin_distribution(weights, int(self.parameters.num_samples - 2*int(samples)))
             co = Counter(a)
         v = v + numpy.sum(co.values())
         cl.extend([(int(k),int(i),self.weight_scaler*self.parameters.base_weight.next()*co[k],delays[k]) for k in co.keys()])
     return cl
Esempio n. 4
0
 def worker(ref,idxs):
     for i in idxs:
         samples = self.target.get_neuron_annotation(i,self.parameters.annotation_reference_name)
         weights = self._obtain_weights(i)
         delays = self._obtain_delays(i)
         if self.parameters.num_samples == 0:
             co = Counter(sample_from_bin_distribution(weights, int(samples)))
         else:
             assert self.parameters.num_samples > 2*int(samples), ("%s: %d %d" % (self.name,self.parameters.num_samples,2*int(samples)))
             a = sample_from_bin_distribution(weights, int(self.parameters.num_samples - 2*int(samples)))
             co = Counter(a)
         v = v + numpy.sum(co.values())
         cl.extend([(int(k),int(i),self.weight_scaler*self.parameters.base_weight.next()[0]*co[k],delays[k]) for k in co.keys()])
     return cl
Esempio n. 5
0
    def _connect(self):
        # This is due to native synapses models (which we currently use as the short term synaptic plasticity model)
        # do not apply the 1000 factor scaler as the pyNN synaptic models
        wf = self.parameters.weight_factor * self.weight_scaler
        seeds = mozaik.get_seeds(self.target.pop.size)
        weights = self.connection_matrix
        delays = self.delay_matrix
        cl = []
        for i in range(0, self.target.pop.size):
            co = Counter(
                sample_from_bin_distribution(weights[:, i].flatten(),
                                             int(self.parameters.num_samples),
                                             seeds[i]))
            cl.extend([(int(k), int(i),
                        wf * co[k] / self.parameters.num_samples, delays[k][i])
                       for k in co.keys()])

        method = self.sim.FromListConnector(cl)

        self.proj = self.sim.Projection(
            self.source.pop,
            self.target.pop,
            method,
            synapse_type=self.init_synaptic_mechanisms(),
            label=self.name,
            receptor_type=self.parameters.target_synapses)
Esempio n. 6
0
        def build_connector(indices, seeds, queue_cl, queue_v):
            cli = []
            vi = 0
            for i in range(len(indices)):
                weights = self._obtain_weights(indices[i], seeds[i])
                delays = self._obtain_delays(indices[i], seeds[i])

                co = Counter(
                    sample_from_bin_distribution(
                        weights, int(self.parameters.num_samples.next()),
                        seeds[i]))
                vi = vi + numpy.sum(list(co.values()))
                k = list(co.keys())
                a = numpy.array([
                    k,
                    numpy.zeros(len(k)) + indices[i],
                    self.weight_scaler * numpy.multiply(
                        self.parameters.base_weight.copy(seeds[i]).next(
                            len(k)), list(co.values())),
                    numpy.array(delays)[k],
                ])
                cli.append(a)
            # Add the output to the two queues to communicate it with the main process
            queue_cl.put(cli)
            queue_v.put(vi)
Esempio n. 7
0
        def build_connector(indices, seeds, queue_cl, queue_v):
            cli = []
            vi = 0
            for i in range(len(indices)):
                samples = self.target.get_neuron_annotation(
                    indices[i], self.parameters.annotation_reference_name)
                weights = self._obtain_weights(indices[i], seeds[i])
                delays = self._obtain_delays(indices[i], seeds[i])

                if self.parameters.num_samples == 0:
                    co = Counter(
                        sample_from_bin_distribution(weights, int(samples),
                                                     seeds[i]))
                else:
                    assert self.parameters.num_samples > 2 * int(
                        samples), "%s: %d %d" % (
                            self.name,
                            self.parameters.num_samples,
                            2 * int(samples),
                        )
                    co = Counter(
                        sample_from_bin_distribution(
                            weights,
                            int(self.parameters.num_samples -
                                2 * int(samples)),
                            seeds[i],
                        ))

                vi = vi + numpy.sum(list(co.values()))
                k = list(co.keys())
                a = numpy.array([
                    k,
                    numpy.zeros(len(k)) + indices[i],
                    self.weight_scaler * numpy.multiply(
                        self.parameters.base_weight.copy(seeds[i]).next(
                            len(k)), list(co.values())),
                    numpy.array(delays)[k],
                ])
                cli.append(a)
            # Add the output to the two queues to communicate it with the main process
            queue_cl.put(cli)
            queue_v.put(vi)
Esempio n. 8
0
 def _connect(self):
     cl = []
     for i in numpy.nonzero(self.target.pop._mask_local)[0]:
         weights = self._obtain_weights(i)
         delays = self._obtain_delays(i)
         co = Counter(sample_from_bin_distribution(weights, int(self.parameters.num_samples.next())))
         cl.extend([(k,i,self.weight_scaler*self.parameters.base_weight.next()*co[k],delays[k]) for k in co.keys()])
     method = self.sim.FromListConnector(cl)
     if len(cl) > 0:
         self.proj = self.sim.Projection(
                             self.source.pop,
                             self.target.pop,
                             method,
                             synapse_type=self.init_synaptic_mechanisms(),
                             label=self.name,
                             receptor_type=self.parameters.target_synapses)
     else:
         logger.warning("%s(%s): empty projection - pyNN projection not created." % (self.name,self.__class__.__name__))
Esempio n. 9
0
 def connect(self):
     cl = []
     d={}
     
     for i,(s,t,w,delay) in enumerate(self.connection_list):
         if d.has_key(t):
            d[t].append(i)
         else:
            d[t] = [i]
     
     for k in d.keys():
         w = [self.connection_list[i][2] for i in d[k]]
         
         samples = sample_from_bin_distribution(w,self.parameters.num_samples)
         a = [self.connection_list[d[k][s]] for s in samples]
         cl.extend([(a,b,self.parameters.weight_factor/len(samples),de) for (a,b,c,de) in a])
     
     method  =  self.sim.FromListConnector(cl)  
     self.proj = self.sim.Projection(self.source.pop, self.target.pop, method, synapse_dynamics=self.short_term_plasticity, label=self.name, rng=None, target=self.parameters.target_synapses)
Esempio n. 10
0
 def _connect(self):
     # This is due to native synapses models (which we currently use as the short term synaptic plasticity model) 
     # do not apply the 1000 factor scaler as the pyNN synaptic models
     wf = self.parameters.weight_factor * self.weight_scaler
     weights = self.connection_matrix
     delays = self.delay_matrix
     cl = []
     for i in xrange(0,self.target.pop.size):
         co = Counter(sample_from_bin_distribution(weights[:,i].flatten(), int(self.parameters.num_samples)))
         cl.extend([(int(k),int(i),wf*co[k]/self.parameters.num_samples,delays[k][i]) for k in co.keys()])
         
     method = self.sim.FromListConnector(cl)
     
     self.proj = self.sim.Projection(
                             self.source.pop,
                             self.target.pop,
                             method,
                             synapse_type=self.init_synaptic_mechanisms(),
                             label=self.name,
                             receptor_type=self.parameters.target_synapses)
Esempio n. 11
0
 def _connect(self):
     cl = []
     for i in numpy.nonzero(self.target.pop._mask_local)[0]:
         weights = self._obtain_weights(i)
         delays = self._obtain_delays(i)
         co = Counter(
             sample_from_bin_distribution(weights,
                                          self.parameters.num_samples))
         cl.extend([(k, i, self.weight_scaler *
                     self.parameters.base_weight * co[k], delays[k])
                    for k in co.keys()])
     method = self.sim.FromListConnector(cl)
     if len(cl) > 0:
         self.proj = self.sim.Projection(
             self.source.pop,
             self.target.pop,
             method,
             synapse_type=self.init_synaptic_mechanisms(),
             label=self.name,
             receptor_type=self.parameters.target_synapses)
     else:
         logger.warning(
             "%s(%s): empty projection - pyNN projection not created." %
             (self.name, self.__class__.__name__))
Esempio n. 12
0
 def _determine_weights_and_delays(self,i):    
     weights = self._obtain_weights(i)
     delays = self._obtain_delays(i)
     co = Counter(sample_from_bin_distribution(weights, self.parameters.num_samples.next()))
     return co.keys(),[self.weight_scaler*self.parameters.base_weight.next()*co[k] for k in co.keys()],[delays[k] for k in co.keys()]