{ "metadata": { "name": "" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Brian\u00b2" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from brian2 import *" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 2 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Major changes for the user" ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Arrays with unit support" ] }, { "cell_type": "code", "collapsed": false, "input": [ "[1, 2, 3] * mV" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$\\left[\\begin{smallmatrix}{}1.0 & 2.0 & 3.0\\end{smallmatrix}\\right]\\,\\mathrm{m}\\,\\mathrm{V}$" ], "metadata": {}, "output_type": "pyout", "prompt_number": 3, "text": [ "array([ 1., 2., 3.]) * mvolt" ] } ], "prompt_number": 3 }, { "cell_type": "code", "collapsed": false, "input": [ "mean(np.arange(12)*Hz)" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$5.5\\,\\mathrm{Hz}$" ], "metadata": {}, "output_type": "pyout", "prompt_number": 4, "text": [ "5.5 * hertz" ] } ], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "var(clip(randn(50)*nS, 0*nS, np.inf*nS))" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$0.32033405871\\,\\mathrm{n}\\,\\mathrm{S}^{2}$" ], "metadata": {}, "output_type": "pyout", "prompt_number": 5, "text": [ "0.32033405999999998 * nsiemens2" ] } ], "prompt_number": 5 }, { "cell_type": "code", "collapsed": false, "input": [ "G = NeuronGroup(10, 'dv/dt = -v / (10*ms) : volt')\n", "G.v = -70*mV + randn(len(G))*3*mV\n", "print mean(G.v[:])" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "-70.37843195 mV\n" ] } ], "prompt_number": 6 }, { "cell_type": "markdown", "metadata": {}, "source": [ "* No more need to switch off unit-checking, units are not used during a run\n", "* *Everything* is checked for correct units (including reset statements, threshold conditions, synaptic updates, ...)" ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "New refractoriness mechanism" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In Brian 1, the default refractoriness mechanism clamped the value of the membrane potential during the refactory period. For other kinds of refractoriness, objects such as `CustomRefractoriness` had to be used. Brian\u00b2 allows a more flexible formulation in the model equations and the refractory keyword argument." ] }, { "cell_type": "code", "collapsed": false, "input": [ "tau_v = 10*ms\n", "tau_w = 5*ms\n", "G = NeuronGroup(1, '''dv/dt = (5 - v + w) / tau_v : 1 (unless refractory)\n", " dw/dt = -w / tau_w : 1''',\n", " threshold='v>1', reset='v=0; w+=0.1', refractory=3*ms)\n", "s_mon = StateMonitor(G, ['v', 'w', 'not_refractory'], record=True)\n", "net = Network(G, s_mon)\n", "net.run(10*ms)\n", "plot(s_mon.t / ms, s_mon.v.T)\n", "plot(s_mon.t / ms, s_mon.w.T)\n", "_ = plot(s_mon.t / ms, s_mon.not_refractory.T, 'o')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 7 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Connection class is replaced by the Synapses class" ] }, { "cell_type": "code", "collapsed": false, "input": [ "G1 = NeuronGroup(10, 'dv/dt = -v / (10*ms) : volt')\n", "G2 = NeuronGroup(10, 'dv/dt = -v / (10*ms) : volt')\n", "# Brian 1:\n", "# C = Connection(G1, G2, 'v', delay=2*ms)\n", "# C.connect_one_to_one(G1, G2, weight=1*mV)\n", "\n", "S = Synapses(G1, G2, connect='i==j', pre='v+=1*mV', delay=2*ms)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 8 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The syntax for the Synapses class changed slightly compared to Brian 1:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "S = Synapses(G1, G2, 'w:volt', pre='v+=w')\n", "# One-to-one connectivity\n", "# In Brian1: S[:, :] = 'i==j'\n", "S.connect('i==j')\n", "\n", "# Full connectivity\n", "# In Brian1: S[:, :] = True\n", "S.connect(True)\n", "\n", "# 10% connection probability\n", "# In Brian1: S[:, :] = 0.1\n", "S.connect(True, p=0.1)\n", "\n", "# 2 synapses per connection\n", "# In Brian1: S[:, :] = 2\n", "S.connect(True, n=2)\n", "\n", "# With a probability of 10%: 2 synapses per connection but only for one-to-one pairs\n", "# S[:, :] = '(i==j) * (rand()<0.1) * 2'\n", "S.connect('i==j', p=0.1, n=2)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 9 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "String-based indexing and string-based assignments" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "State variables of neurons or synapses can be accessed/set using strings. This is the recommended way of doing things!" ] }, { "cell_type": "code", "collapsed": false, "input": [ "G = NeuronGroup(10, 'dv/dt = -v / (10*ms) : 1')\n", "G.v = 1.0*np.arange(len(G)) / len(G)\n", "print G.v[:]\n", "G.v = '1.0*i / N' # i is the neuronal index, N the number of neurons\n", "print G.v[:]" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[ 0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]\n", "[ 0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]\n" ] } ], "prompt_number": 10 }, { "cell_type": "code", "collapsed": false, "input": [ "G = NeuronGroup(10, 'dv/dt = -v / (10*ms) : 1')\n", "S = Synapses(G, G, 'w:1', pre='v+=w', connect=True)\n", "S.w['i!=j'] = 0.1\n", "print S.w[:].reshape((10, 10))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[[ 0. 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1]\n", " [ 0.1 0. 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1]\n", " [ 0.1 0.1 0. 0.1 0.1 0.1 0.1 0.1 0.1 0.1]\n", " [ 0.1 0.1 0.1 0. 0.1 0.1 0.1 0.1 0.1 0.1]\n", " [ 0.1 0.1 0.1 0.1 0. 0.1 0.1 0.1 0.1 0.1]\n", " [ 0.1 0.1 0.1 0.1 0.1 0. 0.1 0.1 0.1 0.1]\n", " [ 0.1 0.1 0.1 0.1 0.1 0.1 0. 0.1 0.1 0.1]\n", " [ 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0. 0.1 0.1]\n", " [ 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0. 0.1]\n", " [ 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0. ]]\n" ] } ], "prompt_number": 11 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Named objects" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "All Brian objects now have unique names (if no name is given, an automatic one is chosen)\n", "\n", "* very useful for debugging (names are used in generated code)\n", "* allows to get specific objects from a network" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Automatic names\n", "print G.name\n", "print S.name\n", "\n", "# Assigned name\n", "E = NeuronGroup(10, 'dv/dt = -v/(10*ms) : 1', name='excitatory')\n", "print E.name" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "neurongroup_4\n", "synapses\n", "excitatory\n" ] } ], "prompt_number": 12 }, { "cell_type": "code", "collapsed": false, "input": [ "def create_network():\n", " G = NeuronGroup(10, 'dv/dt = -v/(10*ms) : 1', name='group')\n", " mon = StateMonitor(G, 'v', record=True, name='monitor')\n", " return Network(G, mon)\n", "\n", "net = create_network()\n", "print net['monitor']" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 13 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "More consistent/predictable handling of namespaces -- better support for multiple runs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Namespaces (mappings from names to values, e.g. \"'v_th' means 0*mV\") are handled quite differently from Brian 1:\n", "\n", "* A namespace can be defined individually for a Brian object (NeuronGroup, Synapses). It does not have to be complete at the time of the object creation, it can be later filled in (via the `namespace` attribute) and only has to be complete at the start of a run\n", "* For objects that did not specify an individual namespace, the namespace is filled with the namespace at the point of the `run` function (either from an explicit `namespace` argument, or from the surrounding \"implicit\" namespace)\n", "* Namespaces can change between runs\n", "* Note: For simple, \"flat\" scripts (e.g. most of the Brian examples), nothing changes" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Explicit namespace\n", "G = NeuronGroup(10, 'dv/dt = -v / tau : 1', namespace={'tau': 10*ms})\n", "G.v = linspace(0, 1, len(G))\n", "mon = StateMonitor(G, 'v', record=True)\n", "net = Network(G, mon)\n", "net.run(5*ms)\n", "G.namespace['tau'] = 20*ms\n", "net.run(5*ms)\n", "\n", "_ = plot(mon.t / ms, mon.v.T)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nRFgs/AQmBlUAAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 14 }, { "cell_type": "code", "collapsed": false, "input": [ "# Implicit namespace\n", "G = NeuronGroup(10, 'dv/dt = -v / tau : 1')\n", "tau = 10*ms # does not need to be defined before!\n", "G.v = linspace(0, 1, len(G))\n", "mon = StateMonitor(G, 'v', record=True)\n", "net = Network(G, mon)\n", "net.run(5*ms)\n", "tau = 20*ms # this would have no effect in Brian 1!\n", "net.run(5*ms)\n", "\n", "_ = plot(mon.t / ms, mon.v.T)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nRFgs/AQmBlUAAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 15 }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "New system for explicit numerical integration methods" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Explicit numerical integration methods can be specified using mathematical notation" ] }, { "cell_type": "code", "collapsed": false, "input": [ "forward_euler = ExplicitStateUpdater('x_new = x + dt * f(x, t)')\n", "forward_euler" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "\\begin{equation}\n", "x_{t+1} = dt f{\\left (x,t \\right )} + x\n", "\\end{equation}" ], "metadata": {}, "output_type": "pyout", "prompt_number": 16, "text": [ "ExplicitStateUpdater('''x_new = dt*f(x, t) + x''', stochastic=None)" ] } ], "prompt_number": 16 }, { "cell_type": "code", "collapsed": false, "input": [ "print forward_euler(Equations('''dv/dt = (-v + w)/ tau_v : 1\n", " dw/dt = -w / tau_w : 1'''))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "_w = -dt*w/tau_w + w\n", "_v = dt*(-v + w)/tau_v + v\n", "w = _w\n", "v = _v\n" ] } ], "prompt_number": 17 }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Stochastic equations are handled properly, Euler integration can used for additive noise, the derivative-free Milstein method for multiplicative noise\n", "* The state updater system is easily extendable, no core code has to change when a new state updater is added" ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Stochastic integration" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Single noise variable:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "eqs = Equations('dv/dt = -v / tau + sigma*xi/tau**0.5 : 1')\n", "print euler(eqs)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "xi = dt**.5 * randn()\n", "_v = -dt*v/tau + v + sigma*tau**(-0.5)*xi\n", "v = _v\n" ] } ], "prompt_number": 18 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Independent noise variables (names are arbitrary, one can also use `xi_alpha`, `xi_beta`, it only has to start with `xi_...`)" ] }, { "cell_type": "code", "collapsed": false, "input": [ "eqs = Equations('''dv/dt = -v / tau + sigma*xi_1/tau**0.5 : 1\n", " dw/dt = -w / tau + sigma*xi_2/tau**0.5 : 1''') # simply using 'xi' raises an error\n", "print euler(eqs)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "xi_1 = dt**.5 * randn()\n", "xi_2 = dt**.5 * randn()\n", "_w = -dt*w/tau + w + sigma*tau**(-0.5)*xi_2\n", "_v = -dt*v/tau + v + sigma*tau**(-0.5)*xi_1\n", "w = _w\n", "v = _v\n" ] } ], "prompt_number": 19 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Shared noise variables:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "eqs = Equations('''dv/dt = -v / tau + sigma*xi_shared/tau**0.5 : 1\n", " dw/dt = -w / tau + sigma*xi_shared/tau**0.5 : 1''')\n", "print euler(eqs)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "xi_shared = dt**.5 * randn()\n", "_w = -dt*w/tau + w + sigma*tau**(-0.5)*xi_shared\n", "_v = -dt*v/tau + v + sigma*tau**(-0.5)*xi_shared\n", "w = _w\n", "v = _v\n" ] } ], "prompt_number": 20 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Further new features" ] }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "\"Rich display\" in ipython notebooks" ] }, { "cell_type": "code", "collapsed": false, "input": [ "eqs = Equations('''dv/dt = (g_L*(E_L - v) + g_s*(E_s - v))/tau_m : volt\n", " dg_s/dt = -g_s/tau_s : siemens''')\n", "eqs" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "\\begin{align*}\\frac{\\mathrm{d}g_{s}}{\\mathrm{d}t} &= - \\frac{g_{s}}{\\tau_{s}} && \\text{(unit: $\\mathrm{S}$)}\\\\\n", "\\frac{\\mathrm{d}v}{\\mathrm{d}t} &= \\frac{1}{\\tau_{m}} \\left(g_{L} \\left(E_{L} - v\\right) + g_{s} \\left(E_{s} - v\\right)\\right) && \\text{(unit: $\\mathrm{V}$)}\\end{align*}" ], "metadata": {}, "output_type": "pyout", "prompt_number": 21, "text": [ "dg_s/dt = -g_s/tau_s : siemens\n", "dv/dt = (g_L*(E_L - v) + g_s*(E_s - v))/tau_m : volt\n" ] } ], "prompt_number": 21 }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "New preference system" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Accessable using either attribute or dictionary access" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print brian_prefs.core.default_scalar_dtype\n", "print brian_prefs['core.default_scalar_dtype']" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n", "\n" ] } ], "prompt_number": 22 }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Default preference values are stored in a file in the brian installation directory, can be overwritten using a file in the user's home directory or in the simulation directory\n", "* Extensions to Brian can create and document their own preferences, they are accessible via the common system" ] }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "New logging system" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "By default, a debug log is written to the temp directory, will normally be deleted after a run but will be kept if an uncaught exception occurs." ] }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "New documentation system" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Brian now uses it's own extension of the numpydoc sphinx extension, allowing for docstrings that are well readable in source code and generate well-readable HTML documentation.\n", "* Reference documentation for all Brian classes is automatically created and kept up-to-date." ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Current state of Brian 2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Useable for curious users and up for testing, download it from github: https://github.com/brian-team/brian2\n", "\n", "You can directly download and install it with pip: `pip install -e git+https://github.com/brian-team/brian2`\n", "\n", "**What is missing?**\n", "\n", "* Handling of subgroups, linked variables between NeuronGroups\n", "* dynamic connections (provided by the old `Connections` object)\n", "* many convenience classes: `TimedArray`, `PoissonInput`, `PopulationRateMonitor`, etc.\n", "* Support for other codegeneration targets than Python or C++ (e.g. CUDA)\n", "* User-documentation (beyond the class reference)\n", "* Developer documentation that accurately reflects the current state everywhere :)\n", "* A lot of cleaning up/polishing\n", "\n", "**What's next?**\n", "\n", "* Alpha version soon\n", "* Feature-complete Beta version after the summer\n", "* First release at the end of the year" ] } ], "metadata": {} } ] }