工具推薦:https://github.com/openvax/gtfparse
真不敢相信,Linux自帶的命令會這么強大,從gtf中提取出需要的transcript,看起來復雜,其實一個grep就搞定了。
grep -F -f out.list gffcmp.combined.gtf > test.out
本文出自於http://www.bioinfo-scrounger.com轉載請注明出處
gffcompare和gffread可以認為是專門開發出來用於處理gff格式文件的小工具。現在gff格式一般是用第三版gff3,以小鼠genecode上下載的gff文件為例,如下所示:
chr1 HAVANA gene 3073253 3074322 . + . ID=ENSMUSG00000102693.1;gene_id=ENSMUSG00000102693.1;gene_type=TEC;gene_name=4933401J01Rik;level=2;havana_gene=OTTMUSG00000049935.1 chr1 HAVANA transcript 3073253 3074322 . + . ID=ENSMUST00000193812.1;Parent=ENSMUSG00000102693.1;gene_id=ENSMUSG00000102693.1;transcript_id=ENSMUST00000193812.1;gene_type=TEC;gene_name=4933401J01Rik;transcript_type=TEC;transcript_name=4933401J01Rik-001;level=2;transcript_support_level=NA;tag=basic;havana_gene=OTTMUSG00000049935.1;havana_transcript=OTTMUST00000127109.1 chr1 HAVANA exon 3073253 3074322 . + . ID=exon:ENSMUST00000193812.1:1;Parent=ENSMUST00000193812.1;gene_id=ENSMUSG00000102693.1;transcript_id=ENSMUST00000193812.1;gene_type=TEC;gene_name=4933401J01Rik;transcript_type=TEC;transcript_name=4933401J01Rik-001;exon_number=1;exon_id=ENSMUSE00001343744.1;level=2;transcript_support_level=NA;tag=basic;havana_gene=OTTMUSG00000049935.1;havana_transcript=OTTMUST00000127109.1
而gtf格式一般來說跟gff很相似,也是以小鼠genecode上下載的gtf文件為例,如下所示
chr1 HAVANA gene 3073253 3074322 . + . gene_id "ENSMUSG00000102693.1"; gene_type "TEC"; gene_name "4933401J01Rik"; level 2; havana_gene "OTTMUSG00000049935.1"; chr1 HAVANA transcript 3073253 3074322 . + . gene_id "ENSMUSG00000102693.1"; transcript_id "ENSMUST00000193812.1"; gene_type "TEC"; gene_name "4933401J01Rik"; transcript_type "TEC"; transcript_name "4933401J01Rik-001"; level 2; transcript_support_level "NA"; tag "basic"; havana_gene "OTTMUSG00000049935.1"; havana_transcript "OTTMUST00000127109.1"; chr1 HAVANA exon 3073253 3074322 . + . gene_id "ENSMUSG00000102693.1"; transcript_id "ENSMUST00000193812.1"; gene_type "TEC"; gene_name "4933401J01Rik"; transcript_type "TEC"; transcript_name "4933401J01Rik-001"; exon_number 1; exon_id "ENSMUSE00001343744.1"; level 2; transcript_support_level "NA"; tag "basic"; havana_gene "OTTMUSG00000049935.1"; havana_transcript "OTTMUST00000127109.1";
從上可以看出,就小鼠而言,gff和gtf文件只有在最后一列,也就是attribures列有略微區別;前者名稱和值是以等號隔開,后者則是以空格隔開
因此gffcompare和gff不僅可以用來處理gff格式文件,還可以處理gtf格式文件
這兩個工具都是約翰·霍普金斯大學開發的,也是hisat2和stringtie的開發者,下載地址如下:
http://ccb.jhu.edu/software/stringtie/gff.shtml,這個網頁不僅有下載地址,還有軟件的簡單介紹。注:下載有二進制版本的,可以不用編譯直接使用,方便。
還有這個網址也對gtf格式以及gff格式做了解釋,可以整體上了解gtf和gff的區別
gffcompare
按照官網的說法,gffcompare可以用來compare, merge, annotate and estimate accuracy of one or more GFF files,並且這個軟件是基於cuffcompare開發的,所以gffcompare很多輸入和輸出文件都與cuffcompare相同
參數通過gffcompare -h命令查看即可
以stringTie組裝並merge后的結果文件(merged.gtf)為例,參考基因組注釋文件為gencode.vM13.annotation.gtf,compare下兩者的結果並進行注釋
gffcompare -R -r gencode.vM13.annotation.gtf -o strtcmp merged.gtf
輸出文件幾乎跟cuffcompare一樣,除了結果中的.combined.gtf變為.annotated.gtf,但是文件里的格式幾乎是一樣的,除了有一點,.annotated.gtf文件會保留original transcript IDs,但是.combined.gtf是沒有這一點的
對於文件每列的具體含義可以看cuffcompare官網,也可以看之前的一篇博文轉錄組的組裝Stingtie和Cufflinks
gffread
gffread這工具,官網的定義為used to generate a FASTA file with the DNA sequences for all transcripts in a GFF file,在知道這工具前,我做這個操作是自己寫的perl腳本,但是從運行效率上來說,還是這工具快。。。
比如一個很常見的需求,對於stringtie組裝后的gtf文件,想將組裝后的轉錄本的序列從對應的參考基因組上提取出來,這時就可以用gffread這工具了,還是上述的小鼠為例:
gffread -w transcripts.fa -g mm10.fa stringtie_merged.gtf
查看各參數的含義gffread -h
之前使用的時候只用了這個功能,但是最近在公眾號(生信菜鳥團的一篇軟文:NGS數據格式之gff/gtf)看到gffread可以將gtf和gff格式之間進行相互轉化,所以試了下
如:gtf轉化為gff
gffread gencode.vM13.annotation.gtf -o tmp.gff3
輸出文件如下:
chr1 HAVANA transcript 3073253 3074322 . + . ID=ENSMUST00000193812.1;geneID=ENSMUSG00000102693.1;gene_name=4933401J01Rik chr1 HAVANA exon 3073253 3074322 . + . Parent=ENSMUST00000193812.1
從結果上可以看出,gffread輸出的是其定義后的gff3格式的文件,與輸入的相比沒有了feature為gene的行,attribures列也變得較為省略
如:gff轉化為gtf
gffread gencode.vM13.annotation.gff3 -T -o tmp.gtf
輸入文件如下:
chr1 HAVANA exon 3073253 3074322 . + . transcript_id "ENSMUST00000193812.1"; gene_id "ENSMUSG00000102693.1"; gene_name "4933401J01Rik";
從結果上來看,gffread定義的gtf文件變得更為省略了,並且還有做了些限制,當然這些在官網GFF utilities中有說明
綜上所述,gffcompare和gffread用處還有可以的,值得留意下
