BioSkills bio-read-alignment-bwa-alignment

Align DNA short reads to reference genomes using bwa-mem2, the faster successor to BWA-MEM. Use when aligning DNA short reads to a reference genome.

install
source · Clone the upstream repo
git clone https://github.com/GPTomics/bioSkills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/GPTomics/bioSkills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/read-alignment/bwa-alignment" ~/.claude/skills/gptomics-bioskills-bio-read-alignment-bwa-alignment && rm -rf "$T"
manifest: read-alignment/bwa-alignment/SKILL.md
source content

Version Compatibility

Reference examples tested with: GATK 4.5+, samtools 1.19+

Before using code patterns, verify installed versions match. If versions differ:

  • CLI:
    <tool> --version
    then
    <tool> --help
    to confirm flags

If code throws ImportError, AttributeError, or TypeError, introspect the installed package and adapt the example to match the actual API rather than retrying.

BWA-MEM2 Alignment

"Align reads with BWA" → Map DNA reads to a reference genome using BWA-MEM2, the standard aligner for whole-genome and exome sequencing.

  • CLI:
    bwa-mem2 mem -t 8 ref.fa R1.fq R2.fq | samtools sort -o aligned.bam

Build Index

# Index reference genome (required once)
bwa-mem2 index reference.fa

# Creates: reference.fa.0123, reference.fa.amb, reference.fa.ann, reference.fa.bwt.2bit.64, reference.fa.pac

Basic Alignment

# Paired-end reads
bwa-mem2 mem -t 8 reference.fa reads_1.fq.gz reads_2.fq.gz > aligned.sam

# Single-end reads
bwa-mem2 mem -t 8 reference.fa reads.fq.gz > aligned.sam

Alignment with Read Groups

# Add read group information (required for GATK)
bwa-mem2 mem -t 8 \
    -R '@RG\tID:sample1\tSM:sample1\tPL:ILLUMINA\tLB:lib1' \
    reference.fa reads_1.fq.gz reads_2.fq.gz > aligned.sam

Direct to Sorted BAM

# Pipe to samtools for sorted BAM output
bwa-mem2 mem -t 8 \
    -R '@RG\tID:sample1\tSM:sample1\tPL:ILLUMINA' \
    reference.fa reads_1.fq.gz reads_2.fq.gz | \
    samtools sort -@ 4 -o aligned.sorted.bam -

# Index the BAM
samtools index aligned.sorted.bam

Mark Duplicates Pipeline

Goal: Produce a duplicate-marked, sorted BAM file from raw reads in a single streaming pipeline.

Approach: Pipe BWA-MEM2 output through samtools fixmate (to add mate score tags), coordinate sort, and markdup in a single command chain to avoid intermediate files.

# Full pipeline: align, fixmate, sort, markdup
bwa-mem2 mem -t 8 -R '@RG\tID:sample1\tSM:sample1\tPL:ILLUMINA' \
    reference.fa reads_1.fq.gz reads_2.fq.gz | \
    samtools fixmate -m -@ 4 - - | \
    samtools sort -@ 4 - | \
    samtools markdup -@ 4 - aligned.markdup.bam

samtools index aligned.markdup.bam

Common Options

bwa-mem2 mem -t 8 \         # Threads
    -M \                     # Mark shorter split hits as secondary (Picard compatible)
    -Y \                     # Use soft clipping for supplementary alignments
    -K 100000000 \           # Process INT input bases in each batch
    -R '@RG\tID:s1\tSM:s1' \ # Read group
    reference.fa r1.fq r2.fq

Key Parameters

ParameterDefaultDescription
-t1Number of threads
-k19Minimum seed length
-w100Band width for extension
-r1.5Re-seeding trigger ratio
-c500Skip seeds with more than INT hits
-A1Match score
-B4Mismatch penalty
-O6Gap open penalty
-E1Gap extension penalty
-MoffMark secondary alignments

Output Filters

# Filter unmapped and low quality
bwa-mem2 mem -t 8 reference.fa r1.fq r2.fq | \
    samtools view -@ 4 -bS -q 20 -F 4 - | \
    samtools sort -@ 4 -o aligned.filtered.bam -

Split Read Alignment

# For SV detection, use -Y for soft clipping
bwa-mem2 mem -t 8 -Y reference.fa r1.fq r2.fq > aligned.sam

Memory Requirements

  • Index loading: ~10GB for human genome
  • Per thread: ~1-2GB
  • Typical human WGS: 30-50GB RAM with 8 threads

BWA-MEM (Alternative)

# Build index
bwa index reference.fa

# Paired-end alignment
bwa mem -t 8 reference.fa reads_1.fq.gz reads_2.fq.gz > aligned.sam

# With read groups
bwa mem -t 8 -R '@RG\tID:sample1\tSM:sample1\tPL:ILLUMINA' \
    reference.fa reads_1.fq.gz reads_2.fq.gz > aligned.sam

# Direct to sorted BAM
bwa mem -t 8 -R '@RG\tID:sample1\tSM:sample1\tPL:ILLUMINA' \
    reference.fa reads_1.fq.gz reads_2.fq.gz | \
    samtools sort -@ 4 -o aligned.sorted.bam -

BWA-MEM vs BWA-MEM2

FeatureBWA-MEMBWA-MEM2
StatusActiveArchived
Speed1x2-3x faster
Index format.bwt.bwt.2bit.64
ResultsBaselineNearly identical
Memory~5GB~10GB

Related Skills

  • read-qc/fastp-workflow - Preprocess reads before alignment
  • alignment-files/alignment-sorting - Post-alignment processing
  • alignment-files/duplicate-handling - Mark duplicates
  • variant-calling/variant-calling - Call variants from BAM