Generalized Carnevale-Hines algorithm (van Elburg and van Ooyen 2009)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:115357
Demo illustrating the behaviour of the integrate-and-fire model in the parameter regime relevant for the generalized event-based Carnevale-Hines integration scheme. The demo includes the improved implementation of the IntFire4 mechanism.
Reference:
1 . van Elburg RA, van Ooyen A (2009) Generalization of the event-based Carnevale-Hines integration scheme for integrate-and-fire models. Neural Comput 21:1913-30 [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Synapse;
Brain Region(s)/Organism:
Cell Type(s): Abstract integrate-and-fire leaky neuron;
Channel(s):
Gap Junctions:
Receptor(s):
Gene(s):
Transmitter(s):
Simulation Environment: NEURON;
Model Concept(s): Simplified Models;
Implementer(s): van Elburg, Ronald A.J. [R.van.Elburg at ai.rug.nl];
// Load model
load_file("IF4rNetwork.hoc")
tstop=150

// Stop on reaching threshold
objref watchIF
watchIF=new NetCon(IF[0],nil,1,0,0)
watchIF.record("stoprun=1 print \"Stoprun\"")

// Create dialog for changing colors
objref myDialog
myDialog= new VBox()


init()


IF_E=0.1
IF_I2=-0.1

proc scanplus(){
    for (j0=-0.10;j0<=0;j0=j0+0.025) {
        for (myI2=-0.2;myI2<=0;myI2=myI2+0.05) {
            if(j0==0 && myI2==-0.15){
                //myDialog.dialog("Pick new color!")
                }
            
            IF_I2=myI2/IF[1].ai2
            IF_E=(mderiv0+m0/IF[1].taum-myI2)/IF[1].ae
            print IF_E
            print "I: ",IF_E*IF[1].ae+myI2-m0/IF[1].taum
                  
            if(IF_E <0){
                myDialog.dialog("IF_E <0")
            }
        
            if(IF_I2 >0){
                myDialog.dialog("IF_I2 >0")
            }
            
            run()
        }
        
     }
}

proc scanminus(){
    for (j0=-0.10;j0<=0;j0=j0+0.025) {
        for (myE=0.2;myE>=0;myE=myE-0.05) {
            if(j0==0 && myE==0.15){
                //myDialog.dialog("Pick new color!")
                }
            IF_E=myE/IF[1].ae
            IF_I2=(mderiv0+m0/IF[1].taum-myE)/IF[1].ai2
            print "I: ",IF_E*IF[1].ae+myI2-m0/IF[1].taum
            
            if(IF_E <0){
                myDialog.dialog("IF_E <0")
            }
        
            if(IF_I2 >0){
                myDialog.dialog("IF_I2 >0")
            }
            run()
        }
        
     }
}


proc init() {
		finitialize(v_init)
		// insert new initialization code here to change states
		// If states have been changed then complete
		// initialization with
	    setIF(IF[0],IF_E,0,IF_I2,m0)
        setIF(IF[1],IF_E,j0,IF_I2,m0)	
		if (cvode.active()) {
			cvode.re_init()
		}else{
			fcurrent()
		}
		frecord_init()
	    
	}

//===============================================================

proc makeplusplus(){
    Vmgraph.exec_menu("Erase")
    Imgraph.exec_menu("Erase")
    ISynGraph.exec_menu("Erase")
    
    m0=0.5
    mderiv0=0.25
    j0=0
    
    tstart=0
    if(shortsim==1){
        tstop=(4-m0)/mderiv0
    }else{
        tstop=150
    }
    
    
    Vmgraph.beginline(2, 1)
    Vmgraph.line(0, m0)
    Vmgraph.line((1.25-m0)/mderiv0, 1.25)
    
    Vmgraph.beginline(2, 2)
    Vmgraph.line(0, 1)
    Vmgraph.line(tstop, 1)
    Vmgraph.size(tstart, tstop,-0.2 , 1.3)
    Vmgraph.flush()
    
    Imgraph.beginline(2,2)
    Imgraph.line((1-m0)/mderiv0,-0.2)
    Imgraph.line((1-m0)/mderiv0,0.3)
    Imgraph.size(tstart, tstop,-0.1 , 0.3)
    Imgraph.flush()
    
    
    ISynGraph.beginline(2,2)
    ISynGraph.line((1-m0)/mderiv0,-0.2)
    ISynGraph.line((1-m0)/mderiv0,0.3)
    ISynGraph.size(tstart, tstop,-0.1 , 0.3)
    ISynGraph.flush()
    
    scanplus()
    
    if(createplots==1){
        if (shortsim==1){
            Imgraph.printfile("IM++S.eps") 
            Vmgraph.printfile("VM++S.eps") 
            ISynGraph.printfile("ISynM++S.eps")
        }else{
            Imgraph.printfile("IM++L.eps") 
            Vmgraph.printfile("VM++L.eps") 
            ISynGraph.printfile("ISynM++L.eps")
        }
    }
    
}
//==============================================================
proc makeplusminus(){
    Vmgraph.exec_menu("Erase")
    Imgraph.exec_menu("Erase")
    ISynGraph.exec_menu("Erase")
    
    m0=-0.5
    mderiv0=0.7
    j0=0
    
    tstart=0
    if(shortsim==1){
        tstop=(4-m0)/mderiv0
    }else{
        tstop=150
    }
    
    Vmgraph.beginline(2, 2)
    Vmgraph.line(0, m0)
    Vmgraph.line((2-m0)/mderiv0, 2)
    
    Vmgraph.beginline(2, 5)
    Vmgraph.line(0, 1)
    Vmgraph.line(tstop, 1)
    Vmgraph.size(tstart,tstop,-1 ,  1.1)
    Vmgraph.flush()
    
    Imgraph.beginline(2,2)
    Imgraph.line((1-m0)/mderiv0,-0.1)
    Imgraph.line((1-m0)/mderiv0,0.7)
    Imgraph.size(tstart,tstop,-0.1 ,  0.7)
    Imgraph.flush()
     
    ISynGraph.beginline(2,2)
    ISynGraph.line((1-m0)/mderiv0,-0.1)
    ISynGraph.line((1-m0)/mderiv0,0.7)
    ISynGraph.size(tstart, tstop,-0.1 , 0.7)
    ISynGraph.flush()
    
    scanplus()
    
    doNotify()
    if(createplots==1){
        if (shortsim==1){
            Imgraph.printfile("IM+-S.eps") 
            Vmgraph.printfile("VM+-S.eps") 
            ISynGraph.printfile("ISynM+-S.eps")
        }else{
            Imgraph.printfile("IM+-L.eps") 
            Vmgraph.printfile("VM+-L.eps") 
            ISynGraph.printfile("ISynM+-L.eps")
        }
    }

}


//==============================================================
proc makeminusplus(){
    Vmgraph.exec_menu("Erase")
    Imgraph.exec_menu("Erase")
    ISynGraph.exec_menu("Erase")
    
    m0=0.5
    mderiv0=-0.25
    j0=0
    
    if(shortsim==1){
        tstop=-(4-m0)/mderiv0
    }else{
        tstop=150
    }
    Imgraph[0].size(0,tstop,-0.3 ,  0.1)
    ISynGraph.size(0,tstop,-0.3 ,  0.1)
    Vmgraph[0].size(0,tstop,-2 ,  0.5)
   
    scanminus()
    
    
    
   if(createplots==1){
        if (shortsim==1){
            Imgraph.printfile("IM-+S.eps") 
            Vmgraph.printfile("VM-+S.eps")
            ISynGraph.printfile("ISynM-+S.eps")
        }else{
            Imgraph.printfile("IM-+L.eps") 
            Vmgraph.printfile("VM-+L.eps")
            ISynGraph.printfile("ISynM-+L.eps")
        }
    }
}
//==============================================================
proc makeminusminus(){
    Vmgraph.exec_menu("Erase")
    Imgraph.exec_menu("Erase")
    ISynGraph.exec_menu("Erase")
    
    Imgraph.size(0,60,-0.25 ,  0.1)
    ISynGraph.size(0,60,-0.25 ,  0.1)
    Vmgraph.size(0,150,-1.8 ,  0)
    
    m0=-0.5
    mderiv0=-0.25
    j0=0
    
    if(shortsim==1){
        tstop=-(4-m0)/mderiv0
    }else{
        tstop=150
    }

    scanminus()
    
    if(createplots==1){
        if (shortsim==1){
            Imgraph.printfile("IM--S.eps") 
            Vmgraph.printfile("VM--S.eps") 
            ISynGraph.printfile("ISynM--S.eps")
        }else{
            Imgraph.printfile("IM--L.eps") 
            Vmgraph.printfile("VM--L.eps") 
            ISynGraph.printfile("ISynM--L.eps")
        }
    }
}
// Bring up control panel

createplots=0 
shortsim=1

xpanel("Select Plot")
    xbutton("++","makeplusplus()")
    xbutton("+-","makeplusminus()")
    xbutton("-+","makeminusplus()")
    xbutton("--","makeminusminus()")
    xcheckbox("Create Plots", &createplots)
    xcheckbox("Short Simulation",&shortsim)
xpanel()

Loading data, please wait...