Multiplexed coding in Purkinje neuron dendrites (Zang and De Schutter 2021)

 Download zip file 
Help downloading and running models
Neuronal firing patterns are crucial to underpin circuit level behaviors. In cerebellar Purkinje cells (PCs), both spike rates and pauses are used for behavioral coding, but the cellular mechanisms causing code transitions remain unknown. We use a well-validated PC model to explore the coding strategy that individual PCs use to process parallel fiber (PF) inputs. We find increasing input intensity shifts PCs from linear rate-coders to burst-pause timing-coders by triggering localized dendritic spikes. We validate dendritic spike properties with experimental data, elucidate spiking mechanisms, and predict spiking thresholds with and without inhibition. Both linear and burst-pause computations use individual branches as computational units, which challenges the traditional view of PCs as linear point neurons. Dendritic spike thresholds can be regulated by voltage state, compartmentalized channel modulation, between-branch interaction and synaptic inhibition to expand the dynamic range of linear computation or burst-pause computation. In addition, co-activated PF inputs between branches can modify somatic maximum spike rates and pause durations to make them carry analogue signals. Our results provide new insights into the strategies used by individual neurons to expand their capacity of information processing.
1 . Zang Y, De Schutter E (2021) The Cellular Electrophysiological Properties Underlying Multiplexed Coding in Purkinje Cells. J Neurosci [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Dendrite; Neuron or other electrically excitable cell;
Brain Region(s)/Organism: Cerebellum;
Cell Type(s): Cerebellum Purkinje GABA cell;
Channel(s): I T low threshold; I Na,p; I h; I Potassium; I Sodium; I p,q; I K,Ca;
Gap Junctions:
Simulation Environment: NEURON;
Model Concept(s): Dendritic Action Potentials; Detailed Neuronal Models; Synaptic Integration; Temporal Coding; Reaction-diffusion;
Implementer(s): Zang, Yunliang ;
Search NeuronDB for information about:  Cerebellum Purkinje GABA cell; I Na,p; I T low threshold; I p,q; I h; I K,Ca; I Sodium; I Potassium;
/* assumes
1. sections to be innervated have been appended to a SectionList called seclist
2. synaptic density is in units of number/(length in um)
3. geometry specification has been completed, including spatial discretization
4. total number of synapses to distribute is called NUMSYN

////////use: aSynapseList = distSyns(numberOfSynapses,listOfSections,randomseed)
obfunc distSyns() { local NUMSYN,seedl localobj mvec,nvec,synlist,r

numsegs = 0 // will be total number of segments
forsec $o2 {numsegs+=nseg}
//objref mvec
mvec = new Vector(numsegs) // will hold cumulative sums of segment length
// each element in mvec corresponds to a segment in seclist

ii = 0 // to iterate over mvec
mtotal = 0 // will be total length in seclist
forsec $o2 {
  for (x,0) { // iterate over internal nodes of current section
    mtotal += L/nseg // or area(x) if density is in (number)/area
    mvec.x[ii] = mtotal
    ii += 1
now mvec.x[ii] is the sum of segment lengths (or areas)
for all segments up to and including segment ii

//objref nvec
nvec = new Vector(numsegs, 0) // fill elements with 0
// each element in nvec corresponds to a segment in seclist
// when done, each element will hold the number of synaptic mechanisms
// that are to be attached to the corresponding segment
seedl = $3
 r = new Random(seedl)
 NUMSYN = $1
for ii=1,NUMSYN {
  x = r.repick() //value drawn from uniform distribution over [0,mtotal]
  jj = mvec.indwhere(">=", x) // the first element in mvec that is >=x 
  // this is the index of the segment that should get the synapse
  nvec.x[jj] += 1

//objref synlist
synlist = new List()
ii = 0
forsec $o2 {
  for (x, 0) {
    num = nvec.x[ii]
    if (num>0) {
      for jj=1,num {print x, secname() synlist.append(new syn2(x))}
      // to keep this entirely generic
      // defer param specification until later
    ii += 1 // we're moving on to the next segment,
      // so move on to the next element of nvec
    return synlist

Loading data, please wait...