UC6_PSEUDOBULK_DEBRIEF

UC6 — Cell-type-resolved pseudobulk DE (COVID-19) — drive debrief

Driven via /drive-scenario against local Galaxy (backend 8080, dev client 5173), 2026-06-20.

TL;DR

Artifacts

Data structure (verified, gates the stretch)

Source AnnData file.h5ad (548 MB, Zenodo 13929549). obs: cell_type, individual, disease (normal / COVID-19), raw counts layer, gene_symbol var. 7 individuals: Control_#1/2/3 (normal); SARS_CoV2_pos_Mild, Severe_#1/2/3 (COVID). 6 cell types · 34 pseudobulk samples. Per-(cell type × disease) sample counts:

cell_typenormalCOVIDpower
B_cell34ok
T_cell34ok
monocyte33ok
neutrophil33ok
erythroid_lineage_cell13low (1 normal)
platelet22thin

samples_metadata carries only the disease factor — cell_type is encoded only in the sample-name suffix {individual}_{cell_type}. Suffix parsing is unambiguous (all 34 samples resolved; cell-type suffixes are mutually non-overlapping).

Pipeline as driven

  1. Upload h5ad via /api/tools/fetch (Zenodo CDN, fast).
  2. MVP — version-migrate shipped .ga (see drift below), import, invoke with the test yml params (groupby=cell_type, sample_key=individual, layer=counts, factor=disease, formula=~ 0 + disease, gene_symbol). Volcano step dropped from the workflow (major version break) and run separately.
  3. Per-cell-type subset — for each cell type, tp_awk_tool keeps the gene column + matrix columns with header suffix _{ct}$ → 6 count matrices; same suffix-filter on the factor file → 6 factor files. Assemble two paired list collections (id = cell_type).
  4. Mapped edgeRedger over (matrices, factors) collections, broadcasting the shared genes_metadata + contrast file → list:list of 6 per-cell-type DEG tables.
  5. Synthesis (on-graph) — map tp_awk over the flat DEG list to (a) count FDR<0.05 rows and (b) emit sig-gene names; collapse_dataset (add_name=cell_type) → responder ranking table and sig-genes-by-cell-type table.
  6. Volcanoesvolcanoplot 4.0.3 on the pooled table and mapped over the per-cell-type DEG collection (PDF) → graphicsmagick_image_convert PDF→PNG for inline Page images.

Version drift handled (shipped pins → installed)

The shipped .ga pins exact versions not installed. Patched tool_id+content_id+ tool_version per step and filled new optional params:

Gotcha: import keys off content_id, not just tool_id — patch both or the version error persists.

What I’d change / caveats

Key IDs

History b2486a20bc56b90f; input h5ad 709ee9fb7b09a260 (hid1). MVP: pseudobulk QC aaa9bb27aeb7b84b (hid5), filter 300f24fa15eda72e (hid6), pooled DEG 6875c703d2301e12 (hid15), volcano-table 07156755f40944e6 (hid18), report 28e1382d92a13bc5 (hid14), MVP volcano PNG 25352d0f50169864. Stretch: matrices coll 76fc6a61d2847f9c, factors 599c929992aefd6c, flat DEG 75c5bc32ad0ce8b8, mapped DEG list:list 4011851c940e7469, responder ranking 45bc061a4d279b5b, sig-genes 7972115ae4a0dcf6, volcano PNG coll dba3bb6dfae451b8 (platelet fb5da8d37e7135b8, monocyte fda86291ff9ae1d6).