The critical role of the endogenous immune compartment after CAR T cell therapy in recurrent GBM.
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] § 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] § 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] § 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] § 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] § 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] § 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] § 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] § 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] § 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] § 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] § 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] § 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] § 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] § 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] § 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] § 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] § 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] § 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] § 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] § 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] § 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] § 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] § 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] § 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] § 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] § 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] § 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] § 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] § 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] § 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
- # %% [markdown]
- # ## 1. Imports and plotting defaults
- # %% [markdown]
- # ## Minimal software dependencies
- # at least:
- #
- # ```text
- # anndata
- # scanpy
- # pandas
- # numpy
- # scipy
- # scikit-learn
- # matplotlib
- # seaborn
- # igraph
- # leidenalg
- # ```
- # %%
- from pathlib import Path
- import anndata as ad
- import matplotlib as mpl
- import matplotlib.pyplot as plt
- import numpy as np
- import pandas as pd
- import scanpy as sc
- import scipy.sparse as sp
- import seaborn as sns
- from sklearn.decomposition import non_negative_factorization
- RANDOM_STATE = 42
- sc.settings.verbosity = 2
- # Keep text editable in exported vector PDFs.
- mpl.rcParams["pdf.fonttype"] = 42
- mpl.rcParams["ps.fonttype"] = 42
- mpl.rcParams["savefig.transparent"] = True
- # %% [markdown]
- # ## 2. Editable paths and analysis parameters
- # %% [markdown]
- # ### Repository assumptions
- #
- # 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.
- #
- # Required files in the working directory or supplied as paths below:
- # - input `.h5ad` object
- # - `Myeloid_NMF_Average_Gene_Spectra.txt` reference spectra file from the Miller et al. back-calculation workflow
- # %%
- ADATA_PATH = Path("path_to_your_pre_filtered_myeloid_object.h5ad")
- SPECTRA_PATH = Path("./Myeloid_NMF_Average_Gene_Spectra.txt")
- # 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
- UMAP_OUT_DIR = Path("program_usage_umaps_pdf")
- PRE_PANEL_OUT_DIR = Path("pre_only_program_usage_panels_pdf")
- UMAP_OUT_DIR.mkdir(parents=True, exist_ok=True)
- PRE_PANEL_OUT_DIR.mkdir(parents=True, exist_ok=True)
- REQUIRED_OBS_COLUMNS = ("sample_name", "response_status")
- N_COMPONENTS = 14
- N_TOP_HVG = 4000
- LEIDEN_RESOLUTION = 0.7
- UMAP_USAGE_VMAX = 50
- SHOW_PLOTS = True
- SAVE_PDF = True
- # %% [markdown]
- # ## 3. Helper functions
- # %%
- def validate_inputs(
- adata_path: Path,
- spectra_path: Path,
- required_obs_columns: tuple[str, ...] = ("sample_name", "response_status"),
- ) -> None:
- """Fail early if required repository inputs are missing."""
- missing_files = [str(p) for p in (adata_path, spectra_path) if not p.exists()]
- if missing_files:
- raise FileNotFoundError(
- "Missing required input file(s): " + ", ".join(missing_files)
- )
- def validate_adata_schema(adata: ad.AnnData, required_obs_columns: tuple[str, ...]) -> None:
- """Validate expected AnnData fields before analysis/plotting."""
- missing = [col for col in required_obs_columns if col not in adata.obs.columns]
- if missing:
- raise KeyError(
- "Missing required adata.obs column(s): " + ", ".join(missing)
- )
- if adata.n_obs == 0 or adata.n_vars == 0:
- raise ValueError("Input AnnData has zero cells or zero genes.")
- def ensure_scanpy_obsm_keys(adata: ad.AnnData) -> ad.AnnData:
- """
- Convert zellkonverter-style dimensional-reduction keys to Scanpy conventions
- when needed.
- """
- if "UMAP" in adata.obsm and "X_umap" not in adata.obsm:
- adata.obsm["X_umap"] = np.asarray(adata.obsm["UMAP"])
- if "PCA" in adata.obsm and "X_pca" not in adata.obsm:
- adata.obsm["X_pca"] = np.asarray(adata.obsm["PCA"])
- return adata
- def normalize_data_before_backcalculation(adata: ad.AnnData) -> ad.AnnData:
- """
- Normalize the cell-by-gene matrix as expected for cNMF program back-calculation:
- scale each gene to unit variance without zero-centering sparse matrices.
- """
- adata_normalized = adata.copy()
- if sp.issparse(adata_normalized.X):
- sc.pp.scale(adata_normalized, zero_center=False)
- if np.isnan(adata_normalized.X.data).sum() > 0:
- print("[warning] NaNs detected in normalized sparse matrix.")
- else:
- gene_sd = adata_normalized.X.std(axis=0, ddof=1)
- gene_sd[gene_sd == 0] = 1
- adata_normalized.X = adata_normalized.X / gene_sd
- if np.isnan(adata_normalized.X).sum() > 0:
- print("[warning] NaNs detected in normalized dense matrix.")
- return adata_normalized
- def backcalculate_myeloid_program_usage(
- adata_normalized: ad.AnnData,
- myeloid_program_matrix: pd.DataFrame,
- n_components: int = 14,
- random_state: int | None = None,
- ) -> pd.DataFrame:
- """
- Back-calculate reference myeloid program usage in a new AnnData object.
- """
- adata_normalized.obs_names_make_unique()
- X_df = pd.DataFrame(
- data=adata_normalized.X.toarray() if sp.issparse(adata_normalized.X) else adata_normalized.X,
- columns=adata_normalized.var_names,
- index=adata_normalized.obs_names,
- )
- spectra_t = myeloid_program_matrix.T
- matched_spectra_t = spectra_t.filter(items=X_df.columns)
- matched_X = X_df.filter(items=matched_spectra_t.columns)
- if matched_X.shape[1] == 0:
- raise ValueError("No overlapping genes were found between `adata` and `myeloid_program_matrix`.")
- W, H, n_iter = non_negative_factorization(
- matched_X.to_numpy(dtype=np.float64),
- W=None,
- H=matched_spectra_t.to_numpy(dtype=np.float64),
- n_components=n_components,
- init="random",
- update_H=False,
- solver="cd",
- beta_loss="frobenius",
- tol=1e-4,
- max_iter=1000,
- alpha_W=0.0,
- alpha_H="same",
- l1_ratio=0.0,
- random_state=random_state,
- verbose=0,
- shuffle=False,
- )
- usage = pd.DataFrame(W, columns=myeloid_program_matrix.columns, index=adata_normalized.obs_names)
- row_sums = usage.sum(axis=1).replace(0, np.nan)
- usage_pct = usage.div(row_sums, axis=0).mul(100).fillna(0)
- print(f"[done] Back-calculated usage for {usage_pct.shape[0]:,} cells and {usage_pct.shape[1]} programs.")
- return usage_pct
- def build_sample_order(adata: ad.AnnData, sample_col: str = "sample_name") -> list[str]:
- """
- Order samples by patient number and then Pre before Post, falling back to
- lexicographic order if patient/timepoint parsing is unavailable.
- """
- samples = pd.Index(adata.obs[sample_col].dropna().astype(str).unique())
- patient_num = samples.str.extract(r"^P(\d+)_", expand=False)
- timepoint = samples.str.extract(r"_(Pre|Post)$", expand=False)
- if patient_num.notna().any():
- patient_key = pd.to_numeric(patient_num, errors="coerce").fillna(np.inf).to_numpy()
- timepoint_key = timepoint.map({"Pre": 0, "Post": 1}).fillna(99).astype(int).to_numpy()
- order = np.lexsort((timepoint_key, patient_key))
- return samples[order].tolist()
- return sorted(samples.tolist())
- def safe_filename(value: str) -> str:
- """Return a filesystem-safe version of a program/sample name."""
- return "".join(c if c.isalnum() or c in "._-+" else "_" for c in str(value))
- # %% [markdown]
- # ## 4. Load input data
- # %%
- validate_inputs(ADATA_PATH, SPECTRA_PATH, REQUIRED_OBS_COLUMNS)
- adata = sc.read_h5ad(ADATA_PATH)
- adata = ensure_scanpy_obsm_keys(adata)
- validate_adata_schema(adata, REQUIRED_OBS_COLUMNS)
- # This notebook assumes ADATA_PATH already points to the myeloid-cell object to analyze.
- adata_myeloid = adata
- adata_myeloid_adjusted = adata.copy()
- original_glioma_spectra = pd.read_table(SPECTRA_PATH, sep="\t", index_col=0)
- print(adata_myeloid_adjusted)
- print(original_glioma_spectra.shape)
- # %% [markdown]
- # ## 5. Back-calculate myeloid program usage
- # %%
- adata_myeloid_normalized = normalize_data_before_backcalculation(adata_myeloid_adjusted)
- adata_myeloid_bc_usages = backcalculate_myeloid_program_usage(
- adata_myeloid_normalized,
- original_glioma_spectra,
- n_components=N_COMPONENTS,
- random_state=RANDOM_STATE,
- )
- adata_myeloid_bc_usages = adata_myeloid_bc_usages.loc[adata_myeloid_adjusted.obs_names]
- adata_myeloid_adjusted.obsm["program_usage"] = adata_myeloid_bc_usages.values
- adata_myeloid_adjusted.uns["program_names"] = list(adata_myeloid_bc_usages.columns)
- prog_names = list(adata_myeloid_bc_usages.columns)
- usage = adata_myeloid_bc_usages
- progs = prog_names
- adata_myeloid_bc_usages.head()
- # %% [markdown]
- # ## 6. cluster myeloid cells and compute UMAP
- # %%
- adata_myeloid_adjusted_cluster = adata_myeloid_adjusted.copy()
- adata_myeloid_adjusted_cluster.layers["counts"] = adata_myeloid_adjusted_cluster.X.copy()
- sc.pp.normalize_total(adata_myeloid_adjusted_cluster)
- sc.pp.log1p(adata_myeloid_adjusted_cluster)
- sc.pp.highly_variable_genes(
- adata_myeloid_adjusted_cluster,
- n_top_genes=N_TOP_HVG,
- batch_key="sample_name",
- )
- sc.tl.pca(adata_myeloid_adjusted_cluster, random_state=RANDOM_STATE)
- sc.pp.neighbors(adata_myeloid_adjusted_cluster, random_state=RANDOM_STATE)
- sc.tl.umap(adata_myeloid_adjusted_cluster, random_state=RANDOM_STATE)
- sc.tl.leiden(
- adata_myeloid_adjusted_cluster,
- flavor="igraph",
- n_iterations=2,
- resolution=LEIDEN_RESOLUTION,
- random_state=RANDOM_STATE,
- )
- # %% [markdown]
- # ## 7. General clustering/metadata UMAPs
- # %%
- sc.pl.umap(
- adata_myeloid_adjusted_cluster,
- color=["leiden"],
- legend_loc="on data",
- legend_fontoutline=2,
- show=SHOW_PLOTS,
- )
- sc.pl.umap(
- adata_myeloid_adjusted_cluster,
- color=["sample_name"],
- legend_fontoutline=2,
- show=SHOW_PLOTS,
- )
- for obs_col in ["cell_type_manual", "timepoint", "response_status"]:
- if obs_col in adata_myeloid_adjusted_cluster.obs.columns:
- sc.pl.umap(
- adata_myeloid_adjusted_cluster,
- color=[obs_col],
- legend_fontoutline=2,
- show=SHOW_PLOTS,
- )
- # %% [markdown]
- # ## 8. UMAPs colored by back-calculated program usage
- # %%
- for prog in prog_names:
- col = f"{prog}_usage"
- adata_myeloid_adjusted_cluster.obs[col] = (
- adata_myeloid_adjusted_cluster.obs_names
- .to_series()
- .map(adata_myeloid_bc_usages[prog])
- .fillna(0)
- .astype(float)
- )
- sc.pl.umap(
- adata_myeloid_adjusted_cluster,
- color=col,
- cmap="viridis",
- title=f"Usage of {prog}",
- vmax=UMAP_USAGE_VMAX,
- show=SHOW_PLOTS,
- )
- if SAVE_PDF:
- ax = sc.pl.umap(
- adata_myeloid_adjusted_cluster,
- color=col,
- cmap="viridis",
- title=f"Usage of {prog}",
- vmax=UMAP_USAGE_VMAX,
- show=False,
- return_fig=False,
- )
- fig = ax.figure
- out_path = UMAP_OUT_DIR / f"{safe_filename(prog)}__usage_umap.pdf"
- fig.savefig(out_path, format="pdf", bbox_inches="tight")
- plt.close(fig)
- print(f"[saved] {out_path}")
- # %% [markdown]
- # ## 9. program usage panels: violin, box, sample mean dots
- # %%
- palette = {"responder": "#1f77b4", "nonresponder": "#d62728"}
- group_order = ["responder", "nonresponder"]
- sample_order = build_sample_order(adata, sample_col="sample_name")
- def _set_violin_alpha(ax, alpha: float = 0.35) -> None:
- """
- Seaborn violinplot does not reliably honor alpha across versions.
- This sets alpha on violin PolyCollections only.
- """
- import matplotlib.collections as mcoll
- for coll in ax.collections:
- if isinstance(coll, mcoll.PolyCollection):
- coll.set_alpha(alpha)
- def build_pre_mask_and_order(
- adata: ad.AnnData,
- sample_order: list[str],
- sample_col: str = "sample_name",
- timepoint_col: str = "timepoint",
- patient_col: str = "patient",
- ) -> tuple[pd.Series, list[str]]:
- """Create a Pre-only mask and ordered Pre sample list."""
- if timepoint_col in adata.obs.columns:
- pre_mask = adata.obs[timepoint_col].astype(str).str.lower().eq("pre")
- else:
- pre_mask = adata.obs[sample_col].astype(str).str.contains(r"_Pre\b", regex=True)
- pre_samples = adata.obs.loc[pre_mask, sample_col].dropna().unique().tolist()
- sample_order_pre = [s for s in sample_order if s in set(pre_samples)]
- if len(sample_order_pre) == 0:
- order_cols = [sample_col]
- if patient_col in adata.obs.columns:
- order_cols.append(patient_col)
- tmp = adata.obs.loc[pre_mask, order_cols].dropna().drop_duplicates().copy()
- if patient_col in tmp.columns:
- tmp["patient_num"] = tmp[patient_col].astype(str).str.extract(r"(\d+)", expand=False).astype(float)
- tmp = tmp.sort_values(["patient_num", patient_col, sample_col])
- else:
- tmp = tmp.sort_values(sample_col)
- sample_order_pre = tmp[sample_col].tolist()
- return pre_mask, sample_order_pre
- def plot_pre_program_usage_panels(
- adata: ad.AnnData,
- usage: pd.DataFrame,
- progs: list[str],
- sample_order: list[str],
- out_dir: Path,
- palette: dict[str, str],
- group_order: list[str],
- show_plots: bool = True,
- save_pdf: bool = True,
- ) -> None:
- """Export one editable vector PDF per program for Pre-only per-cell usage."""
- pre_mask, sample_order_pre = build_pre_mask_and_order(adata, sample_order)
- for prog in progs:
- dfp = adata.obs.loc[pre_mask, ["sample_name", "response_status"]].copy()
- if isinstance(usage, pd.DataFrame):
- u = pd.to_numeric(usage.loc[adata.obs_names, prog], errors="coerce").to_numpy()
- else:
- u = pd.to_numeric(usage[prog], errors="coerce").to_numpy()
- dfp["usage"] = u[pre_mask.to_numpy()]
- dfp["response_status"] = (
- dfp["response_status"]
- .astype("string")
- .str.strip()
- .str.lower()
- )
- dfp = dfp[dfp["response_status"].isin(group_order)].copy()
- dfp["sample_name"] = pd.Categorical(
- dfp["sample_name"],
- categories=sample_order_pre,
- ordered=True,
- )
- sample_mean = (
- dfp.groupby(["sample_name", "response_status"], observed=True)["usage"]
- .mean()
- .rename("mean_usage")
- .reset_index()
- )
- n_cells = (
- dfp.groupby("sample_name", observed=True)
- .size()
- .reindex(sample_order_pre)
- .fillna(0)
- .astype(int)
- )
- if dfp["usage"].dropna().empty:
- print(f"[skip] {prog}: no usable data after Pre + response_status filtering")
- continue
- fig_w = 1.25 * len(sample_order_pre) if len(sample_order_pre) > 0 else 8
- fig, ax = plt.subplots(figsize=(fig_w, 6.2))
- sns.violinplot(
- data=dfp,
- x="sample_name",
- y="usage",
- hue="response_status",
- palette=palette,
- order=sample_order_pre,
- hue_order=group_order,
- cut=0,
- inner=None,
- linewidth=0,
- dodge=True,
- ax=ax,
- )
- _set_violin_alpha(ax, alpha=0.35)
- sns.boxplot(
- data=dfp,
- x="sample_name",
- y="usage",
- hue="response_status",
- palette=palette,
- order=sample_order_pre,
- hue_order=group_order,
- showfliers=True,
- width=0.25,
- linewidth=1.1,
- flierprops=dict(
- marker="o",
- markersize=4,
- markerfacecolor="none",
- markeredgecolor="gray",
- alpha=0.6,
- ),
- ax=ax,
- )
- sns.scatterplot(
- data=sample_mean,
- x="sample_name",
- y="mean_usage",
- hue="response_status",
- palette=palette,
- hue_order=group_order,
- s=65,
- edgecolor="black",
- linewidth=0.9,
- legend=False,
- ax=ax,
- zorder=6,
- )
- handles, labels = ax.get_legend_handles_labels()
- ax.legend(
- handles[:2],
- labels[:2],
- title="response_status",
- bbox_to_anchor=(1.02, 1),
- loc="upper left",
- frameon=True,
- )
- ax.tick_params(axis="x", rotation=90)
- ax.set_xticks(range(len(sample_order_pre)))
- ax.set_xticklabels([f"{s}\n(n={n_cells.loc[s]})" for s in sample_order_pre])
- ax.set_title(f"{prog} (Pre)", fontsize=14, pad=12)
- ax.set_xlabel("")
- ax.set_ylabel("Per-cell program usage")
- fig.tight_layout()
- if save_pdf:
- out_path = out_dir / f"{safe_filename(prog)}__Pre_violin_box_meandot.pdf"
- fig.savefig(out_path, format="pdf", bbox_inches="tight")
- print(f"[saved] {out_path}")
- if show_plots:
- plt.show()
- plt.close(fig)
- plot_pre_program_usage_panels(
- adata=adata,
- usage=usage,
- progs=progs,
- sample_order=sample_order,
- out_dir=PRE_PANEL_OUT_DIR,
- palette=palette,
- group_order=group_order,
- show_plots=SHOW_PLOTS,
- save_pdf=SAVE_PDF,
- )
Fig_5B_G_tumor_myeloid_back-calculation_plotting.ipynb at commit 6b6fa76, under MIT · at the source
Overview
and 30 other authors
Natalie 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,3838 affiliations
- Cancer Biology Department, Perelman School of Medicine at the University of Pennsylvania, Philadelphia, PA 19104, USA
- These authors contributed equally
- Department of Pathology, Case Western Reserve University School of Medicine and Case Comprehensive Cancer Center, Cleveland, OH, USA
- Department of Neurosurgery, Perelman School of Medicine at the University of Pennsylvania, Philadelphia, PA 19104, USA
- Center for Cellular Immunotherapies, Perelman School of Medicine at the University of Pennsylvania, Philadelphia, PA 19104, USA
- GBM Translational Center of Excellence, Abramson Cancer Center, Perelman School of Medicine at the University of Pennsylvania, Philadelphia, PA 19104, USA
- Cell and Molecular Biology Graduate Group, Perelman School of Medicine at the University of Pennsylvania, Philadelphia, PA, USA
- Neuroscience Graduate Group, Perelman School of Medicine at the University of Pennsylvania, Philadelphia, PA, USA
- Department of Neuroscience and Mahoney Institute for Neurosciences, Perelman School of Medicine at the University of Pennsylvania, Philadelphia, PA, USA
- Department of Biology, School of Arts and Sciences, University of Pennsylvania, Philadelphia, PA, USA
- Université Paris Cité, INSERM, PARCC, Paris, France
- Department of Immunology, APHP, Hôpital Européen Georges Pompidou (HEGP)-Hôpital Necker, Paris, France
- Centre de Recherche des Cordeliers, Sorbonne Université, INSERM, Université Paris Cité, 75006 Paris, France
- CellAction, Center for Cancer Immunotherapy, INSERM U932, Institut Curie, Saint-Cloud, France
- Clinical Immunology Laboratory, Institut Curie, Paris, France
- Institut Curie, PSL University, INSERM U932, Immunity and Cancer, 75005 Paris, France
- Department of Translational Research, PSL University, Institut Curie, Paris, France
- INSERM U1330, PSL University, Institut Curie Research Center, Paris, France
- Clinical Hematology Unit, Institut Curie, Saint-Cloud, France
- Departments of Dermatology and Pathology, Perelman School of Medicine at the University of Pennsylvania, Philadelphia, PA, USA
- Department of Dermatology, Perelman School of Medicine at the University of Pennsylvania, Philadelphia, PA 19104, USA
- Kite, a Gilead Company, Santa Monica, CA, USA
- Comparative Pathology Core, Department of Pathobiology, University of Pennsylvania, School of Veterinary Medicine, Philadelphia, PA, USA
- Department of Medicine, Division of Hematology and Oncology, Perelman School of Medicine at the University of Pennsylvania, Philadelphia, PA, USA
- Department of Cell and Developmental Biology, Perelman School of Medicine at the University of Pennsylvania, Philadelphia, PA, USA
- Department of Psychiatry, Perelman School of Medicine at the University of Pennsylvania, Philadelphia, PA, USA
- Institute for Regenerative Medicine, University of Pennsylvania, Philadelphia, PA, USA
- Équipe labellisée Ligue Contre le Cancer, Centre de Recherche des Cordeliers, 15 rue de l’école de médecine, 75006 Paris, France
- Department of Systems Pharmacology and Translational Therapeutics, Perelman School of Medicine at the University of Pennsylvania, Philadelphia, PA, USA
- Institute for Immunology and Immune Health, Perelman School of Medicine at the University of Pennsylvania, Philadelphia, PA, USA
- Department of Microbiology, Perelman School of Medicine at the University of Pennsylvania, Philadelphia, PA, USA
- Department of Pathology and Laboratory Medicine, Perelman School of Medicine at the University of Pennsylvania, Philadelphia, PA, USA
- Parker Institute for Cancer Immunotherapy, University of Pennsylvania, Philadelphia, PA, USA
- Epigenetics Institute, Perelman School of Medicine at the University of Pennsylvania, Philadelphia, PA, USA
- Department of Pathology, University Hospitals Cleveland Medical Center, Cleveland, OH, USA
- Senior author
- Clinical Laboratory, Hôpital Foch, Suresnes, France
- Lead contact
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
6b6fa76bb76bdb3607f8ffae86322899cdaa373a, 11 June 2026Availability: 1 check, the latest on 27 September 2026: the link answers
- 27 September 2026: the link answers
71 files
- csf_analysis/
.ipynb_checkpoints/ — Jupyter, 174 linesFigure_1H-checkpoint.ipy nb - csf_analysis/
.ipynb_checkpoints/ — Jupyter, 164 linesFigure_2A-checkpoint.ipy nb - csf_analysis/
.ipynb_checkpoints/ — Jupyter, 76 linesFigure_2D-checkpoint.ipy nb - csf_analysis/
.ipynb_checkpoints/ — Jupyter, 362 linesFigure_4A-checkpoint.ipy nb - csf_analysis/
.ipynb_checkpoints/ — Jupyter, 78 linesFigure_4C-checkpoint.ipy nb - csf_analysis/
.ipynb_checkpoints/ — Jupyter, 50 linesFigure_6A-checkpoint.ipy nb - csf_analysis/
Fig_5_csf_myeloid_code.p — Python, 514 lines, 2 matchesy - csf_analysis/
Figure_1B_1D_1E.ipynb — Jupyter, 61 lines - csf_analysis/
Figure_1C.ipynb — Jupyter, 73 lines - csf_analysis/
Figure_1F_1G.ipynb — Jupyter, 100 lines - csf_analysis/
Figure_1H.ipynb — Jupyter, 174 lines - csf_analysis/
Figure_1I.ipynb — Jupyter, 97 lines - csf_analysis/
Figure_1J.ipynb — Jupyter, 57 lines, 1 match - csf_analysis/
Figure_4A.ipynb — Jupyter, 362 lines - csf_analysis/
Figure_4B.ipynb — Jupyter, 133 lines - csf_analysis/
Figure_4C.ipynb — Jupyter, 78 lines, 1 match - csf_analysis/
Figure_4D_4E_4F.ipynb — Jupyter, 77 lines - csf_analysis/
Figure_4G_4H.ipynb — Jupyter, 126 lines, 1 match - csf_analysis/
Figure_6A.ipynb — Jupyter, 50 lines - csf_analysis/
Figure_6C_6D_6E_6F.ipynb — Jupyter, 138 lines - csf_analysis/
Figures_6GHJ_Supp_7E_lig — Jupyter, 476 lines, 3 matchesand_receptor_analysis.ip ynb - csf_analysis/
csf pp TCR integration.ipynb — Jupyter, 117 lines - csf_analysis/
csf pp clustering.ipynb — Jupyter, 266 lines - csf_analysis/
csf pp load qc.ipynb — Jupyter, 198 lines - csf_analysis/
csf pp scrublet.ipynb — Jupyter, 47 lines, 1 match - csf_analysis/
helpers.r — R, 568 lines, 2 matches - ip_analysis/
Figure_2A.ipynb — Jupyter, 164 lines, 1 match - ip_analysis/
Figure_2B.ipynb — Jupyter, 97 lines - ip_analysis/
Figure_2C.ipynb — Jupyter, 90 lines - ip_analysis/
Figure_2D.ipynb — Jupyter, 76 lines - ip_analysis/
Figure_2E_2F.ipynb — Jupyter, 106 lines, 1 match - ip_analysis/
Figure_2G.ipynb — Jupyter, 86 lines - ip_analysis/
ip pp TCR.ipynb — Jupyter, 122 lines - ip_analysis/
ip pp clustering.ipynb — Jupyter, 289 lines - ip_analysis/
ip pp load qc.ipynb — Jupyter, 190 lines - ip_analysis/
ip pp scrublet.ipynb — Jupyter, 44 lines, 1 match - tumor_analysis/
DataS1_BulkRNAseq_EGFR_e — R, 89 linesxpr.rmd - tumor_analysis/
DataS1_CD8_Tcell_functio — R, 73 linesnal_genes.rmd - tumor_analysis/
DataS1_Tumor_NK_cell_sub — R, 168 lines, 1 matchtypes.Rmd - tumor_analysis/
DataS1_tumor_batches.rmd — R, 80 lines - tumor_analysis/
Fig_3B_C_tumorcell_umap. — R, 120 lines, 1 matchrmd - tumor_analysis/
Fig_3D_Tumor_Tcells_by_t — R, 102 linesimepoint.rmd - tumor_analysis/
Fig_3G_MalignantCell_EGF — R, 92 linesR_expr.rmd - tumor_analysis/
Fig_3H_CD8_CART_CSF_Cyto — R, 105 linesx_Exh.rmd - tumor_analysis/
Fig_3I_MalignantCell_DEG — R, 202 lines, 1 match_post_vs_pre.rmd - tumor_analysis/
Fig_3J_MalignantCell_GSE — R, 112 linesA_HallmarkEMT.rmd - tumor_analysis/
Fig_4J_Tumor_NK.rmd — R, 78 lines - tumor_analysis/
Fig_5B_G_tumor_myeloid_b — Jupyter, 563 lines, 3 matchesack-calculation_plotting .ipynb - tumor_analysis/
Fig_6C_TumorTreg.rmd — R, 74 lines - tumor_analysis/
Fig_S4B_tumor_annotation — R, 80 lines, 1 match_dotplot.rmd - tumor_analysis/
Fig_S4C_infercnv.rmd — R, 182 lines, 1 match - tumor_analysis/
Fig_S4D_tumor_cell_type_ — R, 124 linescomposition.rmd - tumor_analysis/
Fig_S4E_Tcell_proportion — R, 107 lines_by_sample.rmd - tumor_analysis/
Fig_S4G_Malignant_cell_s — R, 321 lines, 1 matchtate_by_sample.rmd - tumor_analysis/
Fig_S4H_Malig_cells_GSEA — R, 215 lines, 1 match_Hallmark.rmd - tumor_analysis/
Fig_S4I_HallmarkEMT_pval — R, 211 lines, 1 match_by_malig_state.rmd - tumor_analysis/
Fig_S4J_HallmarkEMT_by_d — R, 97 lines, 1 matchose_postinfusion.rmd - tumor_analysis/
data_processing_tumor_bu — R, 77 lineslkRNA/ 1_data_import.rmd - tumor_analysis/
data_processing_tumor_bu — R, 130 lines, 1 matchlkRNA/ 2_gene_symbol_annotation .rmd - tumor_analysis/
data_processing_tumor_bu — R, 125 lineslkRNA/ 3_normalization.rmd - tumor_analysis/
data_processing_tumor_sc — Shell, 30 lines, 2 matchesRNA/ tumor_preprocessing_1.5_ pytable_cellbender_out_c ompatibility_convert.sh - tumor_analysis/
data_processing_tumor_sc — Jupyter, 58 linesRNA/ tumor_preprocessing_1_sc rublet.ipynb - tumor_analysis/
data_processing_tumor_sc — R, 412 linesRNA/ tumor_preprocessing_2_ce llbender_seurat_filterin g.Rmd - tumor_analysis/
data_processing_tumor_sc — R, 91 linesRNA/ tumor_preprocessing_3_Di mreduction.Rmd - tumor_analysis/
data_processing_tumor_sc — R, 234 linesRNA/ tumor_preprocessing_4_ma nual_annotation.rmd - tumor_analysis/
data_processing_tumor_sc — R, 246 linesRNA/ tumor_preprocessing_5_In ferCNV.Rmd - tumor_analysis/
data_processing_tumor_sc — R, 464 lines, 1 matchRNA/ tumor_preprocessing_6_In ferCNV_refinement.Rmd - tumor_analysis/
data_processing_tumor_sc — R, 458 linesRNA/ tumor_preprocessing_7_ma nual_annotation_refineme nt.rmd - tumor_analysis/
data_processing_tumor_sc — R, 167 linesRNA/ tumor_preprocessing_8_ma nual_annotations_miller_ myeloid.rmd - LICENSE — License, 21 lines
- readme.txt — Text, 39 lines
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://
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://
BibTeX
@article{freeburg2026cri
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/
url = {https://
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/
VL - 189
IS - 17
SP - 5340
EP - 5358.e12
SN - 0092-8674
PB - Cell Press
DO - 10.1016/
UR - https://
LA - en
ER -
CSL-JSON
{
"id": "10.1016/
"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":
"volume": "189",
"issue": "17",
"page": "5340-5358.e12",
"DOI": "10.1016/
"PMID": "42296961",
"PMCID": "PMC13401735",
"ISSN": "0092-8674",
"publisher": "Cell Press",
"URL": "https://
"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: NatureIn 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 psychiatryIn 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: iMetaIn 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 communicationsIn 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 communicationsIn 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: NatureIn 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 biologyIn 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 agingIn 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 blueIn 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.
Claim this paper
Correct its record
Say what each link of this record is, remove the ones that are not the paper's, add the ones that are missing. The correction becomes a new version of the record, in its Versions section.
Validate its tracing map
You validate the map as this page shows it: 1 repository of the authors' code, each at its verified commit and with its license, 69 scripts, and 30 matches between paragraphs and code (see the Code and Map sections). It then receives a DOI on Zenodo, with you (your ORCID iD) and OSCR as its creators; the code itself is not deposited.
The map's fingerprint: sha256:bc8e5b82a394c8dd…
Add the badge to its README
The badge links the code to this page. Copy one of these into the README of the paper's code: only you decide where it goes, and nothing is changed for you.
Markdown
[, paste the snippet at the top, then “Commit changes…” and, to review it first, “Create a new branch and start a pull request”. You open the pull request; OSCR asks for no permission.
Request its removal
To ask OSCR to remove this record, the copies of its authors' scripts or its tracing map, use the removal request page: signed in, you say who you are, what to remove and why, then review and confirm the request. Published rules decide every request (how).
Discussion, reproductions, activity
Discussion: questions and error reports about this paper and its code, from signed-in readers and its authors. It opens with sign-in.
Reproductions: reports from readers who ran the authors' code: what they reproduced, with which environment, commit and data. It opens with sign-in.
Activity: what happens around this paper: new versions of its record, its map's validation, discussions and reproductions. It opens with sign-in.
