What’s new?




  • Fix inconsistent connection mapping from drive gids to cell gids, by Ryan Thorpe in #642.

  • Objective function called by optimize_evoked() now returns a scalar instead of tuple, by Ryan Thorpe in #670.

  • Fix GUI plotting bug due to deprecation of matplotlib color cycling method, by George Dang in #695.

  • Fix loading of drives in the GUI: drives are now overwritten instead of updated, by Mainak Jas in #795.

  • Use np.isin() in place of np.in1d() to address numpy deprecation, by Nick Tolley in :gh:`799.

  • Fix drive seeding so that event times are unique across multiple trials, by Nick Tolley in #810.

  • Fix bug in clear_drives() where network object are not accurately updated, by Nick Tolley in #812.


  • write() and read_spikes() now support hdf5 format for read/write Cell response object, by Rajat Partani in #644

  • Connection ‘src_gids’ and ‘target_gids’ are now stored as set objects instead of lists, by Ryan Thorpe in #642.

  • write() and read_dipoles() now support hdf5 format for read/write Dipole object, by Rajat Partani in #648

  • Add ability to optimize parameters associated with evoked drives and plot convergence. User can constrain parameter ranges and specify solver, by `Carolina Fernandez Pujol`_ in #652

  • network.add_tonic_bias() cell-specific tonic bias can now be provided using the argument amplitude in network.add_tonic_bias`, by Camilo Diaz in #766




  • Fix bugs in drives API to enable: rate constant argument as float; evoked drive with connection probability, by Nick Tolley in #458

  • Allow regular strings as filenames in write() by Mainak Jas in #456.

  • Fix to make network output independent of the order in which drives are added to the network by making the seed of the random process generating spike times in drives use the offset of the gid with respect to the first gid in the population by Mainak Jas in #462.

  • Negative event_seed is no longer allowed by Mainak Jas in #462.

  • Evoked drive optimization no longer assigns a default timing sigma value to a drive if it is not already specified, by Ryan Thorpe in #446.

  • Subsets of trials can be indexed when using plot_spikes_raster() and plot_spikes_hist(), by Nick Tolley in #472.

  • Add option to plot the averaged dipole in plot_dipole when dpl is a list of dipoles, by Huzi Cheng in #475.

  • Fix bug where plot_morphology() did not accurately reflect the shape of the cell being simulated, by Nick Tolley in #481

  • Fix bug where pick_connection() did not return an empty list when searching non existing connections, by Nick Tolley in #515

  • Fix bug in MPIBackend that caused an MPI runtime error (RuntimeError: MPI simulation failed. Return code: 143), when running a simulation with an oversubscribed MPI session on a reduced network, by Ryan Thorpe in #545.

  • Fix bug where pick_connection() failed when searching for connections with a list of cell types, by Nick Tolley in #559

  • Fix bug where add_evoked_drive() failed when adding a drive with just NMDA weights, by Nick Tolley in #611

  • Fix bug where read_params() failed to create a network when legacy mode is False, by Nick Tolley in #614

  • Fix bug where plot_dipole() failed to check the instance type of Dipole, by Rajat Partani in #606


  • Optimization of the evoked drives can be conducted on any Network template model by passing a Network instance directly into optimize_evoked(). Simulations run during optimization can now consist of multiple trials over which the simulated dipole is averaged, by Ryan Thorpe in #446.

  • plot_dipole now supports separate visualizations of different layers, by Huzi Cheng in #479.

  • Current source density (CSD) can now be calculated with calculate_csd2d() and plotted with plot_csd(). The method for plotting local field potential (LFP) is now found at plot_lfp(), by Steven Brandt and Ryan Thorpe in #517.

  • Recorded voltages/currents from the soma, as well as all sections, are enabled by setting either record_vsec or record_isec to ‘all’ or ‘soma’ in simulate_dipole(). Recordings are now accessed through vsec and isec, by Nick Tolley in #502.

  • legacy_mode is now set to False by default in all for all Network objects, by Nick Tolley and Ryan Thorpe in #619.

  • Recorded calcium conncetration from the soma, as well as all sections, are enabled by setting record_ca to soma or all in simulate_dipole(). Recordings are accessed through ca, by Katharina Duecker in #804

People who contributed to this release (in alphabetical order):


Notable Changes

  • Local field potentials can now be recorded during simulations [Example]

  • Ability to optimize parameters to reproduce event related potentials from real data [Example]

  • Published models using HNN were added and can be loaded via dedicated functions

  • Several improvements enabling easy modification of connectivity and cell properties [Example]

  • Improved visualization including spectral analysis, connectivity, and cell morphology




  • New API for defining cell-cell connections. Custom connections can be added with add_connection(), by Nick Tolley in #276

  • Remove L2Pyr, L5Pyr, L2Basket, and L5Basket classes in favor of instantiation through functions and a more consistent Cell class by Mainak Jas in #322

  • Remove parameter distribution in add_bursty_drive(). The distribution is now Gaussian by default, by Mainak Jas in #330

  • New API for accessing and modifying Cell attributes (e.g., synapse and biophysics parameters) as cells are now instantiated from template cells specified in a Network instance’s cell_types attribute by Ryan Thorpe in #321

  • New API for network creation. The default network is now created with net = jones_2009_model(params), by Nick Tolley in #318

  • Replace parameter T with tstop in add_tonic_bias() and create_tonic_bias() to be more consistent with other functions and improve readability, by Kenneth Loi in #354

  • Deprecated postproc argument in simulate_dipole(), whereby user should explicitly smooth and scale resulting dipoles, by Christopher Bailey in #372

  • Number of drive cells and their connectivity can now be specified through the n_drive_cells and cell_specific arguments in Network.add_xxx_drive() methods, replacing use of repeats and sync_within_trial, by Ryan Thorpe in #383

  • Simulation end time and integration time have to be specified now with tstop and dt in simulate_dipole(), by Mainak Jas in #397

  • CellResponse.reset() method is not supported any more, by Mainak Jas in #397

  • Target cell types and their connections are created for each drive according to the synaptic weight and delay dictionaries assigned in Network.add_xxx_drive(), by Ryan Thorpe in #369

  • Cell objects can no longer be accessed from Network as the cells attribute has been removed, by Ryan Thorpe in #436

People who contributed to this release (in alphabetical order):




  • Fix missing autapses in network construction, by Mainak Jas in #50

  • Fix rhythmic input feed, by Ryan Thorpe in #98

  • Fix bug introduced into rhythmic input feed and add test, by Christopher Bailey in #102

  • Fix bug in amplitude of delay (for connection between L2 Basket and Gaussian feed) being passed incorrectly, by Mainak Jas in #146

  • Connections now cannot be removed by setting the weights to 0., by Mainak Jas and Ryan Thorpe in #162

  • MPI and Joblib backends now apply jitter across multiple trials identically, by Ryan Thorpe in #171

  • Fix bug in Poisson input where the first spike was being missed after the start time, by Mainak Jas in #204

  • Fix bug in network to add empty spike when empty file is read in, by Samika Kanekar and Ryan Thorpe in #207


  • Make a context manager for Network class, by Mainak Jas and Blake Caldwell in #86

  • Create Spikes class, add write methods and read functions for Spikes and Dipole classes, by Ryan Thorpe in #96

  • Only specify n_jobs when instantiating the JoblibBackend, by Blake Caldwell in #79

  • Make a context manager for parallel backends (JoblibBackend, MPIBackend), by Blake Caldwell in #79

  • Add average_dipoles() function, by Blake Caldwell in #156

  • New API for defining external drives and biases to network. By default, a Network is created without drives, which are added using class methods. The argument add_drives_from_params controls this behaviour, by Christopher Bailey in #221

  • Examples apply random state seeds that reproduce the output of HNN GUI documentation, by Christopher Bailey in #221

  • Force conversion to nAm (from fAm) for output of simulate_dipole() regardless of postproc-argument, which now only controls parameter file-based smoothing and scaling, by Christopher Bailey in #264

People who contributed to this release (in alphabetical order):