@mstimberg, I would be interested in collaborating with you and turning this story into a blog post. (and getting this example uploaded to the Brian2 examples guide). Your NMDA code works, but the model only displays the integration behavior when the stimulus coherence is geq 0.3 (screenshot from coherence=0.3)
When the stimulus coherence is zero, the integration population rate traces look like this.
Wimmer’s traces for 0% coherence on ModelDB is below
In addition, I took another look at Wimmer’s paper and found the following line that details the initial conditions for both the sensory and integration populations.
Range of initial uniform distribution of membrane potentials [-48mV, -50mV]
I am not sure exactly what this line means as my initial read was that the distribution of initial membrane voltages was a uniform distribution on [-48mV, -50mV], but that implies that every single neuron spikes at t=0 as -50mV is the spike threshold.
Initial conditions code below (now fixed to be in Brian2 syntax)
# ---- set initial conditions (random)
#decisionE.gen = decisionE.gen * (1 + 0.2 * rand(decisionE.__len__()))
#decisionI.gen = decisionI.gen * (1 + 0.2 * rand(decisionI.__len__()))
decisionE.gen='1+0.2*rand()' #Syntax stuff
decisionI.gen='1+0.2*rand()'
#decisionE.V = decisionE.V + rand(decisionE.__len__()) * 2 * mV
#decisionI.V = decisionI.V + rand(decisionI.__len__()) * 2 * mV #Removes the 'all neurons spike at t=0' problem
decisionE.V='-52*mV + rand()*2*mV'
decisionI.V='-52*mV + rand()*2*mV'
# ---- set initial conditions (random)
#sensoryE.V = -50.0 * mV - 2 * mV + rand(sensoryE.__len__()) * 2 * mV
#sensoryI.V = -50.0 * mV - 2 * mV + rand(sensoryI.__len__()) * 2 * mV
sensoryE.V ='-52*mV+rand()*2*mV'
sensoryI.V ='-52*mV+rand()*2*mV'
#sensoryE.gea = 0.05 * (1 + rand(sensoryE.__len__()) * 0.2)
#sensoryI.gea = 0.05 * (1 + rand(sensoryI.__len__()) * 0.2)
sensoryE.gea='0.05*(1+0.2*rand())'
sensoryI.gea='0.05*(1+0.2*rand())'