Microbial genomics · WGS
M. tuberculosis WGS variant analysis workflow
An end-to-end Galaxy workflow for Mycobacterium tuberculosis short-read data, from sequence retrieval through QC, alignment, coverage, variant calling and annotation to read-level review, built to interpret resistance-associated variants reproducibly.

Resistance calling has many places to go wrong
Interpreting drug resistance from WGS needs a long, multi-step workflow with several failure points, and a high risk of analysing isolates inconsistently. I wanted one reproducible workflow that runs every isolate the same way and leaves evidence for each call.
Eleven steps from reads to a resistance call
- Read retrieval with
fasterq-dump - Quality control with Falco
- Trimming with fastp and Cutadapt
- Alignment to the reference with BWA-MEM2
- Sorting and duplicate marking with Picard
- Mapping QC with samtools flagstat and idxstats
- Coverage with mosdepth
- Variant calling and filtering with bcftools
- Annotation with bcftools csq, SnpEff and SnpSift
- Aggregate reporting with MultiQC
- Read-level review in IGV
Resistance mutations, confirmed at the read level
The workflow called rpoB mutations S450L, H445R, D435Y and L430P and katG mutations S315T and Q295*. On those genotypes, 4 isolates were classified as MDR-TB and 2 as rifampicin-resistant.
Coverage mattered as much as the calls: with 98–99.6% of reads mapped and at least 52× depth across every target locus, a missing mutation could be read as a true negative rather than a coverage gap.


What’s in the repository
- QC and trimming summary, and mapping summary.
- Variant tables for resistance-associated loci and a resistance interpretation summary.
- IGV screenshots for selected mutations.
- The calls are genotypic predictions; phenotypic susceptibility testing was outside the scope of this project.