RNA-seq Expression Workflow (rnaseq_expression)¶
Plugin:
rnaseq_expressionStatus: Active (2026-06-18)
Workflow¶
FASTQ
→ fastp (QC)
→ STAR / HISAT2 (alignment)
→ featureCounts (quantification)
→ DESeq2 (differential expression)
→ offline gene-symbol + GO/Reactome ORA/GSEA (GSEApy, optional)
→ report + figures
Tool Chain¶
Stage |
Default Tool |
Alternative |
Category |
|---|---|---|---|
QC |
fastp |
FastQC, MultiQC |
qc |
Alignment |
STAR |
HISAT2 |
alignment |
Quantification |
featureCounts |
Salmon, Kallisto |
expression |
Differential expression |
DESeq2 |
edgeR |
differential_expression |
Enrichment |
ABI offline enrichment + GSEApy |
— |
enrichment |
Standard Tables¶
Table |
Content |
Required |
|---|---|---|
|
Read QC metrics (total reads, Q30, GC) |
Yes |
|
Mapping rate, unique/multi-mapped reads |
Yes |
|
Per-gene raw counts |
Yes |
|
DESeq2 median-of-ratios normalized counts |
Yes |
|
log2FC, p-value, padj per gene |
Yes |
|
DESeq2 rows with GTF |
No |
|
Complete ORA results with overlap symbols |
No |
|
Complete preranked GSEA results with leading-edge symbols |
No |
Figures¶
Figure |
File |
Required |
|---|---|---|
QC read counts |
|
Yes |
Mapping rate |
|
Yes |
PCA expression |
|
Yes |
Volcano plot |
|
Yes |
MA plot |
|
No |
Top DEG heatmap |
|
No |
GO/Reactome ORA + GSEA |
Four SciPlot PDF/SVG/PNG figure bundles |
No |
Quick Start¶
# Plan
abi plan --type rnaseq_expression \
--config data/examples/rnaseq_expression/config.yaml \
--outdir results/rnaseq_example
# Dry-run
abi dry-run --type rnaseq_expression \
--config data/examples/rnaseq_expression/config.yaml \
--outdir results/rnaseq_example
# Real execution (requires STAR index + GTF annotation)
abi run --type rnaseq_expression \
--config data/examples/rnaseq_expression/config.yaml \
--outdir results/rnaseq_example \
--confirm-execution
# Report
abi report --type rnaseq_expression \
--result-dir results/rnaseq_example
Configuration¶
Minimum config¶
project_name: "rnaseq_expression_run"
mode: dry_run
threads: 4
outdir: results/rnaseq_expression
input:
sample_sheet: sample_sheet.tsv
alignment:
tool: star
resources:
genome_index: /path/to/star_index
annotation_gtf: /path/to/Homo_sapiens.GRCh37.75.gtf
go_obo: /path/to/go-basic.obo
go_gaf: /path/to/goa_human.gaf.gz
reactome_gmt: /path/to/ReactomePathways.gmt
enrichment:
enabled: true
annotation_release: GRCh37.75
rank_column: stat
permutations: 1000
gsea_fdr: 0.25
seed: 20260727
differential_expression:
comparison: "treatment_vs_control"
alpha: 0.05
enrichment.gsea_fdr must be in (0, 1]. It only filters the SciPlot GSEA
preview; the complete GO and Reactome GSEA tables remain untruncated.
Sample sheet format¶
sample_id group condition platform read1 read2
sample1 treatment treated rna_seq raw/s1_R1.fastq.gz raw/s1_R2.fastq.gz
sample2 treatment treated rna_seq raw/s2_R1.fastq.gz raw/s2_R2.fastq.gz
sample3 control untreated rna_seq raw/s3_R1.fastq.gz raw/s3_R2.fastq.gz
sample4 control untreated rna_seq raw/s4_R1.fastq.gz raw/s4_R2.fastq.gz
Required columns: sample_id, read1, read2. Optional: group, condition, platform.
Resource Requirements¶
Real execution requires:
STAR genome index — Build with
STAR --runMode genomeGenerate.GTF annotation — GENCODE, Ensembl, or RefSeq format.
R + DESeq2 —
BiocManager::install("DESeq2").Optional enrichment resources — local GO OBO, human GOA GAF, and Reactome GMT snapshots.
Optional enrichment runtime — the locked
rnaseqenvironment includes GSEApy 1.3.0; the stage performs no network access.
All resources appear in provenance/resource_manifest.json after a real run.
Known Limitations¶
See plugins/rnaseq_expression/limitations.yaml for the complete list. Key points:
RNA-seq measures transcript abundance, not protein levels.
Alignment rates depend on reference genome completeness.
DESeq2 assumes most genes are not differentially expressed.
Lowly expressed genes have inflated FDR.
Reference genome/annotation version affects results.
Architecture Notes¶
This plugin is an inline implementation (no _engine/ sub-package), following the
same pattern as metatranscriptomics. The parser functions live in the plugin module
itself rather than in a separate parsers.py.
Plugin lifecycle¶
load_config() → build_plan() → run (ExternalExecutor)
→ parse_outputs() (per step) → write_report()
Parser dispatch¶
parse_outputs(tool_id, output_dir, sample_id) dispatches:
fastp→_parse_fastp()→qc_summarystar→_parse_star()→alignment_summaryfeaturecounts→_parse_featurecounts()→gene_expressiondeseq2→_parse_deseq2()+_parse_deseq2_normalized()→differential_expression+normalized_expressionrnaseq_enrichment→ gene-symbol annotation + four complete enrichment tables + four top-N SciPlot tables