寫在前面
來來去去,這個主題相關(guān)的榴芳,我已經(jīng)寫過很多個推文嗡靡,甚至還包括與Raindy(福建農(nóng)林高芳鑾老師)合作開發(fā)和發(fā)表了 EasyCodeML。只能說窟感,確實(shí)是一個相對常見但似乎也繁雜的分析讨彼。
功能開發(fā)
- EasyCodeML 主要用于在進(jìn)化的context上分析選擇壓力,尤其是做正選擇位點(diǎn)分析柿祈,亦即哈误,關(guān)注到位點(diǎn)。
- 簡單的基因?qū)a/Ks計(jì)算躏嚎,如 TBtools 的 Simple Ka Ks Calculator 則關(guān)注大規(guī)模的基因受選擇的情況蜜自,亦即,關(guān)注到基因卢佣。
正選擇位點(diǎn)分析起來不容易重荠,而大規(guī)模的基因?qū)a/Ks計(jì)算起來其實(shí)也不容易。常見的場景是有數(shù)萬虚茶,甚至十來萬個基因?qū)Ω曷常枰?jì)算KaKs尾膊。而做計(jì)算的步驟:
- 以密碼子為單位進(jìn)行序列比對
- 基于比對結(jié)果進(jìn)行KaKs計(jì)算
所以是兩部。絕大多數(shù)人會使用一些軟件荞彼,如muscle冈敛,mafft等做基因雙序列比對,因?yàn)樗麄冋{(diào)用起來放棄鸣皂,盡管這其實(shí)不太合適抓谴。因?yàn)檫@些軟件本身設(shè)計(jì)目標(biāo)是多序列比對。用于CodeML的計(jì)算應(yīng)該使用他們寞缝,但是用于兩條序列的兩兩比對癌压,缺并不合適。所以最好的方式基本只有:
- 調(diào)用Emboss的Needle程序
- 使用已有第三方實(shí)現(xiàn)
- 自行做代碼實(shí)現(xiàn)
其中第一種方法最準(zhǔn)但是最慢荆陆,第二種方法在Java滩届,python,perl等上面沒有良好實(shí)現(xiàn)被啼,一般不夠準(zhǔn)確帜消,甚至不如調(diào)用muscle等,第三種方法可以權(quán)衡浓体,畢竟是自己做代碼實(shí)現(xiàn)泡挺。
而現(xiàn)在,TBtools用的即第三種方法命浴,準(zhǔn)確度上跟Emboss Needle完全一致娄猫,但由于是原生代碼實(shí)現(xiàn),所以速度很快生闲,同時也支持多線程媳溺。
運(yùn)行速度
針對調(diào)用muscle的實(shí)現(xiàn),前述已經(jīng)提過碍讯,大體是一秒鐘一對序列悬蔽,多線程無法提速,甚至?xí)邓伲☉岩墒沁M(jìn)程開銷太大)冲茸,而針對TBtools的原生代碼實(shí)現(xiàn)(也就是說屯阀,我自己coding的)缅帘,那么單線程一秒鐘可以做到200對轴术,如果開四個線程,那么一秒鐘可以做到 600對(多線程開銷其實(shí)并不星瘴蕖)逗栽。
實(shí)測數(shù)據(jù),10000個基因?qū)κг荩琺uscle調(diào)用需要四個多小時彼宠。使用TBtools鳄虱,單線程只需要不到一分鐘。如果開四個線程凭峡,28秒拙已。
換句話說,常規(guī)電腦上去摧冀,1w個基因?qū)Φ挠?jì)算倍踪,一般不需要1分鐘。
使用方法
打開 TBtools索昂,跳轉(zhuǎn)到對應(yīng)功能
使用方式和以前一樣建车,就是記得調(diào)整使用的線程數(shù)。椒惨。缤至。
寫在最后
天下武功,唯快不破康谆。