OSCR

Accurately Deciphering Tissue Heterogeneity From Spatial Multi-Modal and Multi-Omics With STransformer.

Code ↔ Paper

9 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 9 matches · 3 of them tie a paragraph to a whole file, not to given lines: weak matches, whose lines are not tinted
  1. [1] § Experimental Section › Data Preprocessing ↔ load_data.py, lines 251–275 · score 0.75 · highly variable genes, Seurat v3, filtered gene, Scanpy, matrix, Preprocessing
  2. [2] § Experimental Section › Data Description ↔ load_data.py, lines 17–162 · score 0.70 · mouse brain, human tonsil, chicken heart, multi omics, DLPFC, slices
  3. [3] § Experimental Section › Data Description ↔ plot.py, lines 20–61 · score 0.64 · mouse brain, human tonsil, chicken heart, STransformer, spots, DLPFC
  4. [4] § Results › Resolving Mouse Embryonic Brain Structures from Spatial Epigenome‐Transcriptome Data ↔ load_data.py, lines 213–248 · score 0.60 · E15.5, mouse brain, multi omics, ATAC, gene
  5. [5] § Experimental Section › Long‐Range Tissue‐Wide Dependency Learning ↔ transformer/decoder.py, the whole file · a weak match · score 0.59 · Feed Forward Networks, Layer Normalization, dropout
  6. [6] § Experimental Section › Data Preprocessing ↔ BYOL/image_extract.py, lines 155–275 · score 0.56 · resnet50, BYOL, grayscale, filtering
  7. [7] § Experimental Section › Long‐Range Tissue‐Wide Dependency Learning ↔ transformer/transformer.py, the whole file · a weak match · score 0.54 · encoder layer, Multi Head, linearly, embedding, Transformer, model
  8. [8] § Experimental Section › Spatial Graph Construction ↔ graph.py, lines 118–153 · score 0.52 · adjacency matrix, KNN, row, graph, preprocessed
  9. [9] § Experimental Section › Long‐Range Tissue‐Wide Dependency Learning ↔ transformer/transformer.py, the whole file · a weak match · score 0.51 · decoder layer, Multi Head, Transformer, encoder

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 · 313 lines · 12 KB · no license · 3 matches

  1. import scanpy as sc
  2. import pandas as pd
  3. import numpy as np
  4. from torch.utils.data import Dataset
  5. import torch
  6. import os
  7. import anndata as ad
  8. from scipy.sparse import issparse
  9. from graph import graph_construction
  10. import argparse
  11. import warnings
  12. from sklearn.decomposition import PCA
  13. from sklearn.preprocessing import StandardScaler
  14. warnings.filterwarnings('ignore')
  15. def load_data(args):
  16. if args.dataset == 'DLPFC':
  17. ## ---> check name of slice
  18. valid_names = ['151507', '151508', '151509', '151510', '151669', '151670', '151671', '151672', '151673', '151674', '151675', '151676']
  19. if args.slice_name not in valid_names:
  20. raise ValueError("Invalid slice name.")
  21. ## ---> load expression data
  22. adata = dlpfc_data_preprocess(args)
  23. args.adata = adata
  24. if args.slice_name in ['151669', '151670', '151671', '151672']:
  25. args.n_clusters = 5
  26. else:
  27. args.n_clusters = 7
  28. adj = graph_construction(adata, 20, 50, 'KNN')
  29. args.expression_adj = adj['adj_norm'].to(args.device)
  30. args.expression_adj = args.expression_adj.to_dense()
  31. args.expression_tensor = torch.tensor(adata.X.toarray(), dtype=torch.float32)
  32. args.expression_tensor = args.expression_tensor.to(args.device)
  33. ## ---> load tile data
  34. tile_path = f'./image_feature/DLPFC/{args.slice_name}/embeddings.npy'
  35. tile_np = np.load(tile_path)
  36. tile_tensor = torch.from_numpy(tile_np)
  37. args.tile_tensor = tile_tensor.to(args.device)
  38. print('n_clusters:', args.n_clusters)
  39. print('expression data shape:', args.expression_tensor.shape)
  40. print('expression adj shape:', args.expression_adj.shape)
  41. print('tile data shape:', args.tile_tensor.shape)
  42. elif args.dataset == 'AD':
  43. ## ---> check name of slice
  44. valid_names = ['2-5', 'T4857'] # 2-5 for health-control, T4857 for AD
  45. if args.slice_name not in valid_names:
  46. raise ValueError("Invalid slice name.")
  47. ## ---> load expression data
  48. adata, mask = ad_data_preprocess(args)
  49. args.adata = adata
  50. args.n_clusters = 6
  51. adj = graph_construction(adata, 20, 50, 'KNN')
  52. args.expression_adj = adj['adj_norm'].to(args.device)
  53. args.expression_adj = args.expression_adj.to_dense()
  54. args.expression_tensor = torch.tensor(adata.X, dtype=torch.float32)
  55. args.expression_tensor = args.expression_tensor.to(args.device)
  56. ## ---> load tile data
  57. tile_path = f'./image_feature/AD/{args.slice_name}/embeddings.npy'
  58. tile_np = np.load(tile_path)
  59. tile_tensor = torch.from_numpy(tile_np)
  60. args.tile_tensor = tile_tensor[mask].to(args.device)
  61. print('n_clusters:', args.n_clusters)
  62. print('expression data shape:', args.expression_tensor.shape)
  63. print('expression adj shape:', args.expression_adj.shape)
  64. print('tile data shape:', args.tile_tensor.shape)
  65. elif args.dataset == 'Mouse_brain':
  66. ## ---> check name of slice
  67. valid_names = 'ATAC'
  68. if args.slice_name not in valid_names:
  69. raise ValueError("Invalid slice name.")
  70. ## ---> load expression data
  71. adata = multi_omics_data_preprocess(args)
  72. args.adata = adata
  73. args.n_clusters = 12
  74. adj = graph_construction(adata, 20, 50, 'KNN') # use spatial data to construct graph
  75. args.expression_adj = adj['adj_norm'].to(args.device)
  76. args.expression_adj = args.expression_adj.to_dense()
  77. args.expression_tensor = torch.tensor(adata.X, dtype=torch.float32) # expression data is RNA
  78. args.expression_tensor = args.expression_tensor.to(args.device)
  79. ## ---> define ATAC data to take place of tile data
  80. tile_tensor = torch.tensor(adata.obsm['X_atac'], dtype=torch.float32)
  81. args.tile_tensor = tile_tensor.to(args.device)
  82. print('n_clusters:', args.n_clusters)
  83. print('expression data shape:', args.expression_tensor.shape)
  84. print('expression adj shape:', args.expression_adj.shape)
  85. print('atac data shape:', args.tile_tensor.shape)
  86. elif args.dataset == 'Human_tonsil':
  87. ## ---> check name of slice
  88. valid_names = ['s2']
  89. if args.slice_name not in valid_names:
  90. raise ValueError("Invalid slice name.")
  91. ## ---> load expression data
  92. adata = tonsil_data_preprocess(args)
  93. args.adata = adata
  94. args.n_clusters = 4
  95. adj = graph_construction(adata, 12, 50, 'KNN')
  96. args.expression_adj = adj['adj_norm'].to(args.device)
  97. args.expression_adj = args.expression_adj.to_dense()
  98. args.expression_tensor = torch.tensor(adata.X, dtype=torch.float32) # expression data is RNA
  99. args.expression_tensor = args.expression_tensor.to(args.device)
  100. ## ---> define proteome data to take place of tile data
  101. tile_tensor = torch.tensor(adata.obsm['X_adt'], dtype=torch.float32)
  102. args.tile_tensor = tile_tensor.to(args.device)
  103. print('n_clusters:', args.n_clusters)
  104. print('expression data shape:', args.expression_tensor.shape)
  105. print('expression adj shape:', args.expression_adj.shape)
  106. print('tile data shape:', args.tile_tensor.shape)
  107. elif args.dataset == 'chicken_heart':
  108. ## ---> check name of slice
  109. valid_names = ['D7', 'D10', 'D14']
  110. if args.slice_name not in valid_names:
  111. raise ValueError("Invalid slice name.")
  112. ## ---> load expression data
  113. adata = chicken_heart_data_preprocess(args)
  114. args.adata = adata
  115. if args.slice_name in ['D14']:
  116. args.n_clusters = 6
  117. else:
  118. args.n_clusters = 7
  119. adj = graph_construction(adata, 12, 50, 'KNN')
  120. args.expression_adj = adj['adj_norm'].to(args.device)
  121. args.expression_adj = args.expression_adj.to_dense()
  122. args.expression_tensor = torch.tensor(adata.X, dtype=torch.float32)
  123. args.expression_tensor = args.expression_tensor.to(args.device)
  124. ## ---> load tile data
  125. tile_path = f'./image_feature/chicken_heart/{args.slice_name}/embeddings.npy'
  126. tile_np = np.load(tile_path)
  127. tile_tensor = torch.from_numpy(tile_np)
  128. args.tile_tensor = tile_tensor.to(args.device)
  129. print('n_clusters:', args.n_clusters)
  130. print('expression data shape:', args.expression_tensor.shape)
  131. print('expression adj shape:', args.expression_adj.shape)
  132. print('tile data shape:', args.tile_tensor.shape)
  133. else:
  134. raise ValueError("Invalid dataset name.")
  135. def dlpfc_data_preprocess(args):
  136. ## ---> load
  137. expression_path = "./data/DLPFC/{}".format(args.slice_name)
  138. adata = sc.read_visium(expression_path)
  139. adata.var_names_make_unique()
  140. ## ---> preprocess
  141. adata.layers['count'] = adata.X.toarray()
  142. sc.pp.filter_genes(adata, min_cells=50)
  143. sc.pp.filter_genes(adata, min_counts=10)
  144. sc.pp.normalize_total(adata, target_sum=1e6)
  145. sc.pp.highly_variable_genes(adata, flavor="seurat_v3", layer='count', n_top_genes=2000)
  146. adata = adata[:, adata.var['highly_variable'] == True]
  147. sc.pp.scale(adata)
  148. ## ---> add ground truth
  149. Ann_df = pd.read_csv(f"./data/DLPFC/{args.slice_name}/{args.slice_name}_truth.txt", sep='\t', header=None, index_col=0)
  150. Ann_df.columns = ['Ground Truth']
  151. adata.obs['ground_truth'] = Ann_df.loc[adata.obs_names, 'Ground Truth']
  152. adata = adata[~pd.isnull(adata.obs['ground_truth'])]
  153. return adata
  154. def ad_data_preprocess(args):
  155. ## ---> load
  156. expression_path = "./data/AD/{}/{}.h5ad".format(args.slice_name, args.slice_name)
  157. adata = sc.read(expression_path)
  158. adata.var_names_make_unique()
  159. ## ---> preprocess
  160. adata.layers['count'] = adata.X.toarray()
  161. sc.pp.filter_genes(adata, min_cells=50)
  162. sc.pp.filter_genes(adata, min_counts=10)
  163. sc.pp.normalize_total(adata, target_sum=1e6)
  164. sc.pp.highly_variable_genes(adata, flavor="seurat_v3", layer='count', n_top_genes=2000)
  165. adata = adata[:, adata.var['highly_variable'] == True]
  166. sc.pp.scale(adata)
  167. ## ---> add ground truth
  168. mask = adata.obs['Layer'] != 'Noise'
  169. adata = adata[mask] # remove the noise
  170. adata.obs['ground_truth'] = adata.obs['Layer']
  171. adata = adata[~pd.isnull(adata.obs['ground_truth'])]
  172. return adata, mask
  173. def multi_omics_data_preprocess(args):
  174. ## ---> load
  175. omics_path = "./data/mouse_brain/E15.5-S1/E15_adata_atac_12.h5ad"
  176. adata = sc.read(omics_path)
  177. adata.var_names_make_unique()
  178. ## ---> preprocess RNA data
  179. adata.layers['count'] = adata.X.copy()
  180. sc.pp.filter_genes(adata, min_cells=50)
  181. sc.pp.filter_genes(adata, min_counts=10)
  182. sc.pp.normalize_total(adata, target_sum=1e6)
  183. sc.pp.highly_variable_genes(adata, flavor="seurat_v3", layer='count', n_top_genes=2000)
  184. adata = adata[:, adata.var['highly_variable'] == True]
  185. sc.pp.scale(adata)
  186. ## ---> preprocess ATAC data
  187. x_atac = adata.obsm['X_atac']
  188. peak_names = adata.uns['atac_var_names']
  189. adata_atac = ad.AnnData(
  190. X=x_atac,
  191. obs=adata.obs.copy(),
  192. var=pd.DataFrame(index=peak_names),
  193. obsm={'spatial': adata.obsm['spatial']})
  194. sc.pp.normalize_total(adata_atac, target_sum=1e4)
  195. sc.pp.neighbors(adata_atac, use_rep='spatial')
  196. adata_atac = select_morani(adata_atac, nslt=2000)
  197. sc.pp.scale(adata_atac)
  198. adata.obsm['X_atac'] = adata_atac.X
  199. adata.uns['atac_var_names'] = adata_atac.var_names.tolist()
  200. # ---> add ground truth(don't have to modify)
  201. return adata
  202. def tonsil_data_preprocess(args):
  203. ## ---> load
  204. omics_path = f"./data/Human_tonsil/combined_adata_{args.slice_name}.h5ad"
  205. adata = sc.read(omics_path)
  206. adata.var_names_make_unique()
  207. ## ---> preprocess RNA data
  208. adata.layers['count'] = adata.X.copy()
  209. sc.pp.filter_genes(adata, min_cells=50)
  210. sc.pp.filter_genes(adata, min_counts=10)
  211. sc.pp.normalize_total(adata, target_sum=1e6)
  212. sc.pp.highly_variable_genes(adata, flavor="seurat_v3", layer='count', n_top_genes=2000)
  213. adata = adata[:, adata.var['highly_variable'] == True]
  214. sc.pp.scale(adata)
  215. # ---> preprocess ADT data
  216. adata.obsm['X_adt'] = adata.obsm['X_adt'].toarray() # convert sparse matrix to dense
  217. tmp = sc.AnnData(adata.obsm['X_adt'])
  218. sc.pp.scale(tmp)
  219. adata.obsm['X_adt'] = tmp.X
  220. ## ---> add ground truth(remove NA)
  221. adata = adata[~pd.isnull(adata.obs['ground_truth'])]
  222. return adata
  223. def chicken_heart_data_preprocess(args):
  224. ## ---> load
  225. expression_path = f'./data/chicken_heart/{args.slice_name}/chicken_heart_{args.slice_name}.h5ad'
  226. adata = sc.read(expression_path)
  227. adata.var_names_make_unique()
  228. ## ---> preprocess
  229. adata.layers['count'] = adata.X.toarray()
  230. sc.pp.filter_genes(adata, min_cells=50)
  231. sc.pp.filter_genes(adata, min_counts=10)
  232. sc.pp.normalize_total(adata, target_sum=1e6)
  233. sc.pp.highly_variable_genes(adata, flavor="seurat_v3", layer='count', n_top_genes=2000)
  234. adata = adata[:, adata.var['highly_variable'] == True]
  235. sc.pp.scale(adata)
  236. ## ---> add ground truth(don't have to modify)
  237. return adata
  238. def select_morani(adata, nslt=1000, morans_method='scanpy'):
  239. if morans_method == 'scanpy':
  240. print('Computing Moran\'s I...')
  241. morani = sc.metrics.morans_i(adata)
  242. m_order = np.flip(np.argsort(morani))
  243. slt_m = m_order[0:nslt]
  244. adata = adata[:, slt_m]
  245. if issparse(adata.X):
  246. exp_mat = adata.X.toarray().astype(np.float32)
  247. else:
  248. exp_mat = adata.X.astype(np.float32)
  249. print('Finished gene selection')
  250. return adata
  251. else:
  252. raise ValueError("Unknown morans_method")

load_data.py at commit cf827c4, no license · at the source

Overview

Authors: Xingyi Li1,2,3, Jialuo Xu1, Gaoyuan Du1, Xiangting Jia1, Dongmin Zhao1, Chunyan Zhou1, Kexin Xiao1, Jia Gu3, Junnan Zhu4, Xuequn Shang1
  1. School of Computer Science, Northwestern Polytechnical University, Xi'an, Shaanxi, China
  2. Shenzhen Research Institute of Northwestern Polytechnical University, Shenzhen, Guangdong, China
  3. Faculty of Data Science, City University of Macau, Macau, China
  4. State Key Laboratory of Multimodal Artificial Intelligence Systems, Institute of Automation, Chinese Academy of Sciences, Beijing, China
Journal: Advanced science (Weinheim, Baden-Wurttemberg, Germany), volume 13, issue 49, article e75969
Dates: received 31 March 2026; accepted 26 May 2026; published online 9 June 2026; in print September 2026
Type: Research article · Language: English
License: CC BY
Identifiers: DOI 10.1002/advs.75969 · PMID 42263243 · PMCID PMC13336508 · OpenAlex W7163987468
Open access: gold, a free copy (OpenAlex)
Status: code verified
Categories: genetics / omics (modality), human (organism), mouse (organism), other (organism), Alzheimer's / dementia (population)
Methods: Statistics, Machine learning
Keywords: graph neural networks, spatial multi‐modal and multi‐omics, tissue heterogeneity, transformer
MeSH: Alzheimer Disease*, Computational Biology*, Deep Learning*, Proteomics*, Animals, Brain, Chickens, Humans, Mice, Multiomics, Spatial Transcriptomics (* major topic)
Topic: Single-cell and spatial transcriptomics (Molecular Biology, Biochemistry, Genetics and Molecular Biology), according to OpenAlex
Funding: National Natural Science Foundation of China (62433016); Macau Young Scholars Program (AM2024027); Guangdong Basic and Applied Basic Research Foundation (2024A1515012602); Young Talent Fund of Xi'an Association for Science and Technology (0959202513204)
Citations: cited by 1 paper (Europe PMC); 40 references in the paper

Abstract

Advances in spatially resolved technologies enable the simultaneous acquisition of diverse data modalities within a tissue slice while preserving critical spatial context, which presents unprecedented opportunities to decipher intricate tissue heterogeneity. However, existing computational approaches lack the intrinsic flexibility to universally process both spatial multi‐modal and multi‐omics data. Here, we introduce STransformer, a unified deep learning framework designed to seamlessly accommodate a comprehensive landscape of spatial data. By simultaneously capturing short‐range cellular interactions and tissue‐wide semantic patterns, it extracts robust representations to accurately dissect complex tissue heterogeneity. Systematic evaluations across diverse species, tissue types, and data modalities highlight its profound versatility. For spatial multi‐modal data, STransformer delineates intricate anatomical structures in the human cortex, uncovers pathological mechanisms in Alzheimer's disease, and characterizes dynamic spatiotemporal developmental trajectories during chicken cardiogenesis. Scaling to spatial multi‐omics data, STransformer synergizes spatial transcriptomic and proteomic profiles to decipher intricate immune microenvironments within the human tonsil, and jointly analyzes spatial epigenomic and transcriptomic data to infer regulatory mechanisms in the mouse embryonic brain. Consequently, STransformer serves as a highly versatile and robust analytical framework for advancing our understanding of tissue heterogeneity and disease pathogenesis.

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

Repository

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

xingyili/STransformer

License: none: the authors keep all their rights
State: the link answers, verified on 27 September 2026
Evidence: files inventoried
Commit: cf827c46c1e3c21af4f424d980aa056a871eb4be, 1 May 2026
Languages: Python (17)
Size: 33 files, 17 scripts
Software Heritage: not archived
Found in: “Data Availability Statement”
Holds: README
Not found: license file, CITATION.cff, environment file, tests, continuous integration, documentation
Tools: PyTorch (13 files), NumPy (11 files), scikit-learn (5 files), pandas (4 files), Scanpy (4 files), SciPy (3 files), anndata (2 files), Matplotlib (1 file), OpenCV (1 file), Pillow (1 file), PyTorch Geometric (1 file)
Availability: 1 check, the latest on 27 September 2026: the link answers
  • 27 September 2026: the link answers
18 files

The paper's code and data availability statement is in the Data section.

Tracing map

Proposed by the machine: these links were found in the paper and verified at the source, without human review. The map will receive a Zenodo DOI once one of the paper's authors has validated it with their ORCID.

What the map holds:

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

The open‐source Python implementation of STransformer is available at https://github.com/xingyili/STransformer. All datasets utilized in this study are publicly accessible and can be downloaded from Zenodo via the following link: https://zenodo.org/records/19345129.

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, 10 authors, 4 keywords, 11 MeSH terms, 4 funders, 39 references.

Cite

This paper

Li, X., Xu, J., Du, G., Jia, X., Zhao, D., Zhou, C., Xiao, K., Gu, J., Zhu, J., & Shang, X. (2026). Accurately Deciphering Tissue Heterogeneity From Spatial Multi-Modal and Multi-Omics With STransformer. Advanced science (Weinheim, Baden-Wurttemberg, Germany), 13(49), e75969. https://doi.org/10.1002/advs.75969

BibTeX

@article{li2026accurately,
author = {Li, Xingyi and Xu, Jialuo and Du, Gaoyuan and Jia, Xiangting and Zhao, Dongmin and Zhou, Chunyan and Xiao, Kexin and Gu, Jia and Zhu, Junnan and Shang, Xuequn},
title = {{Accurately Deciphering Tissue Heterogeneity From Spatial Multi-Modal and Multi-Omics With STransformer}},
journal = {Advanced science (Weinheim, Baden-Wurttemberg, Germany)},
year = {2026},
month = jun,
volume = {13},
number = {49},
pages = {e75969},
publisher = {Wiley},
issn = {2198-3844},
doi = {10.1002/advs.75969},
url = {https://doi.org/10.1002/advs.75969},
pmid = {42263243},
pmcid = {PMC13336508}
}

RIS

TY - JOUR
AU - Li, Xingyi
AU - Xu, Jialuo
AU - Du, Gaoyuan
AU - Jia, Xiangting
AU - Zhao, Dongmin
AU - Zhou, Chunyan
AU - Xiao, Kexin
AU - Gu, Jia
AU - Zhu, Junnan
AU - Shang, Xuequn
TI - Accurately Deciphering Tissue Heterogeneity From Spatial Multi-Modal and Multi-Omics With STransformer
T2 - Advanced science (Weinheim, Baden-Wurttemberg, Germany)
J2 - Adv Sci (Weinh)
PY - 2026
DA - 2026/06/09
VL - 13
IS - 49
SP - e75969
SN - 2198-3844
PB - Wiley
DO - 10.1002/advs.75969
UR - https://doi.org/10.1002/advs.75969
LA - en
ER -

CSL-JSON

{
"id": "10.1002/advs.75969",
"type": "article-journal",
"title": "Accurately Deciphering Tissue Heterogeneity From Spatial Multi-Modal and Multi-Omics With STransformer",
"container-title": "Advanced science (Weinheim, Baden-Wurttemberg, Germany)",
"author": [
{
"family": "Li",
"given": "Xingyi"
},
{
"family": "Xu",
"given": "Jialuo"
},
{
"family": "Du",
"given": "Gaoyuan"
},
{
"family": "Jia",
"given": "Xiangting"
},
{
"family": "Zhao",
"given": "Dongmin"
},
{
"family": "Zhou",
"given": "Chunyan"
},
{
"family": "Xiao",
"given": "Kexin"
},
{
"family": "Gu",
"given": "Jia"
},
{
"family": "Zhu",
"given": "Junnan"
},
{
"family": "Shang",
"given": "Xuequn"
}
],
"container-title-short": "Adv Sci (Weinh)",
"volume": "13",
"issue": "49",
"page": "e75969",
"DOI": "10.1002/advs.75969",
"PMID": "42263243",
"PMCID": "PMC13336508",
"ISSN": "2198-3844",
"publisher": "Wiley",
"URL": "https://doi.org/10.1002/advs.75969",
"language": "en",
"issued": {
"date-parts": [
[
2026,
6,
9
]
]
}
}

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.1093/bioinformatics/btag540 [code]
Deciphering spatial heterogeneity by multimodal spatial transcriptomics modelling with SpatialModal.
Journal: Bioinformatics (Oxford, England)
In common: PyTorch Geometric, anndata, Scanpy, 7 other tools, Alzheimer's / dementia, genetics / omics, mouse, 14 references, author Xingyi Li
[2] doi:10.1038/s41592-026-03194-8 [code]
Beyond benchmarking: an expert-guided consensus approach to spatially aware clustering.
Journal: Nature methods
In common: PyTorch Geometric, anndata, Scanpy, 7 other tools, genetics / omics, 7 references
[3] 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: PyTorch Geometric, anndata, Scanpy, 6 other tools, genetics / omics, 8 references
[4] 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 Technologies
Journal: Research Square (preprint)
In common: PyTorch Geometric, anndata, Scanpy, 8 other tools, genetics / omics, 5 references
[5] doi:10.1093/bib/bbag298 [code]
Empowering multifaceted analysis of spatial transcriptomics data with RGAST.
Journal: Briefings in bioinformatics
In common: PyTorch Geometric, anndata, Scanpy, 6 other tools, genetics / omics, mouse, 6 references
[6] doi:10.1038/s42003-026-10462-y [code]
SpaDC enables sequence-based integrative analysis and regulatory inference of spatial chromatin accessibility data.
Journal: Communications biology
In common: anndata, Scanpy, PyTorch, 5 other tools, genetics / omics, mouse, 5 references
[7] doi:10.1093/bib/bbag331 [code]
SPOmiAlign: a modality-agnostic computational framework for multimodal spatial omics alignment enabled by a feature matching foundation model.
Journal: Briefings in bioinformatics
In common: anndata, Scanpy, OpenCV, 6 other tools, genetics / omics, mouse, 3 references
[8] doi:10.1093/bioinformatics/btag430 [code]
SPIDER: spatially integrated denoising via embedding regularization with single cell supervision.
Journal: Bioinformatics (Oxford, England)
In common: PyTorch Geometric, anndata, Scanpy, 6 other tools, genetics / omics, 3 references
[9] doi:10.1038/s41467-026-71759-4 [code]
CellNiche represents cellular microenvironments in atlas-scale spatial omics data with contrastive learning.
Journal: Nature communications
In common: PyTorch Geometric, anndata, Scanpy, 6 other tools, mouse, 3 references
[10] doi:10.1093/bib/bbag404 [code]
Navigating cell maps by deep learning integration of single-cell and spatially resolved transcriptomics.
Journal: Briefings in bioinformatics
In common: PyTorch Geometric, anndata, Scanpy, 6 other tools, genetics / omics, mouse, 2 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.