Description of problem
I am a newbie to working with Brian and with Python. I wish to apply our lab’s recorded data to a neural network by assigning different values for a parameter, e.g. “a”, to different subgroups. I am afraid I don’t know coding well enough to solve this probably simple task. Thanks to anyone for helping out!
Minimal code to reproduce problem
#Relevant Parameters (only)
#Neuron Group PYR
PYR = NeuronGroup(N, model=eqs_pyr, reset= reset, threshold='v >= vpeak', method = 'euler')
#My attempt to assign different values of a to different subsets:
This is clearly not accomplishing the task, since however large/small the two subgroups, the behavior of neurons in the different subgroups is the same.
Hi @MitchG_HunterCollege. In Brian, variables that are defined outside the model equations (such as
a in your example) have a single, global value. Also – but this is how Python works, not specific to Brian – these lines
will only have the effect of overwriting the value of
a twice, and only the final value can be taken into account by Brian. If you use an object directly in an
if condition, it will be converted to a boolean value. For container types (lists, etc.), this will usually be “
False if empty,
True otherwise”. So in this specific case, your code is equivalent to writing
a = 0.0012/ms
a = 0.005/ms
and therefore doesn’t have the desired effect.
Long story short, to have a parameter that is different across neurons, you need to include it in the model equations. The parameter is then available as an attribute of the
NeuronGroup object. Here’s a minimal example with a
NeuronGroup that does not actually define any neuronal model, but only the parameter:
PYR = NeuronGroup(10, model="a : 1/second (constant)")
PYR1 = PYR[:5]
PYR2 = PYR[5:]
PYR1.a = 0.0012/ms
PYR2.a = 0.005/ms
[1.2 1.2 1.2 1.2 1.2 5. 5. 5. 5. 5. ] Hz
showing that it has assigned the values to the respective subpopulations. Hope that makes things clearer!