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")
xopen("Purk_active.hoc")

access somaA
celsius = 34
tstop =1000
dt = 0.02
steps_per_ms = 1/dt
dtsim = 0.02



finitialize(v_init)

strdef tmpstr
strdef outDir
strdef cmd 
objref outfile0

outfile0 = new File()

objref ps
ps = new ParallelContext()
st = ps.time

objref ward_num
ward_num = new Vector(400,0)

objref stim_st
stim_st = new Vector(400,20000)


proc setdrive() {
  stim1.amp = $1
}

func distscale() {local key localobj returnvec
	key = $1
	returnvec = new Vector()
	returnvec = calc_prc_single(key)
	ps.pack(returnvec)
	ps.post(key)
	return key
}
	  
	  objref apc
obfunc calc_prc_single() {local base_num localobj APs
    base_num = $1

    shift = base_num-(int(base_num/10000))*10000
    base_num = int(base_num/10000)
    stim2.del = stim_st.x[base_num-1]+ 0.5* shift
    curr = -0.2+0.1*(base_num-1)
	setdrive (curr)
  APs = new Vector()
  somaA apc = new APCount(0.5)
  apc.thresh = -20
  apc.record(APs)

    run()
    return APs
}

ps.runworker()

objref threshvec
threshvec=new Vector()
objref basalvec

proc calc_basal() {
 sprint(outDir,"simdata")
    sprint(cmd, "system(\"mkdir -p %s\")",outDir)
	execute(cmd)
	
	sprint(tmpstr,"%s/basal_condition.dat",outDir) 
	outfile0.wopen(tmpstr)
	for i = 1, $1 {
	    cutag=10000*i
	    ps.submit("distscale",cutag)
	}
		while (ps.working()) {
		key = ps.retval()
		ps.look_take(key)
		
		threshvec = ps.upkvec()
		
		print "received key ",key
	    cuno=int(key/10000)
	    outfile0.printf ("%e %e %e\n", cuno, threshvec.x[threshvec.size()-1]-threshvec.x[threshvec.size()-2],threshvec.x[threshvec.size()-3])
      	outfile0.flush()
      	ward_num.x[cuno-1] = int((threshvec.x[threshvec.size()-1]-threshvec.x[threshvec.size()-2])*2)
      	stim_st.x[cuno-1] = threshvec.x[threshvec.size()-3]

        }
        outfile0.close()
}


calc_basal(11)

stim_opt = 1

print "the time used to set basal firing rates is",ps.time-st

Loading data, please wait...