Data & reproducibility

Distance Map Auxiliary Loss for Brain Tumor Segmentation — supporting artefacts for the paper

Every figure, table, and statistical test in the paper derives from one of the files below. Total : 14 files, 2.0 MB. Each file is previewed inline. Open it in a new tab (Download) to inspect the raw text, or browse the View on GitHub link to see syntax-highlighted diff-able versions.

BraTS 2023 GLI raw NIfTI imaging is not redistributed here (challenge licence). These are plain-text CSV / JSON artefacts only, safe to inspect in any browser. All artefacts are released under CC-BY-4.0.

Tier 1 — core data (reproduce every claim)

rankings.json§5.1, §5.3, §5.4JSON553 KB
Per-patient Dice + HD95 for Baseline / DistMap / CC-Consensus × WT/TC/ET × 1196 patients. Central file — everything else derives from this.
⬇ DownloadView on GitHub
loading preview…
fragments_topological_cv.csv§5.2CSV83 KB
Topological fragment counts (CC − 1 per class, 26-connectivity) per patient × B/D/F × NCR/ED/ET. Reproduces the 66 % / 52 % / 33 % reduction.
⬇ DownloadView on GitHub
loading preview…
hd95_per_class_cv.csv§5.3CSV149 KB
Per-class HD95 (NCR/ED/ETc) × B/D/F × 1196 patients. Reproduces the NCR HD95 p = 5.7e-14 result.
⬇ DownloadView on GitHub
loading preview…
patient_features.csv§5.4CSV140 KB
20 morphological features (volumes, CC counts, Euler, sphericity, elongation, roughness) × 1196 patients.
⬇ DownloadView on GitHub
loading preview…
patient_agreement_features.csv§5.4CSV103 KB
11 inter-model agreement features (Dice B vs D, volume diffs, orphan CC statistics) × 1196 patients.
⬇ DownloadView on GitHub
loading preview…

Tier 2 — case labels & secondary artefacts

all_cases.json§5.3, Annexe BJSON389 KB
Full classification of 1196 patients into six model-ordering cases C1–C6.
⬇ DownloadView on GitHub
loading preview…
champions.jsonAnnexe BJSON2 KB
Six pinned demo patients (one per case) used in the companion 3D viewer.
⬇ DownloadView on GitHub
loading preview…
C1_baseline_beats_distmap.csv§5.3CSV75 KB
C1 patients (Baseline > DistMap) ranked by Dice delta.
⬇ DownloadView on GitHub
loading preview…
C2_distmap_beats_baseline.csv§5.3CSV74 KB
C2 patients (DistMap > Baseline) ranked.
⬇ DownloadView on GitHub
loading preview…
C3_fusion_between_B_lt_D.csv§5.3CSV49 KB
C3 patients (Fusion between B < D).
⬇ DownloadView on GitHub
loading preview…
C4_fusion_between_D_lt_B.csv§5.3CSV21 KB
C4 patients (Fusion between D < B).
⬇ DownloadView on GitHub
loading preview…
C5_fusion_worst.csv§5.3CSV58 KB
C5 patients (463 cases where CC-Consensus damages the patient score).
⬇ DownloadView on GitHub
loading preview…
C6_fusion_best.csv§5.3CSV19 KB
C6 patients (157 cases of clean synergy).
⬇ DownloadView on GitHub
loading preview…
sweep.csv§5.4CSV314 KB
Size-adaptive threshold sweep: per-patient Dice at 6 thresholds {20, 50, 100, 200, 500, ∞} vx.
⬇ DownloadView on GitHub
loading preview…

Quick reproduction recipes

Minimal Python snippets to reproduce the key statistical claims of the paper from these files :

# §5.1 — no significant DistMap Dice gain at convergence
import json, numpy as np
from scipy.stats import wilcoxon
d = json.load(open('rankings.json'))
for reg in ('WT', 'TC', 'ET'):
    B = np.array([r['baseline'][f'dice_{reg}'] for r in d['rows']])
    D = np.array([r['distmap'][f'dice_{reg}'] for r in d['rows']])
    _, p = wilcoxon(D, B, alternative='greater')
    print(f"{reg}: Δ={100*(D-B).mean():+.3f} pp, p={p:.2e}")

# §5.2 — topological fragment reduction
import csv
from scipy.stats import wilcoxon
rows = list(csv.DictReader(open('fragments_topological_cv.csv')))
for cls in ('NCR', 'ED', 'ET'):
    D = np.array([int(r[f'frags_D_{cls}']) for r in rows])
    F = np.array([int(r[f'frags_F_{cls}']) for r in rows])
    _, p = wilcoxon(F, D, alternative='less')
    print(f"{cls}: Δ={100*(F.mean()-D.mean())/D.mean():+.1f}% vs DistMap, p={p:.2e}")

# §5.3 — per-class HD95 NCR
rows = list(csv.DictReader(open('hd95_per_class_cv.csv')))
F = np.array([float(r['hd95_NCR_F']) for r in rows if r['hd95_NCR_F']])
D = np.array([float(r['hd95_NCR_D']) for r in rows if r['hd95_NCR_D']])
_, p = wilcoxon(F, D, alternative='less')
print(f"NCR HD95: F={F.mean():.3f} vs D={D.mean():.3f}, p={p:.2e}")

Cite via DOI 10.5281/zenodo.19695264 — contact cassez.guillaume@gmail.com