多线程并行EasyCodeML|多线程并行EasyCodeML - Branch-Site Model
写在前面
节前,我临时收到钦佩已久的胡老师的微信语音,主要问及“EasyCodeML”这款软件能有批量运行。有关注Raindy(福建农林高芳銮老师)和生信札记的朋友应该知道。EasyCodeML是Raindy与我在六年前启动开发的一个软件,主要是方便用户快速完成正选择分析。该软件发表至今,与 TBtools 类似,一直有不少朋友关注,当然也是高被引。
胡老师关注的是批量跑BSM,大体简化场景为检测不同物种中数百甚至上千个基因是否收到正选择。类似的问题,高老师曾与我提过,但我本身并不了解这块需求是否常见。但转念想想,这个事情似乎也简单。
于是大体在 EasyCodeML 上补充了两个类,可以用于:
- 命令行调用 EasyCodeML 跑 BSM model
- 多线程并行
【多线程并行EasyCodeML|多线程并行EasyCodeML - Branch-Site Model】首先是获取 EasyCodeML 软件包(可以从 Github 上下载,不过主程序我暂时没更新上去)
随后准备好输入文件:
- 一个树文件,需要标记好分支(可以使用EasyCodeML可视化标记)
- 一个输入目录,目录中放置所有序列的Alignment,每个序列一个文件,支持多种格式,会自动转换为 paml 格式。当然,如果已经转化好就更好了
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一致?更或者都是如何处理?
推荐阅读
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 爱就是希望你好好活着
- 昨夜小楼听风
- 知识
- 死结。
- 我从来不做坏事
- 烦恼和幸福
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- Linux下面如何查看tomcat已经使用多少线程
- 说得清,说不清