Skip to content

Qualimap

Qualimap is a platform-independent application for quality control of sequencing alignment data. RustQC reimplements the rnaseq mode of Qualimap, producing identical output that is directly parseable by MultiQC.

The Qualimap analysis runs automatically as part of rustqc rna in the same single-pass BAM scan as all other analyses — no extra BAM pass is needed.

RustQC’s Qualimap module computes:

  • Gene body coverage profiles: coverage distribution along normalized transcript positions from 5’ to 3’, revealing systematic biases such as 3’ degradation or incomplete reverse transcription
  • 5’/3’ bias metrics: quantitative measures of coverage uniformity across gene bodies, used for sample QC and batch-effect detection
  • Read origin classification: counts reads as exonic, intronic, intergenic, or overlapping multiple genes’ exons
  • Strand-specificity estimation: validates whether the observed strand distribution matches the expected library protocol
  • Splice junction motif analysis: counts canonical and non-canonical donor/acceptor junction motifs across all uniquely-mapped reads
  • Alignment statistics: primary/secondary alignments, multi-mappers, proper pairs, and supplementary read counts

All Qualimap output files are written to a qualimap/ subdirectory under the output directory, matching the directory structure that MultiQC expects.

  • Directoryqualimap/
    • qualimapReport.html Self-contained HTML report
    • rnaseq_qc_results.txt Qualimap-compatible QC report
    • Directoryraw_data_qualimapReport/
      • coverage_profile_along_genes_(total).txt Coverage profile (all genes)
      • coverage_profile_along_genes_(high).txt Coverage profile (highly expressed genes)
      • coverage_profile_along_genes_(low).txt Coverage profile (lowly expressed genes)
    • Directoryimages_qualimapReport/
      • Coverage Profile Along Genes (Total).png Gene body coverage chart
      • Coverage Profile Along Genes (High).png Coverage chart (highly expressed genes)
      • Coverage Profile Along Genes (Low).png Coverage chart (lowly expressed genes)
      • Transcript coverage histogram.png Coverage depth histogram (0-50X)
      • Reads Genomic Origin.png Exonic/intronic/intergenic pie chart
      • Junction Analysis.png Known/novel junction pie chart

File: rnaseq_qc_results.txt

The main QC report, formatted identically to Qualimap’s rnaseq output. This file is the primary input for MultiQC’s Qualimap rnaseq module. It contains four sections:

>>>>>>> Input
bam file = sample

Alignment-level statistics for all primary reads:

>>>>>>> Reads alignment
reads aligned (left/right) = 86,909,417 / 86,888,892
read pairs aligned = 86,778,882
total alignments = 189,114,475
secondary alignments = 15,316,166
non-unique alignments = 26,451,119
aligned to genes = 122,500,822
ambiguous alignments = 2,422,409
no feature assigned = 37,740,125
not aligned = 12,490,977
SSP estimation (fwd/rev) = 0.04 / 0.96
FieldDescription
reads alignedTotal primary alignments (excluding secondary, supplementary, QC-fail)
total alignmentsAll mapped reads (primary + secondary)
secondary alignmentsAlignments flagged as secondary (0x100)
non-unique alignmentsMulti-mappers (NH tag > 1)
aligned to genesReads assigned to exactly one gene (exonic)
ambiguous alignmentsReads enclosed by multiple genes
no feature assignedReads with no enclosing gene annotation
not alignedUnmapped reads encountered in the BAM
SSP estimationStrand-specificity proportions (forward / reverse)

Per-base classification of read origin, counting each read’s aligned bases against the annotation:

>>>>>>> Reads genomic origin
exonic = 122,500,822 (76.45%)
intronic = 29,504,572 (18.37%)
intergenic = 8,344,022 (5.19%)
overlapping exon = 6,754,726 (4.20%)
FieldDescription
exonicReads fully enclosed by a single gene’s exons
intronicReads overlapping introns but not exons
intergenicReads in regions with no gene annotation
overlapping exonReads partially overlapping exons (not fully enclosed)

Coverage bias metrics computed from the gene body coverage profile:

>>>>>>> Transcript coverage profile
5' bias = 0.87
3' bias = 0.77
5'-3' bias = 1.11
MetricDescription
5’ biasRatio of median coverage in the 5’ region (first 100bp) to the median of the middle 80%
3’ biasRatio of median coverage in the 3’ region (last 100bp) to the median of the middle 80%
5’-3’ biasRatio of 5’ median to 3’ median

Bias values close to 1.0 indicate uniform coverage. Values significantly above 1.0 for 5’ bias or below 1.0 for 3’ bias suggest degradation or protocol issues.

Files: coverage_profile_along_genes_(total|high|low).txt

Tab-separated files with 100 rows, one per percentile bin (0-99), showing the normalized coverage depth at each position along the gene body:

ColumnDescription
PositionPercentile position along gene body (0.0 to 99.0)
CoverageNormalized coverage depth at this position

Three tiers are produced:

TierFileDescription
Totalcoverage_profile_along_genes_(total).txtAll expressed genes
Highcoverage_profile_along_genes_(high).txtTop 500 genes by mean coverage
Lowcoverage_profile_along_genes_(low).txtBottom 500 genes by mean coverage

The total profile is the one parsed by MultiQC for the gene body coverage plot.

Chart images are generated in images_qualimapReport/, matching the plots produced by Qualimap’s HTML report:

Qualimap (Java)
RustQC
Qualimap coverage profile (total)
RustQC coverage profile (total)
Qualimap (Java)
RustQC
Qualimap coverage profile (high)
RustQC coverage profile (high)
Qualimap (Java)
RustQC
Qualimap coverage profile (low)
RustQC coverage profile (low)
Qualimap (Java)
RustQC
Qualimap transcript coverage histogram
RustQC transcript coverage histogram
Qualimap (Java)
RustQC
Qualimap reads genomic origin
RustQC reads genomic origin
Qualimap (Java)
RustQC
Qualimap junction analysis
RustQC junction analysis

File: qualimapReport.html

A self-contained HTML report matching Qualimap’s layout and styling, including all six chart images, summary tables, and a sidebar table of contents. The report uses embedded CSS and base64-encoded assets so it can be viewed in any browser without external dependencies.

View an example HTML report

PatternInterpretation
Flat/uniformGood library quality — even coverage across transcripts
3’ bias (rising right)RNA degradation or oligo-dT priming bias
5’ bias (rising left)Incomplete reverse transcription or random-priming protocol
Both-end dropoutShort fragment library or size-selection issue
MetricGoodProblematic
5’-3’ bias0.8 - 1.2< 0.5 or > 2.0
5’ bias0.8 - 1.2> 2.0 (enrichment) or < 0.5 (depletion)
3’ bias0.8 - 1.2> 2.0 (enrichment) or < 0.5 (depletion)

For strand-specific libraries, one of the SSP values should be close to 1.0 and the other close to 0.0. Common patterns:

Library typeExpected fwdExpected rev
Unstranded~0.5~0.5
dUTP / Illumina TruSeq Stranded~0.02-0.05~0.95-0.98
Ligation (e.g. SMARTer)~0.95-0.98~0.02-0.05

RustQC’s Qualimap analysis runs in the same single-pass BAM scan as all other tools, eliminating the separate name-sort and Qualimap run required by the original Java implementation.

Large dataset (~186M reads, GM12878)
ToolRuntimePeak RSSNotes
samtools sort -n12m 16s5.2 GBName-sort required by Qualimap Java (not needed by RustQC)
Qualimap rnaseq (Java)49m 58s4.9 GBSeparate BAM pass, single-threaded, requires name-sorted input
Total upstream pipeline~1h 2m 14sName-sort + Qualimap combined
RustQC (all tools)14m 54s11.4 GBSingle pass, all analyses combined, coordinate-sorted input
Small dataset (~52K reads, chr6)
ToolRuntimePeak RSSNotes
Qualimap rnaseq (Java)5.0s704.6 MBSeparate BAM pass, requires name-sorted input
RustQC (all tools)25.9s182.1 MBSingle pass, all analyses combined

Note: RustQC runtime shown is for all tools combined in a single pass. See Benchmark Details for a full breakdown.

On the small dataset, RustQC uses 182 MB of memory vs Qualimap’s 705 MB.

RustQC produces output effectively identical to Qualimap Java. Both tools were run on the same BAM file with matching parameters (--stranded reverse / strand-specific-reverse, same GENCODE GTF). Results below are from the AWS benchmark run (2026-03-09).

Small dataset (~52K reads, chr6)
MetricQualimap (Java)RustQCMatch?
reads aligned (left)24,79724,797Yes
reads aligned (right)24,77624,776Yes
read pairs aligned24,77324,773Yes
total alignments52,83952,839Yes
secondary alignments3,2663,266Yes
non-unique alignments5,4965,496Yes
aligned to genes31,65431,654Yes
ambiguous alignments1,0541,054Yes
no feature assigned14,63514,635Yes
not aligned00Yes
MetricQualimap (Java)RustQCMatch?
exonic fraction68.38%68.38%Yes
intronic fraction29.57%29.57%Yes
intergenic fraction2.04%2.04%Yes
MetricQualimap (Java)RustQCMatch?
5’ bias0.710.71Yes
3’ bias0.570.57Yes
5’-3’ bias1.301.19Minor diff

The 5’-3’ bias shows a minor difference (1.30 vs 1.19) on this small dataset. All other values are identical.

Large dataset (~186M reads, GM12878)
MetricQualimap (Java)RustQCMatch?
reads aligned (left)86,909,41786,909,417Yes
reads aligned (right)86,888,89286,888,892Yes
read pairs aligned86,778,88286,778,882Yes
total alignments189,114,475189,114,475Yes
secondary alignments15,316,16615,316,166Yes
non-unique alignments26,451,11926,451,119Yes
aligned to genes122,500,822122,500,822Yes
ambiguous alignments2,422,4092,422,409Yes
no feature assigned37,740,12537,740,125Yes
not aligned12,490,97712,490,977Yes
MetricQualimap (Java)RustQCMatch?
exonic fraction76.45%76.45%Yes
intronic fraction18.37%18.37%Yes
intergenic fraction5.19%5.19%Yes
overlapping exon4.20%4.20%Yes
MetricQualimap (Java)RustQCMatch?
5’ bias0.870.87Yes
3’ bias0.770.77Yes
5’-3’ bias1.111.11Yes
MetricQualimap (Java)RustQCMatch?
reads at junctions56,119,71956,119,719Yes

Junction motif type percentages match with rounding differences less than 0.05 percentage points. The underlying read counts are identical.

Both tools produce an HTML report with embedded charts and summary tables. View the full reports from the large benchmark run:

Note that RustQC base64-encodes all assets within the HTML file, so it can be shared stand-alone.

Gene body coverage can be enabled or disabled in the config. See the Configuration page for details.

  • Qualimap: Garcia-Alcalde F, Okonechnikov K, Carbonell J, et al. Qualimap: evaluating next-generation sequencing alignment data. Bioinformatics. 2012;28(20):2678-2679. Qualimap website