优雅 | 比较两条蛋白序列?快~准~狠!
写在前面
Emmm,前两天已经推送过了。两三年间,我尝试了数次,希望实现到几乎完美的双序列比对逻辑。尽管可能有朋友会说,不就是“动态规划”,简单的Needleman Wunsch计算逻辑实现吗?对的,确实就是这个逻辑。但有这个想法的人,可能绝大多数其实没自己去写过,他们更多做的是调包,比如biojava, biopython, bioperl 或者其他云云。这些实现,要么本身不够完美,要么类似 biopython,其实底部调用 emboss 的 needle 比对软件。换句话说,要么比对效果不行,要么速度极慢,比如一两秒中只能做两条序列的比对?或者更慢。
当然还会有少数人自己写过,但我还是相信,写过的人并不一定能实现类似 emboss needle 一样的比对效果。猜想绝大多数人做的是 naive 的实现,亦即类似课堂讲演或者绝大多数资料一样,一个矩阵打分然后回溯就完事了。事实并非这么简单,详细见《双序列比对 | 尝试数次,调试千遍》。
今天这个推文比较简单,只是跟大伙说下,TBtools 增加了这么一个功能。大伙以后要做蛋白双序列比对,就不用跑 Emboss 网页了,直接在 TBtools 里面就可以干。一般来说,由于是原生java码实现,相比于网页调用会快很多,其次支持输出不同格式,如Emboss类似或者Fasta格式(PS:如果你是要在服务器上批量跑,如10w对蛋白序列比对,那么可以联系我,商量开放接口)。经过测试,单线程 1 秒钟应该能输出~200对的比对结果,还可以更快的。那么10w对蛋白,估计只需要500s,不到10min。开上多线程,那么应该不需要 30 秒。当然,TBtools其实本来就有大规模Kaks计算功能。如果你的目的是这个,那就等着后面的推文吧(这个功能,目前也就我们课题组自己用用,暂时没计划对外完全开放)。
回到主题,简单介绍一下这个新功能。
Needle Wunsch Global Align
打开 TBtools,菜单跳转到该功能
选择并点击可达
使用起来简单
当然,也支持输出 Fasta 格式
调整参数,会有不同的比对结果,当然一般不做调整,除非知道自己在干啥。
写在最后
有些时候,我觉得 TBtools 鼓捣下来没啥意义。但有时候我又觉得我自己很机智,毕竟写了一个我自己几乎每天都在用的工具。
总的来说,这是一个比较有趣的事情。“但行好事,莫问前程”。
PS: 在鼓捣一点 TBtools 周边,自己玩玩。不过还是有趣的。一个冰箱贴。