OSCR

Computational modeling of human vagus nerve stimulation with three-dimensional fascicular morphology.

Code ↔ Paper

4 matches between paragraphs of the paper and lines of its authors' code, computed by the harvester (lexical-v1). Click a colored paragraph or line to see its counterpart.

The 4 matches
  1. [1] § METHODS › Finite element models of electric currents › Assembled geometry and meshing ↔ scripts/sip_mesher_ds.py, lines 333–369 · score 0.92 · max edge length, minimum edge length, internal change rate, surface change rate, layer elements, max error
  2. [2] § METHODS › Cable models of nerve fibers ↔ src/neuron/MOD_Files/gaines_internode_FLUTSTIN.mod, lines 1–67 · score 0.55 · McIntyre, internodal, Grill, Richardson, mammalian, NEURON
  3. [3] § METHODS › Cable models of nerve fibers ↔ src/neuron/MOD_Files/gaines_internode_MYSA.mod, lines 1–67 · score 0.55 · McIntyre, internodal, Grill, Richardson, mammalian, NEURON
  4. [4] § METHODS › Cable models of nerve fibers ↔ src/neuron/run_controls.py, lines 49–177 · score 0.54 · end excitation, threshold searches, PyFibers, amplitudes, activation

Paper

Loaded from Europe PMC by your browser, not stored by OSCR: doi.org · Europe PMC

The paper is loaded when this pane is shown.

The authors' code

Python · 402 lines · 13 KB · GPL-2.0 · 1 match

  1. """Created on Tue Sep 7 16:44:25 2021.
  2. @author: dpm42
  3. """
  4. import json
  5. import math
  6. import os
  7. from scanip_api3 import *
  8. # temp
  9. # end temp
  10. sipconfig = App.GetInstance().GetInputValue()
  11. sipconfig = r'D:\work\threed\config\system/sipmeshconfig.json' if sipconfig == "" else sipconfig
  12. print(sipconfig)
  13. with open(sipconfig) as f:
  14. config = json.load(f)
  15. masks = ['i', 'p', 'n']
  16. matpriority = {
  17. 1: 'endoneurium',
  18. 2: 'perineurium',
  19. 3: 'epineurium',
  20. 4: "conductor",
  21. 5: "recess",
  22. 6: "insulator",
  23. 7: "fill",
  24. 8: "medium",
  25. }
  26. # %% import and generate masks
  27. doc = App.GetInstance().ImportStackOfImages(
  28. App.GetInstance().SearchForImages(config['n_imgs']),
  29. config['um_per_px'] / 1000,
  30. config['um_per_px'] / 1000,
  31. config['um_per_slice'] / 1000,
  32. CommonImportConstraints().SetWindowLevel(0.0, 0.0),
  33. )
  34. doc.ImportBackgroundFromStackOfImages(
  35. App.GetInstance().SearchForImages(config['p_imgs']),
  36. config['um_per_px'] / 1000,
  37. config['um_per_px'] / 1000,
  38. config['um_per_slice'] / 1000,
  39. CommonImportConstraints().SetWindowLevel(0.0, 0.0),
  40. )
  41. doc.ImportBackgroundFromStackOfImages(
  42. App.GetInstance().SearchForImages(config['i_imgs']),
  43. config['um_per_px'] / 1000,
  44. config['um_per_px'] / 1000,
  45. config['um_per_slice'] / 1000,
  46. CommonImportConstraints().SetWindowLevel(0.0, 0.0),
  47. )
  48. doc.ImportBackgroundFromStackOfImages(
  49. App.GetInstance().SearchForImages(config['pcap_imgs']),
  50. config['um_per_px'] / 1000,
  51. config['um_per_px'] / 1000,
  52. config['um_per_slice'] / 1000,
  53. CommonImportConstraints().SetWindowLevel(0.0, 0.0),
  54. )
  55. doc.GetBackgroundByName("Stack").SetName('n')
  56. doc.GetBackgroundByName("Stack (2)").SetName('p')
  57. doc.GetBackgroundByName("Stack (3)").SetName('i')
  58. doc.GetBackgroundByName("Stack (4)").SetName('pcap')
  59. # 2022-02-16 16:47:38 - Combine backgrounds
  60. doc.ReplaceBackgroundUsingCombineBackgroundsOperation(
  61. doc.GetBackgroundByName("p"), [doc.GetBackgroundByName("pcap")], doc.GetBackgroundByName("p"), Doc.Maximum
  62. )
  63. for mask in masks:
  64. doc.GetBackgroundByName(mask).Activate()
  65. App.GetDocument().CopyBackgroundToMask()
  66. # 2021-10-15 15:24:22 - Flip
  67. # doc.FlipData(Doc.AxisY) nope
  68. for position, mask in enumerate(masks):
  69. # 2021-10-15 15:25:38 - Mask activation
  70. doc.GetGenericMaskByName(mask).Activate()
  71. # 2021-10-15 15:25:38 - Movement of mask
  72. doc.MoveMaskTo(doc.GetActiveGenericMask(), len(masks) - position)
  73. # 2021-10-15 15:27:55 - Mask activation
  74. doc.GetGenericMaskByName("n").Activate()
  75. # 2021-10-15 15:27:56 - Island removal filter
  76. doc.ApplyIslandRemovalFilter(1000)
  77. # 2021-10-15 15:29:38 - Fill gaps
  78. doc.ApplyFillGaps(Doc.MostContactSurface, [doc.GetMaskByName("p"), doc.GetMaskByName("i")], True, 1000)
  79. # fix for peri too close to epi after end caps
  80. sep_nerve = config['sep_nerve']
  81. pixelval = math.floor(config['sep_nerve'] / config['um_per_px'])
  82. partialval = config['sep_nerve'] / config['um_per_px'] - pixelval
  83. # 2022-05-18 11:27:33 - Mask activation
  84. App.GetDocument().GetGenericMaskByName("p").Activate()
  85. # 2022-05-18 11:27:45 - Mask duplication
  86. App.GetDocument().GetActiveGenericMask().Duplicate()
  87. # 2022-05-18 11:27:46 - Mask activation
  88. App.GetDocument().GetGenericMaskByName("Copy of p").Activate()
  89. # 2022-05-18 11:28:22 - Morphological filter
  90. App.GetDocument().ApplyDilateFilter(Doc.TargetMask, pixelval, pixelval, pixelval, partialval)
  91. # 2022-05-18 11:31:02 - Voxel Boolean
  92. App.GetDocument().ReplaceMaskUsingBooleanExpression(
  93. "(n OR \"Copy of p\")",
  94. App.GetDocument().GetMaskByName("n"),
  95. App.GetDocument().GetSliceIndices(Doc.OrientationXY),
  96. Doc.OrientationXY,
  97. )
  98. # 2022-05-18 11:32:04 - Mask activation
  99. App.GetDocument().GetGenericMaskByName("Copy of p").Activate()
  100. # 2022-05-18 11:32:05 - Mask removal
  101. App.GetDocument().RemoveMask(App.GetDocument().GetMaskByName("Copy of p"))
  102. # Get the dimensions of the image volume
  103. dims = doc.GetDimensions()
  104. # Store the image-to-global transformation matrix
  105. i2g_mat = doc.GetImageToGlobalTransformationMatrix()
  106. # Define a temporary matrix defining the image-to-new-origin
  107. temp_mat = Matrix.FromTranslation(-dims.GetPhysicalSizeX() / 2, -dims.GetPhysicalSizeY() / 2, 0)
  108. # Temporarily set the image-to-global, generate and export the mesh
  109. doc.SetImageToGlobalTransformationMatrix(temp_mat)
  110. # 2021-09-10 12:57:40 - Import STL file
  111. path = config["stl_path"]
  112. with open(path + '/matmap.json') as f:
  113. matmap = json.load(f)
  114. matmap["i"] = "endoneurium"
  115. matmap["p"] = "perineurium"
  116. matmap["n"] = "epineurium"
  117. # set material priority
  118. mat_ind = len(matmap)
  119. for key in matpriority:
  120. for k, v in matmap.items():
  121. if v == matpriority[key]:
  122. matmap[k] = {"position": mat_ind, "material": v}
  123. mat_ind -= 1
  124. stl_files = [x for x in os.listdir(path) if x.endswith('.stl')]
  125. fromstl = [key for key in matmap.keys() if matmap[key]['material'] in ['fill', 'medium']]
  126. # get surfaces
  127. use_nastran = config["mesh"].get("use_nastran", False)
  128. if use_nastran:
  129. # 2023-05-11 12:12:16 - Import volume mesh file
  130. App.GetDocument().ImportVolumeMeshFromFile(path + "/alldomain.nas", 0.001, False)
  131. # 2023-05-11 12:12:24 - Generation of surface(s) from element set(s)
  132. App.GetDocument().CopyElementSetsToSurfaces(
  133. App.GetDocument().GetVolumeMeshByName("alldomain").GetElementSets(), True
  134. )
  135. # 2023-05-11 12:16:00 - Element set visibility modification
  136. App.GetDocument().ToggleElementSetVisibility(App.GetDocument().GetVolumeMeshByName("alldomain").GetElementSets())
  137. # 2023-05-11 12:17:00 - Volume mesh removal
  138. App.GetDocument().RemoveVolumeMesh(App.GetDocument().GetVolumeMeshByName("alldomain"))
  139. # get dommap
  140. with open(path + '/dommap.json') as f:
  141. dommap = json.load(f)
  142. # Rename elements to correct surface names
  143. for setname, setnums in dommap.items():
  144. for setnum in setnums:
  145. App.GetDocument().GetSurfaceByName(f"Element set {setnum} (from mesh)").SetName(setname)
  146. # 2023-05-15 10:48:28 - Surface object removal (removes medium)
  147. App.GetDocument().RemoveSurface(App.GetDocument().GetSurfaceByName("Element set 1 (from mesh)"))
  148. for name in fromstl:
  149. try:
  150. # 2023-05-15 10:48:28 - Surface object removal (removes fill)
  151. App.GetDocument().RemoveSurface(App.GetDocument().GetSurfaceByName(name))
  152. except:
  153. pass
  154. doc.ImportSurfaceFromStlFile(path + '/' + name + '.stl', True, 0.001, False)
  155. else:
  156. for file in stl_files:
  157. doc.ImportSurfaceFromStlFile(path + '/' + file, True, 0.001, False)
  158. # %% new fill code
  159. # 2021-12-11 13:30:06 - Pad
  160. doc.PadData(1000, 1000, 1000, 1000, 0, 0)
  161. m2s = [key for key in matmap.keys() if matmap[key]['material'] == 'fill']
  162. # 2021-12-11 13:30:20 - Generation of mask(s) from surface object(s)
  163. doc.CopySurfacesToMasks([doc.GetSurfaceByName(name) for name in m2s], doc.AccurateManifold, False)
  164. doc.ShrinkWrapData(Doc.TargetAllMasks, 10, 10, 10, 10, 10, 10)
  165. # 2021-12-11 13:30:20 - Generation of mask(s) from surface object(s)
  166. doc.RemoveSurfaces([doc.GetSurfaceByName(name) for name in m2s], False)
  167. for name in m2s:
  168. doc.GetGenericMaskByName(name + " (from surface)").SetName(name)
  169. # %% end fill code
  170. # %% begin remesh code
  171. # 2022-05-26 10:01:04 - Remesh surface object
  172. doc.GetSurfaceByName("medium").Remesh(0.5)
  173. surfaces = [os.path.splitext(x)[0] for x in stl_files if os.path.splitext(x)[0] not in m2s]
  174. remsurfs = [s for s in surfaces if s != "medium"]
  175. print(remsurfs)
  176. # 2022-06-09 17:10:51 - Surface model creation
  177. remesh_model = App.GetDocument().CreateSurfaceModel("SurfModel")
  178. # 2022-06-09 17:10:58 - Objects mode activation
  179. App.GetDocument().EnableObjectsMode()
  180. # 2022-06-09 17:11:02 - Part creation
  181. remesh_model.AddSurfaces([App.GetDocument().GetSurfaceByName(x) for x in remsurfs])
  182. # 2022-06-09 17:11:03 - Models mode activation
  183. App.GetDocument().EnableModelsMode()
  184. # 2022-06-09 17:11:27 - Model activation
  185. App.GetDocument().SetActiveModel(remesh_model)
  186. # 2022-06-09 17:11:42 - Model configuration modification
  187. remesh_model.SetExportType(Model.StlFeCfdCad)
  188. # 2022-06-09 17:12:12 - Surface generation
  189. App.GetDocument().GenerateMesh()
  190. # 2022-06-09 17:15:06 - Conversion of meshed part(s) to surface object(s)
  191. remesh_model.CreateSurfacesFromParts([remesh_model.GetPartByName(x) for x in remsurfs])
  192. # 2022-06-09 17:15:09 - Objects mode activation
  193. App.GetDocument().EnableObjectsMode()
  194. for surfname in remsurfs:
  195. # 2022-06-09 17:15:21 - Rename surface object
  196. App.GetDocument().GetSurfaceByName(surfname).SetName(surfname + "_imported")
  197. # 2022-06-09 17:15:27 - Rename surface object
  198. App.GetDocument().GetSurfaceByName(surfname + " (from mesh)").SetName(surfname)
  199. # %% end remesh code
  200. # 2021-10-15 15:35:29 - FE model creation
  201. femod = doc.CreateFeModel("Model 1")
  202. # 2021-10-15 15:35:35 - Objects mode activation
  203. doc.EnableObjectsMode()
  204. # 2021-10-15 15:35:38 - Part creation
  205. doc.GetModelByName("Model 1").AddMasks(
  206. [doc.GetGenericMaskByName("n"), doc.GetGenericMaskByName("p"), doc.GetGenericMaskByName("i")]
  207. )
  208. # 2021-12-11 13:48:26 - Part creation
  209. doc.GetModelByName("Model 1").AddMasks([doc.GetGenericMaskByName(name) for name in m2s])
  210. # 2021-10-15 15:35:38 - Models mode activation
  211. doc.EnableModelsMode()
  212. # 2021-10-15 15:35:40 - Objects mode activation
  213. doc.EnableObjectsMode()
  214. # 2021-10-15 15:35:49 - Part creation
  215. femod.AddSurfaces([doc.GetSurfaceByName(surf) for surf in surfaces])
  216. # 2021-10-15 15:35:49 - Models mode activation
  217. doc.EnableModelsMode()
  218. # 2021-10-15 15:36:27 - Model configuration modification
  219. femod.SetUseSmartMaskSmoothing(True)
  220. # 2022-07-15 17:47:53 - Model configuration modification
  221. femod.SetSnapSurfacePartsToModelBounds(True)
  222. # 2022-07-15 17:47:58 - Model configuration modification\
  223. femod.SetNumSmartMaskSmoothingIterations(100)
  224. # 2021-10-15 15:36:30 - Model configuration modification
  225. femod.SetExportUnits(Model.MicronsUnits)
  226. # 2021-10-15 15:37:45 - Contact to boundary creation
  227. femod.AddSurfaceContact(femod.GetPartByName("i"), femod.GetPartByName("medium"))
  228. # 2021-10-15 15:38:14 - Model configuration modification
  229. femod.SetExportType(Model.ComsolNasVolume)
  230. # temp block
  231. # 2022-07-15 17:57:09 - Model configuration modification
  232. femod.SetUseSmallestElementImprovement(True)
  233. # 2022-07-15 18:50:44 - Model configuration modification
  234. femod.SetAdditionalMeshQualityImprovementMaximumOffSurfaceDistance(0.01)
  235. # 2022-07-15 17:57:29 - Model configuration modification
  236. femod.SetSmallestElementImprovementCharacteristicLengthTarget(config['mesh']["max_edge_length"])
  237. # 2022-07-15 17:57:31 - Model configuration modification
  238. femod.SetUseLimitMaximumDisplacement(True)
  239. # 2022-07-15 17:57:37 - Model configuration modification
  240. femod.SetMaximumDisplacementRatio(0.2)
  241. # end temp block
  242. for ob, ob_info in matmap.items():
  243. # 2021-10-15 15:38:45 - Model configuration modification
  244. femod.SetEditAdvancedParametersManuallyOnPart(femod.GetPartByName(ob), True)
  245. if ob_info["material"] == "conductor":
  246. # 2021-10-15 15:38:52 - Model configuration modification
  247. femod.SetTargetMinimumEdgeLengthOnPart(femod.GetPartByName(ob), 0.0005)
  248. else:
  249. # 2021-10-15 15:38:52 - Model configuration modification
  250. femod.SetTargetMinimumEdgeLengthOnPart(femod.GetPartByName(ob), config['mesh']['min_edge_length'])
  251. # 2021-10-15 15:38:55 - Model configuration modification`
  252. femod.SetTargetMaximumErrorOnPart(femod.GetPartByName(ob), config['mesh']['max_error'])
  253. # 2021-10-15 15:39:00 - Model configuration modification
  254. if ob_info["material"] == "conductor":
  255. femod.SetMaximumEdgeLengthOnPart(femod.GetPartByName(ob), 0.01)
  256. else:
  257. femod.SetMaximumEdgeLengthOnPart(femod.GetPartByName(ob), config['mesh']["max_edge_length"])
  258. # 2021-10-15 15:39:13 - Model configuration modification
  259. femod.SetInternalChangeRateOnPart(femod.GetPartByName(ob), config['mesh']["internal_change_rate"])
  260. femod.SetSurfaceChangeRateOnPart(doc.GetActiveModel().GetPartByName(ob), config['mesh']["surface_change_rate"])
  261. femod.SetTargetNumberElementsAcrossLayerOnPart(
  262. doc.GetActiveModel().GetPartByName(ob), config['mesh']["n_layer_elements"]
  263. )
  264. femod.SetSmoothAgainstBackground(config['mesh']["smooth_against_background"])
  265. try:
  266. femod.GetPartsContainer().GetPartByName(ob).MoveTo(ob_info["position"])
  267. except Exception:
  268. pass
  269. femod.GetPartByName(ob).SetMaterial(PlaceholderMaterial(ob_info["material"]))
  270. # 2022-04-26 16:26:12 - Model configuration modification
  271. if config['mesh'].get('second_order') is True:
  272. femod.SetHigherOrder(True)
  273. femod.SetCurvedEdges(True)
  274. else:
  275. print('Warning: Using first order elements')
  276. # required twice
  277. for ob, ob_info in matmap.items():
  278. try:
  279. femod.GetPartsContainer().GetPartByName(ob).MoveTo(ob_info["position"])
  280. except Exception:
  281. pass
  282. doc.GetGenericMaskByName("p").Activate()
  283. # 2022-06-13 12:32:23 - Morphological filter
  284. App.GetDocument().ApplyOpenFilter(Doc.TargetMask, 2, 2, 0, 0.0)
  285. # 2021-11-02 12:40:33 - Isolated cavity and island removal
  286. doc.RemoveIsolatedCavitiesAndIslands([doc.GetMaskByName("n"), doc.GetMaskByName("p"), doc.GetMaskByName("i")], 101, 101)
  287. doc.ShrinkWrapData(Doc.TargetAllMasks, 10, 10, 10, 10, 10, 10)
  288. doc.SaveAs(config['outpath'] + '/mesh_debug.sip')
  289. if config["run_type"] == "cluster":
  290. # 2021-10-26 14:00:20 - Project save
  291. doc.GenerateMesh()
  292. # 2021-12-17 08:44:39 - COMSOL export
  293. doc.ExportComsolNasVolume(config["outpath"] + '/mesh.nas', False)
  294. # 2021-10-26 14:00:20 - Project save
  295. doc.SaveAs(config['outpath'] + '/mesh.sip')

sip_mesher_ds.py at commit 3417be7, under GPL-2.0 · at the source

Overview

  1. Department of Biomedical Engineering, Duke University, Durham, North Carolina 27708, USA
  2. Department of Biomedical Engineering, Case Western Reserve University, Cleveland, Ohio 44106, USA
  3. Department of Electrical and Computer Engineering, Duke University, Durham, North Carolina 27708, USA
  4. Department of Neurosurgery, Duke University School of Medicine, Durham, North Carolina 27708, USA
  5. Department of Neurobiology, Duke University School of Medicine, Durham, North Carolina 27708, USA
Institutions: Duke University (United States); Case Western Reserve University (United States); Duke Medical Center (United States)
Journal: APL bioengineering, volume 10, issue 1, article 016112
Dates: received 22 October 2025; accepted 22 January 2026; published online 2 March 2026
Type: Research article · Language: English
License: CC BY
Identifiers: DOI 10.1063/5.0308450 · PMID 41782809 · PMCID PMC12956375 · OpenAlex W7133183935
Open access: gold, a free copy (OpenAlex)
Status: code verified
Categories: computational modeling (no new data) (modality), human (organism), computational (subfield)
Methods: Connectivity, Statistics, fMRI & imaging
Topic: Vagus Nerve Stimulation Research (Neurology, Neuroscience), according to OpenAlex
Funding: NIH Office of the Director 10.13039/100000052 (OT2 OD025340, 75N98022C00018)
Citations: cited by 6 papers (Europe PMC); 72 references in the paper

Abstract

Implanted vagus nerve stimulation is FDA-approved to treat epilepsy, depression, and stroke sequelae and is under development for other disorders such as heart failure and rheumatoid arthritis. Anatomically realistic computational models enable the design of electrodes and stimulation parameters that activate nerve fibers that mediate therapeutic responses, and avoid activating fibers that cause side effects. Conventional modeling techniques assume constant longitudinal morphology, extruding a single cross section to define the three-dimensional nerve geometry. However, recent imaging data showed that human vagus nerves have extensive fascicle splitting and merging along their length. Therefore, we developed a pipeline to simulate true three-dimensional (true-3D) models of peripheral nerve stimulation from segmentations of micro-computed tomography imaging. We implemented models of n = 4 human vagus nerves and systematically evaluated extrusion vs true-3D model responses to electrical stimulation across population dose-response relationships, fiber-specific thresholds, recruitment order, and spatial selectivity. Despite the complex morphology of the human vagus nerve, extrusion models replicated the true-3D neural responses if: (1) the nerve morphology was deformed to a circular cross section, as occurs with chronic cuff implants, and (2) the extruded cross section was centered under the depolarizing electrode contact. Our pipeline provides a foundation for advanced modeling of peripheral nerve stimulation and the design of more selective stimulation therapies.

Reproduced under the paper's license (CC BY), from the paper cited above.

Repositories

Its files are read in the Code ↔ Paper reader above, with 4 matches between paragraphs and lines of code.

wmglab-duke/3D_nerve_pipeline

License: GPL-2.0
State: the link answers, verified on 30 September 2026
Evidence: files inventoried
Commit: 3417be7b0869886e4939e8635230944c6d3db1d7, 19 March 2026
Languages: Python (80), Java (15), NEURON (2), Shell (1)
Size: 346 files, 98 scripts
Software Heritage: not archived
Found in: “DATA AVAILABILITY”
Holds: README, license file, environment (pyproject.toml, requirements.txt), tests, continuous integration, documentation
Not found: CITATION.cff
Tools: NumPy (32 files), Matplotlib (30 files), seaborn (12 files), pandas (10 files), SciPy (10 files), OpenCV (7 files), NEURON (2 files), Pillow (2 files), scikit-image (2 files)
Availability: 1 check, the latest on 30 September 2026: the link answers
  • 30 September 2026: the link answers
100 files

Zenodo 8298703

License: GPL-2.0
State: the link answers, verified on 30 September 2026
Evidence: files inventoried
Size: 1 file
Software Heritage: not checked
Found in: the references
Not found: README, license file, CITATION.cff, environment file, tests, continuous integration, documentation
Tools: NEURON (84 files), NumPy (23 files), Matplotlib (22 files), pandas (6 files), SciPy (6 files), seaborn (6 files), OpenCV (5 files), scikit-image (1 file)
Availability: 1 check, the latest on 30 September 2026: the link answers (HTTP 200)
  • 30 September 2026: the link answers (HTTP 200)
150 files
At the source:

Zenodo 18475038

License: CC-BY-4.0
State: the link answers, verified on 30 September 2026
Evidence: files inventoried
Size: 1 file
Software Heritage: not checked
Found in: the references
Not found: README, license file, CITATION.cff, environment file, tests, continuous integration, documentation
Availability: 1 check, the latest on 30 September 2026: the link answers (HTTP 200)
  • 30 September 2026: the link answers (HTTP 200)
At the source:

wmglab-duke/ascent

License: GPL-2.0
State: the link answers, verified on 30 September 2026
Evidence: files inventoried
Commit: 2e513cd06e9f986ea3b2d56288ac6b9e362c8706, 18 August 2026
Languages: Python (68), Java (6), NEURON (2), Shell (1)
Size: 418 files, 77 scripts
Software Heritage: archived
Found in: the Zenodo archive record
Holds: README, license file, environment (pyproject.toml, requirements.txt), tests, continuous integration, documentation
Not found: CITATION.cff
Tools: NumPy (27 files), Matplotlib (26 files), seaborn (9 files), pandas (8 files), SciPy (7 files), OpenCV (5 files), NEURON (3 files), scikit-image (1 file)
Availability: 1 check, the latest on 30 September 2026: the link answers
  • 30 September 2026: the link answers
79 files

The paper's code and data availability statement is in the Data section.

Tracing map

Proposed by the machine: these links were found in the paper and verified at the source, without human review. The map will receive a Zenodo DOI once one of the paper's authors has validated it with their ORCID.

What the map holds:

  • 4 repositories of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
  • 323 scripts, each with its path and the digest of its content;
  • 4 matches between paragraphs of the paper and lines of the code (method lexical-v1);
  • neither the text of the paper nor the code itself.

Its JSON (tracing-map.json) is deposited on Zenodo with its DOI once the map is validated.

Data

No dataset and no data link were found in the paper.

Data availability

The computational pipeline code that underlies the findings of this study is openly available from GitHub at https://github.com/wmglab-duke/3D_nerve_pipeline; and Zenodo at Ref. 71. The data and plotting code that support the findings of this study are openly available from SPARC.science (https://doi.org/10.26275/u5yy-gi6w) at Ref. 72.

Reproduced under the paper's license (CC BY), from the paper cited above.

Versions

The history of this record: each version stored by the harvester or made by a correction of its authors or of the maintainers of its code, and what changed in its facts. The texts of the paper (its abstract, its availability statements) are not part of it; versions that changed only those are not listed.

Version 1, 30 September 2026: the first record

Recorded: type, language, journal, volume, issue, pages, dates, 6 authors, 1 funder, 69 references.

Cite

This paper

Marshall, D. P., Upadhye, A. R., Buyukcelik, O. N., Shoffstall, A. J., Grill, W. M., & Pelot, N. A. (2026). Computational modeling of human vagus nerve stimulation with three-dimensional fascicular morphology. APL bioengineering, 10(1), 016112. https://doi.org/10.1063/5.0308450

BibTeX

@article{marshall2026computational,
author = {Marshall, Daniel P. and Upadhye, Aniruddha R. and Buyukcelik, Ozge N. and Shoffstall, Andrew J. and Grill, Warren M. and Pelot, Nicole A.},
title = {{Computational modeling of human vagus nerve stimulation with three-dimensional fascicular morphology}},
journal = {APL bioengineering},
year = {2026},
month = mar,
volume = {10},
number = {1},
pages = {016112},
publisher = {American Institute of Physics},
issn = {2473-2877},
doi = {10.1063/5.0308450},
url = {https://doi.org/10.1063/5.0308450},
pmid = {41782809},
pmcid = {PMC12956375}
}

RIS

TY - JOUR
AU - Marshall, Daniel P.
AU - Upadhye, Aniruddha R.
AU - Buyukcelik, Ozge N.
AU - Shoffstall, Andrew J.
AU - Grill, Warren M.
AU - Pelot, Nicole A.
TI - Computational modeling of human vagus nerve stimulation with three-dimensional fascicular morphology
T2 - APL bioengineering
J2 - APL Bioeng
PY - 2026
DA - 2026/03/02
VL - 10
IS - 1
SP - 016112
SN - 2473-2877
PB - American Institute of Physics
DO - 10.1063/5.0308450
UR - https://doi.org/10.1063/5.0308450
LA - en
ER -

CSL-JSON

{
"id": "10.1063/5.0308450",
"type": "article-journal",
"title": "Computational modeling of human vagus nerve stimulation with three-dimensional fascicular morphology",
"container-title": "APL bioengineering",
"author": [
{
"family": "Marshall",
"given": "Daniel P."
},
{
"family": "Upadhye",
"given": "Aniruddha R."
},
{
"family": "Buyukcelik",
"given": "Ozge N."
},
{
"family": "Shoffstall",
"given": "Andrew J."
},
{
"family": "Grill",
"given": "Warren M."
},
{
"family": "Pelot",
"given": "Nicole A."
}
],
"container-title-short": "APL Bioeng",
"volume": "10",
"issue": "1",
"page": "016112",
"DOI": "10.1063/5.0308450",
"PMID": "41782809",
"PMCID": "PMC12956375",
"ISSN": "2473-2877",
"publisher": "American Institute of Physics",
"URL": "https://doi.org/10.1063/5.0308450",
"language": "en",
"issued": {
"date-parts": [
[
2026,
3,
2
]
]
}
}

The tracing map gets a citation of its own once an author has validated it and it has a DOI.

Similar papers

The papers with a page that share the most with this one: the tools found in their code, their categories, datasets, cited references and authors, the rarest counting most.

[1] doi:10.1016/j.celrep.2026.117420 [code]
Neural population dynamics of direct electrical stimulation of neocortex.
Journal: Cell reports
In common: OpenCV, scikit-image, Pillow, 5 other tools, 2 references
[2] doi:10.1038/s43856-026-01695-3 [code]
Predict neuromuscular performance in human epidural electrical stimulation: phase 1 trial interim results.
Journal: Communications medicine
In common: pandas, SciPy, Matplotlib, 1 other tool, computational modeling (no new data), 4 references
[3] doi:10.1016/j.isci.2026.115488 [code]
An integrated <i>i</i> <i>n vitro</i> platform and biophysical modeling approach for studying synaptic transmission in isolated neuronal pairs.
Journal: iScience
In common: NEURON, OpenCV, Pillow, 5 other tools
[4] doi:10.7554/elife.100880 [code]
An applicable and efficient retrograde monosynaptic circuit mapping tool for larval zebrafish.
Journal: eLife
In common: NEURON, OpenCV, scikit-image, 5 other tools
[5] doi:10.3389/fnsys.2026.1822122 [code]
Convergence-divergence circuits for multimodal integration of innate and learned opponent valences.
Journal: Frontiers in systems neuroscience
In common: NEURON, scikit-image, Pillow, 5 other tools
[6] doi:10.1016/j.celrep.2026.117793 [code]
Clustered inputs engage dendritic nonlinearities and calcium signaling to support efficient place-field formation in CA1 pyramidal neurons.
Journal: Cell reports
In common: NEURON, seaborn, pandas, 3 other tools, computational modeling (no new data), 1 reference
[7] doi:10.1038/s42003-026-10957-8 [code]
Brain defence by the extracellular matrix protein Cochlin.
Journal: Communications biology
In common: OpenCV, scikit-image, Pillow, 5 other tools
[8] doi:10.1038/s41467-026-76837-1 [code]
Drug screen and machine learning predict neuroprotective agents in a preclinical human model of childhood dementia.
Journal: Nature communications
In common: OpenCV, scikit-image, Pillow, 5 other tools
[9] doi:10.1371/journal.pcbi.1014571 [code]
SynAPSeg: A novel dataset and image analysis framework for deep learning-based synapse detection and quantification.
Journal: PLoS computational biology
In common: OpenCV, scikit-image, Pillow, 5 other tools
[10] doi:10.1002/alz.71649 [code]
Postmortem brain MRI reveals differential associations of subcortical and limbic volumes with cortical thinning and neurodegenerative pathologies.
Journal: Alzheimer's & dementia : the journal of the Alzheimer's Association
In common: OpenCV, scikit-image, Pillow, 5 other tools

Contribute

The authors of this paper can claim it, correct its record and validate its tracing map, and the maintainers of its code (its owner, or a public member of its organization) correct what it says of their repository; anyone signed in can ask for its removal. Every request goes to OSCR's own machine, which answers it; your account page follows them.

Sign in with ORCID to claim this paper as one of its authors, correct its record or validate its tracing map: when the paper's metadata lists your ORCID iD, you are recognized at once. Maintainers of its code: sign in with GitHub, then claim the repository on your account page.

Request its removal

To ask OSCR to remove this record, the copies of its authors' scripts or its tracing map, use the removal request page: signed in, you say who you are, what to remove and why, then review and confirm the request. Published rules decide every request (how).

Discussion, reproductions, activity

Discussion: questions and error reports about this paper and its code, from signed-in readers and its authors. It opens with sign-in.

Reproductions: reports from readers who ran the authors' code: what they reproduced, with which environment, commit and data. It opens with sign-in.

Activity: what happens around this paper: new versions of its record, its map's validation, discussions and reproductions. It opens with sign-in.