By yangyulei, 15 July, 2026

一、DupGen_finder

在植物基因组中,大量基因来源于不同形式的复制事件,例如全基因组复制(Whole Genome Duplication,WGD)、串联复制(Tandem Duplication)和转座复制(Transposed Duplication)等。这些复制事件共同驱动了植物基因家族扩张和功能创新。

然而,仅通过 BLAST 获得同源基因对,并不能判断这些基因是如何产生的。

DupGen_finder 是针对这一问题开发的工具。它能够结合基因组位置信息(GFF)和蛋白同源关系(BLAST),将旁系同源基因进一步划分为不同的复制类型。

目前 DupGen_finder 可识别以下五类基因复制模式:

复制类型

含义

WGD (Whole Genome Duplication)

全基因组复制或大片段复制产生的重复基因

Tandem duplication

串联复制,相邻位置连续出现的重复基因

Proximal duplication

邻近复制,两基因距离较近但并非紧邻

Transposed duplication

转座复制,通过转座事件形成的新拷贝

Dispersed duplication

分散复制,不属于以上任何一种复制模式

因此,DupGen_finder 不仅可以获得旁系同源基因对,还能够回答一个更重要的问题:

这些重复基因究竟是通过哪一种复制方式产生的?

这些结果可用于后续分析如:

  • 基因家族扩张分析
  • WGD 研究
  • 重复基因年龄分析(Ks)
  • Ka/Ks 分析
  • 不同复制模式的功能比较
  • 表达模式分析
  • GO/KEGG 富集分析

GitHub:https://github.com/qiao-xin/DupGen_finder

二、DupGen_finder 与 DupGen_finder-unique 有什么区别?

官方提供了两个版本

  • DupGen_finder
  • DupGen_finder-unique

它们最大的区别在于是否保留所有重复关系

(1)DupGen_finder

普通版本会保留所有检测到的重复基因关系

例如:

GeneA —— GeneB
GeneA —— GeneC
GeneA —— GeneD

如果 GeneA 与多个基因均存在复制关系,那么所有基因对都会被保留下来。

因此,同一个基因可能在输出文件中出现多次。

这种结果能够最大程度保留基因复制历史,适用于:

  • 后续 Ka/Ks 分析
  • 重复事件研究
  • 基因家族扩张分析

(2)DupGen_finder-unique

Unique 版本则进一步进行了唯一化(unique assignment)处理

对于同一个基因,仅保留一条最终复制关系

例如:

普通 DupGen_finder 输出:

GeneA —— GeneB
GeneA —— GeneC
GeneA —— GeneD

Unique 版本最终可能只保留:

GeneA —— GeneB

这里并不是简单随机删除,而是根据 DupGen_finder 预设的复制类型判定及去重规则,为每个基因保留唯一的一条复制关系,使每个基因最终只归属于一个复制事件

三、DupGen_finder需要哪些输入?

运行 DupGen_finder 所需的核心输入有四个必须文件:

输入文件

作用

Species.gff

目标物种基因位置信息(MCScanX 格式)

Species.blast

目标物种蛋白自比对 BLAST 结果

Species_Outgroup.gff

目标物种与外群组合的 GFF 文件

Species_Outgroup.blast

目标物种与外群蛋白 BLAST 结果

这些文件均由蛋白序列、GFF 注释文件以及 BLAST 比对结果进一步处理得到

其中,外群(Outgroup)的作用主要是帮助程序识别 Transposed duplication(转座复制),因此,应尽量选择系统发育关系较近且基因组质量较高的物种作为外群

四、分析流程

DupGen_finder 的整体分析流程如下:

 

 

五、脚本函数调用DupGen_finder

    def run_dupgen_finder(self):
        self.check_dupgen_input()
        cmd = [
            "perl", self.dupgen_script,
            "-i", self.dup_workspace,
            "-t", self.focal,
            "-c", self.outgroup,
            "-o", self.dup_workspace, 
            "-s", "3"
        ]
        self.logger.info("Running DupGen_finder:\n" + " ".join(cmd))
        subprocess.run(cmd, check=True)  
        self.check_dupgen_output(self.dup_workspace)

其中:

  • -i:输入目录;
  • -t:目标物种;
  • -c:外群物种;
  • -o:输出目录;
  • -s:邻近复制(Proximal duplication)允许间隔的基因数,本例设置为 3。

六、最终输出结果

DupGen_finder 会分别输出不同复制类型对应的基因对,例如:

Tgra.wgd.pairs
Tgra.tandem.pairs
Tgra.proximal.pairs
Tgra.transposed.pairs
Tgra.dispersed.pairs

七、“踩坑总结”

在实际使用 DupGen_finder 的过程中,我遇到了不少问题,这里总结几个最容易踩坑的地方,希望能够帮助后来者少走弯路。

1. GFF 与 BLAST 的基因 ID 必须完全一致。

这是最常见的问题,也是导致 DupGen_finder 无法正常运行的主要原因。无论是物种前缀、evm.TUevm.model 的命名差异,还是不同数据库附加的 gene-rna- 等前缀,都需要在分析前统一,否则 MCScanX 无法正确匹配同源关系。

2. 原始 GFF 不能直接作为输入。

DupGen_finder 实际调用的是 MCScanX,因此需要先将 GFF 转换为 MCScanX 要求的四列表格式,仅保留染色体、基因 ID、起始位置和终止位置等必要信息。

3. 外群物种的选择会影响转座复制(Transposed duplication)的识别。

建议选择与目标物种系统发育关系适中、基因组质量较高且注释完整的外群,以提高复制类型判定的可靠性。

4. 自比对 BLAST 与目标物种-外群 BLAST 均不可缺少。

两类 BLAST 结果承担不同的功能,缺少任何一个都会影响 DupGen_finder 对复制类型的完整判定。

5. 最长转录本筛选能够减少重复和歧义。

对于具有多个转录本的基因,建议在分析前统一保留最长转录本,避免同一基因因多个转录本而重复参与复制关系判定。

 

金山文档链接:https://www.kdocs.cn/l/ctwQ86QXMAk0