OSCR

The critical role of the endogenous immune compartment after CAR T cell therapy in recurrent GBM.

Code ↔ Paper

30 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 30 matches · 2 of them tie a paragraph to a whole file, not to given lines: weak matches, whose lines are not tinted
  1. [1] § STAR★METHODS › QUANTIFICATION AND STATISTICAL ANALYSIS › Single Cell RNA Sequencing data analysis › Myeloid Program Characterization in CSF ↔ tumor_analysis/Fig_5B_G_tumor_myeloid_back-calculation_plotting.ipynb, lines 76–210 · score 0.99 · alpha_H, alpha_W, beta_loss, l1_ratio, max_iter, update_H
  2. [2] § RESULTS › Longitudinal evolution of CAR and non-CAR T cells in the CSF post infusion ↔ ip_analysis/Figure_2E_2F.ipynb, lines 85–92 · score 0.88 · IL10RA, IL12RB1, IL2RG, IL21R, IL7R, IL6ST
  3. [3] § RESULTS › Phenotypic shift of NK cells is associated with improved clinical outcomes ↔ csf_analysis/Figure_4C.ipynb, lines 46–51 · score 0.82 · KIR3DL1, IL18RAP, FCGR3A, CX3CR1, DUSP4, KLRG1
  4. [4] § STAR★METHODS › QUANTIFICATION AND STATISTICAL ANALYSIS › Single Cell RNA Sequencing data analysis › Use of cNMF programs in myeloid cells ↔ tumor_analysis/Fig_5B_G_tumor_myeloid_back-calculation_plotting.ipynb, lines 76–210 · score 0.79 · cNMF, program matrix, gene matrix, myeloid program, factorization, row
  5. [5] § STAR★METHODS › QUANTIFICATION AND STATISTICAL ANALYSIS › Single Cell RNA Sequencing data analysis › Myeloid Program Characterization in CSF ↔ csf_analysis/Fig_5_csf_myeloid_code.py, lines 225–251 · score 0.78 · gProfiler, num_iter, cNMF, density, Myeloid, score
  6. [6] § STAR★METHODS › QUANTIFICATION AND STATISTICAL ANALYSIS › Single Cell RNA Sequencing data analysis › Kaplan–Meier & exact log-rank tests ↔ csf_analysis/Figure_4G_4H.ipynb, lines 48–76 · score 0.76 · CD56 dim CD16, Progression free survival, pos NK, D0, D7, patients
  7. [7] § STAR★METHODS › QUANTIFICATION AND STATISTICAL ANALYSIS › Single Cell RNA Sequencing data analysis › Ligand-receptor analysis ↔ csf_analysis/Figures_6GHJ_Supp_7E_ligand_receptor_analysis.ipynb, lines 263–357 · score 0.74 · Ligand receptor, LRscore, NATMI, strength, LIANA, edge
  8. [8] § RESULTS › Phenotypic shift of NK cells is associated with improved clinical outcomes ↔ tumor_analysis/DataS1_Tumor_NK_cell_subtypes.Rmd, lines 154–167 · score 0.74 · KIR2DL3, FCGR3A, CX3CR1, NK cell, FGFBP2, PRDM1
  9. [9] § STAR★METHODS › QUANTIFICATION AND STATISTICAL ANALYSIS › Single Cell RNA Sequencing data analysis › Malignant cell state annotation ↔ tumor_analysis/Fig_S4G_Malignant_cell_state_by_sample.rmd, lines 164–204 · score 0.71 · AddModuleScore, cell state, OPC, AC, Malignant, signatures
  10. [10] § RESULTS › Longitudinal evolution of GBM tumor tissue post infusion ↔ tumor_analysis/Fig_S4J_HallmarkEMT_by_dose_postinfusion.rmd, lines 58–66 · score 0.70 · Hallmark epithelial, mesenchymal transition, EMT, malignant cells, S4J, dose
  11. [11] § STAR★METHODS › QUANTIFICATION AND STATISTICAL ANALYSIS › Single Cell RNA Sequencing data analysis › Cell type annotation ↔ tumor_analysis/Fig_S4B_tumor_annotation_dotplot.rmd, lines 39–72 · score 0.69 · plasma cell, canonical lineage, manually refined, myeloid cells, NK cells, subset
  12. [12] § RESULTS › Longitudinal evolution of GBM tumor tissue post infusion ↔ tumor_analysis/Fig_S4I_HallmarkEMT_pval_by_malig_state.rmd, lines 180–195 · score 0.66 · Hallmark epithelial, mesenchymal transition, S4I, EMT, AC, cell state
  13. [13] § STAR★METHODS › QUANTIFICATION AND STATISTICAL ANALYSIS › Single Cell RNA Sequencing data analysis › Dimensionality reduction & batch correction ↔ tumor_analysis/Fig_5B_G_tumor_myeloid_back-calculation_plotting.ipynb, lines 258–283 · score 0.64 · highly variable genes, UMAP, HVGs, neighbor, batch, resolution
  14. [14] § STAR★METHODS › QUANTIFICATION AND STATISTICAL ANALYSIS › Single Cell RNA Sequencing data analysis › Cell type-specific differential expression ↔ csf_analysis/helpers.r, lines 115–157 · score 0.64 · pseudo bulk, pbDS, aggregated, muscat, filters, gene
  15. [15] § STAR★METHODS › QUANTIFICATION AND STATISTICAL ANALYSIS › FFPE bulk RNA-seq alignment and processing ↔ tumor_analysis/data_processing_tumor_bulkRNA/2_gene_symbol_annotation.rmd, lines 26–59 · score 0.63 · gene symbols, Ensembl gene, IDs, human, bulk, RNA
  16. [16] § STAR★METHODS › QUANTIFICATION AND STATISTICAL ANALYSIS › Single Cell RNA Sequencing data analysis › Quality control ↔ csf_analysis/csf pp scrublet.ipynb, lines 23–25 · score 0.59 · expected doublet rate, Scanpy, Scrublet, batch, CSF
  17. [17] § STAR★METHODS › QUANTIFICATION AND STATISTICAL ANALYSIS › Single Cell RNA Sequencing data analysis › Quality control ↔ ip_analysis/ip pp scrublet.ipynb, lines 20–22 · score 0.59 · expected doublet rate, Scanpy, Scrublet, batch
  18. [18] § RESULTS › CSF immune landscape after ICV CAR T cell therapy ↔ csf_analysis/Figure_1J.ipynb, lines 41–49 · score 0.59 · HLA DRA, IFI6, STAT1, GNLY, PRF1, CD38
  19. [19] § STAR★METHODS › QUANTIFICATION AND STATISTICAL ANALYSIS › Single Cell RNA Sequencing data analysis › Cell type annotation ↔ tumor_analysis/data_processing_tumor_scRNA/tumor_preprocessing_6_InferCNV_refinement.Rmd, lines 195–224 · score 0.57 · malignant cells, subclustered, inferred, tumor cells, Seurat
  20. [20] § STAR★METHODS › QUANTIFICATION AND STATISTICAL ANALYSIS › Single Cell RNA Sequencing data analysis › Gene set enrichment analysis ↔ tumor_analysis/Fig_S4H_Malig_cells_GSEA_Hallmark.rmd, lines 193–206 · score 0.57 · clusterProfiler, ranked gene, MSigDB, log2, pre, tumor
  21. [21] § STAR★METHODS › QUANTIFICATION AND STATISTICAL ANALYSIS › Single Cell RNA Sequencing data analysis › Dimensionality reduction & batch correction ↔ csf_analysis/helpers.r, lines 490–522 · score 0.57 · cell cycle, union, variance, batch, phase, variable
  22. [22] § STAR★METHODS › QUANTIFICATION AND STATISTICAL ANALYSIS › Single Cell RNA Sequencing data analysis › Cell type-specific differential expression ↔ tumor_analysis/Fig_3I_MalignantCell_DEG_post_vs_pre.rmd, lines 139–200 · score 0.56 · FindMarkers, fold change, LR, malignant cells, expanded, subsetted
  23. [23] § RESULTS › Treg expansion inversely correlates with tumor size reduction ↔ csf_analysis/Figures_6GHJ_Supp_7E_ligand_receptor_analysis.ipynb, lines 426–470 · score 0.55 · effector signature, HLA DRA, CTLA4, responders, CD8, CSF
  24. [24] § STAR★METHODS › QUANTIFICATION AND STATISTICAL ANALYSIS › Single Cell RNA Sequencing data analysis › Use of cNMF programs in myeloid cells ↔ csf_analysis/Fig_5_csf_myeloid_code.py, lines 225–251 · score 0.54 · cNMF, CSF myeloid, spectra, filtered, genes
  25. [25] § RESULTS › Longitudinal evolution of GBM tumor tissue post infusion ↔ tumor_analysis/Fig_3B_C_tumorcell_umap.rmd, lines 103–120 · score 0.53 · post treatment GBM, matched pre, cell infusion, tissue, tumor, patients
  26. [26] § STAR★METHODS › QUANTIFICATION AND STATISTICAL ANALYSIS › Single Cell RNA Sequencing data analysis › Cell type annotation ↔ tumor_analysis/Fig_S4C_infercnv.rmd, lines 160–181 · score 0.53 · annotate cells, tumor cells, S4C, malignant cells, inferred, Lymphoid
  27. [27] § STAR★METHODS › QUANTIFICATION AND STATISTICAL ANALYSIS › Single Cell RNA Sequencing data analysis › Ambient RNA correction ↔ tumor_analysis/data_processing_tumor_scRNA/tumor_preprocessing_1.5_pytable_cellbender_out_compatibility_convert.sh, the whole file · a weak match · score 0.52 · empty droplets, CellBender, downstream, matrices, RNA, filtering
  28. [28] § RESULTS › Longitudinal evolution of CAR and non-CAR T cells in the CSF post infusion ↔ ip_analysis/Figure_2A.ipynb, lines 51–91 · score 0.52 · inhibitory receptor, Il6st, signals, IP
  29. [29] § RESULTS › CSF immune landscape after ICV CAR T cell therapy ↔ csf_analysis/Figures_6GHJ_Supp_7E_ligand_receptor_analysis.ipynb, lines 426–470 · score 0.51 · HLA DRA, LAG3, effector, receptor, discovery, signatures
  30. [30] § STAR★METHODS › QUANTIFICATION AND STATISTICAL ANALYSIS › Single Cell RNA Sequencing data analysis › Tumor Cell Ranger and Seurat preprocessing ↔ tumor_analysis/data_processing_tumor_scRNA/tumor_preprocessing_1.5_pytable_cellbender_out_compatibility_convert.sh, the whole file · a weak match · score 0.51 · empty droplets, Cellbender, preprocessing, Seurat, RNA, filtered

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

Jupyter notebook · 563 lines · 17 KB · MIT · 3 matches

  1. # %% [markdown]
  2. # ## 1. Imports and plotting defaults
  3. # %% [markdown]
  4. # ## Minimal software dependencies
  5. # at least:
  6. #
  7. # ```text
  8. # anndata
  9. # scanpy
  10. # pandas
  11. # numpy
  12. # scipy
  13. # scikit-learn
  14. # matplotlib
  15. # seaborn
  16. # igraph
  17. # leidenalg
  18. # ```
  19. # %%
  20. from pathlib import Path
  21. import anndata as ad
  22. import matplotlib as mpl
  23. import matplotlib.pyplot as plt
  24. import numpy as np
  25. import pandas as pd
  26. import scanpy as sc
  27. import scipy.sparse as sp
  28. import seaborn as sns
  29. from sklearn.decomposition import non_negative_factorization
  30. RANDOM_STATE = 42
  31. sc.settings.verbosity = 2
  32. # Keep text editable in exported vector PDFs.
  33. mpl.rcParams["pdf.fonttype"] = 42
  34. mpl.rcParams["ps.fonttype"] = 42
  35. mpl.rcParams["savefig.transparent"] = True
  36. # %% [markdown]
  37. # ## 2. Editable paths and analysis parameters
  38. # %% [markdown]
  39. # ### Repository assumptions
  40. #
  41. # This notebook is intended to run from a pre-filtered AnnData `.h5ad` object whose `.X` matrix contains the myeloid cells to analyze. If starting from a whole tumor/all-cell object, subset to the desired myeloid cells before running this notebook.
  42. #
  43. # Required files in the working directory or supplied as paths below:
  44. # - input `.h5ad` object
  45. # - `Myeloid_NMF_Average_Gene_Spectra.txt` reference spectra file from the Miller et al. back-calculation workflow
  46. # %%
  47. ADATA_PATH = Path("path_to_your_pre_filtered_myeloid_object.h5ad")
  48. SPECTRA_PATH = Path("./Myeloid_NMF_Average_Gene_Spectra.txt")
  49. # This Average Gene Spectra file is available from the BernsteinLab/Calculate_Myeloid_cNMF_Usage github repository: https://github.com/BernsteinLab/Calculate_Myeloid_cNMF_Usage under Required Files
  50. UMAP_OUT_DIR = Path("program_usage_umaps_pdf")
  51. PRE_PANEL_OUT_DIR = Path("pre_only_program_usage_panels_pdf")
  52. UMAP_OUT_DIR.mkdir(parents=True, exist_ok=True)
  53. PRE_PANEL_OUT_DIR.mkdir(parents=True, exist_ok=True)
  54. REQUIRED_OBS_COLUMNS = ("sample_name", "response_status")
  55. N_COMPONENTS = 14
  56. N_TOP_HVG = 4000
  57. LEIDEN_RESOLUTION = 0.7
  58. UMAP_USAGE_VMAX = 50
  59. SHOW_PLOTS = True
  60. SAVE_PDF = True
  61. # %% [markdown]
  62. # ## 3. Helper functions
  63. # %%
  64. def validate_inputs(
  65. adata_path: Path,
  66. spectra_path: Path,
  67. required_obs_columns: tuple[str, ...] = ("sample_name", "response_status"),
  68. ) -> None:
  69. """Fail early if required repository inputs are missing."""
  70. missing_files = [str(p) for p in (adata_path, spectra_path) if not p.exists()]
  71. if missing_files:
  72. raise FileNotFoundError(
  73. "Missing required input file(s): " + ", ".join(missing_files)
  74. )
  75. def validate_adata_schema(adata: ad.AnnData, required_obs_columns: tuple[str, ...]) -> None:
  76. """Validate expected AnnData fields before analysis/plotting."""
  77. missing = [col for col in required_obs_columns if col not in adata.obs.columns]
  78. if missing:
  79. raise KeyError(
  80. "Missing required adata.obs column(s): " + ", ".join(missing)
  81. )
  82. if adata.n_obs == 0 or adata.n_vars == 0:
  83. raise ValueError("Input AnnData has zero cells or zero genes.")
  84. def ensure_scanpy_obsm_keys(adata: ad.AnnData) -> ad.AnnData:
  85. """
  86. Convert zellkonverter-style dimensional-reduction keys to Scanpy conventions
  87. when needed.
  88. """
  89. if "UMAP" in adata.obsm and "X_umap" not in adata.obsm:
  90. adata.obsm["X_umap"] = np.asarray(adata.obsm["UMAP"])
  91. if "PCA" in adata.obsm and "X_pca" not in adata.obsm:
  92. adata.obsm["X_pca"] = np.asarray(adata.obsm["PCA"])
  93. return adata
  94. def normalize_data_before_backcalculation(adata: ad.AnnData) -> ad.AnnData:
  95. """
  96. Normalize the cell-by-gene matrix as expected for cNMF program back-calculation:
  97. scale each gene to unit variance without zero-centering sparse matrices.
  98. """
  99. adata_normalized = adata.copy()
  100. if sp.issparse(adata_normalized.X):
  101. sc.pp.scale(adata_normalized, zero_center=False)
  102. if np.isnan(adata_normalized.X.data).sum() > 0:
  103. print("[warning] NaNs detected in normalized sparse matrix.")
  104. else:
  105. gene_sd = adata_normalized.X.std(axis=0, ddof=1)
  106. gene_sd[gene_sd == 0] = 1
  107. adata_normalized.X = adata_normalized.X / gene_sd
  108. if np.isnan(adata_normalized.X).sum() > 0:
  109. print("[warning] NaNs detected in normalized dense matrix.")
  110. return adata_normalized
  111. def backcalculate_myeloid_program_usage(
  112. adata_normalized: ad.AnnData,
  113. myeloid_program_matrix: pd.DataFrame,
  114. n_components: int = 14,
  115. random_state: int | None = None,
  116. ) -> pd.DataFrame:
  117. """
  118. Back-calculate reference myeloid program usage in a new AnnData object.
  119. """
  120. adata_normalized.obs_names_make_unique()
  121. X_df = pd.DataFrame(
  122. data=adata_normalized.X.toarray() if sp.issparse(adata_normalized.X) else adata_normalized.X,
  123. columns=adata_normalized.var_names,
  124. index=adata_normalized.obs_names,
  125. )
  126. spectra_t = myeloid_program_matrix.T
  127. matched_spectra_t = spectra_t.filter(items=X_df.columns)
  128. matched_X = X_df.filter(items=matched_spectra_t.columns)
  129. if matched_X.shape[1] == 0:
  130. raise ValueError("No overlapping genes were found between `adata` and `myeloid_program_matrix`.")
  131. W, H, n_iter = non_negative_factorization(
  132. matched_X.to_numpy(dtype=np.float64),
  133. W=None,
  134. H=matched_spectra_t.to_numpy(dtype=np.float64),
  135. n_components=n_components,
  136. init="random",
  137. update_H=False,
  138. solver="cd",
  139. beta_loss="frobenius",
  140. tol=1e-4,
  141. max_iter=1000,
  142. alpha_W=0.0,
  143. alpha_H="same",
  144. l1_ratio=0.0,
  145. random_state=random_state,
  146. verbose=0,
  147. shuffle=False,
  148. )
  149. usage = pd.DataFrame(W, columns=myeloid_program_matrix.columns, index=adata_normalized.obs_names)
  150. row_sums = usage.sum(axis=1).replace(0, np.nan)
  151. usage_pct = usage.div(row_sums, axis=0).mul(100).fillna(0)
  152. print(f"[done] Back-calculated usage for {usage_pct.shape[0]:,} cells and {usage_pct.shape[1]} programs.")
  153. return usage_pct
  154. def build_sample_order(adata: ad.AnnData, sample_col: str = "sample_name") -> list[str]:
  155. """
  156. Order samples by patient number and then Pre before Post, falling back to
  157. lexicographic order if patient/timepoint parsing is unavailable.
  158. """
  159. samples = pd.Index(adata.obs[sample_col].dropna().astype(str).unique())
  160. patient_num = samples.str.extract(r"^P(\d+)_", expand=False)
  161. timepoint = samples.str.extract(r"_(Pre|Post)$", expand=False)
  162. if patient_num.notna().any():
  163. patient_key = pd.to_numeric(patient_num, errors="coerce").fillna(np.inf).to_numpy()
  164. timepoint_key = timepoint.map({"Pre": 0, "Post": 1}).fillna(99).astype(int).to_numpy()
  165. order = np.lexsort((timepoint_key, patient_key))
  166. return samples[order].tolist()
  167. return sorted(samples.tolist())
  168. def safe_filename(value: str) -> str:
  169. """Return a filesystem-safe version of a program/sample name."""
  170. return "".join(c if c.isalnum() or c in "._-+" else "_" for c in str(value))
  171. # %% [markdown]
  172. # ## 4. Load input data
  173. # %%
  174. validate_inputs(ADATA_PATH, SPECTRA_PATH, REQUIRED_OBS_COLUMNS)
  175. adata = sc.read_h5ad(ADATA_PATH)
  176. adata = ensure_scanpy_obsm_keys(adata)
  177. validate_adata_schema(adata, REQUIRED_OBS_COLUMNS)
  178. # This notebook assumes ADATA_PATH already points to the myeloid-cell object to analyze.
  179. adata_myeloid = adata
  180. adata_myeloid_adjusted = adata.copy()
  181. original_glioma_spectra = pd.read_table(SPECTRA_PATH, sep="\t", index_col=0)
  182. print(adata_myeloid_adjusted)
  183. print(original_glioma_spectra.shape)
  184. # %% [markdown]
  185. # ## 5. Back-calculate myeloid program usage
  186. # %%
  187. adata_myeloid_normalized = normalize_data_before_backcalculation(adata_myeloid_adjusted)
  188. adata_myeloid_bc_usages = backcalculate_myeloid_program_usage(
  189. adata_myeloid_normalized,
  190. original_glioma_spectra,
  191. n_components=N_COMPONENTS,
  192. random_state=RANDOM_STATE,
  193. )
  194. adata_myeloid_bc_usages = adata_myeloid_bc_usages.loc[adata_myeloid_adjusted.obs_names]
  195. adata_myeloid_adjusted.obsm["program_usage"] = adata_myeloid_bc_usages.values
  196. adata_myeloid_adjusted.uns["program_names"] = list(adata_myeloid_bc_usages.columns)
  197. prog_names = list(adata_myeloid_bc_usages.columns)
  198. usage = adata_myeloid_bc_usages
  199. progs = prog_names
  200. adata_myeloid_bc_usages.head()
  201. # %% [markdown]
  202. # ## 6. cluster myeloid cells and compute UMAP
  203. # %%
  204. adata_myeloid_adjusted_cluster = adata_myeloid_adjusted.copy()
  205. adata_myeloid_adjusted_cluster.layers["counts"] = adata_myeloid_adjusted_cluster.X.copy()
  206. sc.pp.normalize_total(adata_myeloid_adjusted_cluster)
  207. sc.pp.log1p(adata_myeloid_adjusted_cluster)
  208. sc.pp.highly_variable_genes(
  209. adata_myeloid_adjusted_cluster,
  210. n_top_genes=N_TOP_HVG,
  211. batch_key="sample_name",
  212. )
  213. sc.tl.pca(adata_myeloid_adjusted_cluster, random_state=RANDOM_STATE)
  214. sc.pp.neighbors(adata_myeloid_adjusted_cluster, random_state=RANDOM_STATE)
  215. sc.tl.umap(adata_myeloid_adjusted_cluster, random_state=RANDOM_STATE)
  216. sc.tl.leiden(
  217. adata_myeloid_adjusted_cluster,
  218. flavor="igraph",
  219. n_iterations=2,
  220. resolution=LEIDEN_RESOLUTION,
  221. random_state=RANDOM_STATE,
  222. )
  223. # %% [markdown]
  224. # ## 7. General clustering/metadata UMAPs
  225. # %%
  226. sc.pl.umap(
  227. adata_myeloid_adjusted_cluster,
  228. color=["leiden"],
  229. legend_loc="on data",
  230. legend_fontoutline=2,
  231. show=SHOW_PLOTS,
  232. )
  233. sc.pl.umap(
  234. adata_myeloid_adjusted_cluster,
  235. color=["sample_name"],
  236. legend_fontoutline=2,
  237. show=SHOW_PLOTS,
  238. )
  239. for obs_col in ["cell_type_manual", "timepoint", "response_status"]:
  240. if obs_col in adata_myeloid_adjusted_cluster.obs.columns:
  241. sc.pl.umap(
  242. adata_myeloid_adjusted_cluster,
  243. color=[obs_col],
  244. legend_fontoutline=2,
  245. show=SHOW_PLOTS,
  246. )
  247. # %% [markdown]
  248. # ## 8. UMAPs colored by back-calculated program usage
  249. # %%
  250. for prog in prog_names:
  251. col = f"{prog}_usage"
  252. adata_myeloid_adjusted_cluster.obs[col] = (
  253. adata_myeloid_adjusted_cluster.obs_names
  254. .to_series()
  255. .map(adata_myeloid_bc_usages[prog])
  256. .fillna(0)
  257. .astype(float)
  258. )
  259. sc.pl.umap(
  260. adata_myeloid_adjusted_cluster,
  261. color=col,
  262. cmap="viridis",
  263. title=f"Usage of {prog}",
  264. vmax=UMAP_USAGE_VMAX,
  265. show=SHOW_PLOTS,
  266. )
  267. if SAVE_PDF:
  268. ax = sc.pl.umap(
  269. adata_myeloid_adjusted_cluster,
  270. color=col,
  271. cmap="viridis",
  272. title=f"Usage of {prog}",
  273. vmax=UMAP_USAGE_VMAX,
  274. show=False,
  275. return_fig=False,
  276. )
  277. fig = ax.figure
  278. out_path = UMAP_OUT_DIR / f"{safe_filename(prog)}__usage_umap.pdf"
  279. fig.savefig(out_path, format="pdf", bbox_inches="tight")
  280. plt.close(fig)
  281. print(f"[saved] {out_path}")
  282. # %% [markdown]
  283. # ## 9. program usage panels: violin, box, sample mean dots
  284. # %%
  285. palette = {"responder": "#1f77b4", "nonresponder": "#d62728"}
  286. group_order = ["responder", "nonresponder"]
  287. sample_order = build_sample_order(adata, sample_col="sample_name")
  288. def _set_violin_alpha(ax, alpha: float = 0.35) -> None:
  289. """
  290. Seaborn violinplot does not reliably honor alpha across versions.
  291. This sets alpha on violin PolyCollections only.
  292. """
  293. import matplotlib.collections as mcoll
  294. for coll in ax.collections:
  295. if isinstance(coll, mcoll.PolyCollection):
  296. coll.set_alpha(alpha)
  297. def build_pre_mask_and_order(
  298. adata: ad.AnnData,
  299. sample_order: list[str],
  300. sample_col: str = "sample_name",
  301. timepoint_col: str = "timepoint",
  302. patient_col: str = "patient",
  303. ) -> tuple[pd.Series, list[str]]:
  304. """Create a Pre-only mask and ordered Pre sample list."""
  305. if timepoint_col in adata.obs.columns:
  306. pre_mask = adata.obs[timepoint_col].astype(str).str.lower().eq("pre")
  307. else:
  308. pre_mask = adata.obs[sample_col].astype(str).str.contains(r"_Pre\b", regex=True)
  309. pre_samples = adata.obs.loc[pre_mask, sample_col].dropna().unique().tolist()
  310. sample_order_pre = [s for s in sample_order if s in set(pre_samples)]
  311. if len(sample_order_pre) == 0:
  312. order_cols = [sample_col]
  313. if patient_col in adata.obs.columns:
  314. order_cols.append(patient_col)
  315. tmp = adata.obs.loc[pre_mask, order_cols].dropna().drop_duplicates().copy()
  316. if patient_col in tmp.columns:
  317. tmp["patient_num"] = tmp[patient_col].astype(str).str.extract(r"(\d+)", expand=False).astype(float)
  318. tmp = tmp.sort_values(["patient_num", patient_col, sample_col])
  319. else:
  320. tmp = tmp.sort_values(sample_col)
  321. sample_order_pre = tmp[sample_col].tolist()
  322. return pre_mask, sample_order_pre
  323. def plot_pre_program_usage_panels(
  324. adata: ad.AnnData,
  325. usage: pd.DataFrame,
  326. progs: list[str],
  327. sample_order: list[str],
  328. out_dir: Path,
  329. palette: dict[str, str],
  330. group_order: list[str],
  331. show_plots: bool = True,
  332. save_pdf: bool = True,
  333. ) -> None:
  334. """Export one editable vector PDF per program for Pre-only per-cell usage."""
  335. pre_mask, sample_order_pre = build_pre_mask_and_order(adata, sample_order)
  336. for prog in progs:
  337. dfp = adata.obs.loc[pre_mask, ["sample_name", "response_status"]].copy()
  338. if isinstance(usage, pd.DataFrame):
  339. u = pd.to_numeric(usage.loc[adata.obs_names, prog], errors="coerce").to_numpy()
  340. else:
  341. u = pd.to_numeric(usage[prog], errors="coerce").to_numpy()
  342. dfp["usage"] = u[pre_mask.to_numpy()]
  343. dfp["response_status"] = (
  344. dfp["response_status"]
  345. .astype("string")
  346. .str.strip()
  347. .str.lower()
  348. )
  349. dfp = dfp[dfp["response_status"].isin(group_order)].copy()
  350. dfp["sample_name"] = pd.Categorical(
  351. dfp["sample_name"],
  352. categories=sample_order_pre,
  353. ordered=True,
  354. )
  355. sample_mean = (
  356. dfp.groupby(["sample_name", "response_status"], observed=True)["usage"]
  357. .mean()
  358. .rename("mean_usage")
  359. .reset_index()
  360. )
  361. n_cells = (
  362. dfp.groupby("sample_name", observed=True)
  363. .size()
  364. .reindex(sample_order_pre)
  365. .fillna(0)
  366. .astype(int)
  367. )
  368. if dfp["usage"].dropna().empty:
  369. print(f"[skip] {prog}: no usable data after Pre + response_status filtering")
  370. continue
  371. fig_w = 1.25 * len(sample_order_pre) if len(sample_order_pre) > 0 else 8
  372. fig, ax = plt.subplots(figsize=(fig_w, 6.2))
  373. sns.violinplot(
  374. data=dfp,
  375. x="sample_name",
  376. y="usage",
  377. hue="response_status",
  378. palette=palette,
  379. order=sample_order_pre,
  380. hue_order=group_order,
  381. cut=0,
  382. inner=None,
  383. linewidth=0,
  384. dodge=True,
  385. ax=ax,
  386. )
  387. _set_violin_alpha(ax, alpha=0.35)
  388. sns.boxplot(
  389. data=dfp,
  390. x="sample_name",
  391. y="usage",
  392. hue="response_status",
  393. palette=palette,
  394. order=sample_order_pre,
  395. hue_order=group_order,
  396. showfliers=True,
  397. width=0.25,
  398. linewidth=1.1,
  399. flierprops=dict(
  400. marker="o",
  401. markersize=4,
  402. markerfacecolor="none",
  403. markeredgecolor="gray",
  404. alpha=0.6,
  405. ),
  406. ax=ax,
  407. )
  408. sns.scatterplot(
  409. data=sample_mean,
  410. x="sample_name",
  411. y="mean_usage",
  412. hue="response_status",
  413. palette=palette,
  414. hue_order=group_order,
  415. s=65,
  416. edgecolor="black",
  417. linewidth=0.9,
  418. legend=False,
  419. ax=ax,
  420. zorder=6,
  421. )
  422. handles, labels = ax.get_legend_handles_labels()
  423. ax.legend(
  424. handles[:2],
  425. labels[:2],
  426. title="response_status",
  427. bbox_to_anchor=(1.02, 1),
  428. loc="upper left",
  429. frameon=True,
  430. )
  431. ax.tick_params(axis="x", rotation=90)
  432. ax.set_xticks(range(len(sample_order_pre)))
  433. ax.set_xticklabels([f"{s}\n(n={n_cells.loc[s]})" for s in sample_order_pre])
  434. ax.set_title(f"{prog} (Pre)", fontsize=14, pad=12)
  435. ax.set_xlabel("")
  436. ax.set_ylabel("Per-cell program usage")
  437. fig.tight_layout()
  438. if save_pdf:
  439. out_path = out_dir / f"{safe_filename(prog)}__Pre_violin_box_meandot.pdf"
  440. fig.savefig(out_path, format="pdf", bbox_inches="tight")
  441. print(f"[saved] {out_path}")
  442. if show_plots:
  443. plt.show()
  444. plt.close(fig)
  445. plot_pre_program_usage_panels(
  446. adata=adata,
  447. usage=usage,
  448. progs=progs,
  449. sample_order=sample_order,
  450. out_dir=PRE_PANEL_OUT_DIR,
  451. palette=palette,
  452. group_order=group_order,
  453. show_plots=SHOW_PLOTS,
  454. save_pdf=SAVE_PDF,
  455. )

Fig_5B_G_tumor_myeloid_back-calculation_plotting.ipynb at commit 6b6fa76, under MIT · at the source

Overview

Authors: Nelson F. Freeburg1,2, Daniel Chafamo1,2, Gayathri Konanur Gopikrishna1, Regan M. Murphy3, Jacqueline J. Peng1, Shridhar Parthasarathy1, Sydney Dumont4,5,6,7, Edward G. Estrada3, Meghan T. Logun4,5,6, Yusha Sun8, Xin Wang9, Payal Grover4,5,6, Jesse L. Rodriguez4,5,6, Daniel L. Zhang4, Kristen Park8, Yao Fu10, Nadine Ben Hamouda11,12, Isaias Hernandez-Verdin13, Lamia Lamrani14, Kelly A. Hicks4,5,6
and 30 other authorsNatalie A. Cooper4,5,6, Christina Ekwegbara15, Emma Grace Bawden16, Joshua J. Waterfall17,18, Jaime Fuentealba14, Marion Alcantara14,19, John T. Seykora20, Stephen M. Prouty21, David Barrett22, Esha Banerjee23, Arin Cox23, Charles-Antoine Assenmacher23, Camilla Macia5,24, Melinda Yin5,24, Erica L. Carpenter5,24, Guo-li Ming9,25,26,27, Catherine Sautès-Fridman13,28, Wolf H. Fridman13,28, Eric Tartour11,12, E. John Wherry29,30, Sebastian Amigorena16, Joseph A. Fraietta5,31,32,33, MacLean P. Nasrallah6,32, Hongjun Song9,4,6,27,34, Tyler E. Miller3,35, Stephen J. Bagley6,24, Donald M. O’Rourke4,5,6,33, Zev A. Binder4,5,6,36, Cécile Alanio4,11,37,36, Dana Silverbush1,4,5,36,38
38 affiliations
  1. Cancer Biology Department, Perelman School of Medicine at the University of Pennsylvania, Philadelphia, PA 19104, USA
  2. These authors contributed equally
  3. Department of Pathology, Case Western Reserve University School of Medicine and Case Comprehensive Cancer Center, Cleveland, OH, USA
  4. Department of Neurosurgery, Perelman School of Medicine at the University of Pennsylvania, Philadelphia, PA 19104, USA
  5. Center for Cellular Immunotherapies, Perelman School of Medicine at the University of Pennsylvania, Philadelphia, PA 19104, USA
  6. GBM Translational Center of Excellence, Abramson Cancer Center, Perelman School of Medicine at the University of Pennsylvania, Philadelphia, PA 19104, USA
  7. Cell and Molecular Biology Graduate Group, Perelman School of Medicine at the University of Pennsylvania, Philadelphia, PA, USA
  8. Neuroscience Graduate Group, Perelman School of Medicine at the University of Pennsylvania, Philadelphia, PA, USA
  9. Department of Neuroscience and Mahoney Institute for Neurosciences, Perelman School of Medicine at the University of Pennsylvania, Philadelphia, PA, USA
  10. Department of Biology, School of Arts and Sciences, University of Pennsylvania, Philadelphia, PA, USA
  11. Université Paris Cité, INSERM, PARCC, Paris, France
  12. Department of Immunology, APHP, Hôpital Européen Georges Pompidou (HEGP)-Hôpital Necker, Paris, France
  13. Centre de Recherche des Cordeliers, Sorbonne Université, INSERM, Université Paris Cité, 75006 Paris, France
  14. CellAction, Center for Cancer Immunotherapy, INSERM U932, Institut Curie, Saint-Cloud, France
  15. Clinical Immunology Laboratory, Institut Curie, Paris, France
  16. Institut Curie, PSL University, INSERM U932, Immunity and Cancer, 75005 Paris, France
  17. Department of Translational Research, PSL University, Institut Curie, Paris, France
  18. INSERM U1330, PSL University, Institut Curie Research Center, Paris, France
  19. Clinical Hematology Unit, Institut Curie, Saint-Cloud, France
  20. Departments of Dermatology and Pathology, Perelman School of Medicine at the University of Pennsylvania, Philadelphia, PA, USA
  21. Department of Dermatology, Perelman School of Medicine at the University of Pennsylvania, Philadelphia, PA 19104, USA
  22. Kite, a Gilead Company, Santa Monica, CA, USA
  23. Comparative Pathology Core, Department of Pathobiology, University of Pennsylvania, School of Veterinary Medicine, Philadelphia, PA, USA
  24. Department of Medicine, Division of Hematology and Oncology, Perelman School of Medicine at the University of Pennsylvania, Philadelphia, PA, USA
  25. Department of Cell and Developmental Biology, Perelman School of Medicine at the University of Pennsylvania, Philadelphia, PA, USA
  26. Department of Psychiatry, Perelman School of Medicine at the University of Pennsylvania, Philadelphia, PA, USA
  27. Institute for Regenerative Medicine, University of Pennsylvania, Philadelphia, PA, USA
  28. Équipe labellisée Ligue Contre le Cancer, Centre de Recherche des Cordeliers, 15 rue de l’école de médecine, 75006 Paris, France
  29. Department of Systems Pharmacology and Translational Therapeutics, Perelman School of Medicine at the University of Pennsylvania, Philadelphia, PA, USA
  30. Institute for Immunology and Immune Health, Perelman School of Medicine at the University of Pennsylvania, Philadelphia, PA, USA
  31. Department of Microbiology, Perelman School of Medicine at the University of Pennsylvania, Philadelphia, PA, USA
  32. Department of Pathology and Laboratory Medicine, Perelman School of Medicine at the University of Pennsylvania, Philadelphia, PA, USA
  33. Parker Institute for Cancer Immunotherapy, University of Pennsylvania, Philadelphia, PA, USA
  34. Epigenetics Institute, Perelman School of Medicine at the University of Pennsylvania, Philadelphia, PA, USA
  35. Department of Pathology, University Hospitals Cleveland Medical Center, Cleveland, OH, USA
  36. Senior author
  37. Clinical Laboratory, Hôpital Foch, Suresnes, France
  38. Lead contact
Journal: Cell, volume 189, issue 17, pages 5340-5358.e12
Dates: published online 15 June 2026; in print 20 August 2026
Type: Research article · Language: English
License: CC BY
Identifiers: DOI 10.1016/j.cell.2026.05.026 · PMID 42296961 · PMCID PMC13401735 · OpenAlex W7164811381
Open access: hybrid, a free copy (OpenAlex)
Status: code verified
Categories: genetics / omics (modality), human (organism), other condition (population)
Methods: Connectivity, Statistics, Smoothing, state filtering, decompositions, Machine learning, Preprocessing
Keywords: Immunotherapy, NK cells, Biomarkers, Glioblastoma, immunology, Regulatory T cells, Tumor Microenvironment, Single-cell Transcriptomics, Car T Cell Therapy, Longitudinal Dynamics, Myeloid Immunosuppression
MeSH: Brain Neoplasms*, Glioblastoma*, Immunotherapy, Adoptive*, Receptors, Chimeric Antigen*, Humans, Killer Cells, Natural, Neoplasm Recurrence, Local, T-Lymphocytes, Regulatory (* major topic)
Topic: CAR-T cell therapy research (Oncology, Medicine), according to OpenAlex
Funding: Abramson Cancer Center (P30 CA016520); NCI NIH HHS (R37 CA285434, K08 CA276819, P30 CA016520); NIH HHS (S10 OD023465); Kite Pharma Inc; NINDS NIH HHS (R35 NS137480, F31 NS137664, R35 NS116843); NHLBI NIH HHS (R01 HL145754); NIAID NIH HHS (U19 AI117950, U19 AI149680, R01 AI115712, R01 AI155577, P01 AI108545, U19 AI082630); Penn Skin Biology and Diseases Resource-based Center, University of Pennsylvania; American Cancer Society Inc; French National Research Agency; NIAMS NIH HHS (P30 AR069589); National Institute of Arthritis and Musculoskeletal and Skin Diseases (P30-AR069589); University of Pennsylvania (SCR_022438); Inserm; National Institutes of Health (S10 OD023465-01A1)
Citations: cited by 1 paper (Europe PMC); 107 references in the paper
Research resources: Monoclonal Mouse Anti-Human CD3(LN10) RRID:AB_10554601, RRID:AB_10611571, RRID:AB_10853679, RRID:AB_11218084, RRID:AB_141607, RRID:AB_1548774, Mouse monoclonal anti-human CD3 (SK7) RRID:AB_2043995, Rabbit polyclonal anti-cleaved caspase-3 RRID:AB_2341188, RRID:AB_2535795, RRID:AB_2536183, Qdot800 Mouse anti human CD4 (S3.5) RRID:AB_2556509, RRID:AB_2574616, RRID:AB_2637435, RRID:AB_2738616, BUV395 Mouse anti-human CD2 (RPA-2.10) RRID:AB_2744356, RRID:AB_2744370, BB700 Mouse anti human FOXP3 (236A/E7) RRID:AB_2744476, RRID:AB_2797631, PE Recombinant anti human TOX (REA473) RRID:AB_2801780, RRID:AB_2848365, RRID:AB_2860961, RRID:AB_2869742, RRID:AB_2870119, BUV496 Mouse anti-human CD38 (HIT2) RRID:AB_2870225, BUV615 Mouse anti-human CD25 (2A3) RRID:AB_2870268, BUV563 Mouse anti-human CD8 (SK1) RRID:AB_287096, BV750 Mouse anti human CD39 (TU66) RRID:AB_2871834, BUV661 Mouse anti-human CD226 (DX11) RRID:AB_2874171, RRID:AB_2890742, RRID:AB_2896269, PE-Cy5 Mouse anti human CTLA4 (BN13) RRID:AB_396177, RRID:AB_782214, RRID:SCR_022438

Abstract

Glioblastoma (GBM) is the most common primary malignant brain tumor in adults, with a median survival of under 15 months and no effective treatment after recurrence. A recent phase 1 trial of intracerebroventricular bivalent chimeric antigen receptor (CAR) T cells in recurrent GBM, registered at ClinicalTrials.gov (NCT05168423), showed promising responses, including tumor reduction and prolonged survival. However, relapse remains common. We performed in-depth profiling of longitudinal cerebrospinal fluid (CSF) and tumor samples from responders and non-responders to characterize immune dynamics following infusion. Our study reveals that, although CAR T cells activate post infusion across all patients, outcomes were defined by divergent remodeling of the endogenous immune landscape. Cytotoxic natural killer cell expansion characterized responders, whereas regulatory T cell expansion and abundant baseline immunosuppressive scavenger myeloid cells characterized non-responders. These findings indicate that host immune cells play a critical role in CAR T cell therapy for GBM, suggesting that combinatorial strategies modulating the endogenous immune compartment could improve next-generation treatments.

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

SilverbushLab/Bivalent-CAR-T-cell-therapy-in-recurrent-GBM

License: MIT
State: the link answers, verified on 27 September 2026
Evidence: files inventoried
Commit: 6b6fa76bb76bdb3607f8ffae86322899cdaa373a, 11 June 2026
Languages: Jupyter (36), R (31), Python (1), Shell (1)
Size: 94 files, 69 scripts
Software Heritage: not archived
Found in: “Data and code availability”
Holds: README, license file, environment (tumor_analysis/Dockerfile_tumor_analysis/Dockerfile), 60 notebooks
Not found: CITATION.cff, tests, continuous integration, documentation
Tools: tidyverse (46 files), Seurat (33 files), ggplot2 (32 files), ggpubr (20 files), cowplot (16 files), Harmony (16 files), rstatix (11 files), anndata (8 files), NumPy (8 files), pandas (8 files), patchwork (8 files), Scanpy (8 files), clusterProfiler (5 files), data.table (5 files), Matplotlib (5 files), seaborn (4 files), SciPy (3 files), limma (2 files), scikit-learn (2 files), statannotations (2 files), edgeR (1 file), h5py (1 file), SingleCellExperiment (1 file), survival (1 file)
Availability: 1 check, the latest on 27 September 2026: the link answers
  • 27 September 2026: the link answers
71 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;
  • 69 scripts, each with its path and the digest of its content;
  • 30 matches between paragraphs of the paper and lines of the code (method lexical-v1);
  • neither the text of the paper nor the code itself.

Its JSON (tracing-map.json) is deposited on Zenodo with its DOI once the map is validated.

Data

No dataset and no data link were found in the paper.

Data and code availability

Processed single-cell data and annotations have been deposited in GEO under accession number GEO: GSE296419 and are available through the Broad Single Cell Portal (SCP3237). Raw sequencing data have been deposited under regulated access in the NIH dbGaP database. Analysis code is available at https://github.com/SilverbushLab/Bivalent-CAR-T-cell-therapy-in-recurrent-GBM.

Any additional information required to reanalyze the data reported in this paper is available from the lead contact upon request.

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: — → Cell Press
  • Authors: added Cécile Alanio (0000-0003-2785-7445); removed Cécile Alanio

Version 1, 27 September 2026: the first record

Recorded: type, language, journal, volume, issue, pages, dates, 50 authors, 11 keywords, 8 MeSH terms, 15 funders, 106 references, 33 RRIDs.

Cite

This paper

Freeburg, N. F., Chafamo, D., Gopikrishna, G. K., Murphy, R. M., Peng, J. J., Parthasarathy, S., Dumont, S., Estrada, E. G., Logun, M. T., Sun, Y., Wang, X., Grover, P., Rodriguez, J. L., Zhang, D. L., Park, K., Fu, Y., Ben Hamouda, N., Hernandez-Verdin, I., Lamrani, L., . . . Silverbush, D. (2026). The critical role of the endogenous immune compartment after CAR T cell therapy in recurrent GBM. Cell, 189(17), 5340-5358.e12. https://doi.org/10.1016/j.cell.2026.05.026

BibTeX

@article{freeburg2026critical,
author = {Freeburg, Nelson F. and Chafamo, Daniel and Gopikrishna, Gayathri Konanur and Murphy, Regan M. and Peng, Jacqueline J. and Parthasarathy, Shridhar and Dumont, Sydney and Estrada, Edward G. and Logun, Meghan T. and Sun, Yusha and Wang, Xin and Grover, Payal and Rodriguez, Jesse L. and Zhang, Daniel L. and Park, Kristen and Fu, Yao and Ben Hamouda, Nadine and Hernandez-Verdin, Isaias and Lamrani, Lamia and Hicks, Kelly A. and Cooper, Natalie A. and Ekwegbara, Christina and Bawden, Emma Grace and Waterfall, Joshua J. and Fuentealba, Jaime and Alcantara, Marion and Seykora, John T. and Prouty, Stephen M. and Barrett, David and Banerjee, Esha and Cox, Arin and Assenmacher, Charles-Antoine and Macia, Camilla and Yin, Melinda and Carpenter, Erica L. and Ming, Guo-li and Sautès-Fridman, Catherine and Fridman, Wolf H. and Tartour, Eric and Wherry, E. John and Amigorena, Sebastian and Fraietta, Joseph A. and Nasrallah, MacLean P. and Song, Hongjun and Miller, Tyler E. and Bagley, Stephen J. and O’Rourke, Donald M. and Binder, Zev A. and Alanio, Cécile and Silverbush, Dana},
title = {{The critical role of the endogenous immune compartment after CAR T cell therapy in recurrent GBM}},
journal = {Cell},
year = {2026},
month = jun,
volume = {189},
number = {17},
pages = {5340--5358.e12},
publisher = {Cell Press},
issn = {0092-8674},
doi = {10.1016/j.cell.2026.05.026},
url = {https://doi.org/10.1016/j.cell.2026.05.026},
pmid = {42296961},
pmcid = {PMC13401735}
}

RIS

TY - JOUR
AU - Freeburg, Nelson F.
AU - Chafamo, Daniel
AU - Gopikrishna, Gayathri Konanur
AU - Murphy, Regan M.
AU - Peng, Jacqueline J.
AU - Parthasarathy, Shridhar
AU - Dumont, Sydney
AU - Estrada, Edward G.
AU - Logun, Meghan T.
AU - Sun, Yusha
AU - Wang, Xin
AU - Grover, Payal
AU - Rodriguez, Jesse L.
AU - Zhang, Daniel L.
AU - Park, Kristen
AU - Fu, Yao
AU - Ben Hamouda, Nadine
AU - Hernandez-Verdin, Isaias
AU - Lamrani, Lamia
AU - Hicks, Kelly A.
AU - Cooper, Natalie A.
AU - Ekwegbara, Christina
AU - Bawden, Emma Grace
AU - Waterfall, Joshua J.
AU - Fuentealba, Jaime
AU - Alcantara, Marion
AU - Seykora, John T.
AU - Prouty, Stephen M.
AU - Barrett, David
AU - Banerjee, Esha
AU - Cox, Arin
AU - Assenmacher, Charles-Antoine
AU - Macia, Camilla
AU - Yin, Melinda
AU - Carpenter, Erica L.
AU - Ming, Guo-li
AU - Sautès-Fridman, Catherine
AU - Fridman, Wolf H.
AU - Tartour, Eric
AU - Wherry, E. John
AU - Amigorena, Sebastian
AU - Fraietta, Joseph A.
AU - Nasrallah, MacLean P.
AU - Song, Hongjun
AU - Miller, Tyler E.
AU - Bagley, Stephen J.
AU - O’Rourke, Donald M.
AU - Binder, Zev A.
AU - Alanio, Cécile
AU - Silverbush, Dana
TI - The critical role of the endogenous immune compartment after CAR T cell therapy in recurrent GBM
T2 - Cell
J2 - Cell
PY - 2026
DA - 2026/06/15
VL - 189
IS - 17
SP - 5340
EP - 5358.e12
SN - 0092-8674
PB - Cell Press
DO - 10.1016/j.cell.2026.05.026
UR - https://doi.org/10.1016/j.cell.2026.05.026
LA - en
ER -

CSL-JSON

{
"id": "10.1016/j.cell.2026.05.026",
"type": "article-journal",
"title": "The critical role of the endogenous immune compartment after CAR T cell therapy in recurrent GBM",
"container-title": "Cell",
"author": [
{
"family": "Freeburg",
"given": "Nelson F."
},
{
"family": "Chafamo",
"given": "Daniel"
},
{
"family": "Gopikrishna",
"given": "Gayathri Konanur"
},
{
"family": "Murphy",
"given": "Regan M."
},
{
"family": "Peng",
"given": "Jacqueline J."
},
{
"family": "Parthasarathy",
"given": "Shridhar"
},
{
"family": "Dumont",
"given": "Sydney"
},
{
"family": "Estrada",
"given": "Edward G."
},
{
"family": "Logun",
"given": "Meghan T."
},
{
"family": "Sun",
"given": "Yusha"
},
{
"family": "Wang",
"given": "Xin"
},
{
"family": "Grover",
"given": "Payal"
},
{
"family": "Rodriguez",
"given": "Jesse L."
},
{
"family": "Zhang",
"given": "Daniel L."
},
{
"family": "Park",
"given": "Kristen"
},
{
"family": "Fu",
"given": "Yao"
},
{
"family": "Ben Hamouda",
"given": "Nadine"
},
{
"family": "Hernandez-Verdin",
"given": "Isaias"
},
{
"family": "Lamrani",
"given": "Lamia"
},
{
"family": "Hicks",
"given": "Kelly A."
},
{
"family": "Cooper",
"given": "Natalie A."
},
{
"family": "Ekwegbara",
"given": "Christina"
},
{
"family": "Bawden",
"given": "Emma Grace"
},
{
"family": "Waterfall",
"given": "Joshua J."
},
{
"family": "Fuentealba",
"given": "Jaime"
},
{
"family": "Alcantara",
"given": "Marion"
},
{
"family": "Seykora",
"given": "John T."
},
{
"family": "Prouty",
"given": "Stephen M."
},
{
"family": "Barrett",
"given": "David"
},
{
"family": "Banerjee",
"given": "Esha"
},
{
"family": "Cox",
"given": "Arin"
},
{
"family": "Assenmacher",
"given": "Charles-Antoine"
},
{
"family": "Macia",
"given": "Camilla"
},
{
"family": "Yin",
"given": "Melinda"
},
{
"family": "Carpenter",
"given": "Erica L."
},
{
"family": "Ming",
"given": "Guo-li"
},
{
"family": "Sautès-Fridman",
"given": "Catherine"
},
{
"family": "Fridman",
"given": "Wolf H."
},
{
"family": "Tartour",
"given": "Eric"
},
{
"family": "Wherry",
"given": "E. John"
},
{
"family": "Amigorena",
"given": "Sebastian"
},
{
"family": "Fraietta",
"given": "Joseph A."
},
{
"family": "Nasrallah",
"given": "MacLean P."
},
{
"family": "Song",
"given": "Hongjun"
},
{
"family": "Miller",
"given": "Tyler E."
},
{
"family": "Bagley",
"given": "Stephen J."
},
{
"family": "O’Rourke",
"given": "Donald M."
},
{
"family": "Binder",
"given": "Zev A."
},
{
"family": "Alanio",
"given": "Cécile"
},
{
"family": "Silverbush",
"given": "Dana"
}
],
"container-title-short": "Cell",
"volume": "189",
"issue": "17",
"page": "5340-5358.e12",
"DOI": "10.1016/j.cell.2026.05.026",
"PMID": "42296961",
"PMCID": "PMC13401735",
"ISSN": "0092-8674",
"publisher": "Cell Press",
"URL": "https://doi.org/10.1016/j.cell.2026.05.026",
"language": "en",
"issued": {
"date-parts": [
[
2026,
6,
15
]
]
}
}

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/s41586-026-10612-6 [code]
Acquired genetic and cell-state changes in IDH-mutant glioma progression.
Journal: Nature
In common: survival, Harmony, SingleCellExperiment, 11 other tools, other condition, 7 references
[2] doi:10.1038/s41398-026-04200-5 [code]
Postmortem brain single-nucleus and bulk gene expression analyses identify shared and distinct abnormalities in bipolar disorder and major depressive disorder.
Journal: Translational psychiatry
In common: Harmony, SingleCellExperiment, edgeR, 13 other tools, genetics / omics, 5 references
[3] doi:10.1002/imt2.70163 [code]
Spatial multi-omics unveils sphingolipid metabolic reprogramming within the retinal pathological niche.
Journal: iMeta
In common: Harmony, SingleCellExperiment, edgeR, 18 other tools, genetics / omics
[4] doi:10.1093/bioinformatics/btag592 [code]
Network-based stratification of allele-specific expression reveals patient subgroups in Huntington's disease.
Journal: Bioinformatics (Oxford, England)
In common: survival, edgeR, limma, 14 other tools, genetics / omics, other condition, 4 references
[5] doi:10.1038/s41467-026-76675-1 [code]
Long-read proteogenomic atlas of human neuronal differentiation reveals isoform diversity informing neurodevelopmental risk mechanisms.
Journal: Nature communications
In common: edgeR, limma, rstatix, 15 other tools, genetics / omics, 3 references
[6] doi:10.1038/s41467-026-73305-8 [code]
Comparative analysis of the cellular landscape in mammalian striatum.
Journal: Nature communications
In common: Harmony, SingleCellExperiment, edgeR, 13 other tools, genetics / omics, 3 references
[7] doi:10.1038/s41586-026-10629-x [code]
Whole-genome duplication shaped cell-type evolution in the vertebrate brain.
Journal: Nature
In common: Harmony, rstatix, anndata, 14 other tools, genetics / omics, 3 references
[8] doi:10.1371/journal.pcbi.1014327 [code]
Supervised deep learning with gene functional annotation for cell classification.
Journal: PLoS computational biology
In common: SingleCellExperiment, limma, anndata, 13 other tools, genetics / omics, other condition, 2 references
[9] doi:10.1038/s41514-026-00391-9 [code]
Region-specific transcriptional signatures of brain aging in the absence of neuropathology at the single-cell level.
Journal: npj aging
In common: Harmony, edgeR, anndata, 14 other tools, genetics / omics, 2 references
[10] 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 blue
In common: SingleCellExperiment, edgeR, limma, 15 other tools

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.