終于有第一個(gè)投稿的插件,來(lái)自多年前的師弟 Chuhao Li (估計(jì)他入學(xué)的時(shí)候可能我正好開始寫 TBtools,或者沒(méi)寫多久忘瓦?)。他干了一個(gè)出乎無(wú)意料的插件引颈,尤其是用了 Python政冻!雖然我說(shuō)過(guò),邏輯上是支持的线欲,但沒(méi)想到真能支持(雖然不是用解釋器,不過(guò)師弟用的方式似乎更好汽摹,體積更欣罘帷)。相關(guān)插件已經(jīng)上傳到「TBtools」的「Plugin Store」逼泣,歡迎大伙下載使用趴泌。期待大伙一起開發(fā)實(shí)用工具,加速更多人的生信數(shù)據(jù)分析拉庶。 - CJ - 陳程杰
前言
平均核苷酸一致性(average nucleotide identity, ANI)是衡量基因組之間相似性的一個(gè)常用指標(biāo)嗜憔。windows下暫時(shí)沒(méi)發(fā)現(xiàn)一個(gè)好用的可以計(jì)算ANI的工具。fastANI是在linux下用C++開發(fā)的一個(gè)小巧氏仗、快速的ANI計(jì)算工具吉捶。最近,CJ大神發(fā)布了TBtools新插件“CLI program wrapper creator”皆尔,可以大大縮減圖形化界面工具開發(fā)的時(shí)間成本呐舔。這里,我介紹一下我是如何把linux上的命令行工具移植到TBtools上的慷蠕。
折騰過(guò)程
編譯
一開始珊拼,我使用cygwin來(lái)編譯能在windows下運(yùn)行的fastANI。主要包括以下步驟:
- a. 安裝工具cygwin流炕。下載fastANI源碼澎现。
- b. 安裝編譯依賴環(huán)境cygwin有一個(gè)圖形化的應(yīng)用安裝界面仅胞,還是挺方便的。根據(jù)fastaANI的文檔剑辫,需要安裝的依賴包括:gcc-g++, mingw64-x86_64-gcc-g++, mingw64-x86_64-gsl, mingw64-x86_64-zlib, make, autoconf.
- c. 編譯干旧。configure完,直接make便是揭斧。源碼中有兩個(gè)地方導(dǎo)致了編譯失敗莱革,一個(gè)是“unsetenv”,還有一個(gè)是“.symenv”讹开。 前者是要去掉某個(gè)環(huán)境變量盅视,取消系統(tǒng)對(duì)多線程的限制,后者是要告訴編譯器使用特定版本的庫(kù)旦万。我把這兩個(gè)地方注釋掉了闹击,后面測(cè)試過(guò),對(duì)程序運(yùn)行沒(méi)有影響成艘。編譯成功后赏半,得到一個(gè)fastANI.exe程序,可以在windows的命令行下運(yùn)行淆两。
- d. 測(cè)試断箫。
測(cè)試時(shí)發(fā)現(xiàn),只要用到2個(gè)或以上的線程秋冰,幾乎完全跑不動(dòng)仲义。進(jìn)一步測(cè)試,確定了凡是使用到openmp來(lái)并行的地方剑勾,速度就會(huì)奇慢埃撵。有幾種解決方案:
- a. 更換編譯器。使用了mingw虽另,不行暂刘。
- b. 修改源碼中多線程的邏輯。不會(huì)改捂刺。
- c. 改寫源碼谣拣,用msvc等windows原生編譯工具重新編譯。更不會(huì)改族展。
- d. 只用單線程版本芝发,外面套一層python來(lái)實(shí)現(xiàn)多線程。這是我最終使用的方案苛谷。
python打包
腳本主要包含4個(gè)步驟:
- 命令行解析辅鲸。
- 多線程調(diào)用fastANI。
- 合并結(jié)果腹殿。
- 使用pyinstaller打包独悴。
這時(shí)候例书,我就得到了一個(gè)可以在windows下多線程運(yùn)行的fastANI程序。接下來(lái)刻炒,就到TBtools發(fā)揮作用了决采。界面生成的過(guò)程非常簡(jiǎn)單,可以參考CJ前兩天的推文坟奥。
使用
安裝好的程序树瞭,在Others -> Plugin -> fastANI_w 下。
在界面中輸入運(yùn)行所需信息:
- 輸入query fasta序列所在路徑(可以直接從文件夾拖進(jìn)來(lái))爱谁。
- 輸入reference fasta序列所在路徑(可以直接從文件夾拖進(jìn)來(lái))晒喷。
- 勾選“include fasta files in the same directory”。這樣访敌,如果你的query/reference所在文件夾中如果有多個(gè)fasta文件凉敲,就都會(huì)讀取到。適用于一個(gè)基因組比對(duì)多個(gè)寺旺,或者多個(gè)比對(duì)多個(gè)的情況爷抓。
- 指定線程數(shù),默認(rèn)為4阻塑。
- 指定輸出文件蓝撇。
填好以上參數(shù),點(diǎn)擊“start”即可陈莽。這里測(cè)試了兩個(gè)對(duì)兩個(gè)的情況唉地,幾秒鐘就完成了。
結(jié)果是一個(gè)tab分隔符文件传透,總共5列,其中第三列是ANI极颓。
總結(jié)
非常曲折的過(guò)程朱盐。希望對(duì)大家有幫助。