945 words
5 minutes
BWA 使用笔记
2026-05-13
2026-05-20

BWA (Burrows-Wheeler Alignment Tool) 是一个用于将短序列读段比对到大型参考基因组的软件包,如人类基因组。

主要算法#

BWA 包含三个算法:

  • BWA-backtrack:适用于 Illumina 序列读段,长度可达 100bp
  • BWA-SW:适用于 70bp 到 1Mbp 长度的序列
  • BWA-MEM:最新的算法,通常推荐用于高质量查询,因为它更快且更准确

基本使用流程#

  1. 构建参考基因组的 FM 索引:bwa index ref.fa
  2. 进行序列比对:
    • 单端序列:bwa mem ref.fa reads.fq > aln-se.sam
    • 双端序列:bwa mem ref.fa read1.fq read2.fq > aln-pe.sam

主要命令#

1. index 命令#

bwa index [-p prefix] [-a algoType] <in.db.fasta>

构建参考基因组的 FM 索引。

选项:

  • -p STR:输出数据库的前缀
  • -a STR:构建 BWT 索引的算法
    • is:IS 线性时间算法(默认)
    • bwtsw:BWT-SW 算法

2. mem 命令(推荐使用)#

bwa mem [-aCHMpP] [-t nThreads] [-k minSeedLen] [-w bandWidth]
[-d zDropoff] [-r seedSplitRatio] [-c maxOcc] [-A matchScore]
[-B mmPenalty] [-O gapOpenPen] [-E gapExtPen] [-L clipPen]
[-U unpairPen] [-R RGline] [-v verboseLevel]
db.prefix reads.fq [mates.fq]

使用 BWA-MEM 算法进行序列比对。

主要选项:

  • -t INT:线程数 [1]
  • -k INT:最小种子长度 [19]
  • -w INT:带宽 [100]
  • -r FLOAT:触发重新种子的阈值 [1.5]
  • -c INT:丢弃重复次数超过 INT 的 MEM [10000]
  • -M:标记较短的分割命中为次要命中(用于 Picard 兼容)
  • -a:输出所有找到的比对结果

3. aln 命令#

bwa aln [-n maxDiff] [-o maxGapO] [-e maxGapE] [-d nDelTail]
[-i nIndelEnd] [-k maxSeedDiff] [-l seedLen] [-t nThrds]
[-cRN] [-M misMsc] [-O gapOsc] [-E gapEsc] [-q trimQual]
<in.db.fasta> <in.query.fq> > <out.sai>

查找输入读段的 SA 坐标。

4. samse 命令#

bwa samse [-n maxOcc] <in.db.fasta> <in.sai> <in.fq> > <out.sam>

给定单端读段生成 SAM 格式的比对结果。

5. sampe 命令#

bwa sampe [-a maxInsSize] [-o maxOcc] [-n maxHitPaired] [-N maxHitDis] [-P]
<in.db.fasta> <in1.sai> <in2.sai> <in1.fq> <in2.fq> > <out.sam>

给定双端读段生成 SAM 格式的比对结果。

6. bwasw 命令#

bwa bwasw [-a matchScore] [-b mmPen] [-q gapOpenPen] [-r gapExtPen]
[-t nThreads] [-w bandWidth] [-T thres] [-s hspIntv] [-z zBest]
[-N nHspRev] [-c thresCoef] <in.db.fasta> <in.fq> [mate.fq]

使用 BWA-SW 算法进行序列比对。

SAM 格式说明#

BWA 输出的比对结果使用 SAM 格式,每行包含以下字段:

列号字段名说明
1QNAME查询名称
2FLAG标志位
3RNAME参考序列名称
4POS位置
5MAPQ比对质量
6CIGAR扩展 CIGAR 字符串
7MRNM配对参考序列名称
8MPOS配对位置
9ISIZE插入片段大小
10SEQ查询序列
11QUAL查询质量
12OPT可变字段

FLAG 位说明#

说明
p0x0001读段成对测序
P0x0002读段成对测序且正确配对
u0x0004查询序列未比对
U0x0008配对读段未比对
r0x0010查询序列链方向(1 表示反向)
R0x0020配对读段链方向
10x0040第一个读段
20x0080第二个读段
s0x0100非主比对
f0x0200质量控制失败
d0x0400光学或 PCR 重复

BWA 特有标签#

标签说明
NM编辑距离
MD不匹配位置/碱基
AS比对得分
BC条形码序列
X0最佳命中数
X1BWA 找到的次优命中数
XN参考序列中的不确定碱基数
XM比对中的错配数
XO缝隙开启数
XG缝隙延伸数
XT类型:Unique/Repeat/N/Mate-sw
XA替代命中;格式:(chr,pos,CIGAR,NM;)*
XS次优比对得分
XF正向/反向比对支持
XE支持种子数

性能说明#

  • 准确性:当禁用种子时,BWA 保证找到包含最大差异数的比对
  • 内存需求:使用 bwtsw 算法时,索引完整人类基因组需要 5GB 内存
  • 速度:比对速度主要取决于查询序列的错误率,不推荐用于错误率高于 0.02 的数据
  • 插入片段大小估计:BWA 每 256×1024 读段对估计插入片段大小分布

版本变化(BWA-0.6)#

  • 支持大于 4GB 的参考基因组
  • BWA-SW 支持长读段(>100bp)双端读段
  • 使用 64 位整数,内存使用量增加
BWA 使用笔记
https://blog.lihuax.online/posts/work/dev/bwa/
Author
Lihuax
Published at
2026-05-13
License
CC BY-NC-SA 4.0