一、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 —— GeneDUnique 版本最终可能只保留:
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.TU 与 evm.model 的命名差异,还是不同数据库附加的 gene-、rna- 等前缀,都需要在分析前统一,否则 MCScanX 无法正确匹配同源关系。
2. 原始 GFF 不能直接作为输入。
DupGen_finder 实际调用的是 MCScanX,因此需要先将 GFF 转换为 MCScanX 要求的四列表格式,仅保留染色体、基因 ID、起始位置和终止位置等必要信息。
3. 外群物种的选择会影响转座复制(Transposed duplication)的识别。
建议选择与目标物种系统发育关系适中、基因组质量较高且注释完整的外群,以提高复制类型判定的可靠性。
4. 自比对 BLAST 与目标物种-外群 BLAST 均不可缺少。
两类 BLAST 结果承担不同的功能,缺少任何一个都会影响 DupGen_finder 对复制类型的完整判定。
5. 最长转录本筛选能够减少重复和歧义。
对于具有多个转录本的基因,建议在分析前统一保留最长转录本,避免同一基因因多个转录本而重复参与复制关系判定。