一句话说明
MetaBAT2 根据四核苷酸频率和跨样本覆盖度,自动将宏基因组组装 contig 聚类成基因组箱(MAG)。
安装与配置
# 创建独立 conda 环境,避免依赖冲突
conda create -n binning python=3.9 -y
# 激活环境
conda activate binning
# 从 bioconda 安装 MetaBAT2(当前最新 v2.18)
conda install -c bioconda -c conda-forge metabat2 -y
# 验证安装
metabat2 --help # 查看帮助信息
jgi_summarize_bam_contig_depths --help # 查看覆盖度计算工具帮助
核心用法
第一步:比对生成 BAM 文件
# 用 BWA 将原始 reads 比对回组装 contig(每个样本都要做)
bwa index assembly.fa # 对组装结果建索引
# 样本1比对
bwa mem -t 16 assembly.fa sample1_R1.fq.gz sample1_R2.fq.gz \
| samtools sort -o sample1.bam # 比对并排序
samtools index sample1.bam # 建立 BAM 索引
# 样本2比对(多样本覆盖度有助于提高 binning 精度)
bwa mem -t 16 assembly.fa sample2_R1.fq.gz sample2_R2.fq.gz \
| samtools sort -o sample2.bam
samtools index sample2.bam
第二步:计算 contig 覆盖度
# jgi_summarize_bam_contig_depths 生成覆盖度矩阵
# --outputDepth:覆盖度输出文件名
# --pairedContigs:记录配对 contig 信息(可选)
jgi_summarize_bam_contig_depths \
--outputDepth depth.txt \
--pairedContigs paired.txt \
sample1.bam sample2.bam # 可以接多个 BAM 文件
第三步:执行 binning
# 核心命令:MetaBAT2 分箱
# -i:输入组装 fasta 文件
# -a:输入覆盖度文件(上一步生成的 depth.txt)
# -o:输出 bin 的前缀(会生成 bin.1.fa, bin.2.fa 等)
# -t:使用线程数
# -m:最小 contig 长度(默认 2500bp)
# --maxP:最大概率阈值(默认 95)
metabat2 \
-i assembly.fa \
-a depth.txt \
-o bins/bin \
-t 16 \
-m 2000 \
--maxP 95 \
--minS 60 \
--maxEdges 200 \
-v # -v 输出详细日志
参数详解
| 参数 | 说明 | 默认值 |
|---|
-i | 输入组装 fasta 文件 | 必填 |
-a | 覆盖度深度文件 | 可选(无则仅用 kmer) |
-o | 输出 bin 文件前缀 | 必填 |
-t | 并行线程数 | 0(全部) |
-m | 最小 contig 长度(bp) | 2500 |
--maxP | 最大概率阈值(%) | 95 |
--minS | 最小得分阈值 | 60 |
--maxEdges | 每个节点最大边数 | 200 |
--seed | 随机种子(保证可重现) | 0 |
-v | 详细输出模式 | 关闭 |
实战案例
# 完整流程示例:单样本宏基因组 binning
# 1. 建索引
bwa index megahit_output/final.contigs.fa
# 2. 比对
bwa mem -t 16 megahit_output/final.contigs.fa \
reads_R1.fq.gz reads_R2.fq.gz \
| samtools sort -@ 8 -o mapped.bam
samtools index mapped.bam
# 3. 计算覆盖度
jgi_summarize_bam_contig_depths \
--outputDepth contig_depth.txt \
mapped.bam
# 4. 运行 MetaBAT2
mkdir -p metabat2_bins
metabat2 -i megahit_output/final.contigs.fa \
-a contig_depth.txt \
-o metabat2_bins/bin \
-t 16 -m 2000 -v
# 5. 查看生成的 bin 数量
ls metabat2_bins/*.fa | wc -l # 统计 bin 文件数量
常见报错与解决
| 报错信息 | 原因 | 解决方法 |
|---|
No bins were produced | contig 太短或样本太少 | 降低 -m 到 1500,增加样本数 |
depth file not found | 覆盖度文件路径错误 | 检查 -a 参数路径是否正确 |
BAM file is not sorted | BAM 未排序 | 用 samtools sort 重新排序 |
out of memory | 内存不足 | 增加内存或减少线程数 -t |
| 输出 bin 过多(>500) | 参数过松 | 提高 --maxP 和 --minS 值 |
速查表
# 快速单行流程(已有 BAM 文件时)
jgi_summarize_bam_contig_depths --outputDepth depth.txt *.bam
metabat2 -i assembly.fa -a depth.txt -o bins/bin -t 16 -m 2000
# 查看 bin 统计信息
for f in bins/*.fa; do echo "$f: $(grep -c '>' $f) contigs"; done
# 统计 bin 总大小
for f in bins/*.fa; do awk '/^>/{next}{sum+=length($0)}END{print FILENAME": "sum" bp"}' $f; done