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_04__eph_stim_vs_dist
fig9b
code
data
models
settings
src
x86_64
AXNODE.mod *
aaa_info_dataset
algebra.py *
analysis.py *
anatomy.py *
biophysics.py *
circlepacker.py *
contourhandler.py *
electrodes.py *
fill_nerve.py *
geometry.py *
get_extstim.py *
read_results.py *
sim_launcher.py *
simcontrol.py *
tessellations.py *
tools.py *
visualisation.py *
vm_vs_t.py
workspace.py *
                            
"""
This program fills the nerve with all the components of the resistive 
network (axons, NAELC...), including the tesselation
"""

import os
import csv
import matplotlib.pyplot as plt

import anatomy
import geometry as geo
import analysis as als
import workspace as ws
import simcontrol



###############################################################################
# Data management

# Prepare the folders that the code will use
simcontrol.get_paths()

# Remove results from previous simulation(s)
als.remove_previous_results()

###############################################################################

# Prepare the necessary variables from the configuration files
simcontrol.prepare_workspace()

###############################################################################
# Load settings
settings = ws.anatomy_settings["cross-section"]["fibers distribution"]
apsettings = settings["axon placements"]
packsettings = apsettings["packing"]


# AXON PACKING AND TESSELLATION
# Parameters

params = {}

# Fascicle filling

# Minimum separation
params['min_sep'] = apsettings["minimum separation"]
# Triangulation
# Apprx. max. no. of points or triangles (not counting axons)
params['mnd'] = settings["min NAELC density"]
# Reduction of the number of points in the contours
params['c_reduction'] = ws.anatomy_settings["cross-section"]["contours point reduction"]
# Type of axon packing
params['packing_type'] = packsettings["type"]

# Number of axons, locations (centers) and radii
params['numberofaxons'] = apsettings["number"]
params['locations'] = apsettings["locations"]
params['radii'] = apsettings["radii"]

# Minimum and maximum radii
params['rmin'] = packsettings["min radius"]
params['rmax'] = packsettings["max radius"]
# Tolerance for trying to pack circles
params['circp_tol'] = packsettings["max iterations"]
# Maximum number of axons per fascicle
params['max_axs_pf'] = packsettings["max axons per fascicle"]

# Build tessellated nerve
nvt = anatomy.NerveTess()
nvt.build(params)

# Save it
spath = os.path.join(ws.folders["data/saved"], 'created_nerve_internal_topology.csv')
nvt.save_to_file(spath)

# Create figure to visualise the tessellation process
fig, ax = plt.subplots()
ws.ax = ax
nvt.pd.draw(ax)
nvt.draw_axons_and_points(ax)
nvt.draw_contours(ax, c='r')
ax.set_aspect('equal')
plt.show()