OSCR

Energetic diversity in retinal ganglion cells is modulated by neuronal activity and correlates with resilience to degeneration.

Code ↔ Paper

1 match 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 1 match
  1. [1] § Methods › In vivo image processing and quantification ↔ ProcessRaw.ipynb, lines 180 to 229 · score 0.79 · ScanImageTiffReader, interleaved, accomplished, subtracted, Background, clipped · Report a mismatch

Paper

Loaded from Europe PMC by your browser; OSCR does not store it: doi.org · Europe PMC

The paper is loaded when this pane is shown.

The authors' code

Jupyter notebook · 302 lines · 11 KB · no license · 1 match

  1. # %%
  2. %%capture systemMsg
  3. !pip install suite2p
  4. !pip install cellpose
  5. import numpy as np
  6. from skimage import io
  7. import os, requests
  8. from pathlib import Path
  9. import suite2p
  10. import matplotlib.pyplot as plt
  11. from ScanImageTiffReader import ScanImageTiffReader
  12. from PIL import Image
  13. # %%
  14. #Concatenate scanimage raw files
  15. filelist = []
  16. for file in os.listdir():
  17. if file.endswith(".tif"):
  18. filelist.append(file)
  19. filelist.sort(key=os.path.getmtime)
  20. selection_tuple = tuple(filelist)
  21. # %%
  22. #create `/registered` output folder
  23. i = 0
  24. while os.path.exists(os.getcwd() + '\\registered%s' % i):
  25. i += 1
  26. os.makedirs(os.getcwd() + '\\registered%s' % i)
  27. newdir = os.getcwd() + '\\registered%s' % i
  28. # %%
  29. #for visual inspection of pixels in clipped image region used to measure background intensity
  30. def drawTriangles(concatenated_input):
  31. plotTriangles = concatenated_input.copy()
  32. #upper left
  33. plotTriangles[:,:,
  34. np.triu_indices(25)[0] + 5,
  35. 25 - np.triu_indices(25)[1] + 5
  36. ] = 1000
  37. #lower left
  38. plotTriangles[:,:,
  39. 511 - np.triu_indices(16)[0] - 5,
  40. 16 - np.triu_indices(16)[1] + 5
  41. ] = 1000
  42. #upper right
  43. plotTriangles[:,:,
  44. np.triu_indices(25)[0] + 5,
  45. 511 - (25 - np.triu_indices(25)[1]) - 5
  46. ] = 1000
  47. #lower right
  48. plotTriangles[:,:,
  49. 511 - np.triu_indices(25)[0] - 5,
  50. 511 - (25 - np.triu_indices(25)[1]) - 5
  51. ] = 1000
  52. plt.figure(figsize = (36,36))
  53. plt.subplot(2,2,1)
  54. plt.gca().set_title('ch0 image')
  55. plt.imshow(np.average(concatenated[:,0,:,:], axis = 0), vmin=-10, vmax=10)
  56. plt.subplot(2,2,2)
  57. plt.gca().set_title('ch0 triangles')
  58. plt.imshow(np.average(plotTriangles[:,0,:,:], axis = 0), vmin=-10, vmax=10)
  59. plt.subplot(2,2,3)
  60. plt.gca().set_title('ch1 image')
  61. plt.imshow(np.average(concatenated[:,1,:,:], axis = 0), vmin=-10, vmax=10)
  62. plt.subplot(2,2,4)
  63. plt.gca().set_title('ch1 triangles')
  64. plt.imshow(np.average(plotTriangles[:,1,:,:], axis = 0), vmin=-10, vmax=10)
  65. # %%
  66. #measures background intensity in pixels at corner regions of image clipped by objective lens
  67. def measureTriangles(concatenated_input):
  68. #channel 0
  69. #upper left
  70. a1 = concatenated_input[:,0,
  71. np.triu_indices(25)[0] + 5,
  72. 25 - np.triu_indices(25)[1] + 5
  73. ]
  74. #lower left
  75. a2 = concatenated_input[:,0,
  76. 511 - np.triu_indices(16)[0] - 5,
  77. 16 - np.triu_indices(16)[1] + 5
  78. ]
  79. #upper right
  80. a3 = concatenated_input[:,0,
  81. np.triu_indices(25)[0] + 5,
  82. 511 - (25 - np.triu_indices(25)[1]) - 5
  83. ]
  84. #lower right
  85. a4 = concatenated_input[:,0,
  86. 511 - np.triu_indices(25)[0] - 5,
  87. 511 - (25 - np.triu_indices(25)[1]) - 5
  88. ]
  89. global acat
  90. acat = np.concatenate((a1.flatten(),a2.flatten(),a3.flatten(),a4.flatten()))
  91. #channel 1
  92. #upper left
  93. b1 = concatenated_input[:,1,
  94. np.triu_indices(25)[0] + 5,
  95. 25 - np.triu_indices(25)[1] + 5
  96. ]
  97. #lower left
  98. b2 = concatenated_input[:,1,
  99. 511 - np.triu_indices(16)[0] - 5,
  100. 16 - np.triu_indices(16)[1] + 5
  101. ]
  102. #upper right
  103. b3 = concatenated_input[:,1,
  104. np.triu_indices(25)[0] + 5,
  105. 511 - (25 - np.triu_indices(25)[1]) - 5
  106. ]
  107. #lower right
  108. b4 = concatenated_input[:,1,
  109. 511 - np.triu_indices(25)[0] - 5,
  110. 511 - (25 - np.triu_indices(25)[1]) - 5
  111. ]
  112. global bcat
  113. bcat = np.concatenate((b1.flatten(),b2.flatten(),b3.flatten(),b4.flatten()))
  114. print('SI_Ch2_Offset: ' + str(SI_Ch2_Offset) )
  115. print('SI_Ch3_Offset: ' + str(SI_Ch3_Offset) )
  116. print('channel 0 total pixel median: ' + str(np.median(acat)) )
  117. print('channel 0 upper left pixel median: ' + str(np.median( a1.flatten() )) )
  118. print('channel 0 lower left pixel median: ' + str(np.median( a2.flatten() )) )
  119. print('channel 0 upper right pixel median: ' + str(np.median( a3.flatten() )) )
  120. print('channel 0 lower right pixel median: ' + str(np.median( a4.flatten() )) )
  121. print('channel 1 total pixel median: ' + str(np.median(bcat)) )
  122. print('channel 1 upper left pixel median: ' + str(np.median( b1.flatten() )) )
  123. print('channel 1 lower left pixel median: ' + str(np.median( b2.flatten() )) )
  124. print('channel 1 upper right pixel median: ' + str(np.median( b3.flatten() )) )
  125. print('channel 1 lower right pixel median: ' + str(np.median( b4.flatten() )) )
  126. plt.figure(figsize=(16, 6))
  127. plt.subplot(2, 5, 1)
  128. plt.gca().set_title('ch0 total')
  129. plt.hist(acat, bins = 50, range = ( np.percentile(acat, 5)-10, np.percentile(acat, 95)+10 ))
  130. plt.subplot(2, 5, 2)
  131. plt.gca().set_title('ch0 upper left')
  132. plt.hist(a1.flatten(), bins = 50, range = ( np.percentile(a1.flatten(), 5)-10, np.percentile(a1.flatten(), 95)+10 ))
  133. plt.subplot(2, 5, 3)
  134. plt.gca().set_title('ch0 lower left')
  135. plt.hist(a2.flatten(), bins = 50, range = ( np.percentile(a2.flatten(), 5)-10, np.percentile(a2.flatten(), 95)+10 ))
  136. plt.subplot(2, 5, 4)
  137. plt.gca().set_title('ch0 upper right')
  138. plt.hist(a3.flatten(), bins = 50, range = ( np.percentile(a3.flatten(), 5)-10, np.percentile(a3.flatten(), 95)+10 ))
  139. plt.subplot(2, 5, 5)
  140. plt.gca().set_title('ch0 lower right')
  141. plt.hist(a4.flatten(), bins = 50, range = ( np.percentile(a4.flatten(), 5)-10, np.percentile(a4.flatten(), 95)+10 ))
  142. plt.subplot(2, 5, 6)
  143. plt.gca().set_title('ch1 total')
  144. plt.hist(bcat, bins = 50, range = ( np.percentile(bcat, 5)-10, np.percentile(bcat, 95)+10 ))
  145. plt.subplot(2, 5, 7)
  146. plt.gca().set_title('ch1 upper left')
  147. plt.hist(b1.flatten(), bins = 50, range = ( np.percentile(b1.flatten(), 5)-10, np.percentile(b1.flatten(), 95)+10 ))
  148. plt.subplot(2, 5, 8)
  149. plt.gca().set_title('ch1 lower left')
  150. plt.hist(b2.flatten(), bins = 50, range = ( np.percentile(b2.flatten(), 5)-10, np.percentile(b2.flatten(), 95)+10 ))
  151. plt.subplot(2, 5, 9)
  152. plt.gca().set_title('ch1 upper right')
  153. plt.hist(b3.flatten(), bins = 50, range = ( np.percentile(b3.flatten(), 5)-10, np.percentile(b3.flatten(), 95)+10 ))
  154. plt.subplot(2, 5, 10)
  155. plt.gca().set_title('ch1 lower right')
  156. plt.hist(b4.flatten(), bins = 50, range = ( np.percentile(b4.flatten(), 5)-10, np.percentile(b4.flatten(), 95)+10 ))
  157. plt.show()
  158. # %%
  159. #read tifs, perform background subtraction, concatenate tifs
  160. #first tif
  161. read_img = ScanImageTiffReader(selection_tuple[0])
  162. concatenated = np.reshape(read_img.data(), (int(read_img.data().shape[0]/2),2,512,512) ) #ScanImageTiffReader reads all images as (interleaved_frames, x, y). Reshape to (frames, ch, x, y)
  163. #By default ScanImage performs Offset Correction using measured PMT voltages. See https://docs.scanimage.org/Configuration/PMT/index.html#pmt-calibration
  164. #This correction is reversed by adding the ‘channelOffsets’ value from the .tif metadata to each image pixel
  165. #Background subtraction is then accomplished using objective lens clipped pixels as described above
  166. SI_Ch2_Offset = int((read_img.metadata()).splitlines()[36][30:-1].split()[1]) #read ScanImage .tif metadata ‘channelOffsets’
  167. SI_Ch3_Offset = int((read_img.metadata()).splitlines()[36][30:-1].split()[2])
  168. concatenated[:,0,:,:] = concatenated[:,0,:,:] + SI_Ch2_Offset
  169. concatenated[:,1,:,:] = concatenated[:,1,:,:] + SI_Ch3_Offset
  170. measureTriangles(concatenated)
  171. concatenated[:,0,:,:] = concatenated[:,0,:,:] - int(np.median(acat))
  172. concatenated[:,1,:,:] = concatenated[:,1,:,:] - int(np.median(bcat))
  173. measureTriangles(concatenated)
  174. #subsequent tifs
  175. for i in range(1, len(selection_tuple)):
  176. read_img = ScanImageTiffReader(selection_tuple[i])
  177. reshaped = np.reshape(read_img.data(), (int(read_img.data().shape[0]/2),2,512,512))
  178. SI_Ch2_Offset = int((read_img.metadata()).splitlines()[36][30:-1].split()[1])
  179. SI_Ch3_Offset = int((read_img.metadata()).splitlines()[36][30:-1].split()[2])
  180. #subsequent tifs undo scanimage auto offset subtraction
  181. reshaped[:,0,:,:] = reshaped[:,0,:,:] + SI_Ch2_Offset
  182. reshaped[:,1,:,:] = reshaped[:,1,:,:] + SI_Ch3_Offset
  183. measureTriangles(reshaped)
  184. #subsequent tifs subtract clipped pixels measured offsets
  185. reshaped[:,0,:,:] = reshaped[:,0,:,:] - int(np.median(acat))
  186. reshaped[:,1,:,:] = reshaped[:,1,:,:] - int(np.median(bcat))
  187. measureTriangles(reshaped)
  188. concatenated = np.concatenate((concatenated, reshaped))
  189. drawTriangles(concatenated)
  190. read_img.close() # Need to close the ScanImageTiffReader process
  191. os.chdir(newdir)
  192. text_file = open("raw_concat_inputs.txt", "w")
  193. text_file.write('\n'.join(map(str, selection_tuple)))
  194. text_file.close()
  195. io.imsave('raw_concat.tif', concatenated)
  196. # %%
  197. #set Suite2p parameters. See https://suite2p.readthedocs.io/en/latest/settings.html
  198. ops = suite2p.default_ops()
  199. ops['fs'] = 1.07
  200. ops['nchannels'] = 2
  201. ops['reg_tif']=1 #see https://github.com/MouseLand/suite2p/issues/89
  202. ops['reg_tif_chan2'] = True
  203. ops['two_step_registration'] = True
  204. ops['keep_movie_raw'] = True
  205. ops['max_overlap'] = 1
  206. ops['roidetect'] = False
  207. print(ops)
  208. db = {
  209. 'data_path': [os.getcwd()],
  210. }
  211. print(db)
  212. output_ops = suite2p.run_s2p(ops=ops, db=db) #run
  213. output_ops_file = np.load(Path(output_ops['save_path']).joinpath('ops.npy'), allow_pickle=True).item()
  214. output_ops_file.keys() == output_ops.keys()
  215. # %%
  216. #Concatenate outputs of Suite2p registration
  217. def read_tiff(path):
  218. """
  219. path - Path to the multipage-tiff file
  220. """
  221. img = Image.open(path) #from PIL
  222. images = []
  223. for i in range(img.n_frames):
  224. img.seek(i)
  225. images.append(np.array(img, dtype=np.int16))
  226. return np.array(images)
  227. os.chdir(newdir + '\\suite2p\\plane0\\reg_tif')
  228. regtif = sorted(os.listdir(), key=os.path.getmtime)
  229. regtif_concat = read_tiff(regtif[0])
  230. for i in range(1, len(regtif)):
  231. regtif_concat = np.concatenate((regtif_concat, read_tiff(regtif[i])))
  232. os.chdir(newdir)
  233. io.imsave('reg_concat_ch0.tif', regtif_concat)
  234. os.chdir(newdir + '\\suite2p\\plane0\\reg_tif_chan2')
  235. regtif_chan2 = sorted(os.listdir(), key=os.path.getmtime) #naming ch1 as `chan2` in code follwowing Suite2p convention. Output name as ch1 (ie FRET = ch1/ch0)
  236. regtif_chan2_concat = read_tiff(regtif_chan2[0])
  237. for i in range(1, len(regtif_chan2)):
  238. regtif_chan2_concat = np.concatenate((regtif_chan2_concat, read_tiff(regtif_chan2[i])))
  239. os.chdir(newdir)
  240. io.imsave('reg_concat_ch1.tif', regtif_chan2_concat)
  241. #save an avg project across slices and channels
  242. fixed_sliceAvg_ch0 = np.average(regtif_concat, axis = 0).astype(np.float32)
  243. fixed_sliceAvg_ch1 = np.average(regtif_chan2_concat, axis = 0).astype(np.float32)
  244. fixed_sliceAvg_chAvg = ( (fixed_sliceAvg_ch0 + fixed_sliceAvg_ch1)/2 )
  245. io.imsave('reg_concat_chAvg_sliceAvg.tif',fixed_sliceAvg_chAvg )
  246. # %%
  247. #remove intermediate Suite2p files
  248. os.remove('raw_concat.tif')
  249. import shutil
  250. shutil.rmtree('suite2p')
  251. os.chdir("..") #move up one directory to folder containing input .tifs
  252. #remove input files
  253. for i in selection_tuple:
  254. if i in os.listdir(".."):
  255. os.remove(i)

ProcessRaw.ipynb at commit cd53dc9, no license · at the source

Overview

Authors: Zelun Wang1,2,3, Christopher Zhao1, Shelly Xu1, Minglei Zhao1, Sean McCracken1,2, Rajendra S Apte1,4,5, Philip R Williams1,6,7
  1. John F. Hardesty, MD, Department of Ophthalmology and Visual Sciences, Washington University School of Medicine, St. Louis, MO USA
  2. Graduate Program in Neuroscience, Washington University School of Medicine, St. Louis, MO USA
  3. Medical Scientist Training Program, Washington University School of Medicine, St. Louis, MO USA
  4. Department of Developmental Biology, Washington University in St. Louis School of Medicine, St. Louis, MO USA
  5. Department of Medicine, Washington University in St. Louis School of Medicine, St. Louis, MO USA
  6. Department of Neuroscience, Washington University School of Medicine, St. Louis, MO USA
  7. Hope Center for Neurological Disorders, Washington University School of Medicine, St. Louis, MO USA
Institutions: Washington University in St. Louis (United States); Hope Center for Neurological Disorders (United States)
Journal: Nature communications, volume 17, issue 1, article 4531
Dates: received 26 February 2025; accepted 10 March 2026; published online 27 March 2026
Type: Research article · Language: English
License: CC BY-NC-ND
Identifiers: DOI 10.1038/s41467-026-71106-7 · PMID 41896245 · PMCID PMC13194979 · OpenAlex W7141203511
Open access: gold, a free copy (OpenAlex)
Status: code verified (how the code is found and verified)
Categories: mouse (organism), cellular / molecular (subfield)
Methods: Spectral & time-frequency, Statistics, Preprocessing, fMRI & imaging, Smoothing, state filtering, decompositions, Physiology & signal measures
Keywords: Molecular neuroscience, Stress and resilience
MeSH: Adenosine Triphosphate*, Energy Metabolism*, Retinal Ganglion Cells*, Animals, Axons, Axotomy, Cell Survival, Homeostasis, Male, Mice, Mice, Inbred C57BL, Mitochondria, Neurons, Oxidative Phosphorylation (* major topic)
Topic: Retinal Development and Disorders (Ophthalmology, Medicine), according to OpenAlex
Funding: NEI NIH HHS (R01 EY012543, R01 EY032908, T32 EY013360, P30 EY002687, R01 EY036111, R01 EY035684); Research to Prevent Blindness (RPB) (Young Investigator Award, Unrestricted grant to Department of Ophthalmology); U.S. Department of Health & Human Services | NIH | National Eye Institute (P30 EY002687, T32 EY013360, R01 EY035684, R01 EY012543, R01 EY036111, R01 EY032908); Novartis | Alcon | Alcon Research Institute (ARI) (Young Investigator Award); BrightFocus Foundation (National Glaucoma Award)
Citations: not cited yet (Europe PMC); 102 references in the paper

Abstract

The abstract is not reproduced here: the paper's license (CC BY-NC-ND) does not allow it. Read it in the paper, at the publisher or on Europe PMC.

Repository

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

zelunw/RGC-ATP

License: none: the authors keep all their rights
State: the link answers, verified on 30 September 2026
Evidence: files inventoried
Commit: cd53dc996fb5d3616cabd2a9cdbb3a034cdfd30d, 14 March 2025
Languages: Jupyter (3)
Size: 6 files, 3 scripts
Software Heritage: not archived
Found in: “Code availability”
Holds: README, 3 notebooks
Not found: license file, CITATION.cff, environment file, tests, continuous integration, documentation
Tools: Matplotlib (3 files), NumPy (3 files), scikit-image (3 files), Cellpose (2 files), pandas (1 file), Pillow (1 file), SciPy (1 file), seaborn (1 file), Suite2p (1 file)
Availability: 1 check, the latest on 30 September 2026: the link answers
  • 30 September 2026: the link answers
4 files

Code availability statement

The paper has a code availability statement. Its license (CC BY-NC-ND) does not allow reproducing it here; in short, from what the harvester recognized in it:

Read it in the paper: doi.org/10.1038/s41467-026-71106-7.

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:

  • 1 repository of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
  • 3 scripts, each with its path and the digest of its content;
  • 1 match 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 statement

The paper has a data availability statement. Its license (CC BY-NC-ND) does not allow reproducing it here; in short, from what the harvester recognized in it:

  • it says that the data are available on request

Read it in the paper: doi.org/10.1038/s41467-026-71106-7.

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, 7 authors, 2 keywords, 14 MeSH terms, 5 funders, 99 references.

Cite

This paper

Wang, Z., Zhao, C., Xu, S., Zhao, M., McCracken, S., Apte, R. S., & Williams, P. R. (2026). Energetic diversity in retinal ganglion cells is modulated by neuronal activity and correlates with resilience to degeneration. Nature communications, 17(1), 4531. https://doi.org/10.1038/s41467-026-71106-7

BibTeX

@article{wang2026energetic,
author = {Wang, Zelun and Zhao, Christopher and Xu, Shelly and Zhao, Minglei and McCracken, Sean and Apte, Rajendra S and Williams, Philip R},
title = {{Energetic diversity in retinal ganglion cells is modulated by neuronal activity and correlates with resilience to degeneration}},
journal = {Nature communications},
year = {2026},
month = mar,
volume = {17},
number = {1},
pages = {4531},
publisher = {Nature Publishing Group},
issn = {2041-1723},
doi = {10.1038/s41467-026-71106-7},
url = {https://doi.org/10.1038/s41467-026-71106-7},
pmid = {41896245},
pmcid = {PMC13194979}
}

RIS

TY - JOUR
AU - Wang, Zelun
AU - Zhao, Christopher
AU - Xu, Shelly
AU - Zhao, Minglei
AU - McCracken, Sean
AU - Apte, Rajendra S
AU - Williams, Philip R
TI - Energetic diversity in retinal ganglion cells is modulated by neuronal activity and correlates with resilience to degeneration
T2 - Nature communications
J2 - Nat Commun
PY - 2026
DA - 2026/03/27
VL - 17
IS - 1
SP - 4531
SN - 2041-1723
PB - Nature Publishing Group
DO - 10.1038/s41467-026-71106-7
UR - https://doi.org/10.1038/s41467-026-71106-7
LA - en
ER -

CSL-JSON

{
"id": "10.1038/s41467-026-71106-7",
"type": "article-journal",
"title": "Energetic diversity in retinal ganglion cells is modulated by neuronal activity and correlates with resilience to degeneration",
"container-title": "Nature communications",
"author": [
{
"family": "Wang",
"given": "Zelun"
},
{
"family": "Zhao",
"given": "Christopher"
},
{
"family": "Xu",
"given": "Shelly"
},
{
"family": "Zhao",
"given": "Minglei"
},
{
"family": "McCracken",
"given": "Sean"
},
{
"family": "Apte",
"given": "Rajendra S"
},
{
"family": "Williams",
"given": "Philip R"
}
],
"container-title-short": "Nat Commun",
"volume": "17",
"issue": "1",
"page": "4531",
"DOI": "10.1038/s41467-026-71106-7",
"PMID": "41896245",
"PMCID": "PMC13194979",
"ISSN": "2041-1723",
"publisher": "Nature Publishing Group",
"URL": "https://doi.org/10.1038/s41467-026-71106-7",
"language": "en",
"issued": {
"date-parts": [
[
2026,
3,
27
]
]
}
}

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.1111/jnc.70212 [code]
Presynaptic ATP Decreases During Physiological-Like Activity in Neurons Tuned for High-Frequency Transmission.
Journal: Journal of neurochemistry
In common: NumPy, mouse, cellular / molecular, 10 references
[2] doi:10.1073/pnas.2602529123 [code]
Inorganic phosphate and the rapid mobilization of metabolic energy in neurons.
Journal: Proceedings of the National Academy of Sciences of the United States of America
In common: mouse, 10 references
[3] doi:10.1002/imt2.70163 [code]
Spatial multi-omics unveils sphingolipid metabolic reprogramming within the retinal pathological niche.
Journal: iMeta
In common: scikit-image, Pillow, seaborn, 4 other tools, mouse, cellular / molecular, 5 references
[4] doi:10.1038/s42003-026-10646-6 [code]
Energy paradox in REM sleep: balancing supply and consumption in brain metabolism.
Journal: Communications biology
In common: seaborn, SciPy, Matplotlib, 1 other tool, mouse, cellular / molecular, 7 references
[5] doi:10.1038/s42255-026-01451-w [code]
Mitochondrial Ca<sup>2+</sup> efflux controls neuronal metabolism and long-term memory across species.
Journal: Nature metabolism
In common: SciPy, Matplotlib, NumPy, mouse, cellular / molecular, 7 references
[6] doi:10.1126/sciadv.abp8701 [code]
Ca<sup>2+</sup> channels couple spiking to mitochondrial metabolism in substantia nigra dopaminergic neurons.
Journal: Science advances
In common: pandas, SciPy, Matplotlib, 1 other tool, cellular / molecular, 7 references
[7] doi:10.1016/j.isci.2025.113373 [code]
Developmental trajectories predict dendritic remodeling after injury.
Journal: iScience
In common: scikit-image, pandas, SciPy, 2 other tools, 6 references
[8] doi:10.1371/journal.pcbi.1013148 [code]
Unveiling the role of local metabolic constraints on the structure and activity of spiking neural networks.
Journal: PLoS computational biology
In common: Matplotlib, NumPy, 7 references
[9] doi:10.1113/jp287643 [code]
Photoreceptor degeneration has heterogeneous effects on functional retinal ganglion cell types.
Journal: The Journal of physiology
In common: seaborn, pandas, SciPy, 2 other tools, mouse, cellular / molecular, 5 references
[10] doi:10.1016/j.isci.2022.105830 [code]
Serotonergic neurons control cortical neuronal intracellular energy dynamics by modulating astrocyte-neuron lactate shuttle.
Journal: iScience
In common: cellular / molecular, 7 references

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.

Add the badge to the code's README

OSCR: the badge of this paper

If you are an author or a maintainer of this paper's code, you can add this badge. It says what OSCR knows of the paper (its code, its validated tracing map) and links the code to this page. Paste one of these snippets under the README's title. Keep the two marks around it, so that the badge can be replaced in place and is never added twice. OSCR changes nothing in your repository.

Markdown
<!-- oscr-badge:start -->
[![OSCR](https://openscicode.org/badge/doi/10.1038/s41467-026-71106-7.svg)](https://openscicode.org/badge/doi/10.1038/s41467-026-71106-7)
<!-- oscr-badge:end -->
reStructuredText
.. oscr-badge:start

.. image:: https://openscicode.org/badge/doi/10.1038/s41467-026-71106-7.svg
   :target: https://openscicode.org/badge/doi/10.1038/s41467-026-71106-7
   :alt: OSCR

.. oscr-badge:end
HTML
<!-- oscr-badge:start -->
<a href="https://openscicode.org/badge/doi/10.1038/s41467-026-71106-7"><img src="https://openscicode.org/badge/doi/10.1038/s41467-026-71106-7.svg" alt="OSCR"></a>
<!-- oscr-badge:end -->

On GitHub, open the README, choose Edit (the pencil), paste the snippet under the title, then "Commit changes".

If you choose to, you can have the badge kept up to date for you, with oscr badge --write from the command line or with the GitHub Action in your repository's workflows. Every other form and option (a card, AsciiDoc, LaTeX, shields.io) is on the badge 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: code errors and mismatches between the code and the paper about this paper and its code, from readers and its authors, beside the paper and its tracing map.

Report a mismatch between the code and the paper · Report a code error (signed in)

Reproductions: reports from readers who ran the authors' code and did not get the paper's result, what they ran, with which environment, commit and data.

Report a reproduction failure (signed in)

Versions of its code: the releases of its code tied to a version of this paper (the preprint, the accepted manuscript, the version of record…), each with the tracing map versioned with it.

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