Purkinje neuron network (Zang et al. 2020)

 Download zip file 
Help downloading and running models
Accession:266799
Both spike rate and timing can transmit information in the brain. Phase response curves (PRCs) quantify how a neuron transforms input to output by spike timing. PRCs exhibit strong firing-rate adaptation, but its mechanism and relevance for network output are poorly understood. Using our Purkinje cell (PC) model we demonstrate that the rate adaptation is caused by rate-dependent subthreshold membrane potentials efficiently regulating the activation of Na+ channels. Then we use a realistic PC network model to examine how rate-dependent responses synchronize spikes in the scenario of reciprocal inhibition-caused high-frequency oscillations. The changes in PRC cause oscillations and spike correlations only at high firing rates. The causal role of the PRC is confirmed using a simpler coupled oscillator network model. This mechanism enables transient oscillations between fast-spiking neurons that thereby form PC assemblies. Our work demonstrates that rate adaptation of PRCs can spatio-temporally organize the PC input to cerebellar nuclei.
Reference:
1 . Zang Y, Hong S, De Schutter E (2020) Firing rate-dependent phase responses of Purkinje cells support transient oscillations. Elife [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Neuron or other electrically excitable cell; Realistic Network;
Brain Region(s)/Organism: Cerebellum;
Cell Type(s): Cerebellum Purkinje GABA cell;
Channel(s):
Gap Junctions:
Receptor(s):
Gene(s):
Transmitter(s):
Simulation Environment: NEURON; MATLAB;
Model Concept(s): Phase Response Curves; Action Potentials; Spatio-temporal Activity Patterns; Synchronization; Action Potential Initiation; Oscillations;
Implementer(s): Zang, Yunliang ; Hong, Sungho [shhong at oist.jp];
Search NeuronDB for information about:  Cerebellum Purkinje GABA cell;
load_file("nrngui.hoc")

Default_Eleak = -65
membranecap = 0.64 
membraneresist = 120236
axialresist = 120	

	xopen("Purkinje19b972-1.nrn")
	forsec "axon" delete_section()

objref g2, b2,c2, distra, distrb, distrc,distrd,distre,distrf,cdistry, p	

	forall {
		insert pas e_pas=Default_Eleak
	    insert hpkj	
		insert ds
		insert pk
	}

    AIS {  g_pas=1/membraneresist Ra=axialresist cm=membranecap}
	forsec spinydend {g_pas=5.3/membraneresist Ra=axialresist cm=5.3*membranecap}
    forsec maindend {g_pas=1.2/membraneresist Ra=axialresist cm=1.2*membranecap}
	forsec "soma" { g_pas=1/membraneresist Ra=axialresist cm=membranecap}

forsec maindend {insert cdp4N}
forsec alldend {
    insert Kv3
    gbar_Kv3 = 0.1512
    vshift_Kv3 = 4
    insert newCaP
    pcabar_newCaP = 1.90e-4
    vshift_newCaP =-5
    insert CaT3_1
    pcabar_CaT3_1 = 2.7000e-05

    insert mslo
    gbar_mslo = 0.2150
    insert SK2
    gkbar_SK2 = 3.6000e-04
    scal_SK2 = 1.0
    ghbar_hpkj = 2.1600e-04
	insert Kv11
	gbar_Kv11 = 0.002
	insert Kv4
    gbar_Kv4 = 0.0252
        insert Kv4s
    gbar_Kv4s = 0.015
}
forsec spinydend {
	insert cdp4Nsp
    gkbar_SK2 = 3.6000e-04
    
    scal_SK2 = 1.0
gbar_Kv4 = 0.0264
    gbar_Kv4s = 0.015
    ghbar_hpkj = 3.2400e-04
    vshift_Kv4 = 0
    gbar_Kv11 = 0.001
    gbar_Kv3 =0.2268
    vshift_Kv3 = 4
    pcabar_CaT3_1 = 1.0800e-04
    pcabar_newCaP = 7.6000e-04
    vshift_newCaP = -5
    scale_cdp4Nsp = 3.5
    gbar_mslo = 0.0448

}

somaA distance()
access somaA

forsec "soma" {	
	insert naRsg	
	gbar_naRsg =0.0317
	vshifta_naRsg = 0
    vshiftk_naRsg = 0
    vshifti_naRsg = -5
    
	insert nap
	gbar_nap = 1.4000e-04
	insert pk
	ena = 63
    ghbar_hpkj = 1.0800e-04

    insert cdp20N_FD2
    insert Kv34
    gbar_Kv34 = 1.8000

    insert newCaP
    pcabar_newCaP = 1.9e-4  
    kt_newCaP = 1
    vshift_newCaP = -5
    insert mslo
    gbar_mslo = 0.8736
    insert abBK
    gabkbar_abBK = 0.3
    insert SK2
    gkbar_SK2 = 0.0075
}

AIS {
    	insert naRsg		// INa + resurgent
	gbar_naRsg = 0.56
	vshifta_naRsg = 15
	vshiftk_naRsg = 5
   vshifti_naRsg = -5
	insert nap
	gbar_nap = 0.0023
	insert CaT3_1
	pcabar_CaT3_1 = 1.2800e-04
	ena = 63
    ghbar_hpkj = 1.0800e-04
   insert cdpAIS

    insert Kv34
    gbar_Kv34 = 115.2000

    insert newCaP
    pcabar_newCaP =0.0023   
    kt_newCaP = 1
    vshift_newCaP = -5
    insert mslo
    gbar_mslo = 6
    insert abBK
    gabkbar_abBK = 1.0500
    insert SK2
    gkbar_SK2 = 0.0278
}


access somaA			// This is location of somatic electrode

tot=0
forall {tot=tot+nseg}
somaA distance(0,1)
celsius = 34
tstop =1000
dt = 0.02
steps_per_ms = 1/dt
dtsim = 0.02

v_init = -65

xopen ("electrode.hoc")

xopen("axialcurr2.hoc")

objref injcurr
injcurr = new Vector(13)

injcurr.x[0] = 0.4

objref con_scale
con_scale = new Vector(11)

con_scale.x[0] = 0.5
con_scale.x[1] = 0.6
con_scale.x[2] = 0.7

con_scale.x[3] = 0.8
con_scale.x[4] = 0.9
con_scale.x[5] = 1.0


con_scale.x[6] = 1.1
con_scale.x[7] = 1.2
con_scale.x[8] = 1.3
con_scale.x[9] = 1.4
con_scale.x[10] = 1.5


strdef fname,fname2,fname3
objref f1
f1 = new File()
objref f2
f2 = new File()
objref f3
f3 = new File()
objref recIc,recIIc,recIIIc
objref rec4c,rec5c,rec6c,rec7c,rec8c,rec9c,rec10c,rec11c,rec12c,rec13c
objref recs1,recs2,recs3,recs4,recs5,recs6,recs7,recs8,recs9,recs10,recs11
objref reca1,reca2,reca3,reca4,reca5,reca6,reca7,reca8,reca9,reca10,reca11

objref tempmatrix,tempmatrix2,tempmatrix3

strdef fnamev
objref fv
fv = new File()
objref recI,recII,recIII
objref rec4,rec5,rec6,rec7,rec8,rec9,rec10
objref tempmatrixv


objref r
r = new Random()
r.ACG(6328)
r.uniform(0,50)

objref backnoise
somaA backnoise = new IClamp(0.5)
backnoise.del = 0
backnoise.dur = 2200
backnoise.amp = 0


	objref CCr
somaA CCr = new IClamp(0.5) 
    CCr.del = 0
    CCr.amp = -0.2*0

for i = 1,11 {
	
     stim1.amp = injcurr.x[i-1]
   
    ttem = 0.3
    
for j = 1,1 {
	for m = 6,6 {
    recIc = new Vector()
    recIc.record(&somaA.Ca_naRsg(0.5))
    recIIc = new Vector()
    recIIc.record(&somaA.Ia_naRsg(0.5))
    recIIIc = new Vector()
    recIIIc.record(&somaA.O_naRsg(0.5))
    rec4c = new Vector()
    rec4c.record(&somaA.B_naRsg(0.5))

    recs1 = new Vector()
    recs1.record(&somaA.ina_naRsg(0.5))
    recs2 = new Vector()
    recs2.record(&somaA.ina_nap(0.5))
    recs3 = new Vector()
    recs3.record(&somaA.i_hpkj(0.5))
    recs4 = new Vector()
    recs4.record(&somaA.ica_newCaP(0.5))
    recs5 = new Vector()
    recs5.record(&somaA.i_pas(0.5))
    recs6 = new Vector()
    recs6.record(&somaA.ik_Kv34(0.5))
    recs7 = new Vector()
    recs7.record(&somaA.ik_abBK(0.5))
    recs8 = new Vector()
    recs8.record(&somaA.ik_mslo(0.5))
    recs9 = new Vector()
    recs9.record(&somaA.ik_SK2(0.5))
        
    reca1 = new Vector()
    reca1.record(&somaA.ina_naRsg(0))
    reca2 = new Vector()
    reca2.record(&somaA.ina_naRsg(0.1))
    reca3 = new Vector()
    reca3.record(&somaA.ina_naRsg(0.2))
    reca4 = new Vector()
    reca4.record(&somaA.ina_naRsg(0.3))
    reca5 = new Vector()
    reca5.record(&somaA.ina_naRsg(0.4))
    reca6 = new Vector()
    reca6.record(&somaA.ina_naRsg(0.5))
    reca7 = new Vector()
    reca7.record(&somaA.ina_naRsg(0.6))
    reca8 = new Vector()
    reca8.record(&somaA.ina_naRsg(0.7))
    reca9 = new Vector()
    reca9.record(&somaA.ina_naRsg(0.8))    
    reca10 = new Vector()
    reca10.record(&somaA.ina_naRsg(0.9))
    reca11 = new Vector()
    reca11.record(&somaA.ina_naRsg(1))    
    
  recI= new Vector()
  recI.record(&somaA.v(0.5))
  recII = new Vector()
  recII.record(&dendA1_00101.v(0.5))
  recIII = new Vector()
  recIII.record(&dendA1_001011110110010110.v(0.5))
  rec4 = new Vector()
  rec4.record(&dendA1_001101.v(0.5))
  rec5 = new Vector()
  rec5.record(&dendA1_0011011000001011100.v(0.5))  
  rec6 = new Vector()
  rec6.record(&dendA1_01001.v(0.5))
  rec7 = new Vector()
  rec7.record(&dendA1_0100100100110110001.v(0.5))
  rec8 = new Vector()
  rec8.record(&dendA1_00101111.v(0.5))
  rec9 = new Vector()
  rec9.record(&dendA1_0.v(1))               //different with before, here is the bifurcation point
  rec10 = new Vector()
  rec10.record(&AIS.v(1))



//set the IC, so that reach the SS quickly
    if (i<3) {v_init = -85
    }else if (i<5 ){v_init = -75
    } else {v_init = -68}

    finitialize(-68)
	continuerun(tstop)
	somaA {axia = ri(0.6)}
	somaA {axial = ri(0.5)}

  sprint(fnamev, "prc_inj-%02d-%02d-%02d-002", i,j,m )
  
  fv.wopen(fnamev)


  tempmatrixv  = new Matrix()
  tempmatrixv.resize(recI.size(),10)
  tempmatrixv.setcol(0,recI)
  tempmatrixv.setcol(1,recII)
  tempmatrixv.setcol(2,recIII)
  
  tempmatrixv.setcol(3,rec4)
  tempmatrixv.setcol(4,rec5)
  tempmatrixv.setcol(5,rec6)
  tempmatrixv.setcol(6,rec7)
  tempmatrixv.setcol(7,rec8)
  tempmatrixv.setcol(8,rec9)
  tempmatrixv.setcol(9,rec10)
    
  tempmatrixv.fprint(fv, "  %g")

  fv.close()
 	}
  }
    printf("The %d th current injection simulation completed\n",i)
}

Loading data, please wait...