Skip to content

Potential internship projects

Marcel Stimberg edited this page Feb 1, 2017 · 2 revisions

Import NeuroML morphologies

Description: While Brian 2 is most commonly used to simulate networks of single-compartment neurons, it also offers support for multi-compartmental models of potentially complex morphologies (see documentation). While it already offers support to import morphologies in the SWC format (the format used for morphologies on neuromorpho.org), this only concerns the morphologies and not the ion channels and their distributions across the neuron. In recent years, NeuroML has emerged as a common standard to describe detailed models in a simulator-independent way, and a significant number of models ported to this format has been made available (see opensourcebrain.org).

The aim of this project is to:

  • Implement support to import NeuroML morphologies from Brian 2
  • Add convenient (semi-manual) access to other information stored in the NeuroML file, i.e. the LEMS definitions of the ion channels and their distribution
  • Test and evaluate differences between simulations of NeuroML models in Brian 2 and other simulators (such as NEURON)

Skills: Python programming, experience with computational neuroscience desirable, experience with XML-based formats helpful

Random numbers

Description: Random numbers are an important part of neural simulations, used when setting up a simulation (stochastic synaptic connectivity, random distribution of synaptic weights or delays, etc.) as well as during a simulation (simplified "Poisson neurons", stochastically fluctuating input conductances, unreliable synapses,etc.). Currently, Brian 2 generates random numbers using the well-established Mersenne Twister algorithm (the algorithm that is also used in the numpy library). The current system allows the generation of reproducible random numbers but has a few short-comings:

  • Random number generation is somewhat slow
  • Random numbers are not reproducible across code generation targets and across different numbers of threads

We would like to improve the random number generation system, by: - Introducing a general interface that allows to switch to a different random number generator - Integrating an existing Counter-based random number generator (e.g. Random123, also used by the NEURON simulator) into Brian 2, and implementing random number calls in a way that allows to reproduce random number streams independent of the code generation target and the number of threads. - Evaluating and documenting the options for the user

Skills: Python and C programming, experience with using mathematical libraries desirable, experience with computational neuroscience helpful

Numerical integration

Description: In Brian 2, differential equations are solved symbolically and transformed into a series of statements that will then converted into the final target-language code and executed every time step (for more details, see our paper). While this explicit solution makes the numerical integration procedure very transparent and explicit, it has also some short-comings:

  • Integration is limited to fixed-step updates, with the same integration timestep for all neurons/synapses within a population
  • For complex equations, symbolically solving the equations takes a significant of time, which is inconvenient for short-running simulations.

We would therefore like to extend the current system, by:

  • allowing for a new approach to numerical integration (more similar to the standard approach in most simulators): generate code that describes the system of differential equations (and possibly the Jacobian) and calls a solver (e.g. from the scipy project or the GSL)
  • Evaluating and documenting the options for the user

Skills: Python and C programming, experience with solving differential equations numerically desirable, experience with computational neuroscience helpful

Model encapsulation (C++ standalone mode)

Description: Brian's "standalone mode" gives the user maximal performance by converting the full model description into a set of C++ files and transparently compiling and executing these files. However, the resulting binaries lack the flexibility to adjust parameters without recompiling, thus negating some of the speed-up and limiting its use in model fitting. The aim of this project is to implement a new "encapsulation" mode for Brian replacing the existing standalone mode. In addition to the current standalone-binary, this mode will generate a C++ package and API for a user's model which does not depend on Python or Brian, and takes as arguments the values of the chosen parameters so that it does not need to be recompiled when these change.

Skills: C++ and Python programming, experience with Brian highly desirable