Computational model of cerebellar tDCS (Zhang et al., 2021)

 Download zip file 
Help downloading and running models
This archive contains models used in (Zhang et al. 2021) and simulates Purkinje cell, granule cell, and deep cerebellar neuron activities under cerebellar tDCS (transcranial direct current stimulation).
1 . Zhang X, Hancock R, Santaniello S (2021) Transcranial Direct Current Stimulation of Cerebellum Alters Spiking Precision in Cerebellar Cortex: A Modeling Study of Cellular Responses. PLoS Comp Biol 17(12):e1009609 [PubMed]
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: Cerebellum;
Cell Type(s): Cerebellum Purkinje GABA cell; Cerebellum interneuron granule GLU cell; Cerebellum deep nucleus neuron;
Gap Junctions:
Simulation Environment: NEURON;
Model Concept(s):
Search NeuronDB for information about:  Cerebellum Purkinje GABA cell; Cerebellum interneuron granule GLU cell;
// Zang Y, Dieudonné S, De Schutter E (2018) Voltage- and Branch-Specific Climbing Fiber Responses in Purkinje Cells Cell Reports 24(6):1536-1549

/* 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
numsegs = 0 // will be total number of segments
forsec cf {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 cf {
  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

access soma
objref sl2
sl2 = new SectionList()
// objref ss
// ss = new Shape(sl2)

NUMSYN = 500
for ii=1,NUMSYN {
  x = mtotal/NUMSYN*(ii-1) //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 cf {
  for (x, 0) {
    num = nvec.x[ii]
    if (num>0) {
      for jj=1,num 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
for i=0,synlist.count()-1 {
    synlist.object(i).onset = 400
    synlist.object(i).tau0 = 0.3
    synlist.object(i).tau1 = 3
    synlist.object(i).e = 0
    synlist.object(i).gmax = 1.2251821e-3
//    ss.point_mark(synlist.object(i),2)
//ss.point_mark(synlist.object(i),2,4, 4)
    // ss.point_mark(synlist.object(i),2,4, 2)

Loading data, please wait...