sc-qc
Load when computing per-cell QC metrics (n_genes, total counts, mt%, ribo%) on a single-cell AnnData before filtering. Skip when reads are still raw FASTQ (use sc-fastq-qc); you want to filter cells n
SKILL.mdskills/sc-qc/SKILL.md
GitHubsc-qc
When to use
The user has a single-cell AnnData (post-counting / post-standardisation)
and wants to review cell quality — counts, detected genes, mitochondrial
percentage, ribosomal percentage — before any filtering. This skill
reports, it does not remove cells. Use sc-filter to actually drop
cells based on these metrics.
Inputs & Outputs
<!-- AUTO-GENERATED from skill.yaml (interface) — do not edit by hand. Regenerate: python scripts/generate_skill_md.py <skill_dir> -->Inputs
- Modalities: scrna
- File types:
.h5ad
Outputs
tables/barcode_rank_curve.csvtables/cell_metadata.csvtables/gene_expression.csvtables/highest_expr_genes.csvtables/qc_metric_correlations.csvtables/qc_metrics_per_cell.csvtables/qc_metrics_summary.csvtables/qc_run_summary.csvfigures/barcode_rank.pngfigures/highest_expr_genes.pngfigures/qc_correlation_heatmap.pngfigures/qc_histograms.pngfigures/qc_scatter.pngfigures/qc_violin.pngfigures/r_qc_violin.pnganalysis_summary.txtprocessed.h5adreport.mdresult.json- Processed AnnData (
saves_h5ad)
Flow
- Load AnnData via the shared single-cell loader.
- Detect mitochondrial / ribosomal gene patterns from species hint (or
var_namesheuristic). - Compute per-cell QC metrics with
scanpy.pp.calculate_qc_metrics. - Emit summary stats + per-cell metrics tables.
- Render violin + scatter figures and
tables/highest_expr_genes.csv. - Emit
report.md+result.json(no cell filtering performed).
Gotchas
- No filtering happens here. Despite the name,
sc-qcdoes not remove cells or genes — it computes metrics and produces figures. Runsc-filternext with thresholds chosen from the QC violins. Theresult.jsonsummarycarriesn_cells/n_genesas observed, not as filtered. - Input file missing → hard fail.
sc_qc.py:635raisesFileNotFoundErrorwhen--inputdoes not resolve. Pre-flight your path before the skill, especially in batch pipelines. expression_sourcerecords which matrix the run used.result.json["summary"]["expression_source"]readslayers.counts,adata.raw, oradata.Xdepending on what the loader picked; QC fractions (mt%, ribo%) are only meaningful on a count-like source. Verify after every run, especially if the input came from outsidesc-standardize-input.
Key CLI
# Demo (built-in PBMC3K)
python omicsclaw.py run sc-qc --demo --output /tmp/sc_qc_demo
# Real run
python omicsclaw.py run sc-qc --input processed.h5ad --output results/
# With R Enhanced figures
python omicsclaw.py run sc-qc --input processed.h5ad --output results/ --r-enhanced
See also
references/parameters.md— every CLI flag and tuning hintreferences/methodology.md— mt/ribo gene-pattern detection, scanpy QC parametersreferences/output_contract.md— table column schemas + figure roles- Adjacent skills:
sc-standardize-input(upstream — required if input is external),sc-filter(next step — actually removes cells),sc-doublet-detection(parallel — finds doublets)