Bulk RNA-seq Counts QC
Use this skill for bulk RNA-seq read processing, quantification, and count-matrix generation. If the user already has a count matrix and wants contrasts or statistics, use ngs-bulk-rnaseq-differential-expression.
Essential Inputs
Confirm:
- FASTQ or aligned-read inputs and paired-end/single-end status
- organism, genome build, FASTA, GTF, and gene ID convention
- strandedness or permission to infer strandedness
- sample sheet with biological condition, replicate, batch, and library metadata
- desired quantification: gene counts, transcript estimates, or both
- alignment strategy:
STAR/Salmon, Salmon-only, featureCounts from BAMs, or existing lab protocol
Route
Prefer nf-core/rnaseq for standard processing when a stable container or HPC runtime is available. Use the local_light Snakemake/Salmon path for small local/devbox feasibility runs when Docker, registry egress, or Nextflow process containers are the blocker.
The plugin-owned local runner is:
python plugins/ngs-analysis/scripts/run_bulk_rnaseq_counts_qc.py \
--sample-sheet samplesheet.csv \
--fastq-root path/to/fastqs \
--transcriptome-fasta reference/transcriptome.fasta \
--genome-fasta reference/genome.fa \
--annotation-gtf reference/genes.gtf \
--execute
Omit --execute for validation plus Snakemake workflow validation only. Use --no-dry-run only when the user wants input validation and run-envelope preparation without workflow graph validation.
The runner emits a run-local resources/ readiness bundle with resource_plan.json, resource_manifest.tsv, resource_env.sh, and resource_readiness.md. Resource checks are advisory by default for custom or reduced references; add --genome-build, --bundle-root <bundle>=<path>, and --require-resource-plan when a registered genome bundle must be complete before the run is considered ready.
Preflight command:
python plugins/ngs-analysis/scripts/ngs_preflight.py --pipeline bulk_rnaseq_counts_qc --emit-install-plan
python plugins/ngs-analysis/scripts/ngs_preflight.py --profile local_light --emit-install-plan
Decision Points
- If strandedness is unknown, infer it before final counting; do not lock in a design based on library guesses.
- If strandedness is provided, carry it into the quantification command and flag any disagreement between the configured library type and Salmon's inferred format.
- Keep genome FASTA, GTF, transcriptome, and aligner indexes from the same build/release.
- Inspect per-sample reads, mapping rate, rRNA/mitochondrial fraction when available, duplication, insert size, gene-body bias, and assignment rate.
- Preserve raw counts separately from normalized expression.
- Carry sample metadata forward exactly; downstream DE depends on this table.
Outputs
Produce:
- sample sheet and command/profile
- reference manifest with genome and GTF release
- MultiQC or equivalent processing summary
- Salmon
quant.sf outputs, TPM/NumReads/effective-length matrices, and carried-forward sample metadata
- Gene-level expected-count and TPM matrices derived from transcript-level Salmon outputs, plus a
tx2gene provenance table
- Compact QC verdict JSON covering mapping rate, duplication, library-type agreement, and outlier samples
- Browser-safe MultiQC helper HTML pages and a localhost launch hint for reliable in-app review
- Run-local reference readiness artifacts under
resources/, including the resource plan, manifest, environment exports, and Markdown readiness summary
- issues that block differential expression, such as missing replicates, mislabeled groups, or severe batch/library failures
- standard run envelope:
run_manifest.json, config.json, validation/, logs/, versions/, artifact_index.json, and summary.md
1---2name: ngs-bulk-rnaseq-counts-qc3description: Run or plan bulk RNA-seq FASTQ-to-count processing with sample-sheet, strandedness, genome annotation, alignment or pseudoalignment, MultiQC, and count-matrix QC checks.4---56# Bulk RNA-seq Counts QC78Use this skill for bulk RNA-seq read processing, quantification, and count-matrix generation. If the user already has a count matrix and wants contrasts or statistics, use `ngs-bulk-rnaseq-differential-expression`.910## Essential Inputs1112Confirm:1314- FASTQ or aligned-read inputs and paired-end/single-end status15- organism, genome build, FASTA, GTF, and gene ID convention16- strandedness or permission to infer strandedness17- sample sheet with biological condition, replicate, batch, and library metadata18- desired quantification: gene counts, transcript estimates, or both19- alignment strategy: `STAR/Salmon`, Salmon-only, featureCounts from BAMs, or existing lab protocol2021## Route2223Prefer `nf-core/rnaseq` for standard processing when a stable container or HPC runtime is available. Use the `local_light` Snakemake/Salmon path for small local/devbox feasibility runs when Docker, registry egress, or Nextflow process containers are the blocker.2425The plugin-owned local runner is:2627```bash28python plugins/ngs-analysis/scripts/run_bulk_rnaseq_counts_qc.py \29 --sample-sheet samplesheet.csv \30 --fastq-root path/to/fastqs \31 --transcriptome-fasta reference/transcriptome.fasta \32 --genome-fasta reference/genome.fa \33 --annotation-gtf reference/genes.gtf \34 --execute35```3637Omit `--execute` for validation plus Snakemake workflow validation only. Use `--no-dry-run` only when the user wants input validation and run-envelope preparation without workflow graph validation.3839The runner emits a run-local `resources/` readiness bundle with `resource_plan.json`, `resource_manifest.tsv`, `resource_env.sh`, and `resource_readiness.md`. Resource checks are advisory by default for custom or reduced references; add `--genome-build`, `--bundle-root <bundle>=<path>`, and `--require-resource-plan` when a registered genome bundle must be complete before the run is considered ready.4041Preflight command:4243```bash44python plugins/ngs-analysis/scripts/ngs_preflight.py --pipeline bulk_rnaseq_counts_qc --emit-install-plan45python plugins/ngs-analysis/scripts/ngs_preflight.py --profile local_light --emit-install-plan46```4748## Decision Points4950- If strandedness is unknown, infer it before final counting; do not lock in a design based on library guesses.51- If strandedness is provided, carry it into the quantification command and flag any disagreement between the configured library type and Salmon's inferred format.52- Keep genome FASTA, GTF, transcriptome, and aligner indexes from the same build/release.53- Inspect per-sample reads, mapping rate, rRNA/mitochondrial fraction when available, duplication, insert size, gene-body bias, and assignment rate.54- Preserve raw counts separately from normalized expression.55- Carry sample metadata forward exactly; downstream DE depends on this table.5657## Outputs5859Produce:6061- sample sheet and command/profile62- reference manifest with genome and GTF release63- MultiQC or equivalent processing summary64- Salmon `quant.sf` outputs, TPM/NumReads/effective-length matrices, and carried-forward sample metadata65- Gene-level expected-count and TPM matrices derived from transcript-level Salmon outputs, plus a `tx2gene` provenance table66- Compact QC verdict JSON covering mapping rate, duplication, library-type agreement, and outlier samples67- Browser-safe MultiQC helper HTML pages and a localhost launch hint for reliable in-app review68- Run-local reference readiness artifacts under `resources/`, including the resource plan, manifest, environment exports, and Markdown readiness summary69- issues that block differential expression, such as missing replicates, mislabeled groups, or severe batch/library failures70- standard run envelope: `run_manifest.json`, `config.json`, `validation/`, `logs/`, `versions/`, `artifact_index.json`, and `summary.md`