Voltage imaging calibration in tuft dendrites of mitral cells (Djurisic et al 2004)

 Download zip file 
Help downloading and running models
Accession:253991
A detailed morphology of a tuft is provided in a reconstruction of a mitral cell that was used to place simulated estimates on for the calibration of EPSPs as recorded in voltage imaging in the real cells (estimated to be within +12% to -18% of the actual amplitude).
Reference:
1 . Djurisic M, Antic S, Chen WR, Zecevic D (2004) Voltage imaging from dendrites of mitral cells: EPSP attenuation and spike trigger zones. J Neurosci 24:6703-14 [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Neuron or other electrically excitable cell;
Brain Region(s)/Organism: Olfactory bulb;
Cell Type(s): Olfactory bulb main mitral GLU cell;
Channel(s):
Gap Junctions:
Receptor(s):
Gene(s):
Transmitter(s):
Simulation Environment:
Model Concept(s): Methods;
Implementer(s):
Search NeuronDB for information about:  Olfactory bulb main mitral GLU cell;
/
DjurisicEtAl2004
readme.html
EPSPClamp.mod *
avgdiams1.txt *
avgdiams2.txt *
avgdiams3.txt *
avgdiams4.txt *
avgdiams5.txt *
basediams1.txt *
basediams2.txt *
basediams3.txt *
basediams4.txt *
basediams5.txt *
epsp.txt *
epsp_soma.txt *
lengths1.txt *
lengths2.txt *
lengths3.txt *
lengths4.txt *
lengths5.txt *
membrane.hoc
morphology.hoc
mosinit.hoc
nltemplate.hoc
order1.txt *
order2.txt *
order3.txt *
order4.txt *
order5.txt *
parameters.hoc *
screenshot1.png
screenshot2.png
test.ses
xyangles1.txt *
xyangles2.txt *
xyangles3.txt *
xyangles4.txt *
xyangles5.txt *
xyz1.txt *
xyz2.txt *
xyz3.txt *
xyz4.txt *
xyz5.txt *
zangles1.txt *
zangles2.txt *
zangles3.txt *
zangles4.txt *
zangles5.txt *
                            
begintemplate NLsection
    public sect, nsect, terminal
    public xroot,yroot,zroot,droot,zrootangle,xyrootangle
    public moveby, moveto
    create sect[1]
    double order[1]
    double xcoord[1]
    double ycoord[1]
    double zcoord[1]
    double coordset[1]
    double basediam[1]
    double avgdiam[1]
    double length[1]
    double zangle[1]
    double xyangle[1]
    double terminal[1]
    objref f
    strdef fname
    proc connections() {local i,cbranch,xend,yend,zend,diamend,xmid,ymid,zmid
        xend=xcoord[$2]+length[$2]*cos(zangle[$2])*cos(xyangle[$2])
        yend=ycoord[$2]+length[$2]*cos(zangle[$2])*sin(xyangle[$2])
        zend=zcoord[$2]+length[$2]*sin(zangle[$2])  
        diamend=avgdiam[$2]
        while (n<(nsect-1)) {
            cbranch=order[n+1]
            if (cbranch>$1) {
                terminal[$2]=0
                n=n+1
                xcoord[n]=xend
                ycoord[n]=yend
                zcoord[n]=zend
                diamend=basediam[n]
                connect sect[n](0), sect[$2](1)
                connections(cbranch,n)
            } else {
                break
            }  
        }
        sect[$2] {
            nseg=int(length[$2]/10)+1
            pt3dclear()
            pt3dadd(xcoord[$2],ycoord[$2],zcoord[$2],basediam[$2])
            for i=1,nseg-2 {
                xmid=xcoord[$2]+(i/nseg)*length[$2]*cos(zangle[$2])*cos(xyangle[$2])
                ymid=ycoord[$2]+(i/nseg)*length[$2]*cos(zangle[$2])*sin(xyangle[$2])
                zmid=zcoord[$2]+(i/nseg)*length[$2]*sin(zangle[$2])            
                pt3dadd(xmid,ymid,zmid,avgdiam[$2]) 
            }
            pt3dadd(xend,yend,zend,diamend)
        }
    }
    proc init() {
        //counts number of sections (equals to number of lines in order.txt file)
        sprint(fname,"order%d.txt",$1)
        f=new File()
        f.ropen(fname)
        nsect=0
        while (!f.eof()) {
            nsect=nsect+1
            f.scanvar()
        }
        f.close()
        //printf("number of sections: %d\n",nsect)
        //creates variable arrays
        create sect[nsect]
        double order[nsect]
        double xcoord[nsect]
        double ycoord[nsect]
        double zcoord[nsect]
        double coordset[nsect]
        double basediam[nsect]
        double avgdiam[nsect]
        double length[nsect]
        double zangle[nsect]
        double xyangle[nsect]
        double terminal[nsect]
        for i=0,nsect-1 {
            terminal[i]=1
        }
        //fills order array with values from order.txt file
        sprint(fname,"order%d.txt",$1)
        f.ropen(fname)
        i=0
        while (!f.eof()) {
            order[nsect-i-1]=f.scanvar()
            i=i+1
        }
        f.close()
        //fills basediam array with values from basediams.txt file
        sprint(fname,"basediams%d.txt",$1)
        f.ropen(fname)
        i=0
        while (!f.eof()) {
            basediam[nsect-i-1]=f.scanvar()
            i=i+1
        }
        f.close()
        //fills avgdiam array with values from avgdiams.txt file
        sprint(fname,"avgdiams%d.txt",$1)
        f.ropen(fname)
        i=0
        while (!f.eof()) {
            avgdiam[nsect-i-1]=f.scanvar()
            i=i+1
        }
        f.close()    
        //fills length array with values from lengths.txt file
        sprint(fname,"lengths%d.txt",$1)
        f.ropen(fname)
        i=0
        while (!f.eof()) {
            length[nsect-i-1]=f.scanvar()
            i=i+1
        }
        f.close()      
        //fills zangle array with values from zangles.txt file
        sprint(fname,"zangles%d.txt",$1)
        f.ropen(fname)
        i=0
        while (!f.eof()) {
            zangle[nsect-i-1]=f.scanvar()*3.141592654/180
            i=i+1
        }
        f.close()
        //fills xyangle array with values from xyangles.txt file
        sprint(fname,"xyangles%d.txt",$1)
        f.ropen(fname)
        i=0
        while (!f.eof()) {
            xyangle[nsect-i-1]=f.scanvar()*3.141592654/180
            i=i+1
        }
        f.close()
        //fills root coordinates (xcoord[0],ycoord[0],zcoord[0]) from xyz.txt file
        sprint(fname,"xyz%d.txt",$1)
        f.ropen(fname)
        xcoord[0]=f.scanvar()
        ycoord[0]=f.scanvar()
        zcoord[0]=f.scanvar()
        f.close()
        droot=basediam[0]
        n=0
        connections(1,n)
        sect[0] {
            xroot=x3d(0)
            yroot=y3d(0)
            zroot=z3d(0)
        }
        xcoord[0]=xroot
        ycoord[0]=yroot
        zcoord[0]=zroot
        zrootangle=zangle[0]
        xyrootangle=xyangle[0]
    }
    proc moveto() {local i,j,deltax, deltay, deltaz
        sect[0] {
            deltax=$1-x3d(0)
            deltay=$2-y3d(0)
            deltaz=$3-z3d(0)
        }
        for i=0,(int(length[0]/10)) {
            sect[0] {
                pt3dchange(i,x3d(i)+deltax,y3d(i)+deltay,z3d(i)+deltaz,diam3d(i))
            }
        }
        sect[0] {
            xroot=x3d(0)+deltax
            yroot=y3d(0)+deltay
            zroot=z3d(0)+deltaz
            xcoord[0]=xroot
            ycoord[0]=yroot
            zcoord[0]=zroot
        }
    }
    proc moveby() {local i,j,deltax, deltay, deltaz
        deltax=$1
        deltay=$2
        deltaz=$3
        for i=0,(int(length[0]/10)) {
            sect[0] {
                pt3dchange(i,x3d(i)+deltax,y3d(i)+deltay,z3d(i)+deltaz,diam3d(i))
            }
        }
        sect[0] {
            xroot=x3d(0)+deltax
            yroot=y3d(0)+deltay
            zroot=z3d(0)+deltaz
            xcoord[0]=xroot
            ycoord[0]=yroot
            zcoord[0]=zroot
        }
    }
endtemplate NLsection