def construct_neural_populations(self, neuron_eqs, threshold_eqs,
                                     reset_eqs):
        self.G_TL2 = nc.generate_neuron_groups(self.N_TL2,
                                               neuron_eqs,
                                               threshold_eqs,
                                               reset_eqs,
                                               TL2_neuron_params,
                                               name='TL2')
        self.G_CL1 = nc.generate_neuron_groups(self.N_CL1,
                                               neuron_eqs,
                                               threshold_eqs,
                                               reset_eqs,
                                               CL1_neuron_params,
                                               name='CL1')
        self.G_TB1 = nc.generate_neuron_groups(self.N_TB1,
                                               neuron_eqs,
                                               threshold_eqs,
                                               reset_eqs,
                                               TB1_neuron_params,
                                               name='TB1')
        self.G_TN2 = nc.generate_neuron_groups(self.N_TN2,
                                               neuron_eqs,
                                               threshold_eqs,
                                               reset_eqs,
                                               TN2_neuron_params,
                                               name='TN2')
        self.G_CPU4 = nc.generate_neuron_groups(self.N_CPU4,
                                                neuron_eqs,
                                                threshold_eqs,
                                                reset_eqs,
                                                CPU4_neuron_params,
                                                name='CPU4')
        self.G_CPU1A = nc.generate_neuron_groups(self.N_CPU1A,
                                                 neuron_eqs,
                                                 threshold_eqs,
                                                 reset_eqs,
                                                 neuron_params,
                                                 name='CPU1A')
        self.G_CPU1B = nc.generate_neuron_groups(self.N_CPU1B,
                                                 neuron_eqs,
                                                 threshold_eqs,
                                                 reset_eqs,
                                                 neuron_params,
                                                 name='CPU1B')
        self.G_PONTINE = nc.generate_neuron_groups(self.N_PONTINE,
                                                   neuron_eqs,
                                                   threshold_eqs,
                                                   reset_eqs,
                                                   neuron_params,
                                                   name='PONTINE')
        self.G_MOTOR = nc.generate_neuron_groups(self.N_MOTOR,
                                                 neuron_eqs,
                                                 threshold_eqs,
                                                 reset_eqs,
                                                 neuron_params,
                                                 name='MOTOR')

        return [
            self.G_TL2, self.G_CL1, self.G_TB1, self.G_TN2, self.G_CPU4,
            self.G_CPU1A, self.G_CPU1B, self.G_PONTINE, self.G_MOTOR
        ]
start_scope()

time_step = 20  # ms

h_stimulus = TimedArray(headings * Hz, dt=1. * time_step * ms)
P_HEADING = PoissonGroup(N_TL2, rates='h_stimulus(t,i)')
SPM_H = SpikeMonitor(P_HEADING)

f_stimulus = TimedArray(flow * Hz, dt=1. * time_step * ms)
P_FLOW = PoissonGroup(N_TN2, rates='f_stimulus(t,i)')
SPM_FLOW = SpikeMonitor(P_FLOW)

# Neuron groups already optimised
G_TL2 = nc.generate_neuron_groups(N_TL2,
                                  eqs,
                                  threshold_eqs,
                                  reset_eqs,
                                  TL2_neuron_params,
                                  name='TL2_source_network')
G_CL1 = nc.generate_neuron_groups(N_CL1,
                                  eqs,
                                  threshold_eqs,
                                  reset_eqs,
                                  CL1_neuron_params,
                                  name='CL1_source_network')
G_TB1 = nc.generate_neuron_groups(N_TB1,
                                  eqs,
                                  threshold_eqs,
                                  reset_eqs,
                                  TB1_neuron_params,
                                  name='TB1_source_network')
G_TN2 = nc.generate_neuron_groups(N_TN2,
                                                      v[:T_outbound]))

######################################
### SPIKE BASED CX
######################################
start_scope()

time_step = 20  # ms

h_stimulus = TimedArray(headings * Hz, dt=1. * time_step * ms)
P_HEADING = PoissonGroup(N_TL2, rates='h_stimulus(t,i)')

# Neuron group
G_TL2 = nc.generate_neuron_groups(N_TL2,
                                  eqs,
                                  threshold_eqs,
                                  reset_eqs,
                                  neuron_params,
                                  name='TL2_source_network')

# Add monitors
#STM_TL2, SPM_TL2 = nc.add_monitors(G_TL2, name='TL2_source')

# Connect heading to TL2
S_P_HEADING_TL2 = nc.connect_synapses(P_HEADING,
                                      G_TL2,
                                      W_HEADING_TL2,
                                      model=synapses_model,
                                      params=synapses_params,
                                      on_pre=synapses_eqs_ex)

#### Target
### SPIKE BASED CX
######################################
start_scope()

time_step = 60  # ms

h_stimulus = TimedArray(headings * Hz, dt=1. * time_step * ms)
P_HEADING = PoissonGroup(N_TL2, rates='h_stimulus(t,i)')

f_stimulus = TimedArray(flow * Hz, dt=1. * time_step * ms)
P_FLOW = PoissonGroup(N_TN2, rates='f_stimulus(t,i)')

# Neuron groups already optimised
G_TL2 = nc.generate_neuron_groups(N_TL2,
                                  eqs,
                                  threshold_eqs,
                                  reset_eqs,
                                  TL2_neuron_params,
                                  name='TL2_source_network')
G_CL1 = nc.generate_neuron_groups(N_CL1,
                                  eqs,
                                  threshold_eqs,
                                  reset_eqs,
                                  CL1_neuron_params,
                                  name='CL1_source_network')
G_TB1 = nc.generate_neuron_groups(N_TB1,
                                  eqs,
                                  threshold_eqs,
                                  reset_eqs,
                                  TB1_neuron_params,
                                  name='TB1_source_network')
G_TN2 = nc.generate_neuron_groups(N_TN2,
f_stimulus = TimedArray(flow * Hz, dt=1. * time_step * ms)
P_FLOW = PoissonGroup(N_TN2, rates='f_stimulus(t,i)')

#global CPU4_memory_stimulus
CPU_MEMORY_starting_value = 50  #Hz
CPU4_memory_stimulus = CPU_MEMORY_starting_value * np.ones(
    (T_outbound, N_CPU4)) * Hz
P_CPU4_MEMORY = PoissonGroup(N_CPU4,
                             rates=CPU4_memory_stimulus[0, :],
                             name='P_CPU4_MEMORY')

# Neuron groups already optimised
G_TL2 = nc.generate_neuron_groups(N_TL2,
                                  eqs,
                                  threshold_eqs,
                                  reset_eqs,
                                  TL2_neuron_params,
                                  name='TL2')
G_CL1 = nc.generate_neuron_groups(N_CL1,
                                  eqs,
                                  threshold_eqs,
                                  reset_eqs,
                                  CL1_neuron_params,
                                  name='CL1')
G_TB1 = nc.generate_neuron_groups(N_TB1,
                                  eqs,
                                  threshold_eqs,
                                  reset_eqs,
                                  TB1_neuron_params,
                                  name='TB1')
G_TN2 = nc.generate_neuron_groups(N_TN2,
Exemplo n.º 6
0
                                               route=(h[:T_outbound], v[:T_outbound]))




######################################
### SPIKE BASED CX
######################################
start_scope()

time_step = 20 # ms

P_CL1 = PoissonGroup(N_CL1, rates=CL1_spike_rates*Hz)

# Neuron group
G_CL1 = nc.generate_neuron_groups(N_CL1, eqs, threshold_eqs, reset_eqs, neuron_params, name='CL1_source_network')

# Add monitors
#STM_TL2, SPM_TL2 = nc.add_monitors(G_TL2, name='TL2_source')

# Connect heading to TL2
S_P_CL1_CL1 = nc.connect_synapses(P_CL1, G_CL1, np.eye(N_CL1), model=synapses_model, 
                                      params=synapses_params, on_pre=synapses_eqs_ex)

#### Target
# Scale spike rates from rate-based CX in the right range
# transpose since log is neuron_index*time_step but we want the opposite
#TL2_stimulus = TimedArray(TL2_spike_rates*cx_log.tl2.T*Hz, dt=1.*time_step*ms)
P_CL1_TARGET = PoissonGroup(N_CL1, rates=CL1_spike_rates*Hz)
# SPM_TL2_IDEAL = SpikeMonitor(P_TL2, name='TL2_target')