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上进行修改,因为这样确实不是一个优雅或者说最有效的方式。
- 不爽,坚持,失败,放弃?再坚持一会,放弃?再坚持一会。于是在超时一天之后,我还是在错误的路子上实现了自己想要的效果。效果是一样的,谁会真正去在意你的实现方式?
最后,继续祝各位科研顺利。