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_03__propagation
bundle_2_noEC
src
hoc
AXNODE.mod *
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 *
                            
begintemplate MyelAxon

public init, create_sections, topol, subsets, geom, biophys
public ranvrnodes, internodes
public all


// Start initializing the class
proc init() {
	create_sections($o1)
	subsets($o1)
	// nseg, defined in geom, depends on Ra and cm, defined in biophys
	// Nevermind
	geom($o1)
	topol($o1)
	biophys($o1)
}

// Create sections
create ranvrnodes[1], internodes[1]
proc create_sections() {
	n_rn = $o1.get("RN_n")
	n_in = $o1.get("IN_n")
	create ranvrnodes[n_rn], internodes[n_in]
}

// Subset, topology, geometry and biophysics
objref all
proc subsets() { local i
	objref all
	all = new SectionList()
	n_rn = $o1.get("RN_n")
	n_in = $o1.get("IN_n")
	n_mx = $o1.get("mx_n")
	for i=0, n_mx-1 {
		if (i < n_rn) {ranvrnodes[i] all.append()}
		if (i < n_in) {internodes[i] all.append()}
	}
}

objref l_rn, l_in
proc geom() {
	n_rn = $o1.get("RN_n")
	n_in = $o1.get("IN_n")
	n_mx = $o1.get("mx_n")
	l_rn = $o1.get("RN_L")
	l_in = $o1.get("IN_L")
	for i=0, n_mx-1 {
		if (i < n_rn) {
			ranvrnodes[i].L = l_rn.x[i]
			ranvrnodes[i].diam = $o1.get("RN_diam")
			ranvrnodes[i].nseg = 1
		}
		if (i < n_in) {
			internodes[i].L = l_in.x[i]
			// IMPORTANT: This has to be RN_diam, which is the internal diameter of the internode as well
			internodes[i].diam = $o1.get("RN_diam")
			internodes[i].nseg = 11
		}
	}
}

// objref nseg_rn, nseg_in, sctps
objref sctps
proc topol() { local i
	n_rn = $o1.get("RN_n")
	n_in = $o1.get("IN_n")
	n_mx = $o1.get("mx_n")
	nsecs = $o1.get("nsecs")
	sctps = $o1.get("sectypes")
	i_rn = 0
	i_in = 0
	for i=0, nsecs-1 {
		if (sctps.x(i) == 0) {
			if (i_rn < n_rn-1) {
				ranvrnodes[i_rn] connect internodes[i_in](0), 1
			}
			if (i_rn == n_rn-1) {
				if (i < nsecs-1) {
					ranvrnodes[i_rn] connect internodes[i_in](0), 1
				}
			}
			i_rn += 1
		}
		if (sctps.x(i) == 1) {
			if (i_in < n_in-1) {
				internodes[i_in] connect ranvrnodes[i_rn](0), 1
			}
			if (i_in == n_in-1) {
				if (i < nsecs-1) {
					internodes[i_in] connect ranvrnodes[i_rn](0), 1
				}
			}
			i_in += 1
		}
	}
}

proc biophys() {

	n_rn = $o1.get("RN_n")
	n_in = $o1.get("IN_n")
	n_mx = $o1.get("mx_n")
	for i=0, n_mx-1 {
		if (i < n_rn) {
			ranvrnodes[i] {
				Ra = $o1.get("Ra")
				cm = $o1.get("RN_cm")
				insert extracellular
					xg = 0.
					xraxial = 1e9
				insert hh
			}
		}
		if (i < n_in) {
			internodes[i] {
				Ra = $o1.get("Ra")
				cm = $o1.get("IN_cm")
				insert extracellular 
					xg = 0.
					xraxial = 1e9
				insert pas
					e_pas = $o1.get("IN_e_pas")
					g_pas = $o1.get("IN_g_pas")
			}
		}
	}
}

endtemplate MyelAxon