Generating oscillatory bursts from a network of regular spiking neurons (Shao et al. 2009)

 Download zip file 
Help downloading and running models
Accession:120783
Avian nucleus isthmi pars parvocellularis (Ipc) neurons are reciprocally connected with the tectal layer 10 (L10) neurons and respond with oscillatory bursts to visual stimulation. To elucidate mechanisms of oscillatory bursting in this network of regularly spiking neurons, we investigated an experimentally constrained model of coupled leaky integrate-and-fire neurons with spike-rate adaptation. The model reproduces the observed Ipc oscillatory bursting in response to simulated visual stimulation.
Reference:
1 . Shao J, Lai D, Meyer U, Luksch H, Wessel R (2009) Generating oscillatory bursts from a network of regular spiking neurons without inhibition. J Comput Neurosci 27:591-606 [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):
Channel(s):
Gap Junctions:
Receptor(s): AMPA;
Gene(s):
Transmitter(s): Acetylcholine; Glutamate;
Simulation Environment: C or C++ program;
Model Concept(s): Bursting; Oscillations; Vision;
Implementer(s): Lai, Dihui [dlai at artsci.wustl.edu];
Search NeuronDB for information about:  AMPA; Acetylcholine; Glutamate;
#include "matrixpool.h"
#include <iostream>
#include <fstream>
#include <cmath>
#include "rng.h"
#include <ctime>
using namespace std;

void NormTopMat(double **Mat, double A, double wd, const int row, const int col)
{
	int i=0,j=0;
	for (i=1;i<row;i++)
		Mat[i]=Mat[i-1]+col;
	for (i=0;i<row;i++){
		for(j=0;j<col;j++){
			 Mat[i][j]=A*exp(-pow(double(i-j),2)/(2*pow(wd,2)));
		}
	}
}

//void nRandTopMat(double **Mat,  double A, double wd, const int row, const int col)
//{
//	int i=0,j=0;
//	extern int seed;
//	for (i=1;i<row;i++)
//		Mat[i]=Mat[i-1]+col;
//	for (i=0;i<row;i++){
//		for(j=0;j<col;j++){
//			if(abs(i-j)<wd)
//			 Mat[i][j]=A*fabs(gsdev(seed));
//			else
//			Mat[i][j]=0;
//		}
//	}
//}
//void RandTopMat(double **Mat,  double A, double wd, const int row, const int col)
//{
//	int i=0,j=0;
//	 //int seed=int(time(0));
//	extern int seed;
//	for (i=1;i<row;i++)
//		Mat[i]=Mat[i-1]+col;
//	for (i=0;i<row;i++){
//		for(j=0;j<col;j++){
//			if(abs(i-j)<wd)
//			 Mat[i][j]=A*ran0(seed);
//			else
//			Mat[i][j]=0;
//		}
//	}
//}

void AntiTopMat(double **Mat, double wd,double depth, const int row, const int col)
{
	int i=0,j=0;
	for (i=1;i<row;i++)
		Mat[i]=Mat[i-1]+col;
	for (i=0;i<row;i++){
		for(j=0;j<col;j++){
			Mat[i][j]=(1-depth*exp(-pow(double(i-j),2)/(2*pow(wd,2))));
		}
	}
}

void CosTopMat(double **Mat, double wd, const int row, const int col)
{
	int i=0,j=0;
	for (i=1;i<row;i++)
		Mat[i]=Mat[i-1]+col;
	for (i=0;i<row;i++){
		for(j=0;j<col;j++){
			Mat[i][j]=(1+cos(2*3.1415/wd*(i-j+wd/2)))/2;
		}
	}

}

void NulMat(double **Mat, const int row, const int col)
{
	int i=0,j=0;
	for (i=1;i<row;i++)
		Mat[i]=Mat[i-1]+col;
	for (i=0;i<row;i++){
		for(j=0;j<col;j++){
			Mat[i][j]=0;
		}
	}
}

void iMat(double **Mat, const int row, int col)
{
	int i=0,j=0;
	for (i=1;i<row;i++)
		Mat[i]=Mat[i-1]+col;
	for (i=0;i<row;i++){
		for(j=0;j<col;j++){
			Mat[i][j]=(i==j);
		}
	}
}


void ShowMat(double **Mat, const int row, const int col)
{
	int i,j;
	ofstream wMatrix("wMatrix.txt", ios::app);
	for (i=0;i<row;i++){
		for(j=0;j<col;j++)
		{
			wMatrix<<Mat[i][j]<<' ';
		}
		wMatrix<<'\n';
	}
	wMatrix.close();
}


double dotprod(int n, double *vec1, double *vec2){
       int k, m;
       double sum=0.0;
       k=n/6;
       m=n%6;
       while(k--){
       sum+=*vec1*(*vec2);
       sum+=*(vec1+1)**(vec2+1);
       sum+=*(vec1+2)**(vec2+2);
       sum+=*(vec1+3)**(vec2+3);
       sum+=*(vec1+4)**(vec2+4);
       sum+=*(vec1+5)**(vec2+5);
       vec1+=6;
       vec2+=6;}
       while(m--)
       sum+=*vec1++**vec2++;
       return sum;
       }