Dentate gyrus network model pattern separation and granule cell scaling in epilepsy (Yim et al 2015)

 Download zip file 
Help downloading and running models
Accession:185355
The dentate gyrus (DG) is thought to enable efficient hippocampal memory acquisition via pattern separation. With patterns defined as spatiotemporally distributed action potential sequences, the principal DG output neurons (granule cells, GCs), presumably sparsen and separate similar input patterns from the perforant path (PP). In electrophysiological experiments, we have demonstrated that during temporal lobe epilepsy (TLE), GCs downscale their excitability by transcriptional upregulation of ‘leak’ channels. Here we studied whether this cell type-specific intrinsic plasticity is in a position to homeostatically adjust DG network function. We modified an established conductance-based computer model of the DG network such that it realizes a spatiotemporal pattern separation task, and quantified its performance with and without the experimentally constrained leaky GC phenotype. ...
Reference:
1 . Yim MY, Hanuschkin A, Wolfart J (2015) Intrinsic rescaling of granule cells restores pattern separation ability of a dentate gyrus network model during epileptic hyperexcitability. Hippocampus 25:297-308 [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Realistic Network; Neuron or other electrically excitable cell;
Brain Region(s)/Organism: Dentate gyrus;
Cell Type(s): Dentate gyrus granule GLU cell; Dentate gyrus mossy cell; Dentate gyrus basket cell; Dentate gyrus hilar cell; Dentate gyrus MOPP cell;
Channel(s): I Chloride; I K,leak; I Cl, leak; Kir; Kir2 leak;
Gap Junctions:
Receptor(s): GabaA; AMPA;
Gene(s): IRK; Kir2.1 KCNJ2; Kir2.2 KCNJ12; Kir2.3 KCNJ4; Kir2.4 KCNJ14;
Transmitter(s): Gaba; Glutamate;
Simulation Environment: NEURON;
Model Concept(s): Activity Patterns; Spatio-temporal Activity Patterns; Intrinsic plasticity; Pathophysiology; Epilepsy; Homeostasis; Pattern Separation;
Implementer(s): Yim, Man Yi [manyi.yim at googlemail.com]; Hanuschkin, Alexander ; Wolfart, Jakob ;
Search NeuronDB for information about:  Dentate gyrus granule GLU cell; GabaA; AMPA; I Chloride; I K,leak; I Cl, leak; Kir; Kir2 leak; Gaba; Glutamate;
//**********************       PRINT FILES         *************************

// ModelDB file along with publication:
// Yim MY, Hanuschkin A, Wolfart J (2015) Hippocampus 25:297-308.
// http://onlinelibrary.wiley.com/doi/10.1002/hipo.22373/abstract

// Man Yi Yim / 2015

// Print out the output spikes, membrane potential and network connections in the main code into files
// This code contains the following proc's
// proc saveNet()
// proc sMatrix_init()
// proc sMatrix()
// proc SpkMx()
// proc SpkMx_template()
// proc write_customstate()
// proc write_stimIn()

// Read out the ID of pre or precell (by Ted Carnevale)
// argument is a NetCon

obfunc myprecell() { localobj nil
  // nil points to NULLobject
  if ($o1.precell() == nil) {
    return $o1.pre()
  } else {
    return $o1.precell()
  }
}

//***Network connections***
strdef DGNC_name_
objref dfile
dfile = new File()
proc saveNet(){ local i
	print "write out Net cons file ..."
        sprint (DGNC_name_,"%s-%d-%d%s.%s", "DGNC", PP_box_startid_, PP_box_nr_, idname, suffix)
	dfile.wopen(DGNC_name_)
	for i=0, nclist.count-1 {
		dfile.printf("%s\t%s\n", myprecell(nclist.object(i)), nclist.object(i).postcell)}
// vbc2gc.x[i], vmc2gc.x[i], vhc2gc.x[i], vgc2gc.x[i])} ??
	dfile.close()
}

//***Header of the voltage file***
strdef strmat
objref efile
efile = new File()
strdef DGVt_name_
proc sMatrix_init(){				// here the header info for sMatrix is written out...
	n_to_print = 500
	print "Output memb voltage traces of every ", ngcell/n_to_print, " GC and all other cells to file"
        sprint (DGVt_name_,"%s-%d-%d%s.%s", "DGVt", PP_box_startid_, PP_box_nr_, idname, suffix)
	efile.wopen(DGVt_name_)
	efile.printf("# t\t")
	efile.printf("\n")
	efile.close(DGVt_name_)
}

proc sMatrix(){ local j
	efile.aopen(DGVt_name_)
	efile.printf("%f\t", t)
	for i = 0, n_to_print-1 {
		efile.printf("%f\t", cells.object[int(i*ngcell/n_to_print)].soma.v(0.5))}
	efile.printf("\n")
	efile.close(DGVt_name_)
}

proc SpkMx() { local i, j
        strdef DGsp_name_
	sprint (DGsp_name_,"%s-%d-%d%s.%s", "DGsp", PP_box_startid_, PP_box_nr_, idname, suffix)
        print "Create: ", DGsp_name_   // output filename
        dfile.wopen(DGsp_name_)
 	k = 0 
        while (k < VmT.size) {
                for j = 0, (ngcell+nbcell+nmcell+nhcell-1) {
                        if(Spike[j].x[k] != 0) {
                                dfile.printf("%f\t%d\n", VmT.x[k], j)           // write out time of spike and cell id!
				// Spike_times[j].append(VmT.x[k])		// generate vector of spike times for each cell. Moved to seperate function
                        }
                }
                k +=1
        }
        dfile.close(DGsp_name_)
}

proc SpkMx_template() { local i, j
        strdef DGsp_name_

	sprint (DGsp_name_,"%s-%d-%d%s.%s", "GCsp", PP_box_startid_, PP_box_nr_, idname, suffix)

        print "Create: ",DGsp_name_   // output filename

        dfile.wopen(DGsp_name_)

        k = 0 
        while(k <  VmT.size) {
                for j = 0, ngcell-1 {
                        if(Spike[j].x[k] != 0) {
                                dfile.printf("%f\t%d\n", VmT.x[k], j)           // write out time of spike and cell id!
                        }
                }
                k +=1
        }
        dfile.close(DGsp_name_)
}

proc write_customstate() { local i, j
        strdef f_name_
	sprint (f_name_,"%s-%d-%d%s.%s", "NetworkState_OUT_", PP_box_startid_, PP_box_nr_, idname, suffix)

        print "Create: ",f_name_   // output filename

        dfile.wopen(f_name_)

  	for i = 0, ngcell -1 {
    		forsec Gcell[i].all { // iterate over all sections of this cell
      			for (x,0) { // iterate over internal nodes
                                dfile.printf("%f\n", v)           // write out time of spike and cell id!
      			}
    		}
  	}
        for i = 0, nbcell -1 {
                forsec Bcell[i].all { // iterate over all sections of this cell
                        for (x,0) { // iterate over internal nodes
                                dfile.printf("%f\n", v)           // write out time of spike and cell id!
                        }
                }
        }
        for i = 0, nmcell -1 {
                forsec Mcell[i].all { // iterate over all sections of this cell
                        for (x,0) { // iterate over internal nodes
                                dfile.printf("%f\n", v)           // write out time of spike and cell id!
                        }
                }
        }
        for i = 0, nhcell -1 {
                forsec Hcell[i].all { // iterate over all sections of this cell
                        for (x,0) { // iterate over internal nodes
                                dfile.printf("%f\n", v)           // write out time of spike and cell id!
                        }
                }
        }
        dfile.close(f_name_)
}

proc write_stimIn() {
        strdef f_name_
	sprint (f_name_,"%s-%d-%d%s.%s", "StimIn", PP_box_startid_, PP_box_nr_, idname, suffix)

        print "Create: ",f_name_   // output filename

        dfile.wopen(f_name_)
	for i=0,npp-1 {
           for j=0,vec_stim[i].size()-1 {
             dfile.printf("%f\t%d\n",vec_stim[i].x[j],i)
	   }
	}

	// write out noise input...
        if (print_stim_noise == 1){
         if (debug_ == 2) {print "write out noise input..." }
         for i=0,npp-1 {
           for j=0,vec_stim_noise[i].size()-1 {
             dfile.printf("%f\t%d\n",vec_stim_noise[i].x[j],i+npp)
           }
         }
        }
       dfile.close(f_name_)
}