OSCR

Brain-age in ultra-low-field MRI: How well does it work?

Code ↔ Paper

2 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 2 matches
  1. [1] § Materials and Methods › Brain-age models ↔ src/synthba/synthba.py, lines 78–136 · score 0.58 · skull stripped, age predictions, SynthBA, pipeline, brain age, template
  2. [2] § Materials and Methods › Brain-age models › SynthBA ↔ src/synthba/skull_stripping.py, lines 18–140 · score 0.57 · SynthStrip, skull stripping, affine, SynthBA, brain, scan

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 · 225 lines · 8.9 KB · no license · 1 match

  1. import os
  2. import hashlib
  3. import re
  4. from typing import List, Optional, Union, Callable
  5. import pandas as pd
  6. import nibabel as nib
  7. import torch
  8. from torch.utils.data import DataLoader
  9. from monai import transforms
  10. from monai.data import Dataset
  11. from monai.networks.nets.densenet import DenseNet201
  12. from nibabel.nifti1 import Nifti1Image
  13. from nibabel.nifti2 import Nifti2Image
  14. from huggingface_hub import hf_hub_download
  15. from .registration import align
  16. from .skull_stripping import SkullStripping
  17. def _split_nii_name(filename: str) -> tuple:
  18. if filename.endswith('.nii.gz'):
  19. return filename[:-7], '.nii.gz'
  20. return os.path.splitext(filename)
  21. def _sanitize_path_component(component: str) -> str:
  22. component = re.sub(r'[^A-Za-z0-9._-]+', '_', component).strip('._-')
  23. return component or 'path'
  24. def _preprocessed_output_paths(input_list: List[str], preprocess_outdir: str) -> List[str]:
  25. """
  26. Build readable, unique output paths from the shortest distinguishing input suffix.
  27. For example, subject_a/visit_a/t1.nii.gz and subject_b/visit_a/t1.nii.gz
  28. become subject_a-visit_a-t1.nii.gz and subject_b-visit_a-t1.nii.gz.
  29. """
  30. if not input_list:
  31. return []
  32. path_parts = []
  33. for input_path in input_list:
  34. parts = [p for p in os.path.normpath(input_path).split(os.sep) if p]
  35. path_parts.append(parts or [os.path.basename(input_path)])
  36. max_depth = max(len(parts) for parts in path_parts)
  37. output_names = None
  38. for depth in range(1, max_depth + 1):
  39. candidate_names = []
  40. for parts in path_parts:
  41. suffix_parts = parts[-depth:]
  42. stem, suffix = _split_nii_name(suffix_parts[-1])
  43. name_parts = suffix_parts[:-1] + [stem]
  44. candidate_name = '-'.join(_sanitize_path_component(p) for p in name_parts) + suffix
  45. candidate_names.append(candidate_name)
  46. comparable_names = [name.lower() for name in candidate_names]
  47. if len(comparable_names) == len(set(comparable_names)):
  48. output_names = candidate_names
  49. break
  50. if output_names is None:
  51. output_names = []
  52. for index, (input_path, parts) in enumerate(zip(input_list, path_parts)):
  53. stem, suffix = _split_nii_name(parts[-1])
  54. digest = hashlib.sha1(f'{index}:{os.path.abspath(input_path)}'.encode()).hexdigest()[:8]
  55. output_names.append(f'{_sanitize_path_component(stem)}-{digest}{suffix}')
  56. return [os.path.join(preprocess_outdir, name) for name in output_names]
  57. class SynthBA:
  58. """
  59. Predict the brain age from MRI scans of any contrast and resolution using the SynthBA model.
  60. """
  61. def __init__(
  62. self,
  63. device: str,
  64. checkpoint: Optional[str] = None,
  65. model_type: str = 'g',
  66. skull_stripping: Optional[SkullStripping] = None,
  67. align_fn: Optional[Callable] = None,
  68. ):
  69. """
  70. Initialize the SynthBA brain age prediction model.
  71. Args:
  72. device (str): The device to run the model on (e.g., 'cuda' or 'cpu').
  73. checkpoint (Optional[str]): Path to a model checkpoint. If None, downloads from Hugging Face.
  74. model_type (str): Model variant to use ('u' or 'g').
  75. skull_stripping (Optional[SkullStripping]): Custom skull stripping method, if provided.
  76. align_fn (Optional[Callable]): Custom image alignment function, if provided.
  77. """
  78. if checkpoint is None and model_type not in ['u', 'g']:
  79. raise Exception('SynthBA `model_type` should be either `u` or `g`')
  80. self.device = device
  81. self.hf_fname = f'synthba-{model_type}.pth'
  82. if checkpoint is None:
  83. checkpoint = hf_hub_download(repo_id='lemuelpuglisi/synthba', filename=self.hf_fname)
  84. checkpoint = torch.load(checkpoint, map_location=device)
  85. self.model = DenseNet201(3, 1, 1, dropout_prob=0)
  86. self.model.load_state_dict(checkpoint)
  87. self.model = self.model.to(device).eval()
  88. # Preprocessing components
  89. self.skull_stripping = SkullStripping(self.device) if skull_stripping is None else skull_stripping
  90. self.align_fn = align if align_fn is None else align_fn
  91. # Download alignment templates for different MR weightings
  92. self.templates = {
  93. 't1': nib.load(hf_hub_download(repo_id='lemuelpuglisi/synthba', filename='MNI152_T1_1mm_Brain.nii.gz')),
  94. 't2': nib.load(hf_hub_download(repo_id='lemuelpuglisi/synthba', filename='MNI152_T2_1mm_Brain.nii.gz'))
  95. }
  96. # Image transformation pipelines
  97. self.transforms_fn_direct = transforms.Compose([
  98. transforms.EnsureChannelFirst(channel_dim='no_channel'),
  99. transforms.Spacing(pixdim=1.4),
  100. transforms.ResizeWithPadOrCrop(spatial_size=(130, 130, 130), mode='minimum'),
  101. transforms.ScaleIntensity(minv=0, maxv=1),
  102. ])
  103. self.transforms_fn_multiple = transforms.Compose([
  104. transforms.CopyItemsD(keys={'scan_path'}, names=['image']),
  105. transforms.LoadImageD(keys='image'),
  106. transforms.EnsureChannelFirstD(keys='image', channel_dim='no_channel'),
  107. transforms.SpacingD(keys='image', pixdim=1.4),
  108. transforms.ResizeWithPadOrCropD(keys='image', spatial_size=(130, 130, 130), mode='minimum'),
  109. transforms.ScaleIntensityD(keys='image', minv=0, maxv=1),
  110. transforms.Lambda(lambda d: d['image']),
  111. ])
  112. @torch.inference_mode()
  113. def run(
  114. self,
  115. scan: Union[Nifti1Image, Nifti2Image],
  116. preprocess: bool = True,
  117. mr_weighting: str = 't1'
  118. ) -> float:
  119. """
  120. Predict brain age for a single MRI scan.
  121. Args:
  122. scan (Nifti1Image | Nifti2Image): Input MRI scan.
  123. preprocess (bool): Whether to apply skull stripping and alignment.
  124. mr_weighting (str): MRI contrast type ('t1' or 't2') for template alignment.
  125. Returns:
  126. float: Predicted brain age in years.
  127. """
  128. if preprocess:
  129. scan = self._preprocess(scan, mr_weighting)
  130. scan_tensor = self.transforms_fn_direct(scan.get_fdata())
  131. scan_tensor = scan_tensor.unsqueeze(0).to(self.device).float()
  132. return self.model(scan_tensor).view(-1).item() * 100.
  133. @torch.inference_mode()
  134. def run_multiple(
  135. self,
  136. input_list: List[str],
  137. batch_size: int = 1,
  138. preprocess: bool = True,
  139. preprocess_outdir: Optional[str] = None,
  140. mr_weighting: str = 't1',
  141. ) -> pd.DataFrame:
  142. """
  143. Predict brain age for multiple MRI scans in batch.
  144. Args:
  145. input_list (List[str]): List of paths to input MRI scans.
  146. batch_size (int): Number of images processed per batch.
  147. preprocess (bool): Whether to apply skull stripping and alignment.
  148. preprocess_outdir (Optional[str]): Directory to save preprocessed images.
  149. mr_weighting (str): MRI contrast type ('t1' or 't2') for template alignment.
  150. Returns:
  151. pd.DataFrame: DataFrame with columns ['path', 'pred'] containing predicted brain ages.
  152. """
  153. if preprocess and preprocess_outdir is None:
  154. raise Exception('Please specify where to store the preprocessing output with preprocess_outdir')
  155. if preprocess:
  156. prep_input_list = []
  157. output_paths = _preprocessed_output_paths(input_list, preprocess_outdir)
  158. for inp_path, out_path in zip(input_list, output_paths):
  159. self._preprocess(nib.load(inp_path), mr_weighting).to_filename(out_path)
  160. prep_input_list.append(out_path)
  161. input_list = prep_input_list
  162. data = [{'scan_path': p} for p in input_list]
  163. dataset = Dataset(data=data, transform=self.transforms_fn_multiple)
  164. loader = DataLoader(dataset=dataset, batch_size=batch_size)
  165. brain_age_list = []
  166. for _, images in enumerate(loader):
  167. brain_ages = self.model(images.to(self.device))
  168. brain_age_list += list(brain_ages.view(-1).cpu().numpy() * 100.)
  169. data = [{'path': p, 'pred': y} for p, y in zip(input_list, brain_age_list)]
  170. return pd.DataFrame(data)
  171. def _preprocess(self, scan: Union[Nifti1Image, Nifti2Image], mr_weighting: str):
  172. """
  173. Apply skull stripping and spatial alignment to an MRI scan.
  174. Args:
  175. scan (Nifti1Image | Nifti2Image): Input MRI scan.
  176. mr_weighting (str): MRI contrast type ('t1' or 't2') for selecting the reference template.
  177. Returns:
  178. Nifti1Image | Nifti2Image: Preprocessed and aligned MRI scan.
  179. """
  180. if mr_weighting not in self.templates.keys():
  181. raise Exception('Unknown weighting. Please select between: ' + ', '.join(self.templates.keys()))
  182. scan = self.skull_stripping.run(scan)[0]
  183. scan = self.align_fn(scan, self.templates[mr_weighting])
  184. return scan

synthba.py at commit cc6ca27, no license · at the source

Overview

  1. UCL Hawkes Institute, UCL, London, United Kingdom
  2. Department of Neuroimaging, Institute of Psychiatry, Psychology and Neuroscience, King’s College London, London, United Kingdom
  3. University of Catania, Catania, Italy
  4. School of Biomedical Engineering & Imaging Sciences, King’s College London, London, United Kingdom
  5. Department of Neuroradiology, Ruskin Wing, King’s College Hospital NHS Foundation Trust, London, United Kingdom
  6. Martinos Center for Biomedical Imaging, Massachusetts General Hospital and Harvard Medical School, Charlestown, MA, United States
  7. Computer Science and Artificial Intelligence Laboratory, Massachusetts Institute of Technology, Cambridge, MA, United States
  8. Dementia Research Centre, UCL, London, United Kingdom
Journal: Imaging neuroscience (Cambridge, Mass.), volume 4, article IMAG.a.1352
Dates: received 16 January 2026; accepted 24 July 2026; published online 15 September 2026
Type: Research article · Language: English
License: CC BY
Identifiers: DOI 10.1162/imag.a.1352 · PMID 42761967 · PMCID PMC13588316 · OpenAlex W4415353023
Open access: diamond, a free copy (OpenAlex)
Status: code verified
Categories: structural MRI / diffusion (modality), human (organism), methods / tools (subfield)
Methods: Connectivity, Smoothing, state filtering, decompositions, Statistics, Preprocessing, Machine learning
Keywords: low field MRI, brain-age, structural MRI, SynthSR, FreeSurfer, open data
MeSH: Aging*, Brain*, Magnetic Resonance Imaging*, Neuroimaging*, Adult, Aged, Female, Humans, Image Processing, Computer-Assisted, Male, Middle Aged, Reproducibility of Results, Young Adult (* major topic)
Topic: Advanced MRI Techniques and Applications (Radiology, Nuclear Medicine and Imaging, Medicine), according to OpenAlex
Funding: Bill & Melinda Gates Foundation (INV-032788, INV-005774); Wellcome Trust
Citations: not cited yet (Europe PMC); 49 references in the paper

Abstract

Brain-age estimates the brain’s biological age from neuroimaging data and has been proposed as a biomarker of brain health and disease risk. While brain-age estimation commonly uses high-field (HF) magnetic resonance imaging (MRI) (>1.5 T), this is costly and inaccessible, limiting its applicability. Emerging ultra-low-field (ULF) MRI (<0.1 T) is cheaper and more accessible, but its lower resolution may limit the reliability of biomarkers such as brain-age. We assessed different brain-age pipelines in 23 adults scanned on one HF system (GE Signa Premier at 3 T) and two identical ULF systems (Hyperfine Swoop at 64 mT) located at two different sites, hereafter referred to as ULF1 and ULF2. We used 14 distinct acquisitions defined by T1- or T2-weighting, resolution, and preprocessing: raw anisotropic orientations (axial, coronal, sagittal), isotropic scans, and super-resolution derivatives from multi-resolution registration (MRR) and SynthSR. These inputs (a total of n = 573 scans) were analyzed with five brain-age software packages (BrainageR, SynthBA, MIDI, DeepBrainNet, PyBrainAge). Performance evaluation entailed validity (brain-age vs. actual age), correspondence (ULF brain-age vs. HF brain-age) and test-retest reliability (ULF1 brain-age vs. ULF2 brain-age). Overall, results were mixed across pipelines, although several ULF pipelines performed comparably to HF. The four best-performing combinations were SynthBA on T2 scans without SynthSR, MIDI on T2 scans without SynthSR, PyBrainAge on T1 scans with SynthSR and using FreeSurfer recon-all-clinical, and BrainageR on T1 scans with SynthSR. These showed moderate-to-strong validity (r=0.76 –0.92, R2 =0.54 –0.64, Mean Absolute Error [MAE] =6.7 –8.21 years), moderate-to-strong correspondence to HF (r=0.84 –0.93, Intraclass Correlation Coefficient [ICC] =0.72 –0.92), and excellent test-retest reliability (r=0.97 –0.99, ICC =0.97 –0.99). Moreover, some anisotropic acquisitions achieved comparable validity and reliability to MRR images when tested with the best-performing model, SynthBA (R2 =0.57 –0.62, ICC [CI] =0.99 [0.97–1.00], for coronal T2). This first systematic evaluation of brain-age at ULF demonstrates that accurate and reliable estimates can be achieved across multiple pipelines, without necessarily requiring image enhancement. Performance depended on the combination of model, scan type, and preprocessing. ULF brain-age estimation could be a practical and scalable tool for clinical decision-making, population research, and long-term patient monitoring, thereby helping to make advanced neuroimaging biomarkers more accessible worldwide.

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 2 matches between paragraphs and lines of code.

james-cole/brainageR

License: LGPL-3.0
State: the link answers, verified on 26 September 2026
Evidence: files inventoried
Commit: f9444605527337b07b9a8eb2f6c8c81261aa8b61, 14 September 2026
Languages: Shell (5), R (1), MATLAB (1)
Size: 25 files, 7 scripts
Software Heritage: not archived
Found in: the text, “Footnotes”
Holds: README, license file
Not found: CITATION.cff, environment file, tests, continuous integration, documentation
Tools: FSL (3 files), RNifti (1 file), SPM (1 file), tidyverse (1 file)
Availability: 1 check, the latest on 26 September 2026: the link answers
  • 26 September 2026: the link answers
9 files

Zenodo 3476365

License: other-open
State: the link answers, verified on 26 September 2026
Evidence: files inventoried
Size: 1 file
Software Heritage: not checked
Found in: the text, “Footnotes”
Not found: README, license file, CITATION.cff, environment file, tests, continuous integration, documentation
Availability: 1 check, the latest on 26 September 2026: the link answers (HTTP 200)
  • 26 September 2026: the link answers (HTTP 200)

LemuelPuglisi/SynthBA

License: none: the authors keep all their rights
State: the link answers, verified on 26 September 2026
Evidence: files inventoried
Commit: cc6ca2737dba481cfbe5e7453971cba62aafdc09, 1 September 2026
Languages: Python (5)
Size: 22 files, 5 scripts
Software Heritage: not archived
Found in: the text, “Footnotes”
Holds: README, environment (Dockerfile, pyproject.toml, requirements.txt)
Not found: license file, CITATION.cff, tests, continuous integration, documentation
Tools: PyTorch (4 files), NiBabel (3 files), ANTs (2 files), MONAI (2 files), NumPy (2 files), FreeSurfer (1 file), pandas (1 file), SciPy (1 file)
Availability: 1 check, the latest on 26 September 2026: the link answers
  • 26 September 2026: the link answers
6 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:

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

Datasets cited

Data and Code Availability

Data are publicly available https://openneuro.org/datasets/ds006557. Brain-age estimates were obtained using previously published models, with all parameters and analytic steps described in the Methods. For detailed instructions and source code, readers are referred to the original publications and repositories associated with each brain-age model cited in this paper.

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, pages, dates, 9 authors, 6 keywords, 13 MeSH terms, 2 funders, 48 references.

Cite

This paper

Biondo, F., Bennallick, C., Martin, S. A., Puglisi, L., Booth, T. C., Wood, D. A., Iglesias, J. E., Váša, F., & Cole, J. H. (2026). Brain-age in ultra-low-field MRI: How well does it work? Imaging neuroscience (Cambridge, Mass.), 4, IMAG.a.1352. https://doi.org/10.1162/imag.a.1352

BibTeX

@article{biondo2026brain,
author = {Biondo, Francesca and Bennallick, Carly and Martin, Sophie A and Puglisi, Lemuel and Booth, Thomas C and Wood, David A and Iglesias, Juan Eugenio and Váša, František and Cole, James H},
title = {{Brain-age in ultra-low-field MRI: How well does it work?}},
journal = {Imaging neuroscience (Cambridge, Mass.)},
year = {2026},
month = sep,
volume = {4},
pages = {IMAG.a.1352},
publisher = {MIT Press},
issn = {2837-6056},
doi = {10.1162/imag.a.1352},
url = {https://doi.org/10.1162/imag.a.1352},
pmid = {42761967},
pmcid = {PMC13588316}
}

RIS

TY - JOUR
AU - Biondo, Francesca
AU - Bennallick, Carly
AU - Martin, Sophie A
AU - Puglisi, Lemuel
AU - Booth, Thomas C
AU - Wood, David A
AU - Iglesias, Juan Eugenio
AU - Váša, František
AU - Cole, James H
TI - Brain-age in ultra-low-field MRI: How well does it work?
T2 - Imaging neuroscience (Cambridge, Mass.)
J2 - Imaging Neurosci (Camb)
PY - 2026
DA - 2026/09/15
VL - 4
SP - IMAG.a.1352
SN - 2837-6056
PB - MIT Press
DO - 10.1162/imag.a.1352
UR - https://doi.org/10.1162/imag.a.1352
LA - en
ER -

CSL-JSON

{
"id": "10.1162/imag.a.1352",
"type": "article-journal",
"title": "Brain-age in ultra-low-field MRI: How well does it work?",
"container-title": "Imaging neuroscience (Cambridge, Mass.)",
"author": [
{
"family": "Biondo",
"given": "Francesca"
},
{
"family": "Bennallick",
"given": "Carly"
},
{
"family": "Martin",
"given": "Sophie A"
},
{
"family": "Puglisi",
"given": "Lemuel"
},
{
"family": "Booth",
"given": "Thomas C"
},
{
"family": "Wood",
"given": "David A"
},
{
"family": "Iglesias",
"given": "Juan Eugenio"
},
{
"family": "Váša",
"given": "František"
},
{
"family": "Cole",
"given": "James H"
}
],
"container-title-short": "Imaging Neurosci (Camb)",
"volume": "4",
"page": "IMAG.a.1352",
"DOI": "10.1162/imag.a.1352",
"PMID": "42761967",
"PMCID": "PMC13588316",
"ISSN": "2837-6056",
"publisher": "MIT Press",
"URL": "https://doi.org/10.1162/imag.a.1352",
"language": "en",
"issued": {
"date-parts": [
[
2026,
9,
15
]
]
}
}

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.1002/mrm.70488 [code]
Advancing the Volumetric Analysis of Ultra-Low-Field Brain MRI Using Image-to-Image Translation.
Journal: Magnetic resonance in medicine
In common: MONAI, PyTorch, SciPy, 1 other tool, methods / tools, structural MRI / diffusion, 11 references
[2] doi:10.1002/hbm.70425 [code]
Brain Age Estimation on T2-FLAIR Scans for Application to Multiple Sclerosis.
Journal: Human brain mapping
In common: MONAI, FSL, PyTorch, 3 other tools, structural MRI / diffusion, 6 references, author James H Cole
[3] doi:10.1038/s41467-026-71555-0 [code]
A deep representation learning model to predict response to vagus nerve stimulation.
Journal: Nature communications
In common: MONAI, ANTs, FreeSurfer, 6 other tools, structural MRI / diffusion, 3 references
[4] doi:10.1371/journal.pbio.3003856 [code]
Aging and metabolism contribute separately to brain-body health.
Journal: PLoS biology
In common: ANTs, FreeSurfer, FSL, 6 other tools, structural MRI / diffusion, 3 references
[5] doi:10.1016/j.crmeth.2026.101473 [code]
AmygdalaGo-BOLT for boundary-aware segmentation of the human amygdala.
Journal: Cell reports methods
In common: MONAI, ANTs, FreeSurfer, 6 other tools, methods / tools, structural MRI / diffusion, 1 reference
[6] doi:10.1002/hbm.70547 [code]
miniMORPH: A Morphometry Pipeline for Low-Field MRI in Infants.
Journal: Human brain mapping
In common: ANTs, FreeSurfer, FSL, 3 other tools, structural MRI / diffusion, 5 references
[7] doi:10.1038/s41398-026-04081-8 [code]
Functional system-specific brain aging across the Alzheimer's disease continuum.
Journal: Translational psychiatry
In common: FreeSurfer, NiBabel, tidyverse, 3 other tools, structural MRI / diffusion, 5 references
[8] doi:10.1038/s41467-026-76011-7 [code]
Human cortex organizes dynamic co-fluctuations along the sensorimotor-association axis.
Journal: Nature communications
In common: MONAI, ANTs, FreeSurfer, 7 other tools
[9] 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: ANTs, FreeSurfer, FSL, 5 other tools, structural MRI / diffusion, 3 references
[10] doi:10.1093/braincomms/fcag318 [code]
Antenatal maternal anaemia and infant brain structure: high-field (3 T) and ultra-low-field (64 mT) MRI findings from South Africa.
Journal: Brain communications
In common: ANTs, FreeSurfer, FSL, 4 other tools, structural MRI / diffusion, 3 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.

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.