Beyond benchmarking: an expert-guided consensus approach to spatially aware clustering.
The 20 matches
- [1] § Methods › Consensus clustering algorithms ↔ Consensus_scalability/Consensus_Benchmark_plotting.ipynb, lines 103–121 · score 0.94 · STARmap_plus, abc_atlas_wmb_thalamus, cosmx_lung, SergioSalas, visium_breast_cancer_SEDR, xenium mouse brain
- [2] § Methods › GT granularity analysis ↔ Figure_2_GT_Analysis/Figure_All.r, lines 41–90 · score 0.85 · getTopHVGs, border spot, runPCA, quality control, kNN, mitochondrial
- [3] § Methods › Datasets › MERFISH mouse brain thalamus (abc_atlas_wmb_thalamus) ↔ data/abc_atlas_wmb_thalamus/abc_atlas_wmb_thalamus.py, lines 57–124 · score 0.76 · mouse brain, gene expression, coronal, wmb, ZI, thalamus
- [4] § Methods › Datasets › Xenium human breast cancer dataset (xenium-ffpe-bc-idc) ↔ data/xenium-breast-cancer/xenium-breast-cancer.py, lines 45–123 · score 0.72 · Xenium breast cancer, human breast, FFPE, patient, cells, gene
- [5] § Methods › Consensus clustering algorithms ↔ data/abc_atlas_wmb_thalamus/abc_atlas_wmb_thalamus.py, lines 57–124 · score 0.72 · abc atlas wmb, mouse brain, plus, thalamus
- [6] § Methods › Datasets › Xenium human breast cancer dataset (xenium-ffpe-bc-idc) ↔ data/xenium-ffpe-bc-idc/xenium-ffpe-bc-idc.py, lines 116–155 · score 0.68 · human breast, FFPE, idc, Xenium, v1, bc
- [7] § Methods › Datasets › Visium chicken heart (visium_chicken_heart) ↔ data/visium_chicken_heart/chicken_heart.py, lines 18–138 · score 0.66 · Visium chicken heart, GEO, clustering
- [8] § Methods › Datasets › Stereo-seq mouse embryo dataset (stereoseq_mouse_embryo) ↔ data/stereoseq_mouse_embryo/stereoseq_mouse_embryo.py, lines 16–36 · score 0.66 · mouse embryo, Stereo seq, e16, e9, clustering
- [9] § Methods › GT granularity analysis ↔ method/BayesSpace/BayesSpace.r, lines 166–205 · score 0.64 · getTopHVGs, runPCA, scater, scran, cells, genes
- [10] § Methods › Datasets › Visium HD human colorectal cancer dataset (visium_hd_cancer_colon) ↔ data/visium_hd_cancer_colon/visium_hd_cancer_colon.py, lines 67–125 · score 0.63 · Visium HD human, colon, cancer
- [11] § Methods › Visium HD consensus analysis ↔ Figure_5_VisiumHD_Consensus/Fig_5_EGF_Consensus.r, lines 56–144 · score 0.55 · consensus calling, tree, pairwise, HD, subset, LCA
- [12] § Methods › GT granularity analysis ↔ Consensus_scalability/Consensus_Benchmark_plotting.ipynb, lines 103–121 · score 0.55 · Visium breast cancer, Xenium mouse brain, cluster
- [13] § Methods › Datasets › Visium human breast cancer (visium_breast_cancer_SEDR) ↔ data/visium_breast_cancer_SEDR/visium_breast_cancer_SEDR.py, lines 47–93 · score 0.54 · breast cancer, sedr, tissue, Visium
- [14] § Results › An extensible framework for running and evaluating SAC methods ↔ metric/CHAOS/CHAOS.r, lines 82–108 · score 0.53 · chaos score, spatial location, metrics, clustering
- [15] § Methods › GT annotation of the Visium HD human colorectal cancer dataset ↔ data/visium_hd_cancer_colon/visium_hd_cancer_colon.py, lines 128–140 · score 0.52 · Visium HD human, nuclei, cancer, tissue
- [16] § Results › Consensus with expert in the loop › Detecting neoplastic progression stages in colorectal cancer (case study 2) ↔ figure1-ABE/utils.R, lines 1–33 · score 0.52 · DR SC, CellCharter, STAGATE, Seurat, cells
- [17] § Results › Consensus with expert in the loop › Detecting neoplastic progression stages in colorectal cancer (case study 2) ↔ data/visium_hd_cancer_colon/visium_hd_cancer_colon.py, lines 67–125 · score 0.52 · human colon, Visium HD, cancer
- [18] § Methods › Datasets › Visium human brain LIBD DLPFC dataset 1 (libd_dlpfc) ↔ figure3-libd-consensus/spacehack-figure-3.qmd, lines 74–171 · score 0.52 · Visium human, LIBD DLPFC, gene
- [19] § Methods › Datasets › Visium human brain LIBD DLPFC dataset 1 (libd_dlpfc) ↔ data/libd_dlpfc/libd_dlpfc.r, lines 57–140 · score 0.52 · spatialLIBD, LIBD DLPFC, Visium, gene
- [20] § Methods › Consensus clustering algorithms ↔ consensus/03_Consensus_weighted/Consensus_weighted.r, lines 295–358 · score 0.50 · binary matrices, consensus clusters, weighted, loss
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 · 199 lines · 7 KB · MIT · 3 matches
- #!/usr/bin/env python
- # Made by Paul Kiessling [email hidden]
- import os
- import argparse
- import tempfile
- import shutil
- from spatialdata_io import visium_hd
- import pandas as pd
- import scipy
- import json
- from pypdl import Downloader
- LINKS = {
- "https://cf.10xgenomics.com/samples/spatial-exp/3.0.0/Visium_HD_Human_Colon_Cancer/Visium_HD_Human_Colon_Cancer_tissue_image.btf": "83bea5bc5761ccac5e54f7dc9b36d1d2",
- "https://cf.10xgenomics.com/samples/spatial-exp/3.0.0/Visium_HD_Human_Colon_Cancer/Visium_HD_Human_Colon_Cancer_feature_slice.h5": "ba5db688c27fa4b7203dc4f40c240453",
- "https://cf.10xgenomics.com/samples/spatial-exp/3.0.0/Visium_HD_Human_Colon_Cancer/Visium_HD_Human_Colon_Cancer_spatial.tar.gz": "18c123015ecad7dbb17e5862b427c21a",
- "https://cf.10xgenomics.com/samples/spatial-exp/3.0.0/Visium_HD_Human_Colon_Cancer/Visium_HD_Human_Colon_Cancer_binned_outputs.tar.gz": "2a8a0df135d3d77ed77a465882f0bb2f",
- "https://zenodo.org/records/11402686/files/segmented_nuclei.zip": "952134e629e3861af44f70ccfc555a9d",
- "https://zenodo.org/records/11402686/files/2um_squares_annotation.csv": "f074d2a88b87bbd2d92d210bf9635849",
- "https://zenodo.org/records/11402686/files/8um_squares_annotation.csv": "e7eb740df3072cf7df505d61e8b62a9d",
- "https://zenodo.org/records/11402686/files/16um_squares_annotation.csv": "0c3644e6b6dcc9fa00d135bde6b8413b",
- }
- META_DICT = {"technology": "Visium HD"}
- LICENSE = """
- """
- def download_links(links, temp_dir):
- headers = {
- "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0"
- }
- dl = Downloader(headers=headers)
- for link, checksum in links.items():
- print(f"Downloading {link}")
- file = dl.start(
- url=link,
- file_path=temp_dir,
- segments=10,
- display=True,
- multithread=True,
- block=True,
- retries=3,
- )
- if not file.validate_hash(checksum, "md5"):
- raise ValueError(f"File {file} is corrupted")
- # Extract the tar.gz files
- for file in os.listdir(temp_dir):
- if file.endswith(".tar.gz") or file.endswith(".zip"):
- shutil.unpack_archive(os.path.join(temp_dir, file), temp_dir)
- # Move binned folders to parent directory for visium_hd reader
- source_folder = os.path.join(temp_dir, "binned_outputs")
- parent_folder = os.path.dirname(source_folder)
- for folder in os.listdir(source_folder):
- item_path = os.path.join(source_folder, folder)
- if os.path.isdir(item_path):
- destination_path = os.path.join(parent_folder, folder)
- shutil.move(item_path, destination_path)
- def process_adata(input_path, output_folder):
- results = {
- "square_002um": "2um_squares_annotation.csv",
- "square_008um": "8um_squares_annotation.csv",
- "square_016um": "16um_squares_annotation.csv",
- }
- for result in results.keys():
- os.makedirs(
- os.path.join(output_folder, f"visium_hd_cancer_colon_{result}"),
- exist_ok=True,
- )
- sdata = visium_hd(input_path)
- for result, annotation_file in results.items():
- table = sdata.tables[result]
- table.var_names_make_unique()
- domain_annotation = pd.read_table(
- os.path.join(input_path, annotation_file),
- index_col=0,
- header=None,
- names=["annot_type"],
- )
- complete_path = os.path.join(output_folder, f"visium_hd_cancer_colon_{result}")
- # Obs
- obs = table.obs.copy()
- obs["selected"] = "true"
- # A few bins are outside the image + disconnected, so we remove them
- obs.loc[
- domain_annotation.loc[:, "annot_type"] == "Outside", "selected"
- ] = "false"
- obs.rename(columns={"array_row": "row", "array_col": "col"}, inplace=True)
- obs.to_csv(f"{complete_path}/observations.tsv", sep="\t", index_label="")
- # Features
- vars = table.var.copy()
- vars["selected"] = "true"
- vars.to_csv(f"{complete_path}/features.tsv", sep="\t", index_label="")
- # Coordinates
- coords = pd.DataFrame(table.obsm["spatial"], columns=["x", "y"])
- coords.index = table.obs.index
- coords.to_csv(f"{complete_path}/coordinates.tsv", sep="\t", index_label="")
- # Matrix
- scipy.io.mmwrite(f"{complete_path}/counts.mtx", table.X)
- # Write labels.tsv
- labels = domain_annotation.loc[:, "annot_type"]
- labels.index = table.obs.index
- labels = labels.rename("label")
- labels.to_csv(f"{complete_path}/labels.tsv", sep="\t", index_label="")
- # Move image files
- shutil.copy(
- os.path.join(input_path, "Visium_HD_Human_Colon_Cancer_tissue_image.btf"),
- os.path.join(complete_path, "H_E.tiff"),
- )
- def process_nuclei(input_path, output_folder):
- input = os.path.join(input_path, "output")
- output = os.path.join(output_folder, "visium_hd_cancer_colon_segmented_nuclei")
- os.makedirs(output, exist_ok=True)
- for filename in os.listdir(input):
- file_path = os.path.join(input, filename)
- if os.path.isfile(file_path):
- shutil.move(file_path, os.path.join(output, filename))
- shutil.copy(
- os.path.join(input_path, "Visium_HD_Human_Colon_Cancer_tissue_image.btf"),
- os.path.join(output, "H_E.tiff"),
- )
- def write_json(dict, output_path):
- with open(output_path, "w") as json_file:
- json.dump(dict, json_file)
- def main():
- # Set up command-line argument parser
- parser = argparse.ArgumentParser(
- description="Convert Visium HD data to Spacehack format."
- )
- # Add arguments for output folder
- parser.add_argument(
- "-o", "--out_dir", help="Output directory to write files to.", required=True
- )
- # Parse the command-line arguments
- args = parser.parse_args()
- # Download and process
- with tempfile.TemporaryDirectory() as temp_dir: #
- download_links(LINKS, temp_dir)
- os.makedirs(args.out_dir, exist_ok=True)
- sample_df = {
- "patient": [1, 1, 1, 1],
- "sample": [0, 0, 0, 0],
- "position": [1, 1, 1, 1],
- "replicate": [1, 1, 1, 1],
- "n_clusters": [6, 6, 6, 6],
- "directory": [
- "visium_hd_cancer_colon_segmented_nuclei",
- "visium_hd_cancer_colon_square_002um",
- "visium_hd_cancer_colon_square_008um",
- "visium_hd_cancer_colon_square_016um",
- ],
- }
- sample_df = pd.DataFrame(sample_df)
- # Segmented Nuclei are already in the correct format
- process_nuclei(temp_dir, args.out_dir)
- process_adata(temp_dir, args.out_dir)
- # write json
- write_json(META_DICT, f"{args.out_dir}/experiment.json")
- # write samples.tsv
- sample_df.to_csv(f"{args.out_dir}/samples.tsv", sep="\t", index_label=False)
- # write LICENSE
- with open(f"{args.out_dir}/LICENSE.md", "w") as file:
- file.write(LICENSE)
- if __name__ == "__main__":
- main()
visium_hd_cancer_colon.py at commit dac468d, under MIT · at the source
Overview
13 affiliations
- Biomedical Data Science Center, Centre Hospitalier Universitaire Vaudois,Lausanne, Switzerland
- Department of Human Genetics, Leiden University Medical Center,Leiden, the Netherlands
- Delft Bioinformatics Lab, Delft University of Technology,Delft, the Netherlands
- Department of Molecular Life Sciences and SIB Swiss Institute of Bioinformatics, University of Zurich,Zurich, Switzerland
- Berlin Institute of Health at Charité - Universitätsmedizin Berlin, Center of Digital,Berlin, Germany
- Department of Nephrology, Rheumatology, and Clinical Immunology, University Hospital RWTH Aachen,Aachen, Germany
- Allen Institute for Brain Science,Seattle, WA USA
- DTU Health Tech, Technical University of Denmark, Ørsteds Plads,Kongens Lyngby, Denmark
- LEO Foundation Skin Immunology Research Center, Department of Immunology and Microbiology, University of Copenhagen,Copenhagen, Denmark
- German Cancer Research Center (DKFZ), Division of Computational Genomics and Systems Genetics,Heidelberg, Germany
- The German Human Genome-Phenome Archive, Heidelberg, Germany
- Division of Cell Biology, Histology and Embryology, Gottfried Schatz Research Center, Medical University of Graz,Graz, Austria
- Diagnostic and Research Institute of Pathology, Medical University of Graz,Graz, Austria
Abstract
Spatial omics technologies have revolutionized the study of tissue architecture and cellular heterogeneity by integrating molecular profiles with spatial localization. In spatially resolved transcriptomics, delineating higher-order anatomical structures is critical for understanding how cellular organization affects function. However, the reliability of current benchmarks of spatially aware clustering (SAC) methods is undermined by their narrow focus on Visium and brain tissue datasets and the incorrect interpretation of manual annotation as ground truth. Here we present SACCELERATOR, a community-driven, extensible framework that standardizes data formatting, method integration and metric evaluation, enabling rapid inclusion of new methods and datasets. Our analysis revealed substantial limitations in the generalizability and reproducibility of SAC methods and shows that anatomical labels commonly used as ground truths are often biased, error prone and unsuitable for benchmarking. Rather than ranking methods, we propose a consensus-guided workflow where descriptive spatial metrics highlight high-entropy regions of method disagreement, enabling targeted feedback for tissue experts. Applied to brain and cancer datasets, this approach uncovered biologically meaningful patterns overlooked by individual SAC methods and manual annotations, highlighting the need for iterative, expert-in-the-loop evaluation.
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.
SpatialHackathon/SACCELERATOR
dac468d9af18868c867b236e31f6c82f0f29a0fa, 24 August 2026Availability: 1 check, the latest on 27 September 2026: the link answers
- 27 September 2026: the link answers
116 files
- consensus/
01_Results_Aggregation/ , Python, 90 linesResults_Aggregation.py - consensus/
02_BC_ranking/ , R, 91 linesBC_ranking.r - consensus/
02_Cross_method_ARI/ , R, 63 linesCross_method_ARI.r - consensus/
02_Smoothness_entropy/ , R, 89 linesSmoothness_entropy.r - consensus/
03_Consensus_kmode/ , R, 92 linesConsensus_kmode.r - consensus/
03_Consensus_lca/ , R, 94 linesConsensus_lca.r - consensus/
03_Consensus_weighted/ , R, 358 lines, 1 matchConsensus_weighted.r - consensus/
03_Cross_method_entropy/ , R, 194 linesCross_method_entropy.r - data/
SEA_AD_data/ , Python, 214 linesSEA_AD_data.py - data/
STARmap-2018-mouse-corte , Python, 110 linesx/ STARmap-2018-mouse-corte x.py - data/
STARmap_plus/ , Python, 159 linesSTARmap_plus.py - data/
abc_atlas_wmb_thalamus/ , Python, 707 lines, 2 matchesabc_atlas_wmb_thalamus.p y - data/
cosmx_liver/ , Python, 153 linescosmx_liver.py - data/
cosmx_lung/ , Python, 182 linescosmx_lung.py - data/
her2st-breast-cancer/ , Python, 141 linesher2st-breast-cancer.py - data/
libd_dlpfc/ , R, 140 lines, 1 matchlibd_dlpfc.r - data/
locus_coeruleus/ , R, 130 lineslocus_coeruleus.R - data/
merfish_devheart/ , Python, 180 linesmerfish_devheart.py - data/
mouse_brain_sagittal_ant , Python, 165 lineserior/ mouse_brain_sagittal_ant erior.py - data/
mouse_brain_sagittal_pos , Python, 165 linesterior/ mouse_brain_sagittal_pos terior.py - data/
mouse_kidney_coronal/ , Python, 160 linesmouse_kidney_coronal.py - data/
osmfish_Ssp/ , Python, 127 linesosmfish_Ssp.py - data/
pachter_simulation/ , Python, 63 linespachter_simulation.py - data/
slideseq2_olfactory_bulb , Python, 166 lines/ slideseq2_olfactory_bulb .py - data/
sotip_simulation/ , Python, 134 linessotip_simulation.py - data/
spatialDLPFC/ , R, 108 linesspatialDLPFC.r - data/
stereoseq_developing_Dro , Python, 139 linessophila_embryos_larvae/ stereoseq_developing_Dro sophila_embryos_larvae.p y - data/
stereoseq_liver/ , Python, 140 linesstereoseq_liver.py - data/
stereoseq_mouse_embryo/ , Python, 148 lines, 1 matchstereoseq_mouse_embryo.p y - data/
stereoseq_olfactory_bulb , Python, 134 lines/ stereoseq_olfactory_bulb .py - data/
visium_breast_cancer_SED , Python, 142 lines, 1 matchR/ visium_breast_cancer_SED R.py - data/
visium_chicken_heart/ , Python, 152 lines, 1 matchchicken_heart.py - data/
visium_hd_cancer_colon/ , Python, 199 lines, 3 matchesvisium_hd_cancer_colon.p y - data/
xenium-breast-cancer/ , Python, 141 lines, 1 matchxenium-breast-cancer.py - data/
xenium-ffpe-bc-idc/ , Python, 159 lines, 1 matchxenium-ffpe-bc-idc.py - data/
xenium-mouse-brain-Sergi , Python, 118 linesoSalas/ xenium-mouse-brain-Sergi oSalas.py - method/
BANKSY/ , R, 257 linesbanksy.r - method/
BANKSY/ , Shell, 11 linesbanksy_env.sh - method/
BayesSpace/ , R, 205 lines, 1 matchBayesSpace.r - method/
CellCharter/ , Python, 224 linesCellCharter.py - method/
DRSC/ , R, 221 linesDRSC.r - method/
DRSC/ , Shell, 10 linesdrsc_env.sh - method/
DeepST/ , Python, 243 linesDeepST.py - method/
DeepST/ , Shell, 12 linesDeepST_env.sh - method/
Giotto/ , R, 298 linesGiotto.r - method/
Giotto/ , Shell, 18 linesGiotto_env.sh - method/
GraphST/ , Python, 243 linesmethod_GraphST.py - method/
SCAN-IT/ , Python, 194 linesmethod_scanit.py - method/
SC_MEB/ , R, 208 linesSC_MEB.r - method/
SC_MEB/ , Shell, 12 linesscmeb_env.sh - method/
SEDR/ , Python, 255 linesSEDR_method.py - method/
SOTIP/ , Python, 243 linesmethod_sotip.py - method/
STAGATE/ , Python, 199 linesmethod_STAGATE.py - method/
SpaceFlow/ , Python, 204 linesmethod_spaceflow.py - method/
SpiceMix/ , Python, 212 linesSpiceMix.py - method/
bass/ , R, 240 linesbass.r - method/
bass/ , Shell, 13 linesbass_env.sh - method/
conST/ , Python, 341 linesconST.py - method/
maple/ , R, 230 linesmaple.r - method/
maple/ , Shell, 11 linesmaple_env.sh - method/
meringue/ , R, 209 linesmeringue.r - method/
meringue/ , Shell, 12 linesmeringue_env.sh - method/
precast/ , R, 221 linesprecast.r - method/
precast/ , Shell, 10 linesprecast_env.sh - method/
scanpy/ , Python, 235 linesmethod_scanpy.py - method/
search_res.py , Python, 100 lines - method/
search_res.r , R, 65 lines - method/
seurat/ , R, 236 linesseurat.r - method/
spaGCN/ , Python, 234 linesspaGCN.py - method/
spatialGE/ , R, 212 linesspatialGE.r - method/
spatialGE/ , Shell, 11 linesspatialGE_env.sh - method/
stardust/ , R, 260 linesstardust.r - method/
stardust/ , Shell, 10 linesstardust_env.sh - metric/
ARI/ , Python, 57 linesARI.py - metric/
CHAOS/ , R, 123 lines, 1 matchCHAOS.r - metric/
Calinski-Harabasz/ , Python, 63 linesCalinski-Harabasz.py - metric/
Completeness/ , Python, 63 linesCompleteness.py - metric/
Davies-Bouldin/ , Python, 63 linesDavies-Bouldin.py - metric/
Entropy/ , Python, 74 linesEntropy.py - metric/
FMI/ , Python, 63 linesFMI.py - metric/
Homogeneity/ , Python, 63 linesHomogeneity.py - metric/
LISI/ , R, 90 linesLISI.r - metric/
MCC/ , Python, 73 linesMCC.py - metric/
NMI/ , R, 92 linesNMI.r - metric/
PAS/ , R, 119 linesPAS.r - metric/
SpatialARI/ , R, 132 linesSpatialARI.r - metric/
SpatialARI/ , Shell, 11 linesSpatialARI_env.sh - metric/
V_measure/ , Python, 70 linesV_measure.py - metric/
cluster-specific-silhoue , R, 103 linestte/ cluster-specific-silhoue tte.r - metric/
domain-specific-f1/ , R, 130 linesdomain-specific-f1.r - metric/
jaccard/ , Python, 79 linesjaccard.py - preprocessing/
dimensionality_reduction , Python, 100 lines/ PCA.py - preprocessing/
feature_selection/ , Python, 93 lineshighly_variable_genes_sc anpy.py - preprocessing/
feature_selection_MoranI , Python, 123 lines/ spatially_variable_genes _moransI.py - preprocessing/
neighbors/ , Python, 91 linesdelaunay_triangulation/ delaunay_triangulation.p y - preprocessing/
neighbors/ , Python, 106 linesn_neighbourhood/ n_neighbourhood.py - preprocessing/
neighbors/ , Python, 108 linesn_rings/ n_rings.py - preprocessing/
neighbors/ , Python, 106 linesradius/ radius.py - preprocessing/
quality_control/ , Python, 151 linesqc_scanpy.py - preprocessing/
transformation/ , Python, 87 lineslog1p.py - preprocessing/
visualization/ , Python, 32 linespdf_merge.py - preprocessing/
visualization/ , Python, 195 linesqc_visualization.py - templates/
consensus.py , Python, 88 lines - templates/
consensus.r , R, 107 lines - templates/
consensus_BC.py , Python, 45 lines - templates/
consensus_BC.r , R, 53 lines - templates/
data.py , Python, 96 lines - templates/
data.r , R, 94 lines - templates/
method.py , Python, 155 lines - templates/
method.r , R, 175 lines - templates/
metric.py , Python, 53 lines - templates/
metric.r , R, 71 lines - workflows/
generate_path_config.sh , Shell, 173 lines - workflows/
shared/ , Python, 39 linesfunctions.py - LICENSE.txt, License, 16 lines
- README.md, Text, 291 lines
SpatialHackathon/SpaceHack2023_study
047667cd711097cba6a365cfc2a0027ae8c578e9, 3 November 2025Availability: 1 check, the latest on 27 September 2026: the link answers
- 27 September 2026: the link answers
13 files
- Consensus_scalability/
Consensus_Benchmark_plot , Jupyter, 231 lines, 2 matchesting.ipynb - Figure_2_GT_Analysis/
Figure_All.r , R, 315 lines, 1 match - Figure_4_Thalamus_Consen
sus/ , Quarto, 327 linesFigure_4.qmd - Figure_4_Thalamus_Consen
sus/ , R, 401 linesutils.R - Figure_5_VisiumHD_Consen
sus/ , R, 144 lines, 1 matchFig_5_EGF_Consensus.r - Figure_5_VisiumHD_Consen
sus/ , R, 401 linesutils.R - figure1-ABE/
figure1-AB.ipynb , Jupyter, 183 lines - figure1-ABE/
figure1-DE.ipynb , Jupyter, 167 lines - figure1-ABE/
utils.R , R, 197 lines, 1 match - figure3-libd-consensus/
spacehack-figure-3.qmd , Quarto, 706 lines, 1 match - figure3-libd-consensus/
utils.R , R, 255 lines - LICENSE, License, 21 lines
- README.md, Text, 1 line
Zenodo 15487520
Availability: 1 check, the latest on 27 September 2026: the link answers (HTTP 200)
- 27 September 2026: the link answers (HTTP 200)
Code availability
The SACCELERATOR workflow and all relevant code to run the analysis are available as open-source software via GitHub at https://
Reproduced under the paper's license (CC BY), from the paper cited above.
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;
- 125 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
Datasets cited
- alleninstitute.github.io
/ , at alleninstitute.github.io; found in the text, “MERFISH mouse brain thalamus…”abc_atlas_access - geo:GSE149457, at NCBI GEO; found in the text, “Visium chicken heart (visium_chicken_heart)”
- github.com/
jinmiaochenlab/ , at github.com; found in the text, “Visium human breast cancer…”sedr_analyses - portal.brain-map.org/
atlases-and-data/ , at Allen Brain Map; found in the text, “MERFISH mouse brain thalamus…”bkp - zenodo:15487519, at Zenodo; found in “Data availability”
Data availability
Links to raw data are provided in the ‘Datasets’ section (Supplementary Table 1). All filtered data, intermediate results and final results are available via Zenodo 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 2, 28 September 2026
- Publisher: n/a → Nature Portfolio
Version 1, 27 September 2026: the first record
Recorded: type, language, journal, volume, issue, pages, dates, 23 authors, 3 keywords, 9 MeSH terms, 7 funders, 92 references.
Cite
This paper
Sun, J., Biharie, K., Cai, P., Müller-Bötticher, N., Kiessling, P., Turner, M. A., Dam, S. H., Heyl, F., Kathirchelvan, S., Emons, M., Gunz, S., Twardziok, S., El-Heliebi, A., Zacharias, M., SpaceHack 2.0 participants, Eils, R., Reinders, M., Gottardo, R., Kuppe, C., . . . Ishaque, N. (2026). Beyond benchmarking: an expert-guided consensus approach to spatially aware clustering. Nature methods, 23(9), 1814-1826. https://
BibTeX
@article{sun2026beyond,
author = {Sun, Jieran and Biharie, Kirti and Cai, Peiying and Müller-Bötticher, Niklas and Kiessling, Paul and Turner, Meghan A. and Dam, Søren Helweg and Heyl, Florian and Kathirchelvan, Sarusan and Emons, Martin and Gunz, Samuel and Twardziok, Sven and El-Heliebi, Amin and Zacharias, Martin and {SpaceHack 2.0 participants} and Eils, Roland and Reinders, Marcel and Gottardo, Raphael and Kuppe, Christoph and Long, Brian and Mahfouz, Ahmed and Robinson, Mark D. and Ishaque, Naveed},
title = {{Beyond benchmarking: an expert-guided consensus approach to spatially aware clustering}},
journal = {Nature methods},
year = {2026},
month = aug,
volume = {23},
number = {9},
pages = {1814--1826},
publisher = {Nature Portfolio},
issn = {1548-7091},
doi = {10.1038/
url = {https://
pmid = {42637977},
pmcid = {PMC13541621}
}
RIS
TY - JOUR
AU - Sun, Jieran
AU - Biharie, Kirti
AU - Cai, Peiying
AU - Müller-Bötticher, Niklas
AU - Kiessling, Paul
AU - Turner, Meghan A.
AU - Dam, Søren Helweg
AU - Heyl, Florian
AU - Kathirchelvan, Sarusan
AU - Emons, Martin
AU - Gunz, Samuel
AU - Twardziok, Sven
AU - El-Heliebi, Amin
AU - Zacharias, Martin
AU - SpaceHack 2.0 participants
AU - Eils, Roland
AU - Reinders, Marcel
AU - Gottardo, Raphael
AU - Kuppe, Christoph
AU - Long, Brian
AU - Mahfouz, Ahmed
AU - Robinson, Mark D.
AU - Ishaque, Naveed
TI - Beyond benchmarking: an expert-guided consensus approach to spatially aware clustering
T2 - Nature methods
J2 - Nat Methods
PY - 2026
DA - 2026/
VL - 23
IS - 9
SP - 1814
EP - 1826
SN - 1548-7091
PB - Nature Portfolio
DO - 10.1038/
UR - https://
LA - en
ER -
CSL-JSON
{
"id": "10.1038/
"type": "article-journal",
"title": "Beyond benchmarking: an expert-guided consensus approach to spatially aware clustering",
"container-title": "Nature methods",
"author": [
{
"family": "Sun",
"given": "Jieran"
},
{
"family": "Biharie",
"given": "Kirti"
},
{
"family": "Cai",
"given": "Peiying"
},
{
"family": "Müller-Bötticher",
"given": "Niklas"
},
{
"family": "Kiessling",
"given": "Paul"
},
{
"family": "Turner",
"given": "Meghan A."
},
{
"family": "Dam",
"given": "Søren Helweg"
},
{
"family": "Heyl",
"given": "Florian"
},
{
"family": "Kathirchelvan",
"given": "Sarusan"
},
{
"family": "Emons",
"given": "Martin"
},
{
"family": "Gunz",
"given": "Samuel"
},
{
"family": "Twardziok",
"given": "Sven"
},
{
"family": "El-Heliebi",
"given": "Amin"
},
{
"family": "Zacharias",
"given": "Martin"
},
{
"literal": "SpaceHack 2.0 participants"
},
{
"family": "Eils",
"given": "Roland"
},
{
"family": "Reinders",
"given": "Marcel"
},
{
"family": "Gottardo",
"given": "Raphael"
},
{
"family": "Kuppe",
"given": "Christoph"
},
{
"family": "Long",
"given": "Brian"
},
{
"family": "Mahfouz",
"given": "Ahmed"
},
{
"family": "Robinson",
"given": "Mark D."
},
{
"family": "Ishaque",
"given": "Naveed"
}
],
"container-title-short":
"volume": "23",
"issue": "9",
"page": "1814-1826",
"DOI": "10.1038/
"PMID": "42637977",
"PMCID": "PMC13541621",
"ISSN": "1548-7091",
"publisher": "Nature Portfolio",
"URL": "https://
"language": "en",
"issued": {
"date-parts": [
[
2026,
8,
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.21203/rs.3.rs-9676637/v1 [code]
- A Comprehensive Benchmarking of Spatial Deconvolution and Domain Detection Methods across Diverse Tissues and Spatial Transcriptomic TechnologiesJournal: Research Square (preprint)In common: Squidpy, rpy2, PyTorch Geometric, 17 other tools, methods / tools, genetics / omics, 14 references
- [2] doi:10.1093/bioinformatics/btag540 [code]
- Deciphering spatial heterogeneity by multimodal spatial transcriptomics modelling with SpatialModal.Journal: Bioinformatics (Oxford, England)In common: Squidpy, rpy2, PyTorch Geometric, 10 other tools, methods / tools, genetics / omics, 11 references
- [3] doi:10.1186/s13073-026-01704-z [code]
- Gene expression profiling enables refined parcellation of cortical layers in the heterogeneous human cerebral cortex.Journal: Genome medicineIn common: SingleCellExperiment, anndata, Scanpy, 15 other tools, genetics / omics, 8 references
- [4] doi:10.1016/j.xcrm.2026.102766 [code]
- A longitudinal single-cell and spatial multiomic atlas of pediatric high-grade glioma.Journal: Cell reports. MedicineIn common: rpy2, SingleCellExperiment, limma, 19 other tools, genetics / omics, 2 references
- [5] doi:10.1002/advs.77003 [code]
- SemanticST: A Scalable Multi-Contextual Graph Learning Framework for Uncovering Spatial Niches and Robust Multi-Sample Integration in Spatial Transcriptomics.Journal: Advanced science (Weinheim, Baden-Wurttemberg, Germany)In common: rpy2, PyTorch Geometric, anndata, 8 other tools, methods / tools, genetics / omics, 12 references
- [6] doi:10.1038/s41467-026-71759-4 [code]
- CellNiche represents cellular microenvironments in atlas-scale spatial omics data with contrastive learning.Journal: Nature communicationsIn common: Squidpy, PyTorch Geometric, anndata, 8 other tools, 12 references
- [7] doi:10.1016/j.cpblue.2026.100007 [code]
- An integrated single-cell and spatial proteotranscriptomics atlas of fibroblast-driven immunoregulation within the human adult oral cavity.Journal: Cell press blueIn common: rpy2, PyTorch Geometric, SingleCellExperiment, 18 other tools, 1 reference
- [8] doi:10.1002/imt2.70163 [code]
- Spatial multi-omics unveils sphingolipid metabolic reprogramming within the retinal pathological niche.Journal: iMetaIn common: SingleCellExperiment, limma, anndata, 17 other tools, genetics / omics, 2 references
- [9] doi:10.1093/bib/bbag298 [code]
- Empowering multifaceted analysis of spatial transcriptomics data with RGAST.Journal: Briefings in bioinformaticsIn common: rpy2, PyTorch Geometric, anndata, 8 other tools, methods / tools, genetics / omics, 10 references
- [10] doi:10.1038/s44320-026-00208-7 [code]
- Interpretable deep generative ensemble learning for single-cell omics with Hydra.Journal: Molecular systems biologyIn common: SingleCellExperiment, limma, anndata, 15 other tools, 4 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.
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, 125 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:ae0a5e1bc76df25b…
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.
