Artwork from anime 'mono'
945 words
5 minutes
BWA 使用笔记
BWA (Burrows-Wheeler Alignment Tool) 是一个用于将短序列读段比对到大型参考基因组的软件包,如人类基因组。
主要算法
BWA 包含三个算法:
- BWA-backtrack:适用于 Illumina 序列读段,长度可达 100bp
- BWA-SW:适用于 70bp 到 1Mbp 长度的序列
- BWA-MEM:最新的算法,通常推荐用于高质量查询,因为它更快且更准确
基本使用流程
- 构建参考基因组的 FM 索引:
bwa index ref.fa - 进行序列比对:
- 单端序列:
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 格式,每行包含以下字段:
| 列号 | 字段名 | 说明 |
|---|---|---|
| 1 | QNAME | 查询名称 |
| 2 | FLAG | 标志位 |
| 3 | RNAME | 参考序列名称 |
| 4 | POS | 位置 |
| 5 | MAPQ | 比对质量 |
| 6 | CIGAR | 扩展 CIGAR 字符串 |
| 7 | MRNM | 配对参考序列名称 |
| 8 | MPOS | 配对位置 |
| 9 | ISIZE | 插入片段大小 |
| 10 | SEQ | 查询序列 |
| 11 | QUAL | 查询质量 |
| 12 | OPT | 可变字段 |
FLAG 位说明
| 位 | 值 | 说明 |
|---|---|---|
| p | 0x0001 | 读段成对测序 |
| P | 0x0002 | 读段成对测序且正确配对 |
| u | 0x0004 | 查询序列未比对 |
| U | 0x0008 | 配对读段未比对 |
| r | 0x0010 | 查询序列链方向(1 表示反向) |
| R | 0x0020 | 配对读段链方向 |
| 1 | 0x0040 | 第一个读段 |
| 2 | 0x0080 | 第二个读段 |
| s | 0x0100 | 非主比对 |
| f | 0x0200 | 质量控制失败 |
| d | 0x0400 | 光学或 PCR 重复 |
BWA 特有标签
| 标签 | 说明 |
|---|---|
| NM | 编辑距离 |
| MD | 不匹配位置/碱基 |
| AS | 比对得分 |
| BC | 条形码序列 |
| X0 | 最佳命中数 |
| X1 | BWA 找到的次优命中数 |
| 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 位整数,内存使用量增加