Hyperelastic Regularization for Near-Diffeomorphic Transformer-Based Brain MRI Registration.
The 20 matches
- [1] § 2. Materials and Methods › 2.1. Dataset and Preprocessing › 2.1.1. OASIS Cross-Cohort Protocols (Zero-Shot and In-Cohort Retraining) ↔ draft/build_drafts.py, lines 20–114 · score 0.85 · Benjamini Hochberg FDR, Learn2Reg, structural brain MRI, OASIS train, paired Wilcoxon, positive Jacobian ratio
- [2] § 3. Results › 3.4. IXI→OASIS Zero-Shot Cross-Cohort Generalization ↔ scripts/oasis_roi_analysis.py, lines 1–50 · score 0.84 · cortical ribbon, lateral ventricles, ROI Jacobian, paired Wilcoxon, zero shot, ROIs
- [3] § 2. Materials and Methods › 2.2. Baseline Models ↔ IXI/analysis_comprehensive/generate_submission_figures.py, lines 174–215 · score 0.79 · nnFormer, CycleMorph, CoTr, VoxelMorph, TransMorphBayes, PVT
- [4] § 2. Materials and Methods › 2.8. Statistical Analysis ↔ draft/build_drafts.py, lines 20–114 · score 0.78 · Benjamini Hochberg FDR, confidence intervals, paired Wilcoxon signed, positive Jacobian ratio, SDlogJ, rank
- [5] § 2. Materials and Methods › 2.8. Statistical Analysis ↔ scripts/bootstrap_ci.py, lines 1–43 · score 0.70 · confidence intervals, core models, bootstrap, TransMorphBayes, MIDIR, HypEReg
- [6] § 2. Materials and Methods › 2.3. Proposed HypEReg-TransMorph Framework ↔ draft/build_arxiv_tex.py, lines 1–70 · score 0.70 · implausible local, local volume change, hyperelastic regularization, suppression, TransMorph, HypEReg
- [7] § 2. Materials and Methods › 2.4. Loss Function › 2.4.1. Relation to the Burger–Modersitzki–Ruthotto (BMR) Hyperelastic Energy ↔ IXI/TransMorph/losses_her.py, lines 74–144 · score 0.69 · BMR length, surrogate, filled, Jacobian determinant, smoothness, components
- [8] § 3. Results › 3.5. Inference Efficiency › Cross-Model Training Cost ↔ IXI/analysis_comprehensive/generate_submission_figures.py, lines 174–215 · score 0.63 · CycleMorph, CoTr, VoxelMorph, TransMorphBayes, MIDIR, HypEReg
- [9] § 3. Results › 3.7. Downstream Multi-Atlas Segmentation on OASIS ↔ scripts/oasis_downstream.py, lines 1–47 · score 0.62 · majority voting, multi atlas, IDs, fusion, Downstream, OASIS
- [10] § 2. Materials and Methods › 2.1. Dataset and Preprocessing › 2.1.2. OASIS-2 Longitudinal Morphometry Protocol ↔ scripts/oasis_roi_analysis.py, lines 1–50 · score 0.60 · FreeSurfer, OASIS zero shot, anatomical, ROI, TransMorph, HypEReg
- [11] § 2. Materials and Methods › 2.1. Dataset and Preprocessing › 2.1.1. OASIS Cross-Cohort Protocols (Zero-Shot and In-Cohort Retraining) ↔ draft/build_arxiv_tex.py, lines 1–70 · score 0.60 · brain MRI, April, positive Jacobian, SDlogJ, protocol, style
- [12] § 3. Results › 3.7. Downstream Multi-Atlas Segmentation on OASIS ↔ figures/visualize_downstream_segmentation_bars.py, lines 48–110 · score 0.58 · fusion gain, fused Dice, thalamus, hippocampus, Downstream, ROI
- [13] § 3. Results › 3.8. Jacobian Morphometry Validation (OASIS-2 Longitudinal and ROI) › 3.8.3. Validation of the FastSurfer ROI Reference Trajectories ↔ IXI/analysis.py, lines 16–72 · score 0.56 · cerebral cortex, lateral ventricles, hippocampus
- [14] § 3. Results › 3.3. Design Rationale, Ablation Study, and Hyperparameter Sensitivity ↔ IXI/TransMorph/losses_her.py, lines 74–144 · score 0.53 · smoothness penalty, ablation, component, hyperelastic, Rationale, loss
- [15] § 3. Results › 3.5. Inference Efficiency ↔ IXI/profile_forward_runtime_memory.py, lines 32–67 · score 0.53 · peak memory, forward runtime, GB, profiling, CUDA, model
- [16] § 2. Materials and Methods › 2.5. Training Details ↔ IXI/Baseline_Transformers/train_CoTr.py, lines 27–166 · score 0.52 · weight decay, AMSGrad, Adam, pin, backward, batch
- [17] § 2. Materials and Methods › 2.5. Training Details ↔ IXI/Baseline_Transformers/train_PVT.py, lines 28–167 · score 0.52 · weight decay, AMSGrad, Adam, pin, backward, batch
- [18] § 2. Materials and Methods › 2.6. Evaluation Metrics ↔ IXI/analysis_comprehensive/run_inference.py, lines 271–317 · score 0.51 · bending energy, divergence, Jacobian determinant, VOI, space, ASSD
- [19] § 3. Results › 3.2. Deformation Regularity and Folding Suppression ↔ IXI/analysis_comprehensive/interim_completed_report.py, lines 166–279 · score 0.50 · ASSD mm, HD95 mm, sdlogJ, accuracy, metrics, Dice
- [20] § 2. Materials and Methods › 2.4. Loss Function › 2.4.1. Relation to the Burger–Modersitzki–Ruthotto (BMR) Hyperelastic Energy ↔ OASIS/surface_distance/metrics.py, lines 200–243 · score 0.50 · surface area, distance, bounded, correlated, voxels, volume
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 · 126 lines · 8.3 KB · MIT · 2 matches
- from __future__ import annotations
- import re
- from pathlib import Path
- ROOT = Path(__file__).resolve().parents[1]
- DRAFT = ROOT / "draft"
- SRC = DRAFT / "template.tex"
- OUT_WITH_OASIS = DRAFT / "template_with_oasis.tex"
- OUT_IXI_ONLY = DRAFT / "template_ixi_only.tex"
- def _replace_once(text: str, old: str, new: str) -> str:
- if old not in text:
- raise ValueError(f"Expected snippet not found:\n{old[:120]}...")
- return text.replace(old, new, 1)
- def make_ixi_only(tex: str) -> str:
- # Abstract: keep IXI-focused summary only.
- abstract_ixi = (
- r"\abstract{Background: Deformable brain MRI registration requires preserving deformation topology in addition to overlap accuracy. "
- r"Methods: HypEReg-TransMorph augments a TransMorph backbone with hyperelastic regularization terms targeting volume-change moderation and anti-folding control. "
- r"We evaluate the method on the IXI atlas-to-subject protocol against learning-based and classical baselines, and report paired Wilcoxon signed-rank tests with Benjamini--Hochberg FDR correction where available. "
- r"Results: HypEReg-TransMorph maintains competitive overlap (Dice: 0.7537 \(\pm\) 0.0275) while reducing topology violations (non-positive Jacobian ratio: 0.0000 vs.\ 0.0153 for TransMorph) and improving Jacobian regularity (SDlogJ: 0.3280 vs.\ 0.4920). "
- r"Conclusions: HypEReg-TransMorph yields topology-preserving deformations on IXI, supporting downstream Jacobian-based morphometric analysis.}"
- )
- tex = re.sub(
- r"\\abstract\{Background:.*?analysis\.\}",
- lambda _m: abstract_ixi,
- tex,
- count=1,
- flags=re.S,
- )
- # Contribution bullet: remove OASIS statement.
- tex = _replace_once(
- tex,
- r"\item Subject-level paired statistical validation (Wilcoxon + BH-FDR), with dual-protocol evaluation across IXI and OASIS (\PH{OASIS stats pending Stage B}), to test robustness of topology-preserving behavior.",
- r"\item Subject-level paired statistical validation (Wilcoxon + BH-FDR) on the unified IXI protocol to test robustness of topology-preserving behavior.",
- )
- # Remove OASIS dataset paragraph in Methods.
- tex = re.sub(
- r"\nTo assess generalization beyond IXI atlas-to-subject, we additionally evaluate on OASIS.*?atlas-to-subject evaluation\.\n",
- "\n",
- tex,
- count=1,
- flags=re.S,
- )
- # Results text: remove OASIS table reference.
- tex = _replace_once(
- tex,
- r"Table~\ref{tab2} reports the compact IXI model comparison, now expanded to include overlap and regularity metrics in one place. HypEReg-TransMorph maintains competitive overlap while improving deformation regularity relative to unconstrained Transformer baselines. Table~\ref{tab_oasis} mirrors the same panel for OASIS and is currently presented with explicit placeholders pending Stage-B OASIS training/inference completion.",
- r"Table~\ref{tab2} reports the compact IXI model comparison, expanded to include overlap and regularity metrics in one place. HypEReg-TransMorph maintains competitive overlap while improving deformation regularity relative to unconstrained Transformer baselines.",
- )
- # Remove full OASIS table block.
- tex = re.sub(
- r"\n\\begin\{table\}\[H\]\n\\caption\{OASIS.*?\\end\{table\}\n",
- "\n",
- tex,
- count=1,
- flags=re.S,
- )
- # Figure captions / TODOs mentioning OASIS.
- tex = _replace_once(
- tex,
- r"\caption{Qualitative registration comparisons on representative IXI and OASIS subjects. \PH{figure regenerated in Stage B from saved deformation fields}.\label{fig2}}",
- r"\caption{Qualitative registration comparisons on representative IXI subjects. \PH{figure regenerated in Stage B from saved deformation fields}.\label{fig2}}",
- )
- tex = _replace_once(
- tex,
- r"% TODO Stage B: regenerate with IXI+OASIS dual panel metrics.",
- r"% TODO Stage B: regenerate with IXI panel metrics.",
- )
- tex = _replace_once(
- tex,
- r"\caption{Consolidated metric overview across selected methods (Dice, non\_jac, SDlogJ, bending energy, and runtime). \PH{figure regenerated in Stage B from IXI+OASIS panel data}.\label{fig5}}",
- r"\caption{Consolidated metric overview across selected methods (Dice, non\_jac, SDlogJ, bending energy, and runtime). \PH{figure regenerated in Stage B from IXI panel data}.\label{fig5}}",
- )
- # Discussion / limitations: remove OASIS-specific paragraphs and wording.
- tex = _replace_once(
- tex,
- r"The CNN/B-spline baseline MIDIR also achieves zero non-positive Jacobian ratio on IXI, with SDlogJ (0.3148) marginally lower than HypEReg-TransMorph (0.3280). The two methods reach comparable regularity through different routes: MIDIR enforces smoothness implicitly via B-spline parameterization, while HypEReg-TransMorph enforces regularity explicitly through differentiable hyperelastic penalties on dense flow. HypEReg is plug-in to dense-flow backbones without changing parameterization, and preserves overlap expressivity (Dice 0.7537 vs.\ 0.7423 for MIDIR on IXI). Cross-dataset evidence on OASIS is summarized as \PH{OASIS MIDIR-vs-HypEReg discussion pending Stage B}.",
- r"The CNN/B-spline baseline MIDIR also achieves zero non-positive Jacobian ratio on IXI, with SDlogJ (0.3148) marginally lower than HypEReg-TransMorph (0.3280). The two methods reach comparable regularity through different routes: MIDIR enforces smoothness implicitly via B-spline parameterization, while HypEReg-TransMorph enforces regularity explicitly through differentiable hyperelastic penalties on dense flow. HypEReg is plug-in to dense-flow backbones without changing parameterization, and preserves overlap expressivity (Dice 0.7537 vs.\ 0.7423 for MIDIR on IXI).",
- )
- tex = re.sub(
- r"\nThe OASIS inter-subject regime produces larger anatomical displacements.*?hyperelastic-regularization mechanism\.\n",
- "\n",
- tex,
- count=1,
- flags=re.S,
- )
- tex = _replace_once(
- tex,
- r"Several limitations should be acknowledged. First, this manuscript retains a single training seed; multi-seed confidence intervals are future work. Second, a per-term ablation isolating \(\mathcal{L}_{\mathrm{length}}\), \(\mathcal{L}_{\mathrm{volume}}\), and \(\mathcal{L}_{\mathrm{fold}}\) was not rerun under the final operating-point pipeline; instead, cross-dataset OASIS validation is used as the main generalization check. Third, although IXI and OASIS cover two protocols, the study is still limited to structural brain MRI and does not yet include pathology-rich or multi-modal settings. Fourth, sensitivity sweeps for \(\beta\) and \(\gamma\) were not performed, and \(\alpha=0\) is a deliberate operating-point choice. Fifth, software-stack reproducibility against a stable PyTorch release is tracked as \PH{stable-PyTorch verification pending Stage B}.",
- r"Several limitations should be acknowledged. First, this manuscript retains a single training seed; multi-seed confidence intervals are future work. Second, a per-term ablation isolating \(\mathcal{L}_{\mathrm{length}}\), \(\mathcal{L}_{\mathrm{volume}}\), and \(\mathcal{L}_{\mathrm{fold}}\) was not rerun under the final operating-point pipeline. Third, the study is currently limited to structural brain MRI and does not yet include pathology-rich or multi-modal settings. Fourth, sensitivity sweeps for \(\beta\) and \(\gamma\) were not performed, and \(\alpha=0\) is a deliberate operating-point choice. Fifth, software-stack reproducibility against a stable PyTorch release is tracked as \PH{stable-PyTorch verification pending Stage B}.",
- )
- # Guardrail: no OASIS/Learn2Reg/table ref remains.
- forbidden = [r"\bOASIS\b", r"\boasis\b", r"Learn2Reg", r"tab_oasis"]
- for pat in forbidden:
- m = re.search(pat, tex)
- if m:
- ctx = tex[max(0, m.start() - 120) : min(len(tex), m.end() + 120)]
- raise ValueError(
- f"Found forbidden pattern in IXI-only draft: {pat}\nContext:\n{ctx}"
- )
- return tex
- def main() -> None:
- source = SRC.read_text(encoding="utf-8")
- OUT_WITH_OASIS.write_text(source, encoding="utf-8")
- OUT_IXI_ONLY.write_text(make_ixi_only(source), encoding="utf-8")
- print(f"Wrote: {OUT_WITH_OASIS}")
- print(f"Wrote: {OUT_IXI_ONLY}")
- if __name__ == "__main__":
- main()
build_drafts.py at commit c63392e, under MIT · at the source
Overview
- Capital Medical University Second Clinical School, Capital Medical University, Beijing 100050, China
- School of Physics, Peking University, Beijing 100871, China
- Dexmal, Beijing 100096, China
Abstract
Transformer-based deformable brain MRI registration achieves high overlap accuracy, but predicted displacement fields can contain voxels with a non-positive Jacobian determinant—local foldings that violate the diffeomorphism assumption required by tensor-based morphometry and atlas-fusion segmentation workflows. We introduce HypEReg, a non-linear hyperelastic regularizer that acts directly on the Jacobian determinant of the predicted displacement field. HypEReg couples a clamped-rational volume-distortion penalty (detJϕ−1)2/
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 20 matches between paragraphs and lines of code.
Zzxmh/HypEReg-TransMorph
c63392e925fc533429e811d86b2c5c22f3d85e21, 11 May 2026Availability: 1 check, the latest on 27 September 2026: the link answers
- 27 September 2026: the link answers
287 files
- Docker/
TransMorph_build_Docker/ — Python, 934 linesTransMorph.py - Docker/
TransMorph_build_Docker/ — Shell, 3 linesbuild.sh - Docker/
TransMorph_build_Docker/ — Shell, 3 linesbuild_GPU.sh - Docker/
TransMorph_build_Docker/ — Python, 372 linesconfigs_TransMorph.py - Docker/
TransMorph_build_Docker/ — Shell, 5 linesexport.sh - Docker/
TransMorph_build_Docker/ — Python, 459 linesinfer_TransMorph.py - Docker/
TransMorph_build_Docker/ — Python, 470 linesinfer_TransMorph_GPU.py - Docker/
TransMorph_build_Docker/ — Python, 173 lineslosses.py - Docker/
TransMorph_build_Docker/ — Shell, 7 linespush.sh - Docker/
TransMorph_build_Docker/ — Shell, 13 linestest.sh - Docker/
TransMorph_build_Docker/ — Shell, 13 linestest_GPU.sh - Docker/
test.sh — Shell, 12 lines - Docker/
test_GPU.sh — Shell, 12 lines - IXI/
Baseline_Transformers/ — Python, 1 linedata/ __init__.py - IXI/
Baseline_Transformers/ — Python, 66 linesdata/ data_utils.py - IXI/
Baseline_Transformers/ — Python, 82 linesdata/ datasets.py - IXI/
Baseline_Transformers/ — Python, 27 linesdata/ rand.py - IXI/
Baseline_Transformers/ — Python, 536 linesdata/ trans.py - IXI/
Baseline_Transformers/ — Python, 135 linesinfer_CoTr.py - IXI/
Baseline_Transformers/ — Python, 138 linesinfer_PVT.py - IXI/
Baseline_Transformers/ — Python, 139 linesinfer_ViTVNet.py - IXI/
Baseline_Transformers/ — Python, 110 linesinfer_nnFormer.py - IXI/
Baseline_Transformers/ — Python, 556 lineslosses.py - IXI/
Baseline_Transformers/ — Python, 5 linesmodels/ CoTr/ __init__.py - IXI/
Baseline_Transformers/ — Python, 5 linesmodels/ CoTr/ configuration.py - IXI/
Baseline_Transformers/ — Python, 163 linesmodels/ CoTr/ network_architecture/ CNNBackbone.py - IXI/
Baseline_Transformers/ — Python, 180 linesmodels/ CoTr/ network_architecture/ DeTrans/ DeformableTrans.py - IXI/
Baseline_Transformers/ — Python, 32 linesmodels/ CoTr/ network_architecture/ DeTrans/ ops/ functions/ ms_deform_attn_func.py - IXI/
Baseline_Transformers/ — Python, 1 linemodels/ CoTr/ network_architecture/ DeTrans/ ops/ modules/ __init__.py - IXI/
Baseline_Transformers/ — Python, 96 linesmodels/ CoTr/ network_architecture/ DeTrans/ ops/ modules/ ms_deform_attn.py - IXI/
Baseline_Transformers/ — Python, 73 linesmodels/ CoTr/ network_architecture/ DeTrans/ position_encoding.py - IXI/
Baseline_Transformers/ — Python, 275 linesmodels/ CoTr/ network_architecture/ ResTranUnet.py - IXI/
Baseline_Transformers/ — Python, 2 linesmodels/ CoTr/ network_architecture/ __init__.py - IXI/
Baseline_Transformers/ — Python, 828 linesmodels/ CoTr/ network_architecture/ neural_network.py - IXI/
Baseline_Transformers/ — Python, 2 linesmodels/ CoTr/ run/ __init__.py - IXI/
Baseline_Transformers/ — Python, 64 linesmodels/ CoTr/ run/ default_configuration.py - IXI/
Baseline_Transformers/ — Python, 137 linesmodels/ CoTr/ run/ run_training.py - IXI/
Baseline_Transformers/ — Python, 2 linesmodels/ CoTr/ training/ __init__.py - IXI/
Baseline_Transformers/ — Python, 112 linesmodels/ CoTr/ training/ model_restore.py - IXI/
Baseline_Transformers/ — Python, 2 linesmodels/ CoTr/ training/ network_training/ __init__.py - IXI/
Baseline_Transformers/ — Python, 727 linesmodels/ CoTr/ training/ network_training/ network_trainer.py - IXI/
Baseline_Transformers/ — Python, 731 linesmodels/ CoTr/ training/ network_training/ nnUNetTrainer.py - IXI/
Baseline_Transformers/ — Python, 388 linesmodels/ CoTr/ training/ network_training/ nnUNetTrainerV2_ResTrans .py - IXI/
Baseline_Transformers/ — Python, 493 linesmodels/ PVT.py - IXI/
Baseline_Transformers/ — Python, 471 linesmodels/ ViTVNet.py - IXI/
Baseline_Transformers/ — Python, 43 linesmodels/ configs_PVT.py - IXI/
Baseline_Transformers/ — Python, 28 linesmodels/ configs_ViTVNet.py - IXI/
Baseline_Transformers/ — Python, 980 linesmodels/ nnFormer/ Swin_Unet_l_gelunorm.py - IXI/
Baseline_Transformers/ — Python, 976 linesmodels/ nnFormer/ Swin_Unet_s_ACDC_2laterd own.py - IXI/
Baseline_Transformers/ — Python, 456 linesmodels/ nnFormer/ generic_UNet.py - IXI/
Baseline_Transformers/ — Python, 38 linesmodels/ nnFormer/ initialization.py - IXI/
Baseline_Transformers/ — Python, 846 linesmodels/ nnFormer/ neural_network.py - IXI/
Baseline_Transformers/ — Python, 213 lines, 1 matchtrain_CoTr.py - IXI/
Baseline_Transformers/ — Python, 214 lines, 1 matchtrain_PVT.py - IXI/
Baseline_Transformers/ — Python, 214 linestrain_ViTVNet.py - IXI/
Baseline_Transformers/ — Python, 214 linestrain_nnFormer.py - IXI/
Baseline_Transformers/ — Python, 352 linesutils.py - IXI/
Baseline_registration_me — Python, 1 linethods/ CycleMorph/ data/ __init__.py - IXI/
Baseline_registration_me — Python, 66 linesthods/ CycleMorph/ data/ data_utils.py - IXI/
Baseline_registration_me — Python, 82 linesthods/ CycleMorph/ data/ datasets.py - IXI/
Baseline_registration_me — Python, 27 linesthods/ CycleMorph/ data/ rand.py - IXI/
Baseline_registration_me — Python, 536 linesthods/ CycleMorph/ data/ trans.py - IXI/
Baseline_registration_me — Python, 137 linesthods/ CycleMorph/ infer.py - IXI/
Baseline_registration_me — Python, 719 linesthods/ CycleMorph/ losses.py - IXI/
Baseline_registration_me — Python, 1 linethods/ CycleMorph/ models/ __init__.py - IXI/
Baseline_registration_me — Python, 62 linesthods/ CycleMorph/ models/ base_model.py - IXI/
Baseline_registration_me — Python, 28 linesthods/ CycleMorph/ models/ configs.py - IXI/
Baseline_registration_me — Python, 221 linesthods/ CycleMorph/ models/ cycleMorph_model.py - IXI/
Baseline_registration_me — Python, 144 linesthods/ CycleMorph/ models/ loss.py - IXI/
Baseline_registration_me — Python, 12 linesthods/ CycleMorph/ models/ models.py - IXI/
Baseline_registration_me — Python, 489 linesthods/ CycleMorph/ models/ networks.py - IXI/
Baseline_registration_me — Python, 206 linesthods/ CycleMorph/ train.py - IXI/
Baseline_registration_me — Python, 1 linethods/ CycleMorph/ util/ __init__.py - IXI/
Baseline_registration_me — Python, 115 linesthods/ CycleMorph/ util/ get_data.py - IXI/
Baseline_registration_me — Python, 64 linesthods/ CycleMorph/ util/ html.py - IXI/
Baseline_registration_me — Python, 33 linesthods/ CycleMorph/ util/ png.py - IXI/
Baseline_registration_me — Python, 84 linesthods/ CycleMorph/ util/ util.py - IXI/
Baseline_registration_me — Python, 205 linesthods/ CycleMorph/ util/ visualizer.py - IXI/
Baseline_registration_me — Python, 521 linesthods/ CycleMorph/ utils.py - IXI/
Baseline_registration_me — Python, 1 linethods/ MIDIR/ data/ __init__.py - IXI/
Baseline_registration_me — Python, 66 linesthods/ MIDIR/ data/ data_utils.py - IXI/
Baseline_registration_me — Python, 82 linesthods/ MIDIR/ data/ datasets.py - IXI/
Baseline_registration_me — Python, 27 linesthods/ MIDIR/ data/ rand.py - IXI/
Baseline_registration_me — Python, 536 linesthods/ MIDIR/ data/ trans.py - IXI/
Baseline_registration_me — Python, 133 linesthods/ MIDIR/ infer.py - IXI/
Baseline_registration_me — Python, 556 linesthods/ MIDIR/ losses.py - IXI/
Baseline_registration_me — Python, 242 linesthods/ MIDIR/ models.py - IXI/
Baseline_registration_me — Python, 245 linesthods/ MIDIR/ train_MIDIR.py - IXI/
Baseline_registration_me — Python, 257 linesthods/ MIDIR/ transformation.py - IXI/
Baseline_registration_me — Python, 352 linesthods/ MIDIR/ utils.py - IXI/
Baseline_registration_me — Python, 1 linethods/ VoxelMorph-diff/ data/ __init__.py - IXI/
Baseline_registration_me — Python, 66 linesthods/ VoxelMorph-diff/ data/ data_utils.py - IXI/
Baseline_registration_me — Python, 82 linesthods/ VoxelMorph-diff/ data/ datasets.py - IXI/
Baseline_registration_me — Python, 27 linesthods/ VoxelMorph-diff/ data/ rand.py - IXI/
Baseline_registration_me — Python, 536 linesthods/ VoxelMorph-diff/ data/ trans.py - IXI/
Baseline_registration_me — Python, 525 linesthods/ VoxelMorph-diff/ finite_differences.py - IXI/
Baseline_registration_me — Python, 108 linesthods/ VoxelMorph-diff/ infer.py - IXI/
Baseline_registration_me — Python, 554 linesthods/ VoxelMorph-diff/ losses.py - IXI/
Baseline_registration_me — Python, 633 linesthods/ VoxelMorph-diff/ models.py - IXI/
Baseline_registration_me — Python, 210 linesthods/ VoxelMorph-diff/ train_vxm_diff.py - IXI/
Baseline_registration_me — Python, 352 linesthods/ VoxelMorph-diff/ utils.py - IXI/
Baseline_registration_me — Python, 1 linethods/ VoxelMorph/ data/ __init__.py - IXI/
Baseline_registration_me — Python, 66 linesthods/ VoxelMorph/ data/ data_utils.py - IXI/
Baseline_registration_me — Python, 82 linesthods/ VoxelMorph/ data/ datasets.py - IXI/
Baseline_registration_me — Python, 27 linesthods/ VoxelMorph/ data/ rand.py - IXI/
Baseline_registration_me — Python, 536 linesthods/ VoxelMorph/ data/ trans.py - IXI/
Baseline_registration_me — Python, 136 linesthods/ VoxelMorph/ infer.py - IXI/
Baseline_registration_me — Python, 556 linesthods/ VoxelMorph/ losses.py - IXI/
Baseline_registration_me — Python, 485 linesthods/ VoxelMorph/ models.py - IXI/
Baseline_registration_me — Python, 319 linesthods/ VoxelMorph/ train_vxm.py - IXI/
Baseline_registration_me — Python, 352 linesthods/ VoxelMorph/ utils.py - IXI/
Baseline_traditional_met — Python, 1 linehods/ LDDMM/ data_IXI/ __init__.py - IXI/
Baseline_traditional_met — Python, 66 lineshods/ LDDMM/ data_IXI/ data_utils.py - IXI/
Baseline_traditional_met — Python, 82 lineshods/ LDDMM/ data_IXI/ datasets.py - IXI/
Baseline_traditional_met — Python, 27 lineshods/ LDDMM/ data_IXI/ rand.py - IXI/
Baseline_traditional_met — Python, 536 lineshods/ LDDMM/ data_IXI/ trans.py - IXI/
Baseline_traditional_met — Python, 119 lineshods/ LDDMM/ infer_IXI.py - IXI/
Baseline_traditional_met — Python, 2,219 lineshods/ LDDMM/ torch_lddmm.py - IXI/
Baseline_traditional_met — Python, 277 lineshods/ LDDMM/ utils.py - IXI/
Baseline_traditional_met — Python, 1 linehods/ NiftyReg/ data_IXI/ __init__.py - IXI/
Baseline_traditional_met — Python, 66 lineshods/ NiftyReg/ data_IXI/ data_utils.py - IXI/
Baseline_traditional_met — Python, 82 lineshods/ NiftyReg/ data_IXI/ datasets.py - IXI/
Baseline_traditional_met — Python, 27 lineshods/ NiftyReg/ data_IXI/ rand.py - IXI/
Baseline_traditional_met — Python, 536 lineshods/ NiftyReg/ data_IXI/ trans.py - IXI/
Baseline_traditional_met — Python, 117 lineshods/ NiftyReg/ infer_IXI.py - IXI/
Baseline_traditional_met — Python, 277 lineshods/ NiftyReg/ utils.py - IXI/
Baseline_traditional_met — Python, 1 linehods/ SyN/ data_IXI/ __init__.py - IXI/
Baseline_traditional_met — Python, 66 lineshods/ SyN/ data_IXI/ data_utils.py - IXI/
Baseline_traditional_met — Python, 82 lineshods/ SyN/ data_IXI/ datasets.py - IXI/
Baseline_traditional_met — Python, 27 lineshods/ SyN/ data_IXI/ rand.py - IXI/
Baseline_traditional_met — Python, 536 lineshods/ SyN/ data_IXI/ trans.py - IXI/
Baseline_traditional_met — Python, 110 lineshods/ SyN/ infer_IXI.py - IXI/
Baseline_traditional_met — Python, 277 lineshods/ SyN/ utils.py - IXI/
Baseline_traditional_met — Python, 1 linehods/ deedsBCV/ data_IXI/ __init__.py - IXI/
Baseline_traditional_met — Python, 66 lineshods/ deedsBCV/ data_IXI/ data_utils.py - IXI/
Baseline_traditional_met — Python, 82 lineshods/ deedsBCV/ data_IXI/ datasets.py - IXI/
Baseline_traditional_met — Python, 27 lineshods/ deedsBCV/ data_IXI/ rand.py - IXI/
Baseline_traditional_met — Python, 536 lineshods/ deedsBCV/ data_IXI/ trans.py - IXI/
Baseline_traditional_met — Python, 109 lineshods/ deedsBCV/ infer_IXI.py - IXI/
Baseline_traditional_met — Python, 277 lineshods/ deedsBCV/ utils.py - IXI/
TransMorph/ — Python, 1 linedata/ __init__.py - IXI/
TransMorph/ — Python, 66 linesdata/ data_utils.py - IXI/
TransMorph/ — Python, 82 linesdata/ datasets.py - IXI/
TransMorph/ — Python, 27 linesdata/ rand.py - IXI/
TransMorph/ — Python, 536 linesdata/ trans.py - IXI/
TransMorph/ — Python, 115 linesinfer_TransMorph.py - IXI/
TransMorph/ — Python, 109 linesinfer_TransMorph_Bayes.p y - IXI/
TransMorph/ — Python, 107 linesinfer_TransMorph_bspl.py - IXI/
TransMorph/ — Python, 109 linesinfer_TransMorph_diff.py - IXI/
TransMorph/ — Python, 153 linesinfer_TransMorph_her.py - IXI/
TransMorph/ — Python, 556 lineslosses.py - IXI/
TransMorph/ — Python, 165 lines, 2 matcheslosses_her.py - IXI/
TransMorph/ — Python, 894 linesmodels/ TransMorph.py - IXI/
TransMorph/ — Python, 890 linesmodels/ TransMorph_Bayes.py - IXI/
TransMorph/ — Python, 173 linesmodels/ TransMorph_bspl.py - IXI/
TransMorph/ — Python, 624 linesmodels/ TransMorph_diff.py - IXI/
TransMorph/ — Python, 1 linemodels/ __init__.py - IXI/
TransMorph/ — Python, 318 linesmodels/ configs_TransMorph.py - IXI/
TransMorph/ — Python, 57 linesmodels/ configs_TransMorph_Bayes .py - IXI/
TransMorph/ — Python, 57 linesmodels/ configs_TransMorph_bspl. py - IXI/
TransMorph/ — Python, 93 linesmodels/ configs_TransMorph_diff. py - IXI/
TransMorph/ — Python, 527 linesmodels/ finite_differences.py - IXI/
TransMorph/ — Python, 257 linesmodels/ transformation.py - IXI/
TransMorph/ — Python, 259 linestrain_TransMorph.py - IXI/
TransMorph/ — Python, 222 linestrain_TransMorph_Bayes.p y - IXI/
TransMorph/ — Python, 208 linestrain_TransMorph_bspl.py - IXI/
TransMorph/ — Python, 215 linestrain_TransMorph_diff.py - IXI/
TransMorph/ — Python, 289 linestrain_TransMorph_her.py - IXI/
TransMorph/ — Python, 352 linesutils.py - IXI/
TransMorph/ — Python, 10 linesvoi_definitions.py - IXI/
__init__.py — Python, 1 line - IXI/
adapters/ — Python, 1 line__init__.py - IXI/
adapters/ — Python, 42 lines_helpers.py - IXI/
adapters/ — Python, 74 linesaffine.py - IXI/
adapters/ — Python, 46 linescotr.py - IXI/
adapters/ — Python, 45 linescyclemorph.py - IXI/
adapters/ — Python, 41 linesmidir.py - IXI/
adapters/ — Python, 49 linesnnformer.py - IXI/
adapters/ — Python, 46 linespvt.py - IXI/
adapters/ — Python, 61 linessyn.py - IXI/
adapters/ — Python, 67 linessyn_legacy_to_per_case.p y - IXI/
adapters/ — Python, 37 linestransmorph_her.py - IXI/
adapters/ — Python, 49 linestransmorph_her_foldonly. py - IXI/
adapters/ — Python, 50 linestransmorph_her_volonly.p y - IXI/
adapters/ — Python, 47 linestransmorph_original.py - IXI/
adapters/ — Python, 41 linestransmorph_psc.py - IXI/
adapters/ — Python, 68 linestransmorphbayes.py - IXI/
adapters/ — Python, 41 linesvoxelmorph_1.py - IXI/
aggregate_and_plot.py — Python, 361 lines - IXI/
analysis.py — Python, 136 lines, 1 match - IXI/
analysis_comprehensive/ — Python, 6 lines__init__.py - IXI/
analysis_comprehensive/ — Python, 103 lines__main__.py - IXI/
analysis_comprehensive/ — Python, 68 linesauto_refresh_interim.py - IXI/
analysis_comprehensive/ — Python, 152 linesbuild_table.py - IXI/
analysis_comprehensive/ — Python, 82 linesconfig.py - IXI/
analysis_comprehensive/ — Python, 76 linesdispatch.py - IXI/
analysis_comprehensive/ — Python, 161 linesexport_inferential_stats .py - IXI/
analysis_comprehensive/ — Python, 124 linesexport_uploaded_weight_s tats.py - IXI/
analysis_comprehensive/ — Python, 230 lines, 2 matchesgenerate_submission_figu res.py - IXI/
analysis_comprehensive/ — Python, 283 lines, 1 matchinterim_completed_report .py - IXI/
analysis_comprehensive/ — Python, 188 linesmerge_baseline_table.py - IXI/
analysis_comprehensive/ — Python, 223 linesmetrics.py - IXI/
analysis_comprehensive/ — Python, 209 linesplot_all.py - IXI/
analysis_comprehensive/ — Python, 469 lines, 1 matchrun_inference.py - IXI/
analysis_comprehensive/ — Python, 232 linesstats.py - IXI/
analysis_trans.py — Python, 140 lines - IXI/
augment_legacy_csv.py — Python, 163 lines - IXI/
eval_ablation_batch.py — Python, 599 lines - IXI/
eval_any.py — Python, 346 lines - IXI/
eval_light_uploaded.py — Python, 124 lines - IXI/
metrics_full.py — Python, 337 lines - IXI/
profile_all_architecture — Python, 170 liness.py - IXI/
profile_forward_runtime_ — Python, 88 lines, 1 matchmemory.py - IXI/
profile_pure_forward_all — Python, 161 lines.py - IXI/
run_full_eval.py — Python, 100 lines - IXI/
smoke_test_full_eval.py — Python, 61 lines - OASIS/
TransMorph/ — Python, 1 linedata/ __init__.py - OASIS/
TransMorph/ — Python, 66 linesdata/ data_utils.py - OASIS/
TransMorph/ — Python, 70 linesdata/ datasets.py - OASIS/
TransMorph/ — Python, 27 linesdata/ rand.py - OASIS/
TransMorph/ — Python, 537 linesdata/ trans.py - OASIS/
TransMorph/ — Python, 578 lineslosses.py - OASIS/
TransMorph/ — Python, 157 lineslosses_her.py - OASIS/
TransMorph/ — Python, 883 linesmodels/ TransMorph.py - OASIS/
TransMorph/ — Python, 1 linemodels/ __init__.py - OASIS/
TransMorph/ — Python, 318 linesmodels/ configs_TransMorph.py - OASIS/
TransMorph/ — Python, 66 linessubmit_TransMorph.py - OASIS/
TransMorph/ — Python, 92 linessubmit_TransMorph_her.py - OASIS/
TransMorph/ — Python, 252 linestrain_TransMorph.py - OASIS/
TransMorph/ — Python, 272 linestrain_TransMorph_her.py - OASIS/
TransMorph/ — Python, 240 linestrain_TransMorph_unsup.p y - OASIS/
TransMorph/ — Python, 357 linesutils.py - OASIS/
__init__.py — Python, 1 line - OASIS/
adapters/ — Python, 1 line__init__.py - OASIS/
adapters/ — Python, 58 lines_helpers.py - OASIS/
adapters/ — Python, 12 linesaffine_oasis.py - OASIS/
adapters/ — Python, 46 linescotr_zs_oasis.py - OASIS/
adapters/ — Python, 43 linescyclemorph_oasis.py - OASIS/
adapters/ — Python, 42 linesmidir_oasis.py - OASIS/
adapters/ — Python, 49 linesnnformer_zs_oasis.py - OASIS/
adapters/ — Python, 48 linespvt_zs_oasis.py - OASIS/
adapters/ — Python, 12 linessyn_oasis.py - OASIS/
adapters/ — Python, 36 linestransmorph_dsc857_oasis. py - OASIS/
adapters/ — Python, 39 linestransmorph_her_oasis.py - OASIS/
adapters/ — Python, 55 linestransmorph_her_zs_oasis. py - OASIS/
adapters/ — Python, 84 linestransmorph_unsup_oasis.p y - OASIS/
adapters/ — Python, 53 linestransmorph_zs_oasis.py - OASIS/
adapters/ — Python, 74 linestransmorphbayes_zs_oasis .py - OASIS/
adapters/ — Python, 39 linesvoxelmorph_1_oasis.py - OASIS/
eval_oasis.py — Python, 247 lines - OASIS/
evaluation.py — Python, 297 lines - OASIS/
export_displacements.py — Python, 130 lines - OASIS/
make_fig_oasis_jacobian. — Python, 162 linespy - OASIS/
oasis_run_stats.py — Python, 58 lines - OASIS/
run_zeroshot_remaining.p — Python, 90 linesy - OASIS/
surface_distance/ — Python, 17 lines__init__.py - OASIS/
surface_distance/ — Python, 400 lineslookup_tables.py - OASIS/
surface_distance/ — Python, 443 lines, 1 matchmetrics.py - draft/
build_arxiv_tex.py — Python, 209 lines, 2 matches - draft/
build_drafts.py — Python, 126 lines, 2 matches - draft/
package_jim_main_submiss — Python, 104 linesion.py - draft/
package_jim_supplementar — Python, 75 linesy_submission.py - draft/
reorganize_all_tex_into_ — Python, 107 linesdraft.py - figures/
check_and_insert.py — Python, 99 lines - figures/
check_fig5.py — Python, 11 lines - figures/
export_fig_pngs.py — Python, 78 lines - figures/
final_fix.py — Python, 138 lines - figures/
fix_blank_titles.py — Python, 146 lines - figures/
fix_fig5.py — Python, 66 lines - figures/
make_fig3_3x3.py — Python, 320 lines - figures/
patch_her_labels.py — Python, 105 lines - figures/
regen_fig5.py — Python, 14 lines - figures/
regenerate_figures.py — Python, 503 lines - figures/
render_downstream_qualit — Python, 260 linesative.py - figures/
render_fig4_only.py — Python, 201 lines - figures/
scan_fig4.py — Python, 13 lines - figures/
select_cases.py — Python, 87 lines - figures/
verify_patches.py — Python, 22 lines - figures/
visualize_downstream_seg — Python, 50 linesmentation.py - figures/
visualize_downstream_seg — Python, 116 lines, 1 matchmentation_bars.py - scripts/
bootstrap_ci.py — Python, 254 lines, 1 match - scripts/
fill_downstream_results. — Python, 217 linespy - scripts/
oasis_downstream.py — Python, 273 lines, 1 match - scripts/
oasis_roi_analysis.py — Python, 308 lines, 2 matches - utils_train_bench.py — Python, 76 lines
- LICENSE — License, 22 lines
- README.md — Text, 220 lines
Zenodo 19888526
Availability: 1 check, the latest on 27 September 2026: the link answers (HTTP 200)
- 27 September 2026: the link answers (HTTP 200)
Zenodo 20113717
Availability: 1 check, the latest on 27 September 2026: the link answers (HTTP 200)
- 27 September 2026: the link answers (HTTP 200)
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;
- 285 scripts, each with its path and the digest of its content;
- 20 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 presented in this study are available in IXI at https://
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, 3 authors, 8 keywords, 3 funders, 34 references.
Cite
This paper
Xu, S., Xu, M., & Zhou, E. (2026). Hyperelastic Regularization for Near-Diffeomorphic Transformer-Based Brain MRI Registration. Journal of imaging, 12(7), 276. https://
BibTeX
@article{xu2026hyperelas
author = {Xu, Shiyi and Xu, Mohan and Zhou, Erjin},
title = {{Hyperelastic Regularization for Near-Diffeomorphic Transformer-Based Brain MRI Registration}},
journal = {Journal of imaging},
year = {2026},
month = jun,
volume = {12},
number = {7},
pages = {276},
publisher = {Multidisciplinary Digital Publishing Institute (MDPI)},
issn = {2313-433X},
doi = {10.3390/
url = {https://
pmid = {42506122},
pmcid = {PMC13413009}
}
RIS
TY - JOUR
AU - Xu, Shiyi
AU - Xu, Mohan
AU - Zhou, Erjin
TI - Hyperelastic Regularization for Near-Diffeomorphic Transformer-Based Brain MRI Registration
T2 - Journal of imaging
J2 - J Imaging
PY - 2026
DA - 2026/
VL - 12
IS - 7
SP - 276
SN - 2313-433X
PB - Multidisciplinary Digital Publishing Institute (MDPI)
DO - 10.3390/
UR - https://
LA - en
ER -
CSL-JSON
{
"id": "10.3390/
"type": "article-journal",
"title": "Hyperelastic Regularization for Near-Diffeomorphic Transformer-Based Brain MRI Registration",
"container-title": "Journal of imaging",
"author": [
{
"family": "Xu",
"given": "Shiyi"
},
{
"family": "Xu",
"given": "Mohan"
},
{
"family": "Zhou",
"given": "Erjin"
}
],
"container-title-short":
"volume": "12",
"issue": "7",
"page": "276",
"DOI": "10.3390/
"PMID": "42506122",
"PMCID": "PMC13413009",
"ISSN": "2313-433X",
"publisher": "Multidisciplinary Digital Publishing Institute (MDPI)",
"URL": "https://
"language": "en",
"issued": {
"date-parts": [
[
2026,
6,
24
]
]
}
}
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.1371/journal.pdig.0001339 [code]
- An effective deep learning algorithm for medical image registration.Journal: PLOS digital healthIn common: scikit-image, NiBabel, PyTorch, 2 other tools, 10 references
- [2] doi:10.3390/jimaging12080384 [code]
- Understanding Trade-Offs in Continuous Neural Representations for Diffeomorphic Image Registration: A Comparative Study of Implicit Neural Representations and Neural Ordinary Differential Equations.Journal: Journal of imagingIn common: SimpleITK, NiBabel, PyTorch, 3 other tools, 7 references
- [3] doi:10.2463/mrms.mp.2024-0149 [code]
- Image Distortion Correction for Diffusion MR Imaging Using a Transformer-based U-Net.Journal: Magnetic resonance in medical sciences : MRMS : an official journal of Japan Society of Magnetic Resonance in MedicineIn common: nnU-Net, ANTs, scikit-image, 8 other tools, structural MRI / diffusion, 2 references
- [4] doi:10.1371/journal.pcbi.1014555 [code]
- Body surface potential driven personalisation of electrophysiological digital twins in hypertrophic cardiomyopathy.Journal: PLoS computational biologyIn common: nnU-Net, SimpleITK, ANTs, 9 other tools, structural MRI / diffusion
- [5] 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 AssociationIn common: nnU-Net, SimpleITK, ANTs, 9 other tools, structural MRI / diffusion
- [6] doi:10.3389/frai.2026.1771088 [code]
- Few-shot deployment of pretrained MRI transformers in brain imaging tasks.Journal: Frontiers in artificial intelligenceIn common: nnU-Net, SimpleITK, scikit-image, 8 other tools, methods / tools, structural MRI / diffusion, 1 reference
- [7] doi:10.1038/s41598-026-55397-w [code]
- Fast surface reconstruction of human brain MRI: benchmarking deep-learning based morphometry tools.Journal: Scientific reportsIn common: SimpleITK, ANTs, scikit-image, 6 other tools, methods / tools, structural MRI / diffusion, 3 references
- [8] doi:10.21037/qims-2026-0792 [code]
- An nnU-Net-based framework with adaptive feature representation for 3D brain tumor segmentation.Journal: Quantitative imaging in medicine and surgeryIn common: nnU-Net, SimpleITK, scikit-image, 7 other tools, methods / tools, structural MRI / diffusion, 1 reference
- [9] doi:10.3389/fmed.2026.1875760 [code]
- Adaptive multi-stage domain unlearning for white-matter lesion segmentation.Journal: Frontiers in medicineIn common: nnU-Net, SimpleITK, scikit-image, 7 other tools, methods / tools, structural MRI / diffusion, 1 reference
- [10] doi:10.1016/j.crmeth.2026.101473 [code]
- AmygdalaGo-BOLT for boundary-aware segmentation of the human amygdala.Journal: Cell reports methodsIn common: SimpleITK, ANTs, scikit-image, 6 other tools, methods / tools, structural MRI / diffusion, 1 reference
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.
Claim this paper
Correct its record
Say what each link of this record is, remove the ones that are not the paper's, add the ones that are missing. The correction becomes a new version of the record, in its Versions section.
Validate its tracing map
You validate the map as this page shows it: 3 repositories of the authors' code, each at its verified commit and with its license, 285 scripts, and 20 matches between paragraphs and code (see the Code and Map sections). It then receives a DOI on Zenodo, with you (your ORCID iD) and OSCR as its creators; the code itself is not deposited.
The map's fingerprint: sha256:7d66f2a199a6d473…
Add the badge to its README
The badge links the code to this page. Copy one of these into the README of the paper's code: only you decide where it goes, and nothing is changed for you.
Markdown
[, paste the snippet at the top, then “Commit changes…” and, to review it first, “Create a new branch and start a pull request”. You open the pull request; OSCR asks for no permission.
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.
