OSCR

Reconstructing the single-cell spatiotemporal dynamics of glioblastoma invasion.

Code ↔ Paper

17 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 17 matches · 4 of them tie a paragraph to a whole file without given lines: weak matches, whose lines are not tinted
  1. [1] § Methods › Detecting microenvironmental interactions › Blood vessel disorganization ↔ src/gliotrace/build_tracks_and_vascularity/vascular_segmentation/vascular_segmentation.py, lines 38 to 136 · score 0.69 · vasculature length, image stacks, skeletonized, semantic, segmentation, vessel · Report a mismatch
  2. [2] § Methods › Assessing dose-dependent effects on cell statistics and morphological transition rates › Differential transition matrices ↔ src/gliotrace/feature_and_hmm_pipline/transition_utils.py, lines 148 to 241 · score 0.63 · binary features, transition matrix, transition probabilities, fitted, GLM, treatment · Report a mismatch
  3. [3] § Methods › Detecting tumor cell morphologies and phenotypic switching › Covariate Hidden Markov Model (HMM) with GLM transitions and CNN-based emissions ↔ src/gliotrace/feature_and_hmm_pipline/hmm_glm.py, lines 107 to 188 · score 0.62 · log likelihoods, log softmax, logits, emission, CNN, Covariate · Report a mismatch
  4. [4] § Methods › Interpolation of data › Algorithm 1 ↔ src/gliotrace/build_tracks_and_vascularity/classify_and_track/find_cell.py, lines 126 to 167 · score 0.61 · cell body mask, connected components, filter · Report a mismatch
  5. [5] § Methods › Detecting tumor cell proliferation and movement › Cell tracking ↔ src/gliotrace/build_tracks_and_vascularity/classify_and_track/track_classify.py, the whole file · a weak match · score 0.59 · Kalman filter, image stack, candidate, intensity, detection, channels · Report a mismatch
  6. [6] § Methods › Detecting tumor cell proliferation and movement › Cell tracking ↔ src/gliotrace/build_tracks_and_vascularity/classify_and_track/find_cell.py, lines 56 to 124 · score 0.58 · cell bodies, image stack, intensity, pixels, detection, channels · Report a mismatch
  7. [7] § Results › Hidden Markov modeling reveals dynamic transitions between morphological states ↔ src/gliotrace/build_tracks_and_vascularity/classify_and_track/track_classify.py, the whole file · a weak match · score 0.58 · Kalman filtering, morphology classification, tumor cells, interactions, network, tracking · Report a mismatch
  8. [8] § Methods › Detecting tumor cell proliferation and movement › ROI-level summary measures ↔ src/gliotrace/build_tracks_and_vascularity/classify_and_track/find_cell.py, lines 56 to 124 · score 0.57 · pixel intensity, green channel, empty, slice, stack, frame · Report a mismatch
  9. [9] § Methods › Detecting tumor cell morphologies and phenotypic switching › Covariate Hidden Markov Model (HMM) with GLM transitions and CNN-based emissions ↔ Example/class_run_example.ipynb, lines 246 to 257 · score 0.57 · logistic regression, scikit-learn, likelihood, posterior, class, probabilities · Report a mismatch
  10. [10] § Methods › Detecting tumor cell morphologies and phenotypic switching › Covariate Hidden Markov Model (HMM) with GLM transitions and CNN-based emissions ↔ src/gliotrace/feature_and_hmm_pipline/viterbi_paths.py, lines 8 to 52 · score 0.57 · hidden state sequence, Viterbi, emission, algorithm, probability, HMM · Report a mismatch
  11. [11] § Methods › Detecting tumor cell morphologies and phenotypic switching › Morphological classifier ↔ src/gliotrace/initalize_class/defaults.py, the whole file · a weak match · score 0.56 · diffuse translocation, perivascular translocation, crowded, locomotion, round, branching · Report a mismatch
  12. [12] § Methods › Assessing dose-dependent effects on cell statistics and morphological transition rates › Differential transition matrices ↔ src/gliotrace/gliotrace_class.py, lines 896 to 1029 · score 0.56 · jackknife variance, transition matrix, fitting, treatment, patient, HMM · Report a mismatch
  13. [13] § Methods › Assessing dose-dependent effects on cell statistics and morphological transition rates › Differential transition matrices ↔ src/gliotrace/feature_and_hmm_pipline/transition_utils.py, lines 148 to 241 · score 0.55 · transition probability matrix, GLM models, fitting, treatment, HMM · Report a mismatch
  14. [14] § Methods › Detecting tumor cell morphologies and phenotypic switching › Covariate Hidden Markov Model (HMM) with GLM transitions and CNN-based emissions ↔ src/gliotrace/feature_and_hmm_pipline/hmm_glm.py, lines 107 to 188 · score 0.54 · forward backward, posterior, emission, GLM, Covariate, CNN · Report a mismatch
  15. [15] § Methods › Interpolation of data › Algorithm 1 ↔ src/gliotrace/build_tracks_and_vascularity/classify_and_track/find_cell.py, lines 126 to 167 · score 0.52 · cell body mask, dilating, disk, threshold, frame · Report a mismatch
  16. [16] § Results › Automated classification reveals distinct glioblastoma invasion morphologies ↔ src/gliotrace/initalize_class/defaults.py, the whole file · a weak match · score 0.51 · diffuse translocation, perivascular translocation, crowded, locomotion, round, branching · Report a mismatch
  17. [17] § Methods › Interpolation of data › Algorithm 1 ↔ src/gliotrace/build_tracks_and_vascularity/classify_and_track/find_cell.py, lines 169 to 226 · score 0.51 · Gaussian smoothing, bulk, intensity, Threshold, mask · Report a mismatch

Paper

Loaded from Europe PMC by your browser; OSCR does not store it: doi.org · Europe PMC

The paper is loaded when this pane is shown.

The authors' code

Python · 290 lines · 9.6 KB · Apache-2.0 · 5 matches

  1. from scipy.ndimage import gaussian_laplace
  2. from skimage.filters import threshold_otsu, gaussian
  3. from skimage.morphology import disk, dilation, erosion
  4. from skimage.measure import label, regionprops_table
  5. from skimage.util import img_as_float
  6. import matplotlib.pyplot as plt
  7. import numpy as np
  8. def extract_block_features_pair(im_a, im_b, coords, blocksize):
  9. """
  10. Python replacement of matlab function for extracting snapshots
  11. @ Author: André Lasses Armatowski
  12. """
  13. h, w = im_a.shape
  14. half = blocksize // 2
  15. patches_a = []
  16. patches_b = []
  17. valid_coords = []
  18. for x, y in coords:
  19. x = int(x)
  20. y = int(y)
  21. x_min = x - half
  22. x_max = x + half + 1
  23. y_min = y - half
  24. y_max = y + half + 1
  25. if x_min < 0 or y_min < 0 or x_max > w or y_max > h:
  26. continue
  27. patch_a = im_a[y_min:y_max, x_min:x_max]
  28. patch_b = im_b[y_min:y_max, x_min:x_max]
  29. patches_a.append(patch_a.ravel())
  30. patches_b.append(patch_b.ravel())
  31. valid_coords.append((x, y))
  32. if len(patches_a) == 0:
  33. return (
  34. np.empty((0, blocksize * blocksize)),
  35. np.empty((0, blocksize * blocksize)),
  36. np.empty((0, 2)),
  37. )
  38. return (
  39. np.stack(patches_a, axis=0),
  40. np.stack(patches_b, axis=0),
  41. np.array(valid_coords),
  42. )
  43. def macro_track2(
  44. mystack,
  45. vasc,
  46. sigmah,
  47. cutoff,
  48. blocksize,
  49. mode="normal",
  50. debug=True,
  51. ):
  52. """
  53. Detect cell bodies in the green channel of a brain-slice image stack and
  54. extract per-cell coordinates, intensities, and feature snapshots.
  55. Parameters
  56. ----------
  57. mystack : numpy.ndarray
  58. Green-channel image stack (height × width x frames).
  59. vasc : numpy.ndarray
  60. Red-channel image stack corresponding to the same frames.
  61. sigmah : float
  62. Standard deviation of the LoG (Laplacian of Gaussian) filter used for
  63. cell detection.
  64. cutoff : float
  65. Intensity threshold above which pixels are considered potential cells.
  66. blocksize : int
  67. Size of the square patch extracted around each detected cell for
  68. classification.
  69. mode : str
  70. Either 'normal' or 'sparse'. When set to 'sparse', alternative
  71. detection parameters are used for very faint or sparse cell populations.
  72. Returns
  73. -------
  74. cellsx : list of array-like
  75. Frame-wise x-coordinates of detected cells.
  76. cellsy : list of array-like
  77. Frame-wise y-coordinates of detected cells.
  78. intensity : list of array-like
  79. Pixel intensities at each detected (x, y) coordinate.
  80. FEAT : list of numpy.ndarray
  81. List of matrices where each entry corresponds to one frame and each row
  82. contains the compressed feature snapshot extracted from the green
  83. channel around a detected cell.
  84. VASC : list of numpy.ndarray
  85. Same structure as FEAT, but snapshots are extracted from the red channel.
  86. Notes
  87. -----
  88. In debug mode, each processed frame is visualized both as:
  89. - green channel alone
  90. - green + red combined
  91. Detected cells are annotated with white circles for inspection.
  92. @ Author: André Lasses Armatowski, Madeleine Skeppås, Sven Nelander
  93. """
  94. mystack_float = img_as_float(mystack)
  95. vasc_float = img_as_float(vasc)
  96. num_frames = mystack.shape[2]
  97. cellsx = [np.empty(0, dtype=int) for _ in range(num_frames)]
  98. cellsy = [np.empty(0, dtype=int) for _ in range(num_frames)]
  99. intensity = [np.empty(0, dtype=float) for _ in range(num_frames)]
  100. FEAT = [np.empty((0, blocksize * blocksize), dtype=float)
  101. for _ in range(num_frames)]
  102. VASC = [np.empty((0, blocksize * blocksize), dtype=float)
  103. for _ in range(num_frames)]
  104. # 3x3 neighborhood footprint without center pixel (for local max test)
  105. footprint = np.array([[1, 1, 1], [1, 0, 1], [1, 1, 1]], dtype=bool)
  106. for i in range(num_frames):
  107. im = mystack[:, :, i]
  108. im_vasc = vasc[:, :, i]
  109. im_f = mystack_float[:, :, i]
  110. im_vasc_f = vasc_float[:, :, i]
  111. xs = []
  112. ys = []
  113. # --- LoG-like filter step --------------------------------------------
  114. blob_im_1 = -gaussian_laplace(im_f, sigma=sigmah)
  115. # --- Local maxima for blob detection ---------------------------------
  116. dilated = dilation(blob_im_1, footprint=footprint)
  117. bw = blob_im_1 >= dilated
  118. # --- Cell body masks --------------------------------------------------
  119. # Note, cutoff needs to be retuned
  120. cellbodypixels_1 = dilation(
  121. erosion(blob_im_1 > cutoff, disk(3)), disk(3))
  122. thr_im = threshold_otsu(im_f)
  123. cellbodypixels_2 = im_f > thr_im
  124. cellbodypixels_3 = dilation(cellbodypixels_2, disk(3))
  125. # If cells are sparse: use cellbodypixels_1. Else: cellbodypixels_3
  126. if mode == "sparse":
  127. cellbodypixels = cellbodypixels_1
  128. else:
  129. cellbodypixels = cellbodypixels_3
  130. # --- Label connected components as cell bodies -----------------------
  131. L = label(cellbodypixels, connectivity=2)
  132. if L.max() > 0:
  133. regs = regionprops_table(L, properties=("label", "area"))
  134. areas = np.array(regs["area"])
  135. labels = np.array(regs["label"])
  136. # Ignore regions with area > 3000
  137. bad_labels = labels[areas > 3000]
  138. if bad_labels.size > 0:
  139. mask_bad = np.isin(L, bad_labels)
  140. L[mask_bad] = 0
  141. cellbodypixels = L
  142. # --- Bulk region mask via Gaussian smoothing -------------------------
  143. imsmooth = gaussian(im_f, sigma=30, preserve_range=True)
  144. thr_bulk = threshold_otsu(imsmooth)
  145. mask = imsmooth > thr_bulk
  146. # bulk present if max intensity > 200 in MATLAB (Here range is [0,1])
  147. bulk_present = imsmooth.max() > (200 / 255)
  148. # --- Iterate over each cell body object ------------------------------
  149. xs_list = []
  150. ys_list = []
  151. for k in range(1, cellbodypixels.max() + 1):
  152. px = cellbodypixels == k
  153. if not px.any():
  154. continue
  155. if bulk_present:
  156. coords_y, coords_x = np.where(
  157. bw & (blob_im_1 > cutoff) & px & cellbodypixels_2 & (~mask)
  158. )
  159. else:
  160. coords_y, coords_x = np.where(
  161. bw & (blob_im_1 > cutoff) & px & cellbodypixels_2
  162. )
  163. if coords_x.size > 1:
  164. xmean = int(np.round(coords_x.mean()))
  165. ymean = int(np.round(coords_y.mean()))
  166. area2 = px.sum()
  167. if cellbodypixels_3[ymean, xmean] and area2 > 200 and area2 < 1000:
  168. xs_list.append(xmean)
  169. ys_list.append(ymean)
  170. else:
  171. xs_list.extend(coords_x.tolist())
  172. ys_list.extend(coords_y.tolist())
  173. elif coords_x.size == 1:
  174. xs_list.append(int(coords_x[0]))
  175. ys_list.append(int(coords_y[0]))
  176. # else: no coordinates for this cell body
  177. xs = np.array(xs_list, dtype=int)
  178. ys = np.array(ys_list, dtype=int)
  179. cellsy[i] = ys
  180. cellsx[i] = xs
  181. # --- Extract features if any cells present ---------------------------
  182. if xs.size > 0:
  183. coords = np.stack([xs, ys], axis=1) # (x, y)
  184. featA, featB, valid_coords = extract_block_features_pair(
  185. im, im_vasc, coords, blocksize # gbm channel # vascular channel
  186. )
  187. # If all points were too close to edges, valid_coords can be empty
  188. if valid_coords.shape[0] > 0:
  189. # Update coordinates to those actually used in feature extraction
  190. cellsx[i] = valid_coords[:, 0]
  191. cellsy[i] = valid_coords[:, 1]
  192. FEAT[i] = featA
  193. VASC[i] = featB
  194. iy = valid_coords[:, 1]
  195. ix = valid_coords[:, 0]
  196. intensity[i] = im[iy, ix]
  197. else:
  198. cellsx[i] = np.zeros(0, dtype=int)
  199. cellsy[i] = np.zeros(0, dtype=int)
  200. intensity[i] = np.zeros(0)
  201. FEAT[i] = np.zeros((0, blocksize * blocksize))
  202. VASC[i] = np.zeros((0, blocksize * blocksize))
  203. # --- Debug visualization ---------------------------------------------
  204. if debug and cellsx[i].size > 0:
  205. fig, axes = plt.subplots(1, 2, figsize=(8, 4))
  206. # Left: composite of vasc (R) and green (G)
  207. rgb = np.zeros((im.shape[0], im.shape[1], 3), dtype=float)
  208. rgb[..., 0] = img_as_float(im_vasc)
  209. rgb[..., 1] = img_as_float(im)
  210. axes[0].imshow(rgb)
  211. axes[0].scatter(
  212. cellsx[i], cellsy[i], marker="o", facecolors="none", edgecolors="w"
  213. )
  214. axes[0].set_title(f"Frame {i} - Composite")
  215. axes[0].axis("off")
  216. # Right: green channel only
  217. green_rgb = np.zeros_like(rgb)
  218. green_rgb[..., 1] = img_as_float(im)
  219. axes[1].imshow(green_rgb)
  220. axes[1].scatter(
  221. cellsx[i], cellsy[i], marker="o", facecolors="none", edgecolors="w"
  222. )
  223. axes[1].set_title(f"Frame {i} - Green only")
  224. axes[1].axis("off")
  225. plt.tight_layout()
  226. plt.show()
  227. # --- Check if all frames are empty --------------------------------------
  228. all_empty = True
  229. for x in cellsx:
  230. if x.size != 0:
  231. all_empty = False
  232. break
  233. return cellsx, cellsy, intensity, FEAT, VASC, all_empty

find_cell.py at commit b8a18c3, under Apache-2.0 · at the source

Overview

Authors: Hitesh Bhagavanbhai Mangukiya1, Madeleine Skeppås1, André Lasses Armatowski2, Irem Uppman1, Linnea Hallin2, Filippa Kruse1, Clara Nordquist1, Soumi Kundu1, Maria Berglund1, Adam A. Malik2, Cecilia Krona1, Rebecka Jörnsten2, Sven Nelander1,3,4
  1. Department of Immunology, Genetics and Pathology, Uppsala University,Uppsala, Sweden
  2. Department of Mathematical Sciences, Chalmers University of Technology and University of Gothenburg,Gothenburg, Sweden
  3. Science for Life Laboratory (SciLifeLab), Uppsala University,Uppsala, Sweden
  4. Uppsala University Future Institutes (UUniFI), Uppsala University,Uppsala, Sweden
Institutions: Uppsala University (Sweden); Chalmers University of Technology (Sweden)
Journal: Nature communications, volume 17, issue 1, article 11245
Dates: received 5 March 2025; accepted 7 October 2026; published online 2 November 2026
Type: Research article · Language: English
License: CC BY
Identifiers: DOI 10.1038/s41467-026-78908-9 · PMID 42971997 · PMCID PMC13728213 · OpenAlex W4408775631
Open access: gold, a free copy (OpenAlex)
Status: code verified (how the code is found and verified)
Categories: histology / microscopy (modality), human (organism), mouse (organism), other condition (population), cellular / molecular (subfield)
Methods: Preprocessing, Connectivity, Spectral & time-frequency, Statistics, Smoothing, state filtering, decompositions, Machine learning, Evoked potentials, fMRI & imaging
Keywords: CNS cancer, Cancer microenvironment, Cell invasion, Image processing, Time-lapse imaging
MeSH: Brain Neoplasms*, Glioblastoma*, Single-Cell Analysis*, Animals, Brain, Cell Line, Tumor, Cell Movement, Humans, Machine Learning, Mice, Microscopy, Confocal, Neoplasm Invasiveness (* major topic)
Topic: Glioma Diagnosis and Treatment (Oncology, Medicine), according to OpenAlex
Citations: not cited yet (Europe PMC); 59 references in the paper

Abstract

Glioblastoma invasion into healthy brain tissue remains a major barrier to effective treatment, but the dynamic single-cell behaviors underlying this process remain difficult to measure across patient models. Here, we introduce GlioTrace, an ex vivo imaging and computational framework for real-time tracking of glioblastoma invasion in patient-derived xenograft brain slices. Combining whole-specimen confocal microscopy with machine learning-based morphology classification and probabilistic modeling of state transitions, GlioTrace reconstructs how tumor cells switch between invasion phenotypes and how these dynamics are shaped by local tissue context and therapy. Across six patient-derived models, GlioTrace reveals that invasion plasticity is patient-specific, spatially organized, and modulated by vascular proximity and microglial interaction. Targeted therapies selectively alter phenotype composition and transition probabilities, whereas standard-of-care treatment enriches a highly motile, transition-connected branching state consistent with a treatment-tolerant invasive phenotype. Thus, GlioTrace makes glioblastoma invasion a measurable dynamic process for comparing patient-specific treatment responses in living brain tissue.

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

Gliomethods/GlioTrace

License: Apache-2.0
State: the link answers, verified on 4 November 2026
Evidence: files inventoried
Commit: b8a18c3393c141461538b20ea67d231ddc94461f, 5 October 2026
Languages: Python (40), Jupyter (3)
Size: 61 files, 43 scripts
Software Heritage: not archived
Found in: “Code availability”
Holds: README, license file, environment (pyproject.toml), 3 notebooks
Not found: CITATION.cff, tests, continuous integration, documentation
Tools: NumPy (24 files), pandas (16 files), SciPy (12 files), PyTorch (4 files), imageio (3 files), Matplotlib (3 files), OpenCV (3 files), scikit-image (3 files), scikit-learn (3 files), h5py (1 file), NetworkX (1 file), tifffile (1 file)
Availability: 1 check, the latest on 4 November 2026: the link answers
  • 4 November 2026: the link answers
45 files

doi:10.5281/zenodo-21996609

License: none: the authors keep all their rights
State: the link is dead, verified on 4 November 2026
Evidence: found in the paper
Software Heritage: not checked
Found in: the references
Not found: README, license file, CITATION.cff, environment file, tests, continuous integration, documentation
Availability: 1 check, the latest on 4 November 2026: the link is dead (HTTP 404)
  • 4 November 2026: the link is dead (HTTP 404)

Code availability

The full code base for the GlioTrace framework and additional image processing scripts are available as a GitHub repository under an Apache-2.0 licence (https://github.com/Gliomethods/GlioTrace.git), and the release (v0.2.0) used in this study is archived in Zenodo59.

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:

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

The single-cell RNA sequencing data generated in this study have been deposited in the Gene Expression Omnibus (GEO) database under accession code GSE344470. (https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE344470). A subset of the time-lapse imaging dataset generated in this study (U3028MG; baseline, dasatinib- and thapsigargin-treated) has been deposited in Zenodo under (https://doi.org/10.5281/zenodo.21981544). Clinical and genomic annotations for the patient-derived cultures used in this study are available from the HGCC resource (https://hgcc.se) and are provided in Supplementary Dataset 1, sheet 2. All remaining data supporting the findings of this study are available within the article, its Supplementary Information and its Source Data file. Source data are provided with this paper.

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

Versions

The history of this record: each version stored by the harvester or made by a correction of its authors or of the maintainers of its code, and what changed in its facts. The texts of the paper (its abstract, its availability statements) are not part of it; versions that changed only those are not listed.

Version 1, 4 November 2026: the first record

Recorded: type, language, journal, volume, issue, pages, dates, 13 authors, 5 keywords, 12 MeSH terms, 3 funders, 53 references.

Cite

This paper

Mangukiya, H. B., Skeppås, M., Lasses Armatowski, A., Uppman, I., Hallin, L., Kruse, F., Nordquist, C., Kundu, S., Berglund, M., Malik, A. A., Krona, C., Jörnsten, R., & Nelander, S. (2026). Reconstructing the single-cell spatiotemporal dynamics of glioblastoma invasion. Nature communications, 17(1), 11245. https://doi.org/10.1038/s41467-026-78908-9

BibTeX

@article{mangukiya2026reconstructing,
author = {Mangukiya, Hitesh Bhagavanbhai and Skeppås, Madeleine and Lasses Armatowski, André and Uppman, Irem and Hallin, Linnea and Kruse, Filippa and Nordquist, Clara and Kundu, Soumi and Berglund, Maria and Malik, Adam A. and Krona, Cecilia and Jörnsten, Rebecka and Nelander, Sven},
title = {{Reconstructing the single-cell spatiotemporal dynamics of glioblastoma invasion}},
journal = {Nature communications},
year = {2026},
month = nov,
volume = {17},
number = {1},
pages = {11245},
publisher = {Nature Publishing Group},
issn = {2041-1723},
doi = {10.1038/s41467-026-78908-9},
url = {https://doi.org/10.1038/s41467-026-78908-9},
pmid = {42971997},
pmcid = {PMC13728213}
}

RIS

TY - JOUR
AU - Mangukiya, Hitesh Bhagavanbhai
AU - Skeppås, Madeleine
AU - Lasses Armatowski, André
AU - Uppman, Irem
AU - Hallin, Linnea
AU - Kruse, Filippa
AU - Nordquist, Clara
AU - Kundu, Soumi
AU - Berglund, Maria
AU - Malik, Adam A.
AU - Krona, Cecilia
AU - Jörnsten, Rebecka
AU - Nelander, Sven
TI - Reconstructing the single-cell spatiotemporal dynamics of glioblastoma invasion
T2 - Nature communications
J2 - Nat Commun
PY - 2026
DA - 2026/11/02
VL - 17
IS - 1
SP - 11245
SN - 2041-1723
PB - Nature Publishing Group
DO - 10.1038/s41467-026-78908-9
UR - https://doi.org/10.1038/s41467-026-78908-9
LA - en
ER -

CSL-JSON

{
"id": "10.1038/s41467-026-78908-9",
"type": "article-journal",
"title": "Reconstructing the single-cell spatiotemporal dynamics of glioblastoma invasion",
"container-title": "Nature communications",
"author": [
{
"family": "Mangukiya",
"given": "Hitesh Bhagavanbhai"
},
{
"family": "Skeppås",
"given": "Madeleine"
},
{
"family": "Lasses Armatowski",
"given": "André"
},
{
"family": "Uppman",
"given": "Irem"
},
{
"family": "Hallin",
"given": "Linnea"
},
{
"family": "Kruse",
"given": "Filippa"
},
{
"family": "Nordquist",
"given": "Clara"
},
{
"family": "Kundu",
"given": "Soumi"
},
{
"family": "Berglund",
"given": "Maria"
},
{
"family": "Malik",
"given": "Adam A."
},
{
"family": "Krona",
"given": "Cecilia"
},
{
"family": "Jörnsten",
"given": "Rebecka"
},
{
"family": "Nelander",
"given": "Sven"
}
],
"container-title-short": "Nat Commun",
"volume": "17",
"issue": "1",
"page": "11245",
"DOI": "10.1038/s41467-026-78908-9",
"PMID": "42971997",
"PMCID": "PMC13728213",
"ISSN": "2041-1723",
"publisher": "Nature Publishing Group",
"URL": "https://doi.org/10.1038/s41467-026-78908-9",
"language": "en",
"issued": {
"date-parts": [
[
2026,
11,
2
]
]
}
}

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.1038/s41467-025-61999-1 [code]
The invasion phenotypes of glioblastoma depend on plastic and reprogrammable cell states.
Journal: Nature communications
In common: other condition, mouse, cellular / molecular, 14 references, 5 authors
[2] doi:10.1038/s41467-024-53954-3 [code]
Reconstructing the regulatory programs underlying the phenotypic plasticity of neural cancers.
Journal: Nature communications
In common: pandas, SciPy, NumPy, other condition, cellular / molecular, 7 references, 2 authors
[3] doi:10.1093/neuonc/noab264 [code]
Real-time evaluation of glioblastoma growth in patient-specific zebrafish xenografts.
Journal: Neuro-oncology
In common: OpenCV, scikit-image, pandas, 3 other tools, other condition, mouse, 7 references, author Cecilia Krona
[4] doi:10.1371/journal.pcbi.1013831 [code]
Anatomically aware simulation of patient-specific glioblastoma xenografts.
Journal: PLoS computational biology
In common: other condition, mouse, 5 references, 2 authors
[5] doi:10.1016/j.celrep.2024.115149 [code]
Single-nucleus and spatial landscape of the sub-ventricular zone in human glioblastoma.
Journal: Cell reports
In common: imageio, tifffile, NetworkX, 9 other tools, other condition, cellular / molecular, 4 references
[6] doi:10.1016/j.xcrm.2026.102766 [code]
A longitudinal single-cell and spatial multiomic atlas of pediatric high-grade glioma.
Journal: Cell reports. Medicine
In common: imageio, tifffile, NetworkX, 8 other tools, other condition, cellular / molecular, 4 references
[7] doi:10.1038/s41540-025-00492-3 [code]
Mathematical modeling of multicellular tumor spheroids quantifies inter-patient and intra-tumor heterogeneity.
Journal: NPJ systems biology and applications
In common: other condition, 3 references, 2 authors
[8] doi:10.1038/s41467-022-31340-1 [code]
Spatiotemporal analysis of glioma heterogeneity reveals COL1A1 as an actionable target to disrupt tumor progression.
Journal: Nature communications
In common: imageio, scikit-image, PyTorch, 3 other tools, other condition, mouse, 6 references
[9] doi:10.1038/s41467-026-70470-8 [code]
A blueprint for local and distal invasion programs in glioblastoma.
Journal: Nature communications
In common: other condition, mouse, cellular / molecular, 10 references
[10] doi:10.1038/s41467-024-47985-z [code]
VC-resist glioblastoma cell state: vessel co-option as a key driver of chemoradiation resistance.
Journal: Nature communications
In common: pandas, NumPy, other condition, mouse, cellular / molecular, 8 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.

Add the badge to the code's README

OSCR: the badge of this paper

If you are an author or a maintainer of this paper's code, you can add this badge. It says what OSCR knows of the paper (its code, its validated tracing map) and links the code to this page. Paste one of these snippets under the README's title. Keep the two marks around it, so that the badge can be replaced in place and is never added twice. OSCR changes nothing in your repository.

Markdown
<!-- oscr-badge:start -->
[![OSCR](https://openscicode.org/badge/doi/10.1038/s41467-026-78908-9.svg)](https://openscicode.org/badge/doi/10.1038/s41467-026-78908-9)
<!-- oscr-badge:end -->
reStructuredText
.. oscr-badge:start

.. image:: https://openscicode.org/badge/doi/10.1038/s41467-026-78908-9.svg
   :target: https://openscicode.org/badge/doi/10.1038/s41467-026-78908-9
   :alt: OSCR

.. oscr-badge:end
HTML
<!-- oscr-badge:start -->
<a href="https://openscicode.org/badge/doi/10.1038/s41467-026-78908-9"><img src="https://openscicode.org/badge/doi/10.1038/s41467-026-78908-9.svg" alt="OSCR"></a>
<!-- oscr-badge:end -->

On GitHub, open the README, choose Edit (the pencil), paste the snippet under the title, then "Commit changes".

If you choose to, you can have the badge kept up to date for you, with oscr badge --write from the command line or with the GitHub Action in your repository's workflows. Every other form and option (a card, AsciiDoc, LaTeX, shields.io) is on the badge 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: code errors and mismatches between the code and the paper about this paper and its code, from readers and its authors, beside the paper and its tracing map.

Report a mismatch between the code and the paper · Report a code error (signed in)

Reproductions: reports from readers who ran the authors' code and did not get the paper's result, what they ran, with which environment, commit and data.

Report a reproduction failure (signed in)

Versions of its code: the releases of its code tied to a version of this paper (the preprint, the accepted manuscript, the version of record…), each with the tracing map versioned with it.

Activity: what happens around this paper: new versions of its record, its map's validation, discussions and reproductions. It opens with sign-in.