def run(self): """ Run stuff and save stuff. :return: """ out_dir = "out_directories" name = "test1.avi" out_path = os.path.abspath(os.path.join(out_dir, name)) self.make_temp_directory(out_dir) self.ani.run(out_path, 10, 10) self.estmd.open_movie(out_path) self.estmd.run(by_frame=True) self.estmd.run(by_frame=True) frame_array = self.estmd.create_list_of_arrays() n = len(frame_array) for i in range(n): frame_array[i] = {'frame': frame_array[i].flatten()} self.cstmd.input = frame_array self.cstmd.spike_trains = cstmd.run()[1] # Adding simulation sim = Simulation("Test", True) sim.spike_trains = self.cstmd.spike_trains sim.start_positions = 0 sim.pattern_duration = self.cstmd.duration sim.num_afferents = self.cstmd.spike_trains.shape[0] sim.duration = self.cstmd.spike_trains.shape[1] sim.sampling_interval = math.ceil(self.cstmd.duration / 5) n1 = sim.add_neuron(0.03125, .95, 300) n2 = sim.add_neuron(0.03125, 0.91, 125) n3 = sim.add_neuron(0.03125, 0.91, 125) n1.connect(n2) n1.connect(n3) n2.connect(n3) sim.run() # Adding ActionSelection pattern_input = [] for neuron in sim.neurons: pattern_input.append(neuron.spike_times) print "================================" print pattern_input print "================================" a_s = ActionSelection(pattern_input=pattern_input, pattern_duration=self.ani.total_frames, animation=self.ani) a_s.run(show_plots=False)
def setUp(self): """ Creates a Simulation to test on. :return: None. """ # Generate Simulation self.simulation = Simulation()
def test_general_test(self): """ One mothafacka test to rule them all. :return: """ sim = Simulation() sim.load_file("sample") n1 = sim.add_neuron(0.03125, .95, 300) sim.run() sim.plot_weight_distributions() sim.plot_membrane_potential()
def get_simulation(self, _id, return_object=False): """ Fetches a simulation by _id. :param _id: _id of simulation to fetch. :return: Simulation. """ sim = self.collection.find_one({'_id': ObjectId(_id)}) duration = sim['duration'] patterns = sim["start_positions"] p_plots = [] # Plot first second if available. if duration >= 1000: p_plots.append(self.plot_membrane_potential(sim, 0, 1000)) # Plot last second if over two seconds long. if duration >= 2000: p_plots.append( self.plot_membrane_potential(sim, (duration - 1000), duration)) sim['potential_plots'] = p_plots wd_plots = self.plot_weight_distributions(sim) for i in range(len(sim['neurons'])): sim['neurons'][i]['weight_distribution_plot'] = wd_plots[i] if len(patterns) > 0: spike_info = self.get_neuron_info(sim) # Currently we only get spike-timing info # for the first neuron for one pattern. # TODO: Expand to all neurons. sim['neurons'][0]['spike_info'] = spike_info if return_object: description = sim['description'] training = True s = Simulation(description, training) return s return sim
def run_simulation(self, sample, cursor, num_neurons, description, a_plus, a_ratio, theta, weights, training, return_object=False): sim = Simulation(description, training) sim.load_sample(sample, cursor) # Add the post-synaptic neurons and connect them. neurons = [] for i in range(num_neurons): if weights is not None: weight = weights[i] else: weight = None n = sim.add_neuron(a_plus, a_ratio, theta, weight) for neuron in neurons: n.connect(neuron) neurons.append(n) sim.run() # Allow for simulations run on generated samples. if 'animation_id' not in sample: sample['animation_id'] = None if 'estmd_id' not in sample: sample['estmd_id'] = None _id = self.save(sim, sample['animation_id'], sample['estmd_id'], sample['_id']) return _id