예제 #1
0
def do_run(plot):

    p.setup(timestep=1.0)

    cell_params_lif = {
        'cm': 0.25,
        'i_offset': 0.0,
        'tau_m': 20.0,
        'tau_refrac': 2.0,
        'tau_syn_E': 5.0,
        'tau_syn_I': 5.0,
        'v_reset': -70.0,
        'v_rest': -65.0,
        'v_thresh': -50.0
    }

    # Parameters
    nNeurons = 200
    weight_to_spike = 2.0
    delay = 17
    runtime = 5000
    p.set_number_of_neurons_per_core(p.IF_curr_exp, nNeurons / 2)

    # Populations
    pop = p.Population(nNeurons,
                       p.IF_curr_exp(**cell_params_lif),
                       label='pop_1')
    pop2 = p.Population(nNeurons,
                        p.IF_curr_exp(**cell_params_lif),
                        label='pop_2')

    # create loopConnections array for first population using numpy linspaces
    loopConnections = numpy.zeros((nNeurons, nNeurons))
    for i in range(nNeurons):
        if i != (nNeurons - 1):
            loopConnections[i, i + 1] = True
        else:
            loopConnections[i, 0] = True

    # do the same for the second population, but just for even numbered neurons
    loopConnections2 = numpy.zeros((nNeurons, nNeurons))
    for i in range(0, nNeurons, 2):
        if i != (nNeurons - 2):
            loopConnections2[i, i + 2] = True
        else:
            loopConnections2[i, 0] = True

    # SpikeInjector
    injectionConnection = numpy.zeros((1, nNeurons))
    injectionConnection[0, 0] = True
    spikeArray = {'spike_times': [[0]]}
    inj_pop = p.Population(1,
                           p.SpikeSourceArray(**spikeArray),
                           label='inputSpikes_1')

    # Projection for injector
    p.Projection(inj_pop, pop, p.ArrayConnector(injectionConnection),
                 p.StaticSynapse(weight=weight_to_spike, delay=1))
    p.Projection(inj_pop, pop2, p.ArrayConnector(injectionConnection),
                 p.StaticSynapse(weight=weight_to_spike, delay=1))

    # Projection within populations
    p.Projection(pop, pop, p.ArrayConnector(loopConnections),
                 p.StaticSynapse(weight=weight_to_spike, delay=delay))
    p.Projection(pop2, pop2, p.ArrayConnector(loopConnections2),
                 p.StaticSynapse(weight=weight_to_spike, delay=delay))

    pop.record(['v', 'spikes'])
    pop2.record(['v', 'spikes'])
    p.run(runtime)

    v = pop.get_data('v')
    spikes = pop.get_data('spikes')
    v2 = pop2.get_data('v')
    spikes2 = pop2.get_data('spikes')

    if plot:
        Figure(
            # raster plot of the presynaptic neurons' spike times
            Panel(spikes.segments[0].spiketrains,
                  yticks=True,
                  markersize=1.2,
                  xlim=(0, runtime),
                  xticks=True),
            # membrane potential of the postsynaptic neurons
            Panel(v.segments[0].filter(name='v')[0],
                  ylabel="Membrane potential (mV)",
                  data_labels=[pop.label],
                  yticks=True,
                  xlim=(0, runtime),
                  xticks=True),
            Panel(spikes2.segments[0].spiketrains,
                  yticks=True,
                  markersize=1.2,
                  xlim=(0, runtime),
                  xticks=True),
            # membrane potential of the postsynaptic neurons
            Panel(v2.segments[0].filter(name='v')[0],
                  ylabel="Membrane potential (mV)",
                  data_labels=[pop2.label],
                  yticks=True,
                  xlim=(0, runtime),
                  xticks=True),
            title="Testing ArrayConnector",
            annotations="Simulated with {}".format(p.name()))
        plt.show()

    p.end()

    return v, spikes, v2, spikes2
예제 #2
0
def do_larger_array(plot):
    p.setup(timestep=1.0)

    n_i = 64
    n_e = 64

    spikeArray = {'spike_times': [0]}
    input_pop = p.Population(n_e,
                             p.SpikeSourceArray(**spikeArray),
                             label='inputSpikes')
    excit_pop = p.Population(n_e, p.IF_curr_exp, label='excit')
    inhit_pop = p.Population(n_i, p.IF_curr_exp, label='inhib')
    p.Projection(input_pop,
                 excit_pop,
                 p.AllToAllConnector(),
                 synapse_type=p.StaticSynapse(weight=5),
                 receptor_type='excitatory')

    ie_conn = numpy.ones((n_i, n_e))
    for i in range(n_e):
        ie_conn[i, i] = 0

    p.Projection(excit_pop,
                 inhit_pop,
                 p.OneToOneConnector(),
                 synapse_type=p.StaticSynapse(weight=2),
                 receptor_type='inhibitory')

    ie_projec = p.Projection(inhit_pop,
                             excit_pop,
                             p.ArrayConnector(ie_conn),
                             synapse_type=p.StaticSynapse(weight=3),
                             receptor_type='excitatory')

    excit_pop.record(["spikes", "v"])

    runtime = 1000
    p.run(runtime)

    ie_conns = ie_projec.get(['weight', 'delay'], 'list')
    v = excit_pop.get_data("v")
    spikes = excit_pop.get_data("spikes")

    if plot:
        Figure(
            # raster plot of the presynaptic neurons' spike times
            Panel(spikes.segments[0].spiketrains,
                  yticks=True,
                  markersize=1.2,
                  xlim=(0, runtime),
                  xticks=True),
            # membrane potential of the postsynaptic neurons
            Panel(v.segments[0].filter(name='v')[0],
                  ylabel="Membrane potential (mV)",
                  data_labels=[inhit_pop.label],
                  yticks=True,
                  xlim=(0, runtime),
                  xticks=True),
            title="Testing ArrayConnector",
            annotations="Simulated with {}".format(p.name()))
        plt.show()

    p.end()

    return v, spikes, ie_conns