Minimap2 长读长比对
Minimap2 是目前最主流的长读长序列比对工具,支持 PacBio、Nanopore 等三代测序数据的比对,速度比传统工具快数十倍,同时支持 RNA 剪接比对和组装比对。
核心知识点
| 知识点 | 说明 |
|---|
| 工具定位 | 通用序列比对工具,专长长读长,也支持短读长 |
| 最新版本 | v2.29(MIT 许可证) |
| 开发者 | Heng Li(同时也是 BWA 的作者) |
| 核心算法 | 基于 minimizer 的种子-链-比对(seed-chain-align)策略 |
| 性能特点 | 比 BLASR、BWA-MEM 等快数十倍 |
| 适用数据 | PacBio HiFi/CLR、Nanopore、Illumina 短读、RNA-seq、组装序列 |
| v2.29 新功能 | splice:sr 预设(短 RNA-seq 比对),lr:hqae 预设(精确长读回贴组装) |
| Python 接口 | mappy 库,可在 Python 中调用 minimap2 |
安装配置
方法一:Conda 安装(推荐)
# 用 bioconda 安装 minimap2
conda install -c bioconda minimap2 # 安装 minimap2
minimap2 --version # 查看版本,应显示 2.29 或更高
方法二:从源码编译
# 克隆仓库并编译
git clone https://github.com/lh3/minimap2 # 克隆源码
cd minimap2 # 进入目录
make # 编译
# 安装到系统路径
sudo cp minimap2 /usr/local/bin/ # 复制到系统路径
方法三:Python 接口(mappy)
# 安装 Python 绑定
pip install mappy # 安装 minimap2 的 Python 接口
基本使用
1. 预设模式速查
# Minimap2 通过预设模式(preset)自动配置参数
# 常用预设模式:
# 长读长比对
minimap2 -ax map-ont ref.fa ont_reads.fq # Nanopore 基因组读长
minimap2 -ax map-hifi ref.fa hifi_reads.fq # PacBio HiFi 读长
minimap2 -ax map-pb ref.fa pb_reads.fq # PacBio CLR 读长
# RNA 比对
minimap2 -ax splice ref.fa rna_reads.fq # 长读 RNA(PacBio Iso-Seq)
minimap2 -ax splice:sr ref.fa R1.fq R2.fq # 短读 RNA(v2.29 新增)
# 组装比对
minimap2 -ax asm5 ref.fa assembly.fa # 组装 vs 参考(<5% 差异)
minimap2 -ax asm20 ref.fa assembly.fa # 组装 vs 参考(<20% 差异)
# 精确长读回贴到自身组装
minimap2 -ax lr:hqae assembly.fa hifi.fq # v2.29 新增,更准确
2. Nanopore 数据标准比对流程
# 第一步:比对 Nanopore 读长到参考基因组
minimap2 -ax map-ont \
-t 16 \ # 使用 16 个线程
--secondary=no \ # 不输出次优比对(减少文件大小)
ref.fa \ # 参考基因组(FASTA 格式)
nanopore_reads.fq.gz \ # Nanopore 测序数据
| samtools sort -@ 4 \ # 排序
-o nanopore.sorted.bam # 输出排序 BAM
# 第二步:建索引
samtools index nanopore.sorted.bam # 为 BAM 建索引
# 第三步:查看统计
samtools flagstat nanopore.sorted.bam # 查看比对率
3. PacBio HiFi 数据比对
# HiFi 数据比对(高精度长读长)
minimap2 -ax map-hifi \
-t 16 \ # 线程数
--cs \ # 输出 cs 标签(变异检测需要)
-R "@RG\tID:sample\tSM:sample" \ # Read Group
ref.fa \ # 参考基因组
hifi_reads.fq.gz \ # HiFi 测序数据
| samtools sort -@ 4 \ # 排序
-o hifi.sorted.bam # 输出
samtools index hifi.sorted.bam # 建索引
高级用法
1. 建立参考基因组索引(加速重复比对)
# 如果要多次比对同一参考基因组,先建索引
minimap2 -d ref.mmi ref.fa # 将参考基因组保存为 .mmi 索引文件
# 之后用索引文件代替 FASTA
minimap2 -ax map-ont \
-t 16 \
ref.mmi \ # 使用预建的索引(启动更快)
reads.fq.gz \
| samtools sort -o out.bam
2. 全基因组序列比较
# 两个基因组之间的比对(比如人类 vs 黑猩猩)
minimap2 -ax asm5 \
-t 32 \ # 多线程
--eqx \ # 用 =/X 代替 M(区分匹配和错配)
genome1.fa \ # 参考基因组
genome2.fa \ # 查询基因组
> genome_comparison.sam # 全基因组比对结果
3. Python 接口使用(mappy)
import mappy as mp # 导入 minimap2 的 Python 接口
# 加载参考基因组索引
aligner = mp.Aligner("ref.fa", preset="map-ont") # 创建比对器,使用 ONT 预设
if not aligner: # 检查索引是否加载成功
raise Exception("索引加载失败")
# 对单条序列进行比对
for hit in aligner.map("ACGTACGTACGT..."): # 比对一条序列
print(f"目标: {hit.ctg}") # 比对到的参考序列名
print(f"位置: {hit.r_st}-{hit.r_en}") # 比对位置
print(f"比对质量: {hit.mapq}") # 比对质量值
print(f"CIGAR: {hit.cigar_str}") # CIGAR 字符串
4. 批量比对脚本
#!/bin/bash
# batch_minimap2.sh - 批量长读长比对
REF_MMI="ref.mmi" # 预建的 minimap2 索引
THREADS=32 # 线程数
PRESET="map-ont" # 预设模式
OUTDIR="aligned" # 输出目录
mkdir -p $OUTDIR # 创建输出目录
for FQ in raw_data/*.fastq.gz; do
SAMPLE=$(basename $FQ .fastq.gz) # 提取样本名
echo "比对中: $SAMPLE"
minimap2 -ax $PRESET \
-t $THREADS \ # 多线程
--secondary=no \ # 不要次优比对
$REF_MMI \ # 参考索引
$FQ \ # 输入数据
| samtools sort -@ 8 \ # 排序
-o ${OUTDIR}/${SAMPLE}.bam # 输出 BAM
samtools index ${OUTDIR}/${SAMPLE}.bam # 建索引
done
echo "全部完成"
常见报错与解决
| 报错信息 | 原因 | 解决方法 |
|---|
failed to open file | 输入文件路径错误或不存在 | 检查文件路径,ls 确认文件存在 |
WARNING: unknown option | 参数拼写错误 | 检查 minimap2 --help 确认参数 |
| 内存不足 / killed | 参考基因组太大 | 用 -I 控制索引大小,或加内存 |
| 比对率极低 | 预设模式选错了 | Nanopore 用 map-ont,HiFi 用 map-hifi |
[WARNING] No index loaded | 索引文件损坏 | 重新建索引 minimap2 -d ref.mmi ref.fa |
| SAM 里全是未比对 | 数据和参考基因组物种不匹配 | 确认参考基因组是否正确 |
速查表
# ===== Minimap2 速查表 =====
# 安装
conda install -c bioconda minimap2 # conda 安装
pip install mappy # Python 接口
# 建索引(可选,加速重复比对)
minimap2 -d ref.mmi ref.fa # 构建索引
# === 常用预设模式 ===
# map-ont Nanopore 基因组读长
# map-hifi PacBio HiFi 读长
# map-pb PacBio CLR 读长
# lr:hq 高精度长读长(通用)
# lr:hqae 精确长读回贴组装(v2.29)
# splice 长读 RNA 比对
# splice:sr 短读 RNA 比对(v2.29 新增)
# asm5 组装比对(<5% 差异)
# asm20 组装比对(<20% 差异)
# 标准比对流程
minimap2 -ax map-ont -t 16 ref.fa reads.fq.gz \
| samtools sort -o sorted.bam
samtools index sorted.bam
# 常用参数
# -a 输出 SAM 格式(默认 PAF)
# -x PRESET 预设模式
# -t N 线程数
# --cs 输出 cs 标签(变异检测用)
# --secondary=no 不输出次优比对
# --eqx 区分匹配(=)和错配(X)
# -R STR Read Group 信息
# -K NUM 每批碱基数(可重复性)
# --split-prefix 大基因组拆分比对