# initialize synapses name__s = 'input_synapse__{:d}_{:d}'.format(num_id,pp) synapse_1 = synapse(name__s, integration_loop_temporal_form = 'exponential', integration_loop_time_constant = tau_si_vec[ii], integration_loop_self_inductance = 50e-9, integration_loop_output_inductance = 200e-12, synaptic_bias_current = I_sy_vec[kk], integration_loop_bias_current = 31e-6, input_signal_name = name__i) input_synapses.append(name__s) coupling_factor = -0.0375*num_synapses+0.5375 input_inductances.append([10e-12,coupling_factor]) #initialize neuron input_inductances.append([10e-12,0.5]) name__n = 'rate_encoding_neuron__{:d}'.format(num_id) neuron_1 = neuron(name__n, input_synaptic_connections = input_synapses, input_synaptic_inductances = input_inductances, thresholding_junction_critical_current = 40e-6, thresholding_junction_bias_current = 35e-6, refractory_temporal_form = 'exponential', refractory_time_constant = tau_ref_vec[qq], refractory_loop_self_inductance = 10e-9, refractory_loop_output_inductance = 200e-12) # propagate in time sim_params = dict() sim_params['dt'] = dt sim_params['pre_observation_duration'] = num_tau_sim*synapse_1.time_constant sim_params['observation_duration'] = observation_duration sim_params['num_tau_sim'] = num_tau_sim neuron_1.sim_params = sim_params neuron_1.run_sim() # plot temporal response # plot_save_string = 'I_sy={:2.2f}uA__tau_si={:04.2f}ns__tau_ref={:04.2f}ns__rate_in={:04.2f}MHz__dt={:04.2f}ns__obs={:04.2f}us__jitter={}ns'.format(1e6*I_sy_vec[kk],1e9*tau_si_vec[ii],1e9*tau_ref_vec[qq],1e-6*rate_vec[jj],1e9*dt,observation_duration*1e6,jitter_params[1]) # neuron_1.plot_receiving_loop_current(plot_save_string) # neuron_1.plot_spike_train(plot_save_string)
synaptic_dendrite_circuit_inductances=[0, 20, 200, 77.5], synaptic_dendrite_input_synaptic_inductance=[20, 1], junction_critical_current=40, bias_currents=[I_de, 36, 35], integration_loop_self_inductance=L_di, integration_loop_output_inductance=0, integration_loop_time_constant=tau_di) ne = neuron('ne', input_synaptic_connections=['sy'], input_synaptic_inductances=[[20, 1]], junction_critical_current=40, circuit_inductances=[0, 0, 200, 77.5], refractory_loop_circuit_inductances=[0, 20, 200, 77.5], refractory_time_constant=50, refractory_thresholding_junction_critical_current=40, refractory_loop_self_inductance=775, refractory_loop_output_inductance=100, refractory_bias_currents=[74, 36, 35], refractory_receiving_input_inductance=[20, 1], neuronal_receiving_input_refractory_inductance=[20, 1], integration_loop_time_constant=25, time_params=dict([['dt', dt], ['tf', tf]])) ne.run_sim() actual_data__drive = np.vstack( (ne.time_vec[:], ne.synapses['sy'].I_spd2_vec[:])) if ii == 0 and jj == 0 and kk == 0: error__drive = chi_squared_error(target_data__drive, actual_data__drive)
thresholding_junction_critical_current=40, bias_currents=[72, 36, 35], integration_loop_self_inductance=L_di, integration_loop_output_inductance=0, integration_loop_temporal_form='exponential', integration_loop_time_constant=tau_di) time_params = dict() time_params['dt'] = dt time_params['tf'] = tf neuron_1 = neuron( name='dummy_neuron', input_dendritic_connections=['dendrite_under_test'], circuit_inductances=[0, 0, 200, 77.5], input_dendritic_inductances=[[20, 1]], refractory_loop_circuit_inductances=[0, 2, 200, 77.5], refractory_time_constant=50, refractory_thresholding_junction_critical_current=40, refractory_loop_self_inductance=775, refractory_loop_output_inductance=100, refractory_bias_currents=[74, 36, 35], refractory_receiving_input_inductance=[20, 1], neuronal_receiving_input_refractory_inductance=[20, 1], time_params=time_params) neuron_1.run_sim() dendrite_1.time_vec = neuron_1.time_vec dendrite_1.I_di = neuron_1.dendrites['dendrite_under_test'].I_di_vec plot_dendritic_integration_loop_current(dendrite_1)
neuron_1 = neuron( 'ne', num_jjs=2, circuit_inductances=[10e-12, 0e-12, 200e-12, 77.5e-12], input_synaptic_connections=['sy'], input_synaptic_inductances=[[10e-12, 1]], thresholding_junction_critical_current=40e-6, bias_currents=[76e-6, 36e-6, 35e-6], integration_loop_self_inductance=775e-12, integration_loop_output_inductances=[ [400e-12, 1], [300e-12, 1] ], # first is to drive latching JJ, second is to drive refractory dendrite; both are of the form [L_self,k] integration_loop_temporal_form='exponential', integration_loop_time_constant=5e-9, refractory_temporal_form='exponential', refractory_time_constant=10e-9, refractory_thresholding_junction_critical_current=40e-6, refractory_loop_self_inductance=775e-12, refractory_loop_output_inductance=200e-12, refractory_loop_circuit_inductances=[0e-12, 20e-12, 200e-12, 77.5e-12], refractory_bias_currents=[72e-6, 36e-6, 35e-6], neuronal_receiving_input_refractory_inductance=[20e-12, 1], homeostatic_temporal_form='exponential', homeostatic_time_constant=10e-9, homeostatic_thresholding_junction_critical_current=40e-6, homeostatic_loop_self_inductance=775e-12, homeostatic_loop_output_inductance=200e-12, homeostatic_loop_circuit_inductances=[20e-12, 20e-12, 200e-12, 77.5e-12], homeostatic_bias_currents=[71.5e-6, 36e-6, 35e-6], neuronal_receiving_input_homeostatic_inductance=[20e-12, 1], time_params=time_params)
integration_loop_time_constant=tau_si) #%% neuron neuron_1 = neuron( name='ne', num_jjs=4, input_synaptic_connections=['sy'], input_synaptic_inductances=[[20e-12, 1]], junction_critical_current=40e-6, bias_currents=[76e-6, 36e-6, 35e-6], circuit_inductances=[0e-12, 0e-12, 200e-12, 77.5e-12], refractory_dendrite_num_jjs=4, refractory_loop_circuit_inductances=[0e-12, 20e-12, 200e-12, 77.5e-12], refractory_time_constant=25e-9, refractory_junction_critical_current=40e-6, refractory_loop_self_inductance=200e-12, refractory_loop_output_inductance=100e-12, refractory_bias_currents=[76e-6, 36e-6, 35e-6], refractory_receiving_input_inductance=[20e-12, 1], neuronal_receiving_input_refractory_inductance=[20e-12, 1], integration_loop_self_inductance=0, integration_loop_time_constant=25e-9, integration_loop_output_inductances=[ [0e-12, 1], [100e-12, 1] ], # first is to drive latching JJ, second is to drive refractory dendrite; both are of the form [L_self,k] time_params=dict([['dt', dt], ['tf', tf]])) neuron_1.run_sim() #%% plot
integration_loop_self_inductance = L_si, integration_loop_output_inductance = L_msi, integration_loop_time_constant = tau_si) threshold_circuit = 'hTron' if threshold_circuit == 'JJ': ne = neuron(name = 'ne', num_jjs = num_jjs__ne, input_synaptic_connections = ['sy'], input_synaptic_inductances = [[20,1]], # pH junction_critical_current = 40, # uA bias_currents = [I_ne,36,35], # uA circuit_inductances = [0,0,200,77.5], # pH integration_loop_self_inductance = L_ni, integration_loop_time_constant = tau_nf, integration_loop_output_inductance = [400,1], # pH # inductor going into MI feeding threshold circuit [L,k] neuronal_receiving_input_refractory_inductance = [20,1], # pH threshold_circuit_inductances = [10,0,20], # pH threshold_circuit_resistance = 0.8, # mOhm threshold_circuit_bias_current = 35, # uA threshold_junction_critical_current = 40, # uA time_params = dict([['dt',dt],['tf',time_vec__wr[-1]]])) ne.run_sim() elif threshold_circuit == 'hTron': ne = neuron(name = 'ne', num_jjs = num_jjs__ne, input_synaptic_connections = ['sy'], input_synaptic_inductances = [[20,1]], # pH junction_critical_current = 40, # uA
synapse_1 = synapse(name__s, loop_temporal_form='exponential', time_constant=tau_si_vec[ii], integration_loop_self_inductance=50e-9, integration_loop_output_inductance=200e-12, synaptic_bias_current=37e-6, loop_bias_current=31e-6) # print('synapse time constant = {}'.format(synapse_1.time_constant)) #initialize neuron name__n = 'rate_encoding_neuron__{}'.format(ii * len(rate_vec) + jj) neuron_1 = neuron(name__n, input_connections={name__s}, input_inductances=[[10e-12, 0.5], [10e-12, 0.5]], thresholding_junction_critical_current=40e-6, threshold_bias_current=35e-6, refractory_temporal_form='exponential', refractory_time_constant=50e-9, refractory_loop_self_inductance=10e-9, refractory_loop_output_inductance=200e-12) #propagate in time t1 = t0 + num_tau_sim * synapse_1.time_constant tf = t1 + observation_duration time_vec = np.arange(t0, tf + dt, dt) synapse_1.input_spike_times = np.arange(5e-9, tf + dt, isi_input_vec[jj]) neuron_1.run_sim(time_vec) # neuron_1.plot_receiving_loop_current(time_vec) #calculate output rate in various ways by looking at spikes in observation_duration
# synapse_1.synaptic_bias_current = 35e-6 # synapse_1.run_sim(time_vec) # synapse_1.plot_integration_loop_current(time_vec) # synapse_1.synaptic_bias_current = 39e-6 # synapse_1.run_sim(time_vec) # synapse_1.plot_integration_loop_current(time_vec) #%% set up neuron neuron_1 = neuron('test_neuron', input_connections={'s0', 's1'}, input_inductances=[[10e-12, 0.5], [10e-12, 0.5], [10e-12, 0.5]], thresholding_junction_critical_current=40e-6, threshold_bias_current=35e-6, refractory_temporal_form='exponential', refractory_loop_self_inductance=1e-9, refractory_loop_output_inductance=200e-12) # for obj in neuron.get_instances(): # print(obj.name) # for obj in synapse.get_instances(): # # print(obj.name) # if obj.unique_label in neuron_1.input_connections: # print(obj.unique_label+'; '+obj.name) #%% propagate in time t0 = 0
integration_loop_temporal_form='exponential', integration_loop_time_constant=tau_si_vec[jj], integration_loop_self_inductance=10e-9, integration_loop_output_inductance=200e-12, synaptic_bias_current=I_sy, integration_loop_bias_current=31e-6, input_signal_name=name__i) #initialize neuron name__n = 'bursting_neuron__{:d}_{:d}'.format(ii, jj) neuron_1 = neuron(name__n, input_synaptic_connections=[name__s], input_synaptic_inductances=[[10e-12, 0.5], [10e-12, 0.5]], thresholding_junction_critical_current=40e-6, thresholding_junction_bias_current=I_th, refractory_temporal_form='exponential', refractory_time_constant=tau_ref_vec[ii], refractory_loop_self_inductance=2e-9, refractory_loop_output_inductance=200e-12, refractory_loop_synaptic_bias_current=39e-6, refractory_loop_saturation_current=50e-6) # propagate in time sim_params = dict() sim_params['dt'] = dt sim_params['pre_observation_duration'] = 0 sim_params['observation_duration'] = observation_duration neuron_1.sim_params = sim_params neuron_1.run_sim() # plot temporal response