跳转至

Purge_Dups — 基因组组装去冗余工具


一句话说明

Purge_Dups 用于去除基因组组装中由杂合区域产生的冗余 contig(haplotig),解决"组装大小是预期基因组的两倍"的问题,是杂合基因组组装后处理的必备步骤。


安装与配置

# 方法1:conda 安装(推荐)
conda install -c bioconda purge_dups  # 从 bioconda 安装

# 方法2:源码编译
git clone https://github.com/dfguan/purge_dups.git  # 克隆源码
cd purge_dups/src && make                              # 编译

# 验证安装
purge_dups --version 2>&1 || echo "purge_dups installed"
pd_config.py --help  # 检查配置脚本

# 还需要 minimap2(用于比对)
conda install -c bioconda minimap2

什么时候需要 Purge_Dups

  • 组装大小明显超过预期基因组大小(如预期 500Mb,实际组装 800Mb)
  • BUSCO 的 Duplicated 比例很高(>10%)
  • 组装后 contig 中有很多杂合区域被分别组装成独立的 contig

核心用法

标准流程(分步执行)

# 第1步:将读段比对到组装,计算覆盖度
minimap2 -x map-hifi -t 16 assembly.fasta hifi_reads.fq.gz \
  | gzip -c > reads_vs_asm.paf.gz      # 读段 vs 组装的 PAF 比对

# 第2步:计算覆盖度分布,确定阈值
pbcstat reads_vs_asm.paf.gz             # 统计覆盖度
# 生成 PB.base.cov(碱基覆盖度)和 PB.stat(统计信息)

calcuts PB.stat > cutoffs 2> calcults.log  # 自动计算覆盖度阈值

# 第3步:组装自身比对(找冗余区域)
split_fa assembly.fasta > assembly.split.fa  # 切分 contig
minimap2 -x asm5 -t 16 -DP assembly.split.fa assembly.split.fa \
  | gzip -c > asm_self.paf.gz           # 自身比对

# 第4步:执行 purge
purge_dups \
  -2 \                                   # 输出双倍单倍型
  -T cutoffs \                           # 覆盖度阈值文件
  -c PB.base.cov \                       # 碱基覆盖度
  asm_self.paf.gz > dups.bed             # 冗余区域 BED 文件

# 第5步:生成 purge 后的序列
get_seqs -e dups.bed assembly.fasta      # 输出 purged.fa 和 hap.fa
# purged.fa — 去冗余后的主要组装(使用这个)
# hap.fa — 被移除的 haplotig(可作为备选单倍型)

一键式流程(使用 run_purge_dups.py)

# 创建配置文件
pd_config.py \
  -l reads_vs_asm.paf.gz \              # 读段比对结果
  -s asm_self.paf.gz \                   # 自身比对结果
  assembly.fasta \                       # 输入组装
  config.json                            # 输出配置文件

# 运行完整流程
run_purge_dups.py config.json \
  /path/to/purge_dups/bin \              # purge_dups 的 bin 目录
  purge_output                           # 输出目录

验证 Purge 效果

# 用 BUSCO 对比 purge 前后
busco -i assembly.fasta -o busco_before -m genome -l eukaryota_odb10 -c 16
busco -i purged.fa -o busco_after -m genome -l eukaryota_odb10 -c 16

# 对比结果:
# Duplicated 应该明显下降
# Complete + Single-copy 应该保持或略有提升
# Missing 不应该明显增加

# 检查组装大小变化
seqkit stats assembly.fasta purged.fa hap.fa

常见问题与踩坑

问题1:purge 后 BUSCO Complete 下降明显

原因:阈值设置过于激进,把真实的基因区域也移除了
解决:检查 calcuts 的覆盖度阈值是否合理,手动调整 cutoffs 文件中的上下限

问题2:HiFi 和 ONT 数据用哪个参数

HiFi 比对minimap2 -x map-hifi
ONT 比对minimap2 -x map-ont
自身比对:都用 minimap2 -x asm5

问题3:覆盖度阈值不正确

检查方法:查看 PB.stat 文件和 calcuts 输出
手动调整:cutoffs 文件格式为 min_cov med_cov max_cov,可手动编辑

问题4:什么时候不需要 Purge_Dups

  • 纯合基因组(如近交系小鼠):不需要
  • Hifiasm 的 hap1/hap2 输出:已经分型,通常不需要
  • Hifiasm 的 p_ctg 输出:可能需要(取决于杂合度)

速查卡片

命令/参数用途
pbcstat reads.paf.gz统计覆盖度
calcuts PB.stat > cutoffs计算覆盖度阈值
split_fa assembly.fa > split.fa切分组装序列
purge_dups -2 -T cutoffs -c cov self.paf.gz执行 purge
get_seqs -e dups.bed assembly.fa生成 purge 后序列
purged.fa去冗余后的主要组装
hap.fa被移除的 haplotig
-x map-hifiHiFi 读段比对参数
-x asm5自身比对参数
pd_config.py生成配置文件