Wgatools:超速处理全基因组比对的工具包
近期,研究团队在Bioinformatics上发表了最新研究成果,团队开发了 wgatools——一款基于 Rust 语言的高效工具包,支持全基因组比对数据的格 式转换、处理分析、变异检测及可视化。该工具凭借其跨平台兼容性、超高速处理能力以及 对大规模数据的支持,已在多基因组研究项目中展现重要价值,为功能与进化基因组学研究 提供了全新的技术解决方案。
本期刊文来自Wgatools软件一作(魏文杰)的亲自分享
提出需求到实现需求
有关性能、功能、优势,都写在文章中,这里可以简单分享一下开发过程中的心路历程。
2023年的夏天,我执着于这些事情:
-
我拿到了许多基因组之间的比对结果
-
很多分析流程用到了不同的文件格式
-
格式的转换,用Python脚本很慢
本着“宁可花3天时间改进流程,也不愿等流程花1天跑完”的臭毛病,我开始了折腾之旅。
正好当时自己正在学习Rust,于是想着能不能边学边干,做出一个完整的工具出来。
一开始在GitHub上检索,发现有个哥们其中实现了PAF到SAM格式的转换,并且也是用Rust写的,于是我就问:
❝
兄弟,你这个工具是否支持其他格式的转换,如果你觉得可以,我可以提个PR
❞
人家回复的也很诚恳,说你再写一个工具也很棒,于是我说干就干,花了几天时间做出了一个雏形,基本完成了格式转换的功能,然后我和那哥们说你觉得怎么样,有什么改进的地方,人家也给了我很正面的回复。
就这样我自己先用这个粗糙的实现凑合了一段时间,但是逐渐又深入学了一会Rust,觉得粗糙的实现也太粗糙了,于是:
先实现,再完美
当时我用一个非常大规模的代码重构,深入理解了Rust中的trait概念。和Python不同,Rust的理念是“组合而非继承”。拿wgatools中的实际例子而言,其实不论是PAF、Chain、MAF、SAM格式,其中一条比对记录,都能实现同一个trait,这个trait包含许多功能,比如获取序列、获取比对长度、获取插入/缺失长度,而不同的文件格式,只不过在实现这个trait上有不同的实现,因此代码其实可以写的非常优雅。
有了这个trait,后面许多函数的接受参数,甚至可以只接受该trait,因此不用为不同的文件格式重写类似的函数代码。
第二点大的重构是有关错误处理,一开始我基本都使用了unwrap()来处理错误,直到后面对Rust的错误传递机制有了一定的认识后,才定义了覆盖完全的错误类型,这样可以做到非常清晰的追踪和日志。
其他方面,包含输入输出的统一处理、多线程、更快的字符串解析器等。有了这些特性的加持,整体的代码框架基本就敲定了。
代码开源后,逐渐也确实有几个同行看到了我的工作,并开始使用,在这个过程中,他们给我提出了许多实用的建议,包括一些新功能的需求、处理特殊情况等。尽管当时我也忙着做主要的课题,但还是会在很多个深夜打磨自己的代码。
wgatools 能做什么
wgatools是用于处理基因组比对的工具套件,功能丰富:
直接一张表说明:
wgatools 有哪些优势
1. 快
这个力量大部分属于 Rust,作为近年来最“网红”的语言,其实力并不是噱头。号称只要你通过编译,就能获得和C++相媲美的性能。
至于Benchmark,首先我甚至没将其和Python脚本进行比较,已经不是一个维度的了。我和别人同样用Rust写的其中paf2chain这个功能做了比较:
大约可以快5倍左右。
至于真实体验,用户们都给出了不错的反馈。
2. 用户体验好
做生信的小伙伴,相信都听过 csvtk和seqkit,它们的作者曾经写过一个文档:What should perfect bioinformatic tools be like?
其中有些点我非常赞同,并将其用到了实践中:
-
使用命令-子命令的结构来完成不同的事情
-
不同的子命令之间,使用相同的flag,比如
-i/-o表示输入输出,-h/-v表示显示帮助信息和verbose -
参数同时实现长短形式,比如
-q/--query和-r/--reference -
实现子命令和参数的自动补全
-
支持标准输入输出来实现管道操作
-
在执行计算前,首先检查文件是否存在
-
如果输出文件存在,警告是否要覆盖重写
-
使用magic-number检查压缩文件的类型而非后缀
3. 安装简单
作为编译语言,无需安装复杂的虚拟环境来配置依赖,只需要拉取源码并编译安装,得益于cargo的高效,这使得编译安装wgatools的过程在我的macbook上只需要1分钟。
当然也支持其他形式的安装,比如Conda、GUIX、Docker、Singularity甚至Nix。
别人的力量与开源社区
很多小伙伴(也有老伙伴)为wgatools的代码做出了贡献,看到这些PR时,我能够切切实实地体会到开源的魅力。
大约在11月份,一个在欧洲的师兄和我说Erik在社区中转发了wgatools,我一开始甚至不敢相信,这大哥毕竟是泛基因组领域的开拓者之一了,名头很大。也通过这个机会,我认识了Erik和不少圈内的小伙伴,看到了这个领域许多前沿的工作。因此,wgatools带给我的不止是一篇paper。
从第一行代码到如今,wgatools一直保持着开源。起初,每一颗star都会让我兴奋不已,似乎得到了莫大的认可,但随着时间的推移,wgatools带给我的逐渐是责任和压力,越来越多的star也说明,不能忽略每一个issue,但是时间和精力是有限的,后面有些issue的回复也拖了很久。
在这个工作中,也要感谢很多人,感谢刘海军师兄、桂松涛师兄的指导,感谢两个实验室的小伙伴成员的帮助。
借用一句作者的名言,与君共勉:Get my hands dirty! Always be a rookie and stay hungry.Enjoy contributing to the community.
最后,欢迎大家使用wgatools,欢迎+感谢star!
参考链接
本文来自博客园,作者:生物信息与育种,转载请注明原文链接:https://www.cnblogs.com/miyuanbiotech/p/18845367。若要及时了解动态信息,请关注同名微信公众号:生物信息与育种。

浙公网安备 33010602011771号