OSCR

Effect of Caffeine on Cell Death, Oxidative Stress, and Microglial Morphology in a Ferret Organotypic Brain Slice Model of Hypoxia-Ischemia.

Code ↔ Paper

3 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 3 matches
  1. [1] § 2. Materials and Methods › 2.7. Automated Nuclei Counting ↔ analysis/cell_counter.py, lines 123–161 · score 0.89 · min_sigma, num_sigma, threshold_rel, max_sigma, relative intensity, overlap
  2. [2] § 2. Materials and Methods › 2.7. Automated Nuclei Counting ↔ train_rdf_model.py, lines 4–59 · score 0.63 · ideal radius, weighted intensity, trained, filtered, perimeter, sigma
  3. [3] § 2. Materials and Methods › 2.7. Automated Nuclei Counting ↔ fit_pca.py, lines 132–223 · score 0.60 · ideal radius, weighted intensity, fit, perimeter, sigma, eccentricity

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 · 285 lines · 9.4 KB · MIT · 1 match

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. """Identifies cells in a preprocessed microscopy image"""
  4. from math import sqrt
  5. # from typing import Any, Optional
  6. import warnings
  7. import numpy as np
  8. import matplotlib.pyplot as plt
  9. from scipy.signal import find_peaks
  10. # from skimage.io import imread, imshow
  11. # from skimage.color import rgb2gray, label2rgb
  12. from skimage.feature import blob_dog, blob_log # , blob_doh
  13. # from skimage.morphology import erosion, dilation, opening, closing
  14. # from skimage.measure import label, regionprops
  15. from .utils import pixels_in_radius, calc_weighted_intensity
  16. from utils.models import Cell
  17. def apply_blob_log_REDUNDANT(img: np.ndarray, **kwargs) -> np.ndarray:
  18. """Blob detection using Laplacian of Gaussian (log)
  19. Arguments:
  20. img: cleaned and preprocesed image. Should be masked to reduce false positives
  21. Kwargs:
  22. min_sigma: float, minimum sigma value, default = 2
  23. max_sigma: float, maximum sigma value, default = 8
  24. num_sigma: int, number of sigmas to test = 20
  25. threshold: float, absolute threshold for cell detection, default = 0.1
  26. overlap: float, amount cells can overlap, default = 0.5,
  27. Returns:
  28. (n x 3) array with n rows of (i, j, sigma) representing the coordinates of each
  29. blob and the gaussian value of sigma that detected the blob
  30. """
  31. params = {
  32. "min_sigma": 2,
  33. "max_sigma": 8,
  34. "num_sigma": 20,
  35. "threshold": 0.1,
  36. "threshold_rel": 0,
  37. "overlap": 0.6,
  38. }
  39. params.update(kwargs)
  40. blobs_log = blob_log(
  41. img,
  42. **params,
  43. )
  44. # blobs_log[:, 2] *= sqrt(2)
  45. if False:
  46. plt.close("all")
  47. fig = plt.figure()
  48. ax = fig.gca()
  49. ax.imshow(img, origin="lower", cmap="gray")
  50. for i in range(blobs_log.shape[0]):
  51. [y, x] = blobs_log[i, :2]
  52. r = blobs_log[i, 2]
  53. c = plt.Circle((x, y), r, color="r", linewidth=2, fill=False, alpha=0.6)
  54. ax.add_patch(c)
  55. plt.show()
  56. plt.close(fig)
  57. return blobs_log
  58. def apply_blob_dog(img: np.ndarray) -> np.ndarray:
  59. """Blob detection using Difference of Gaussian (dog)
  60. More computationally efficient than Laplacian of Gaussian
  61. Arguments:
  62. img: cleaned and preprocesed image. Should be masked to reduce false positives
  63. Returns:
  64. (n x 3) array with n rows of (x, y, sigma) representing the coordinates of each
  65. blob and the gaussian value of sigma that detected the blob
  66. """
  67. blobs_dog = blob_dog(img, max_sigma=30, threshold=0.1)
  68. blobs_dog[:, 2] = blobs_dog[:, 2] * sqrt(2)
  69. return blobs_dog
  70. def find_blob_params(
  71. img: np.ndarray, blobs_info: np.ndarray
  72. ) -> tuple[np.ndarray, np.ndarray, np.ndarray]:
  73. """Finds pixels
  74. Args:
  75. img: image
  76. blobs_info: (n x 3) array of [i, j, sigma/radius]
  77. Returns:
  78. average intensity,
  79. weighted intensity,
  80. total intensity,
  81. """
  82. n, _ = np.shape(blobs_info)
  83. avg_intensity = np.zeros(n, dtype=np.float64)
  84. weighted_intensity = np.zeros(n, dtype=np.float64)
  85. total_intensity = np.zeros(n, dtype=np.float64)
  86. for i in range(n):
  87. center = (blobs_info[i, 0], blobs_info[i, 1])
  88. intensities, dists = pixels_in_radius(img, center, blobs_info[i, 2])
  89. if len(intensities) > 0:
  90. avg_intensity[i] = np.sum(intensities)
  91. weighted_intensity[i] = calc_weighted_intensity(intensities, dists)
  92. total_intensity[i] = np.mean(intensities)
  93. return (avg_intensity, weighted_intensity, total_intensity)
  94. def optimize_blob_kwargs(meta: dict, max_value: float) -> dict:
  95. """Optimize blob parameters"""
  96. x_px_width, y_px_width, _ = meta["axes_calibration"]
  97. x_px_width = float(x_px_width)
  98. y_px_width = float(y_px_width)
  99. if abs(x_px_width - y_px_width) > 1e-8:
  100. print("Confirm axes_calibration is stored as (x,y,z), not (i,j,k)")
  101. warnings.warn(
  102. f"different x, y dimensions ({x_px_width}, {y_px_width})",
  103. category=UserWarning,
  104. )
  105. px_width = np.mean([x_px_width, y_px_width])
  106. if abs(px_width - 0.8631674575031096) > 1e-3:
  107. warnings.warn(
  108. "Blob kwargs are only optimized for a pixel width of ~0.86 micrometers",
  109. category=UserWarning,
  110. )
  111. # All of these values are chosen semi-arbitrarily and can be adjusted.
  112. # The scaling factors are intended to convert pixel length (um) back to some number
  113. # of pixels.
  114. min_sigma_ = 2.2 # microns
  115. max_sigma_ = 4.2 # microns
  116. n_step_ = round((max_sigma_ - min_sigma_) / 0.1) + 1
  117. params = { # expected pixel edge length is 0.8631674575031096 micrometers
  118. "min_sigma": float(min_sigma_ / px_width), # 1.5 (init: 2 @ 0.86 -> 2.3)
  119. "max_sigma": float(max_sigma_ / px_width), # 4.5 (init: 8 @ 0.86 -> 9.3)
  120. # "min_sigma": float(2 * px_width), # 2 @ 0.86 -> 2.3
  121. # "max_sigma": float(8 * px_width), # 8 @ 0.86 -> 9.3
  122. # "min_sigma": float(2.1 * px_width), # 2 @ 0.86 -> 2.3
  123. # "max_sigma": float(9.3 * px_width), # 8 @ 0.86 -> 9.3
  124. "num_sigma": n_step_, # previously 25
  125. "threshold": 0.005 * max_value, # absolute intensity a peak must exceed
  126. "threshold_rel": 0, # relative intensity, between 0 and 1
  127. "overlap": 0.7, # 0.6 @ 0.86 -> 0.695
  128. }
  129. return params
  130. def filter_cells(cells_found: np.ndarray, criteria: np.ndarray) -> np.ndarray:
  131. """Filter cells
  132. Args:
  133. cells_found: array of (n_cells x 3)
  134. criteria: measure by which to filter cells
  135. Return:
  136. indices of cells to include
  137. """
  138. n_cells, _ = np.shape(cells_found)
  139. hist, bins = np.histogram(criteria, bins=len(np.unique(criteria)))
  140. x_vals = bins[:-1]
  141. peaks, info = find_peaks(hist)
  142. if len(peaks) == 0:
  143. thresh = 0.0
  144. elif len(peaks) == 1:
  145. thresh = float(peaks[0] / 2)
  146. else:
  147. pk0 = int(peaks[0])
  148. pk1 = int(peaks[1])
  149. thresh = x_vals[np.argmin(hist[pk0:pk1+1]) + pk0]
  150. indices = np.arange(n_cells, dtype=np.int64)[criteria > thresh]
  151. return indices
  152. def find_cells(
  153. img: np.ndarray, img_norm: np.ndarray, meta: dict, include_all: bool = False
  154. ) -> list | tuple[list, dict]:
  155. """Finds cells within preprocessed image
  156. Parameters:
  157. ----------
  158. img: preprocessed image
  159. meta: dict of meta info for image
  160. Returns:
  161. -------
  162. list of Cell models
  163. Optionally, returns this dict:
  164. - all_cells: np.ndarray (n x 3) of [i, j, sigma] for every blob detected
  165. - all_avg_intensities: np.ndarray (n,) of average intensity within sigma for each
  166. blob
  167. - all_weighted_intensities: np.ndarray (n,) of weighted average intensity of each
  168. blob
  169. - all_total_intensities: np.ndarray (n,) of total intensity within sigma for each
  170. blob
  171. - acceptable_indices: np.ndarray (m,) of cell indices deemed true positives
  172. - cells: np.ndarray (m x 3) of [i, j, sigma] for "acceptable" blobs
  173. - avg_intensities: np.ndarray (m,) of average intensity within sigma for
  174. "acceptable" blobs
  175. - weighted_intensities: np.ndarray (m,) of weighted average intensity of
  176. "acceptable" blobs
  177. - total_intensities: np.ndarray (m,) of total intensity within sigma for
  178. "acceptable" blobs
  179. """
  180. # _compare_blob_methods(masked_img, mask)
  181. px_height, px_width, _ = meta["axes_calibration"]
  182. px_height = float(px_height)
  183. px_width = float(px_width)
  184. blob_kwargs = optimize_blob_kwargs(meta, np.max(img.copy().flatten()))
  185. cells_found = blob_log(img, **blob_kwargs)
  186. avg_intensity, weighted_intensity, total_intensity = find_blob_params(
  187. img_norm, cells_found
  188. )
  189. # filter cells to remove some false positives
  190. acceptable_indices = filter_cells(cells_found, total_intensity)
  191. cells = []
  192. for i, idx in enumerate(acceptable_indices):
  193. cells.append(
  194. Cell(
  195. uid=i,
  196. center=tuple(cells_found[idx, :2].astype(np.int64).tolist()),
  197. sigma_px=float(cells_found[idx, 2]),
  198. avg_intensity=float(avg_intensity[idx]),
  199. weighted_intensity=float(weighted_intensity[idx]),
  200. total_intensity=float(total_intensity[idx]),
  201. pixel_height=px_height,
  202. pixel_width=px_width,
  203. image_dims=tuple(meta["voxel_count"][:2]),
  204. )
  205. )
  206. # if False:
  207. # fig, axes = plot_blobs(
  208. # (img + 50),
  209. # cells_found[acceptable_indices, :],
  210. # side_by_side=True,
  211. # show=False,
  212. # )
  213. # radii = cells_found[:, -1].copy().flatten()
  214. # fig1, ax1 = plot_cell_histogram(
  215. # radii, avg_intensity, weighted_intensity, total_intensity, show=False
  216. # )
  217. # plt.show()
  218. # plt.close()
  219. if include_all:
  220. d = {
  221. "all_cells": cells_found.copy(),
  222. "all_avg_intensities": avg_intensity.copy(),
  223. "all_weighted_intensities": weighted_intensity.copy(),
  224. "all_total_intensities": total_intensity.copy(),
  225. "acceptable_indices": acceptable_indices.copy(),
  226. "cells": np.array(cells_found[acceptable_indices, :]),
  227. "avg_intensities": np.array(avg_intensity[acceptable_indices]),
  228. "weighted_intensities": np.array(weighted_intensity[acceptable_indices]),
  229. "total_intensities": np.array(total_intensity[acceptable_indices]),
  230. }
  231. return (cells, d)
  232. return cells

cell_counter.py at commit 72057f8, under MIT · at the source

Overview

Authors: Olivia C. Brandon1, Kylie A. Corry1, Zheyu Ruby Jin2, Kate F. DiNucci1, Matthew J. Magoon3, Nels Schimek2, Daniel H. Moralejo1, Sandra E. Juul1,4, Patrick M. Boyle3, Elizabeth A. Nance2,4, Thomas R. Wood1,4, Sarah E. Kolnik1
  1. Division of Neonatology, University of Washington, Seattle, WA 98195, USA; (O.C.B.); (K.A.C.); (K.F.D.); (D.H.M.); (S.E.J.); (T.R.W.)
  2. Department of Chemical Engineering, University of Washington, Seattle, WA 98195, USA; (Z.R.J.); (N.S.); (E.A.N.)
  3. Department of Bioengineering, University of Washington, Seattle, WA 98195, USA; (M.J.M.); (P.M.B.)
  4. Institute on Human Development and Disability, University of Washington, Seattle, WA 98195, USA
Institutions: University of Washington (United States)
Journal: NeuroSci, volume 7, issue 4, article 79
Dates: received 31 May 2026; accepted 7 July 2026; published online 10 July 2026
Type: Research article · Language: English
License: CC BY
Identifiers: DOI 10.3390/neurosci7040079 · PMID 42496326 · PMCID PMC13398045 · OpenAlex W7167929975
Open access: gold, a free copy (OpenAlex)
Status: code verified
Categories: other (organism), cellular / molecular (subfield)
Methods: Smoothing, state filtering, decompositions, Machine learning, Statistics, fMRI & imaging
Keywords: caffeine, neonatal, hypoxia–ischemia, organotypic slice culture, ferret
Topic: Adenosine and Purinergic Signaling (Physiology, Biochemistry, Genetics and Molecular Biology), according to OpenAlex
Citations: not cited yet (Europe PMC); 52 references in the paper

Abstract

Brain injury after hypoxia–ischemia (HI) is the leading cause of morbidity and mortality in term and near-term neonates worldwide. The ferret is a promising translational model to study HI due to its gyrified brain and white-to-gray matter ratio that more closely resembles humans compared to rodents. Caffeine, an adenosine A2A receptor (A2AR) antagonist, shows neuroprotective potential after HI, but its effects have not been fully characterized. We sought to evaluate caffeine’s effect on neuronal cell death, cytotoxicity, and inflammatory and oxidative stress markers in a term-equivalent ferret organotypic brain slice model of HI. Slices were cultured for 72 h, exposed to two hours of oxygen–glucose deprivation (OGD), and randomized to OGD alone, OGD with caffeine (20 or 50 mg/L), or OGD with caffeine and an A2AR agonist. Healthy slices served as controls. Outcomes included global cell death, regional cell death, microglial morphology, and expression of inflammatory and oxidative stress genes (46–48 slices/group for cell death assays and 18 slices/group for imaging, balanced by sex). Caffeine 50 mg/L significantly reduced global cell death compared to OGD (p = 0.02), and this effect persisted despite co-administration of an A2AR agonist (p = 0.01), suggesting that protection was not primarily mediated through A2AR signaling. Caffeine also did not change regional pyknotic nuclei counts (p > 0.05). Caffeine altered microglial morphology, increasing the proportion of microglia with features characteristic of control conditions. OGD significantly increased expression of inflammatory and oxidative stress-related genes (p < 0.05) compared with control slices, whereas caffeine did not significantly alter gene expression. In summary, caffeine partially reversed global cell death after OGD and altered microglial morphology. Larger, higher-powered studies are needed to further investigate caffeine’s effects on neonatal HI.

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

Repository

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

MattM719/NeuroCellCounter

License: MIT
State: the link answers, verified on 27 September 2026
Evidence: files inventoried
Commit: 72057f8233c9bb728db757530b356ca192be6b84, 6 May 2026
Languages: Python (40)
Size: 45 files, 40 scripts
Software Heritage: not archived
Found in: “Data Availability Statement”
Holds: README, license file, environment (requirements.txt)
Not found: CITATION.cff, tests, continuous integration, documentation
Tools: NumPy (31 files), Matplotlib (17 files), scikit-image (12 files), pandas (9 files), scikit-learn (7 files), SciPy (6 files), ImageJ / Fiji (1 file), Pillow (1 file), SHAP (1 file), xarray (1 file)
Availability: 1 check, the latest on 27 September 2026: the link answers
  • 27 September 2026: the link answers
42 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:

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

The data described in the manuscript and/or analyzed during the current study will be made available upon reasonable request from the corresponding author. The publicly available code for nuclei counts is available at https://github.com/MattM719/NeuroCellCounter. Accessed on 1 June 2026.

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, 27 September 2026: the first record

Recorded: type, language, journal, volume, issue, pages, dates, 12 authors, 5 keywords, 1 funder, 49 references.

Cite

This paper

Brandon, O. C., Corry, K. A., Jin, Z. R., DiNucci, K. F., Magoon, M. J., Schimek, N., Moralejo, D. H., Juul, S. E., Boyle, P. M., Nance, E. A., Wood, T. R., & Kolnik, S. E. (2026). Effect of Caffeine on Cell Death, Oxidative Stress, and Microglial Morphology in a Ferret Organotypic Brain Slice Model of Hypoxia-Ischemia. NeuroSci, 7(4), 79. https://doi.org/10.3390/neurosci7040079

BibTeX

@article{brandon2026effect,
author = {Brandon, Olivia C. and Corry, Kylie A. and Jin, Zheyu Ruby and DiNucci, Kate F. and Magoon, Matthew J. and Schimek, Nels and Moralejo, Daniel H. and Juul, Sandra E. and Boyle, Patrick M. and Nance, Elizabeth A. and Wood, Thomas R. and Kolnik, Sarah E.},
title = {{Effect of Caffeine on Cell Death, Oxidative Stress, and Microglial Morphology in a Ferret Organotypic Brain Slice Model of Hypoxia-Ischemia}},
journal = {NeuroSci},
year = {2026},
month = jul,
volume = {7},
number = {4},
pages = {79},
publisher = {Multidisciplinary Digital Publishing Institute (MDPI)},
issn = {2673-4087},
doi = {10.3390/neurosci7040079},
url = {https://doi.org/10.3390/neurosci7040079},
pmid = {42496326},
pmcid = {PMC13398045}
}

RIS

TY - JOUR
AU - Brandon, Olivia C.
AU - Corry, Kylie A.
AU - Jin, Zheyu Ruby
AU - DiNucci, Kate F.
AU - Magoon, Matthew J.
AU - Schimek, Nels
AU - Moralejo, Daniel H.
AU - Juul, Sandra E.
AU - Boyle, Patrick M.
AU - Nance, Elizabeth A.
AU - Wood, Thomas R.
AU - Kolnik, Sarah E.
TI - Effect of Caffeine on Cell Death, Oxidative Stress, and Microglial Morphology in a Ferret Organotypic Brain Slice Model of Hypoxia-Ischemia
T2 - NeuroSci
J2 - NeuroSci
PY - 2026
DA - 2026/07/10
VL - 7
IS - 4
SP - 79
SN - 2673-4087
PB - Multidisciplinary Digital Publishing Institute (MDPI)
DO - 10.3390/neurosci7040079
UR - https://doi.org/10.3390/neurosci7040079
LA - en
ER -

CSL-JSON

{
"id": "10.3390/neurosci7040079",
"type": "article-journal",
"title": "Effect of Caffeine on Cell Death, Oxidative Stress, and Microglial Morphology in a Ferret Organotypic Brain Slice Model of Hypoxia-Ischemia",
"container-title": "NeuroSci",
"author": [
{
"family": "Brandon",
"given": "Olivia C."
},
{
"family": "Corry",
"given": "Kylie A."
},
{
"family": "Jin",
"given": "Zheyu Ruby"
},
{
"family": "DiNucci",
"given": "Kate F."
},
{
"family": "Magoon",
"given": "Matthew J."
},
{
"family": "Schimek",
"given": "Nels"
},
{
"family": "Moralejo",
"given": "Daniel H."
},
{
"family": "Juul",
"given": "Sandra E."
},
{
"family": "Boyle",
"given": "Patrick M."
},
{
"family": "Nance",
"given": "Elizabeth A."
},
{
"family": "Wood",
"given": "Thomas R."
},
{
"family": "Kolnik",
"given": "Sarah E."
}
],
"container-title-short": "NeuroSci",
"volume": "7",
"issue": "4",
"page": "79",
"DOI": "10.3390/neurosci7040079",
"PMID": "42496326",
"PMCID": "PMC13398045",
"ISSN": "2673-4087",
"publisher": "Multidisciplinary Digital Publishing Institute (MDPI)",
"URL": "https://doi.org/10.3390/neurosci7040079",
"language": "en",
"issued": {
"date-parts": [
[
2026,
7,
10
]
]
}
}

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.1038/s41467-026-72057-9 [code]
Sex-specific behavioral feedback modulates sensorimotor processing and drives flexible social behavior.
Journal: Nature communications
In common: xarray, scikit-image, Pillow, 5 other tools, 1 reference
[2] doi:10.7554/elife.107635 [code]
Stable excitatory-inhibitory synapse balance despite dynamic turnover.
Journal: eLife
In common: ImageJ / Fiji, scikit-image, Pillow, 5 other tools, cellular / molecular
[3] doi:10.7554/elife.110074 [code]
Disentangling cephalopod chromatophores motor units with computer vision.
Journal: eLife
In common: xarray, scikit-image, Pillow, 5 other tools, other
[4] doi:10.1038/s42003-026-10957-8 [code]
Brain defence by the extracellular matrix protein Cochlin.
Journal: Communications biology
In common: SHAP, scikit-image, Pillow, 5 other tools, cellular / molecular
[5] doi:10.1038/s41467-026-76098-y [code]
A single computational objective can produce specialization of streams in visual cortex.
Journal: Nature communications
In common: xarray, scikit-image, Pillow, 5 other tools
[6] doi: [code]
Naturalistic behavior and self-generated neural activity predictive of self-correction
Journal: bioRxiv : the preprint server for biology
In common: xarray, scikit-image, Pillow, 5 other tools
[7] doi:10.1038/s41593-026-02232-0 [code]
Entorhinal cortex represents task-relevant remote locations independently of CA1.
Journal: Nature neuroscience
In common: xarray, scikit-image, Pillow, 5 other tools
[8] doi:10.1126/sciadv.aed3650 [code]
Truthful visualizations for mass spectrometry imaging enable high-spatial-resolution interactive &lt;i&gt;m/z&lt;/i&gt; mapping and exploration.
Journal: Science advances
In common: SHAP, scikit-image, Pillow, 5 other tools
[9] 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: SHAP, scikit-image, Pillow, 5 other tools
[10] doi:10.1016/j.isci.2026.116825 [code]
Social hierarchy shapes behavioral and transcriptional responses to chronic stress and ketamine in male mice.
Journal: iScience
In common: SHAP, 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.