如何更新Cactus比对:halRemoveGenome与cactus-update-prepare增删基因组实战

📅 2026/8/25 9:36:04
如何更新Cactus比对:halRemoveGenome与cactus-update-prepare增删基因组实战
如何更新Cactus比对halRemoveGenome与cactus-update-prepare增删基因组实战【免费下载链接】cactusOfficial home of genome aligner based upon notion of Cactus graphs项目地址: https://gitcode.com/gh_mirrors/cact/cactusCactus 是一款基于 Cactus 图的多序列基因组比对工具常用于构建泛基因组与进化关系图。当你需要删除、新增或替换已有比对中的某个基因组时完全不必从头重算整个比对——借助halRemoveGenome与cactus-update-prepare两个工具只需局部重算受影响的小树就能快速完成更新。本文带你实战这两种 Cactus 比对更新方法从删除基因组到生成一步步执行配方新手也能照着做。为什么不用重新计算整个比对Cactus 产生的比对文件HAL 格式是层级结构的每个内部节点祖先对应一块独立的比对区域。这种结构带来一个巨大好处——✅ 删掉一个基因组只影响它父节点那棵子树✅ 加一个新基因组只需针对新节点附近的少数几个基因组重新比对一次✅ 替换基因组版本如新版基因组草图可看作先删后加。因此官方文档 doc/updating-alignments.md 建议动手前务必先备份 HAL 文件操作一旦出错文件可能完全无法恢复。场景一用 halRemoveGenome 快速删除基因组删除是最简单的操作一条命令搞定halRemoveGenome hal文件 要删除的基因组名几个要点要点说明只能删叶节点只有没有后代的基因组或后代已全部删空的祖先可以被删除父节点会保留被删基因组的父祖先仍然保留用于维持其他基因组的比对关系文件不会变小HAL 数据偏移无法移动文件体积不变如果需要更小的文件可以用h5repack或 HAL 工具包的halExtract压缩。场景二新增基因组——node 还是 branch新增基因组有两种策略官方文档给了一张经典示意图直观展示了基因组 6插入的位置差异方式1add-to-node挂到现有祖先下把新基因组作为某个现有祖先节点的新子节点只需跑1 次Cactus 比对再用halReplaceGenome合并。操作简单但一次比对涉及的基因组更多。方式2add-to-branch劈开一条分支在两个节点之间的分支上插入一个新祖先节点需要2 次Cactus 比对先推断底部新祖先再对齐父节点最后用halAddToBranch合并。计算量更小但步骤更多。方式3替换基因组替换例如更新某个组装版本的本质就是组合拳先halRemoveGenome删除旧版本再按 add-to-node 流程把新版本加回其父节点下。场景三用 cactus-update-prepare 生成执行配方手动执行上述步骤繁琐且容易出错官方提供了cactus-update-prepare源码见 src/cactus/update/cactus_update_prepare.py。它不直接跑比对而是打印出一份分步命令清单配方你可以逐步检查、逐条执行。运行前准备一个制表符分隔的输入文件格式为基因组名 FASTA路径 分支长度实战向节点添加 simGorilla以官方示例 examples/evolverMammals.txt 的比对结果为例把simGorilla挂到mr节点下cactus-update-prepare add node ./evolverMammals.hal ./input.txt \ --genome mr --outDir ./steps --jobStore ./jobstore它会依次生成预处理命令cactus-preprocess、一次比对命令cactus-blastcactus-align、合并命令halReplaceGenome以及最后的校验命令halValidate。完整示例见 doc/cactus-update-prepare.md。实战替换基因组时自动调用 halRemoveGenome替换版本升级后的simHuman_chr6其父节点为Anc1cactus-update-prepare replace ./evolverMammals.hal ./input.txt \ --genome simHuman_chr6 --outDir ./steps --jobStore ./jobstore生成的配方中会清晰出现删除与替换两步halRemoveGenome ./steps/Anc1.hal simHuman_chr6 halReplaceGenome --bottomAlignmentFile ./steps/Anc1.hal \ --topAlignmentFile ./evolverMammals.hal ./evolverMammals.hal Anc1 --hdf5InMemory可以看到replace子命令内部正是先删后加——它会自动从旧文件中查出父节点与分支长度保证新基因组接回正确位置注意replace 模式下输入文件第 3 列的分支长度会被忽略沿用原分支长度。实战向分支添加基因组cactus-update-prepare add branch --parentGenome Anc1 --childGenome mr \ ./evolverMammals.hal ./input.txt \ --ancestorName AncGorilla --topBranchLength 0.10 \ --outDir ./steps --jobStore ./jobstore其中--ancestorName为新推断祖先的命名--topBranchLength指定父节点到新祖先的分支长度若超过原分支长度导致底部长度为负可用--forceBottomBranchLength强制指定。更新后的效果与校验更新完成后HAL 文件中的 Newick 树会体现新结构例如添加simGorilla后变为((simHuman_chr6:0.144,(simMouse_chr6:0.085,simRat_chr6:0.092,simGorilla:0.075)mr:0.272)Anc1:0.021, (simCow_chr6:0.189,simDog_chr6:0.163)Anc2:0.033)Anc0;最后一步永远别忘——校验。配方末尾已自动带上校验命令手动操作时请执行halValidate --genome 你修改的基因组 ./evolverMammals.hal --hdf5InMemory不报错即表示更新成功。最终比对可通过 HAL 可视化工具查看整体效果如下面这条泛基因组染色体比对小结3 步上手 Cactus 比对更新️删除halRemoveGenome一条命令仅限叶节点添加/替换用cactus-update-prepare add node|branch或replace生成分步配方检查后逐步执行✔️校验halValidate确认无误全程记得先备份 HAL 文件。参考文档doc/updating-alignments.md、doc/cactus-update-prepare.md【免费下载链接】cactusOfficial home of genome aligner based upon notion of Cactus graphs项目地址: https://gitcode.com/gh_mirrors/cact/cactus创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考