跳转至

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  大基因组拆分比对