Model of peripheral nerve with ephaptic coupling (Capllonch-Juan & Sepulveda 2020)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:263988
We built a computational model of a peripheral nerve trunk in which the interstitial space between the fibers and the tissues is modelled using a resistor network, thus enabling distance-dependent ephaptic coupling between myelinated axons and between fascicles as well. We used the model to simulate a) the stimulation of a nerve trunk model with a cuff electrode, and b) the propagation of action potentials along the axons. Results were used to investigate the effect of ephaptic interactions on recruitment and selectivity stemming from artificial (i.e., neural implant) stimulation and on the relative timing between action potentials during propagation.
Reference:
1 . Capllonch-Juan M, Sepulveda F (2020) Modelling the effects of ephaptic coupling on selectivity and response patterns during artificial stimulation of peripheral nerves. PLoS Comput Biol 16:e1007826 [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Extracellular; Axon;
Brain Region(s)/Organism:
Cell Type(s): Myelinated neuron;
Channel(s):
Gap Junctions:
Receptor(s):
Gene(s):
Transmitter(s):
Simulation Environment: NEURON; Python;
Model Concept(s): Ephaptic coupling; Stimulus selectivity;
Implementer(s):
/
publication_data
dataset_01__fields
code
src
hoc
axon_mye_MRG_COMPLETE.hoc *
axon_mye_MRG_COMPLETE_allsecs_rightorder.hoc *
axon_mye_MRG_COMPLETE_dontforgetanysection.hoc *
axon_mye_MRG_STINonly.hoc *
axon_mye_old.hoc *
axon_unm.hoc *
ephap.hoc *
gaines_sensory.hoc *
MRG_NAELC.hoc *
MRG_NAELC_thick.hoc *
MRG_NAELC_thick_v2.hoc *
wire.hoc *
                            
// Created by LinearCircuit[0] of NEURON -- Release 7.4 (1370:16a7055d4a86) 2015-11-09
// manages LinearMechanism of rank 4
// See first public declaration and proc init() for important
//  methods and variable names
// Change begintemplate and endtemplate statements if LM is not
//  an appropriate name for the class.
// Usage: (assume object reference is "lm")
//  1) Attach segments to all the lm.*_loc(x) methods.
//  2) lm.install() creates the LinearMechanism
//  3) If any parameters are changed after lm.install(), call lm.afactors()
//  Named voltage nodes and internal states can be plotted using their alias
//    names in proc init()
//  Stimuli can be changed dynamically during a run using Vector.play. See
//    their alias names in proc init()
//  Initial conditions for named voltage nodes can be changed prior to finitialize().
//    Initial conditions are 0 by default (not copied from the original
//    LinearCircuit builder that generated this file).

// netlist: 5 v nodes  4 elements
//  index type name (endname)...(endname) (v node indices)
//   0 Ground[0]  () (  -1 )
//   1 OutsideCell[0] BScell[1].axon(0.5) () (ex1) (  2  1 )
//   2 OutsideCell[0] BScell[0].axon(0.5) () (ex0) (  3  0 )
//   3 Resistor[0] Rx () () (  1  0 )

begintemplate EphapDBA
public install, add_submatrix, afactors, ex1_loc, ex0_loc
 //also see the aliases in proc init() for more public names
public _lm, _c, _g, _b, _y, _y0, _sl, _xloc, _layer, _afac
objref this,_lm,  _c, _g, _b, _y, _y0, _srs[1], _sl, _xloc, _layer, _afac
proc init() { localobj _sf
  _n = $1
  _c = new Matrix(_n,_n,2)
  _g = new Matrix(_n,_n,2)
  _b = new Vector(_n)
  _y = new Vector(_n)
  _y0 = new Vector(_n)

  _ncellport = $1
  objref _srs[_ncellport+1] // in case _ncellport=0
  _xloc = new Vector(_ncellport)
  _layer = new Vector(_ncellport)
  _afac = new Vector(_ncellport)
  _sf = new StringFunctions()
}
proc ex0_loc() {local ix
  ix = $1
  _srs[ix] = new SectionRef()
  _xloc.x[ix] = $2
  _layer.x[ix] = $3
}
proc ex1_loc() {local ix
  ix = $1
  _srs[ix] = new SectionRef()
  _xloc.x[ix] = $2
  _layer.x[ix] = $3
}
proc add_submatrix() {
  // Calculate area factors
  _srs[$1].sec {
    a = area(_xloc.x[$1])
    if (a == 0) { a = 100 }
    _afac.x[$1] = -100./a
   }
  _srs[$2].sec {
    a = area(_xloc.x[$2])
    if (a == 0) { a = 100 }
    _afac.x[$2] = -100./a
  }
  // Fill elements and add to matrix
  _g.x[$1][$1] += (-1.0/$3)*_afac.x[$1]
  _g.x[$1][$2] += (1.0/$3)*_afac.x[$1]
  _g.x[$2][$1] += (1.0/$3)*_afac.x[$2]
  _g.x[$2][$2] += (-1.0/$3)*_afac.x[$2]
}
proc install() { local i
  _sl = new SectionList()
  for i=0, _ncellport-1 {
    _srs[i].sec { _sl.append() }
  }
  _y.copy(_y0)
  _lm = new LinearMechanism(_c, _g, _y, _y0, _b, _sl, _xloc, _layer)
}
endtemplate EphapDBA