使用MAKER进行基因注释(高级篇之GeneMark-ET模型训
GeneMarkGeorgia Institute of Technology开发的一系列基因预测工具。真核生物基因组预测主要会用到GeneMark-ES/ET, 其中GeneMark-ES可用于无监督自训练,也就是只要提供一个基因组序列即可,而GeneMark-ET则是在GeneMark-ES的基础上整合了高通量的RNA-Seq转录本数据,工作流程如下
工作流程如果是学术、非盈利组织,那么可以在http://exon.gatech.edu/GeneMark/license_download.cgi提交申请,之后就能得到软件的下载链接。下载的工具只要解压缩即可使用,不需要额外编译,但是需要安装几个perl模块,
cpanm YAML Hash::Merge Logger::Simple Parallel::ForkManager
使用方法
在软件目录下的"README.GeneMark-ES-suite"介绍了如何使用软件,对于GeneMark-ET
而言,使用的脚本如下
gmes_petap.pl --sequence seq.fna --ET introns.gff --et_score 4 --cores 60
其中seq.fna
是你的物种基因组序列,而introns.gff
则是记录内含子的位置信息,--et_score
是introns.gff
中覆盖该内含子区域的read数,默认是10,而--cores
则是多线程参数。
那么问题来了,如何获取introns.gff
?GeneMark-ET文章被NAR接收的时间是2013年9月,目前我们一直推荐大家使用的HISAT2是2015年在Nature Methods发表,而在HISAT2之前又快又好的比对工具是STAR是2013年1月。在这两个工具出来之前,用的最多的RNA-seq比对工具就是目前连自己都宣布不维护居然还有很多培训班在讲的TopHat2,所以这篇文章的introns.gff
文件就来自于TopHat2,还有两个大家都未必听过的工具(TrueSight, UnSplicer).
因此,在软件目录下下提供了bet_to_gff.pl
用于将TopHat2
的输出结果中的junctions.bed
转成introns.gff
bed_to_gff.pl --bed tophat_out/junctions.bed --gff introns.gff --label tophat2
为了获取junctions.bed
,我特地去下载了TopHat2
, 然后用了40线程进行比对,结果花了我将近3个小时的时间,才将3G大小转录组数据回帖到基因组上。
这个速度实在是太慢了,我绝对忍受不了。突然间记忆中涌现出一位不愿透露姓名的朋友给别人讲转录组时用到的STAR,它的输出结果也有一个文件记录着内含子的信息。STAR的输出文件"SJ.out.tab"存放着可信坍缩剪切位点,每一列的格式说明如下,
- 第一列: 染色体
- 第二列: 内含子起始(以1为基)
- 第三列: 内含子结束(以1为基)
- 第四列:所在链,1(+),2(-)
- 第五列: 内含子类型,0表示不是下面的任何一种功能,1表示GT/AG, 2表示:GT/AC,3表示GC/AG,4表示GT/GC,5表示AT/GC,6表示GT/AT
- 第六列: 是否是已知的注释
- 第七列: 有多少唯一联配支持
- 第八列: 有多少多重联配支持
- 第九列: 最多可变剪切联配
根据"README.GeneMark-ES-suite"里提到的introns.gff
格式说明,
- 第一列:seqid
- 第二列: 来源
- 第三列是固定值,"intron"
- 第四列,第五列是内含子起始第一个碱基位置和结束的最后一个碱基位置
- 第六列,覆盖该外显子的read数
- 第7列,+/-
- 第8列和第9列都为"."
其实很容易用一个awk命令实现格式转换。如下是STAR所用到的命令
mkdir -p star_index
STAR \
--runThreadN 20 \
--runMode genomeGenerate \
--genomeDir star_index \
--genomeFastaFiles reference.fa
STAR
--runThreadN 20 \
--runMode alignReads \
--genomeDir star_index \
--readFilesIn read_1.fq.gz,read_2.fq.gz \
--readFilesCommand zcat --outSAMtype BAM SortedByCoordinate --outWigType wiggle read2
awk 'BEGIN{OFS="\t"} $7 >= 2{if($4==1){st="+"}else{st="-"} print $1,"STAR","intron",$2,$3,$7,st,".","."}' SJ.out.tab > STAR.gff
后来我又发现,软件目录下还有一个star_to_gff.pl
,
usage /opt/biosoft/gmes_petap/star_to_gff.pl --star [name] --gff [name] --label [label]
--star input name/s of junctions.bed from RNA-Seq alignment
--gff output intron coordinates in GFF format
--label [RNA_seq_junction] use this label in GFF to preserve name of the alignment tool
尽管它的使用说明--star
居然写着junctions.bed
,但实际上--star
接受的输入就是SJ.out.tab(我看了一下源代码),因此用法如下
star_to_gff.pl --star SJ.out.tab --gff SJ.gff --label STAR
将上述TopHat2,STAR(awk版本),STAR(star_to_gff.pl版本)三者的GFF文件和BAME文件共同在IGV中展示时,你会发现这三者几乎是一模一样
内含子信息比较当然差异也是存在的,比如说下图箭头部分。但是回溯到GFF文件时,我发现箭头部分的intron仅有一条read支持,而tophat2和awk版本都是最低2条read支持。
差异最后使用genemark-et
进行预测
gmes_petap.pl --sequence ../../../Assembly/5-final/ref.fa --ET STAR.gff --cores 60
最后会在当前文件下生成genemark.gtf
。Genemark-et结果一定会有很高的假阳性,不过没关系,毕竟我们只需要它的模型输出output/gmhmm.mod
作为MAKER的输入而已。