CA1 pyramidal neurons: effects of Alzheimer (Culmone and Migliore 2012)

 Download zip file 
Help downloading and running models
Accession:144976
The model predicts possible therapeutic treatments of Alzheimers's Disease in terms of pharmacological manipulations of channels' kinetic and activation properties. The results suggest how and which mechanism can be targeted by a drug to restore the original firing conditions. The simulations reproduce somatic membrane potential in control conditions, when 90% of membrane is affected by AD (Fig.4A of the paper), and after treatment (Fig.4B of the paper).
Reference:
1 . Culmone V, Migliore M (2012) Progressive effect of beta amyloid peptides accumulation on CA1 pyramidal neurons: a model study suggesting possible treatments. Front Comput Neurosci 6:52 [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Synapse; Channel/Receptor; Dendrite;
Brain Region(s)/Organism: Hippocampus;
Cell Type(s): Hippocampus CA1 pyramidal GLU cell;
Channel(s): I Na,t; I A; I K; I h;
Gap Junctions:
Receptor(s): AMPA;
Gene(s):
Transmitter(s):
Simulation Environment: NEURON;
Model Concept(s): Active Dendrites; Detailed Neuronal Models; Action Potentials; Aging/Alzheimer`s;
Implementer(s): Migliore, Michele [Michele.Migliore at Yale.edu]; Culmone, Viviana [viviana.abigail at hotmail.it];
Search NeuronDB for information about:  Hippocampus CA1 pyramidal GLU cell; AMPA; I Na,t; I A; I K; I h;
/
alzheimer
readme.html
distr.mod *
h.mod *
kadist.mod
kaprox.mod *
kdrca1.mod *
na3n.mod *
naxn.mod *
netstims.mod *
10sim.ses
fixnseg.hoc *
geo5038804.hoc
membrane_potential.hoc
mosinit.hoc
screenshot.png
                            
load_file("nrngui.hoc")
use_mcell_ran4(1)
cvode_active(1)

numaxon=1
numsoma=1
numbasal=52
numapical=70
numtrunk=49
numuser5=numtrunk
numdendr=numbasal
numapdendr=numapical

low=50
high=400
high2=300
nsyn=50
tstop=300
Ih_rid=0

xopen("geo5038804.hoc")       
xopen("fixnseg.hoc")  
  
Rm = 28000
RmDend = Rm
RmSoma = Rm
RmAx = Rm
Cm    = 1
CmSoma= Cm
CmAx  = Cm
CmDend = Cm
RaAll= 150
RaSoma=150  
RaAx = 50
Vrest = -65
dt = 0.1
gna_ax=.025
gna = .025
AXONM = 5
gkdr = 0.01
celsius = 35.0 
KMULTPax = 0.03
ghd=0.00005

objref vec,  diversi, apc,  perc
objref ra, rb, rc, syn[nsyn], nc[nsyn], s[nsyn] 
objref rd, syn2[nsyn],nc2[nsyn], s2[nsyn], weight_vec2, ritardo_vec, r
objref dann,  weight_vec,  riagg_vec

weight_vec=new Vector(11)
weight_vec.x[0]=0.875e-3
for i=0,9{
weight_vec.x[i+1]=weight_vec.x[i]+0.0625e-3}

weight_vec2=new Vector(11) 
for j=0,10{
weight_vec2.x[j]=weight_vec.x[j]/3} 

dann=new Vector()
dann.append(0,10,20,30,40,50,60,70,80,90,100,110,120,130,140,150)
riagg_vec=new Vector()
riagg_vec.append(10/10, 5/10, 6/10, 7/10)
ritardo_vec=new Vector()
ritardo_vec.append(5)

KA_rid_sper=60
kdr_rid_sper=40
Na_rid_sper=50
pes_rid_sper=50

forsec "axon" {insert pas e_pas=Vrest g_pas = 1/RmAx Ra=RaAx cm=CmAx}
forsec "soma" {insert pas e_pas=Vrest g_pas = 1/RmSoma Ra=RaSoma cm=CmSoma}
forsec "dendrite" {insert pas e_pas=Vrest g_pas = 1/RmDend Ra=RaAll cm=CmDend}
forsec "user5" {insert pas e_pas=Vrest g_pas = 1/RmDend Ra=RaAll cm=CmDend}

soma{
apc=new APCount(.5)
apc.thresh=-10
geom_nseg()
tot=0
forall {tot=tot+nseg}
distance()
}

forsec "axon" {   
                insert nax gbar_nax=gna_ax * AXONM
                insert kdr gkdrbar_kdr=gkdr
                insert kap gkabar_kap = KMULTPax
}

forsec "soma" {   
		insert hd ghdbar_hd=ghd	vhalfl_hd=-73
                insert na3 gbar_na3=gna
                insert kdr gkdrbar_kdr=gkdr
                insert kap 
}

for i=0, numbasal-1 dendrite[i] {
        
		insert hd ghdbar_hd=ghd vhalfl_hd=-73
                insert na3 gbar_na3=gna
                insert kdr gkdrbar_kdr=gkdr
		insert kap 
		insert kad 
		for (x) if (x>0 && x<1) { xdist = distance(x)
                	ghdbar_hd(x) = ghd*(1+3*xdist/100)
                		if (xdist > 100){
					vhalfl_hd=-81
                        		
                			} else {
					vhalfl_hd=-73
                    
               				}
		}
}
                
forsec "apical_dendrite" {
	insert ds
		insert hd ghdbar_hd=ghd
                insert na3 gbar_na3=gna
                insert kdr gkdrbar_kdr=gkdr
		insert kap 
		insert kad 
		for (x) if (x>0 && x<1) { xdist = distance(x)
                	ghdbar_hd(x) = ghd*(1+3*xdist/100)
                		if (xdist > 100){
					vhalfl_hd=-81
                        		
                			} else {
					vhalfl_hd=-73
                        		
               				}
		}
}

forsec "user5" {
	insert ds
		insert hd ghdbar_hd=ghd
                insert na3 gbar_na3=gna
                insert kdr gkdrbar_kdr=gkdr
		insert kap 
		insert kad 
		for (x) if (x>0 && x<1) { xdist = distance(x)
                	ghdbar_hd(x) = ghd*(1+3*xdist/100)
                		if (xdist > 100){
					vhalfl_hd=-81
                        		
                			} else {
					vhalfl_hd=-73
                        		
               				}
		}
}

proc membrane_area() {
vec = new Vector(172)
perc = new Vector() 

{access soma[0] 
tot=0
for(x,0) tot=tot+area(x) 
vec.x[0]=tot 
totsoma=tot}

totuser5=0 
for i=0, numuser5-1 {access user5[i]
tot=0
for(x,0) tot=tot+area(x)
vec.x[i+numsoma]=tot
totuser5=totuser5+tot}

totdend=0
for i=0, numdendr-1 {access dendrite[i]
tot=0
for(x,0) tot=tot+area(x)
vec.x[i+numsoma+numuser5]=tot
totdend=totdend+tot}

tot_apdend=0
for i=0, numapdendr-1 {access apical_dendrite[i]
tot=0
for(x,0) tot=tot+area(x)
vec.x[i+numsoma+numuser5+numdendr]=tot
tot_apdend=tot_apdend+tot}

totarea=totsoma+totuser5+totdend+tot_apdend
zp=0    
dp=totarea*10/100
vp=totarea*20/100 
tp=totarea*30/100
qp=totarea*40/100
cp=totarea*50/100
sp=totarea*60/100
stp=totarea*70/100
op=totarea*80/100
np=totarea*90/100
cpc=55559.840 
perc.append(zp, dp, vp, tp, qp, cp, sp, stp, op, np, cpc)

}

proc alzheimer(){
	 KMULT =  0.03
     KMULTP = 0.03
	 KA_mir = riagg_vec.x[riagg]

forsec "soma" {   
	 ghdbar_hd=ghd	vhalfl_hd=-73
     gbar_na3=gna
     gkdrbar_kdr=gkdr
     gkabar_kap = KMULTP
}

for i=0, numbasal-1 dendrite[i] {
         ghdbar_hd=ghd vhalfl_hd=-73
         gbar_na3=gna
         gkdrbar_kdr=gkdr
		 gkabar_kap=0
		 gkabar_kad=0

		for (x) if (x>0 && x<1) { xdist = distance(x)
                	ghdbar_hd(x) = ghd*(1+3*xdist/100)
                		if (xdist > 100){
					vhalfl_hd=-81
                        		gkabar_kad(x) = KMULT*(1+xdist/100)
                			} else {
					vhalfl_hd=-73
                        		gkabar_kap(x) = KMULTP*(1+xdist/100)
               				}
		}
}
forsec "apical_dendrite" {
	ghdbar_hd=ghd
    gbar_na3=gna
    gkdrbar_kdr=gkdr
	gkabar_kap=0
	gkabar_kad=0

		for (x) if (x>0 && x<1) { xdist = distance(x)
                	ghdbar_hd(x) = ghd*(1+3*xdist/100)
                		if (xdist > 100){
					vhalfl_hd=-81
                        		gkabar_kad(x) = KMULT*(1+xdist/100)
                			} else {
					vhalfl_hd=-73
                        		gkabar_kap(x) = KMULTP*(1+xdist/100)
               				}
		}
}
forsec "user5" {
	ghdbar_hd=ghd
    gbar_na3=gna
    gkdrbar_kdr=gkdr
	gkabar_kap=0
	gkabar_kad=0

		for (x) if (x>0 && x<1) { xdist = distance(x)
                	ghdbar_hd(x) = ghd*(1+3*xdist/100)
                		if (xdist > 100){
					vhalfl_hd=-81
                        		gkabar_kad(x) = KMULT*(1+xdist/100)
                			} else {
					vhalfl_hd=-73
                        		gkabar_kap(x) = KMULTP*(1+xdist/100)
               				}
		}
}

    diversi= new Vector()  
    areasottr=0
	
while (areasottr<percento) {
   compsottrpr=int(r.repick())              
   if (diversi.contains(compsottrpr)==0){        
     compsottr=compsottrpr
     diversi.append(compsottr)
	 
	 Na_rid=Na_rid_sper*dann.x[rid]/100
	 kdr_rid=kdr_rid_sper*dann.x[rid]/100
	 KA_rid=KA_rid_sper*dann.x[rid]/100
	 
         if (compsottr<numsoma) {
          soma[0] {
		  	 ghdbar_hd=ghd
			 gbar_na3=gna*(1-Na_rid/100)
             gkdrbar_kdr=gkdr*(1-kdr_rid/100)
             gkabar_kap = KMULTP*(1-KA_rid/100)*KA_mir
		
			 }
		  }
		 if (compsottr>=numsoma && compsottr<numsoma+numuser5){  
          user5[compsottr-numsoma] {
		  	 ghdbar_hd=ghd
             gbar_na3=gna*(1-Na_rid/100)
             gkdrbar_kdr=gkdr*(1-kdr_rid/100)

          for (x) if (x>0 && x<1) { xdist = distance(x)
                	ghdbar_hd(x) = ghd*(1+3*xdist/100)
                		if (xdist > 100){
                          gkabar_kad(x) = KMULT*(1+xdist/100)*(1-KA_rid/100)*KA_mir
                			} else {
                        	gkabar_kap(x) = KMULTP*(1+xdist/100)*(1-KA_rid/100)*KA_mir
               				}
		                          } 
                                  }
		                                                       }
		 if (compsottr>=numsoma+numuser5 && compsottr<numsoma+numuser5+numdendr){
          dendrite[compsottr-numsoma-numuser5]{
		  	 ghdbar_hd=ghd
			 gbar_na3=gna*(1-Na_rid/100)
             gkdrbar_kdr=gkdr*(1-kdr_rid/100)

          for (x) if (x>0 && x<1) { xdist = distance(x)
                	ghdbar_hd(x) = ghd*(1+3*xdist/100)
                		if (xdist > 100){
                          gkabar_kad(x) = KMULT*(1+xdist/100)*(1-KA_rid/100)*KA_mir
                			} else {
                        	gkabar_kap(x) = KMULTP*(1+xdist/100)*(1-KA_rid/100)*KA_mir
               				}
		                          } 
                                  }
		}
		 if (compsottr>=numsoma+numuser5+numdendr && compsottr<numsoma+numuser5+numdendr+numapdendr){
          apical_dendrite[compsottr-numsoma-numuser5-numdendr]{
		  	 ghdbar_hd=ghd
			 gbar_na3=gna*(1-Na_rid/100)
             gkdrbar_kdr=gkdr*(1-kdr_rid/100)

           for (x) if (x>0 && x<1) { xdist = distance(x)
                	ghdbar_hd(x) = ghd*(1+3*xdist/100)
                		if (xdist > 100){
                          gkabar_kad(x) = KMULT*(1+xdist/100)*(1-KA_rid/100)*KA_mir
                			} else {
                        	gkabar_kap(x) = KMULTP*(1+xdist/100)*(1-KA_rid/100)*KA_mir
               				}
		                          } 
                                  }
		}
		     areasottr=areasottr+vec.x[compsottr] 
	}
} 
}

proc sinapsirandom(){
  ritardo=ritardo_vec.x[rit]
  rc.MCellRan4($1)
  rc.normal(50, 5)
  rd.MCellRan4($2)
  rd.normal(50, 5)  
  objref nc[nsyn],nc2[nsyn]
  objref s[nsyn], syn[nsyn]	,s2[nsyn], syn2[nsyn]	
  access soma  
 for i=0, nsyn-1{
 s[i]=new NetStim(.5)
 s[i].number=1
 syn[i]=new Exp2Syn(.5)
 syn[i].e=0
 syn[i].tau1=.5
 syn[i].tau2=3
 s[i].start=rc.repick()+ritardo
 nc[i]=new NetCon(s[i], syn[i], 0, 0, weight_vec.x[pes])
 }
 
 for i=0, nsyn-1{
 s2[i]=new NetStim(.5)
 s2[i].number=1
 syn2[i]=new Exp2Syn(.5)
 syn2[i].e=0
 syn2[i].tau1=.5
 syn2[i].tau2=10
 s2[i].start=rd.repick()
 nc2[i]=new NetCon(s2[i], syn2[i], 0, 0, weight_vec2.x[pes])
 }
 
 for i=0, nsyn-1{
   j=0
   while(j==0){
   location=int(ra.repick())   
   tmp=rb.repick()  
   pes_rid=pes_rid_sper*dann.x[rid]/100
    if(location>=numsoma && location<numsoma+numuser5){j=0}
    if(location>=numsoma+numuser5 && location<numsoma+numuser5+numdendr){j=0}
     if(location>=numsoma+numuser5+numdendr && location<numsoma+numuser5+numdendr+numapdendr){
      apical_dendrite[location-numsoma-numuser5-numdendr]{
         j=1
		 syn[i].loc(tmp)
	     if  (diversi.contains(location)==1){nc[i].weight=weight_vec.x[pes]*(1-pes_rid/100)} 
                                                         }
														 }
    }
}
 
 for i=0, nsyn-1{
   j=0
   while(j==0){
   location=int(ra.repick())    
   tmp=rb.repick()  
   pes_rid=pes_rid_sper*dann.x[rid]/100

if(location>=numsoma && location<numsoma+numuser5){
    user5[location-numsoma]{
     if ( distance(tmp)<=high2) {j=0}else{
                                    j=1
                                    syn2[i].loc(tmp)
	                                if  (diversi.contains(location)==1){nc2[i].weight=weight_vec2.x[pes]*(1-pes_rid/100)
									} 
								}
                    }
}
if(location>=numsoma+numuser5 && location<numsoma+numuser5+numdendr){j=0}
if(location>=numsoma+numuser5+numdendr && location<numsoma+numuser5+numdendr+numapdendr){j=0}
    }
    }
	 }
 
proc init() {
      t=0
        forall {
        v=Vrest
        if (ismembrane("nax") || ismembrane("na3")) {ena=55}
        if (ismembrane("kdr") || ismembrane("kap") || ismembrane("kad")) {ek=-90}
        if (ismembrane("hd") ) {ehd_hd=-30}
	}
	finitialize(Vrest)
        fcurrent()

        forall {
	for (x) {
	if (ismembrane("na3")||ismembrane("nax")){e_pas(x)=v(x)+(ina(x)+ik(x))/g_pas(x)}
	if (ismembrane("hd")) {e_pas(x)=e_pas(x)+i_hd(x)/g_pas(x)}
		}
	} 

   	cvode.re_init()
    cvode.event(tstop)
	access soma
	}

proc superrun() {
	
	r= new Random()
    r.uniform(0, 172)
    ra=new Random()
    ra.uniform(0,172)
    rb=new Random()
    rb.uniform(0,1)
    rc=new Random()	
	rd=new Random()
	
	r.MCellRan4(seed)
    ra.MCellRan4(seeda)
	rb.MCellRan4(seedb)
	
	membrane_area()
	percento=perc.x[amp]
	alzheimer()
	sinapsirandom(seedc,seedd)
	run()	
}

load_file("10sim.ses")
PlotShape[0].exec_menu("Shape Plot")
PlotShape[0].exec_menu("Show Diam")

rit=0
rid=10
pes=5
	  
proc control() {
Graph[0].erase()
loop=0
nspike=0
	  seeda=70
      seedb=70+5           
      seedc=70+10
	  seedd=90
      amp=0
      riagg=0
	  print "CONTROL"
for(loop==0; loop<=9; loop=loop+1) {
		   seed=seed+100
		   seeda=seeda+100
		   seedb=seedb+100
		   seedc=seedc+100
		   seedd=seedd+100
superrun()
if (apc.n==0) {print "sim ", loop+1, ": no spike"} else {print "sim ", loop+1, ": spike"}
nspike=nspike+apc.n}
print " number of spikes = ", nspike
}

proc AD(){
Graph[0].erase()
loop=0
nspike=0
	  seeda=70
      seedb=70+5           
      seedc=70+10
	  seedd=90
      amp=9
      riagg=0
	  print "AD"
for(loop==0; loop<=9; loop=loop+1) {
		   seed=seed+100
		   seeda=seeda+100
		   seedb=seedb+100
		   seedc=seedc+100
		   seedd=seedd+100
superrun()
if (apc.n==0) {print "sim ", loop+1, ": no spike"} else {print "sim ", loop+1, ": spike"}
nspike=nspike+apc.n}
print " number of spikes = ", nspike
}

proc AD_KA(){
Graph[0].erase()
loop=0
nspike=0
	  seeda=70
      seedb=70+5           
      seedc=70+10
	  seedd=90
      amp=9
      riagg=2
	  print "KA-TREATMENT"
for(loop==0; loop<=9; loop=loop+1) {
		   seed=seed+100
		   seeda=seeda+100
		   seedb=seedb+100
		   seedc=seedc+100
		   seedd=seedd+100
superrun()
if (apc.n==0) {print "sim ", loop+1, ": no spike"} else {print "sim ", loop+1, ": spike"}
nspike=nspike+apc.n}
print " number of spikes = ", nspike
}



Loading data, please wait...