Default mode network model (Matsui et al 2014)

 Download zip file 
Help downloading and running models
Accession:169775
Default mode network (DMN) shows intrinsic, high-level activity at rest. We tested a hypothesis proposed for its role in sensory information processing: Intrinsic DMN activity facilitates neural responses to sensory input. A neural network model, consisting of a sensory network (Nsen) and a DMN, was simulated. The Nsen contained cell assemblies. Each cell assembly comprised principal cells, GABAergic interneurons (Ia, Ib), and glial cells. We let the Nsen carry out a perceptual task: detection of sensory stimuli. … This enabled the Nsen to reliably detect the stimulus. We suggest that intrinsic default model network activity may accelerate the reaction speed of the sensory network by modulating its ongoing-spontaneous activity in a subthreshold manner. Ambient GABA contributes to achieve an optimal ongoing spontaneous subthreshold neuronal state, in which GABAergic gliotransmission triggered by the intrinsic default model network activity may play an important role.
Reference:
1 . Matsui H, Zheng M, Hoshino O (2014) Facilitation of neuronal responses by intrinsic default mode network activity. Neural Comput 26:2441-64 [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): GabaA; Glutamate;
Gene(s):
Transmitter(s): Gaba; Glutamate;
Simulation Environment: C or C++ program;
Model Concept(s): Sensory processing;
Implementer(s):
Search NeuronDB for information about:  GabaA; Glutamate; Gaba; Glutamate;
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include <string.h>
#include"MT19937.h"
#include"parameter.h"

double rung(double x,double y,double z,int n);
double equation(double x,double y,double z,int n);
struct cell{
		double mem;//////////////////////////////////////////////membrane potential
		double curs;/////////////////////////////////////////////current which cell recieve
		double r;////////////////////////////////////////////////fraction of receptors in open state
		double conc;/////////////////////////////////////////////concentration of transmitters
		int fire;////////////////////////////////////////////////state of cell (firing stete, resting stete or not)
};

void firing(struct cell *str,int n);
struct conection{
		double cur;//////////////////////////////////////////////current which flows via each connection
		double sum;//////////////////////////////////////////////summation of fraction of open state receptors
};
int main(void)
{
	FILE *fp;
	FILE *fp_ras;
	FILE *fp_p;
	int i,j,v,n,z,rast_plot;
	double t;
	struct conection I_pp[8][20], I_pp_DMN[20], I_pIb[8][20], I_pIb_DMN[20], I_pext[8][20], I_inp[8][20], I_Iap[8][20], I_Iap_DMN[8][20], I_Ibp[8][20], I_Ibp_DMN[20], I_gl_p[8][20], I_gl_Ia[8][20],I_P_sen_P_DMN[8][20];
	struct cell P_sen[8][20],Ib_sen[8][20],Ia[8][20],glia[8][20],P_DMN[20],Ib_DMN[20];
	fp=fopen("data.csv","w");
	fp_ras=fopen("raster_plot.dat","w");
	fp_p=fopen("up.csv","w");
	init_genrand(seed);
//////////////////////////////////////////////////////initalize all value 
	for(i=0;i<=7;i++)
	{
		for(j=0;j<=19;j++)
		{
			P_sen[i][j].mem=u_p_rest;
			Ib_sen[i][j].mem=u_Ib_rest;
			Ia[i][j].mem=u_Ia_rest;
			glia[i][j].mem=u_gl_rest;
			P_DMN[j].mem=u_p_rest;
			Ib_DMN[j].mem=u_Ib_rest;
			P_sen[i][j].r=0.0;
			Ib_sen[i][j].r=0.0;
			Ia[i][j].r=0.0;
			glia[i][j].r=0.0;
			P_DMN[j].r=0.0;
			Ib_DMN[j].r=0.0;
			P_sen[i][j].conc=0.0;
			Ib_sen[i][j].conc=0.0;
			Ia[i][j].conc=0.0;
			glia[i][j].conc=GABA_0;
			P_DMN[j].conc=0.0;
			Ib_DMN[j].conc=0.0;
			P_sen[i][j].fire=0;
			Ib_sen[i][j].fire=0;
			Ia[i][j].fire=0;
			glia[i][j].fire=0;
			P_DMN[j].fire=0;
			Ib_DMN[j].fire=0;
		}
	}
//////////////////////////////////////////////////////set label of each date
	for(i=0;i<=179;i++)
	{
		fprintf(fp_ras,"ras_wave_%d_%d,",i/20,i%20);
	}
	for(i=0;i<=159;i++)
	{
		fprintf(fp_p,"up_wave_%d_%d,",i/20,i%20);
	}
	fprintf(fp_ras,"\n");
	fprintf(fp_p,"\n");
	fprintf(fp,"up_DMN, ,uIb_DMN, ,up_sen0,up_sen1,up_sen2,up_sen3,up_sen4,up_sen5,up_sen6,up_sen7, ,uIa0,uIa1,uIa2,uIa3,uIa4,uIa5,uIa6,uIa7, ,uIb_sen0,uIb_sen1,uIb_sen2,uIb_sen3,uIb_sen4,uIb_sen5,uIb_sen6,uIb_sen7, ,ugl0,ugl1,ugl2,ugl3,ugl4,ugl5,ugl6,ugl7, ,GABA_ext0,GABA_ext1,GABA_ext2,GABA_ext3,GABA_ext4,GABA_ext5,GABA_ext6,GABA_ext7\n");
	for(t=0.0;t<=t_end;t+=h)
	{
//////////////////////////////////////////////////////output membrane potentials of P cell(DMN), Ib (DMN), P (Nsen), Ia, Ib (Nsen) and glia, and concentration of ambient-GABA
		fprintf(fp,"%.12f, ,%.12f, ,%.12f,%.12f,%.12f,%.12f,%.12f,%.12f,%.12f,%.12f, ,%.12f,%.12f,%.12f,%.12f,%.12f,%.12f,%.12f,%.12f, ,%.12f,%.12f,%.12f,%.12f,%.12f,%.12f,%.12f,%.12f, ,%.12f,%.12f,%.12f,%.12f,%.12f,%.12f,%.12f,%.12f, ,%.12f,%.12f,%.12f,%.12f,%.12f,%.12f,%.12f,%.12f\n",
		P_DMN[m].mem,
		Ib_DMN[m].mem,
		P_sen[0][m].mem,P_sen[1][m].mem,P_sen[2][m].mem,P_sen[3][m].mem,P_sen[4][m].mem,P_sen[5][m].mem,P_sen[6][m].mem,P_sen[7][m].mem,
		Ia[0][m].mem,Ia[1][m].mem,Ia[2][m].mem,Ia[3][m].mem,Ia[4][m].mem,Ia[5][m].mem,Ia[6][m].mem,Ia[7][m].mem,
		Ib_sen[0][m].mem,Ib_sen[1][m].mem,Ib_sen[2][m].mem,Ib_sen[3][m].mem,Ib_sen[4][m].mem,Ib_sen[5][m].mem,Ib_sen[6][m].mem,Ib_sen[7][m].mem,
		glia[0][m].mem,glia[1][m].mem,glia[2][10].mem,glia[3][m].mem,glia[4][m].mem,glia[5][m].mem,glia[6][m].mem,glia[7][m].mem,
		glia[0][m].conc,glia[1][m].conc,glia[2][m].conc,glia[3][m].conc,glia[4][m].conc,glia[5][m].conc,glia[6][m].conc,glia[7][m].conc);
//////////////////////////////////////////////////////output raster plot and all membrane potentials of P cells
		rast_plot=0;
		for(i=0;i<=7;i++)
		{
			
			for(j=0;j<=19;j++)
			{
		    	rast_plot++;
				if(P_sen[i][j].fire==1)
				{
					fprintf(fp_ras,"%d,",rast_plot);
				}
				else
				{
					fprintf(fp_ras,"0,");
				}
				
				if(t>=0.5 && t<=(inp_t-h))
				{
					if(P_sen[i][j].fire>=1 && P_sen[i][j].fire<=10)
					{
						fprintf(fp_p,",");
					}
					else
					{
						fprintf(fp_p,"%.12f,",P_sen[i][j].mem);
					}
				}
			}
		}
		for(j=0;j<=19;j++)
		{
			rast_plot++;
			if(P_DMN[j].fire==1)
			{
				fprintf(fp_ras,"%d,",rast_plot);
			}
			else
			{
				fprintf(fp_ras,"0,");
			}
		}
		fprintf(fp_ras,"\n");
		if(t>=0.5 && t<=(inp_t-h))
		{
			fprintf(fp_p,"\n");
		}
//////////////////////////////////////////////////////calucuate sigma
		for(i=0;i<=7;i++)
		{
			for(j=0;j<=19;j++)	
			{
				I_pp[i][j].sum=0.0;
				I_pp_DMN[j].sum=0.0;
				I_pIb[i][j].sum=0.0;
				I_pIb_DMN[j].sum=0.0;
				I_Ibp[i][j].sum=0.0;
				I_Ibp_DMN[j].sum=0.0;
				I_Iap_DMN[i][j].sum=0.0;
				I_P_sen_P_DMN[i][j].sum=0.0;
			}
		}
		for(i=0;i<=7;i++)
		{
			for(j=0;j<=19;j++)
			{
				for(v=0;v<=19;v++)
				{
					if(v != j)
					{
						I_pp[i][j].sum += w_pp * P_sen[i][v].r;
						if(i==0)
						{
							I_pp_DMN[j].sum += w_pp_DMN * P_DMN[v].r;
						}	
					}
					I_Ibp_DMN[j].sum += w_Ibp_DMN * P_sen[i][v].r;
					I_pIb[i][j].sum += w_pIb * Ib_sen[i][v].r;
					if(i==0)
					{
						I_pIb_DMN[j].sum += w_pIb_DMN * Ib_DMN[j].r;
					}
				}
				for(v=0;v<=7;v++)
				{
					if(v != i)
					{
						I_Ibp[i][j].sum += w_Ibp * P_sen[v][j].r;
					}
				}
				if(i==0)
				{
					I_Iap_DMN[0][0].sum += w_Ia_DMN * P_DMN[j].r;
					I_P_sen_P_DMN[0][0].sum += w_p_DMN_Nsen * P_DMN[j].r;
				}
			}
		}
//////////////////////////////////////////////////////solve current and membrane potential equaton
		for(i=0;i<=7;i++)
		{
			for(j=0;j<=19;j++)
			{
				I_pp[i][j].cur=-gh_AMPA*(P_sen[i][j].mem-u_AMPA_rev)*I_pp[i][j].sum;
				I_pIb[i][j].cur=-gh_GABA*(P_sen[i][j].mem-u_GABA_rev)*I_pIb[i][j].sum;
				I_pext[i][j].cur=-gh_GABA*(P_sen[i][j].mem-u_GABA_rev)*o_p*glia[i][j].r;
				if(t<=inp_t || t>=inp_t+inp_t_len )
				{
					I_inp[i][j].cur = 0.0;
				}
				else
				{
					I_inp[i][j].cur = a_p*exp(-1*((i-inp)/t_p)*((i-inp)/t_p));
				}
				I_Iap[i][j].cur = -gh_AMPA*(Ia[i][j].mem-u_AMPA_rev)*w_Ia * P_sen[i][j].r;
				I_Ibp[i][j].cur = -gh_AMPA*(Ib_sen[i][j].mem-u_AMPA_rev)*I_Ibp[i][j].sum;
				I_gl_Ia[i][j].cur = -gh_GABA*(glia[i][j].mem-u_GABA_rev)*w_gl_Ia*Ia[i][j].r;
				I_Iap_DMN[i][j].cur = -gh_AMPA*(Ia[i][j].mem-u_AMPA_rev)*I_Iap_DMN[0][0].sum;
				I_P_sen_P_DMN[i][j].cur = -gh_AMPA*(P_sen[i][j].mem-u_AMPA_rev)*I_P_sen_P_DMN[0][0].sum;
				
				P_sen[i][j].curs = I_pp[i][j].cur + I_pIb[i][j].cur + I_pext[i][j].cur + I_inp[i][j].cur + I_P_sen_P_DMN[i][j].cur;
				Ia[i][j].curs = I_Iap[i][j].cur + I_Iap_DMN[i][j].cur;
				Ib_sen[i][j].curs = I_Ibp[i][j].cur;
				glia[i][j].curs = I_gl_Ia[i][j].cur;
				
	    		P_sen[i][j].mem += rung(t,P_sen[i][j].mem,P_sen[i][j].curs,0);
			    Ia[i][j].mem += rung(t,Ia[i][j].mem,Ia[i][j].curs,1);
			    Ib_sen[i][j].mem += rung(t,Ib_sen[i][j].mem,Ib_sen[i][j].curs,2);
			    glia[i][j].mem += rung(t,glia[i][j].mem,glia[i][j].curs,3);
				
				firing(&P_sen[i][j],0);
				firing(&Ia[i][j],1);
				firing(&Ib_sen[i][j],2);
				if(i==0)
				{
					I_pp_DMN[j].cur=-gh_AMPA*(P_DMN[j].mem-u_AMPA_rev)*I_pp_DMN[j].sum;
					I_pIb_DMN[j].cur=-gh_GABA*(P_DMN[j].mem-u_GABA_rev)*I_pIb_DMN[j].sum;
					I_Ibp_DMN[j].cur=-gh_AMPA*(Ib_DMN[j].mem-u_AMPA_rev)*I_Ibp_DMN[j].sum;
			
					P_DMN[j].curs = I_pp_DMN[j].cur + I_pIb_DMN[j].cur;
					Ib_DMN[j].curs= I_Ibp_DMN[j].cur;
			
					P_DMN[j].mem += rung(t,P_DMN[j].mem,P_DMN[j].curs,0);
		   			Ib_DMN[j].mem += rung(t,Ib_DMN[j].mem,Ib_DMN[j].curs,2);
			
					firing(&P_DMN[j],3);
					firing(&Ib_DMN[j],4);
				}
			}		
		}
//////////////////////////////////////////////////////solve equation of open state receptor's fraction and ambient-GABA connentration
		for(i=0;i<=7;i++)
		{
			for(j=0;j<=19;j++)
			{
		    	P_sen[i][j].r += rung(t,P_sen[i][j].r,P_sen[i][j].conc,4);
		    	Ia[i][j].r += rung(t,Ia[i][j].r,Ia[i][j].conc,5);
				Ib_sen[i][j].r += rung(t,Ib_sen[i][j].r,Ib_sen[i][j].conc,5);
				glia[i][j].conc += rung(t,glia[i][j].conc,glia[i][j].mem,6);
			    glia[i][j].r+= rung(t,glia[i][j].r,glia[i][j].conc,7);
				if(i==0)
				{
				    P_DMN[j].r += rung(t,P_DMN[j].r,P_DMN[j].conc,4);
					Ib_DMN[j].r+= rung(t,Ib_DMN[j].r,Ib_DMN[j].conc,5);
				}
			}
		}
	}
	fclose(fp);		
	fclose(fp_ras);
	fclose(fp_p);
}

double rung(double x,double y,double z, int n)///////////////////Runge-Kutta algorithm
{
	double dy;
	double k[4];
	k[0]=equation(x,y,z,n)*h;
	k[1]=equation(x+h/2,y+k[0]/2,z,n)*h;
	k[2]=equation(x+h/2,y+k[1]/2,z,n)*h;
	k[3]=equation(x+h,y+k[2],z,n)*h;
	dy=(k[0]+2*k[1]+2*k[2]+k[3])/6;
	
	return dy;
}

double equation(double x,double y,double z,int n)////////////////differential equations
{
	switch(n)
	{
		case 0:
			return (-g_p*(y-u_p_rest)+z)/c_p;
			break;
		case 1:
			return (-g_Ia*(y-u_Ia_rest)+z)/c_Ia;
			break;
		case 2:
			return (-g_Ib*(y-u_Ib_rest)+z)/c_Ib;
			break;
		case 3:
			return (-g_gl*(y-u_gl_rest)+z)/c_gl;
			break;
		case 4:
			return a_AMPA*z*(1-y)-b_AMPA*y;
			break;
		case 5:
			return a_GABA*z*(1-y)-b_GABA*y;
			break;
		case 6:
			return -gam*(y-GABA_0)+T_GL*(GABA_max-y)*(y-GABA_min)*(z-u_gl_rev);
			break;
		case 7:
			return a_GABA*z*(1-y)-b_GABA*y;
			break;
	}
}

void firing(struct cell *str,int n)/////////////////////////////generator of action potentials
{
	double ran,Prob,rest;
	switch(n)
	{
		case 0:
			rest=u_p_rest;
			Prob=1.0/(1.0+exp(-1.0*n_p*(str->mem-s_p)));
			break;
		case 1:
			rest=u_Ia_rest;
			Prob=1.0/(1.0+exp(-1.0*n_Ia*(str->mem-s_Ia)));
			break;
		case 2:
			rest=u_Ib_rest;
			Prob=1.0/(1.0+exp(-1.0*n_Ib*(str->mem-s_Ib)));
			break;
		case 3:
			rest=u_p_rest;
			Prob=1.0/(1.0+exp(-1.0*n_p_DMN*(str->mem-s_p_DMN)));
			break;
		case 4:
			rest=u_Ib_rest;
			Prob=1.0/(1.0+exp(-1.0*n_Ib_DMN*(str->mem-s_Ib_DMN)));
			break;
	}
	if(str->fire==0)
	{
		ran=genrand_real2();
		if(Prob >= ran)
		{
				str->fire++;
				str->conc=1.0e-3;
				str->mem=-10e-3;
		}
	}
	else
	{
		if(str->fire==20)
		{
			str->fire=0;
			str->conc=0.0;
		}
		else
		{
			if(str->fire<10)
			{
				str->conc=1e-3;
				str->mem=-10e-3;
				str->fire++;
			}
			else
			{
				str->conc=0.0;
				str->mem=rest;
				str->fire++;
			}
		}
	}
}