写在前面
节前,我临时收到钦佩已久的胡老师的微信语音,主要问及“EasyCodeML”这款软件能有批量运行。有关注Raindy(福建农林高芳銮老师)和生信札记的朋友应该知道。EasyCodeML是Raindy与我在六年前启动开发的一个软件,主要是方便用户快速完成正选择分析。该软件发表至今,与 TBtools 类似,一直有不少朋友关注,当然也是高被引。
胡老师关注的是批量跑BSM,大体简化场景为检测不同物种中数百甚至上千个基因是否收到正选择。类似的问题,高老师曾与我提过,但我本身并不了解这块需求是否常见。但转念想想,这个事情似乎也简单。
于是大体在 EasyCodeML 上补充了两个类,可以用于:
- 命令行调用 EasyCodeML 跑 BSM model
- 多线程并行
运行实例
首先是获取 EasyCodeML 软件包(可以从 Github 上下载,不过主程序我暂时没更新上去)
随后准备好输入文件:
- 一个树文件,需要标记好分支(可以使用EasyCodeML可视化标记)
- 一个输入目录,目录中放置所有序列的Alignment,每个序列一个文件,支持多种格式,会自动转换为 paml 格式。当然,如果已经转化好就更好了
运行程序(注意到 Windows,MacOS,Linux下调用方式完全相同)
java -cp PathTo\EasyCodeML.jar BatchRunBSM.RunBSM --inSeqAln PathTo\SequenceAlnDirecory --wkDir PathTo\ResultantDirectory --tree PathTo\Labeled.tree.nwk --threads 4
需要注意:
- 每个多序列比对结果中,文件ID应与树文件ID一致,一般似乎都是物种名?
- 如果运行失败,注意看看报错,windows下几乎不可能,macOS和Linux下,考虑参考 EasyCodeML 的manual,自己编译一下codeml,还是。。。比较简单,因为编译命令都给了。
运行实例
输入内容样式
可以看到 Alignment中有两个序列的多序列比对结果
java -cp C:\Users\ccj04\Downloads\EasyCodeML-master\EasyCodeML-master\EasyCodeML.jar BatchRunBSM.RunBSM --inSeqAln C:\Users\ccj04\Desktop\TestEasyCodML\demo\Alignment --wkDir C:\Users\ccj04\Desktop\TestEasyCodML\Result3 --tree C:\Users\ccj04\Desktop\TestEasyCodML\demo\Example1.tree.Labeled.txt --threads 4
注意到,这里给了 4 个线程,如果是跑数百上千条序列,建议到服务器上跑,一般是 Linux.... 目前常见的服务器是 100+线程。所以可以给到 --threads 100,那么会保持同时计算 50 条序列(每条序列是两个Model)
结果文件简单,每条序列输出一个文件夹,
每个文件夹中,对应有运行信息,以及一个结果汇总xls。
写在最后
Emmm,没想到鼓捣起来还是简单。只是这基于一个假设,就是到底这种相对多个序列的选择分析,到底是否真的有人去保证序列ID和Tree中的ID一致?更或者都是如何处理?
网友评论