IGV-Gene Structure Annotation Manual Editor,簡稱IGV-GSAme
寫在前面
igv是目前最常用的本地基因組瀏覽器,與其開發的目標類似,用于整合各種類別的高通量測序數據。當然,他的功能不可能覆蓋到高通量測序數據分析的方方面面。在很久以前,我們改造并正式推出了「IGV-sRNA」。這個瀏覽器的幫助下,我們進一步完善了小RNA預測流程和判斷標準,同時也極大地提高了全基因組小RNA鑒定的速度以及質量【拒絕反駁!】。
小RNA的事情已經告一段落,課題組的分析重點開始覆蓋到基因組分析。那么會涉及到兩個問題:一是基因組組裝效果如何?二是基因結構注釋效果如何?。兩者都會影響到后續基因組分析的正確與否。
其中,對于下游用戶,往往基因結構注釋影響更大,畢竟多數人的研究還是一個到數個基因上。從最常見的轉錄組數據分析來說,錯誤的基因結構注釋,只能讓你得到錯誤的表達量估計,更不談差異表達基因。當然,基因結構注釋還影響到比較基因組等諸多方面的工作開展。
這是為什么我在前述寫過一篇推文,大體題目是《矯正基因結構注釋 - 做良心的基因家族分析》。
本次,我沒有放出錯誤基因結構注釋的效果圖
因為我已經明白,我們不需要讓所有人都知道;因為知道的和想知道的都會知道,剩余的人則不需要知道。
為什么基因結構注釋總是存在問題?
無解!生物學是復雜的,而算法的覆蓋總是有限的。在完美的算法都可能會存在或多或少的問題。在這種情況下,人工觀測并進行校正,可能是最好的方式。
如何進行人工結構注釋矯正
目前得到評價最好的只有一款軟件「Apollo」,即「Web Apollo」和「Apollo」。這款軟件改造于JBrowse改造的,所以是一個網頁端的工具。從其論文來看,前端Js,后端sql。一旦涉及到數據庫,那么就注定了這款軟件存在安裝難度。
雖然我開始認為,軟件難以安裝,可以從某種層面上篩選掉多數用戶,從而使得軟件最終使用者多數為能夠并愿意折騰的。或者說,我以前應該是做錯了,不應該通過開發軟件來降低分析門檻,因為對于多數人來說,可能不要自己進行分析,而是通過科研服務或者課題合作來完成分析項目,是更好的方法?
不過無論如何,我錯了,那么是相對于我開發的軟件的一部分用戶而言的,對我自身來說,或者是磨煉技能,或者是挑戰自我能力極限,或者是制作一把更好用的斧頭,所以我自身并沒有錯。
前述,我再次修改了IGV,做了一次間接的支持,使得用戶可以通過自定義的區間,導出一個bed文件并轉化為gff3文件。這個功能當然能用,但是他存在一些問題:
- IGV的「Region Of Interest」工具選擇區間后,無法調整起始或終止坐標
- 區間結果需要導出再導入,才能看到效果
- 對于已有的注釋信息,不能直接人工調整,只能從頭制備一個基因結構注釋
- 更新的注釋信息,需要后續人為替換原始gff3文件信息
當然,問題還有很多。在推出這個功能之后,課題組提議,安裝Apollo。主要的觀點是,改造后的IGV用起來不夠靈活。其實,我是贊同安裝Apollo的,畢竟這是一款實用無差評的工具【當然安裝就不提了...】。所以我是推薦安裝,并希望由師弟去安裝,從某種角度來說,這是一個鍛煉機會;從另一個角度來說,我也完全沒把握能夠在一兩天內安裝上,即使Apollo其實有docker鏡像。
無論如何,這個安裝的事情已經明確地安排給一個師弟了,這當然也是我個人的期望之一。但是我仍然不認為我改造的IGV會不夠靈活。很快,我花了大半個晚上,重新閱讀了IGV的一些實現邏輯,做了一次簡單的調整,支持了鼠標拖拽調整ROI。
支持了ROI拖拽,事實上,解決了一個比較大的痛點。師弟師妹用起來也挺開心的。于是他們用去矯正了一些基因結構,目前沒發現問題。原本我是計劃到此為止。但是,問題來了!我自己也要矯正一批基因結構注釋,第一點解決了,但是第二點,第三點,第四點是讓我崩潰的事情。我并不是一個喜歡機械性重復工作的人。
使用不夠好用的工具,我不會覺得開心。于是,我計劃用兩天的時間,做最后一次嘗試,直接修改IGV,至少解決剩余的三個問題。
兩天之后的晚上,我發現我失敗了!不僅如此,我開始懷疑我一開始的決定,我從一開始就不應該直接改IGV的已有的Track,而應該重新設計一個Track....
但是兩天已經過去了,我已經決定放棄。但還是厚顏無恥地再堅持了一天。也終于,在第三天的晚上,我達成了所有的目標。改造后的IGV,能做的事情比較多。于是我給他取了一個新的名字,這個就叫做IGV-Gene Structure Annotation Manual Editor,簡稱IGV-GSAme。
IGV-GSAme的特性
所有的功能直接在 IGV 的 GFF3 Track中支持,人工矯正基因結構注釋,所見即所得!
1. 調整外顯子的長度
2. 刪除錯誤的外顯子
在這個操作之后,其實CDS已經有變化,所以我們需要重新預測CDS
3. 原地重新預測CDS
重新預測CDS的時候,我們會發現第一個CDS相比于原來的有一點點的左移,因為那個才是整整的ATG。我們可以點擊一下CDS,然后黏貼對應的CDS到TAIR數據庫,BlastX就會發現,矯正后的才是完全正確的基因。矯正前的是過度拼接或者錯誤注釋。
4. 刪除錯誤注釋的轉錄本
** 5. 添加缺失的外顯子**
** 6. 添加新的轉錄本**
有時候,直接是基因沒被注釋出來,于是,我們要添加船新的轉錄本。
經過一份修飾,比如拖拽外顯子,添加外顯子,對齊剪切邊界等等
我們終于得到了新的轉錄本結構。可以進行Blast確定其是否有可能是編碼基因。確定之后,我們可以原地預測CDS。
點擊一下這個CDS,隨后跟已知基因進行比對。
于是,可以確定這是一個真實存在的編碼基因。
7. 導出人工修正后的GFF3文件
導出的GFF3,是調整之后的gff3完全版。這意味著,你在IGV中看到的是什么,那么你得到的GFF3文件內容就有什么。或者應該說,是真正意義上的所見即所得。
我們可以重新導入原始的GFF3文件,和導出剛才導出的GFF3文件,做一下對比
寫在后面
寫完這個功能。感觸比較深:
- IGV設計邏輯,必然久經考驗,當然源碼中不乏有"I don't why..."或者"It shouldn't happen..."等類似的注釋,可見coding的人的痛苦
- IGV當然強大,但仍然存在不少可優化的空間
- 支持人工矯正注釋的操作,應該直接理解邏輯后新設計一個Track,而不是在已有的Feature Track上進行修改,因為這樣確實不是一個優雅或者說最有效的方式。
- 不爽,堅持,失敗,放棄?再堅持一會,放棄?再堅持一會。于是在超時一天之后,我還是在錯誤的路子上實現了自己想要的效果。效果是一樣的,誰會真正去在意你的實現方式?
最后,繼續祝各位科研順利。