Description of problem
So I am trying to make an Izkevich neuron model with a Tsodokys model for the synapses, but I need to set the Izkevich Neuron’s current equal to the sum of the synaptic currents plus their external currents but I get a dimension mismatch error with
x = getattr(s, f'I_{ng_pre.name}')
print(x)
setattr(ng_post, f'Isyn_{ng_post.name}', x)
Thank you for your help in advance.
Minimal code to reproduce problem
def _get_Synaptic_Params():
return synaptic_params
#manyTargets will fill this dictionary up with values for each of the variables
# so that way they can be carried into the synapseModel equation
uxhwModel = '''
du_syn/dt = -u_syn/tau_u: 1 (clock-driven)
dx/dt = ((1-x) * tau_xInv): 1 (clock-driven)
w : volt (constant)
du_plus/dt = 0 * (1/ms) : 1 (clock-driven)
'''
#'''dIsyn/dt = -Isyn * tsInv + (h * x * w * (1/mV)) * (mamp/ms) : amp (clock-driven)'''
def manyTargets(ng_pre_name):
return f'dI_{ng_pre_name}/dt = -I_{ng_pre_name} * tsInv + (u_plus * x * w * (1/mV)) * (mamp/ms) : amp (clock-driven)'
def group_synapse():
num_synapse = []
for (ng_pre, ng_post), ng_params in synaptic_params.items():
s = manyTargets(ng_pre.name)
model = uxhwModel + '\n' + s
print(model)
#synapse_equation = f'Isyn_{ng_post.name}_post = I_{ng_pre.name} : amp (summed)'
# print(model)
# we need u+*x- for the on_pre with u+ being the u value after the synaptic spike and x- being the variable before the spike
s = Synapses(ng_pre, ng_post, model = model, method = 'euler',
on_pre = {'pre_1' : f'I_{ng_pre.name} -= 1 * mamp',
'pre_2' : 'u_syn += U * (1 -u_syn)',
'pre_3' : 'u_plus = u_syn + U * (1-u_syn)',
'pre_4' : 'x -= u_plus * x'}, on_event ={'pre_1' : 'spike', 'pre_2' : 'spike', 'pre_3' : 'spike', 'pre_4' : 'spike'},
delay = {'pre_1' : (np.random.rand() * (ng_params.get('delayer') - 1) + 1) * ms,
'pre_2' : (np.random.rand() * (ng_params.get('delayer') - 1) + 1) * ms,
'pre_3' : (np.random.rand() * (ng_params.get('delayer') - 1) + 1) * ms,
'pre_4' : (np.random.rand() * (ng_params.get('delayer') - 1) + 1) * ms},
name = f"{ng_pre.name}_{ng_post.name}_synapse", namespace = ng_params)
s.connect(condition = 'i!=j', p = ng_params.get('p', None))
ng_params.get('wm')
s.w = ((np.random.uniform(ng_params.get('wl', None), ng_params.get('wm', None))
+ np.random.uniform(ng_params.get('wm'), ng_params.get('wu')))/2) * mV
x = getattr(s, f'I_{ng_pre.name}')
print(x)
setattr(ng_post, f'Isyn_{ng_post.name}', x)
print("s.equations: ", s.equations)
print("ng_pre's name: ", ng_pre.name)
print("ng_post's name: ", ng_post.name)
print("ng_params is: ", ng_params)
num_synapse.append(s)
##ng_key[0].IsynVals[IsynVals.index(ng_key[1].name)] = currentArray[currentArray.index(ng_key[0].name)]
return num_synapse, num_group
def create_synapse():
_create_Neurons()
num_Synapse, num_group = group_synapse()
return num_Synapse, num_group
Full traceback of error (if relevant)
setattr(ng_post, f'Isyn_{ng_post.name}', x)
File "/opt/homebrew/lib/python3.11/site-packages/brian2/core/variables.py", line 1325, in set_with_index_array
variable.get_value()[indices] = value
~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
ValueError: could not broadcast input array from shape (12,) into shape (20,)