Network recruitment to coherent oscillations in a hippocampal model (Stacey et al. 2011)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:135903
"... Here we demonstrate, via a detailed computational model, a mechanism whereby physiological noise and coupling initiate oscillations and then recruit neighboring tissue, in a manner well described by a combination of Stochastic Resonance and Coherence Resonance. We develop a novel statistical method to quantify recruitment using several measures of network synchrony. This measurement demonstrates that oscillations spread via preexisting network connections such as interneuronal connections, recurrent synapses, and gap junctions, provided that neighboring cells also receive sufficient inputs in the form of random synaptic noise. ..."
Reference:
1 . Stacey WC, Krieger A, Litt B (2011) Network recruitment to coherent oscillations in a hippocampal computer model. J Neurophysiol 105:1464-81 [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: Hippocampus;
Cell Type(s): Hippocampus CA1 pyramidal GLU cell; Hippocampus CA3 pyramidal GLU cell; Hippocampus CA1 interneuron oriens alveus GABA cell; Hippocampus CA1 basket cell;
Channel(s): I Na,t; I A; I K; I h;
Gap Junctions: Gap junctions;
Receptor(s): GabaA; AMPA; NMDA;
Gene(s):
Transmitter(s):
Simulation Environment: NEURON;
Model Concept(s): Oscillations;
Implementer(s): Lazarewicz, Maciej [mlazarew at gmu.edu]; Stacey, William [wstacey at med.umich.edu];
Search NeuronDB for information about:  Hippocampus CA1 pyramidal GLU cell; Hippocampus CA3 pyramidal GLU cell; Hippocampus CA1 interneuron oriens alveus GABA cell; GabaA; AMPA; NMDA; I Na,t; I A; I K; I h;
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//
//  NOTICE OF COPYRIGHT AND OWNERSHIP OF SOFTWARE
//
// Copyright 2010, The University Of Michigan
// 	
//   All rights reserved.
//   For research use only; commercial use prohibited.
//   No Distribution without permission of William Stacey
//   wstacey@umich.edu
//
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%



begintemplate SynObj

public addSyn, printSyn, printLoc, connect2syn, printCon, getSyn, addNetCon, addSynStim, removeConnections, conList, synList

objref  synList, conList, loc, stimList, this
 
strdef cmd
 
 
// =================================================================================================
//
// init()
//
// =================================================================================================
proc init() {
    synList  = new List()
    conList  = new List()
    stimList = new List()

    loc = new SectionRef()
}




// =================================================================================================
//
// connect2syn
//
// =================================================================================================
proc connect2syn() {

    if (numarg()==5) {
        
        conList.prepend( new NetCon($o1,  synList.object($2), $3, $4, $5 ) )
    
    } else {
        
        print "USAGE: connect2syn(src obj, syn nr, threshold, delay, weight)"
        
    }
}




// =================================================================================================
//
// removeConnections
//
// =================================================================================================
proc removeConnections() {

	conList.remove_all()
}




// =================================================================================================
//
// addNetCon(nc, threshold, delay, weight) - for MPI
//
// =================================================================================================
proc addNetCon() {

    if (numarg()==1 || numarg()==4 ) {
    
        conList.prepend($o1)
    
        if (numarg()==4) {
  
                $o1.threshold = $2
                $o1.delay     = $3
                $o1.weight    = $4
        
        }
        
    } else {
        
        print "USAGE: connect(nc, [threshold, delay, weight])"
        
    }
}




// =================================================================================================
//
// addSyn( tau1 (ms), tau2 (ms), Erev (mV), mode, synLoc )
//
// mode: 2 - NMDA
// =================================================================================================
func addSyn() {

    last = synList.count()
    
    if (numarg()==5) {
        show_errmess_always(1)
        sprint(cmd, "loc.sec synList.append(new %s(%g))", $s4, $5)
        execute1(cmd, this)
    	//if ($4==0) loc.sec synList.append(new Exp2Syn($5))
        //if ($4==1) loc.sec synList.append(new Exp2SynAMPA($5))
        //if ($4==2) loc.sec synList.append(new Exp2SynNMDA($5))
        //if ($4==3) loc.sec synList.append(new Exp2SynNMDAperm($5))
            
        synList.o(last).tau1 = $1
        synList.o(last).tau2 = $2
        synList.o(last).e    = $3
        //loc.sec printf("%s %s(%g) %g %g %g\n", secname(), $s4, $5, synList.o(last).tau1, synList.o(last).tau2, synList.o(last).e)
        return (last)

    } else {
        
        print "USAGE: addSyn(tau1 (ms), tau2 (ms), eRev (mV), modFileName, synLoc)"
        return -1
    }
}




// =================================================================================================
//
// addSynStim
//
// =================================================================================================
func addSynStim() {
        
    if (numarg()==9 || numarg()==10) {

            tau1  = $1
            tau2  = $2
            eRev  = $3
            f     = $4
            nr_sp = $5
            start = $6
            noise = $7
            g     = $8
            gid   = $9

            if (numarg()==9){
    
                stim_syn_nr = addSyn(tau1, tau2, eRev)
            
            }else{
                
                syn_mode = $10
                stim_syn_nr = addSyn(tau1, tau2, eRev, syn_mode)

            }

            loc.sec stimList.append(new NetStim())
            last  = stimList.count()
            
            if (f>0) {

                stimList.o(last-1).interval = 1000/f
                stimList.o(last-1).number   = nr_sp

            }else{

                stimList.o(last-1).interval = 1
                stimList.o(last-1).number   = 0

            }

            stimList.o(last-1).start    = start
            stimList.o(last-1).noise    = noise
            stimList.o(last-1).seed((startsw()*gid)%10000)

            connect2syn(stimList.o(last-1), stim_syn_nr, 0, 0, g)
        
            return stim_syn_nr

    } else {
        
        print "USAGE: addSynStim(tau1 (ms), tau2 (ms), eRev (mV), f (Hz), number spikes, start time (ms), noise <0-1>, g (nS), gid )"
        return -1
    }

}




// =================================================================================================
//
// printLoc
//
// =================================================================================================
proc printLoc() {
    
    loc.sec print secname() 
}




// =================================================================================================
//
// getSyn(nr) - return reference to the synapse #nr
//
// =================================================================================================
obfunc getSyn() {
    
    return synList.object($1)
}




// =================================================================================================
//
// printSyn
//
// =================================================================================================
proc printSyn() {
    for i=0, synList.count()-1 {
        loc.sec printf("%d, %s, tau1= %g ms, tau2= %g ms, e= %g mV loc= %s\n", i, synList.object(i), synList.object(i).tau1, synList.object(i).tau2, synList.object(i).e, secname() )
    }
}




strdef xs, ys
objref c, c1

// =================================================================================================
//
// printCon
//
// =================================================================================================
proc printCon() {

    
    for i=0, conList.count()-1 {
        c  = conList.object(i)
        x  = c.preloc
        xs = secname()
        pop_section()
        y  = c.postloc()
        ys = secname()
        pop_section()
        c1 = c.syn()
        
        loc.sec printf("%d, %s(%g) -> %s(%g) %s, tau1= %g (ms), tau2= %g (ms), eRev= %g (mV), loc= %s\n", i, xs, x, ys, y, c1, c1.tau1, c1.tau2, c1.e,  secname() )
        
    }
}




endtemplate SynObj