Networks of spiking neurons: a review of tools and strategies (Brette et al. 2007)

 Download zip file   Auto-launch 
Help downloading and running models
This package provides a series of codes that simulate networks of spiking neurons (excitatory and inhibitory, integrate-and-fire or Hodgkin-Huxley type, current-based or conductance-based synapses; some of them are event-based). The same networks are implemented in different simulators (NEURON, GENESIS, NEST, NCS, CSIM, XPP, SPLIT, MVAspike; there is also a couple of implementations in SciLab and C++). The codes included in this package are benchmark simulations; see the associated review paper (Brette et al. 2007). The main goal is to provide a series of benchmark simulations of networks of spiking neurons, and demonstrate how these are implemented in the different simulators overviewed in the paper. See also details in the enclosed file Appendix2.pdf, which describes these different benchmarks. Some of these benchmarks were based on the Vogels-Abbott model (Vogels TP and Abbott LF 2005).
1 . Vogels TP, Abbott LF (2005) Signal propagation and logic gating in networks of integrate-and-fire neurons. J Neurosci 25:10786-95 [PubMed]
2 . Brette R, Rudolph M, Carnevale T, Hines M, Beeman D, Bower JM, Diesmann M, Morrison A, Goodman PH, Harris FC, Zirpe M, Natschl├Ąger T, Pecevski D, Ermentrout B, Djurfeldt M, Lansner A, Rochel O, Vieville T, Muller E, Davison AP, El Boustani S, Destexhe A (2007) Simulation of networks of spiking neurons: a review of tools and strategies. J Comput Neurosci 23:349-98 [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Realistic Network;
Brain Region(s)/Organism:
Cell Type(s): Abstract integrate-and-fire leaky neuron;
Gap Junctions:
Simulation Environment: NEURON; GENESIS; NEST; C or C++ program; XPP; CSIM; NCS; SPLIT; MVASpike; SciLab; Brian; PyNN; Python;
Model Concept(s): Activity Patterns; Methods;
Implementer(s): Carnevale, Ted [Ted.Carnevale at]; Hines, Michael [Michael.Hines at]; Davison, Andrew [Andrew.Davison at]; Destexhe, Alain [Destexhe at]; Ermentrout, Bard []; Brette R; Bower, James; Beeman, Dave; Diesmann M; Morrison A ; Goodman PH; Harris Jr, FC; Zirpe M ; Natschlager T ; Pecevski D ; Djurfeldt M; Lansner, Anders [ala at]; Rochel O ; Vieville T ; Muller E ; El Boustani, Sami [elboustani at]; Rudolph M ;
/*     ###########     Exact simulation of integrate-and-fire models with synaptic conductances ######################

This code is associated with the paper :
"Brette Romain (2006) , Exact simulation of integrate-and-fire models with synaptic conductances" :
Cohen Benjamin
benjamin.cohen _AT_
Last updated : Jul 2006 

If you modify the source file, please don't delete this header

/*---------------NEURON CLASS-----------------------------*/

#include <vector>
#include "annexe.h"
#include "Ncq.h"

using namespace std;

class Neurone
	Spike *spike; //Spike of the neuron. If no spike, spike = NULL
	vector<Neurone *> voisins;	//Synapses				

	//Constructor & destructor
	Neurone(Neurone **table_, Ncq *queue, double Vinit, double Vrinit, double Vtinit,double Elinit,double Eeinit, double Eiinit, double geinit, double giinit, double tausinit, double tauminit ,double dgiinit, double dgeinit, bool inhibiteur_, int id);
	/*Constructor :
		queue = Queue of spikes 
		Vinit = initial Potential 
		Vrinit = Reset Potential
		Vtinit = Threshold potential
		Elinit = Leak reversal potential
		Eeinit = Excitatory reversal potential
		Eiinit = Inhibitory reversal potential
		geinit = initial Excitatory conductance
		giinit = initial Inhibitory conductance
		tausinit = Synaptic time constant
		tauminit = Membrane time constant
		dgiinit = Inhibitory synaptic weight
		dgeinit = Excitatory synaptic weight
		inhibiteur_ = true if the neuron is inhibitor
		id_ = id of the neuron

	void ReceivePulse(int sender, double t); //Called if the neuron receive a spike
	void pulse(); //Called if the neuron must pulse
	void upgrade(); //Call by the network if  we need the exact spiking time ( in fact when the "lower bound spike" is on the top of the priority queue )

	int id; //id of the neuron ( in the table )
	double time; //Current time for the neuron
	double V,Vt,Vr; //V = Current potential
	double El,Es, Ee, Ei; //see the constructor
	double taus,taum;	
	double g,ge,gi;
	double dge,dgi;
	Ncq *queue;      //Queue of spikes
	Neurone **table; //table of neurons

	double last_pulse; //time since the last pulse
	bool inhibiteur; //true if inhibitor

 	double calcV(double newtime, double V0, double g0); //compute V at t = newtime ( relative time ) if there is no spike , and if at t = 0, V = V0, g = g0
	Spike *update_spike(bool exact);        //Return the next spike, otherwise NULL. if exact then we compute the exact spiking time, otherwise only a lowerbound

	double findNextSpike(double V0, double g0); //give the time of the next spike using newton-raphson method for (V(t) - Vt) if at t = 0, V = V0, g = g0, if there is no spike

	double lowerBound(double V0, double g0); //give a lower bound of the time of the next spike using newton-raphson method for (V(t) - Vt) if at t = 0, V = V0, g = g0, if there is no spike, and with MAX_ITER iterations

	double B; //Bound for Newton Raphson Method