Skip to content

GFF and GTF #
Find similar titles

Structured data

Category
Biology

GFF format과 GTF format 의 비교 #

GFFGTF 형식 둘 다 탭(Tab) 분리된 파일로 9개의 열로 이루어져 있으며, 두 파일들의 처음 8개 열은 몇 가지의 특정 버전 요구사항을 제외하고는 같다. 처음 8개 열에 대한 설명과 예제는 아래 정보와 같다

1. Reference sequence name (chromosome1, refContig1, sequence1)
2. Source of annotation (pfam, blast2go, interpro, est)
3. Type of feature (gene, exon, start_codon, cds, mRNA, zinc_finger, conserved_region)
4. 1-based, inclusive start coordinate (integer > 0), 시작 좌표
5. 1-based, inclusive end coordinate (integer > 0), 끝 좌표
6. Score
7. Strand (+,-,.)
8. Frame (0,1,2)

시작과 끝 좌표는 1-based로, 이것은 첫 번째 염기 위치가 1이라는 것을 뜻한다. 반면에 0-based는 위치가 0에서부터 시작한다. 포괄적인 좌표의 뜻은 하나의 유전체 요소가 시작과 끝 좌표를 포함하는 것을 의미한다. 예를 들어 어떤 요소가 10-15 라는 좌표를 가지고 있다면 처음과 끝인 10과 15를 포함한 10, 11, 12, 13, 14, 15 위치들로 정의할 수 있다. 반면에 같은 경우의 비포괄적 좌표는 11, 12, 13, 14 위치들로만 정의된다.

GFF 파일의 Score 열은 이 요소가 존재할 수 있는 확률 값을 나타낸다. 이것은 GTF 형식에서는 사용되지 않는다. Strand는 특정 유전체 요소의 reference sequence에 대한 상대적인 방향성이다. 이것은 정방향(forwad)은 ‘+’, 역방향(reverse)은 ‘-‘, 미상은 ’.’ 으로 나타낸다. Frame 열은 coding region요소들로 open reading frame(ORF) 1, 2, 3을 의미하며, 표기는 0, 1, 2으로 한다.

두 형식의 차이점 #

No Columns GTF2 GFF3
1 REFERENCE SEQUENCE NAME 동일 동일
2 ANNOTATION SOURCE 동일 동일
3 FEATURE TYPE 사용하는 소프트웨어에 결정됨 모든 경우 가능함
4 START COORDINATE 동일 동일
5 END COORDINATE 동일 동일
6 SCORE 사용무 임의 선택 가능
7 STRAND 동일 동일
8 FRAME 동일 동일
9 ATTRIBUTES 1)space에 의한 tag/value 분리
2)각 attribute는 무조건 세미콜론으로 끝나야 함.
3)무조건 gene_id 와 transcript_id attributes로 시작해야 함.
4)텍스트 값은 따옴표 안에 있어야 함.
- 예: gene_id "gene01"; transcript_id "transcript01"; created_by "Damian";

1)"="로 tag/value 분리.
2)각 attribute가 세미콜론으로 분리 됨.
3)이미 정의가 된 attribute의 목록이 있음.
4)무조건 고유의 ID attribute가 있어야 함.
- 예: ID=geneA;Parent=geneAP;Name=geneA

GTF -> GFF 변환 #

GTF파일에서 transcript_id 값을 가지고 GFF 속성 형식으로 변환한다. 그러나 gene_id 와 transcript_id 사이의 계층 관계는 GFF에서 보존되지 않는다.

#!python
import sys

inFile = open(sys.argv[1],'r')

for line in inFile:
  #skip comment lines that start with the '#' character
  if line[0] != '#':
    #split line into columns by tab
    data = line.strip().split('\t')

    #parse the transcript/gene ID. I suck at using regex, so I usually just do a series of splits.
    transcriptID = data[-1].split('transcript_id')[-1].split(';')[0].strip()[1:-1]
    geneID = data[-1].split('gene_id')[-1].split(';')[0].strip()[1:-1]

    #replace the last column with a GFF formatted attributes columns
    #I added a GID attribute just to conserve all the GTF data
    data[-1] = "ID=" + transcriptID + ";GID=" + geneID

    #print out this new GFF line
    print '\t'.join(data)

위의 스크립트를 파일로 저장 후 다음과 같이 사용한다.

> python myScript.py myFile.gtf > myFile.gff

GFF -> GTF 변환 #

GFF에서 GTF로 변환을 보장하는 간단한 스크립트는 어렵다. 이는 GFF 파일에 사용 된 요소 종류 및 속성에 따라 모두 달라지기 때문이다. 예를 들면, 요소 종류 “유전자”는 다른 모두 하위 요소들(exon, cds, start_codon, domain)의 parent 요소이다.(아래 정보 참조)

Contig01  PFAM  gene         501  750  .  +  .  ID=geneA;Name=geneA
Contig01  PFAM  exon         501  650  .  +  .  ID=exonA1;Parent=geneA
Contig01  PFAM  exon         700  750  .  +  .  ID=exonA2;Parent=geneA
Contig01  PFAM  cds          700  750  .  +  2  ID=cdsA1;Parent=geneA
Contig01  PFAM  start_codon  700  750  .  +  .  ID=startA1;Parent=geneA
Contig01  PFAM  domain       700  750  .  +  .  ID=domainA1;Parent=geneA

이러한 데이터 구조의 특징이 있기때문에 적절한 응용이 필요하다. 유전자 ID 속성, 다른 요소들의 Parent 속성을 가지고 GTF 속성의 gene_id와 transcript_id로 변환시킬 수 있으며, 아래의 스크립트를 참조하기 바란다.

#!python
import sys

inFile = open(sys.argv[1],'r')

for line in inFile:
  #skip comment lines that start with the '#' character
  if line[0] != '#':
    #split line into columns by tab
    data = line.strip().split('\t')

    ID = ''

    #if the feature is a gene 
    if data[2] == "gene":
      #get the id
      ID = data[-1].split('ID=')[-1].split(';')[0]

    #if the feature is anything else
    else:
      # get the parent as the ID
      ID = data[-1].split('Parent=')[-1].split(';')[0]

    #modify the last column
    data[-1] = 'gene_id "' + ID + '"; transcript_id "' + ID

    #print out this new GTF line
    print '\t'.join(data)

요약 #

GFF는 좀 더 일반적인 유전체 annotation 형식인 반면 GTF는 엄격하게 유전자 annotation 형식이다. 더 일반적으로, GFF는 덜 제어됨으로 더 많은 변수를 필요로 한다. GTF에서 GFF로 변환하는 것은 쉬운편이며, 필요한 gene/transcript_id 속성을 GFF 안의 ID 속성으로 변환만 하면 된다. 그러나 GFF에서 GTF 변환은 어려운 부분이, 특성의 계층 구조, 사용된 요소의 종류 와 속성 등에 의해 결정이 되기 때문이다.

출처 #

http://blog.nextgenetics.net/?e=27

Suggested Pages #

0.0.1_20140628_0