diff --git a/doc/tutorials/sequence_learning/iaf_psc_exp_nonlineardendrite_neuron.nestml b/doc/tutorials/sequence_learning/iaf_psc_exp_nonlineardendrite_neuron.nestml index 64152d282..790ef7391 100644 --- a/doc/tutorials/sequence_learning/iaf_psc_exp_nonlineardendrite_neuron.nestml +++ b/doc/tutorials/sequence_learning/iaf_psc_exp_nonlineardendrite_neuron.nestml @@ -30,7 +30,7 @@ model iaf_psc_exp_nonlineardendrite_neuron: V_m mV = 0 mV # membrane potential in mV dAP_trace pA = 0 pA # dAP trace active_dendrite boolean = false - active_dendrite_readout real = 0. + active_dendrite_readout real = 0. # an extra readout is included so the state can be recorded in NEST; see https://github.com/nest/nestml/issues/986 dAP_counts integer = 0 ref_counts integer = 0 I_dend pA = 0 pA @@ -41,7 +41,6 @@ model iaf_psc_exp_nonlineardendrite_neuron: kernel I_kernel1 = exp(-1/tau_syn1*t) # alpha shaped postsynaptic current kernel - #kernel I_kernel2 = (e/tau_syn2) * t * exp(-t/tau_syn2) I_dend' = I_dend$ - I_dend / tau_syn2 I_dend$' = -I_dend$ / tau_syn2 @@ -49,7 +48,6 @@ model iaf_psc_exp_nonlineardendrite_neuron: kernel I_kernel3 = exp(-1/tau_syn3*t) # diff. eq. for membrane potential - #recordable inline I_dend pA = convolve(I_kernel2, I_2) * pA inline I_syn pA = convolve(I_kernel1, I_1) * pA - convolve(I_kernel3, I_3) * pA + I_e V_m' = -(V_m - E_L)/tau_m + (I_syn + I_dend) / C_m @@ -57,26 +55,26 @@ model iaf_psc_exp_nonlineardendrite_neuron: dAP_trace' = -evolve_dAP_trace * dAP_trace / tau_h parameters: - C_m pF = 250 pF # capacity of the membrane - tau_m ms = 20 ms # membrane time constant. + C_m pF = 250 pF # capacitance of the membrane + tau_m ms = 20 ms # membrane time constant tau_syn1 ms = 10 ms # time constant of synaptic current, port 1 tau_syn2 ms = 10 ms # time constant of synaptic current, port 2 tau_syn3 ms = 10 ms # time constant of synaptic current, port 3 - tau_h ms = 400 ms # time constant of the dAP trace - V_th mV = 25 mV # spike threshold - V_reset mV = 0 mV # reset voltage - I_e pA = 0pA # external current. - E_L mV = 0mV # resting potential. - evolve_dAP_trace real = 1 # set to 0 to stop integrating dAP_trace + tau_h ms = 400 ms # time constant of the dAP trace + V_th mV = 25 mV # spike threshold + V_reset mV = 0 mV # reset voltage + E_L mV = 0mV # resting potential. + evolve_dAP_trace real = 1 # set to 0 to stop integrating dAP_trace + I_e pA = 0pA # external current. # dendritic action potential theta_dAP pA = 60 pA # current threshold for a dendritic action potential - I_p pA = 250 pA # current clamp value for I_dAP during a dendritic action potential - tau_dAP ms = 60 ms # time window over which the dendritic current clamp is active + I_p pA = 250 pA # current clamp value for I_dAP during a dendritic action potential + tau_dAP ms = 60 ms # time window over which the dendritic current clamp is active dAP_timeout_ticks integer = steps(tau_dAP) # refractory parameters - t_ref ms = 10 ms # refractory period + t_ref ms = 10 ms # refractory period ref_timeout_ticks integer = steps(t_ref) I_dend_incr pA/ms = pA * exp(1) / tau_syn2 @@ -91,7 +89,7 @@ model iaf_psc_exp_nonlineardendrite_neuron: spike onReceive(I_2): - I_dend$ += I_2 * ms * I_dend_incr * 1E6 # XXX factor 1E6?! + I_dend$ += I_2 * s * I_dend_incr update: # solve ODEs @@ -114,9 +112,9 @@ model iaf_psc_exp_nonlineardendrite_neuron: active_dendrite = false active_dendrite_readout = 0. - # the following assignment to I_dend$ reproduces a bug in the original implementation + # the following assignment to I_dend$ reproduces a bug in the original implementation. It is included here to replicate the results of the original model c1 real = -resolution() * exp(-resolution() / tau_syn2) / tau_syn2**2 - c2 real = (-resolution() + tau_syn2)*exp(-resolution() / tau_syn2)/tau_syn2 + c2 real = (-resolution() + tau_syn2) * exp(-resolution() / tau_syn2) / tau_syn2 I_dend$ = I_p * c1 / (1 - c2) / ms else: diff --git a/doc/tutorials/sequence_learning/sequence_learning.ipynb b/doc/tutorials/sequence_learning/sequence_learning.ipynb index 92d1b1587..032dacc24 100644 --- a/doc/tutorials/sequence_learning/sequence_learning.ipynb +++ b/doc/tutorials/sequence_learning/sequence_learning.ipynb @@ -59,6 +59,7 @@ "\n", "$$\n", "\\tau_{\\text{m},i} \\frac{d V_{\\text{m},i}(t)}{dt} = -V_{\\text{m},i}(t) + R_{\\text{m},i} I_i(t)\n", + "\\label{eq:membrane_potential} \\tag{1}\n", "$$\n", "\n", "with membrane resistance $R_{\\text{m},i} = \\tau_{\\text{m},i} C_{\\text{m},i}$, membrane time constant $\\tau_{\\text{m},i}$, and total synaptic input current $I_i(t)$.\n", @@ -74,12 +75,14 @@ "\n", "$$\n", "I_{\\text{ED},i} = \\sum_{j\\in E} (\\alpha_{i,j} \\ast s_j)(t - d_{ij})\n", + "\\label{eq:currentED} \\tag{2}\n", "$$\n", "\n", "with \n", "\n", "$$\n", "\\alpha_{i,j}(t) = J_{i,j} \\frac{e}{\\tau_\\text{ED}} t e^{-t / \\tau_\\text{ED}} \\Theta(t)\n", + "\\label{eq:alpha} \\tag{3}\n", "$$\n", "\n", "and\n", @@ -89,6 +92,7 @@ "1 & \\text{if $t \\geq 0$} \\\\\n", "0 & \\text{else}\n", "\\end{cases}\n", + "\\label{eq:Theta} \\tag{4}\n", "$$\n", "\n", "All external, inhibitory and excitatory input currents $I_{\\text{EX},i}(t), I_{\\text{EI},i}(t), I_{\\text{IE},i}(t)$ evolve according to\n", @@ -99,6 +103,7 @@ "\\tau_\\text{EI} \\frac{I_{\\text{EI},i}}{dt} &= -I_{\\text{EX},i}(t) + \\sum_{j\\in I} J_{i,j} s_j (t - d_{i,j})\\\\\n", "\\tau_\\text{IE} \\frac{I_{\\text{IE},i}}{dt} &= -I_{\\text{EX},i}(t) + \\sum_{j\\in E} J_{i,j} s_j (t - d_{i,j})\\\\\n", "\\end{align*}\n", + "\\label{eq:tausyn} \\tag{5}\n", "$$\n", "\n", "The dendritic current includes an additional nonlinearity describing the generation of dAPs: if the dendritic current $I_\\text{ED}$ exceeds a threshold $\\theta_\\text{dAP}$, it is instantly set to a the dAP plateau current $I_\\text{dAP}$, and clamped to this value for a period of duration $\\tau_\\text{dAP}$. This plateau current leads\n", @@ -125,16 +130,17 @@ "&- \\lambda_- \\sum_{\\{t_j^\\ast\\}} \\delta(t - t_j^\\ast)\\\\\n", "&+\\lambda_\\text{h} \\sum_{\\{t_i^\\ast\\}'} (z^\\ast - z_i(t)) \\delta(t - t_i^\\ast) I(t_i^\\ast, \\Delta t_\\text{min}, \\Delta t_\\text{max})\n", "\\end{align}\n", + "\\label{eq:permanences} \\tag{6}\n", "$$\n", "\n", - "The first term on the right-hand side corresponds to the spike-timing-dependent synaptic potentiation triggered by the postsynaptic spikes. The indicator function $I(t^\\ast_i, \\Delta t_\\text{min}, \\Delta t_\\text{max})$ ensures that the\n", - "potentiation (and the homeostasis; see below) is restricted to time lags $t_i^\\ast - t_j^+ + d_\\text{EE}$ in the interval $(\\Delta t_\\text{min}, \\Delta t_\\text{max})$ to avoid a growth of synapses between synchronously active neurons belonging to the same subpopulation, and between neurons encoding for the first elements in different sequences:\n", + "The first term on the right-hand side of $\\eqref{eq:permanences}$ corresponds to the spike-timing-dependent synaptic potentiation triggered by the postsynaptic spikes. The indicator function $I(t^\\ast_i, \\Delta t_\\text{min}, \\Delta t_\\text{max})$ ensures that the potentiation (and the homeostasis; see below) is restricted to time lags $t_i^\\ast - t_j^+ + d_\\text{EE}$ in the interval $(\\Delta t_\\text{min}, \\Delta t_\\text{max})$ to avoid a growth of synapses between synchronously active neurons belonging to the same subpopulation, and between neurons encoding for the first elements in different sequences:\n", "\n", "$$\n", "I(t_i^\\ast, \\Delta t_\\text{min}, \\Delta t_\\text{max}) = \\begin{cases} \n", "1 & \\text{if $\\Delta t_\\text{min} < t_i^\\ast - t_j^+ + d_\\text{EE} < \\Delta t_\\text{max}$} \\\\\n", "0 & \\text{else}\n", "\\end{cases}\n", + "\\label{eq:indicator} \\tag{6}\n", "$$\n", "\n", "Note that the potentiation update times lag the somatic postsynaptic spike times by the delay $d_\\text{EE}$, which is here interpreted as a purely dendritic delay (Morrison et al., 2007).\n", @@ -143,16 +149,18 @@ "\n", "$$\n", "\\tau_+ \\frac{dx_j}{dt} = -x_j(t) + \\sum_{t_j^\\ast} \\delta(t - t_j^\\ast)\n", + "\\label{eq:pretrace} \\tag{7}\n", "$$\n", "\n", "The trace $x_j(t)$ is incremented by 1 at each spike time $t^∗_j$, followed by an exponential decay with time constant $\\tau_+$. The potentiation increment $\\Delta P_{i,j}$ at time $t^∗_i$ therefore depends on the temporal distance between the postsynaptic spike time $t^∗_i$ and all presynaptic spike times $t^\\ast_j \\leq t^\\ast_i$ (STDP with all-to-all spike pairing [Morrison et al. 2008]). \n", "\n", - "The second term on the right-hand side represents synaptic depression, and is triggered by each presynaptic spike at times $t^\\ast_j \\in \\{t^\\ast_j\\}$. The depression decrement is treated as a constant equal to 1, independently of the postsynaptic spike history. The depression magnitude is parameterized by the dimensionless depression rate $\\lambda_-$.\n", + "The second term on the right-hand side of $\\eqref{eq:permanences}$ represents synaptic depression, and is triggered by each presynaptic spike at times $t^\\ast_j \\in \\{t^\\ast_j\\}$. The depression decrement is treated as a constant equal to 1, independently of the postsynaptic spike history. The depression magnitude is parameterized by the dimensionless depression rate $\\lambda_-$.\n", "\n", - "The third term corresponds to a homeostatic control triggered by postsynaptic spikes at times $t^\\ast_i \\in \\{t^\\ast_i\\}'$. Its overall impact is parameterized by the dimensionless homeostasis rate $\\lambda_\\text{h}$. The homeostatic control enhances or reduces the synapse growth depending on the dAP trace $z_i(t)$ of neuron $i$, the low-pass filtered dAP activity updated according to\n", + "The third term on the right-hand side of $\\eqref{eq:permanences}$ corresponds to a homeostatic control triggered by postsynaptic spikes at times $t^\\ast_i \\in \\{t^\\ast_i\\}'$. Its overall impact is parameterized by the dimensionless homeostasis rate $\\lambda_\\text{h}$. The homeostatic control enhances or reduces the synapse growth depending on the dAP trace $z_i(t)$ of neuron $i$, the low-pass filtered dAP activity updated according to\n", "\n", "$$\n", "\\tau_\\text{h}\\frac{dz_i}{dt} = -z_i(t) + \\sum_k \\delta(t - t^k_{\\text{dAP},i})\n", + "\\label{eq:lpfdAP} \\tag{8}\n", "$$\n", "\n", "Synapse growth is boosted if the dAP activity $z_i(t)$ is below a target dAP activity $z^\\ast$. Conversely, high dAP activity exceeding $z^\\ast$ reduces the synapse growth.\n", @@ -210,13 +218,13 @@ "\n", "import matplotlib as mpl\n", "\n", - "mpl.rcParams['axes.formatter.useoffset'] = False\n", - "mpl.rcParams['axes.grid'] = True\n", - "mpl.rcParams['grid.color'] = 'k'\n", - "mpl.rcParams['grid.linestyle'] = ':'\n", - "mpl.rcParams['grid.linewidth'] = 0.5\n", - "mpl.rcParams['figure.dpi'] = 120\n", - "mpl.rcParams['figure.figsize'] = [8., 3.]\n", + "mpl.rcParams[\"axes.formatter.useoffset\"] = False\n", + "mpl.rcParams[\"axes.grid\"] = True\n", + "mpl.rcParams[\"grid.color\"] = \"k\"\n", + "mpl.rcParams[\"grid.linestyle\"] = \":\"\n", + "mpl.rcParams[\"grid.linewidth\"] = 0.5\n", + "mpl.rcParams[\"figure.dpi\"] = 120\n", + "mpl.rcParams[\"figure.figsize\"] = [8., 3.]\n", "\n", "from collections import defaultdict\n", "import copy\n", @@ -276,13 +284,13 @@ "\n", " Type 'nest.help()' to find out more about NEST.\n", "\n", - "[21,iaf_psc_exp_nonlineardendrite_neuron_nestml, WARNING, [76:36;76:49]]: Model contains a call to fixed-timestep functions (``resolution()`` and/or ``steps()``). This restricts the model to being compatible only with fixed-timestep simulators. Consider eliminating ``resolution()`` and ``steps()`` from the model, and using ``timestep()`` instead.\n", - "[22,iaf_psc_exp_nonlineardendrite_neuron_nestml, WARNING, [80:36;80:47]]: Model contains a call to fixed-timestep functions (``resolution()`` and/or ``steps()``). This restricts the model to being compatible only with fixed-timestep simulators. Consider eliminating ``resolution()`` and ``steps()`` from the model, and using ``timestep()`` instead.\n", - "[23,iaf_psc_exp_nonlineardendrite_neuron_nestml, WARNING, [118:31;118:42]]: Model contains a call to fixed-timestep functions (``resolution()`` and/or ``steps()``). This restricts the model to being compatible only with fixed-timestep simulators. Consider eliminating ``resolution()`` and ``steps()`` from the model, and using ``timestep()`` instead.\n", - "[24,iaf_psc_exp_nonlineardendrite_neuron_nestml, WARNING, [118:51;118:62]]: Model contains a call to fixed-timestep functions (``resolution()`` and/or ``steps()``). This restricts the model to being compatible only with fixed-timestep simulators. Consider eliminating ``resolution()`` and ``steps()`` from the model, and using ``timestep()`` instead.\n", - "[25,iaf_psc_exp_nonlineardendrite_neuron_nestml, WARNING, [119:32;119:43]]: Model contains a call to fixed-timestep functions (``resolution()`` and/or ``steps()``). This restricts the model to being compatible only with fixed-timestep simulators. Consider eliminating ``resolution()`` and ``steps()`` from the model, and using ``timestep()`` instead.\n", - "[26,iaf_psc_exp_nonlineardendrite_neuron_nestml, WARNING, [119:62;119:73]]: Model contains a call to fixed-timestep functions (``resolution()`` and/or ``steps()``). This restricts the model to being compatible only with fixed-timestep simulators. Consider eliminating ``resolution()`` and ``steps()`` from the model, and using ``timestep()`` instead.\n", - "[30,stdsp_synapse_nestml, WARNING, [20:8;20:17]]: Variable 'd' has the same name as a physical unit!\n" + "[19,iaf_psc_exp_nonlineardendrite_neuron_nestml, WARNING, [74:36;74:49]]: Model contains a call to fixed-timestep functions (``resolution()`` and/or ``steps()``). This restricts the model to being compatible only with fixed-timestep simulators. Consider eliminating ``resolution()`` and ``steps()`` from the model, and using ``timestep()`` instead.\n", + "[20,iaf_psc_exp_nonlineardendrite_neuron_nestml, WARNING, [78:36;78:47]]: Model contains a call to fixed-timestep functions (``resolution()`` and/or ``steps()``). This restricts the model to being compatible only with fixed-timestep simulators. Consider eliminating ``resolution()`` and ``steps()`` from the model, and using ``timestep()`` instead.\n", + "[21,iaf_psc_exp_nonlineardendrite_neuron_nestml, WARNING, [116:31;116:42]]: Model contains a call to fixed-timestep functions (``resolution()`` and/or ``steps()``). This restricts the model to being compatible only with fixed-timestep simulators. Consider eliminating ``resolution()`` and ``steps()`` from the model, and using ``timestep()`` instead.\n", + "[22,iaf_psc_exp_nonlineardendrite_neuron_nestml, WARNING, [116:51;116:62]]: Model contains a call to fixed-timestep functions (``resolution()`` and/or ``steps()``). This restricts the model to being compatible only with fixed-timestep simulators. Consider eliminating ``resolution()`` and ``steps()`` from the model, and using ``timestep()`` instead.\n", + "[23,iaf_psc_exp_nonlineardendrite_neuron_nestml, WARNING, [117:32;117:43]]: Model contains a call to fixed-timestep functions (``resolution()`` and/or ``steps()``). This restricts the model to being compatible only with fixed-timestep simulators. Consider eliminating ``resolution()`` and ``steps()`` from the model, and using ``timestep()`` instead.\n", + "[24,iaf_psc_exp_nonlineardendrite_neuron_nestml, WARNING, [117:64;117:75]]: Model contains a call to fixed-timestep functions (``resolution()`` and/or ``steps()``). This restricts the model to being compatible only with fixed-timestep simulators. Consider eliminating ``resolution()`` and ``steps()`` from the model, and using ``timestep()`` instead.\n", + "[27,stdsp_synapse_nestml, WARNING, [20:8;20:17]]: Variable 'd' has the same name as a physical unit!\n" ] }, { @@ -292,8 +300,8 @@ "WARNING:Under certain conditions, the propagator matrix is singular (contains infinities).\n", "WARNING:List of all conditions that result in a singular propagator:\n", "WARNING:\ttau_m = tau_syn2\n", - "WARNING:\ttau_m = tau_syn3\n", "WARNING:\ttau_m = tau_syn1\n", + "WARNING:\ttau_m = tau_syn3\n", "WARNING:\ttau_h = 0\n", "WARNING:Not preserving expression for variable \"I_dend\" as it is solved by propagator solver\n", "WARNING:Not preserving expression for variable \"I_dend__DOLLAR\" as it is solved by propagator solver\n", @@ -302,8 +310,8 @@ "WARNING:Under certain conditions, the propagator matrix is singular (contains infinities).\n", "WARNING:List of all conditions that result in a singular propagator:\n", "WARNING:\ttau_m = tau_syn2\n", - "WARNING:\ttau_m = tau_syn1\n", "WARNING:\ttau_m = tau_syn3\n", + "WARNING:\ttau_m = tau_syn1\n", "WARNING:\ttau_h = 0\n", "WARNING:Not preserving expression for variable \"I_dend\" as it is solved by propagator solver\n", "WARNING:Not preserving expression for variable \"I_dend__DOLLAR\" as it is solved by propagator solver\n", @@ -316,8 +324,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "[52,stdsp_synapse_nestml__with_iaf_psc_exp_nonlineardendrite_neuron_nestml, WARNING, [20:8;20:17]]: Variable 'd' has the same name as a physical unit!\n", - "[54,stdsp_synapse_nestml__with_iaf_psc_exp_nonlineardendrite_neuron_nestml, WARNING, [20:8;20:17]]: Variable 'd' has the same name as a physical unit!\n", + "[47,stdsp_synapse_nestml__with_iaf_psc_exp_nonlineardendrite_neuron_nestml, WARNING, [20:8;20:17]]: Variable 'd' has the same name as a physical unit!\n", + "[49,stdsp_synapse_nestml__with_iaf_psc_exp_nonlineardendrite_neuron_nestml, WARNING, [20:8;20:17]]: Variable 'd' has the same name as a physical unit!\n", "CMake Warning (dev) at CMakeLists.txt:95 (project):\n", " cmake_minimum_required() should be called prior to this top-level project()\n", " call. Please see the cmake-commands(7) manual for usage documentation of\n", @@ -332,7 +340,7 @@ "-- Detecting CXX compile features - done\n", "\n", "-------------------------------------------------------\n", - "nestml_f9bd25bb9e784d84a6f45896e13ae8e2_module Configuration Summary\n", + "nestml_a78d6518b9ce4e478d84b96026e290f7_module Configuration Summary\n", "-------------------------------------------------------\n", "\n", "C++ compiler : /usr/bin/c++\n", @@ -344,15 +352,15 @@ "\n", "-------------------------------------------------------\n", "\n", - "You can now build and install 'nestml_f9bd25bb9e784d84a6f45896e13ae8e2_module' using\n", + "You can now build and install 'nestml_a78d6518b9ce4e478d84b96026e290f7_module' using\n", " make\n", " make install\n", "\n", - "The library file libnestml_f9bd25bb9e784d84a6f45896e13ae8e2_module.so will be installed to\n", - " /tmp/nestml_target_6pwy94eq\n", + "The library file libnestml_a78d6518b9ce4e478d84b96026e290f7_module.so will be installed to\n", + " /tmp/nestml_target_k2xfaecq\n", "The module can be loaded into NEST using\n", - " (nestml_f9bd25bb9e784d84a6f45896e13ae8e2_module) Install (in SLI)\n", - " nest.Install(nestml_f9bd25bb9e784d84a6f45896e13ae8e2_module) (in PyNEST)\n", + " (nestml_a78d6518b9ce4e478d84b96026e290f7_module) Install (in SLI)\n", + " nest.Install(nestml_a78d6518b9ce4e478d84b96026e290f7_module) (in PyNEST)\n", "\n", "CMake Warning (dev) in CMakeLists.txt:\n", " No cmake_minimum_required command is present. A line of code such as\n", @@ -364,12 +372,12 @@ " information run \"cmake --help-policy CMP0000\".\n", "This warning is for project developers. Use -Wno-dev to suppress it.\n", "\n", - "-- Configuring done (0.3s)\n", + "-- Configuring done (0.1s)\n", "-- Generating done (0.0s)\n", "-- Build files have been written to: /home/charl/julich/nestml-fork-sequence-learning/nestml/doc/tutorials/sequence_learning/target\n", - "[ 50%] Building CXX object CMakeFiles/nestml_f9bd25bb9e784d84a6f45896e13ae8e2_module_module.dir/nestml_f9bd25bb9e784d84a6f45896e13ae8e2_module.o\n", - "[ 50%] Building CXX object CMakeFiles/nestml_f9bd25bb9e784d84a6f45896e13ae8e2_module_module.dir/iaf_psc_exp_nonlineardendrite_neuron_nestml.o\n", - "[ 75%] Building CXX object CMakeFiles/nestml_f9bd25bb9e784d84a6f45896e13ae8e2_module_module.dir/iaf_psc_exp_nonlineardendrite_neuron_nestml__with_stdsp_synapse_nestml.o\n", + "[ 25%] Building CXX object CMakeFiles/nestml_a78d6518b9ce4e478d84b96026e290f7_module_module.dir/nestml_a78d6518b9ce4e478d84b96026e290f7_module.o\n", + "[ 50%] Building CXX object CMakeFiles/nestml_a78d6518b9ce4e478d84b96026e290f7_module_module.dir/iaf_psc_exp_nonlineardendrite_neuron_nestml.o\n", + "[ 75%] Building CXX object CMakeFiles/nestml_a78d6518b9ce4e478d84b96026e290f7_module_module.dir/iaf_psc_exp_nonlineardendrite_neuron_nestml__with_stdsp_synapse_nestml.o\n", "/home/charl/julich/nestml-fork-sequence-learning/nestml/doc/tutorials/sequence_learning/target/iaf_psc_exp_nonlineardendrite_neuron_nestml.cpp: In member function ‘void iaf_psc_exp_nonlineardendrite_neuron_nestml::init_state_internal_()’:\n", "/home/charl/julich/nestml-fork-sequence-learning/nestml/doc/tutorials/sequence_learning/target/iaf_psc_exp_nonlineardendrite_neuron_nestml.cpp:212:16: warning: unused variable ‘__timestep’ [-Wunused-variable]\n", " 212 | const double __timestep = nest::Time::get_resolution().get_ms(); // do not remove, this is necessary for the timestep() function\n", @@ -382,24 +390,24 @@ "/home/charl/julich/nestml-fork-sequence-learning/nestml/doc/tutorials/sequence_learning/target/iaf_psc_exp_nonlineardendrite_neuron_nestml.cpp:339:24: warning: comparison of integer expressions of different signedness: ‘long int’ and ‘const size_t’ {aka ‘const long unsigned int’} [-Wsign-compare]\n", " 339 | for (long i = 0; i < NUM_SPIKE_RECEPTORS; ++i)\n", " | ~~^~~~~~~~~~~~~~~~~~~~~\n", + "/home/charl/julich/nestml-fork-sequence-learning/nestml/doc/tutorials/sequence_learning/target/iaf_psc_exp_nonlineardendrite_neuron_nestml__with_stdsp_synapse_nestml.cpp: In member function ‘void iaf_psc_exp_nonlineardendrite_neuron_nestml__with_stdsp_synapse_nestml::init_state_internal_()’:\n", + "/home/charl/julich/nestml-fork-sequence-learning/nestml/doc/tutorials/sequence_learning/target/iaf_psc_exp_nonlineardendrite_neuron_nestml__with_stdsp_synapse_nestml.cpp:217:16: warning: unused variable ‘__timestep’ [-Wunused-variable]\n", + " 217 | const double __timestep = nest::Time::get_resolution().get_ms(); // do not remove, this is necessary for the timestep() function\n", + " | ^~~~~~~~~~\n", "/home/charl/julich/nestml-fork-sequence-learning/nestml/doc/tutorials/sequence_learning/target/iaf_psc_exp_nonlineardendrite_neuron_nestml.cpp:330:10: warning: variable ‘get_t’ set but not used [-Wunused-but-set-variable]\n", " 330 | auto get_t = [origin, lag](){ return nest::Time( nest::Time::step( origin.get_steps() + lag + 1) ).get_ms(); };\n", " | ^~~~~\n", "/home/charl/julich/nestml-fork-sequence-learning/nestml/doc/tutorials/sequence_learning/target/iaf_psc_exp_nonlineardendrite_neuron_nestml.cpp:324:16: warning: unused variable ‘__timestep’ [-Wunused-variable]\n", " 324 | const double __timestep = nest::Time::get_resolution().get_ms(); // do not remove, this is necessary for the timestep() function\n", " | ^~~~~~~~~~\n", - "/home/charl/julich/nestml-fork-sequence-learning/nestml/doc/tutorials/sequence_learning/target/iaf_psc_exp_nonlineardendrite_neuron_nestml__with_stdsp_synapse_nestml.cpp: In member function ‘void iaf_psc_exp_nonlineardendrite_neuron_nestml__with_stdsp_synapse_nestml::init_state_internal_()’:\n", - "/home/charl/julich/nestml-fork-sequence-learning/nestml/doc/tutorials/sequence_learning/target/iaf_psc_exp_nonlineardendrite_neuron_nestml__with_stdsp_synapse_nestml.cpp:217:16: warning: unused variable ‘__timestep’ [-Wunused-variable]\n", - " 217 | const double __timestep = nest::Time::get_resolution().get_ms(); // do not remove, this is necessary for the timestep() function\n", + "/home/charl/julich/nestml-fork-sequence-learning/nestml/doc/tutorials/sequence_learning/target/iaf_psc_exp_nonlineardendrite_neuron_nestml__with_stdsp_synapse_nestml.cpp: In member function ‘void iaf_psc_exp_nonlineardendrite_neuron_nestml__with_stdsp_synapse_nestml::recompute_internal_variables(bool)’:\n", + "/home/charl/julich/nestml-fork-sequence-learning/nestml/doc/tutorials/sequence_learning/target/iaf_psc_exp_nonlineardendrite_neuron_nestml__with_stdsp_synapse_nestml.cpp:278:16: warning: unused variable ‘__timestep’ [-Wunused-variable]\n", + " 278 | const double __timestep = nest::Time::get_resolution().get_ms(); // do not remove, this is necessary for the timestep() function\n", " | ^~~~~~~~~~\n", "/home/charl/julich/nestml-fork-sequence-learning/nestml/doc/tutorials/sequence_learning/target/iaf_psc_exp_nonlineardendrite_neuron_nestml.cpp: In member function ‘void iaf_psc_exp_nonlineardendrite_neuron_nestml::on_receive_block_I_2()’:\n", "/home/charl/julich/nestml-fork-sequence-learning/nestml/doc/tutorials/sequence_learning/target/iaf_psc_exp_nonlineardendrite_neuron_nestml.cpp:523:16: warning: unused variable ‘__timestep’ [-Wunused-variable]\n", " 523 | const double __timestep = nest::Time::get_resolution().get_ms(); // do not remove, this is necessary for the timestep() function\n", " | ^~~~~~~~~~\n", - "/home/charl/julich/nestml-fork-sequence-learning/nestml/doc/tutorials/sequence_learning/target/iaf_psc_exp_nonlineardendrite_neuron_nestml__with_stdsp_synapse_nestml.cpp: In member function ‘void iaf_psc_exp_nonlineardendrite_neuron_nestml__with_stdsp_synapse_nestml::recompute_internal_variables(bool)’:\n", - "/home/charl/julich/nestml-fork-sequence-learning/nestml/doc/tutorials/sequence_learning/target/iaf_psc_exp_nonlineardendrite_neuron_nestml__with_stdsp_synapse_nestml.cpp:278:16: warning: unused variable ‘__timestep’ [-Wunused-variable]\n", - " 278 | const double __timestep = nest::Time::get_resolution().get_ms(); // do not remove, this is necessary for the timestep() function\n", - " | ^~~~~~~~~~\n", "/home/charl/julich/nestml-fork-sequence-learning/nestml/doc/tutorials/sequence_learning/target/iaf_psc_exp_nonlineardendrite_neuron_nestml__with_stdsp_synapse_nestml.cpp: In member function ‘virtual void iaf_psc_exp_nonlineardendrite_neuron_nestml__with_stdsp_synapse_nestml::update(const nest::Time&, long int, long int)’:\n", "/home/charl/julich/nestml-fork-sequence-learning/nestml/doc/tutorials/sequence_learning/target/iaf_psc_exp_nonlineardendrite_neuron_nestml__with_stdsp_synapse_nestml.cpp:350:24: warning: comparison of integer expressions of different signedness: ‘long int’ and ‘const size_t’ {aka ‘const long unsigned int’} [-Wsign-compare]\n", " 350 | for (long i = 0; i < NUM_SPIKE_RECEPTORS; ++i)\n", @@ -413,14 +421,8 @@ "/home/charl/julich/nestml-fork-sequence-learning/nestml/doc/tutorials/sequence_learning/target/iaf_psc_exp_nonlineardendrite_neuron_nestml__with_stdsp_synapse_nestml.cpp: In member function ‘void iaf_psc_exp_nonlineardendrite_neuron_nestml__with_stdsp_synapse_nestml::on_receive_block_I_2()’:\n", "/home/charl/julich/nestml-fork-sequence-learning/nestml/doc/tutorials/sequence_learning/target/iaf_psc_exp_nonlineardendrite_neuron_nestml__with_stdsp_synapse_nestml.cpp:535:16: warning: unused variable ‘__timestep’ [-Wunused-variable]\n", " 535 | const double __timestep = nest::Time::get_resolution().get_ms(); // do not remove, this is necessary for the timestep() function\n", - " | ^~~~~~~~~~\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "In file included from /home/charl/julich/nestml-fork-sequence-learning/nestml/doc/tutorials/sequence_learning/target/nestml_f9bd25bb9e784d84a6f45896e13ae8e2_module.cpp:36:\n", + " | ^~~~~~~~~~\n", + "In file included from /home/charl/julich/nestml-fork-sequence-learning/nestml/doc/tutorials/sequence_learning/target/nestml_a78d6518b9ce4e478d84b96026e290f7_module.cpp:36:\n", "/home/charl/julich/nestml-fork-sequence-learning/nestml/doc/tutorials/sequence_learning/target/stdsp_synapse_nestml__with_iaf_psc_exp_nonlineardendrite_neuron_nestml.h: In instantiation of ‘nest::stdsp_synapse_nestml__with_iaf_psc_exp_nonlineardendrite_neuron_nestml::stdsp_synapse_nestml__with_iaf_psc_exp_nonlineardendrite_neuron_nestml() [with targetidentifierT = nest::TargetIdentifierPtrRport]’:\n", "/home/charl/julich/nest-simulator-install/include/nest/connector_model.h:164:25: required from ‘nest::GenericConnectorModel::GenericConnectorModel(std::string) [with ConnectionT = nest::stdsp_synapse_nestml__with_iaf_psc_exp_nonlineardendrite_neuron_nestml; std::string = std::__cxx11::basic_string]’\n", "/home/charl/julich/nest-simulator-install/include/nest/model_manager_impl.h:62:5: required from ‘void nest::ModelManager::register_connection_model(const std::string&) [with ConnectionT = nest::stdsp_synapse_nestml__with_iaf_psc_exp_nonlineardendrite_neuron_nestml; std::string = std::__cxx11::basic_string]’\n", @@ -428,7 +430,13 @@ "/home/charl/julich/nestml-fork-sequence-learning/nestml/doc/tutorials/sequence_learning/target/stdsp_synapse_nestml__with_iaf_psc_exp_nonlineardendrite_neuron_nestml.h:694:108: required from here\n", "/home/charl/julich/nestml-fork-sequence-learning/nestml/doc/tutorials/sequence_learning/target/stdsp_synapse_nestml__with_iaf_psc_exp_nonlineardendrite_neuron_nestml.h:842:16: warning: unused variable ‘__timestep’ [-Wunused-variable]\n", " 842 | const double __timestep = nest::Time::get_resolution().get_ms(); // do not remove, this is necessary for the timestep() function\n", - " | ^~~~~~~~~~\n", + " | ^~~~~~~~~~\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "/home/charl/julich/nestml-fork-sequence-learning/nestml/doc/tutorials/sequence_learning/target/stdsp_synapse_nestml__with_iaf_psc_exp_nonlineardendrite_neuron_nestml.h: In instantiation of ‘void nest::stdsp_synapse_nestml__with_iaf_psc_exp_nonlineardendrite_neuron_nestml::recompute_internal_variables() [with targetidentifierT = nest::TargetIdentifierPtrRport]’:\n", "/home/charl/julich/nestml-fork-sequence-learning/nestml/doc/tutorials/sequence_learning/target/stdsp_synapse_nestml__with_iaf_psc_exp_nonlineardendrite_neuron_nestml.h:859:3: required from ‘nest::stdsp_synapse_nestml__with_iaf_psc_exp_nonlineardendrite_neuron_nestml::stdsp_synapse_nestml__with_iaf_psc_exp_nonlineardendrite_neuron_nestml() [with targetidentifierT = nest::TargetIdentifierPtrRport]’\n", "/home/charl/julich/nest-simulator-install/include/nest/connector_model.h:164:25: required from ‘nest::GenericConnectorModel::GenericConnectorModel(std::string) [with ConnectionT = nest::stdsp_synapse_nestml__with_iaf_psc_exp_nonlineardendrite_neuron_nestml; std::string = std::__cxx11::basic_string]’\n", @@ -513,49 +521,24 @@ "name": "stdout", "output_type": "stream", "text": [ - "[100%] Linking CXX shared module nestml_f9bd25bb9e784d84a6f45896e13ae8e2_module.so\n", - "[100%] Built target nestml_f9bd25bb9e784d84a6f45896e13ae8e2_module_module\n", - "[100%] Built target nestml_f9bd25bb9e784d84a6f45896e13ae8e2_module_module\n", + "[100%] Linking CXX shared module nestml_a78d6518b9ce4e478d84b96026e290f7_module.so\n", + "[100%] Built target nestml_a78d6518b9ce4e478d84b96026e290f7_module_module\n", + "[100%] Built target nestml_a78d6518b9ce4e478d84b96026e290f7_module_module\n", "Install the project...\n", "-- Install configuration: \"\"\n", - "-- Installing: /tmp/nestml_target_6pwy94eq/nestml_f9bd25bb9e784d84a6f45896e13ae8e2_module.so\n" + "-- Installing: /tmp/nestml_target_k2xfaecq/nestml_a78d6518b9ce4e478d84b96026e290f7_module.so\n" ] - }, - { - "data": { - "text/plain": [ - "'module_name = \"/tmp/nestml_target_68digoes/nestml_27fd8d9de14b408f9e6181b2f2310d41_module.so\"\\nneuron_model_name = \"iaf_psc_exp_nonlineardendrite_neuron_nestml__with_stdsp_synapse_nestml\"\\nsynapse_model_name = \"stdsp_synapse_nestml__with_iaf_psc_exp_nonlineardendrite_neuron_nestml\" '" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" } ], "source": [ - "if 1:\n", - " try:\n", - " module_name, neuron_model_name, synapse_model_name = \\\n", - " NESTCodeGeneratorUtils.generate_code_for(\"doc/tutorials/sequence_learning/iaf_psc_exp_nonlineardendrite_neuron.nestml\",\n", - " \"models/synapses/stdsp_synapse.nestml\",\n", - " logging_level=\"WARNING\",\n", - " post_ports=[\"post_spikes\", [\"dAP_trace\", \"dAP_trace\"]],\n", - " codegen_opts={\"delay_variable\": {\"stdsp_synapse\": \"d\"},\n", - " \"weight_variable\": {\"stdsp_synapse\": \"w\"},\n", - " \"continuous_state_buffering_method\": \"post_spike_based\"})\n", - " except:\n", - " \n", - " module_name, neuron_model_name, synapse_model_name = \\\n", - " NESTCodeGeneratorUtils.generate_code_for(\"../../../doc/tutorials/sequence_learning/iaf_psc_exp_nonlineardendrite_neuron.nestml\",\n", - " \"../../../models/synapses/stdsp_synapse.nestml\",\n", - " logging_level=\"WARNING\",\n", - " post_ports=[\"post_spikes\", [\"dAP_trace\", \"dAP_trace\"]],\n", - " codegen_opts={\"delay_variable\": {\"stdsp_synapse\": \"d\"},\n", - " \"weight_variable\": {\"stdsp_synapse\": \"w\"},\n", - " \"continuous_state_buffering_method\": \"post_spike_based\"})\n", - "\"\"\"module_name = \"/tmp/nestml_target_68digoes/nestml_27fd8d9de14b408f9e6181b2f2310d41_module.so\"\n", - "neuron_model_name = \"iaf_psc_exp_nonlineardendrite_neuron_nestml__with_stdsp_synapse_nestml\"\n", - "synapse_model_name = \"stdsp_synapse_nestml__with_iaf_psc_exp_nonlineardendrite_neuron_nestml\" \"\"\"" + "module_name, neuron_model_name, synapse_model_name = \\\n", + " NESTCodeGeneratorUtils.generate_code_for(\"iaf_psc_exp_nonlineardendrite_neuron.nestml\",\n", + " \"../../../models/synapses/stdsp_synapse.nestml\",\n", + " logging_level=\"WARNING\",\n", + " post_ports=[\"post_spikes\", [\"dAP_trace\", \"dAP_trace\"]],\n", + " codegen_opts={\"delay_variable\": {\"stdsp_synapse\": \"d\"},\n", + " \"weight_variable\": {\"stdsp_synapse\": \"w\"},\n", + " \"continuous_state_buffering_method\": \"post_spike_based\"})" ] }, { @@ -625,116 +608,116 @@ " \n", " DELAY = 0.1\n", " \n", - " p['dt'] = 0.1 # simulation time resolution (ms)\n", - " p['print_simulation_progress'] = False # print the time progress -- True can cause issues with Jupyter\n", + " p[\"dt\"] = 0.1 # simulation time resolution (ms)\n", + " p[\"print_simulation_progress\"] = False # print the time progress -- True can cause issues with Jupyter\n", " \n", " # neuron parameters of the excitatory neurons\n", - " p['soma_model'] = neuron_model_name\n", - " p['soma_params'] = {}\n", - " p['soma_params']['C_m'] = 250. # membrane capacitance (pF)\n", - " p['soma_params']['E_L'] = 0. # resting membrane potential (mV)\n", - " p['soma_params']['I_e'] = 0. # external DC currents (pA)\n", - " p['soma_params']['V_m'] = 0. # initial potential (mV)\n", - " p['soma_params']['V_reset'] = 0. # reset potential (mV)\n", - " p['soma_params']['V_th'] = 20. # spike threshold (mV)\n", - " p['soma_params']['t_ref'] = 10. # refractory period\n", - " p['soma_params']['tau_m'] = 10. # membrane time constant (ms)\n", - " p['soma_params']['tau_syn1'] = 2. # synaptic time constant: external input (receptor 1)\n", - " p['soma_params']['tau_syn2'] = 5. # synaptic time constant: dendrtic input (receptor 2)\n", - " p['soma_params']['tau_syn3'] = 1. # synaptic time constant: inhibitory input (receptor 3)\n", + " p[\"soma_model\"] = neuron_model_name\n", + " p[\"soma_params\"] = {}\n", + " p[\"soma_params\"][\"C_m\"] = 250. # membrane capacitance (pF)\n", + " p[\"soma_params\"][\"E_L\"] = 0. # resting membrane potential (mV)\n", + " p[\"soma_params\"][\"I_e\"] = 0. # external DC currents (pA)\n", + " p[\"soma_params\"][\"V_m\"] = 0. # initial potential (mV)\n", + " p[\"soma_params\"][\"V_reset\"] = 0. # reset potential (mV)\n", + " p[\"soma_params\"][\"V_th\"] = 20. # spike threshold (mV)\n", + " p[\"soma_params\"][\"t_ref\"] = 10. # refractory period\n", + " p[\"soma_params\"][\"tau_m\"] = 10. # membrane time constant (ms)\n", + " p[\"soma_params\"][\"tau_syn1\"] = 2. # synaptic time constant: external input (receptor 1)\n", + " p[\"soma_params\"][\"tau_syn2\"] = 5. # synaptic time constant: dendrtic input (receptor 2)\n", + " p[\"soma_params\"][\"tau_syn3\"] = 1. # synaptic time constant: inhibitory input (receptor 3)\n", " \n", " # dendritic action potential\n", - " p['soma_params']['I_p'] = 200. # current clamp value for I_dAP during a dendritic action potenti\n", - " p['soma_params']['tau_dAP'] = 60. # time window over which the dendritic current clamp is active\n", - " p['soma_params']['theta_dAP'] = 59. # current threshold for a dendritic action potential\n", + " p[\"soma_params\"][\"I_p\"] = 200. # current clamp value for I_dAP during a dendritic action potenti\n", + " p[\"soma_params\"][\"tau_dAP\"] = 60. # time window over which the dendritic current clamp is active\n", + " p[\"soma_params\"][\"theta_dAP\"] = 59. # current threshold for a dendritic action potential\n", " \n", - " p['soma_params']['I_dend_incr'] = 2.71 / (p['soma_params']['tau_syn2'])\n", + " p[\"soma_params\"][\"I_dend_incr\"] = 2.71 / (p[\"soma_params\"][\"tau_syn2\"])\n", " \n", - " p['fixed_somatic_delay'] = 2 # this is an approximate time of how long it takes the soma to fire\n", + " p[\"fixed_somatic_delay\"] = 2 # this is an approximate time of how long it takes the soma to fire\n", " # upon receiving an external stimulus \n", " \n", " # neuron parameters for the inhibitory neuron\n", - " p['inhibit_model'] = 'iaf_psc_exp'\n", - " p['inhibit_params'] = {}\n", - " p['inhibit_params']['C_m'] = 250. # membrane capacitance (pF)\n", - " p['inhibit_params']['E_L'] = 0. # resting membrane potential (mV)\n", - " p['inhibit_params']['I_e'] = 0. # external DC currents (pA)\n", - " p['inhibit_params']['V_m'] = 0. # initial potential (mV)\n", - " p['inhibit_params']['V_reset'] = 0. # reset potential (mV)\n", - " p['inhibit_params']['V_th'] = 15. # spike threshold (mV)\n", - " p['inhibit_params']['t_ref'] = 2.0 # refractory period\n", - " p['inhibit_params']['tau_m'] = 5. # membrane time constant (ms)\n", - " p['inhibit_params']['tau_syn_ex'] = .5 # synaptic time constant of an excitatory input (ms) \n", - " p['inhibit_params']['tau_syn_in'] = 1.65 # synaptic time constant of an inhibitory input (ms)\n", + " p[\"inhibit_model\"] = \"iaf_psc_exp\"\n", + " p[\"inhibit_params\"] = {}\n", + " p[\"inhibit_params\"][\"C_m\"] = 250. # membrane capacitance (pF)\n", + " p[\"inhibit_params\"][\"E_L\"] = 0. # resting membrane potential (mV)\n", + " p[\"inhibit_params\"][\"I_e\"] = 0. # external DC currents (pA)\n", + " p[\"inhibit_params\"][\"V_m\"] = 0. # initial potential (mV)\n", + " p[\"inhibit_params\"][\"V_reset\"] = 0. # reset potential (mV)\n", + " p[\"inhibit_params\"][\"V_th\"] = 15. # spike threshold (mV)\n", + " p[\"inhibit_params\"][\"t_ref\"] = 2.0 # refractory period\n", + " p[\"inhibit_params\"][\"tau_m\"] = 5. # membrane time constant (ms)\n", + " p[\"inhibit_params\"][\"tau_syn_ex\"] = .5 # synaptic time constant of an excitatory input (ms) \n", + " p[\"inhibit_params\"][\"tau_syn_in\"] = 1.65 # synaptic time constant of an inhibitory input (ms)\n", " \n", " # synaptic parameters\n", - " p['J_EX_psp'] = 1.1 * p['soma_params']['V_th'] # somatic PSP as a response to an external input\n", - " p['J_IE_psp'] = 1.2 * p['inhibit_params']['V_th'] # inhibitory PSP as a response to an input from E neuron\n", - " p['J_EI_psp'] = -2 * p['soma_params']['V_th'] # somatic PSP as a response to an inhibitory input\n", - " p['convergence'] = 5\n", - " p['pattern_size'] = 20\n", + " p[\"J_EX_psp\"] = 1.1 * p[\"soma_params\"][\"V_th\"] # somatic PSP as a response to an external input\n", + " p[\"J_IE_psp\"] = 1.2 * p[\"inhibit_params\"][\"V_th\"] # inhibitory PSP as a response to an input from E neuron\n", + " p[\"J_EI_psp\"] = -2 * p[\"soma_params\"][\"V_th\"] # somatic PSP as a response to an inhibitory input\n", + " p[\"convergence\"] = 5\n", + " p[\"pattern_size\"] = 20\n", " \n", " # parameters for ee synapses (stdsp)\n", - " p['syn_dict_ee'] = {}\n", - " p['syn_dict_ee']['weight'] = 0.01 # synaptic weight\n", - " p['syn_dict_ee']['synapse_model'] = synapse_model_name # synapse model\n", - " p['syn_dict_ee']['permanence_threshold'] = 10. # synapse maturity threshold\n", - " p['syn_dict_ee']['tau_pre_trace'] = 20. # plasticity time constant (potentiation)\n", - " p['syn_dict_ee']['delay'] = 2. # dendritic delay \n", - " p['syn_dict_ee']['receptor_type'] = 2 # receptor corresponding to the dendritic input\n", - " p['syn_dict_ee']['lambda_plus'] = 0.05 # potentiation rate\n", - " p['syn_dict_ee']['zt'] = 1. # target dAP trace [pA]\n", - " p['syn_dict_ee']['lambda_h'] = 0.01 # homeostasis rate\n", - " p['syn_dict_ee']['Wmax'] = 1.1 * p['soma_params']['theta_dAP'] / p['convergence'] # Maximum allowed weight\n", - " p['syn_dict_ee']['permanence_max'] = 20. # Maximum allowed permanence\n", - " p['syn_dict_ee']['permanence_min'] = 1. # Minimum allowed permanence\n", - " p['syn_dict_ee']['lambda_minus'] = 0.004\n", + " p[\"syn_dict_ee\"] = {}\n", + " p[\"syn_dict_ee\"][\"weight\"] = 0.01 # synaptic weight\n", + " p[\"syn_dict_ee\"][\"synapse_model\"] = synapse_model_name # synapse model\n", + " p[\"syn_dict_ee\"][\"permanence_threshold\"] = 10. # synapse maturity threshold\n", + " p[\"syn_dict_ee\"][\"tau_pre_trace\"] = 20. # plasticity time constant (potentiation)\n", + " p[\"syn_dict_ee\"][\"delay\"] = 2. # dendritic delay \n", + " p[\"syn_dict_ee\"][\"receptor_type\"] = 2 # receptor corresponding to the dendritic input\n", + " p[\"syn_dict_ee\"][\"lambda_plus\"] = 0.05 # potentiation rate\n", + " p[\"syn_dict_ee\"][\"zt\"] = 1. # target dAP trace [pA]\n", + " p[\"syn_dict_ee\"][\"lambda_h\"] = 0.01 # homeostasis rate\n", + " p[\"syn_dict_ee\"][\"Wmax\"] = 1.1 * p[\"soma_params\"][\"theta_dAP\"] / p[\"convergence\"] # Maximum allowed weight\n", + " p[\"syn_dict_ee\"][\"permanence_max\"] = 20. # Maximum allowed permanence\n", + " p[\"syn_dict_ee\"][\"permanence_min\"] = 1. # Minimum allowed permanence\n", + " p[\"syn_dict_ee\"][\"lambda_minus\"] = 0.004\n", " \n", " # parameters of EX synapses (external to soma of E neurons)\n", - " p['conn_dict_ex'] = {}\n", - " p['syn_dict_ex'] = {}\n", - " p['syn_dict_ex']['receptor_type'] = 1 # receptor corresponding to external input\n", - " p['syn_dict_ex']['delay'] = DELAY # dendritic delay\n", - " p['conn_dict_ex']['rule'] = 'all_to_all' # connection rule\n", + " p[\"conn_dict_ex\"] = {}\n", + " p[\"syn_dict_ex\"] = {}\n", + " p[\"syn_dict_ex\"][\"receptor_type\"] = 1 # receptor corresponding to external input\n", + " p[\"syn_dict_ex\"][\"delay\"] = DELAY # dendritic delay\n", + " p[\"conn_dict_ex\"][\"rule\"] = \"all_to_all\" # connection rule\n", " \n", " # parameters of EdX synapses (external to dendrite of E neurons) \n", - " p['conn_dict_edx'] = {}\n", - " p['syn_dict_edx'] = {}\n", - " p['syn_dict_edx']['receptor_type'] = 2 # receptor corresponding to the dendritic input\n", - " p['syn_dict_edx']['delay'] = DELAY # dendritic delay\n", - " p['syn_dict_edx']['weight'] = 1.4 * p['soma_params']['theta_dAP']\n", - " p['conn_dict_edx']['rule'] = 'fixed_outdegree' # connection rule\n", - " p['conn_dict_edx']['outdegree'] = p['pattern_size'] + 1 # outdegree\n", + " p[\"conn_dict_edx\"] = {}\n", + " p[\"syn_dict_edx\"] = {}\n", + " p[\"syn_dict_edx\"][\"receptor_type\"] = 2 # receptor corresponding to the dendritic input\n", + " p[\"syn_dict_edx\"][\"delay\"] = DELAY # dendritic delay\n", + " p[\"syn_dict_edx\"][\"weight\"] = 1.4 * p[\"soma_params\"][\"theta_dAP\"]\n", + " p[\"conn_dict_edx\"][\"rule\"] = \"fixed_outdegree\" # connection rule\n", + " p[\"conn_dict_edx\"][\"outdegree\"] = p[\"pattern_size\"] + 1 # outdegree\n", " \n", " # parameters for IE synapses \n", - " p['syn_dict_ie'] = {}\n", - " p['syn_dict_ie']['synapse_model'] = 'static_synapse' # synapse model\n", - " p['syn_dict_ie']['delay'] = DELAY # dendritic delay\n", + " p[\"syn_dict_ie\"] = {}\n", + " p[\"syn_dict_ie\"][\"synapse_model\"] = \"static_synapse\" # synapse model\n", + " p[\"syn_dict_ie\"][\"delay\"] = DELAY # dendritic delay\n", " \n", " # parameters for EI synapses\n", - " p['syn_dict_ei'] = {}\n", - " p['syn_dict_ei']['synapse_model'] = 'static_synapse' # synapse model\n", - " p['syn_dict_ei']['delay'] = DELAY # dendritic delay\n", - " p['syn_dict_ei']['receptor_type'] = 3 # receptor corresponding to the inhibitory input \n", - " \n", - " p['R_m_soma'] = p['soma_params']['tau_m'] / p['soma_params']['C_m']\n", - " p['R_m_inhibit'] = p['inhibit_params']['tau_m'] / p['inhibit_params']['C_m']\n", - " p['syn_dict_ex']['weight'] = psp_max_2_psc_max(p['J_EX_psp'], \n", - " p['soma_params']['tau_m'], \n", - " p['soma_params']['tau_syn1'], \n", - " p['R_m_soma'])\n", - " p['syn_dict_ie']['weight'] = psp_max_2_psc_max(p['J_IE_psp'], \n", - " p['inhibit_params']['tau_m'], \n", - " p['inhibit_params']['tau_syn_ex'], \n", - " p['R_m_inhibit'])\n", - " p['syn_dict_ei']['weight'] = psp_max_2_psc_max(p['J_EI_psp'], \n", - " p['soma_params']['tau_m'], \n", - " p['soma_params']['tau_syn3'], \n", - " p['R_m_soma'])\n", - "\n", - " \n", - " p['soma_excitation_time'] = 25.\n", - " p['dendrite_excitation_time'] = 3.\n", + " p[\"syn_dict_ei\"] = {}\n", + " p[\"syn_dict_ei\"][\"synapse_model\"] = \"static_synapse\" # synapse model\n", + " p[\"syn_dict_ei\"][\"delay\"] = DELAY # dendritic delay\n", + " p[\"syn_dict_ei\"][\"receptor_type\"] = 3 # receptor corresponding to the inhibitory input \n", + " \n", + " p[\"R_m_soma\"] = p[\"soma_params\"][\"tau_m\"] / p[\"soma_params\"][\"C_m\"]\n", + " p[\"R_m_inhibit\"] = p[\"inhibit_params\"][\"tau_m\"] / p[\"inhibit_params\"][\"C_m\"]\n", + " p[\"syn_dict_ex\"][\"weight\"] = psp_max_2_psc_max(p[\"J_EX_psp\"], \n", + " p[\"soma_params\"][\"tau_m\"], \n", + " p[\"soma_params\"][\"tau_syn1\"], \n", + " p[\"R_m_soma\"])\n", + " p[\"syn_dict_ie\"][\"weight\"] = psp_max_2_psc_max(p[\"J_IE_psp\"], \n", + " p[\"inhibit_params\"][\"tau_m\"], \n", + " p[\"inhibit_params\"][\"tau_syn_ex\"], \n", + " p[\"R_m_inhibit\"])\n", + " p[\"syn_dict_ei\"][\"weight\"] = psp_max_2_psc_max(p[\"J_EI_psp\"], \n", + " p[\"soma_params\"][\"tau_m\"], \n", + " p[\"soma_params\"][\"tau_syn3\"], \n", + " p[\"R_m_soma\"])\n", + "\n", + " \n", + " p[\"soma_excitation_time\"] = 25.\n", + " p[\"dendrite_excitation_time\"] = 3.\n", "\n", " return p\n", "\n", @@ -773,11 +756,11 @@ "Running active dendrite simulation!\n", "Running experiment type: ff\n", "### simulating network\n", + "\n", + "Nov 16 10:15:14 Install [Info]: \n", + " loaded module nestml_a78d6518b9ce4e478d84b96026e290f7_module\n", "Running experiment type: dendrite\n", "### simulating network\n", - "\n", - "Nov 06 12:57:53 Install [Info]: \n", - " loaded module nestml_f9bd25bb9e784d84a6f45896e13ae8e2_module\n", "Running experiment type: ff_dendrite\n", "### simulating network\n" ] @@ -787,7 +770,7 @@ "def run_active_dendrite_simulation(params):\n", " print(\"Running active dendrite simulation!\")\n", " data = {}\n", - " for i, name in enumerate(['ff', 'dendrite', 'ff_dendrite']): \n", + " for i, name in enumerate([\"ff\", \"dendrite\", \"ff_dendrite\"]): \n", " print(\"Running experiment type: \" + name)\n", " # init kernel\n", " seed = 1\n", @@ -795,10 +778,10 @@ " nest.Install(module_name)\n", " nest.set_verbosity(nest_verbosity)\n", " nest.SetKernelStatus({\n", - " 'resolution': params['dt'],\n", - " 'print_time': params['print_simulation_progress'],\n", - " 'local_num_threads': n_threads,\n", - " 'rng_seed': seed\n", + " \"resolution\": params[\"dt\"],\n", + " \"print_time\": params[\"print_simulation_progress\"],\n", + " \"local_num_threads\": n_threads,\n", + " \"rng_seed\": seed\n", " })\n", " \n", " data[name] = {}\n", @@ -808,68 +791,68 @@ " # ---------------------------\n", " \n", " # create excitatory population\n", - " exc_neuron = nest.Create(params['soma_model'], params=params['soma_params'])\n", + " exc_neuron = nest.Create(params[\"soma_model\"], params=params[\"soma_params\"])\n", " \n", " # create inhibitory population\n", - " inh_neuron = nest.Create(params['inhibit_model'], params=params['inhibit_params'])\n", + " inh_neuron = nest.Create(params[\"inhibit_model\"], params=params[\"inhibit_params\"])\n", " \n", " # connect inhibition\n", - " nest.Connect(exc_neuron, inh_neuron, syn_spec=params['syn_dict_ie'])\n", - " nest.Connect(inh_neuron, exc_neuron, syn_spec=params['syn_dict_ei'])\n", + " nest.Connect(exc_neuron, inh_neuron, syn_spec=params[\"syn_dict_ie\"])\n", + " nest.Connect(inh_neuron, exc_neuron, syn_spec=params[\"syn_dict_ei\"])\n", " \n", " ######################\n", " # Input stream/stimuli\n", " #---------------------\n", - " input_excitation = nest.Create('spike_generator', params={'spike_times': [params['soma_excitation_time']]})\n", - " dendrite_excitation_1 = nest.Create('spike_generator', params={'spike_times': [params['dendrite_excitation_time']]})\n", - " inhibition_excitation = nest.Create('spike_generator', params={'spike_times': [10.]})\n", + " input_excitation = nest.Create(\"spike_generator\", params={\"spike_times\": [params[\"soma_excitation_time\"]]})\n", + " dendrite_excitation_1 = nest.Create(\"spike_generator\", params={\"spike_times\": [params[\"dendrite_excitation_time\"]]})\n", + " inhibition_excitation = nest.Create(\"spike_generator\", params={\"spike_times\": [10.]})\n", " \n", " # excitation soma feedforward\n", - " if name == 'ff' or name == 'ff_dendrite':\n", - " nest.Connect(input_excitation, exc_neuron, syn_spec={'receptor_type': 1, \n", - " 'weight': params['syn_dict_ex']['weight'], \n", - " 'delay': params['syn_dict_ex']['delay']})\n", + " if name == \"ff\" or name == \"ff_dendrite\":\n", + " nest.Connect(input_excitation, exc_neuron, syn_spec={\"receptor_type\": 1, \n", + " \"weight\": params[\"syn_dict_ex\"][\"weight\"], \n", + " \"delay\": params[\"syn_dict_ex\"][\"delay\"]})\n", "\n", " # excitation dendrite \n", - " if name == 'dendrite' or name == 'ff_dendrite':\n", - " nest.Connect(dendrite_excitation_1, exc_neuron, syn_spec={'receptor_type': 2, \n", - " 'weight': params['syn_dict_edx']['weight'], \n", - " 'delay': params['syn_dict_edx']['delay']})\n", + " if name == \"dendrite\" or name == \"ff_dendrite\":\n", + " nest.Connect(dendrite_excitation_1, exc_neuron, syn_spec={\"receptor_type\": 2, \n", + " \"weight\": params[\"syn_dict_edx\"][\"weight\"], \n", + " \"delay\": params[\"syn_dict_edx\"][\"delay\"]})\n", " \n", " # record voltage inhibitory neuron \n", - " vm_inh = nest.Create('voltmeter', params={'record_from': ['V_m'], 'interval': 0.1})\n", + " vm_inh = nest.Create(\"voltmeter\", params={\"record_from\": [\"V_m\"], \"interval\": 0.1})\n", " nest.Connect(vm_inh, inh_neuron)\n", " \n", " # record voltage soma\n", - " vm_exc = nest.Create('voltmeter', params={'record_from': ['V_m'], 'interval': 0.1})\n", + " vm_exc = nest.Create(\"voltmeter\", params={\"record_from\": [\"V_m\"], \"interval\": 0.1})\n", " nest.Connect(vm_exc, exc_neuron)\n", " \n", - " active_dendrite_exc_mm = nest.Create('multimeter', params={'record_from': ['active_dendrite_readout', 'I_dend'], 'interval': 0.1})\n", + " active_dendrite_exc_mm = nest.Create(\"multimeter\", params={\"record_from\": [\"active_dendrite_readout\", \"I_dend\"], \"interval\": 0.1})\n", " nest.Connect(active_dendrite_exc_mm, exc_neuron)\n", " \n", " # record spikes\n", - " sd = nest.Create('spike_recorder')\n", + " sd = nest.Create(\"spike_recorder\")\n", " nest.Connect(exc_neuron, sd)\n", " \n", " # record inh spikes\n", - " sd_inh = nest.Create('spike_recorder')\n", + " sd_inh = nest.Create(\"spike_recorder\")\n", " nest.Connect(inh_neuron, sd_inh)\n", " \n", - " print('### simulating network')\n", + " print(\"### simulating network\")\n", " nest.Prepare()\n", " nest.Run(100.)\n", " \n", - " voltage_soma = nest.GetStatus(vm_exc)[0]['events'] \n", - " active_dendrite = nest.GetStatus(active_dendrite_exc_mm)[0]['events']\n", - " voltage_inhibit = nest.GetStatus(vm_inh)[0]['events'] \n", - " spikes_soma = nest.GetStatus(sd)[0]['events'] \n", - " spikes_inh = nest.GetStatus(sd_inh)[0]['events'] \n", + " voltage_soma = nest.GetStatus(vm_exc)[0][\"events\"] \n", + " active_dendrite = nest.GetStatus(active_dendrite_exc_mm)[0][\"events\"]\n", + " voltage_inhibit = nest.GetStatus(vm_inh)[0][\"events\"] \n", + " spikes_soma = nest.GetStatus(sd)[0][\"events\"] \n", + " spikes_inh = nest.GetStatus(sd_inh)[0][\"events\"] \n", " \n", - " data[name]['exc'] = voltage_soma \n", - " data[name]['exc_active_dendrite'] = active_dendrite \n", - " data[name]['inh'] = voltage_inhibit\n", - " data[name]['spikes_exc'] = spikes_soma\n", - " data[name]['spikes_inh'] = spikes_inh\n", + " data[name][\"exc\"] = voltage_soma \n", + " data[name][\"exc_active_dendrite\"] = active_dendrite \n", + " data[name][\"inh\"] = voltage_inhibit\n", + " data[name][\"spikes_exc\"] = spikes_soma\n", + " data[name][\"spikes_inh\"] = spikes_inh\n", "\n", " return data\n", "\n", @@ -883,9 +866,9 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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yCBVqFABANCjRw84OTnJXA0ZGmWPf/v27ZkfyjPmh0QwPySC+SERzA+JYH5IBPNDIpgfMjRF5C6AiIiIiIiIiIiIiIgMGzsbiIiIiIiIiIiIiIhICDsbiIiIiIiIiIiIiIhICDsbiAyQra0t5syZA1tbW7lLIQPE/JAI5odEMD8kgvkhEcwPiWB+SATzQyKYHzI0CkmSJLmLICIiIiIiIiIiIiIiw8WRDUREREREREREREREJISdDUREREREREREREREJISdDUREREREREREREREJISdDUREREREREREREREJISdDUREREREREREREREJISdDUREREREREREREREJISdDUREREREREREREREJISdDUREREREREREREREJISdDUREREREREREREREJISdDUREREREREREREREJISdDUREREREREREREREJCTfnQ1z586FQqFQ+yhatCjs7OzQoUMH7Nq1S5t1EhERERERERERERGRniqqzYulpqbi6dOnOHnyJE6ePInHjx9j8uTJ2nwJIiIiIiIiIiIiIiLSM1qZRqlr1644d+4cgoOD8cknn6i2r127VhuXJyIiIiIiIiIiIiIiPaaVkQ12dnZo3bo1AKB8+fI4ePAgAODx48fauDwREREREREREREREekxrS4Q/ebNGwQEBKi+rlevnjYvT0REREREREREREREekgrIxu2b9+O7du3q22ztbXF6tWrtXF5IiIiIiIiIiIiIiLSY1od2ZCRubk54uLidHV5IiIiIiIiIiIiIiLSE1oZ2dC1a1d4eXnh7du3OH/+PObMmYMHDx7gk08+QUREBMqXL6+NlyGi/4uMjMSmTZvg5OQES0tLucshIiIiIiIiIiIqUPHx8QgLC8OIESNQtWpVucsh6GCB6Hbt2uHChQs4duwYEhMTcejQIYwYMUIbL0NE/7dp0yYsWrRI7jKIiIiIiIiIiIhkt3DhQrlLIGips+FdkiSpPo+JidHFSxAVak5OTgCAGTNmoHnz5jJXQ4YoMjKSvf6Ub8wPiWB+SATzQyKYHxLB/JAI5odEMD/Zu3TpEhYtWqS6T0by00pnQ3R0NM6fP4+UlBRcuHABJ06cUO2rVauWNl6CiDJQTp3UvHlz9OrVS+ZqyBD5+/szO5RvzA+JYH5IBPNDIpgfEsH8kAjmh0QwP7njFOP6QysLRB89ehRt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m7CzgYioCnJ3d1d3CaTFmB8SwfyQCOaHRDA/JIL5IRHMD4lgfkibcIFoIi2UkpICALhw4YKaKyFtdfnyZSQkJKi7DNJSzA+JYH5IBPNDIpgfEsH8kAjmh0QwP0XLuy6Wd52M1I+dDURaKCgoCADw1VdfqbkSIiIiIiIiIiIi9bl586a6S6AXZJIkSeougohK58iRI+jZsye+/vprNG7cWN3lkJaJiIjAlClTsGrVKjg4OKi7HNIyzA+JYH5IBPNDIpgfEsH8kAjmh0QwP8VLSUnBzZs3MW7cODg5Oam7HAJHNhBpJXt7ewBA37590bRpUzVXQ9omr8e/a9euzA+VGvNDIpgfEsH8kAjmh0QwPySC+SERzA9pGy4QTUREREREREREREREQtjZQEREREREREREREREQtjZQEREREREREREREREQtjZQKSFbGxsMH/+fNjY2Ki7FNJCzA+JYH5IBPNDIpgfEsH8kAjmh0QwPySC+SFtI5MkSVJ3EUREREREREREREREpL04soGIiIiIiIiIiIiIiISws4GIiIiIiIiIiIiIiISws4GIiIiIiIiIiIiIiISws4GIiIiIiIiIiIiIiISws4GIiIiIiIiIiIiIiISws4GIiIiIiIiIiIiIiISws4GIiIiIiIiIiIiIiISws4GIiIiIiIiIiIiIiISws4GIiIiIiIiIiIiIiISws4GIiIiIiIiIiIiIiISws4GIiIiIiIiIiIiIiISws4GIiIiIiIiIiIiIiISUS2dDamoqVq5ciY4dO6JmzZowMTGBs7Mz+vbti82bNyMzM7M8noaIiIiIiIiIiIiIiDSQTJIkSeQEt27dgqenJ0JDQ4s85sqVK2jZsqXI0xARERERERERERERkYYyEHlwXFwc3n77bURERAAA6tatixkzZsDNzQ3Jyck4efIkNmzYUC6FEhERERERERERERGRZhIa2TBnzhx89dVXAABLS0vcvHkT9vb2SsfExsbCwMAA1tbWYpUSEREREREREREREZFGEhrZsH37dsV9b2/vAh0NAFC7dm2RpyAiIiIiIiIiIiIiIg1X5gWiU1JSlNZp6NChQ7kURERERERERERERERE2qXMnQ2JiYlK39etW1e4GCIiIiIiIiIiIiIi0j5lnkbJ0tJS6fvHjx+jcePGwgURUcnCwsKwbt06NG3aFBYWFuouh4iI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qry9vbV+/XrygwaDZgPQQGRnZysyMvKC8fNjJ0+erO+S0MBlZ2dL0iVzlZ+fr4qKCvs98NF4zZw5U1lZWXruueck1U52Kisr5erqqr179+qLL76QYRjq3Lmzhg8frvHjxysqKkr+/v6SaDI0RL///e81bdo0ST/snzFmzBi99dZbklh7riWurq4KCwuzP+7Vq1eNPaD69u2r6OhoFRQUqFmzZqqurtaZM2d09uxZHT58WB06dNDHH3+szMxM+fj46NZbb5WPj49SU1Pl5+dn3yj8l3jvvfd07NgxrVix4qLP/1x+1q5d+4vOB/Nwc3PT2LFjNXz4cIWEhGjv3r36+9//rt69e2vDhg3q2LEj+cElHTx4UNXV1brxxhs1efJkvfzyy1q9erXefPNNFRQUaNasWeQHV+ybb75RXl6ebr/9dvsY+cGlDB06VM8//7xeeuklLViwwD7+5z//WS+88IIk8oOGhWYD0ECUlZVd9I2X858kLCsrq++S0MCdz8zP5Yo3/Bq3/fv364EHHlD37t119913S7q67KSnp2v16tXKzs7WmDFjFBAQoOTkZDVt2lRJSUlycnJS69at63BGqA+PPPKIxo0bp5MnT2r27NmyWq2qrKyUxNrTkLi5ualNmzY1xqZOnaqKigpZLBZZLBb17NlT+/fvV0lJiVxdXZWenq7ly5dLklq2bKmxY8fqv//9rwzDUHR0tAYNGqTKykoVFBQoKCioxm3b8vLy9L//+7/6n//5H4WGhl60pp/LDz8PNV49evSocfXOqFGjNG7cOLVr105PPfWUli5dSn5wSSUlJTp37px+97vf6V//+pckacyYMaqsrNS0adP03HPPkR9csU8//VSurq4aP368fYz84HLi4+PVp08fjR07VsHBwfr666/10ksvKSIiQg8++CD5QYNCswFoIDw9PVVRUXHBeHl5uf154Jc4nxlyhUs5deqURowYIX9/f/u+MdIvy05OTo527dqlnJwcjRo1SgcOHFB+fr7atm2ruLg4+fn5cQs4E2rVqpVatWol6Yd7yQ4ePFgpKSn6/vvvWXtM4Me/6LZs2VItW7a0Pw4JCVF0dLTy8vIUEREhJycnubu768SJE8rLy1Pfvn21YMEC+x4wY8aMUXx8vDZs2KDly5crMTFRDz300CXP/XP5ITv4sWbNmunGG2/Ul19+KavVSn5w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L3kM+cHFfP/998awYcOMiIgIw9XV1WjRooXx4osvGlVVVTWOIz9oCLiyAQAA2BmGoYqKCnl4eGjBggXasWOHJOmWW25RkyZNdOrUKTVp0kRubm4OrhQAfh3DMGSz2eTs7KysrCylpaWpuLhYPXv2VFFRkWbNmiXph/1pJk2apOnTp6u8vFyRkZEaOXKkrFarTp8+rcDAQPn7+3ObOAAAAOD/0GwAAACSpFWrVmn79u06d+6cHn74YR0+fFinTp1Sq1atFB8fzxtqABqFoqIi5ebmKiAgQIGBgfr666+VkZGhqqoqTZ48Wd999522b98uSRowYIA6deqkFStWyMPDQwkJCWrWrJnO/4rFugkAAIDGhGYDAACN1IEDB5SWliYXFxelpKTo7bfflsViUXJysnr37i0nJydHlwgA15zi4mLt27dPhYWFSk5OlouLiz788ENVVlbK399fjzzyiP7973/r1KlTCg0N1bhx4+Tm5qbDhw/L399fMTExcnFxcfQ0AAAAgFpHswEAgEaitLRUhw4dUmhoqFxdXfXOO+9Iklq3bn3BZtAAgCtntVpVWFgoV1dX+fr6auvWrTpw4IDOnTunm266Sfv27dO3334rSerQoYOGDh2qL7/8Us7OzoqNjdX111+v6upqlZeXy9vbmysiAAAA0CDRbAAAwMTKysrk7u6uo0ePaubMmTIMQ61bt9bNN9+so0ePKiQkRH5+fo4uEwBMzWq16vDhwzp79qzi4+Pl7++vGTNm6PTp03J3d9cf/vAHff755zp06JDc3d11yy23KDQ0VDt27JCPj48SExNZqwEAAHDNo9kAAIAJHTlyRMuXL9epU6c0aNAgtWjRQhs2bFBcXJxatWold3d3R5cIAI1edXW1DMOQq6urjh49qrS0NJWUlKhfv37Kzc3VF198IUmKi4vTnXfeqU8++USVlZWKjIzU0KFDZbValZeXp8DAQHl5eTl4NgAAAGjsaDYAAGACubm52r59u06ePKmUlBSlpaVp8+bNatasmfr27avAwEBHlwgA+IVyc3OVm5urkJAQBQcH68svv9SxY8dUXV2t+++/XytXrtTOnTslScOHD1dSUpJWr14tT09PJSYmKjY21rETAAAAQKNCswEAgAaourpaR48eVUlJiTp06KAPPvhA2dnZ8vf315133qng4GBHlwgAqGNnz55VWlqa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d3dHl4MG5tChQxo9erTmzZunZs2aOboc4KqQZ5gJeYaZkGeYCXmGmZBnmMnevXs1fvx4tWjRwtGl4P/QbAAaoICAAN14442OLgMNXLNmzZSUlOToMoBaQZ5hJuQZZkKeYSbkGWZCnmEmfn5+ji4B/4cNogEAAAAAAAAAwFWh2QAAAAAAAAAAAK4KzQYAAAAAAAAAAHBVaDYAQCMTGhqqp59+WqGhoY4uBbhq5BlmQp5hJuQZZkKeYSbkGWZCnq89FsMwDEcXAQAAAAAAAAAAGi6ubAAAAAAAAAAAAFeFZgMAAAAAAAAAALgqNBsAAAAAAAAAAMBVodkAAAAAAAAAAACuCs0GAGhgtmzZogcffFBJSUny9vZWbGysxo8fr/T09AuOtdlsevfdd9WhQwd5enoqODhY/fv3165du67oXAsWLFCnTp3k4eGh2NhYPf3006qurq7tKaERq688x8fHy2KxXPD1u9/9ri6mhUbqSvN8sSye/xo0aNAVnYv1GXWtvvLM+oz68Et+3pg9e7auv/56BQQEKDg4WH379tXXX399xedifUZdq688sz6jPvySPL/11ltq3bq13N3dFR0drccee0ylpaVXfC7W5/rh4ugCAAC/zN/+9jetX79eN998s9q1a6dTp07prbfeUqdOnbRp0yYlJyfbj500aZJmzpypu+66Sw8++KBKS0u1Y8cOnTlz5mfPs2TJEo0ePVr9+vXTm2++qT179uiFF17QmTNn9O6779blFNGI1FeeJalDhw76/e9/X2OsRYsWtTofNG5XmudPPvnkgu/dunWr3njjDQ0ePPhnz8P6jPpQX3mWWJ9R9640z2+++aamTp2qESNG6K9//avKy8s1Y8YMjRw5Ul988YXGjBlz2fOwPqM+1FeeJdZn1L0rzfMTTzyhV155RePGjdPDDz+svXv36s0331RaWpq++eabnz0P63M9MgAADcr69euNioqKGmPp6emGu7u7cfvtt9vHPv/8c0OS8eWXX/6q87Rp08Zo3769UVVVZR/785//bFgsFmPfvn2/rnjgJ+orz3FxccaIESOuqlbg51xpni9m8uTJhsViMTIzM3/2PKzPqA/1lWfWZ9SHK81z8+bNja5duxo2m80+VlhYaPj4+BijRo362fOwPqM+1FeeWZ9RH64kzydPnjRcXFyMO++8s8Zxb775piHJWLBgwc+eh/W5/nAbJQBoYHr06CE3N7caY82bN1dSUpL27dtnH/vHP/6h6667TjfddJNsNtsvurxw79692rt3r+699165uPz/i+Duv/9+GYahuXPnXv1EANVPnn+ssrLyV38v8HOuNM8/VVFRoS+++EJ9+/ZVTEzMZc/B+oz6Uh95/jHWZ9SlK81zUVGRwsLCZLFY7GN+fn7y8fGRp6fnZc/B+oz6Uh95/jHWZ9SlK8nzxo0bVV1drQkTJtQ47vzjzz777LLnYH2uXzQbAMAEDMPQ6dOnFRISIumHHyw3b96srl276k9/+pP8/f3l4+OjhIQEzZ49+2dfb8eOHZKkLl261BiPiopSTEyM/XmgLtR2ns/79ttv5eXlJR8fH8XHx+uNN96oqykAdj/N88UsXrxYBQUFuv3223/29Vif4Ui1nefzWJ/hCBfLc79+/bR06VK9+eabysjI0P79+/XAAw+osLBQDz/88GVfj/UZjlTbeT6P9RmO8NM8V1RUSNIFTTIvLy9J0rZt2y77eqzP9Ys9GwDABGbOnKmsrCw999xzkqTDhw/LMAx99tlncnFx0SuvvCJ/f3+98cYbmjBhgvz8/DR06NBLvl52drYkKTIy8oLnIiMjdfLkybqZCKDaz7MktWvXTr169VLLli2Vl5enGTNm6JFHHtHJkyf1t7/9rT6mhUbqp3m+1DHu7u4aN27cz74e6zMcqbbzLLE+w3Eulud//etfys3N1dSpUzV16lRJUkhIiFauXKnu3btf9vVYn+FItZ1nifUZjvPTPLds2VKStH79et1www3249auXStJysrKuuzrsT7XM4fcvAkAUGv27dtn+Pn5Gd27dzeqq6sNwzCMNWvWGJIMScamTZvsxxYXFxshISFGz549L/uazz33nCHJOH369AXP9e7d22jfvn2tzgE4ry7yfDE2m80YMmSI4eLickX3FAd+jYvl+acKCwsNDw8P46abbrqi12R9hqPURZ4vhvUZ9eFSeS4uLjbuv/9+4+677zbmzJljTJ8+3Wjbtq0RERFhHDx48LKvyfoMR6mLPF8M6zPqw6Xy3K1bN8PHx8eYPn26cfToUWPx4sVGXFyc4erqajg7O1/2NVmf6xe3UQKABuzUqVMaMWKE/P39NXfuXDk7O0v6/5cXNm3aVN26dbMf7+Pjo5SUFG3evFnV1dWXfN3z33/+csUfKy8v/0X3+ASuVF3l+WIsFoseffRRVVdXa/Xq1bU2B+C8S+X5p7744guVl5df8S1nWJ/hCHWV54thfUZdu1yeb775Zh0/flwzZszQuHHjdM8992j16tWqrKzUn//858u+LuszHKGu8nwxrM+oa5fL8xdffKH27dtr0qRJatq0qVJSUjR+/Hh17NhRPj4+l31d1uf6RbMBABqowsJCDRs2TAUFBVq6dKmioqLsz53/c3h4+AXfFxYWpqqqqstu8nX+8sLzlxv+WHZ2do1zAbWhLvN8KU2aNJEk5efn/8qqgYu7XJ5/aubMmfL399fIkSOv6LVZn1Hf6jLPl8L6jLpyuTwfOXJES5cu1ahRo2p8T1BQkHr16qX169df9rVZn1Hf6jLPl8L6jLrycz9vREdHa926dUpPT9eaNWt04sQJvfLKK8rMzFSLFi0u+9qsz/WLZgMANEDl5eVKSUlRenq6Fi1apDZt2tR4PioqShERERe9d+HJkyfl4eEhX1/fS75+hw4dJElbt2694HtPnDhhfx6oDXWd50s5cuSIJCk0NPTXFQ5cxM/l+ceys7O1atUqjR07Vu7u7lf0+qzPqE91nedLYX1GXfi5PJ8+fVqSZLVaL/jeqqqqn72KkvUZ9amu83wprM+oC7/k543mzZurd+/eioiI0N69e5Wdna2BAwde9vVZn+uZo+/jBAD4Zaqrq41Ro0YZLi4uxtdff33J4x5++GFDkrFs2TL7WE5OjuHn52cMHz7cPlZZWWns27fPOHnyZI3vb9WqldG+ffsa90n8y1/+YlgsFmPv3r21OCM0ZvWR57y8vAvuL15ZWWn07NnTcHNzM7Kzs2txRmjMrjTP5/3jH/8wJBkrV6686POsz3Ck+sgz6zPqy5Xk+cyZM4aTk5PRr18/w2az2cczMzMNHx8fY+jQofYx1mc4Un3kmfUZ9eWX/rxxntVqNUaMGGF4eXkZx44ds4+zPjuexTAMw7HtDgDAL/HII4/ojTfesN+j8KfuuOMOST98mqVjx44qKSnRY489Jn9/f7333nvKzMzUxo0b1b59e0lSRkaGmjZtqrvvvlszZsywv86iRYs0atQo3XDDDZowYYJSU1P11ltvafLkyXr//ffrZa4wv/rI84wZM/TCCy9o3Lhxatq0qfLz8/Xpp58qNTVVL730kp566ql6my/M7UrzfF6XLl2UnZ2tzMxMOTldeMEx6zMcqT7yzPqM+nKlef7tb3+rDz/8UDfccIPGjBmj4uJivfPOO8rOzta3336rPn36SGJ9hmPVR55Zn1FfrjTPDz/8sMrLy9WhQwdVVVXp008/1ebNm/Wf//xHd955p/141udrgKO7HQCAX6Zv376GpEt+/djhw4eNm266yfDz8zM8PT2N/v37G5s3b65xzNGjRw1Jxt13333Bub766iujQ4cOhru7uxETE2P85S9/MSorK+tyemhk6iPPW7duNVJSUozo6GjDzc3N8PHxMXr16mXMnj27PqaIRuSX5Hn//v2GJOOxxx675OuxPsOR6iPPrM+oL1ea56qqKuPNN980OnToYPj4+Bg+Pj7GDTfcYHz77bc1Xo/1GY5UH3lmfUZ9udI8f/TRR0b79u0Nb29vw9fX1xgwYMAFWTYM1udrAVc2AAAAAAAAAACAq8IG0QAAAAAAAAAA4KrQbAAAAAAAAAAAAFeFZgMAAAAAAAAAALgqNBsAAAAAAAAAAMBVodkAAAAAAAAAAACuCs0GAAAAAAAAAABwVWg2AAAAAAAAAACAq0KzAQAAAAAAAAAAXBWaDQAAAAAAAAAA4KrQbAAAAAAAAAAAAFeFZgMAAACABik+Pl4TJ050dBkXuP/++zVo0KB6PefevXvl4uKi1NTUej0vAAAAcB7NBgAAAADXrA0bNuiZZ55RQUGBo0u5IkePHtWHH36oP/3pT/V63jZt2mjEiBH63//933o9LwAAAHCexTAMw9FFAAAAAMDF/P3vf9fjjz+uo0ePKj4+vsZzFRUVcnJykqurq2OKu4hHHnlES5Ys0YEDB+r93EuWLNHw4cN16NAhJSYm1vv5AQAA0LhxZQMAAACABsnd3f2aajRUVVVp5syZGj9+vEPOP3DgQAUGBuo///mPQ84PAACAxo1mAwAAAIBr0jPPPKPHH39cktS0aVNZLBZZLBZlZGRIunDPhhkzZshisWjdunWaOnWqQkNDFRAQoClTpqiyslIFBQW66667FBgYqMDAQP3xj3/UTy/0ttls+uc//6mkpCR5eHgoPDxcU6ZM0dmzZ3+23nXr1ik3N1cDBw6sMb569WpZLBbNnj1bzz77rKKjo+Xr66tx48apsLBQFRUVeuSRRxQWFiYfHx/dc889qqioqPEay5cvV69evRQQECAfHx+1bNnygls1ubq6ql+/fpo/f/6V/hUDAAAAtcbF0QUAAAAAwMWMGTNG6enpmjVrll5//XWFhIRIkkJDQy/7fQ899JAiIiL07LPPatOmTXr//fcVEBCgDRs2KDY2Vi+99JIWL16sV199VcnJybrrrrvs3ztlyhTNmDFD99xzj6ZOnaqjR4/qrbfe0o4dO7R+/frLXkmxYcMGWSwWdezY8aLPv/zyy/L09NSTTz6pQ4cO6c0335Srq6ucnJx09uxZPfPMM9q0aZNmzJihpk2b2vdfSEtL08iRI9WuXTs999xzcnd316FDh7R+/foLztG5c2fNnz9fRUVF8vPz+9m/YwAAAKC20GwAAAAAcE1q166dOnXqpFmzZmn06NEX7NlwKeHh4Vq8eLEsFovuv/9+HTp0SK+++qqmTJmid999V5J07733Kj4+XtOnT7c3G9atW6cPP/xQM2fO1G233WZ/vRtuuEFDhw7VnDlzaoz/1P79+xUUFHTJN/mrq6v13Xff2RsWOTk5+uyzzzR06FAtXrxYkuz1Tp8+3d5sWL58uSorK7VkyRJ7w+VSEhISZLPZtH//fl133XVX9PcFAAAA1AZuowQAAADAVCZPniyLxWJ/3K1bNxmGocmTJ9vHnJ2d1aVLFx05csQ+NmfOHPn7+2vQoEHKzc21f3Xu3Fk+Pj5atWrVZc+bl5enwMDASz5/11131bgy4nxdkyZNqnFct27dlJmZqerqaklSQECAJGn+/Pmy2WyXreH8+XNzcy97HAAAAFDbaDYAAAAAMJXY2Ngaj/39/SVJTZo0uWD8x3sxHDx4UIWFhQoLC1NoaGiNr5KSEp05c+Znz/3TPSB+bV02m02FhYWSpFtuuUU9e/bUb37zG4WHh2vChAmaPXv2RRsP58//42YLAAAAUB+4jRIAAAAAU3F2dr7i8R83B2w2m8LCwjRz5syLfv/P7RURHBx82Y2kf0ldP67N09NTa9as0apVq/T1119r6dKl+vzzz9W/f38tW7asxvefP//P3W4JAAAAqG00GwAAAABcs+rzE/qJiYlasWKFevbsKU9Pz1/8/a1atdLMmTNVWFhov2qhtjg5OWnAgAEaMGCA/vGPf+ill17Sn//8Z61atUoDBw60H3f06FE5OTmpRYsWtXp+AAAA4OdwGyUAAAAA1yxvb29JUkFBQZ2fa/z48bJarXr++ecveK66uvpna+jevbsMw9C2bdtqta78/PwLxjp06CBJqqioqDG+bds2JSUl1XqzAwAAAPg5XNkAAAAA4JrVuXNnSdKf//xnTZgwQa6urkpJSbE3IWpT3759NWXKFL388svauXOnBg8eLFdXVx08eFBz5szRG2+8oXHjxl3y+3v16qXg4GCtWLFC/fv3r7W6nnvuOa1Zs0YjRoxQXFyczpw5o3feeUcxMTHq1auX/biqqip99913uv/++2vt3AAAAMCVotkAAAAA4JrVtWtXPf/883rvvfe0dOlS2Ww2HT16tE6aDZL03nvvqXPnzpo2bZr+9Kc/ycXFRfHx8brjjjvUs2fPy36vm5ubbr/9ds2ZM0cvvfRSrdU0atQoZWRkaPr06crNzVVISIj69u2rZ599tsYVDCtXrlR+fr7uvvvuWjs3AAAAcKUsxo93RAMAAAAA/GpHjhxRq1attGTJEg0YMKBezz169GhZLBZ99dVX9XpeAAAAQKLZAAAAAAC16r777tOhQ4e0fPnyejvnvn371LZtW+3cuVPJycn1dl4AAADgPJoNAAAAAAAAAADgqjg5ugAAAAAAAAAAANCw0WwAAAAAAAAAAABXhWYDAAAAAAAAAAC4KjQbAAAAAAAAAADAVaHZAAAAAAAAAAAArgrNBgAAAAAAAAAAcFVoNgAAAAAAAAAAgKtCswEAAAAAAAAAAFwVmg0AAAAAAAAAAOCq0GwAAAAAAAAAAABXhWYDAAAAAAAAAAC4KjQbAAAAAAAAAADAVaHZAAAAAAAAAAAArsr/AzHb+iu6BwAyAAAAAElFTkSuQmCC\n", "text/plain": [ - "
" + "
" ] }, "metadata": {}, @@ -928,18 +911,17 @@ " t1 = plt.Polygon(X, color=color_somatic_input)\n", " ax[2].add_patch(t1)\n", " \n", - " color_dAP_input = '#8e7c42ff'\n", - " color_somatic_input = '#4581a7ff'\n", - " color_soma = '#000000ff'\n", - " color_dAP = '#00B4BE' \n", - " color_inhibit = '#808080ff' \n", - " color_hrl = 'black'\n", + " color_dAP_input = \"#8e7c42ff\"\n", + " color_somatic_input = \"#4581a7ff\"\n", + " color_soma = \"#000000ff\"\n", + " color_dAP = \"#00B4BE\" \n", + " color_inhibit = \"#808080ff\" \n", + " color_hrl = \"black\"\n", " \n", - " #color_somatic_spike = '#ff0000ff'\n", " color_somatic_spike = color_soma\n", " color_inh_spike = color_inhibit\n", - " ms_spike = 7\n", - " mew_spike = 1.5\n", + " ms_spike = 14\n", + " mew_spike = 3\n", " lw_vtheta = 0.5\n", " lw_dAP = 1.5\n", " lw_s = 1.5\n", @@ -948,74 +930,67 @@ " # plot settings \n", " fig_size = (6., 5)\n", " ymin = -4\n", - " ymax = params['soma_params']['V_th'] + 4\n", + " ymax = params[\"soma_params\"][\"V_th\"] + 4\n", " xmin = 0 \n", " xmax = 85\n", " label_pos = (-0.18, 1.)\n", - " panel_labels = ['A', 'B', 'C']\n", - " v_th = params['soma_params']['V_th'] \n", + " panel_labels = [\"A\", \"B\", \"C\"]\n", + " v_th = params[\"soma_params\"][\"V_th\"] \n", " time_dAP = 10\n", " \n", " # set up the figure frame\n", - " fig = plt.figure()\n", - " gs = mpl.gridspec.GridSpec(5, 1, height_ratios=[15,15,15,5,6], bottom=0.1, right=0.95, top=0.93, wspace=0., hspace=0.1)\n", - " left, bottom, width, height = [0.4, 0.1, 0.2, 0.2]\n", + " fig = plt.figure(figsize=(12, 8))\n", + " gs = mpl.gridspec.GridSpec(5, 1, height_ratios=[15,15,15,5,6], left=0.1, bottom=0.1, right=0.95, top=0.93, wspace=0., hspace=0.2)\n", " axes = []\n", " \n", - " for i, name in enumerate(['ff', 'dendrite', 'ff_dendrite']):\n", + " for i, name in enumerate([\"ff\", \"dendrite\", \"ff_dendrite\"]):\n", " ax = plt.subplot(gs[i,0])\n", - " ax.text(label_pos[0], label_pos[1], panel_labels[i], transform=ax.transAxes, horizontalalignment='center', verticalalignment='center', size=10, weight='bold')\n", - " ax.plot(data[name]['exc']['times'], data[name]['exc']['V_m'], lw=lw_s, color=color_soma, zorder=2, label='excitatory neuron') \n", - " ax.plot(data[name]['exc_active_dendrite']['times'], data[name]['exc_active_dendrite']['active_dendrite_readout'], lw=lw_s, color=color_dAP) \n", + " ax.text(label_pos[0], label_pos[1], panel_labels[i], transform=ax.transAxes, horizontalalignment=\"center\", verticalalignment=\"center\", size=10, weight=\"bold\")\n", + " ax.plot(data[name][\"exc\"][\"times\"], data[name][\"exc\"][\"V_m\"], lw=lw_s, color=color_soma, zorder=2, label=\"excitatory neuron\") \n", + " ax.plot(data[name][\"exc_active_dendrite\"][\"times\"], data[name][\"exc_active_dendrite\"][\"active_dendrite_readout\"], lw=lw_s, color=color_dAP) \n", " \n", " ax_ = ax.twinx()\n", - " ax_.plot(data[name]['exc_active_dendrite']['times'], data[name]['exc_active_dendrite']['I_dend'], lw=lw_s, color=\"red\", label=\"I_dend\") \n", - " ax_.plot((0., np.amax(data[name]['exc_active_dendrite']['times'])), 2*[p['soma_params']['theta_dAP']], c=\"red\", linestyle=':')\n", + " ax_.plot(data[name][\"exc_active_dendrite\"][\"times\"], data[name][\"exc_active_dendrite\"][\"I_dend\"], lw=lw_s, color=\"red\", label=\"I_dend\") \n", + " ax_.plot((0., np.amax(data[name][\"exc_active_dendrite\"][\"times\"])), 2*[p[\"soma_params\"][\"theta_dAP\"]], c=\"red\", linestyle=\":\")\n", " \n", - " ax.plot(data[name]['spikes_exc']['times'], (v_th+2)*np.ones(len(data[name]['spikes_exc']['times'])), '|', c=color_somatic_spike, ms=ms_spike, mew=mew_spike)\n", - " ax.plot(data[name]['spikes_inh']['times'], (v_th+2)*np.ones(len(data[name]['spikes_inh']['times'])), '|', c=color_inh_spike, ms=ms_spike, mew=mew_spike)\n", - " ax.legend()\n", + " ax.plot(data[name][\"spikes_exc\"][\"times\"], (v_th+2)*np.ones(len(data[name][\"spikes_exc\"][\"times\"])), \"|\", c=color_somatic_spike, ms=ms_spike, mew=mew_spike)\n", + " ax.plot(data[name][\"spikes_inh\"][\"times\"], (v_th+2)*np.ones(len(data[name][\"spikes_inh\"][\"times\"])), \"|\", c=color_inh_spike, ms=ms_spike, mew=mew_spike)\n", " \n", - " # add dendritic action potential bar manually\n", - " if name == 'dendrite': \n", - " ax.hlines(v_th+2, time_dAP, time_dAP+params['soma_params']['tau_dAP'], lw=lw_dAP, color=color_dAP)\n", - " \n", - " if name == 'ff_dendrite': \n", - " ax.hlines(v_th+2, time_dAP, data[name]['spikes_exc']['times'][0], lw=lw_dAP, color=color_dAP)\n", - " \n", " # clamp voltage if doesn't reach the firing threshold\n", - " if name == 'ff' or name == 'ff_dendrite': \n", - " max_volt = max(data[name]['inh']['V_m']) \n", - " max_volt_ind = np.where(data[name]['inh']['V_m']==max_volt)[0]\n", - " data[name]['inh']['V_m'][max_volt_ind] = 20\n", + " if name == \"ff\" or name == \"ff_dendrite\": \n", + " max_volt = max(data[name][\"inh\"][\"V_m\"]) \n", + " max_volt_ind = np.where(data[name][\"inh\"][\"V_m\"]==max_volt)[0]\n", + " data[name][\"inh\"][\"V_m\"][max_volt_ind] = 20\n", " \n", - " ax.plot(data[name]['inh']['times'], data[name]['inh']['V_m'], lw=lw_i, color=color_inhibit, zorder=1, label='inhibitory neuron') \n", + " ax.plot(data[name][\"inh\"][\"times\"], data[name][\"inh\"][\"V_m\"], lw=lw_i, color=color_inhibit,\n", + " zorder=1, label=\"inhibitory neuron\") \n", " ax.set_ylim([ymin, ymax])\n", " ax.set_xlim([xmin, xmax])\n", - " ax.hlines(v_th, xmin, xmax, lw=lw_vtheta, color=color_hrl, linestyle='--')\n", - " \n", + " ax.hlines(v_th, xmin, xmax, lw=lw_vtheta, color=color_hrl, linestyle=\"--\")\n", + " ax.set_ylabel(\"Membrane\\npotential [mV]\")\n", + " ax_.set_ylabel(\"Dendritic\\ncurrent [pA]\")\n", + " ax.legend()\n", + "\n", " axes.append(ax)\n", - " \n", - " axes[1].set_ylabel('membrane potential (mV)')\n", - " \n", + "\n", " # set position of arrows\n", - " position_excitation_arrows(axes, p['soma_excitation_time'], p['dendrite_excitation_time'])\n", + " position_excitation_arrows(axes, p[\"soma_excitation_time\"], p[\"dendrite_excitation_time\"])\n", " \n", - " axes[0].legend(loc='center right')\n", + " axes[0].legend(loc=\"center right\")\n", " axes[0].set_yticklabels([])\n", " axes[0].set_xticklabels([])\n", " axes[1].set_xticklabels([])\n", " axes[2].set_yticklabels([])\n", - " axes[2].set_xlabel('time (ms)')\n", + " axes[2].set_xlabel(\"Time (ms)\")\n", " \n", " ########################################\n", " # plt spikes of A and B\n", " # --------------------------------------\n", " ax = fig.add_subplot(gs[i+1,0])\n", - " plt.axis('off')\n", + " plt.axis(\"off\")\n", " \n", " ax = plt.subplot(gs[i+2,0])\n", - " ax.text(label_pos[0], label_pos[1], 'D', transform=ax.transAxes, horizontalalignment='center', verticalalignment='center', size=10, weight='bold')\n", + " ax.text(label_pos[0], label_pos[1], \"D\", transform=ax.transAxes, horizontalalignment=\"center\", verticalalignment=\"center\", size=10, weight=\"bold\")\n", " \n", " xmin_d=25.6\n", " xmax_d=29\n", @@ -1023,37 +998,37 @@ " ymin_d=0\n", " ymax_d=10\n", " \n", - " name = 'ff'\n", - " ax.plot(data[name]['spikes_exc']['times'], (3*ymax_d/4)*np.ones(len(data[name]['spikes_exc']['times'])), '|', c=color_somatic_spike, ms=ms_spike, mew=mew_spike)\n", - " ax.plot(data[name]['spikes_inh']['times'], (3*ymax_d/4)*np.ones(len(data[name]['spikes_inh']['times'])), '|', c=color_inh_spike, ms=ms_spike, mew=mew_spike)\n", + " name = \"ff\"\n", + " ax.plot(data[name][\"spikes_exc\"][\"times\"], (3*ymax_d/4)*np.ones(len(data[name][\"spikes_exc\"][\"times\"])), \"|\", c=color_somatic_spike, ms=ms_spike, mew=mew_spike)\n", + " ax.plot(data[name][\"spikes_inh\"][\"times\"], (3*ymax_d/4)*np.ones(len(data[name][\"spikes_inh\"][\"times\"])), \"|\", c=color_inh_spike, ms=ms_spike, mew=mew_spike)\n", " \n", - " name = 'ff_dendrite'\n", - " ax.plot(data[name]['spikes_exc']['times'], (ymax_d/4)*np.ones(len(data[name]['spikes_exc']['times'])), '|', c=color_somatic_spike, ms=ms_spike, mew=mew_spike)\n", - " ax.plot(data[name]['spikes_inh']['times'], (ymax_d/4)*np.ones(len(data[name]['spikes_inh']['times'])), '|', c=color_inh_spike, ms=ms_spike, mew=mew_spike)\n", - " ax.hlines(ymax_d/2, xmin, xmax, lw=0.5, color=color_hrl, linestyles='solid')\n", + " name = \"ff_dendrite\"\n", + " ax.plot(data[name][\"spikes_exc\"][\"times\"], (ymax_d/4)*np.ones(len(data[name][\"spikes_exc\"][\"times\"])), \"|\", c=color_somatic_spike, ms=ms_spike, mew=mew_spike)\n", + " ax.plot(data[name][\"spikes_inh\"][\"times\"], (ymax_d/4)*np.ones(len(data[name][\"spikes_inh\"][\"times\"])), \"|\", c=color_inh_spike, ms=ms_spike, mew=mew_spike)\n", + " ax.hlines(ymax_d/2, xmin, xmax, lw=0.5, color=color_hrl, linestyles=\"solid\")\n", " \n", " ax.set_yticklabels([])\n", " ax.tick_params(left=False)\n", " ax.set_ylim([ymin_d, ymax_d])\n", " ax.set_xlim([xmin_d, xmax_d])\n", - " ax.set_xlabel('time (ms)')\n", + " ax.set_xlabel(\"time (ms)\")\n", " \n", - " ax.text(xmin_d+0.05, (3*ymax_d/4)-1, 'A', size=8, weight='bold')\n", - " ax.text(xmin_d+0.05, (ymax_d/4)-1, 'C', size=8, weight='bold')\n", + " ax.text(xmin_d+0.05, (3*ymax_d/4)-1, \"A\", size=8, weight=\"bold\")\n", + " ax.text(xmin_d+0.05, (ymax_d/4)-1, \"C\", size=8, weight=\"bold\")\n", " \n", " ############################################################\n", " # add lines between the subplots showing the zoomed in area\n", " # ----------------------------------------------------------\n", " xy_C = (xmin_d,ymin)\n", " xy_D = (xmin_d,ymax_d)\n", - " con = mpl.patches.ConnectionPatch(xyA=xy_C, xyB=xy_D, coordsA='data', coordsB='data', axesA=axes[-1], axesB=ax, color='grey', linestyle='dotted')\n", + " con = mpl.patches.ConnectionPatch(xyA=xy_C, xyB=xy_D, coordsA=\"data\", coordsB=\"data\", axesA=axes[-1], axesB=ax, color=\"grey\", linestyle=\"dotted\")\n", " ax.add_artist(con)\n", " \n", " xy_C = (xmax_d,ymin)\n", " xy_D = (xmax_d,ymax_d)\n", - " con = mpl.patches.ConnectionPatch(xyA=xy_C, xyB=xy_D, coordsA='data', coordsB='data', axesA=axes[-1], axesB=ax, color='grey', linestyle='dotted')\n", + " con = mpl.patches.ConnectionPatch(xyA=xy_C, xyB=xy_D, coordsA=\"data\", coordsB=\"data\", axesA=axes[-1], axesB=ax, color=\"grey\", linestyle=\"dotted\")\n", " ax.add_artist(con)\n", - " \n", + "\n", " plt.savefig(\"/tmp/sequences1.png\")\n", "\n", "plot_active_dendrite_simulation(p, data)" @@ -1067,7 +1042,7 @@ "arrow, A), a strong dendritic input (brown arrow, B) triggering a dAP, and a\n", "combination of both (C). Black and gray vertical bars mark times of excitatory\n", "and inhibitory spikes, respectively. The horizontal dashed line marks the spike\n", - "threshold θE. The horizontal light blue lines depict the dAP plateau. D) Magnified\n", + "threshold. The horizontal light blue lines depict the dAP plateau. D) Magnified\n", "view of spike times from panels A and C. A dAP preceding the external input\n", "(as in panel C) can speed up somatic, and hence, inhibitory firing, provided the\n", "time interval between the dAP and the external input is in the right range." @@ -1094,74 +1069,74 @@ " \n", " p = {}\n", " \n", - " p['dt'] = 0.1 # simulation time resolution (ms)\n", - " p['print_simulation_progress'] = False # print the time progress -- True might cause issues with Jupyter\n", + " p[\"dt\"] = 0.1 # simulation time resolution (ms)\n", + " p[\"print_simulation_progress\"] = False # print the time progress -- True might cause issues with Jupyter\n", " \n", " # neuron parameters of the excitatory neurons\n", - " p['soma_model'] = neuron_model_name\n", - " p['soma_params'] = {}\n", - " p['soma_params']['C_m'] = 250. # membrane capacitance (pF)\n", - " p['soma_params']['E_L'] = 0. # resting membrane potential (mV)\n", - " p['soma_params']['V_m'] = 0. # initial potential (mV)\n", - " p['soma_params']['V_reset'] = 0. # reset potential (mV)\n", - " p['soma_params']['V_th'] = 20. # spike threshold (mV)\n", - " p['soma_params']['t_ref'] = 10. # refractory period\n", - " p['soma_params']['tau_m'] = 10. # membrane time constant (ms)\n", - " p['soma_params']['tau_syn1'] = 2. # synaptic time constant: external input (receptor 1)\n", - " p['soma_params']['tau_syn2'] = 5. # synaptic time constant: dendrtic input (receptor 2)\n", - " p['soma_params']['tau_syn3'] = 1. # synaptic time constant: inhibitory input (receptor 3)\n", + " p[\"soma_model\"] = neuron_model_name\n", + " p[\"soma_params\"] = {}\n", + " p[\"soma_params\"][\"C_m\"] = 250. # membrane capacitance (pF)\n", + " p[\"soma_params\"][\"E_L\"] = 0. # resting membrane potential (mV)\n", + " p[\"soma_params\"][\"V_m\"] = 0. # initial potential (mV)\n", + " p[\"soma_params\"][\"V_reset\"] = 0. # reset potential (mV)\n", + " p[\"soma_params\"][\"V_th\"] = 20. # spike threshold (mV)\n", + " p[\"soma_params\"][\"t_ref\"] = 10. # refractory period\n", + " p[\"soma_params\"][\"tau_m\"] = 10. # membrane time constant (ms)\n", + " p[\"soma_params\"][\"tau_syn1\"] = 2. # synaptic time constant: external input (receptor 1)\n", + " p[\"soma_params\"][\"tau_syn2\"] = 5. # synaptic time constant: dendrtic input (receptor 2)\n", + " p[\"soma_params\"][\"tau_syn3\"] = 1. # synaptic time constant: inhibitory input (receptor 3)\n", " # dendritic action potential\n", - " p['soma_params']['I_p'] = 200. # current clamp value for I_dAP during a dendritic action potenti\n", - " p['soma_params']['tau_dAP'] = 60. # time window over which the dendritic current clamp is active\n", - " p['soma_params']['theta_dAP'] = 59. # current threshold for a dendritic action potential\n", - " p['fixed_somatic_delay'] = 2 # this is an approximate time of how long it takes the soma to fire\n", + " p[\"soma_params\"][\"I_p\"] = 200. # current clamp value for I_dAP during a dendritic action potenti\n", + " p[\"soma_params\"][\"tau_dAP\"] = 60. # time window over which the dendritic current clamp is active\n", + " p[\"soma_params\"][\"theta_dAP\"] = 59. # current threshold for a dendritic action potential\n", + " p[\"fixed_somatic_delay\"] = 2 # this is an approximate time of how long it takes the soma to fire\n", " # upon receiving an external stimulus \n", " \n", - " p['soma_params']['I_dend_incr'] = 2.71 / (p['soma_params']['tau_syn2'])\n", + " p[\"soma_params\"][\"I_dend_incr\"] = 2.71 / (p[\"soma_params\"][\"tau_syn2\"])\n", "\n", " # synaptic parameters\n", - " p['J_EX_psp'] = 1.1 * p['soma_params']['V_th'] # somatic PSP as a response to an external input\n", - " p['convergence'] = 5\n", - " p['pattern_size'] = 20 # sparse set of active neurons per subpopulation\n", + " p[\"J_EX_psp\"] = 1.1 * p[\"soma_params\"][\"V_th\"] # somatic PSP as a response to an external input\n", + " p[\"convergence\"] = 5\n", + " p[\"pattern_size\"] = 20 # sparse set of active neurons per subpopulation\n", " \n", " # parameters for ee synapses (stdsp)\n", - " p['syn_dict_ee'] = {}\n", - " p['permanence_min'] = 0.\n", - " p['permanence_max'] = 8.\n", - " p['calibration'] = 0.\n", - " p['syn_dict_ee']['weight'] = 0.01 # synaptic weight\n", - " p['syn_dict_ee']['synapse_model'] = synapse_model_name # synapse model\n", + " p[\"syn_dict_ee\"] = {}\n", + " p[\"permanence_min\"] = 0.\n", + " p[\"permanence_max\"] = 8.\n", + " p[\"calibration\"] = 0.\n", + " p[\"syn_dict_ee\"][\"weight\"] = 0.01 # synaptic weight\n", + " p[\"syn_dict_ee\"][\"synapse_model\"] = synapse_model_name # synapse model\n", " if \"synapse_nestml\" in synapse_model_name:\n", - " p['syn_dict_ee']['permanence_threshold'] = 10. # synapse maturity threshold\n", + " p[\"syn_dict_ee\"][\"permanence_threshold\"] = 10. # synapse maturity threshold\n", " else:\n", - " p['syn_dict_ee']['th_perm'] = 10. # synapse maturity threshold\n", + " p[\"syn_dict_ee\"][\"th_perm\"] = 10. # synapse maturity threshold\n", "\n", " if \"synapse_nestml\" in synapse_model_name:\n", - " p['syn_dict_ee']['tau_pre_trace'] = 20. # plasticity time constant (potentiation)\n", + " p[\"syn_dict_ee\"][\"tau_pre_trace\"] = 20. # plasticity time constant (potentiation)\n", " else:\n", - " p['syn_dict_ee']['tau_plus'] = 20. # plasticity time constant (potentiation)\n", - " \n", - " p['syn_dict_ee']['delay'] = 2. # dendritic delay \n", - " p['syn_dict_ee']['receptor_type'] = 2 # receptor corresponding to the dendritic input\n", - " p['syn_dict_ee']['lambda_plus'] = 0.08 # potentiation rate\n", - " p['syn_dict_ee']['zt'] = 1. # target dAP trace [pA]\n", - " p['syn_dict_ee']['lambda_h'] = 0.014 # homeostasis rate\n", - " p['syn_dict_ee']['Wmax'] = 1.1 * p['soma_params']['theta_dAP'] / p['convergence'] # Maximum allowed weight\n", - " p['syn_dict_ee']['permanence_max'] = 20. # Maximum allowed permanence\n", - " p['syn_dict_ee']['permanence_min'] = 1. # Minimum allowed permanence\n", - " p['syn_dict_ee']['lambda_minus'] = 0.0015\n", + " p[\"syn_dict_ee\"][\"tau_plus\"] = 20. # plasticity time constant (potentiation)\n", + " \n", + " p[\"syn_dict_ee\"][\"delay\"] = 2. # dendritic delay \n", + " p[\"syn_dict_ee\"][\"receptor_type\"] = 2 # receptor corresponding to the dendritic input\n", + " p[\"syn_dict_ee\"][\"lambda_plus\"] = 0.08 # potentiation rate\n", + " p[\"syn_dict_ee\"][\"zt\"] = 1. # target dAP trace [pA]\n", + " p[\"syn_dict_ee\"][\"lambda_h\"] = 0.014 # homeostasis rate\n", + " p[\"syn_dict_ee\"][\"Wmax\"] = 1.1 * p[\"soma_params\"][\"theta_dAP\"] / p[\"convergence\"] # Maximum allowed weight\n", + " p[\"syn_dict_ee\"][\"permanence_max\"] = 20. # Maximum allowed permanence\n", + " p[\"syn_dict_ee\"][\"permanence_min\"] = 1. # Minimum allowed permanence\n", + " p[\"syn_dict_ee\"][\"lambda_minus\"] = 0.0015\n", "\n", " # parameters of EX synapses (external to soma of E neurons)\n", - " p['conn_dict_ex'] = {}\n", - " p['syn_dict_ex'] = {}\n", - " p['syn_dict_ex']['receptor_type'] = 1 # receptor corresponding to external input\n", - " p['syn_dict_ex']['delay'] = DELAY # dendritic delay\n", - " p['conn_dict_ex']['rule'] = 'all_to_all' # connection rule\n", + " p[\"conn_dict_ex\"] = {}\n", + " p[\"syn_dict_ex\"] = {}\n", + " p[\"syn_dict_ex\"][\"receptor_type\"] = 1 # receptor corresponding to external input\n", + " p[\"syn_dict_ex\"][\"delay\"] = DELAY # dendritic delay\n", + " p[\"conn_dict_ex\"][\"rule\"] = \"all_to_all\" # connection rule\n", " \n", " ## stimulus parameters\n", - " p['DeltaT'] = 40. # inter-stimulus interval\n", + " p[\"DeltaT\"] = 40. # inter-stimulus interval\n", "\n", - " p['seed'] = 1 # rng seed\n", + " p[\"seed\"] = 1 # rng seed\n", " \n", " return p\n", "\n", @@ -1211,62 +1186,62 @@ " nest.Install(module_name)\n", " nest.set_verbosity(nest_verbosity)\n", " nest.SetKernelStatus({\n", - " 'resolution': params['dt'],\n", - " 'print_time': False,\n", - " 'local_num_threads': n_threads,\n", - " 'rng_seed': params['seed']\n", + " \"resolution\": params[\"dt\"],\n", + " \"print_time\": False,\n", + " \"local_num_threads\": n_threads,\n", + " \"rng_seed\": params[\"seed\"]\n", " })\n", " \n", - " neuron_1 = nest.Create(params['soma_model'], params=params['soma_params'])\n", - " neuron_2 = nest.Create(params['soma_model'], params=params['soma_params'])\n", + " neuron_1 = nest.Create(params[\"soma_model\"], params=params[\"soma_params\"])\n", + " neuron_2 = nest.Create(params[\"soma_model\"], params=params[\"soma_params\"])\n", " \n", " # connect two neurons\n", - " nest.Connect(neuron_1, neuron_2, syn_spec=params['syn_dict_ee'])\n", + " nest.Connect(neuron_1, neuron_2, syn_spec=params[\"syn_dict_ee\"])\n", " \n", " # creation of spike generator\n", " time_neuron_1 = 10.\n", - " time_neuron_2 = time_neuron_1 + params['DeltaT']\n", + " time_neuron_2 = time_neuron_1 + params[\"DeltaT\"]\n", " \n", " training_steps = 100\n", - " between_exc = 5*params['DeltaT']\n", + " between_exc = 5*params[\"DeltaT\"]\n", " \n", " times_neuron_1 = [time_neuron_1+i*between_exc for i in range(training_steps)]\n", " times_neuron_2 = [time_neuron_2+i*between_exc for i in range(training_steps)]#[:10]\n", " \n", " # create the spike generators \n", - " # disable spike generator for the interval 'dis', to see the affect of stpd\n", + " # disable spike generator for the interval \"dis\", to see the affect of stpd\n", " dis = 20\n", - " spike_generator_1 = nest.Create('spike_generator', params={'spike_times': times_neuron_1})\n", - " spike_generator_2 = nest.Create('spike_generator', params={'spike_times': times_neuron_2})\n", + " spike_generator_1 = nest.Create(\"spike_generator\", params={\"spike_times\": times_neuron_1})\n", + " spike_generator_2 = nest.Create(\"spike_generator\", params={\"spike_times\": times_neuron_2})\n", " \n", " # connect the spike generator \n", " \n", - " params['R_m_soma'] = params['soma_params']['tau_m'] / params['soma_params']['C_m']\n", - " params['syn_dict_ex']['weight'] = psp_max_2_psc_max(params['J_EX_psp'], \n", - " params['soma_params']['tau_m'], \n", - " params['soma_params']['tau_syn1'], \n", - " params['R_m_soma'])\n", + " params[\"R_m_soma\"] = params[\"soma_params\"][\"tau_m\"] / params[\"soma_params\"][\"C_m\"]\n", + " params[\"syn_dict_ex\"][\"weight\"] = psp_max_2_psc_max(params[\"J_EX_psp\"], \n", + " params[\"soma_params\"][\"tau_m\"], \n", + " params[\"soma_params\"][\"tau_syn1\"], \n", + " params[\"R_m_soma\"])\n", " \n", - " syn_dict_ff = {'receptor_type': 1, 'weight': params['syn_dict_ex']['weight'], 'delay': params['syn_dict_ex']['delay']}\n", + " syn_dict_ff = {\"receptor_type\": 1, \"weight\": params[\"syn_dict_ex\"][\"weight\"], \"delay\": params[\"syn_dict_ex\"][\"delay\"]}\n", " nest.Connect(spike_generator_1, neuron_1, syn_spec=syn_dict_ff)\n", " nest.Connect(spike_generator_2, neuron_2, syn_spec=syn_dict_ff)\n", " \n", " # record voltage neuron 1, neuron 2\n", - " dap_mm_1 = nest.Create('multimeter', {\"record_from\": [\"dAP_trace\"]})\n", + " dap_mm_1 = nest.Create(\"multimeter\", {\"record_from\": [\"dAP_trace\"]})\n", " nest.Connect(dap_mm_1, neuron_1)\n", " \n", - " dap_mm_2 = nest.Create('multimeter', {\"record_from\": [\"dAP_trace\"]})\n", + " dap_mm_2 = nest.Create(\"multimeter\", {\"record_from\": [\"dAP_trace\"]})\n", " nest.Connect(dap_mm_2, neuron_2)\n", " \n", - " vm_1 = nest.Create('voltmeter')\n", - " vm_2 = nest.Create('voltmeter')\n", + " vm_1 = nest.Create(\"voltmeter\")\n", + " vm_2 = nest.Create(\"voltmeter\")\n", " nest.Connect(vm_1, neuron_1)\n", " nest.Connect(vm_2, neuron_2)\n", " \n", - " sd_1 = nest.Create('spike_recorder')\n", + " sd_1 = nest.Create(\"spike_recorder\")\n", " nest.Connect(neuron_1, sd_1)\n", " \n", - " sd_2 = nest.Create('spike_recorder')\n", + " sd_2 = nest.Create(\"spike_recorder\")\n", " nest.Connect(neuron_2, sd_2)\n", " \n", " synColl = nest.GetConnections(synapse_model=synapse_model_name)\n", @@ -1278,15 +1253,15 @@ " permanences = []\n", " last_sim_time = 0\n", "\n", - " spike_generator_1.origin = nest.GetKernelStatus('biological_time')\n", - " spike_generator_2.origin = nest.GetKernelStatus('biological_time')\n", + " spike_generator_1.origin = nest.GetKernelStatus(\"biological_time\")\n", + " spike_generator_2.origin = nest.GetKernelStatus(\"biological_time\")\n", "\n", " # connect two neurons\n", - " synColl.set({'permanence': 1.}) \n", + " synColl.set({\"permanence\": 1.}) \n", "\n", " for i in range(training_steps):\n", - " nest.SetStatus(neuron_1, {'dAP_trace': z, 'evolve_dAP_trace': 0.})\n", - " nest.SetStatus(neuron_2, {'dAP_trace': z, 'evolve_dAP_trace': 0.})\n", + " nest.SetStatus(neuron_1, {\"dAP_trace\": z, \"evolve_dAP_trace\": 0.})\n", + " nest.SetStatus(neuron_2, {\"dAP_trace\": z, \"evolve_dAP_trace\": 0.})\n", "\n", " # simulate the network\n", " sim_time = times_neuron_1[i] - last_sim_time \n", @@ -1299,16 +1274,16 @@ " permanences.append(p_after)\n", "\n", " fig, ax = plt.subplots(figsize=(12, 6), nrows=4)\n", - " ax[0].plot(nest.GetStatus(vm_1)[0]['events'][\"times\"], nest.GetStatus(vm_1)[0]['events'][\"V_m\"], label=\"vm1\")\n", - " max_V_m = np.amax(nest.GetStatus(vm_1)[0]['events'][\"V_m\"])\n", - " ax[0].scatter(nest.GetStatus(sd_1)[0]['events']['times'], max_V_m * np.ones_like(nest.GetStatus(sd_1)[0]['events']['times']))\n", - " ax[0].plot(nest.GetStatus(vm_2)[0]['events'][\"times\"], nest.GetStatus(vm_2)[0]['events'][\"V_m\"], label=\"vm2\")\n", - " ax[0].scatter(nest.GetStatus(sd_2)[0]['events']['times'], max_V_m * np.ones_like(nest.GetStatus(sd_2)[0]['events']['times']))\n", + " ax[0].plot(nest.GetStatus(vm_1)[0][\"events\"][\"times\"], nest.GetStatus(vm_1)[0][\"events\"][\"V_m\"], label=\"vm1\")\n", + " max_V_m = np.amax(nest.GetStatus(vm_1)[0][\"events\"][\"V_m\"])\n", + " ax[0].scatter(nest.GetStatus(sd_1)[0][\"events\"][\"times\"], max_V_m * np.ones_like(nest.GetStatus(sd_1)[0][\"events\"][\"times\"]))\n", + " ax[0].plot(nest.GetStatus(vm_2)[0][\"events\"][\"times\"], nest.GetStatus(vm_2)[0][\"events\"][\"V_m\"], label=\"vm2\")\n", + " ax[0].scatter(nest.GetStatus(sd_2)[0][\"events\"][\"times\"], max_V_m * np.ones_like(nest.GetStatus(sd_2)[0][\"events\"][\"times\"]))\n", " ax[0].set_ylabel(\"V_m\")\n", " ax[0].legend()\n", " \n", - " ax[1].plot(nest.GetStatus(dap_mm_1)[0]['events'][\"times\"], nest.GetStatus(dap_mm_1)[0]['events'][\"dAP_trace\"], label=\"pre\")\n", - " ax[1].plot(nest.GetStatus(dap_mm_2)[0]['events'][\"times\"], nest.GetStatus(dap_mm_2)[0]['events'][\"dAP_trace\"], label=\"post\")\n", + " ax[1].plot(nest.GetStatus(dap_mm_1)[0][\"events\"][\"times\"], nest.GetStatus(dap_mm_1)[0][\"events\"][\"dAP_trace\"], label=\"pre\")\n", + " ax[1].plot(nest.GetStatus(dap_mm_2)[0][\"events\"][\"times\"], nest.GetStatus(dap_mm_2)[0][\"events\"][\"dAP_trace\"], label=\"post\")\n", " ax[1].set_ylabel(\"dAP\")\n", " ax[1].legend()\n", " \n", @@ -1371,103 +1346,103 @@ " \n", " training_steps = len(data[\"weights_cs\"][0])\n", " num_pulses = np.arange(training_steps)\n", - " lns1 = ax1.plot(num_pulses, data[\"weights_cs\"][0], '-o', ms=ms, color='black', label=r'$J$')\n", + " lns1 = ax1.plot(num_pulses, data[\"weights_cs\"][0], \"-o\", ms=ms, color=\"black\", label=r\"$J$\")\n", " \n", - " #plt.ylabel('weight ($\\mu$S)')\n", + " #plt.ylabel(\"weight ($\\mu$S)\")\n", " ax1.set_xlim(0, training_steps)\n", - " ax1.set_ylim(-1, params[\"syn_dict_ee\"]['Wmax']+10)\n", - " #ax1.set_title(r'dAP rate $\\nu_\\mathsf{d}$=%0.1f' % zs[0])\n", - " ax1.set_title(r'$z$=%0.1f' % data['zs'][0])\n", - " ax1.set_ylabel(r'weight $J$ (pA)')\n", + " ax1.set_ylim(-1, params[\"syn_dict_ee\"][\"Wmax\"]+10)\n", + " #ax1.set_title(r\"dAP rate $\\nu_\\mathsf{d}$=%0.1f\" % zs[0])\n", + " ax1.set_title(r\"$z$=%0.1f\" % data[\"zs\"][0])\n", + " ax1.set_ylabel(r\"weight $J$ (pA)\")\n", " \n", " ax2 = ax1.twinx()\n", - " lns2 = ax2.plot(num_pulses, data[\"permanences_cs\"][0], '-o', ms=ms, color='grey', alpha=alpha, label=r'$P$')\n", - " if 'permanence_threshold' in params['syn_dict_ee'].keys():\n", - " plt.hlines(params['syn_dict_ee']['permanence_threshold'], 0, training_steps, lw=lw_hline, color='grey', linestyles='dotted')\n", - " if 'th_perm' in params['syn_dict_ee'].keys():\n", - " plt.hlines(params['syn_dict_ee']['th_perm'], 0, training_steps, lw=lw_hline, color='grey', linestyles='dotted')\n", + " lns2 = ax2.plot(num_pulses, data[\"permanences_cs\"][0], \"-o\", ms=ms, color=\"grey\", alpha=alpha, label=r\"$P$\")\n", + " if \"permanence_threshold\" in params[\"syn_dict_ee\"].keys():\n", + " plt.hlines(params[\"syn_dict_ee\"][\"permanence_threshold\"], 0, training_steps, lw=lw_hline, color=\"grey\", linestyles=\"dotted\")\n", + " if \"th_perm\" in params[\"syn_dict_ee\"].keys():\n", + " plt.hlines(params[\"syn_dict_ee\"][\"th_perm\"], 0, training_steps, lw=lw_hline, color=\"grey\", linestyles=\"dotted\")\n", "\n", - " if \"permanence_max\" in params['syn_dict_ee'].keys():\n", - " plt.hlines(params['syn_dict_ee']['permanence_max'], 0, training_steps, lw=lw_hline, color='grey', linestyles='dashed')\n", - " ax2.set_ylim(-1, params[\"syn_dict_ee\"]['permanence_max']+2)\n", + " if \"permanence_max\" in params[\"syn_dict_ee\"].keys():\n", + " plt.hlines(params[\"syn_dict_ee\"][\"permanence_max\"], 0, training_steps, lw=lw_hline, color=\"grey\", linestyles=\"dashed\")\n", + " ax2.set_ylim(-1, params[\"syn_dict_ee\"][\"permanence_max\"]+2)\n", "\n", - " if \"Pmax\" in params['syn_dict_ee'].keys():\n", - " plt.hlines(params['syn_dict_ee']['Pmax'], 0, training_steps, lw=lw_hline, color='grey', linestyles='dashed') \n", - " ax2.set_ylim(-1, params[\"syn_dict_ee\"]['Pmax']+2)\n", + " if \"Pmax\" in params[\"syn_dict_ee\"].keys():\n", + " plt.hlines(params[\"syn_dict_ee\"][\"Pmax\"], 0, training_steps, lw=lw_hline, color=\"grey\", linestyles=\"dashed\") \n", + " ax2.set_ylim(-1, params[\"syn_dict_ee\"][\"Pmax\"]+2)\n", " \n", - " ax2.tick_params(axis='y', labelcolor='grey')\n", + " ax2.tick_params(axis=\"y\", labelcolor=\"grey\")\n", " ax2.set_yticks([])\n", - " ax2.spines['right'].set_color('grey')\n", + " ax2.spines[\"right\"].set_color(\"grey\")\n", " \n", " # add legends\n", " lns = [lns1[0],lns2[0]]\n", " labs = [l.get_label() for l in lns]\n", - " ax1.legend(lns, labs, loc='lower right')\n", + " ax1.legend(lns, labs, loc=\"lower right\")\n", " \n", " # data for Ic=1\n", " # -------------\n", " ax1 = plt.subplot(gs[0,1])\n", " \n", - " ax1.plot(num_pulses, data[\"weights_cs\"][1], '-o', ms=ms, color='black', label='weight')\n", + " ax1.plot(num_pulses, data[\"weights_cs\"][1], \"-o\", ms=ms, color=\"black\", label=\"weight\")\n", " \n", - " ax1.set_ylim(-1, params[\"syn_dict_ee\"]['Wmax']+10)\n", + " ax1.set_ylim(-1, params[\"syn_dict_ee\"][\"Wmax\"]+10)\n", " ax1.set_xlim(0, training_steps)\n", - " #ax1.set_title(r'dAP rate $\\nu_\\mathsf{d}$=%0.1f' % params['zs'][1])\n", - " ax1.set_title(r'$z$=%0.1f' % data['zs'][1])\n", - " ax1.set_xlabel('number of presynaptic-postsynaptic spike pairings')\n", + " #ax1.set_title(r\"dAP rate $\\nu_\\mathsf{d}$=%0.1f\" % params[\"zs\"][1])\n", + " ax1.set_title(r\"$z$=%0.1f\" % data[\"zs\"][1])\n", + " ax1.set_xlabel(\"number of presynaptic-postsynaptic spike pairings\")\n", " ax1.set_yticks([])\n", " \n", " ax2 = ax1.twinx()\n", - " ax2.plot(num_pulses, data[\"permanences_cs\"][1], '-o', ms=ms, color='grey', alpha=alpha, label='permanence')\n", - " if 'permanence_threshold' in params['syn_dict_ee'].keys():\n", - " plt.hlines(params['syn_dict_ee']['permanence_threshold'], 0, training_steps, lw=lw_hline, color='grey', linestyles='dotted')\n", - " if 'th_perm' in params['syn_dict_ee'].keys():\n", - " plt.hlines(params['syn_dict_ee']['th_perm'], 0, training_steps, lw=lw_hline, color='grey', linestyles='dotted')\n", + " ax2.plot(num_pulses, data[\"permanences_cs\"][1], \"-o\", ms=ms, color=\"grey\", alpha=alpha, label=\"permanence\")\n", + " if \"permanence_threshold\" in params[\"syn_dict_ee\"].keys():\n", + " plt.hlines(params[\"syn_dict_ee\"][\"permanence_threshold\"], 0, training_steps, lw=lw_hline, color=\"grey\", linestyles=\"dotted\")\n", + " if \"th_perm\" in params[\"syn_dict_ee\"].keys():\n", + " plt.hlines(params[\"syn_dict_ee\"][\"th_perm\"], 0, training_steps, lw=lw_hline, color=\"grey\", linestyles=\"dotted\")\n", "\n", - " if \"permanence_max\" in params['syn_dict_ee'].keys():\n", - " plt.hlines(params['syn_dict_ee']['permanence_max'], 0, training_steps, lw=lw_hline, color='grey', linestyles='dashed')\n", - " ax2.set_ylim(-1, params[\"syn_dict_ee\"]['permanence_max']+2)\n", + " if \"permanence_max\" in params[\"syn_dict_ee\"].keys():\n", + " plt.hlines(params[\"syn_dict_ee\"][\"permanence_max\"], 0, training_steps, lw=lw_hline, color=\"grey\", linestyles=\"dashed\")\n", + " ax2.set_ylim(-1, params[\"syn_dict_ee\"][\"permanence_max\"]+2)\n", "\n", - " if \"Pmax\" in params['syn_dict_ee'].keys():\n", - " plt.hlines(params['syn_dict_ee']['Pmax'], 0, training_steps, lw=lw_hline, color='grey', linestyles='dashed') \n", - " ax2.set_ylim(-1, params[\"syn_dict_ee\"]['Pmax']+2)\n", + " if \"Pmax\" in params[\"syn_dict_ee\"].keys():\n", + " plt.hlines(params[\"syn_dict_ee\"][\"Pmax\"], 0, training_steps, lw=lw_hline, color=\"grey\", linestyles=\"dashed\") \n", + " ax2.set_ylim(-1, params[\"syn_dict_ee\"][\"Pmax\"]+2)\n", " \n", " \n", - " ax2.tick_params(axis='y', labelcolor='grey')\n", + " ax2.tick_params(axis=\"y\", labelcolor=\"grey\")\n", " ax2.set_yticks([])\n", - " ax2.spines['right'].set_color('grey')\n", + " ax2.spines[\"right\"].set_color(\"grey\")\n", " \n", " # data for Ic=2\n", " # -------------\n", " ax1 = plt.subplot(gs[0,2])\n", " \n", - " ax1.plot(num_pulses, data[\"weights_cs\"][2], '-o', ms=ms, color='black', label='weight')\n", + " ax1.plot(num_pulses, data[\"weights_cs\"][2], \"-o\", ms=ms, color=\"black\", label=\"weight\")\n", " \n", - " ax1.set_ylim(-1, params[\"syn_dict_ee\"]['Wmax']+10)\n", + " ax1.set_ylim(-1, params[\"syn_dict_ee\"][\"Wmax\"]+10)\n", " ax1.set_xlim(0, training_steps)\n", - " #ax1.set_title(r'dAP rate $\\nu_\\mathsf{d}$=%0.1f' % params['zs'][2])\n", - " ax1.set_title(r'$z$=%0.1f' % data['zs'][2])\n", + " #ax1.set_title(r\"dAP rate $\\nu_\\mathsf{d}$=%0.1f\" % params[\"zs\"][2])\n", + " ax1.set_title(r\"$z$=%0.1f\" % data[\"zs\"][2])\n", " ax1.set_yticks([])\n", " \n", " ax2 = ax1.twinx()\n", - " ax2.plot(num_pulses, data[\"permanences_cs\"][2], '-o', ms=ms, color='grey', alpha=alpha, label=r'$P$')\n", - " if 'permanence_threshold' in params['syn_dict_ee'].keys():\n", - " plt.hlines(params['syn_dict_ee']['permanence_threshold'], 0, training_steps, lw=lw_hline, color='grey', linestyles='dotted')\n", - " if 'th_perm' in params['syn_dict_ee'].keys():\n", - " plt.hlines(params['syn_dict_ee']['th_perm'], 0, training_steps, lw=lw_hline, color='grey', linestyles='dotted')\n", - " if \"permanence_max\" in params['syn_dict_ee'].keys():\n", - " plt.hlines(params['syn_dict_ee']['permanence_max'], 0, training_steps, lw=lw_hline, color='grey', linestyles='dashed')\n", - " ax2.set_ylim(-1, params[\"syn_dict_ee\"]['permanence_max']+2)\n", - "\n", - " if \"Pmax\" in params['syn_dict_ee'].keys():\n", - " plt.hlines(params['syn_dict_ee']['Pmax'], 0, training_steps, lw=lw_hline, color='grey', linestyles='dashed') \n", - " ax2.set_ylim(-1, params[\"syn_dict_ee\"]['Pmax']+2)\n", - "\n", - " ax2.tick_params(axis='y', labelcolor='grey')\n", + " ax2.plot(num_pulses, data[\"permanences_cs\"][2], \"-o\", ms=ms, color=\"grey\", alpha=alpha, label=r\"$P$\")\n", + " if \"permanence_threshold\" in params[\"syn_dict_ee\"].keys():\n", + " plt.hlines(params[\"syn_dict_ee\"][\"permanence_threshold\"], 0, training_steps, lw=lw_hline, color=\"grey\", linestyles=\"dotted\")\n", + " if \"th_perm\" in params[\"syn_dict_ee\"].keys():\n", + " plt.hlines(params[\"syn_dict_ee\"][\"th_perm\"], 0, training_steps, lw=lw_hline, color=\"grey\", linestyles=\"dotted\")\n", + " if \"permanence_max\" in params[\"syn_dict_ee\"].keys():\n", + " plt.hlines(params[\"syn_dict_ee\"][\"permanence_max\"], 0, training_steps, lw=lw_hline, color=\"grey\", linestyles=\"dashed\")\n", + " ax2.set_ylim(-1, params[\"syn_dict_ee\"][\"permanence_max\"]+2)\n", + "\n", + " if \"Pmax\" in params[\"syn_dict_ee\"].keys():\n", + " plt.hlines(params[\"syn_dict_ee\"][\"Pmax\"], 0, training_steps, lw=lw_hline, color=\"grey\", linestyles=\"dashed\") \n", + " ax2.set_ylim(-1, params[\"syn_dict_ee\"][\"Pmax\"]+2)\n", + "\n", + " ax2.tick_params(axis=\"y\", labelcolor=\"grey\")\n", " ax2.set_ylabel(r\"permanence $P$\", color=\"grey\")\n", " \n", - " path = '.'\n", - " fname = 'plasticity_dynamics'\n", + " path = \".\"\n", + " fname = \"plasticity_dynamics\"\n", " plt.savefig(\"/tmp/%s.png\" % fname)\n", "\n", "plot_stdsp_dependence_on_third_factor(data, params)" @@ -1515,28 +1490,27 @@ " vocabulary: list\n", " \"\"\"\n", "\n", - " task_name = params['task_name']\n", + " task_name = params[\"task_name\"]\n", " \n", " # set of characters used to build the sequences\n", - " vocabulary = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',\n", - " 'U', 'V', 'W', 'X', 'Y', 'Z'][:params['vocab_size']]\n", + " vocabulary = [\"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\",\n", + " \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\"][:params[\"vocab_size\"]]\n", " sequences = []\n", "\n", " # create high order sequences, characters are drawn without replacement\n", " if task_name == \"high_order\":\n", "\n", - " if (params['num_sequences'] % params['num_sub_seq'] != 0):\n", - " raise ZeroDivisionError(\n", - " 'for high order sequences number of sequences needs (\"num_sequences\") to be divisible by num_sub_seq')\n", + " if (params[\"num_sequences\"] % params[\"num_sub_seq\"] != 0):\n", + " raise ZeroDivisionError(\"for high order sequences number of sequences (``num_sequences``) needs to be divisible by ``num_sub_seq``\")\n", "\n", - " num_sequences_high_order = int(params['num_sequences'] / params['num_sub_seq'])\n", + " num_sequences_high_order = int(params[\"num_sequences\"] / params[\"num_sub_seq\"])\n", " for i in range(num_sequences_high_order):\n", " characters_sub_seq = copy.copy(vocabulary)\n", " sub_seq = random.sample(characters_sub_seq, params[\"length_sequence\"] - 2)\n", " for char in sub_seq:\n", " characters_sub_seq.remove(char)\n", "\n", - " for j in range(params['num_sub_seq']):\n", + " for j in range(params[\"num_sub_seq\"]):\n", " # remove the characters that were chosen for the end and the start of the sequence\n", " # this is to avoid sequences with adjacent letters of the same kind\n", " # we will add this feature to the code asap \n", @@ -1554,16 +1528,11 @@ " # pick unique initial characters\n", " initial_characters = vocabulary.copy()\n", " np.random.shuffle(initial_characters)\n", - " initial_characters = initial_characters[:params['num_sequences']]\n", + " initial_characters = initial_characters[:params[\"num_sequences\"]]\n", "\n", - " sequences = params['num_sequences'] * [None]\n", + " sequences = params[\"num_sequences\"] * [None]\n", " for i in range(len(sequences)):\n", - " # sequences[i] = params[\"length_sequence\"] * [initial_characters[i]]\n", - " # while repeated_characters(sequences[i]):\n", - " #vocabulary_minus_initial = list(set(vocabulary) - set(initial_characters))\n", " sequences[i] = [initial_characters[i]] + list(np.random.choice(vocabulary, params[\"length_sequence\"] - 1))\n", - " \n", - " # sequences = [np.random.choice(vocabulary, params[\"length_sequence\"]) for _ in range(params['num_sequences'])]\n", "\n", " # create sequences using matrix transition \n", " elif task_name == \"structure\":\n", @@ -1572,7 +1541,7 @@ " x = np.random.choice(2, len(vocabulary), p=[0.2, 0.8])\n", " matrix_transition[char] = x / sum(x)\n", "\n", - " for _ in range(params['num_sequences']):\n", + " for _ in range(params[\"num_sequences\"]):\n", " sequence = random.sample(vocabulary, 1)\n", " last_char = sequence[-1]\n", " for _ in range(params[\"length_sequence\"] - 1):\n", @@ -1583,29 +1552,29 @@ " else:\n", " assert task_name == \"hard_coded\"\n", " # hard coded sequences \n", - " task_type = params['task_type']\n", + " task_type = params[\"task_type\"]\n", " if task_type == 1:\n", - " sequences = [['A', 'D', 'B', 'E'], ['F', 'D', 'B', 'C']]\n", + " sequences = [[\"A\", \"D\", \"B\", \"E\"], [\"F\", \"D\", \"B\", \"C\"]]\n", " elif task_type == 2:\n", - " sequences = [['E', 'N', 'D', 'I', 'J'], ['L', 'N', 'D', 'I', 'K'], ['G', 'J', 'M', 'C', 'N'], \n", - " ['F', 'J', 'M', 'C', 'I'], ['B', 'C', 'K', 'H', 'I'], ['A', 'C', 'K', 'H', 'F']]\n", + " sequences = [[\"E\", \"N\", \"D\", \"I\", \"J\"], [\"L\", \"N\", \"D\", \"I\", \"K\"], [\"G\", \"J\", \"M\", \"C\", \"N\"], \n", + " [\"F\", \"J\", \"M\", \"C\", \"I\"], [\"B\", \"C\", \"K\", \"H\", \"I\"], [\"A\", \"C\", \"K\", \"H\", \"F\"]]\n", " elif task_type == 3:\n", - " sequences = [['E', 'N', 'D', 'I', 'J'], ['L', 'N', 'D', 'I', 'K'], ['G', 'J', 'M', 'E', 'N'], \n", - " ['F', 'J', 'M', 'E', 'I'], ['B', 'C', 'K', 'B', 'I'], ['A', 'C', 'K', 'B', 'F']]\n", + " sequences = [[\"E\", \"N\", \"D\", \"I\", \"J\"], [\"L\", \"N\", \"D\", \"I\", \"K\"], [\"G\", \"J\", \"M\", \"E\", \"N\"], \n", + " [\"F\", \"J\", \"M\", \"E\", \"I\"], [\"B\", \"C\", \"K\", \"B\", \"I\"], [\"A\", \"C\", \"K\", \"B\", \"F\"]]\n", " elif task_type == 6:\n", - " sequences = [['A', 'D', 'B', 'E'], ['F', 'D', 'B', 'C'], ['C', 'D', 'B', 'G']]\n", + " sequences = [[\"A\", \"D\", \"B\", \"E\"], [\"F\", \"D\", \"B\", \"C\"], [\"C\", \"D\", \"B\", \"G\"]]\n", " else:\n", - " sequences = [['A', 'D', 'B', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N','E'], ['F', 'D', 'B', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'C']]\n", + " sequences = [[\"A\", \"D\", \"B\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\",\"E\"], [\"F\", \"D\", \"B\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"C\"]]\n", "\n", " # test sequences used to measure the accuracy \n", " test_sequences = sequences\n", "\n", - " if params['store_training_data']:\n", - " fname = 'training_data'\n", - " fname_voc = 'vocabulary'\n", + " if params[\"store_training_data\"]:\n", + " fname = \"training_data\"\n", + " fname_voc = \"vocabulary\"\n", " print(\"\\nSave training data to %s\" % ( fname))\n", - " np.save('%s' % ( fname), sequences)\n", - " np.save('%s' % ( fname_voc), vocabulary)\n", + " np.save(\"%s\" % ( fname), sequences)\n", + " np.save(\"%s\" % ( fname_voc), vocabulary)\n", "\n", " return sequences, test_sequences, vocabulary" ] @@ -1629,60 +1598,60 @@ "\n", " params = copy.deepcopy(params)\n", "\n", - " synapse_model_name = params['syn_dict_ee']['synapse_model']\n", + " synapse_model_name = params[\"syn_dict_ee\"][\"synapse_model\"]\n", "\n", " # connection rules for EE connections\n", - " params['conn_dict_ee'] = {}\n", - " params['conn_dict_ee']['rule'] = params['rule']\n", - " params['conn_dict_ee']['indegree'] = int(params['connection_prob'] *\n", - " params['M'] *\n", - " params['n_E'])\n", - " params['conn_dict_ee']['allow_autapses'] = False\n", - " params['conn_dict_ee']['allow_multapses'] = False\n", + " params[\"conn_dict_ee\"] = {}\n", + " params[\"conn_dict_ee\"][\"rule\"] = params[\"rule\"]\n", + " params[\"conn_dict_ee\"][\"indegree\"] = int(params[\"connection_prob\"] *\n", + " params[\"M\"] *\n", + " params[\"n_E\"])\n", + " params[\"conn_dict_ee\"][\"allow_autapses\"] = False\n", + " params[\"conn_dict_ee\"][\"allow_multapses\"] = False\n", "\n", " # compute neuron's membrane resistance\n", - " params['R_m_soma'] = params['soma_params']['tau_m'] / params['soma_params']['C_m']\n", - " params['R_m_inhibit'] = params['inhibit_params']['tau_m'] / params['inhibit_params']['C_m']\n", + " params[\"R_m_soma\"] = params[\"soma_params\"][\"tau_m\"] / params[\"soma_params\"][\"C_m\"]\n", + " params[\"R_m_inhibit\"] = params[\"inhibit_params\"][\"tau_m\"] / params[\"inhibit_params\"][\"C_m\"]\n", "\n", " # compute psc max from the psp max\n", - " params['J_IE_psp'] = 1.2 * params['inhibit_params']['V_th'] # inhibitory PSP as a response to an input from E neuron\n", + " params[\"J_IE_psp\"] = 1.2 * params[\"inhibit_params\"][\"V_th\"] # inhibitory PSP as a response to an input from E neuron\n", "\n", - " if params['evaluate_replay']:\n", - " params['J_IE_psp'] /= params['n_E']\n", + " if params[\"evaluate_replay\"]:\n", + " params[\"J_IE_psp\"] /= params[\"n_E\"]\n", " else:\n", - " params['J_IE_psp'] /= params['pattern_size'] \n", + " params[\"J_IE_psp\"] /= params[\"pattern_size\"] \n", "\n", - " params['syn_dict_ex']['weight'] = psp_max_2_psc_max(params['J_EX_psp'], params['soma_params']['tau_m'],\n", - " params['soma_params']['tau_syn1'], params['R_m_soma'])\n", - " params['syn_dict_ie']['weight'] = psp_max_2_psc_max(params['J_IE_psp'], params['inhibit_params']['tau_m'],\n", - " params['inhibit_params']['tau_syn_ex'],\n", - " params['R_m_inhibit'])\n", - " params['syn_dict_ei']['weight'] = psp_max_2_psc_max(params['J_EI_psp'], params['soma_params']['tau_m'],\n", - " params['soma_params']['tau_syn3'], params['R_m_soma'])\n", + " params[\"syn_dict_ex\"][\"weight\"] = psp_max_2_psc_max(params[\"J_EX_psp\"], params[\"soma_params\"][\"tau_m\"],\n", + " params[\"soma_params\"][\"tau_syn1\"], params[\"R_m_soma\"])\n", + " params[\"syn_dict_ie\"][\"weight\"] = psp_max_2_psc_max(params[\"J_IE_psp\"], params[\"inhibit_params\"][\"tau_m\"],\n", + " params[\"inhibit_params\"][\"tau_syn_ex\"],\n", + " params[\"R_m_inhibit\"])\n", + " params[\"syn_dict_ei\"][\"weight\"] = psp_max_2_psc_max(params[\"J_EI_psp\"], params[\"soma_params\"][\"tau_m\"],\n", + " params[\"soma_params\"][\"tau_syn3\"], params[\"R_m_soma\"])\n", "\n", " # set initial weights (or permanences in the case of the structural synapse)\n", " import nest\n", - " params['syn_dict_ee']['permanence'] = nest.random.uniform(min=params['permanence_min'], max=params['permanence_max']) \n", + " params[\"syn_dict_ee\"][\"permanence\"] = nest.random.uniform(min=params[\"permanence_min\"], max=params[\"permanence_max\"]) \n", "\n", " if \"synapse_nestml\" in synapse_model_name:\n", - " params['syn_dict_ee']['dt_max'] = 2.*params['DeltaT'] # maximum time lag for the STDP window \n", + " params[\"syn_dict_ee\"][\"dt_max\"] = 2.*params[\"DeltaT\"] # maximum time lag for the STDP window \n", " else:\n", - " params['syn_dict_ee']['dt_max'] = -2.*params['DeltaT'] # maximum time lag for the STDP window \n", - " params['DeltaT_seq'] = 2.5*params['DeltaT'] # inter-sequence interval\n", + " params[\"syn_dict_ee\"][\"dt_max\"] = -2.*params[\"DeltaT\"] # maximum time lag for the STDP window \n", + " params[\"DeltaT_seq\"] = 2.5*params[\"DeltaT\"] # inter-sequence interval\n", " \n", " # clamp DeltaT_seq if it exceeds the duration of the dAP\n", - " if params['DeltaT_seq'] < params['soma_params']['tau_dAP']:\n", - " params['DeltaT_seq'] = params['soma_params']['tau_dAP']\n", + " if params[\"DeltaT_seq\"] < params[\"soma_params\"][\"tau_dAP\"]:\n", + " params[\"DeltaT_seq\"] = params[\"soma_params\"][\"tau_dAP\"]\n", " \n", - " print('\\n#### postsynaptic potential ####')\n", - " print('PSP maximum J_EX psp: %f mV' % params['J_EX_psp'])\n", - " print('PSP maximum J_IE psp: %f mV' % params['J_IE_psp'])\n", - " print('PSP maximum J_EI psp: %f mV' % params['J_EI_psp'])\n", + " print(\"\\n#### postsynaptic potential ####\")\n", + " print(\"PSP maximum J_EX psp: %f mV\" % params[\"J_EX_psp\"])\n", + " print(\"PSP maximum J_IE psp: %f mV\" % params[\"J_IE_psp\"])\n", + " print(\"PSP maximum J_EI psp: %f mV\" % params[\"J_EI_psp\"])\n", "\n", - " print('\\n#### postsynaptic current ####')\n", - " print('PSC maximum J_EX: %f pA' % params['syn_dict_ex']['weight'])\n", - " print('PSC maximum J_IE: %f pA' % params['syn_dict_ie']['weight'])\n", - " print('PSC maximum J_EI: %f pA' % params['syn_dict_ei']['weight'])\n", + " print(\"\\n#### postsynaptic current ####\")\n", + " print(\"PSC maximum J_EX: %f pA\" % params[\"syn_dict_ex\"][\"weight\"])\n", + " print(\"PSC maximum J_IE: %f pA\" % params[\"syn_dict_ie\"][\"weight\"])\n", + " print(\"PSC maximum J_EI: %f pA\" % params[\"syn_dict_ei\"][\"weight\"])\n", "\n", " return params\n", "\n", @@ -1709,21 +1678,20 @@ " files = []\n", " path=\".\"\n", " for file_name in os.listdir(path):\n", - " if file_name.endswith('.dat') and file_name.startswith(label):\n", + " if file_name.endswith(\".dat\") and file_name.startswith(label):\n", " files += [file_name]\n", " files.sort()\n", - " #files = [label + \".dat\"]\n", "\n", - " assert len(files) > 0, \"No files of type '%s*.dat' found.\" % (label)\n", + " assert len(files) > 0, \"No files of type \\\"%s*.dat\\\" found.\" % (label)\n", "\n", " # open spike files and read data\n", " spikes = []\n", " for file_name in files:\n", " try:\n", - " spikes += [np.loadtxt('%s' % (file_name),skiprows=skip_rows)] ## load spike file while skipping the header \n", + " spikes += [np.loadtxt(\"%s\" % (file_name), skiprows=skip_rows)] # load spike file while skipping the header \n", " except:\n", - " print('Error: %s' % sys.exc_info()[1])\n", - " print('Remove non-numeric entries from file %s (e.g. in file header) by specifying (optional) parameter \"skip_rows\".\\n' % (file_name))\n", + " print(\"Error: %s\" % sys.exc_info()[1])\n", + " print(\"Remove non-numeric entries from file %s (e.g. in file header) by specifying (optional) parameter \\\"skip_rows\\\".\\n\" % (file_name))\n", " \n", " try:\n", " spikes = np.concatenate([spike for spike in spikes if spike.size>0])\n", @@ -1749,9 +1717,9 @@ "\n", " #TODO: this is temporary hack!\n", " try:\n", - " data = np.load('%s.npy' % fname, allow_pickle=True).item()\n", + " data = np.load(\"%s.npy\" % fname, allow_pickle=True).item()\n", " except:\n", - " data = np.load('%s.npy' % fname, allow_pickle=True)\n", + " data = np.load(\"%s.npy\" % fname, allow_pickle=True)\n", "\n", " return data\n", "\n", @@ -1897,18 +1865,18 @@ " for it, rc_time in enumerate(recording_times):\n", "\n", " # find dendritic action potentials (dAPs)\n", - " idx_q = np.where((dendriticAP[:, 1] < rc_time + params['idend_record_time'] + 1.) & \n", + " idx_q = np.where((dendriticAP[:, 1] < rc_time + params[\"idend_record_time\"] + 1.) & \n", " (dendriticAP[:, 1] > rc_time))[0]\n", "\n", - " idx_dAP = np.where(dendriticAP[:, 2][idx_q] > params['soma_params']['I_p'] - 1.)[0]\n", + " idx_dAP = np.where(dendriticAP[:, 2][idx_q] > params[\"soma_params\"][\"I_p\"] - 1.)[0]\n", " \n", " senders_dAP = dendriticAP[:, 0][idx_q][idx_dAP]\n", " \n", - " subpopulation_senders_dAP = [int((s - 1) // params['n_E']) for s in senders_dAP]\n", + " subpopulation_senders_dAP = [int((s - 1) // params[\"n_E\"]) for s in senders_dAP]\n", "\n", " # find somatic action potentials\n", - " idx_soma = np.where((somatic_spikes[:, 1] < rc_time + 2*params['DeltaT']) & \n", - " (somatic_spikes[:, 1] > rc_time + params['DeltaT']))[0]\n", + " idx_soma = np.where((somatic_spikes[:, 1] < rc_time + 2*params[\"DeltaT\"]) & \n", + " (somatic_spikes[:, 1] > rc_time + params[\"DeltaT\"]))[0]\n", " senders_soma = somatic_spikes[:, 0][idx_soma]\n", " num_active_neurons = len(senders_soma)\n", " num_active_dendrites = len(senders_dAP)\n", @@ -1916,11 +1884,11 @@ " # create the target vector \n", " excited_subpopulations = characters_to_subpopulations[seqs[seq_num][-1]]\n", " excited_subpopulations_prev = characters_to_subpopulations[seqs[seq_num][-2]]\n", - " target = np.zeros(params['M'])\n", + " target = np.zeros(params[\"M\"])\n", " target[excited_subpopulations] = 1\n", "\n", " # count false positives and construct the output vector\n", - " output = np.zeros(params['M'])\n", + " output = np.zeros(params[\"M\"])\n", " count_subpopulations = Counter(subpopulation_senders_dAP)\n", " counter_correct = 0\n", "\n", @@ -1930,21 +1898,21 @@ " ratio_fp_activation = 0.5\n", "\n", " for k, v in count_subpopulations.items():\n", - " if k not in excited_subpopulations and v >= (ratio_fp_activation * params['pattern_size']):\n", - " #print('episode %d/%d count of a false positive %d, %d' % (it, len(recording_times), k, v))\n", + " if k not in excited_subpopulations and v >= (ratio_fp_activation * params[\"pattern_size\"]):\n", + " #print(\"episode %d/%d count of a false positive %d, %d\" % (it, len(recording_times), k, v))\n", " output[k] = 1\n", - " elif k in excited_subpopulations and v >= (ratio_fn_activation * params['pattern_size']):\n", + " elif k in excited_subpopulations and v >= (ratio_fn_activation * params[\"pattern_size\"]):\n", " counter_correct += 1\n", "\n", " # find false negatives\n", - " if counter_correct == params['L']:\n", + " if counter_correct == params[\"L\"]:\n", " output[excited_subpopulations] = 1\n", " #else:\n", " # false_negative = 1\n", "\n", - " error = 1/params['L'] * np.sqrt(sum((output - target) ** 2))\n", - " false_positive = 1/params['L'] * sum(np.heaviside(output - target, 0))\n", - " false_negative = 1/params['L'] * sum(np.heaviside(target - output, 0))\n", + " error = 1/params[\"L\"] * np.sqrt(sum((output - target) ** 2))\n", + " false_positive = 1/params[\"L\"] * sum(np.heaviside(output - target, 0))\n", + " false_negative = 1/params[\"L\"] * sum(np.heaviside(target - output, 0))\n", "\n", " # append errors, fp, and fn for the different sequences\n", " errors[seq_num].append(error)\n", @@ -1953,13 +1921,13 @@ " last_char_active_neurons[seq_num].append(num_active_neurons)\n", " last_char_active_dendrites[seq_num].append(num_active_dendrites)\n", "\n", - " print('#### Prediction performance ####')\n", - " print('Sequence:', seqs[seq_num])\n", - " print('Error:', errors[seq_num][-1])\n", - " print('False positives:', false_positives[seq_num][-1])\n", - " print('False negatives:', false_negatives[seq_num][-1])\n", - " print('Number of active neurons in %s: %d' % (seqs[seq_num][-1], last_char_active_neurons[seq_num][-1]))\n", - " print('Number of active dendrites in %s: %d' % (seqs[seq_num][-1], last_char_active_dendrites[seq_num][-1]))\n", + " print(\"#### Prediction performance ####\")\n", + " print(\"Sequence:\", seqs[seq_num])\n", + " print(\"Error:\", errors[seq_num][-1])\n", + " print(\"False positives:\", false_positives[seq_num][-1])\n", + " print(\"False negatives:\", false_negatives[seq_num][-1])\n", + " print(\"Number of active neurons in %s: %d\" % (seqs[seq_num][-1], last_char_active_neurons[seq_num][-1]))\n", + " print(\"Number of active dendrites in %s: %d\" % (seqs[seq_num][-1], last_char_active_dendrites[seq_num][-1]))\n", "\n", " seq_avg_errors = np.mean(errors, axis=0)\n", " seq_avg_false_positives = np.mean(false_positives, axis=0)\n", @@ -2063,19 +2031,19 @@ " Parameter dictionary\n", " \"\"\"\n", "\n", - " print('\\nInitialising model and simulation...')\n", + " print(\"\\nInitialising model and simulation...\")\n", "\n", " # set parameters derived from base parameters\n", " self.params = derived_parameters(params)\n", " print(\"Model parameters: \" + str(self.params))\n", "\n", " # set network size\n", - " self.num_subpopulations = params['M']\n", - " self.num_exc_neurons = params['n_E'] * self.num_subpopulations\n", + " self.num_subpopulations = params[\"M\"]\n", + " self.num_exc_neurons = params[\"n_E\"] * self.num_subpopulations\n", "\n", " # initialize RNG \n", - " np.random.seed(self.params['seed'])\n", - " random.seed(self.params['seed'])\n", + " np.random.seed(self.params[\"seed\"])\n", + " random.seed(self.params[\"seed\"])\n", "\n", " # input stream: sequence data\n", " self.sequences = sequences\n", @@ -2087,8 +2055,8 @@ " self.__setup_nest()\n", "\n", " # get time constant for dendriticAP rate\n", - " self.params['soma_params']['tau_h'] = self.__get_time_constant_dendritic_rate(\n", - " calibration=self.params['calibration'])\n", + " self.params[\"soma_params\"][\"tau_h\"] = self.__get_time_constant_dendritic_rate(\n", + " calibration=self.params[\"calibration\"])\n", "\n", " def __setup_nest(self):\n", " \"\"\"Initializes the NEST kernel.\n", @@ -2098,20 +2066,20 @@ " nest.Install(module_name)\n", " nest.set_verbosity(nest_verbosity)\n", " nest.SetKernelStatus({\n", - " 'resolution': self.params['dt'],\n", - " 'print_time': self.params['print_simulation_progress'],\n", - " 'local_num_threads': n_threads,\n", - " 'rng_seed': self.params['seed'],\n", - " 'dict_miss_is_error': True,\n", - " 'overwrite_files': self.params['overwrite_files'],\n", - " 'data_prefix': ''\n", + " \"resolution\": self.params[\"dt\"],\n", + " \"print_time\": self.params[\"print_simulation_progress\"],\n", + " \"local_num_threads\": n_threads,\n", + " \"rng_seed\": self.params[\"seed\"],\n", + " \"dict_miss_is_error\": True,\n", + " \"overwrite_files\": self.params[\"overwrite_files\"],\n", + " \"data_prefix\": \"\"\n", " })\n", "\n", " def create(self):\n", " \"\"\"Create and configure all network nodes (neurons + recording and stimulus devices)\n", " \"\"\"\n", "\n", - " print('\\nCreating and configuring nodes...')\n", + " print(\"\\nCreating and configuring nodes...\")\n", "\n", " # create excitatory population\n", " self.__create_neuronal_populations()\n", @@ -2119,8 +2087,8 @@ " # compute timing of the external inputs and recording devices\n", " # TODO: this function should probably not be part of the model\n", " excitation_times, excitation_times_neuron, idend_recording_times = self.__compute_timing_external_inputs(\n", - " self.params['DeltaT'], self.params['DeltaT_seq'], self.params['DeltaT_cue'], \n", - " self.params['excitation_start'], self.params['time_dend_to_somatic'])\n", + " self.params[\"DeltaT\"], self.params[\"DeltaT_seq\"], self.params[\"DeltaT_cue\"], \n", + " self.params[\"excitation_start\"], self.params[\"time_dend_to_somatic\"])\n", "\n", " # create spike generators\n", " self.__create_spike_generators(excitation_times_neuron)\n", @@ -2129,20 +2097,20 @@ " self.__create_recording_devices(excitation_times, idend_recording_times)\n", "\n", " # create weight recorder\n", - " if self.params['active_weight_recorder']:\n", + " if self.params[\"active_weight_recorder\"]:\n", " self.__create_weight_recorder()\n", "\n", " def connect(self):\n", " \"\"\"Connects network and devices\n", " \"\"\"\n", "\n", - " print('\\nConnecting network and devices...')\n", + " print(\"\\nConnecting network and devices...\")\n", " # TODO: take into account L (number of subpopulations per character) when connecting the network\n", "\n", " # connect excitatory population (EE)\n", - " if self.params['load_connections']:\n", + " if self.params[\"load_connections\"]:\n", " print(\"\\tLoading connections from file\")\n", - " self.__load_connections(label='ee_connections')\n", + " self.__load_connections(label=\"ee_connections\")\n", " else:\n", " print(\"\\tCreating new random connections\")\n", " self.__connect_excitatory_neurons()\n", @@ -2160,13 +2128,13 @@ " nest.Connect(self.inh_neurons, self.spike_recorder_inh_)\n", "\n", " # connect multimeter for recording dendritic current\n", - " if self.params['evaluate_performance']:\n", + " if self.params[\"evaluate_performance\"]:\n", " nest.Connect(self.multimeter_idend_eval, self.exc_neurons)\n", " nest.Connect(self.multimeter_idend_eval_, self.exc_neurons)\n", " nest.Connect(self.multimeter_vm_eval_, self.exc_neurons)\n", "\n", " # connect multimeter for recording dendritic current from all subpopulations of the last trial\n", - " if self.params['record_idend_last_episode']:\n", + " if self.params[\"record_idend_last_episode\"]:\n", " nest.Connect(self.multimeter_idend_last_episode, self.exc_neurons)\n", "\n", " # set min synaptic strength\n", @@ -2177,23 +2145,23 @@ " \"\"\"\n", "\n", " # the simulation time is set during the creation of the network \n", - " print('\\nSimulating {} ms.'.format(self.sim_time))\n", + " print(\"\\nSimulating {} ms.\".format(self.sim_time))\n", "\n", " nest.Simulate(self.sim_time)\n", "\n", " def __create_neuronal_populations(self):\n", - " \"\"\"'Create neuronal populations\n", + " \"\"\"Create neuronal populations\n", " \"\"\"\n", "\n", " # create excitatory population\n", - " self.exc_neurons = nest.Create(self.params['soma_model'],\n", + " self.exc_neurons = nest.Create(self.params[\"soma_model\"],\n", " self.num_exc_neurons,\n", - " params=self.params['soma_params'])\n", + " params=self.params[\"soma_params\"])\n", "\n", " # create inhibitory population\n", - " self.inh_neurons = nest.Create(self.params['inhibit_model'],\n", - " self.params['n_I'] * self.num_subpopulations,\n", - " params=self.params['inhibit_params'])\n", + " self.inh_neurons = nest.Create(self.params[\"inhibit_model\"],\n", + " self.params[\"n_I\"] * self.num_subpopulations,\n", + " params=self.params[\"inhibit_params\"])\n", "\n", " def __create_spike_generators(self, excitation_times_neuron):\n", " \"\"\"Create spike generators\n", @@ -2204,60 +2172,60 @@ " self.input_excitation_soma = {}\n", " self.input_excitation_dend = {}\n", " for char in self.vocabulary:\n", - " self.input_excitation_soma[char] = nest.Create('spike_generator')\n", - " self.input_excitation_dend[char] = nest.Create('spike_generator')\n", + " self.input_excitation_soma[char] = nest.Create(\"spike_generator\")\n", + " self.input_excitation_dend[char] = nest.Create(\"spike_generator\")\n", "\n", " # set spike generator status with the above computed excitation times\n", " for char in self.vocabulary:\n", - " nest.SetStatus(self.input_excitation_soma[char], {'spike_times': excitation_times_soma[char]})\n", + " nest.SetStatus(self.input_excitation_soma[char], {\"spike_times\": excitation_times_soma[char]})\n", " #print(\"For spike generator \" + char + \", spike times = \" + str(excitation_times_soma[char]))\n", "\n", " # this makes the first population in the sequence sparse\n", - " if self.params['sparse_first_char']:\n", + " if self.params[\"sparse_first_char\"]:\n", " first_chars = [char for seq in self.sequences for char in [seq[0]]]\n", " for char in first_chars:\n", - " nest.SetStatus(self.input_excitation_dend[char], {'spike_times': excitation_times_dend[char]})\n", + " nest.SetStatus(self.input_excitation_dend[char], {\"spike_times\": excitation_times_dend[char]})\n", "\n", " def __create_recording_devices(self, excitation_times, idend_recording_times):\n", " \"\"\"Create recording devices\n", " \"\"\"\n", " \n", " # create a spike recorder for exc neurons\n", - " self.spike_recorder_soma = nest.Create('spike_recorder', params={'record_to': 'ascii','label': 'somatic_spikes'})\n", - " self.spike_recorder_soma_ = nest.Create('spike_recorder', params={'label': 'somatic_spikes'})\n", + " self.spike_recorder_soma = nest.Create(\"spike_recorder\", params={\"record_to\": \"ascii\",\"label\": \"somatic_spikes\"})\n", + " self.spike_recorder_soma_ = nest.Create(\"spike_recorder\", params={\"label\": \"somatic_spikes\"})\n", "\n", " # create a spike recorder for inh neurons\n", - " self.spike_recorder_inh = nest.Create('spike_recorder', params={'record_to': 'ascii','label': 'inh_spikes'})\n", - " self.spike_recorder_inh_ = nest.Create('spike_recorder', params={'label': 'inh_spikes'})\n", + " self.spike_recorder_inh = nest.Create(\"spike_recorder\", params={\"record_to\": \"ascii\",\"label\": \"inh_spikes\"})\n", + " self.spike_recorder_inh_ = nest.Create(\"spike_recorder\", params={\"label\": \"inh_spikes\"})\n", "\n", " # create multimeter to record dendritic currents of exc_neurons at the time of the last element in the sequence\n", - " if self.params['evaluate_performance']:\n", - " self.multimeter_idend_eval = nest.Create('multimeter', self.num_sequences,\n", - " params={'record_from': ['I_dend'],\n", - " 'record_to': 'ascii',\n", - " 'label': 'idend_eval'})\n", + " if self.params[\"evaluate_performance\"]:\n", + " self.multimeter_idend_eval = nest.Create(\"multimeter\", self.num_sequences,\n", + " params={\"record_from\": [\"I_dend\"],\n", + " \"record_to\": \"ascii\",\n", + " \"label\": \"idend_eval\"})\n", " \n", - " self.multimeter_idend_eval_ = nest.Create('multimeter',\n", - " params={'record_from': ['I_dend'],\n", - " 'label': 'idend_eval'})\n", - " self.multimeter_vm_eval_ = nest.Create('multimeter',\n", - " params={'record_from': ['V_m'],\n", - " 'label': 'vm_eval'})\n", + " self.multimeter_idend_eval_ = nest.Create(\"multimeter\",\n", + " params={\"record_from\": [\"I_dend\"],\n", + " \"label\": \"idend_eval\"})\n", + " self.multimeter_vm_eval_ = nest.Create(\"multimeter\",\n", + " params={\"record_from\": [\"V_m\"],\n", + " \"label\": \"vm_eval\"})\n", "\n", "\n", " for i in range(self.num_sequences):\n", - " idend_eval_spec_dict = {'offset': idend_recording_times[i][0] + self.params['idend_record_time'],\n", - " 'interval': idend_recording_times[i][1] - idend_recording_times[i][0]}\n", + " idend_eval_spec_dict = {\"offset\": idend_recording_times[i][0] + self.params[\"idend_record_time\"],\n", + " \"interval\": idend_recording_times[i][1] - idend_recording_times[i][0]}\n", " nest.SetStatus(self.multimeter_idend_eval[i], idend_eval_spec_dict)\n", "\n", " # create multimeter for recording dendritic current from all subpopulations of the last episode\n", - " self.multimeter_idend_last_episode = nest.Create('multimeter', params={'record_from': ['I_dend'],\n", - " 'record_to': 'ascii',\n", - " 'label': 'idend_last_episode'})\n", + " self.multimeter_idend_last_episode = nest.Create(\"multimeter\", params={\"record_from\": [\"I_dend\"],\n", + " \"record_to\": \"ascii\",\n", + " \"label\": \"idend_last_episode\"})\n", "\n", - " idend_dict = {'interval': self.params['idend_recording_interval'],\n", - " 'start': 0.,\n", - " 'stop': np.inf}\n", + " idend_dict = {\"interval\": self.params[\"idend_recording_interval\"],\n", + " \"start\": 0.,\n", + " \"stop\": np.inf}\n", "\n", " nest.SetStatus(self.multimeter_idend_last_episode, idend_dict)\n", "\n", @@ -2265,9 +2233,9 @@ " \"\"\"Create weight recorder\n", " \"\"\"\n", "\n", - " self.wr = nest.Create('weight_recorder', {'record_to': 'ascii', 'label': 'weight_recorder'})\n", - " nest.CopyModel(params['syn_dict_ee']['synapse_model'], 'stdsp_synapse_rec', {'weight_recorder': self.wr})\n", - " self.params['syn_dict_ee']['synapse_model'] = 'stdsp_synapse_rec'\n", + " self.wr = nest.Create(\"weight_recorder\", {\"record_to\": \"ascii\", \"label\": \"weight_recorder\"})\n", + " nest.CopyModel(params[\"syn_dict_ee\"][\"synapse_model\"], \"stdsp_synapse_rec\", {\"weight_recorder\": self.wr})\n", + " self.params[\"syn_dict_ee\"][\"synapse_model\"] = \"stdsp_synapse_rec\"\n", "\n", " def __compute_timing_external_inputs(self, DeltaT, DeltaT_seq, DeltaT_cue, excitation_start, time_dend_to_somatic):\n", " \"\"\"Specifies the excitation times of the external input for each sequence element,\n", @@ -2304,8 +2272,8 @@ "\n", " excitation_times = []\n", " sim_time = excitation_start\n", - " for le in range(self.params['learning_episodes'] + 1):\n", - " print(\"Learning episode: \" + str(le) + \" of \" + str(self.params['learning_episodes'] + 1))\n", + " for le in range(self.params[\"learning_episodes\"] + 1):\n", + " print(\"Learning episode: \" + str(le) + \" of \" + str(self.params[\"learning_episodes\"] + 1))\n", "\n", " for seq_num, sequence in enumerate(self.sequences):\n", " len_seq = len(sequence)\n", @@ -2320,27 +2288,27 @@ " excitation_times_dend[char] += [sim_time - time_dend_to_somatic]\n", "\n", " # store dendritic spike times recording\n", - " if (i == len_seq - 2) and (le % self.params['episodes_to_testing'] == 0):\n", + " if (i == len_seq - 2) and (le % self.params[\"episodes_to_testing\"] == 0):\n", " idend_recording_times[seq_num] += [sim_time]\n", "\n", " excitation_times.append(sim_time)\n", "\n", - " if self.params['evaluate_replay']:\n", + " if self.params[\"evaluate_replay\"]:\n", " break\n", "\n", " # set timing between sequences\n", - " if self.params['evaluate_replay']:\n", + " if self.params[\"evaluate_replay\"]:\n", " sim_time += DeltaT_cue\n", " else:\n", " sim_time += DeltaT_seq\n", "\n", " # save data\n", - " if self.params['evaluate_performance'] or self.params['evaluate_replay']:\n", + " if self.params[\"evaluate_performance\"] or self.params[\"evaluate_replay\"]:\n", "\n", - " np.save('idend_recording_times', idend_recording_times)\n", - " print(\"Saving idend_recording_times to \" + 'idend_recording_times')\n", - " np.save('excitation_times_soma', excitation_times_soma)\n", - " np.save('excitation_times', excitation_times)\n", + " np.save(\"idend_recording_times\", idend_recording_times)\n", + " print(\"Saving idend_recording_times to \" + \"idend_recording_times\")\n", + " np.save(\"excitation_times_soma\", excitation_times_soma)\n", + " np.save(\"excitation_times\", excitation_times)\n", "\n", " self.sim_time = sim_time\n", " return excitation_times, [excitation_times_soma, excitation_times_dend], idend_recording_times\n", @@ -2357,8 +2325,8 @@ " NEST NodeCollection\n", " \"\"\"\n", "\n", - " neurons_indices = [int(index_subpopulation) * self.params['n_E'] + i for i in\n", - " range(self.params['n_E'])]\n", + " neurons_indices = [int(index_subpopulation) * self.params[\"n_E\"] + i for i in\n", + " range(self.params[\"n_E\"])]\n", "\n", " return self.exc_neurons[neurons_indices]\n", "\n", @@ -2366,10 +2334,10 @@ " \"\"\"Connect excitatory neurons\n", " \"\"\"\n", " print(\"Conn exc neurons\")\n", - " print(self.params['conn_dict_ee'])\n", - " print(self.params['syn_dict_ee'])\n", - " nest.Connect(self.exc_neurons, self.exc_neurons, conn_spec=self.params['conn_dict_ee'],\n", - " syn_spec=self.params['syn_dict_ee'])\n", + " print(self.params[\"conn_dict_ee\"])\n", + " print(self.params[\"syn_dict_ee\"])\n", + " nest.Connect(self.exc_neurons, self.exc_neurons, conn_spec=self.params[\"conn_dict_ee\"],\n", + " syn_spec=self.params[\"syn_dict_ee\"])\n", "\n", " def __connect_inhibitory_neurons(self):\n", " \"\"\"Connect inhibitory neurons\n", @@ -2380,35 +2348,35 @@ " subpopulation_neurons = self.__get_subpopulation_neurons(subpopulation_index)\n", "\n", " # connect neurons within the same mini-subpopulation to the inhibitory population\n", - " nest.Connect(subpopulation_neurons, self.inh_neurons[k], syn_spec=self.params['syn_dict_ie'])\n", + " nest.Connect(subpopulation_neurons, self.inh_neurons[k], syn_spec=self.params[\"syn_dict_ie\"])\n", "\n", " # connect the inhibitory neurons to the neurons within the same mini-subpopulation\n", - " nest.Connect(self.inh_neurons[k], subpopulation_neurons, syn_spec=self.params['syn_dict_ei'])\n", + " nest.Connect(self.inh_neurons[k], subpopulation_neurons, syn_spec=self.params[\"syn_dict_ei\"])\n", "\n", " def __connect_external_inputs_to_subpopulations(self):\n", " \"\"\"Connect external inputs to subpopulations\n", " \"\"\"\n", "\n", " # get input encoding\n", - " self.characters_to_subpopulations = self.__stimulus_preference(fname='characters_to_subpopulations')\n", + " self.characters_to_subpopulations = self.__stimulus_preference(fname=\"characters_to_subpopulations\")\n", "\n", " # save characters_to_subpopulations for evaluation\n", - " if self.params['evaluate_performance'] or self.params['evaluate_replay']:\n", - " fname = 'characters_to_subpopulations'\n", + " if self.params[\"evaluate_performance\"] or self.params[\"evaluate_replay\"]:\n", + " fname = \"characters_to_subpopulations\"\n", " np.save(fname, self.characters_to_subpopulations)\n", "\n", " for char in self.vocabulary:\n", " subpopulations_indices = self.characters_to_subpopulations[char]\n", "\n", - " # receptor type 1 correspond to the feedforward synapse of the 'iaf_psc_exp_multisynapse' model\n", + " # receptor type 1 correspond to the feedforward synapse of the \"iaf_psc_exp_multisynapse\" model\n", " for subpopulation_index in subpopulations_indices:\n", " subpopulation_neurons = self.__get_subpopulation_neurons(subpopulation_index)\n", " nest.Connect(self.input_excitation_soma[char], subpopulation_neurons,\n", - " self.params['conn_dict_ex'], syn_spec=self.params['syn_dict_ex'])\n", + " self.params[\"conn_dict_ex\"], syn_spec=self.params[\"syn_dict_ex\"])\n", " nest.Connect(self.input_excitation_dend[char], subpopulation_neurons,\n", - " self.params['conn_dict_edx'], syn_spec=self.params['syn_dict_edx'])\n", + " self.params[\"conn_dict_edx\"], syn_spec=self.params[\"syn_dict_edx\"])\n", "\n", - " def __stimulus_preference(self, fname='characters_to_subpopulations'):\n", + " def __stimulus_preference(self, fname=\"characters_to_subpopulations\"):\n", " \"\"\"Assign a subset of subpopulations to a each element in the vocabulary.\n", "\n", " Parameters\n", @@ -2420,7 +2388,7 @@ " characters_to_subpopulations: dict\n", " \"\"\"\n", "\n", - " if len(self.vocabulary) * self.params['L'] > self.num_subpopulations:\n", + " if len(self.vocabulary) * self.params[\"L\"] > self.num_subpopulations:\n", " raise ValueError(\n", " \"num_subpopulations needs to be large than length_user_characters*num_subpopulations_per_character\")\n", "\n", @@ -2431,33 +2399,33 @@ " permuted_subpopulation_indices = subpopulation_indices\n", " index_characters_to_subpopulations = []\n", "\n", - " if self.params['load_connections']:\n", + " if self.params[\"load_connections\"]:\n", " # load connectivity: from characters to mini-subpopulations\n", " characters_to_subpopulations = load_input_encoding( fname)\n", " else:\n", " for char in self.vocabulary:\n", " # randomly select a subset of mini-subpopulations for a character\n", - " characters_to_subpopulations[char] = permuted_subpopulation_indices[:self.params['L']]\n", + " characters_to_subpopulations[char] = permuted_subpopulation_indices[:self.params[\"L\"]]\n", " # delete mini-subpopulations from the permuted_subpopulation_indices that are already selected\n", - " permuted_subpopulation_indices = permuted_subpopulation_indices[self.params['L']:]\n", + " permuted_subpopulation_indices = permuted_subpopulation_indices[self.params[\"L\"]:]\n", "\n", " return characters_to_subpopulations\n", "\n", " def __set_min_synaptic_strength(self):\n", " \"\"\"Set synaptic Wmin\"\"\"\n", "\n", - " connections = nest.GetConnections(synapse_model=self.params['syn_dict_ee']['synapse_model'])\n", + " connections = nest.GetConnections(synapse_model=self.params[\"syn_dict_ee\"][\"synapse_model\"])\n", "\n", - " if \"stdsp\" in self.params['syn_dict_ee']['synapse_model']:\n", + " if \"stdsp\" in self.params[\"syn_dict_ee\"][\"synapse_model\"]:\n", " if \"synapse_nestml\" in synapse_model_name:\n", - " connections.set({'permanence_min': connections.permanence})\n", + " connections.set({\"permanence_min\": connections.permanence})\n", " else:\n", - " connections.set({'Pmin': connections.permanence})\n", + " connections.set({\"Pmin\": connections.permanence})\n", " else:\n", " assert np.unique(connections.synapse_model)[0] == \"static_synapse\"\n", " # static synapse, no need to set a min weight!\n", "\n", - " def save_connections(self, fname='ee_connections'):\n", + " def save_connections(self, fname=\"ee_connections\"):\n", " \"\"\"Save connection matrix\n", "\n", " Parameters\n", @@ -2466,13 +2434,13 @@ " name of the stored file\n", " \"\"\"\n", "\n", - " print('\\nSave connections to ' + '%s' % fname + '...')\n", - " connections_all = nest.GetConnections(synapse_model=self.params['syn_dict_ee']['synapse_model'])\n", - " connections = nest.GetStatus(connections_all, ['target', 'source', 'weight', 'permanence'])\n", + " print(\"\\nSave connections to \" + \"%s\" % fname + \"...\")\n", + " connections_all = nest.GetConnections(synapse_model=self.params[\"syn_dict_ee\"][\"synapse_model\"])\n", + " connections = nest.GetStatus(connections_all, [\"target\", \"source\", \"weight\", \"permanence\"])\n", " np.save(fname, connections)\n", - " print('\\n -> finished saving connections!')\n", + " print(\"\\n -> finished saving connections!\")\n", " \n", - " def __load_connections(self, label='ee_connections'):\n", + " def __load_connections(self, label=\"ee_connections\"):\n", " \"\"\"Load connection matrix\n", " \n", " Parameters\n", @@ -2481,47 +2449,47 @@ " name of the stored file\n", " \"\"\"\n", "\n", - " assert self.params['syn_dict_ee']['synapse_model'] != 'stdsp_synapse_rec', \"synapse model not tested yet\"\n", + " assert self.params[\"syn_dict_ee\"][\"synapse_model\"] != \"stdsp_synapse_rec\", \"synapse model not tested yet\"\n", "\n", - " print('Load connections from ' + label + '...')\n", - " conns = np.load('%s.npy' % label)\n", + " print(\"Load connections from \" + label + \"...\")\n", + " conns = np.load(\"%s.npy\" % label)\n", " conns_tg = [int(conn[0]) for conn in conns]\n", " conns_src = [int(conn[1]) for conn in conns]\n", " conns_weights = [conn[2] for conn in conns]\n", "\n", - " if \"stdsp\" in self.params['syn_dict_ee']['synapse_model']:\n", + " if \"stdsp\" in self.params[\"syn_dict_ee\"][\"synapse_model\"]:\n", " conns_perms = [conn[3] for conn in conns]\n", "\n", - " if self.params['evaluate_replay']:\n", + " if self.params[\"evaluate_replay\"]:\n", " print(\"\\tEvaluate replay, using static synapses\")\n", - " syn_dict = {'receptor_type': 2,\n", - " 'delay': [self.params['syn_dict_ee']['delay']] * len(conns_weights),\n", - " 'weight': conns_weights}\n", - " nest.Connect(conns_src, conns_tg, 'one_to_one', syn_dict)\n", + " syn_dict = {\"receptor_type\": 2,\n", + " \"delay\": [self.params[\"syn_dict_ee\"][\"delay\"]] * len(conns_weights),\n", + " \"weight\": conns_weights}\n", + " nest.Connect(conns_src, conns_tg, \"one_to_one\", syn_dict)\n", " else:\n", - " print(\"\\tUsing synapse model: \" + self.params['syn_dict_ee']['synapse_model'])\n", + " print(\"\\tUsing synapse model: \" + self.params[\"syn_dict_ee\"][\"synapse_model\"])\n", " \n", - " syn_dict_ee = copy.deepcopy(self.params['syn_dict_ee'])\n", + " syn_dict_ee = copy.deepcopy(self.params[\"syn_dict_ee\"])\n", "\n", - " del syn_dict_ee['synapse_model']\n", - " del syn_dict_ee['weight']\n", - " del syn_dict_ee['receptor_type']\n", - " if \"stdsp\" in self.params['syn_dict_ee']['synapse_model']:\n", - " del syn_dict_ee['permanence']\n", + " del syn_dict_ee[\"synapse_model\"]\n", + " del syn_dict_ee[\"weight\"]\n", + " del syn_dict_ee[\"receptor_type\"]\n", + " if \"stdsp\" in self.params[\"syn_dict_ee\"][\"synapse_model\"]:\n", + " del syn_dict_ee[\"permanence\"]\n", "\n", - " nest.SetDefaults(self.params['syn_dict_ee']['synapse_model'], syn_dict_ee)\n", + " nest.SetDefaults(self.params[\"syn_dict_ee\"][\"synapse_model\"], syn_dict_ee)\n", "\n", - " if \"stdsp\" in self.params['syn_dict_ee']['synapse_model']:\n", - " syn_dict = {'synapse_model': self.params['syn_dict_ee']['synapse_model'],\n", - " 'receptor_type': 2,\n", - " 'weight': conns_weights,\n", - " 'permanence': conns_perms}\n", + " if \"stdsp\" in self.params[\"syn_dict_ee\"][\"synapse_model\"]:\n", + " syn_dict = {\"synapse_model\": self.params[\"syn_dict_ee\"][\"synapse_model\"],\n", + " \"receptor_type\": 2,\n", + " \"weight\": conns_weights,\n", + " \"permanence\": conns_perms}\n", " else:\n", - " syn_dict = {'synapse_model': self.params['syn_dict_ee']['synapse_model'],\n", - " 'receptor_type': 2,\n", - " 'weight': conns_weights}\n", + " syn_dict = {\"synapse_model\": self.params[\"syn_dict_ee\"][\"synapse_model\"],\n", + " \"receptor_type\": 2,\n", + " \"weight\": conns_weights}\n", "\n", - " nest.Connect(conns_src, conns_tg, 'one_to_one', syn_dict)\n", + " nest.Connect(conns_src, conns_tg, \"one_to_one\", syn_dict)\n", "\n", " def __get_time_constant_dendritic_rate(self, DeltaT=40., DeltaT_seq=100., calibration=100, target_firing_rate=1):\n", " \"\"\"Compute time constant of the dendritic AP rate,\n", @@ -2591,187 +2559,181 @@ "\n", " p = {}\n", " \n", - " p['dt'] = 0.1 # simulation time resolution (ms)\n", - " p['print_simulation_progress'] = False # print the time progress -- True might cause issues with Jupyter\n", + " p[\"dt\"] = 0.1 # simulation time resolution (ms)\n", + " p[\"print_simulation_progress\"] = False # print the time progress -- True might cause issues with Jupyter\n", " \n", " # neuron parameters of the excitatory neurons\n", - " p['soma_model'] = neuron_model_name\n", - " p['soma_params'] = {}\n", - " p['soma_params']['C_m'] = 250. # membrane capacitance (pF)\n", - " p['soma_params']['E_L'] = 0. # resting membrane potential (mV)\n", - " # p['soma_params']['I_e'] = 0. # external DC currents (pA)\n", - " p['soma_params']['V_m'] = 0. # initial potential (mV)\n", - " p['soma_params']['V_reset'] = 0. # reset potential (mV)\n", - " p['soma_params']['V_th'] = 20. # spike threshold (mV)\n", - " p['soma_params']['t_ref'] = 10. # refractory period\n", - " p['soma_params']['tau_m'] = 10. # membrane time constant (ms)\n", - " p['soma_params']['tau_syn1'] = 2. # synaptic time constant: external input (receptor 1)\n", - " p['soma_params']['tau_syn2'] = 5. # synaptic time constant: dendrtic input (receptor 2)\n", - " p['soma_params']['tau_syn3'] = 1. # synaptic time constant: inhibitory input (receptor 3)\n", + " p[\"soma_model\"] = neuron_model_name\n", + " p[\"soma_params\"] = {}\n", + " p[\"soma_params\"][\"C_m\"] = 250. # membrane capacitance (pF)\n", + " p[\"soma_params\"][\"E_L\"] = 0. # resting membrane potential (mV)\n", + " # p[\"soma_params\"][\"I_e\"] = 0. # external DC currents (pA)\n", + " p[\"soma_params\"][\"V_m\"] = 0. # initial potential (mV)\n", + " p[\"soma_params\"][\"V_reset\"] = 0. # reset potential (mV)\n", + " p[\"soma_params\"][\"V_th\"] = 20. # spike threshold (mV)\n", + " p[\"soma_params\"][\"t_ref\"] = 10. # refractory period\n", + " p[\"soma_params\"][\"tau_m\"] = 10. # membrane time constant (ms)\n", + " p[\"soma_params\"][\"tau_syn1\"] = 2. # synaptic time constant: external input (receptor 1)\n", + " p[\"soma_params\"][\"tau_syn2\"] = 5. # synaptic time constant: dendrtic input (receptor 2)\n", + " p[\"soma_params\"][\"tau_syn3\"] = 1. # synaptic time constant: inhibitory input (receptor 3)\n", " # dendritic action potential\n", - " p['soma_params']['I_p'] = 200. # current clamp value for I_dAP during a dendritic action potenti\n", - " p['soma_params']['tau_dAP'] = 60. # time window over which the dendritic current clamp is active\n", - " p['soma_params']['theta_dAP'] = 59. # current threshold for a dendritic action potential\n", + " p[\"soma_params\"][\"I_p\"] = 200. # current clamp value for I_dAP during a dendritic action potenti\n", + " p[\"soma_params\"][\"tau_dAP\"] = 60. # time window over which the dendritic current clamp is active\n", + " p[\"soma_params\"][\"theta_dAP\"] = 59. # current threshold for a dendritic action potential\n", " \n", - " p['soma_params']['I_dend_incr'] = 2.71 / (p['soma_params']['tau_syn2'])\n", + " p[\"soma_params\"][\"I_dend_incr\"] = 2.71 / (p[\"soma_params\"][\"tau_syn2\"])\n", " \n", - " p['fixed_somatic_delay'] = 2 # this is an approximate time of how long it takes the soma to fire\n", + " p[\"fixed_somatic_delay\"] = 2 # this is an approximate time of how long it takes the soma to fire\n", " # upon receiving an external stimulus \n", " \n", " # parameters for setting up the network \n", - " p['M'] = 6 # number of subpopulations\n", - " p['n_E'] = 150 # number of excitatory neurons per subpopulation\n", - " p['n_I'] = 1 # number of inhibitory neurons per subpopulation\n", - " p['L'] = 1 # number of subpopulations that represents one sequence element\n", - " p['pattern_size'] = 20 # sparse set of active neurons per subpopulation\n", + " p[\"M\"] = 6 # number of subpopulations\n", + " p[\"n_E\"] = 150 # number of excitatory neurons per subpopulation\n", + " p[\"n_I\"] = 1 # number of inhibitory neurons per subpopulation\n", + " p[\"L\"] = 1 # number of subpopulations that represents one sequence element\n", + " p[\"pattern_size\"] = 20 # sparse set of active neurons per subpopulation\n", " \n", " # neuron parameters for the inhibitory neuron\n", - " p['inhibit_model'] = 'iaf_psc_exp'\n", - " p['inhibit_params'] = {}\n", - " p['inhibit_params']['C_m'] = 250. # membrane capacitance (pF)\n", - " p['inhibit_params']['E_L'] = 0. # resting membrane potential (mV)\n", - " p['inhibit_params']['I_e'] = 0. # external DC currents (pA)\n", - " p['inhibit_params']['V_m'] = 0. # initial potential (mV)\n", - " p['inhibit_params']['V_reset'] = 0. # reset potential (mV)\n", - " p['inhibit_params']['V_th'] = 15. # spike threshold (mV)\n", - " p['inhibit_params']['t_ref'] = 2.0 # refractory period\n", - " p['inhibit_params']['tau_m'] = 5. # membrane time constant (ms)\n", - " p['inhibit_params']['tau_syn_ex'] = .5 # synaptic time constant of an excitatory input (ms) \n", - " p['inhibit_params']['tau_syn_in'] = 1.65 # synaptic time constant of an inhibitory input (ms)\n", + " p[\"inhibit_model\"] = \"iaf_psc_exp\"\n", + " p[\"inhibit_params\"] = {}\n", + " p[\"inhibit_params\"][\"C_m\"] = 250. # membrane capacitance (pF)\n", + " p[\"inhibit_params\"][\"E_L\"] = 0. # resting membrane potential (mV)\n", + " p[\"inhibit_params\"][\"I_e\"] = 0. # external DC currents (pA)\n", + " p[\"inhibit_params\"][\"V_m\"] = 0. # initial potential (mV)\n", + " p[\"inhibit_params\"][\"V_reset\"] = 0. # reset potential (mV)\n", + " p[\"inhibit_params\"][\"V_th\"] = 15. # spike threshold (mV)\n", + " p[\"inhibit_params\"][\"t_ref\"] = 2.0 # refractory period\n", + " p[\"inhibit_params\"][\"tau_m\"] = 5. # membrane time constant (ms)\n", + " p[\"inhibit_params\"][\"tau_syn_ex\"] = .5 # synaptic time constant of an excitatory input (ms) \n", + " p[\"inhibit_params\"][\"tau_syn_in\"] = 1.65 # synaptic time constant of an inhibitory input (ms)\n", " \n", " # synaptic parameters\n", - " p['J_EX_psp'] = 1.1 * p['soma_params']['V_th'] # somatic PSP as a response to an external input\n", - " p['J_IE_psp'] = 1.2 * p['inhibit_params']['V_th'] # inhibitory PSP as a response to an input from E neuron\n", - " p['J_IE_psp'] /= p['pattern_size']\n", + " p[\"J_EX_psp\"] = 1.1 * p[\"soma_params\"][\"V_th\"] # somatic PSP as a response to an external input\n", + " p[\"J_IE_psp\"] = 1.2 * p[\"inhibit_params\"][\"V_th\"] # inhibitory PSP as a response to an input from E neuron\n", + " p[\"J_IE_psp\"] /= p[\"pattern_size\"]\n", "\n", " \n", - " p['J_EI_psp'] = -2 * p['soma_params']['V_th'] # somatic PSP as a response to an inhibitory input\n", - " p['convergence'] = 5\n", + " p[\"J_EI_psp\"] = -2 * p[\"soma_params\"][\"V_th\"] # somatic PSP as a response to an inhibitory input\n", + " p[\"convergence\"] = 5\n", " \n", " # connection details\n", - " p['rule'] = 'fixed_indegree' \n", - " p['connection_prob'] = 0.2\n", + " p[\"rule\"] = \"fixed_indegree\" \n", + " p[\"connection_prob\"] = 0.2\n", " \n", " # parameters for ee synapses (stdsp)\n", - " p['syn_dict_ee'] = {}\n", - " p['permanence_min'] = 0.\n", - " p['permanence_max'] = 8.\n", + " p[\"syn_dict_ee\"] = {}\n", + " p[\"permanence_min\"] = 0.\n", + " p[\"permanence_max\"] = 8.\n", "\n", - " p['calibration'] = 0.\n", - " p['syn_dict_ee']['weight'] = 0.01 # synaptic weight\n", - " p['syn_dict_ee']['synapse_model'] = synapse_model_name # synapse model\n", + " p[\"calibration\"] = 0.\n", + " p[\"syn_dict_ee\"][\"weight\"] = 0.01 # synaptic weight\n", + " p[\"syn_dict_ee\"][\"synapse_model\"] = synapse_model_name # synapse model\n", " if \"synapse_nestml\" in synapse_model_name:\n", - " p['syn_dict_ee']['permanence_threshold'] = 10. # synapse maturity threshold\n", - " p['syn_dict_ee']['tau_pre_trace'] = 20. # plasticity time constant (potentiation)\n", + " p[\"syn_dict_ee\"][\"permanence_threshold\"] = 10. # synapse maturity threshold\n", + " p[\"syn_dict_ee\"][\"tau_pre_trace\"] = 20. # plasticity time constant (potentiation)\n", " else:\n", - " p['syn_dict_ee']['th_perm'] = 10. # synapse maturity threshold\n", - " p['syn_dict_ee']['tau_plus'] = 20. # plasticity time constant (potentiation)\n", - " p['syn_dict_ee']['delay'] = 2. # dendritic delay \n", - " p['syn_dict_ee']['receptor_type'] = 2 # receptor corresponding to the dendritic input\n", - " p['syn_dict_ee']['lambda_plus'] = 0.08 # potentiation rate\n", - " p['syn_dict_ee']['zt'] = 1. # target dAP trace\n", - " p['syn_dict_ee']['lambda_h'] = 0.014 # homeostasis rate\n", - " p['syn_dict_ee']['Wmax'] = 1.1 * p['soma_params']['theta_dAP'] / p['convergence'] # Maximum allowed weight\n", + " p[\"syn_dict_ee\"][\"th_perm\"] = 10. # synapse maturity threshold\n", + " p[\"syn_dict_ee\"][\"tau_plus\"] = 20. # plasticity time constant (potentiation)\n", + " p[\"syn_dict_ee\"][\"delay\"] = 2. # dendritic delay \n", + " p[\"syn_dict_ee\"][\"receptor_type\"] = 2 # receptor corresponding to the dendritic input\n", + " p[\"syn_dict_ee\"][\"lambda_plus\"] = 0.08 # potentiation rate\n", + " p[\"syn_dict_ee\"][\"zt\"] = 1. # target dAP trace\n", + " p[\"syn_dict_ee\"][\"lambda_h\"] = 0.014 # homeostasis rate\n", + " p[\"syn_dict_ee\"][\"Wmax\"] = 1.1 * p[\"soma_params\"][\"theta_dAP\"] / p[\"convergence\"] # Maximum allowed weight\n", " if \"synapse_nestml\" in synapse_model_name:\n", - " p['syn_dict_ee']['permanence_max'] = 20. # Maximum allowed permanence\n", - " p['syn_dict_ee']['permanence_min'] = 1. # Minimum allowed permanence\n", + " p[\"syn_dict_ee\"][\"permanence_max\"] = 20. # Maximum allowed permanence\n", + " p[\"syn_dict_ee\"][\"permanence_min\"] = 1. # Minimum allowed permanence\n", " else:\n", - " p['syn_dict_ee']['Pmax'] = 20. # Maximum allowed permanence\n", - " p['syn_dict_ee']['Pmin'] = 1. # Minimum allowed permanence\n", - " p['syn_dict_ee']['lambda_minus'] = 0.0015 # depression rate\n", + " p[\"syn_dict_ee\"][\"Pmax\"] = 20. # Maximum allowed permanence\n", + " p[\"syn_dict_ee\"][\"Pmin\"] = 1. # Minimum allowed permanence\n", + " p[\"syn_dict_ee\"][\"lambda_minus\"] = 0.0015 # depression rate\n", " if \"synapse_nestml\" in synapse_model_name:\n", - " p['syn_dict_ee']['dt_min'] = 4. # minimum time lag of the STDP window\n", + " p[\"syn_dict_ee\"][\"dt_min\"] = 4. # minimum time lag of the STDP window\n", " else:\n", - " p['syn_dict_ee']['dt_min'] = -4. # minimum time lag of the STDP window\n", + " p[\"syn_dict_ee\"][\"dt_min\"] = -4. # minimum time lag of the STDP window\n", " \n", " # parameters of EX synapses (external to soma of E neurons)\n", - " p['conn_dict_ex'] = {}\n", - " p['syn_dict_ex'] = {}\n", - " p['syn_dict_ex']['receptor_type'] = 1 # receptor corresponding to external input\n", - " p['syn_dict_ex']['delay'] = DELAY # dendritic delay\n", - " p['conn_dict_ex']['rule'] = 'all_to_all' # connection rule\n", + " p[\"conn_dict_ex\"] = {}\n", + " p[\"syn_dict_ex\"] = {}\n", + " p[\"syn_dict_ex\"][\"receptor_type\"] = 1 # receptor corresponding to external input\n", + " p[\"syn_dict_ex\"][\"delay\"] = DELAY # dendritic delay\n", + " p[\"conn_dict_ex\"][\"rule\"] = \"all_to_all\" # connection rule\n", " \n", " # parameters of EdX synapses (external to dendrite of E neurons) \n", - " p['conn_dict_edx'] = {}\n", - " p['syn_dict_edx'] = {}\n", - " p['syn_dict_edx']['receptor_type'] = 2 # receptor corresponding to the dendritic input\n", - " p['syn_dict_edx']['delay'] = DELAY # dendritic delay\n", - " p['syn_dict_edx']['weight'] = 1.4 * p['soma_params']['theta_dAP']\n", - " p['conn_dict_edx']['rule'] = 'fixed_outdegree' # connection rule\n", - " p['conn_dict_edx']['outdegree'] = p['pattern_size'] + 1 # outdegree\n", + " p[\"conn_dict_edx\"] = {}\n", + " p[\"syn_dict_edx\"] = {}\n", + " p[\"syn_dict_edx\"][\"receptor_type\"] = 2 # receptor corresponding to the dendritic input\n", + " p[\"syn_dict_edx\"][\"delay\"] = DELAY # dendritic delay\n", + " p[\"syn_dict_edx\"][\"weight\"] = 1.4 * p[\"soma_params\"][\"theta_dAP\"]\n", + " p[\"conn_dict_edx\"][\"rule\"] = \"fixed_outdegree\" # connection rule\n", + " p[\"conn_dict_edx\"][\"outdegree\"] = p[\"pattern_size\"] + 1 # outdegree\n", " \n", " # parameters for IE synapses \n", - " p['syn_dict_ie'] = {}\n", - " #p['conn_dict_ie'] = {}\n", - " p['syn_dict_ie']['synapse_model'] = 'static_synapse' # synapse model\n", - " p['syn_dict_ie']['delay'] = DELAY # dendritic delay\n", - " #p['conn_dict_ie']['rule'] = 'fixed_indegree' # connection rule\n", - " #p['conn_dict_ie']['indegree'] = 5 # indegree \n", + " p[\"syn_dict_ie\"] = {}\n", + " p[\"syn_dict_ie\"][\"synapse_model\"] = \"static_synapse\" # synapse model\n", + " p[\"syn_dict_ie\"][\"delay\"] = DELAY # dendritic delay\n", " \n", " # parameters for EI synapses\n", - " p['syn_dict_ei'] = {}\n", - " #p['conn_dict_ei'] = {}\n", - " p['syn_dict_ei']['synapse_model'] = 'static_synapse' # synapse model\n", - " p['syn_dict_ei']['delay'] = DELAY # dendritic delay\n", - " p['syn_dict_ei']['receptor_type'] = 3 # receptor corresponding to the inhibitory input \n", - " #p['conn_dict_ei']['rule'] = 'fixed_indegree' # connection rule\n", - " #p['conn_dict_ei']['indegree'] = 20 # indegree\n", + " p[\"syn_dict_ei\"] = {}\n", + " p[\"syn_dict_ei\"][\"synapse_model\"] = \"static_synapse\" # synapse model\n", + " p[\"syn_dict_ei\"][\"delay\"] = DELAY # dendritic delay\n", + " p[\"syn_dict_ei\"][\"receptor_type\"] = 3 # receptor corresponding to the inhibitory input \n", " \n", " # stimulus parameters\n", - " p['DeltaT'] = 40. # inter-stimulus interval\n", - " p['excitation_start'] = 30. # time at which the external stimulation begins\n", - " p['time_dend_to_somatic'] = 20. # time between the dAP activation and the somatic activation (only used if sparse_first_char is True) \n", - " p['DeltaT_cue'] = 80. # inter-cue interval during replay\n", + " p[\"DeltaT\"] = 40. # inter-stimulus interval\n", + " p[\"excitation_start\"] = 30. # time at which the external stimulation begins\n", + " p[\"time_dend_to_somatic\"] = 20. # time between the dAP activation and the somatic activation (only used if sparse_first_char is True) \n", + " p[\"DeltaT_cue\"] = 80. # inter-cue interval during replay\n", " \n", " # simulation parameters \n", - " p['dt'] = 0.1 # simulation time resolution (ms)\n", - " p['overwrite_files'] = True # if True, data will be overwritten,\n", + " p[\"dt\"] = 0.1 # simulation time resolution (ms)\n", + " p[\"overwrite_files\"] = True # if True, data will be overwritten,\n", " # if False, a NESTError is raised if the files already exist\n", - " p['seed'] = 111 # seed for NEST\n", - " p['pad_time'] = 5.\n", - " p['idend_recording_interval'] = 10 * p['dt'] # dendritic current recording resolution\n", - " p['idend_record_time'] = 8. # time interval after the external stimulation at which the dendritic current is recorded\n", - " p['evaluate_performance'] = True # if turned on, we monitor the dendritic current at a certain time steps\n", + " p[\"seed\"] = 111 # seed for NEST\n", + " p[\"pad_time\"] = 5.\n", + " p[\"idend_recording_interval\"] = 10 * p[\"dt\"] # dendritic current recording resolution\n", + " p[\"idend_record_time\"] = 8. # time interval after the external stimulation at which the dendritic current is recorded\n", + " p[\"evaluate_performance\"] = True # if turned on, we monitor the dendritic current at a certain time steps\n", " # during the simulation. This then is used for the prediction performance assessment\n", - " p['evaluate_replay'] = False \n", - " p['record_idend_last_episode'] = True # used for debugging, if turned on we record the dendritic current of all neurons\n", + " p[\"evaluate_replay\"] = False \n", + " p[\"record_idend_last_episode\"] = True # used for debugging, if turned on we record the dendritic current of all neurons\n", " # this can consume too much memory\n", - " p['store_connections'] = False \n", - " p['load_connections'] = False\n", - " p['sparse_first_char'] = False # if turned on, the dAP of a subset of neurons in the subpopulation representing \n", + " p[\"store_connections\"] = False \n", + " p[\"load_connections\"] = False\n", + " p[\"sparse_first_char\"] = False # if turned on, the dAP of a subset of neurons in the subpopulation representing \n", " # first sequence elements is activated externally \n", - " p['active_weight_recorder'] = False # if turned on, the weights are recorded every presynaptic spike\n", + " p[\"active_weight_recorder\"] = False # if turned on, the weights are recorded every presynaptic spike\n", " \n", " # task parameters\n", - " p['task'] = {}\n", - " p['task']['task_name'] = 'hard_coded' # name of the task\n", - " p['task']['task_type'] = 1 # this chooses between three hard coded sequence sets (see ./utils.py)\n", - " p['task']['vocab_size'] = 6 # vocabulary size\n", - " p['task']['seed'] = 111 # seed number\n", - " p['task']['store_training_data'] = True # if turned on, the sequence set is stored \n", + " p[\"task\"] = {}\n", + " p[\"task\"][\"task_name\"] = \"hard_coded\" # name of the task\n", + " p[\"task\"][\"task_type\"] = 1 # this chooses between three hard coded sequence sets (see ./utils.py)\n", + " p[\"task\"][\"vocab_size\"] = 6 # vocabulary size\n", + " p[\"task\"][\"seed\"] = 111 # seed number\n", + " p[\"task\"][\"store_training_data\"] = True # if turned on, the sequence set is stored \n", " \n", - " p['learning_episodes'] = 40 # total number of training episodes ('repetitions of the sequence sets')\n", + " p[\"learning_episodes\"] = 40 # total number of training episodes (\"repetitions of the sequence sets\")\n", "\n", " # ----------------------------------\n", " # task parameters: alternative\n", " # IMPOSSIBLE TASK! First and last elements overlap between different sequences\n", " \n", - "# p['task'] = {}\n", - "# p['task']['task_name'] = 'hard_coded' # name of the task\n", - "# p['task']['task_type'] = 6 # this chooses between three hard coded sequence sets (see ./utils.py)\n", - "# p['task']['vocab_size'] = 7 # vocabulary size\n", - "# p['task']['store_training_data'] = True # if turned on, the sequence set is stored \n", - "# p['M'] = p['task']['vocab_size'] # number of subpopulations\n", - "\n", - "# p['learning_episodes'] = 50 # total number of training episodes ('repetitions of the sequence sets')\n", + "# p[\"task\"] = {}\n", + "# p[\"task\"][\"task_name\"] = \"hard_coded\" # name of the task\n", + "# p[\"task\"][\"task_type\"] = 6 # this chooses between three hard coded sequence sets (see ./utils.py)\n", + "# p[\"task\"][\"vocab_size\"] = 7 # vocabulary size\n", + "# p[\"task\"][\"store_training_data\"] = True # if turned on, the sequence set is stored \n", + "# p[\"M\"] = p[\"task\"][\"vocab_size\"] # number of subpopulations\n", + "\n", + "# p[\"learning_episodes\"] = 50 # total number of training episodes (\"repetitions of the sequence sets\")\n", " # ----------------------------------\n", " \n", " # setup the training loop \n", - " p['episodes_to_testing'] = 1 # number of episodes after which we measure the prediction perfomance\n", + " p[\"episodes_to_testing\"] = 1 # number of episodes after which we measure the prediction perfomance\n", "\n", " if \"synapse_nestml\" not in synapse_model_name:\n", - " p['mu_plus']= 0.0 \n", - " p['mu_minus']= 0.0\n", + " p[\"mu_plus\"]= 0.0 \n", + " p[\"mu_minus\"]= 0.0\n", " \n", " return p\n", "\n", @@ -2803,7 +2765,7 @@ } ], "source": [ - "sequences, _, vocabulary = generate_sequences(params['task'], fname=\"sequences\")\n", + "sequences, _, vocabulary = generate_sequences(params[\"task\"], fname=\"sequences\")\n", "\n", "print(\"Vocabulary: \" + str(vocabulary))\n", "print(\"Sequences: \" + str(sequences))" @@ -2832,7 +2794,7 @@ "PSC maximum J_EX: 4112.209148 pA\n", "PSC maximum J_IE: 581.197349 pA\n", "PSC maximum J_EI: -12915.496650 pA\n", - "Model parameters: {'dt': 0.1, 'print_simulation_progress': False, 'soma_model': 'iaf_psc_exp_nonlineardendrite_neuron_nestml__with_stdsp_synapse_nestml', 'soma_params': {'C_m': 250.0, 'E_L': 0.0, 'V_m': 0.0, 'V_reset': 0.0, 'V_th': 20.0, 't_ref': 10.0, 'tau_m': 10.0, 'tau_syn1': 2.0, 'tau_syn2': 5.0, 'tau_syn3': 1.0, 'I_p': 200.0, 'tau_dAP': 60.0, 'theta_dAP': 59.0, 'I_dend_incr': 0.542}, 'fixed_somatic_delay': 2, 'M': 6, 'n_E': 150, 'n_I': 1, 'L': 1, 'pattern_size': 20, 'inhibit_model': 'iaf_psc_exp', 'inhibit_params': {'C_m': 250.0, 'E_L': 0.0, 'I_e': 0.0, 'V_m': 0.0, 'V_reset': 0.0, 'V_th': 15.0, 't_ref': 2.0, 'tau_m': 5.0, 'tau_syn_ex': 0.5, 'tau_syn_in': 1.65}, 'J_EX_psp': 22.0, 'J_IE_psp': 0.9, 'J_EI_psp': -40.0, 'convergence': 5, 'rule': 'fixed_indegree', 'connection_prob': 0.2, 'syn_dict_ee': {'weight': 0.01, 'synapse_model': 'stdsp_synapse_nestml__with_iaf_psc_exp_nonlineardendrite_neuron_nestml', 'permanence_threshold': 10.0, 'tau_pre_trace': 20.0, 'delay': 2.0, 'receptor_type': 2, 'lambda_plus': 0.08, 'zt': 1.0, 'lambda_h': 0.014, 'Wmax': 12.98, 'permanence_max': 20.0, 'permanence_min': 1.0, 'lambda_minus': 0.0015, 'dt_min': 4.0, 'permanence': , 'dt_max': 80.0}, 'permanence_min': 0.0, 'permanence_max': 8.0, 'calibration': 0.0, 'conn_dict_ex': {'rule': 'all_to_all'}, 'syn_dict_ex': {'receptor_type': 1, 'delay': 0.1, 'weight': 4112.209148358356}, 'conn_dict_edx': {'rule': 'fixed_outdegree', 'outdegree': 21}, 'syn_dict_edx': {'receptor_type': 2, 'delay': 0.1, 'weight': 82.6}, 'syn_dict_ie': {'synapse_model': 'static_synapse', 'delay': 0.1, 'weight': 581.1973492566976}, 'syn_dict_ei': {'synapse_model': 'static_synapse', 'delay': 0.1, 'receptor_type': 3, 'weight': -12915.496650148836}, 'DeltaT': 40.0, 'excitation_start': 30.0, 'time_dend_to_somatic': 20.0, 'DeltaT_cue': 80.0, 'overwrite_files': True, 'seed': 111, 'pad_time': 5.0, 'idend_recording_interval': 1.0, 'idend_record_time': 8.0, 'evaluate_performance': True, 'evaluate_replay': False, 'record_idend_last_episode': True, 'store_connections': True, 'load_connections': False, 'sparse_first_char': False, 'active_weight_recorder': False, 'task': {'task_name': 'hard_coded', 'task_type': 1, 'vocab_size': 6, 'seed': 111, 'store_training_data': True}, 'learning_episodes': 40, 'episodes_to_testing': 1, 'conn_dict_ee': {'rule': 'fixed_indegree', 'indegree': 180, 'allow_autapses': False, 'allow_multapses': False}, 'R_m_soma': 0.04, 'R_m_inhibit': 0.02, 'DeltaT_seq': 100.0}\n", + "Model parameters: {'dt': 0.1, 'print_simulation_progress': False, 'soma_model': 'iaf_psc_exp_nonlineardendrite_neuron_nestml__with_stdsp_synapse_nestml', 'soma_params': {'C_m': 250.0, 'E_L': 0.0, 'V_m': 0.0, 'V_reset': 0.0, 'V_th': 20.0, 't_ref': 10.0, 'tau_m': 10.0, 'tau_syn1': 2.0, 'tau_syn2': 5.0, 'tau_syn3': 1.0, 'I_p': 200.0, 'tau_dAP': 60.0, 'theta_dAP': 59.0, 'I_dend_incr': 0.542}, 'fixed_somatic_delay': 2, 'M': 6, 'n_E': 150, 'n_I': 1, 'L': 1, 'pattern_size': 20, 'inhibit_model': 'iaf_psc_exp', 'inhibit_params': {'C_m': 250.0, 'E_L': 0.0, 'I_e': 0.0, 'V_m': 0.0, 'V_reset': 0.0, 'V_th': 15.0, 't_ref': 2.0, 'tau_m': 5.0, 'tau_syn_ex': 0.5, 'tau_syn_in': 1.65}, 'J_EX_psp': 22.0, 'J_IE_psp': 0.9, 'J_EI_psp': -40.0, 'convergence': 5, 'rule': 'fixed_indegree', 'connection_prob': 0.2, 'syn_dict_ee': {'weight': 0.01, 'synapse_model': 'stdsp_synapse_nestml__with_iaf_psc_exp_nonlineardendrite_neuron_nestml', 'permanence_threshold': 10.0, 'tau_pre_trace': 20.0, 'delay': 2.0, 'receptor_type': 2, 'lambda_plus': 0.08, 'zt': 1.0, 'lambda_h': 0.014, 'Wmax': 12.98, 'permanence_max': 20.0, 'permanence_min': 1.0, 'lambda_minus': 0.0015, 'dt_min': 4.0, 'permanence': , 'dt_max': 80.0}, 'permanence_min': 0.0, 'permanence_max': 8.0, 'calibration': 0.0, 'conn_dict_ex': {'rule': 'all_to_all'}, 'syn_dict_ex': {'receptor_type': 1, 'delay': 0.1, 'weight': 4112.209148358356}, 'conn_dict_edx': {'rule': 'fixed_outdegree', 'outdegree': 21}, 'syn_dict_edx': {'receptor_type': 2, 'delay': 0.1, 'weight': 82.6}, 'syn_dict_ie': {'synapse_model': 'static_synapse', 'delay': 0.1, 'weight': 581.1973492566976}, 'syn_dict_ei': {'synapse_model': 'static_synapse', 'delay': 0.1, 'receptor_type': 3, 'weight': -12915.496650148836}, 'DeltaT': 40.0, 'excitation_start': 30.0, 'time_dend_to_somatic': 20.0, 'DeltaT_cue': 80.0, 'overwrite_files': True, 'seed': 111, 'pad_time': 5.0, 'idend_recording_interval': 1.0, 'idend_record_time': 8.0, 'evaluate_performance': True, 'evaluate_replay': False, 'record_idend_last_episode': True, 'store_connections': True, 'load_connections': False, 'sparse_first_char': False, 'active_weight_recorder': False, 'task': {'task_name': 'hard_coded', 'task_type': 1, 'vocab_size': 6, 'seed': 111, 'store_training_data': True}, 'learning_episodes': 40, 'episodes_to_testing': 1, 'conn_dict_ee': {'rule': 'fixed_indegree', 'indegree': 180, 'allow_autapses': False, 'allow_multapses': False}, 'R_m_soma': 0.04, 'R_m_inhibit': 0.02, 'DeltaT_seq': 100.0}\n", "\n", "Duration of a sequence set 440 ms\n", "\n", @@ -2885,7 +2847,7 @@ "\tCreating new random connections\n", "Conn exc neurons\n", "{'rule': 'fixed_indegree', 'indegree': 180, 'allow_autapses': False, 'allow_multapses': False}\n", - "{'weight': 0.01, 'synapse_model': 'stdsp_synapse_nestml__with_iaf_psc_exp_nonlineardendrite_neuron_nestml', 'permanence_threshold': 10.0, 'tau_pre_trace': 20.0, 'delay': 2.0, 'receptor_type': 2, 'lambda_plus': 0.08, 'zt': 1.0, 'lambda_h': 0.014, 'Wmax': 12.98, 'permanence_max': 20.0, 'permanence_min': 1.0, 'lambda_minus': 0.0015, 'dt_min': 4.0, 'permanence': , 'dt_max': 80.0}\n", + "{'weight': 0.01, 'synapse_model': 'stdsp_synapse_nestml__with_iaf_psc_exp_nonlineardendrite_neuron_nestml', 'permanence_threshold': 10.0, 'tau_pre_trace': 20.0, 'delay': 2.0, 'receptor_type': 2, 'lambda_plus': 0.08, 'zt': 1.0, 'lambda_h': 0.014, 'Wmax': 12.98, 'permanence_max': 20.0, 'permanence_min': 1.0, 'lambda_minus': 0.0015, 'dt_min': 4.0, 'permanence': , 'dt_max': 80.0}\n", "connect()ed\n", "Store connections.....\n", "\n", @@ -2895,9 +2857,7 @@ "Simulating.....\n", "Removed: somatic_spikes-919-0.dat\n", "Removed: inh_spikes-921-0.dat\n", - "Removed: idend_eval-923-0.dat\n", - "Removed: idend_eval-924-0.dat\n", - "Removed: idend_last_episode-927-0.dat\n", + "Removed: idend_last_episode-923-0.dat\n", "\n", "Simulating 18070.0 ms.\n", "Store connections.....\n", @@ -2907,11 +2867,11 @@ " -> finished saving connections!\n", "\n", "Times of Rank 0:\n", - " Total time: 50.427 s\n", + " Total time: 67.279 s\n", " Time to initialize: 0.002 s\n", - " Time to create: 0.004 s\n", - " Time to connect: 1.692 s\n", - " Time to simulate: 48.729 s\n", + " Time to create: 0.005 s\n", + " Time to connect: 1.878 s\n", + " Time to simulate: 65.394 s\n", "\n", "\n", "##### testing sequences with number of somatic spikes \n", @@ -3034,8 +2994,8 @@ " \n", " # store connections before learning\n", " print(\"Store connections.....\")\n", - " if params['store_connections']:\n", - " model_instance.save_connections(fname='ee_connections_before')\n", + " if params[\"store_connections\"]:\n", + " model_instance.save_connections(fname=\"ee_connections_before\")\n", "\n", " # ###############################################################\n", " # simulate the network\n", @@ -3047,25 +3007,25 @@ "\n", " print(\"Store connections.....\")\n", " # store connections after learning\n", - " if params['store_connections']:\n", - " model_instance.save_connections(fname='ee_connections')\n", + " if params[\"store_connections\"]:\n", + " model_instance.save_connections(fname=\"ee_connections\")\n", "\n", " print(\n", - " '\\nTimes of Rank {}:\\n'.format(\n", + " \"\\nTimes of Rank {}:\\n\".format(\n", " nest.Rank()) +\n", - " ' Total time: {:.3f} s\\n'.format(\n", + " \" Total time: {:.3f} s\\n\".format(\n", " time_simulate -\n", " time_start) +\n", - " ' Time to initialize: {:.3f} s\\n'.format(\n", + " \" Time to initialize: {:.3f} s\\n\".format(\n", " time_model -\n", " time_start) +\n", - " ' Time to create: {:.3f} s\\n'.format(\n", + " \" Time to create: {:.3f} s\\n\".format(\n", " time_create -\n", " time_model) +\n", - " ' Time to connect: {:.3f} s\\n'.format(\n", + " \" Time to connect: {:.3f} s\\n\".format(\n", " time_connect -\n", " time_create) +\n", - " ' Time to simulate: {:.3f} s\\n'.format(\n", + " \" Time to simulate: {:.3f} s\\n\".format(\n", " time_simulate -\n", " time_connect))\n", "\n", @@ -3127,13 +3087,13 @@ " fig.savefig(\"/tmp/nestml_inhibitory_spikes_\" + str(gid) + \"_\" + fname_snip + \".png\")\n", "\n", " # load spikes from reference data\n", - " somatic_spikes = load_spike_data('somatic_spikes')\n", - " idend_eval = load_spike_data('idend_eval')\n", - " excitation_times = load_data('excitation_times')\n", + " somatic_spikes = load_spike_data(\"somatic_spikes\")\n", + " idend_eval = load_spike_data(\"idend_eval\")\n", + " excitation_times = load_data(\"excitation_times\")\n", "\n", " # get recoding times of dendriticAP\n", - " idend_recording_times = load_data('idend_recording_times')\n", - " characters_to_subpopulations = load_data('characters_to_subpopulations')\n", + " idend_recording_times = load_data(\"idend_recording_times\")\n", + " characters_to_subpopulations = load_data(\"characters_to_subpopulations\")\n", "\n", " #seq_avg_errors, seq_avg_false_positives, seq_avg_false_negatives, _ = compute_prediction_performance(somatic_spikes, idend_eval, idend_recording_times, characters_to_subpopulations, model_instance.sequences, model_instance.params)\n", "\n", @@ -3145,16 +3105,16 @@ " idx_times = np.where((np.array(excitation_times) > start_time) & (np.array(excitation_times) < end_time)) \n", " excitation_times_sel = np.array(excitation_times)[idx_times]\n", "\n", - " num_active_neurons = number_active_neurons_per_element(model_instance.sequences, somatic_spikes[:,1], somatic_spikes[:,0], excitation_times_sel, params['fixed_somatic_delay'])\n", + " num_active_neurons = number_active_neurons_per_element(model_instance.sequences, somatic_spikes[:,1], somatic_spikes[:,0], excitation_times_sel, params[\"fixed_somatic_delay\"])\n", "\n", " print(\"\\n##### testing sequences with number of somatic spikes \")\n", " count_false_negatives = 0\n", " for i, (sequence, seq_counts) in enumerate(zip(model_instance.sequences, num_active_neurons)): \n", - " seq = ''\n", + " seq = \"\"\n", " for j, (char, counts) in enumerate(zip(sequence, seq_counts)):\n", - " seq += str(char)+'('+ str(seq_counts[char])+')'.ljust(2)\n", + " seq += str(char)+\"(\"+ str(seq_counts[char])+\")\".ljust(2)\n", "\n", - " if j != 0 and seq_counts[char] > 0.5*params['n_E']:\n", + " if j != 0 and seq_counts[char] > 0.5*params[\"n_E\"]:\n", " count_false_negatives += 1\n", "\n", " print(\"sequence %d: %s\" % (i, seq)) \n", @@ -3162,16 +3122,16 @@ " print(\"False negative counts\", count_false_negatives) \n", "\n", " print(\"\\n### Plasticity parameters\")\n", - " print(\"lambda plus: %0.4f\" % params['syn_dict_ee']['lambda_plus'])\n", - " print(\"lambda homeostasis: %0.4f\" % params['syn_dict_ee']['lambda_h'])\n", - " print(\"lambda minus: %0.4f\" % model_instance.params['syn_dict_ee']['lambda_minus']) \n", - " print(\"excitation step %0.1fms\" % params['DeltaT']) #30-50 \n", - " print(\"seed number: %d\" % params['seed']) \n", - " print(\"number of learning episodes: %d\" % params['learning_episodes'])\n", + " print(\"lambda plus: %0.4f\" % params[\"syn_dict_ee\"][\"lambda_plus\"])\n", + " print(\"lambda homeostasis: %0.4f\" % params[\"syn_dict_ee\"][\"lambda_h\"])\n", + " print(\"lambda minus: %0.4f\" % model_instance.params[\"syn_dict_ee\"][\"lambda_minus\"]) \n", + " print(\"excitation step %0.1fms\" % params[\"DeltaT\"]) #30-50 \n", + " print(\"seed number: %d\" % params[\"seed\"]) \n", + " print(\"number of learning episodes: %d\" % params[\"learning_episodes\"])\n", "\n", " return model_instance\n", "\n", - "params['store_connections'] = True # N.B. this can take a very long time!\n", + "params[\"store_connections\"] = True # N.B. this can take a very long time!\n", "\n", "model_instance = simulate_train_network(params)" ] @@ -3199,7 +3159,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_842126/4030970564.py:48: UserWarning:FixedFormatter should only be used together with FixedLocator\n" + "/tmp/ipykernel_35391/1159837948.py:48: UserWarning:FixedFormatter should only be used together with FixedLocator\n" ] }, { @@ -3215,8 +3175,8 @@ ], "source": [ "def get_connection_matrix_from_fname(p, label):\n", - " print('Load connections from ' + label + '...')\n", - " conns = np.load('%s.npy' % label)\n", + " print(\"Load connections from \" + label + \"...\")\n", + " conns = np.load(\"%s.npy\" % label)\n", " conns_tg = [int(conn[0]) for conn in conns]\n", " conns_src = [int(conn[1]) for conn in conns]\n", " conns_weights = [conn[2] for conn in conns]\n", @@ -3224,7 +3184,7 @@ " min_gid = min(np.amin(conns_tg), np.amin(conns_src))\n", " max_gid = min(np.amax(conns_tg), np.amax(conns_src))\n", "\n", - " total_n_E = p['n_E'] * p['M']\n", + " total_n_E = p[\"n_E\"] * p[\"M\"]\n", " A = np.zeros((total_n_E, total_n_E))\n", " for gid_src, gid_tg, w in zip(conns_src, conns_tg, conns_weights):\n", " A[gid_src - min_gid, gid_tg - min_gid] = w\n", @@ -3265,7 +3225,7 @@ "\n", " fig.savefig(\"/tmp/W_model\" + fname_snip + \".png\",dpi=300)\n", "\n", - "if params['store_connections']:\n", + "if params[\"store_connections\"]:\n", " A = get_connection_matrix_from_fname(params, \"ee_connections_before\")\n", " plot_connection_matrix_from_model_instance(model_instance, A, fname_snip=\"ee_connections_before\")\n", "else:\n", @@ -3295,7 +3255,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_842126/4030970564.py:48: UserWarning:FixedFormatter should only be used together with FixedLocator\n" + "/tmp/ipykernel_35391/1159837948.py:48: UserWarning:FixedFormatter should only be used together with FixedLocator\n" ] }, { @@ -3310,7 +3270,7 @@ } ], "source": [ - "if params['store_connections']:\n", + "if params[\"store_connections\"]:\n", " A = get_connection_matrix_from_fname(params, \"ee_connections\")\n", " plot_connection_matrix_from_model_instance(model_instance, A, fname_snip=\"ee_connections\")\n", "else:\n", @@ -3357,16 +3317,16 @@ } ], "source": [ - "def analyse_prediction_performance(params, model_instance, fname = 'prediction_performance'):\n", + "def analyse_prediction_performance(params, model_instance, fname = \"prediction_performance\"):\n", " params = copy.deepcopy(params)\n", " compute_overlap = True\n", " \n", " # get training data\n", - " sequences = load_data('training_data')\n", + " sequences = load_data(\"training_data\")\n", " \n", " print(\"#### sequences used for training ### \")\n", " for i, sequence in enumerate(sequences): \n", - " seq = '' \n", + " seq = \"\" \n", " for char in sequence:\n", " seq += str(char).ljust(2) \n", " print(\"sequence %d: %s\" % (i, seq))\n", @@ -3375,34 +3335,34 @@ "\n", " # get data path\n", " # load somatic spikes and dendritic current\n", - " somatic_spikes = load_spike_data( 'somatic_spikes')\n", - " idend_eval = load_spike_data('idend_eval')\n", + " somatic_spikes = load_spike_data( \"somatic_spikes\")\n", + " idend_eval = load_spike_data(\"idend_eval\")\n", "\n", " # load record and excitation times \n", - " print(\"Loading idend_recording_times from \" + 'idend_recording_times')\n", - " idend_recording_times = load_data('idend_recording_times')\n", - " characters_to_subpopulations = load_data('characters_to_subpopulations')\n", - " excitation_times = load_data('excitation_times')\n", + " print(\"Loading idend_recording_times from \" + \"idend_recording_times\")\n", + " idend_recording_times = load_data(\"idend_recording_times\")\n", + " characters_to_subpopulations = load_data(\"characters_to_subpopulations\")\n", + " excitation_times = load_data(\"excitation_times\")\n", "\n", " # compute prediction performance\n", " errors, false_positives, false_negatives, num_active_neurons = compute_prediction_performance(somatic_spikes, idend_eval, idend_recording_times, characters_to_subpopulations, sequences, params)\n", "\n", " if compute_overlap:\n", " # sequences overlap\n", - " sequences_overlap = measure_sequences_overlap(sequences, somatic_spikes[:,1], somatic_spikes[:,0], excitation_times, params['fixed_somatic_delay'], params['learning_episodes'])\n", - " data['overlap'] = sequences_overlap\n", + " sequences_overlap = measure_sequences_overlap(sequences, somatic_spikes[:,1], somatic_spikes[:,0], excitation_times, params[\"fixed_somatic_delay\"], params[\"learning_episodes\"])\n", + " data[\"overlap\"] = sequences_overlap\n", "\n", - " data['error'] = errors\n", - " data['false_positive'] = false_positives\n", - " data['false_negative'] = false_negatives\n", - " data['rel_active_neurons'] = num_active_neurons / params['n_E']\n", - " data['ep_num'] = params['episodes_to_testing'] * np.arange(int(params['learning_episodes'] / params['episodes_to_testing']) + 1)\n", + " data[\"error\"] = errors\n", + " data[\"false_positive\"] = false_positives\n", + " data[\"false_negative\"] = false_negatives\n", + " data[\"rel_active_neurons\"] = num_active_neurons / params[\"n_E\"]\n", + " data[\"ep_num\"] = params[\"episodes_to_testing\"] * np.arange(int(params[\"learning_episodes\"] / params[\"episodes_to_testing\"]) + 1)\n", "\n", " ep_to_sol = np.where(errors < 0.01)[0] \n", " if len(ep_to_sol) == 0:\n", - " print(\"number of episodes to convergence\", params['learning_episodes'])\n", + " print(\"number of episodes to convergence\", params[\"learning_episodes\"])\n", " else: \n", - " print(\"number of episodes to convergence\", data['ep_num'][ep_to_sol][0])\n", + " print(\"number of episodes to convergence\", data[\"ep_num\"][ep_to_sol][0])\n", "\n", " # save data\n", " print(\"Saving to \" + fname)\n", @@ -3430,7 +3390,7 @@ } ], "source": [ - "def plot_prediction_performance(fname = 'prediction_performance'):\n", + "def plot_prediction_performance(fname = \"prediction_performance\"):\n", "\n", " data = np.load(\"prediction_performance.npy\", allow_pickle=True)\n", " data = data.item()\n", @@ -3451,7 +3411,7 @@ " ax[-1].set_xlabel(\"Training episode\")\n", " plt.savefig(fname)\n", "\n", - "plot_prediction_performance(fname='/tmp/prediction_performance.png')" + "plot_prediction_performance(fname=\"/tmp/prediction_performance.png\")" ] }, { @@ -3499,17 +3459,17 @@ "def plot_network_dynamics(data, params, xmax=None, fname_snip=\"\"):\n", " # get parameters \n", " params = copy.deepcopy(params)\n", - " num_neurons = params['M'] * params['n_E']\n", + " num_neurons = params[\"M\"] * params[\"n_E\"]\n", " \n", - " print('#### sequences used for training ### ')\n", + " print(\"#### sequences used for training ### \")\n", " for i, sequence in enumerate(data[\"sequences\"]):\n", - " seq = ''\n", + " seq = \"\"\n", " for char in sequence:\n", " seq += str(char).ljust(2)\n", - " print('sequence %d: %s' % (i, seq))\n", + " print(\"sequence %d: %s\" % (i, seq))\n", " \n", " # get dendritic AP\n", - " idx = np.where((data[\"idend\"][:, 2] > params['soma_params']['theta_dAP']))[0]\n", + " idx = np.where((data[\"idend\"][:, 2] > params[\"soma_params\"][\"theta_dAP\"]))[0]\n", " dendriticAP_currents = data[\"idend\"][:, 2][idx]\n", " dendriticAP_times = data[\"idend\"][:, 1][idx]\n", " dendriticAP_senders = data[\"idend\"][:, 0][idx]\n", @@ -3527,16 +3487,16 @@ " shifted_subpopulation_indices = np.array(subpopulation_indices) + 0.5\n", " \n", " panel_label_pos = (-0.14,0.5)\n", - " panel_labels = ['B', 'D', 'F']\n", - " color_soma_spike = '#DB2763'\n", - " color_dendrite_spike = '#00B4BE' \n", - " fc_bg = '#dcdcdc'\n", + " panel_labels = [\"B\", \"D\", \"F\"]\n", + " color_soma_spike = \"#DB2763\"\n", + " color_dendrite_spike = \"#00B4BE\" \n", + " fc_bg = \"#dcdcdc\"\n", " fraction_active = 3\n", " delta_time = 5.\n", " ymin = -0.1\n", " ymax = 2\n", " xmin = 0\n", - " master_file_name = 'replay_network_activity'\n", + " master_file_name = \"replay_network_activity\"\n", " \n", " start_time = 0.\n", " end_time = start_time + 150.\n", @@ -3556,7 +3516,6 @@ " dAP_senders = dendriticAP_senders#[idx_dAP]\n", " dAP_currents = dendriticAP_currents#[idx_dAP]\n", " dAP_times = dendriticAP_times#[idx_dAP]\n", - " #dAP_times -= initial_time\n", "\n", " idx_exc_times = np.where((data[\"excitation_times\"] > start_time) & (data[\"excitation_times\"] < end_time))\n", " excitation_times_sel = data[\"excitation_times\"][idx_exc_times]\n", @@ -3566,37 +3525,37 @@ "\n", " # SOMA SPIKES\n", " senders_subsampled = somatic_spikes_senders\n", - " line1 = ax.plot(somatic_spikes_times, somatic_spikes_senders, 'o', color=color_soma_spike, lw=0., ms=0.5, zorder=2)\n", + " line1 = ax.plot(somatic_spikes_times, somatic_spikes_senders, \"o\", color=color_soma_spike, lw=0., ms=0.5, zorder=2)\n", "\n", " # DENDRITIC SPIKES\n", " for xx, sender in enumerate(senders_subsampled):\n", " idx_sub = np.where(dAP_senders == sender)\n", - " line2 = plt.plot(dAP_times[idx_sub], dAP_senders[idx_sub], 'o', markersize=.5, color=color_dendrite_spike, zorder=1)\n", + " line2 = plt.plot(dAP_times[idx_sub], dAP_senders[idx_sub], \"o\", markersize=.5, color=color_dendrite_spike, zorder=1)\n", "\n", " for char in data[\"characters_to_time_excitation\"].keys():\n", " char_stim_times = data[\"characters_to_time_excitation\"][char]\n", " for t in char_stim_times:\n", - " ax.text(t - 0.003, 10, char, horizontalalignment='center')\n", - " arrow = mpl.patches.FancyArrowPatch(posA=(t, 0.), posB=(t, 10), arrowstyle='->', color='green', mutation_scale=10.)\n", + " ax.text(t - 0.003, 10, char, horizontalalignment=\"center\")\n", + " arrow = mpl.patches.FancyArrowPatch(posA=(t, 0.), posB=(t, 10), arrowstyle=\"->\", color=\"green\", mutation_scale=10.)\n", " ax.add_patch(arrow)\n", "\n", " ax.set_xlim(-delta_time, xmax)\n", " ax.set_ylim(-10, num_neurons+10)\n", "\n", - " ticks_pos = shifted_subpopulation_indices * params['n_E']\n", + " ticks_pos = shifted_subpopulation_indices * params[\"n_E\"]\n", " ticks_label = chars_per_subpopulation\n", - " subpopulation_indices_background = np.arange(params['M'])*params['n_E']\n", + " subpopulation_indices_background = np.arange(params[\"M\"])*params[\"n_E\"]\n", "\n", " ax.set_yticks(ticks_pos, ticks_label)\n", " ax.tick_params(labelbottom=False)\n", "\n", - " for i in range(params['M'])[::2]:\n", - " ax.axhspan(subpopulation_indices_background[i], subpopulation_indices_background[i]+params['n_E'], facecolor=fc_bg, zorder=0)\n", + " for i in range(params[\"M\"])[::2]:\n", + " ax.axhspan(subpopulation_indices_background[i], subpopulation_indices_background[i]+params[\"n_E\"], facecolor=fc_bg, zorder=0)\n", "\n", - " ax.set_xlabel('time (ms)')\n", + " ax.set_xlabel(\"time (ms)\")\n", " ax.tick_params(labelbottom=True)\n", "\n", - " fname = '/tmp/' + master_file_name + fname_snip + '.png'\n", + " fname = \"/tmp/\" + master_file_name + fname_snip + \".png\"\n", " print(\"Saving figure to \" + fname)\n", " fig.tight_layout()\n", "\n", @@ -3607,20 +3566,20 @@ " data = {}\n", "\n", " # get trained sequences and vocabulary\n", - " data[\"sequences\"] = load_data('training_data')\n", - " data[\"vocabulary\"] = load_data('vocabulary')\n", + " data[\"sequences\"] = load_data(\"training_data\")\n", + " data[\"vocabulary\"] = load_data(\"vocabulary\")\n", "\n", " # load spikes\n", - " data[\"somatic_spikes\"] = load_spike_data('somatic_spikes')\n", - " data[\"idend\"] = load_spike_data('idend_last_episode')\n", + " data[\"somatic_spikes\"] = load_spike_data(\"somatic_spikes\")\n", + " data[\"idend\"] = load_spike_data(\"idend_last_episode\")\n", "\n", " # load spike recordings\n", - " data[\"idend_recording_times\"] = load_data('idend_recording_times')\n", - " data[\"characters_to_subpopulations\"] = load_data('characters_to_subpopulations')\n", - " data[\"characters_to_time_excitation\"] = load_data('excitation_times_soma')\n", + " data[\"idend_recording_times\"] = load_data(\"idend_recording_times\")\n", + " data[\"characters_to_subpopulations\"] = load_data(\"characters_to_subpopulations\")\n", + " data[\"characters_to_time_excitation\"] = load_data(\"excitation_times_soma\")\n", "\n", " # load excitation times\n", - " data[\"excitation_times\"] = load_data('excitation_times')\n", + " data[\"excitation_times\"] = load_data(\"excitation_times\")\n", "\n", " return data\n", "\n", @@ -3637,7 +3596,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_842126/4030970564.py:48: UserWarning:FixedFormatter should only be used together with FixedLocator\n" + "/tmp/ipykernel_35391/1159837948.py:48: UserWarning:FixedFormatter should only be used together with FixedLocator\n" ] }, { @@ -3672,9 +3631,7 @@ "outputs": [], "source": [ "params = create_sequence_learning_parameters()\n", - "DELAY = 0.1\n", - "params['record_idend_last_episode'] = True\n", - "params['syn_dict_ei']['delay'] = 2*DELAY" + "params[\"record_idend_last_episode\"] = True" ] }, { @@ -3698,7 +3655,7 @@ "PSC maximum J_EX: 4112.209148 pA\n", "PSC maximum J_IE: 77.492980 pA\n", "PSC maximum J_EI: -12915.496650 pA\n", - "Model parameters: {'dt': 0.1, 'print_simulation_progress': False, 'soma_model': 'iaf_psc_exp_nonlineardendrite_neuron_nestml__with_stdsp_synapse_nestml', 'soma_params': {'C_m': 250.0, 'E_L': 0.0, 'V_m': 0.0, 'V_reset': 0.0, 'V_th': 5.0, 't_ref': 10.0, 'tau_m': 10.0, 'tau_syn1': 2.0, 'tau_syn2': 5.0, 'tau_syn3': 1.0, 'I_p': 200.0, 'tau_dAP': 60.0, 'theta_dAP': 41.3, 'I_dend_incr': 0.542}, 'fixed_somatic_delay': 2, 'M': 6, 'n_E': 150, 'n_I': 1, 'L': 1, 'pattern_size': 20, 'inhibit_model': 'iaf_psc_exp', 'inhibit_params': {'C_m': 250.0, 'E_L': 0.0, 'I_e': 0.0, 'V_m': 0.0, 'V_reset': 0.0, 'V_th': 15.0, 't_ref': 2.0, 'tau_m': 5.0, 'tau_syn_ex': 0.5, 'tau_syn_in': 1.65}, 'J_EX_psp': 22.0, 'J_IE_psp': 0.12, 'J_EI_psp': -40.0, 'convergence': 5, 'rule': 'fixed_indegree', 'connection_prob': 0.2, 'syn_dict_ee': {'weight': 0.01, 'synapse_model': 'static_synapse', 'permanence_threshold': 10.0, 'tau_pre_trace': 20.0, 'delay': 2.0, 'receptor_type': 2, 'lambda_plus': 0.08, 'zt': 1.0, 'lambda_h': 0.014, 'Wmax': 12.98, 'permanence_max': 20.0, 'permanence_min': 1.0, 'lambda_minus': 0.0015, 'dt_min': 4.0, 'permanence': , 'dt_max': -80.0}, 'permanence_min': 0.0, 'permanence_max': 8.0, 'calibration': 0.0, 'conn_dict_ex': {'rule': 'all_to_all'}, 'syn_dict_ex': {'receptor_type': 1, 'delay': 0.1, 'weight': 4112.209148358356}, 'conn_dict_edx': {'rule': 'fixed_outdegree', 'outdegree': 21}, 'syn_dict_edx': {'receptor_type': 2, 'delay': 0.1, 'weight': 82.6}, 'syn_dict_ie': {'synapse_model': 'static_synapse', 'delay': 0.1, 'weight': 77.49297990089302}, 'syn_dict_ei': {'synapse_model': 'static_synapse', 'delay': 0.2, 'receptor_type': 3, 'weight': -12915.496650148836}, 'DeltaT': 40.0, 'excitation_start': 30.0, 'time_dend_to_somatic': 20.0, 'DeltaT_cue': 250.0, 'overwrite_files': True, 'seed': 111, 'pad_time': 5.0, 'idend_recording_interval': 0.1, 'idend_record_time': 8.0, 'evaluate_performance': False, 'evaluate_replay': True, 'record_idend_last_episode': True, 'store_connections': False, 'load_connections': True, 'sparse_first_char': False, 'active_weight_recorder': False, 'task': {'task_name': 'hard_coded', 'task_type': 1, 'vocab_size': 6, 'seed': 111, 'store_training_data': True}, 'learning_episodes': 4, 'episodes_to_testing': 1, 'store_training_data': False, 'conn_dict_ee': {'rule': 'fixed_indegree', 'indegree': 180, 'allow_autapses': False, 'allow_multapses': False}, 'R_m_soma': 0.04, 'R_m_inhibit': 0.02, 'DeltaT_seq': 100.0}\n", + "Model parameters: {'dt': 0.1, 'print_simulation_progress': False, 'soma_model': 'iaf_psc_exp_nonlineardendrite_neuron_nestml__with_stdsp_synapse_nestml', 'soma_params': {'C_m': 250.0, 'E_L': 0.0, 'V_m': 0.0, 'V_reset': 0.0, 'V_th': 5.0, 't_ref': 10.0, 'tau_m': 10.0, 'tau_syn1': 2.0, 'tau_syn2': 5.0, 'tau_syn3': 1.0, 'I_p': 200.0, 'tau_dAP': 60.0, 'theta_dAP': 41.3, 'I_dend_incr': 0.542}, 'fixed_somatic_delay': 2, 'M': 6, 'n_E': 150, 'n_I': 1, 'L': 1, 'pattern_size': 20, 'inhibit_model': 'iaf_psc_exp', 'inhibit_params': {'C_m': 250.0, 'E_L': 0.0, 'I_e': 0.0, 'V_m': 0.0, 'V_reset': 0.0, 'V_th': 15.0, 't_ref': 2.0, 'tau_m': 5.0, 'tau_syn_ex': 0.5, 'tau_syn_in': 1.65}, 'J_EX_psp': 22.0, 'J_IE_psp': 0.12, 'J_EI_psp': -40.0, 'convergence': 5, 'rule': 'fixed_indegree', 'connection_prob': 0.2, 'syn_dict_ee': {'weight': 0.01, 'synapse_model': 'static_synapse', 'permanence_threshold': 10.0, 'tau_pre_trace': 20.0, 'delay': 2.0, 'receptor_type': 2, 'lambda_plus': 0.08, 'zt': 1.0, 'lambda_h': 0.014, 'Wmax': 12.98, 'permanence_max': 20.0, 'permanence_min': 1.0, 'lambda_minus': 0.0015, 'dt_min': 4.0, 'permanence': , 'dt_max': -80.0}, 'permanence_min': 0.0, 'permanence_max': 8.0, 'calibration': 0.0, 'conn_dict_ex': {'rule': 'all_to_all'}, 'syn_dict_ex': {'receptor_type': 1, 'delay': 0.1, 'weight': 4112.209148358356}, 'conn_dict_edx': {'rule': 'fixed_outdegree', 'outdegree': 21}, 'syn_dict_edx': {'receptor_type': 2, 'delay': 0.1, 'weight': 82.6}, 'syn_dict_ie': {'synapse_model': 'static_synapse', 'delay': 0.1, 'weight': 77.49297990089302}, 'syn_dict_ei': {'synapse_model': 'static_synapse', 'delay': 0.1, 'receptor_type': 3, 'weight': -12915.496650148836}, 'DeltaT': 40.0, 'excitation_start': 30.0, 'time_dend_to_somatic': 20.0, 'DeltaT_cue': 250.0, 'overwrite_files': True, 'seed': 111, 'pad_time': 5.0, 'idend_recording_interval': 0.1, 'idend_record_time': 8.0, 'evaluate_performance': False, 'evaluate_replay': True, 'record_idend_last_episode': True, 'store_connections': False, 'load_connections': True, 'sparse_first_char': False, 'active_weight_recorder': False, 'task': {'task_name': 'hard_coded', 'task_type': 1, 'vocab_size': 6, 'seed': 111, 'store_training_data': True}, 'learning_episodes': 4, 'episodes_to_testing': 1, 'store_training_data': False, 'conn_dict_ee': {'rule': 'fixed_indegree', 'indegree': 180, 'allow_autapses': False, 'allow_multapses': False}, 'R_m_soma': 0.04, 'R_m_inhibit': 0.02, 'DeltaT_seq': 100.0}\n", "\n", "Duration of a sequence set 440 ms\n", "\n", @@ -3728,7 +3685,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_842126/4030970564.py:48: UserWarning:FixedFormatter should only be used together with FixedLocator\n" + "/tmp/ipykernel_35391/1159837948.py:48: UserWarning:FixedFormatter should only be used together with FixedLocator\n" ] }, { @@ -3737,11 +3694,11 @@ "text": [ "\n", "Times of Rank 0:\n", - " Total time: 16.378 s\n", - " Time to initialize: 0.046 s\n", + " Total time: 15120.186 s\n", + " Time to initialize: 0.054 s\n", " Time to create: 0.004 s\n", - " Time to connect: 0.770 s\n", - " Time to simulate: 15.559 s\n", + " Time to connect: 0.859 s\n", + " Time to simulate: 15119.269 s\n", "\n" ] }, @@ -3759,31 +3716,31 @@ "source": [ "def run_replay_experiment(PS):\n", " params = copy.deepcopy(PS)\n", - " params['learning_episodes'] = 4 \n", - " params['episodes_to_testing'] = 1\n", - " params['load_connections'] = True\n", - " params['evaluate_replay'] = True\n", - " params['evaluate_performance'] = False\n", - " params['store_training_data'] = False\n", - " params['DeltaT_cue'] = 250.\n", + " params[\"learning_episodes\"] = 4 \n", + " params[\"episodes_to_testing\"] = 1\n", + " params[\"load_connections\"] = True\n", + " params[\"evaluate_replay\"] = True\n", + " params[\"evaluate_performance\"] = False\n", + " params[\"store_training_data\"] = False\n", + " params[\"DeltaT_cue\"] = 250.\n", " \n", " # record dendritic current for only DeltaT=40.\n", " # record for the sequence replay plot\n", - " if params['DeltaT'] == 40.:\n", - " params['record_idend_last_episode'] = True\n", + " if params[\"DeltaT\"] == 40.:\n", + " params[\"record_idend_last_episode\"] = True\n", "\n", - " params['soma_params']['V_th'] *= 0.25\n", + " params[\"soma_params\"][\"V_th\"] *= 0.25\n", " # imporant: the adjustment of theta_dAP is only important for large interstimulus intervals (above 75ms)\n", " # As the potentiation is small for large (\\DeltaT), during the predictive mode the total PSC is barely above the dAP.\n", " # During the replay mode, the dispersion in the firing times causes the postsynaptic neurons to not have sufficient PSC to generate dAPs.\n", " # Adjusting theta_dAP addresses this issue\n", " # there might be other solutions such as increasing the number of learning episodes or adjusting the learning rates\n", - " params['soma_params']['theta_dAP'] *= 0.7\n", + " params[\"soma_params\"][\"theta_dAP\"] *= 0.7\n", "\n", " # disable learning\n", - " params['syn_dict_ee']['synapse_model'] = 'static_synapse' # synapse model\n", + " params[\"syn_dict_ee\"][\"synapse_model\"] = \"static_synapse\" # synapse model\n", " \n", - " params['idend_recording_interval'] = params['dt']\n", + " params[\"idend_recording_interval\"] = params[\"dt\"]\n", "\n", " # start time \n", " time_start = time.time()\n", @@ -3816,21 +3773,21 @@ " plot_connection_matrix_from_model_instance(model_instance, A, fname_snip=\"after_replay\")\n", "\n", " print(\n", - " '\\nTimes of Rank {}:\\n'.format(\n", + " \"\\nTimes of Rank {}:\\n\".format(\n", " nest.Rank()) +\n", - " ' Total time: {:.3f} s\\n'.format(\n", + " \" Total time: {:.3f} s\\n\".format(\n", " time_simulate -\n", " time_start) +\n", - " ' Time to initialize: {:.3f} s\\n'.format(\n", + " \" Time to initialize: {:.3f} s\\n\".format(\n", " time_model -\n", " time_start) +\n", - " ' Time to create: {:.3f} s\\n'.format(\n", + " \" Time to create: {:.3f} s\\n\".format(\n", " time_create -\n", " time_model) +\n", - " ' Time to connect: {:.3f} s\\n'.format(\n", + " \" Time to connect: {:.3f} s\\n\".format(\n", " time_connect -\n", " time_create) +\n", - " ' Time to simulate: {:.3f} s\\n'.format(\n", + " \" Time to simulate: {:.3f} s\\n\".format(\n", " time_simulate -\n", " time_connect))\n", "\n", @@ -3923,13 +3880,6 @@ "You should have received a copy of the GNU General Public License along with NEST. If not, see http://www.gnu.org/licenses/.\n", "\n" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": {