본문 바로가기

유전체역학

NGS 데이터 분석 - 파일 형식 (FASTQ, BAM, CRAM)

img

FASTQ

FASTQ 파일이란 유전체 서열과 그에 대응되는 quality scores 정보를 ASCII 코드로 담은 텍스트이다. 원래는 Wellcome Trust Sanger Institute에서 FASTA 형식으로 개발되었으나 Illumina Genome Analyzer와 같은 대용량 시퀀싱 머신의 결과 파일을 저장하기 위해 사용된다.

  • 기본적으로 서열당 4줄로 구성된다.
@E100007745L1C002R0030000039/1
AGTACTCTAAGCCACACCTACAATCGCCCTAATCTAACATGACTGATGTCCTTATAAGAAGAGGAGACTGGAACACAGATACACACTGACAGACAACCATGTGGCAGGGTCCCAATGAGAAGGCAGCCATCTGCAAGCTAAGGAGCAAGA
+
EEEEEEEE@DDEEEEEEEDBEEEEEDEEEEDEBEE3EEECECCEEEEECCEEEBEEEECEEEEE<EDF>EEAC@EEE8<@EEEEDE>E>EEEEEEEDEDED2EEEAEAE*BFEDE>E;C<DEFDB?DC;EECEE7E?EAEE@E7EECB1&
@E100007745L1C002R0030000063/1
CCCATAAAAACTAGACAGAAGCATTCTCAGAAACTTACTCGTGATGTGTGTCCTCAACTAAAGGAGTAGAACCTTTCTTTTCATAGAGAAGTTTTGAAACGCTCTTTTTGTGGAATCTGCAAGTGGATATTTGGCTAGTTTTGAGGATTT
+
FFFEFEFFFEFFEFEFEFEEEFEFEEFFEFEEFFFFEFFFEEEEEFEDEEEFEFFEFFEEEEEFFEEEFEEFFEFEFEEFFFEFEEEFEEEEEFEEEEEFEEEEEEEFFFEEEEEEFFEEEFEEEEBEEEEFEFEEEAEEEFFDEEEEEE
  1. 첫번째 줄 : @sequnce_identifier
  2. 두번째 줄 : 실제 염기서열
  3. 세번째 줄 : +description
  4. 네번째 줄 : Phred quality score
  • 다음은 quality score를 '!'부터 '~'까지 ASCII 코드로 나타낸 것이다.
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

Phred value = −10 * log10(ε)

  • 90% confidence (10% error rate) = Q10
  • 99% confidence (1% error rate) = Q20
  • 99.9% confidence (.1% error rate) = Q30
img

 

SAM / BAM / uBAM

SAM (Sequence Alignment Map)은 1000 Genomes Project 당시 reference 서열에 aligned된 유전체 서열을 저장하기 위해 Samtools와 함께 만들어졌다 (Bioinformatics, 2009, pdf). BAM (Binary Alignment Map)은 binary 버전으로 압축된 형태를 말한다.

img

 

uBAM

  • uBAM - Unmapped BAM Format (link)

시퀀싱 머신에서 mapping 되지 않은 raw FASTQ 파일이 생성된 후 전처리 과정에서 mapping 작업이 진행되지만, 이때 FASTQ 파일 자체에는 다양한 metadata을 저장할 수 없다는 문제가 있다. uBAM (unmapped BAM)은 mapping 정보가 없는 BAM 파일("off-label")로, 데이터 처리 초기 과정에서 metadata를 붙이기 위해 사용된다.

다음은 FASTQ 파일에서 uBAM으로 변환한 예시다.

E100007745L1C002R0020000088     77      *       0       0       *       *       0       0       GAAGAAAAGTTAAACTCTGTGAGTTGAACGCACACATCACAAAAGATTTTCTGAGAATCATTCTGTCTAGTCTTTATATGAAGATAGTTTCCTTTTCTACCATTGACCTCAAAGCGGCTGAAATCTCCACTTGCAAATTCCACAAAAAGA  EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEDE@EEEEEEEFEDEEEEEEEEEEEEEEEEEEEEEEEEEEEDEEDEEEEFEEEEEEEEEEEEEEEEEEEEEEEEE4D.EEEEEEEEEEEEEEEEEEEAEEEEEEEEEE8D  RG:Z:A
E100007745L1C002R0020000088     141     *       0       0       *       *       0       0       TAGACAGAATCATTCCCACAAACTGCGTTGTGATGTGTTCGTTCAACTCACAGAGTTTAACCTTTCTGTTCATAGAGCAGTTAGGAAACACTCTGTTTGTAAAGTCTGTAAGTGGATATTCTGACATCTTGTGCCCTTCGTTGGAAACGG  EEEEEEEDEEEEEEEEEEEEEEEEEECCEEEEEEECEDCEEEEDEBEEEEEEEEEEEEEEEED;EEEEEEDEE9E@AEEEEEEDE@EEEEDEE?ECDEEDEDDDEEEAEEECDEEE?D)EACEEE@EDE@+,5/@EEEDADE/EEEEEEE  RG:Z:A
E100007745L1C002R0020000259     77      *       0       0       *       *       0       0       CCCCACAGGCTCTGGGGAGCCACGGGTGGCTTGAGAGCAGGAGAGGAGCTGACTTGGGCTGTGAAGGAATCTGCCCTGGGTGTGTCGTCCCCCGCCAGGGCCACATCTGCAAGATGTCTCTGTCATGTGGACGCTGTCCTGCTGACACAT  CEDEBA=EEEDEEB9BD5'EEEDEC*77:CE=CA@@:?ED&&D5+B6EC)>6DE/C?6DECE7DEEE3.3EC:@6'D0DD9E;='EDC.:ED8EEDE8D?4ED(E@EEE3E.508E'EC@CD0CE8E<DE3D9%EEEEE..E1@7C&')3  RG:Z:A
E100007745L1C002R0020000259     141     *       0       0       *       *       0       0       GGTGGAAAACTTCCAGATTTCTTCAAAAGTCTTAAACGTCACCACGATCCGGTCCTGGTCACTGGGGATGGACAGCAGCCTGGCTGATAATTTCTTAAGAGAAAGAAATAGGAATTCGAGAGGTCCCCAGGACCTCTGGGGGTTCGGTCA  E<@'DBD6DDDE:EE=6ACE>AEE383EEE=EEDD17D>EAEE7ECD7BEEB0DEEEEBEB?DE(CA8@E-EE6EEE12E@EB7@D4@DDE3,ECE3E7BB8?B>ECD4;EDDA')8D3<D*EC3BEEC'8(%?E20<E0D%(:D%EE7E  RG:Z:A

BAM header

img

@HD : 기본 헤더 (Required)

@SQ : Aligned된 reference 서열의 contigs (Essential) - 반드시 염색체순

@RG : Read groups. 플랫폼(PL), 라이브러리 (LB), 샘플 (SM) 정보를 담는다.

@PG : Read에 처리된 소프트웨어

@HD	VN:1.4	SO:coordinate
@SQ	SN:chr1	LN:248956422	M5:6aef897c3d6ff0c78aff06ac189178dd	UR:/mnt/ssd/MegaBOLT_scheduler/reference/hg38.fa
@SQ	SN:chr22	LN:50818468	M5:ac37ec46683600f808cdd41eac1d55cd	UR:/mnt/ssd/MegaBOLT_scheduler/reference/hg38.fa
@SQ	SN:chrX	LN:156040895	M5:2b3a55ff7f58eb308420c8a9b11cac50	UR:/mnt/ssd/MegaBOLT_scheduler/reference/hg38.fa
@SQ	SN:chrY	LN:57227415	M5:ce3e31103314a704255f3cd90369ecce	UR:/mnt/ssd/MegaBOLT_scheduler/reference/hg38.fa
@SQ	SN:chrM	LN:16569	M5:c68f52674c9fb33aef52dcf399755519	UR:/mnt/ssd/MegaBOLT_scheduler/reference/hg38.fa
@SQ	SN:chr1_KI270706v1_random	LN:175055	M5:62def1a794b3e18192863d187af956e6	UR:/mnt/ssd/MegaBOLT_scheduler/reference/hg38.fa
@SQ	SN:chr22_KI270739v1_random	LN:73985	M5:760fbd73515fedcc9f37737c4a722d6a	UR:/mnt/ssd/MegaBOLT_scheduler/reference/hg38.fa
@SQ	SN:chrY_KI270740v1_random	LN:37240	M5:69e42252aead509bf56f1ea6fda91405	UR:/mnt/ssd/MegaBOLT_scheduler/reference/hg38.fa
@SQ	SN:chrUn_GL000218v1	LN:161147	M5:1d708b54644c26c7e01c2dad5426d38c	UR:/mnt/ssd/MegaBOLT_scheduler/reference/hg38.fa
@SQ	SN:chrEBV	LN:171823	M5:6743bd63b3ff2b5b8985d8933c53290a	UR:/mnt/ssd/MegaBOLT_scheduler/reference/hg38.fa
@RG	ID:rg	SM:NB4Q6634	PL:COMPLETE	LB:lb
@PG	ID:bwa	PN:bwa	VN:BWA_pre2.0.1.2	CL:/mnt/ssd/MegaBOLT_scheduler/bin/bwa mem /mnt/ssd/MegaBOLT_scheduler/reference/hg38.fa -l /mnt/ssd/MegaBOLT_scheduler/tmpDir/14/1/NB4Q6634/megabolt.inputlist -t 40 -i /mnt/ssd/MegaBOLT_scheduler/lic/MegaBOLT.lic
@PG	ID:bamsormadup	PN:bamsormadup	CL:/mnt/ssd/MegaBOLT_scheduler/bin/SortMarkDup threads=10 tmpfile=/mnt/ssd/MegaBOLT_scheduler/tmpDir/14/1/tmp_sort_5 inputformat=sam outputformat=bam indexfilename=/mnt/ssd/MegaBOLT_scheduler/tmpDir/14/1/NB4Q6634.bwa.sortdup.bam.bai	PP:bwa	VN:2.0.79
@PG	ID:samtools	PN:samtools	PP:bamsormadup	VN:1.10	CL:/mnt/ssd/MegaBOLT_scheduler/bin/samtools view -SC -T /mnt/ssd/MegaBOLT_scheduler/reference/hg38.fa -o /mnt/ssd/MegaBOLT_scheduler/tmpDir/14/1/NB4Q6634.bwa.sortdup.cram --threads 10 --write-index /mnt/ssd/MegaBOLT_scheduler/tmpDir/14/1/NB4Q6634.bwa.sortdup.bam
@CO	TY:checksum	ST:all	PA:all	HA:crc32prod	CO:782579494	BS:789c2691	NS:49240ef9	SQ:3ed1c2f4	ST:BC,FI,QT,RT,TC:789c2691
@CO	TY:checksum	ST:all	PA:pass	HA:crc32prod	CO:782579494	BS:789c2691	NS:49240ef9	SQ:3ed1c2f4	ST:BC,FI,QT,RT,TC:789c2691
@CO	TY:checksum	ST:	PA:all	HA:crc32prod	CO:0	BS:1	NS:1	SQ:1	ST:BC,FI,QT,RT,TC:1
@CO	TY:checksum	ST:	PA:pass	HA:crc32prod	CO:0	BS:1	NS:1	SQ:1	ST:BC,FI,QT,RT,TC:1
@CO	TY:checksum	ST:rg	PA:all	HA:crc32prod	CO:782579494	BS:789c2691	NS:49240ef9	SQ:3ed1c2f4	ST:BC,FI,QT,RT,TC:789c2691
@CO	TY:checksum	ST:rg	PA:pass	HA:crc32prod	CO:782579494	BS:789c2691	NS:49240ef9	SQ:3ed1c2f4	ST:BC,FI,QT,RT,TC:789c2691

BAM 파일은 총 11개의 필수 항목으로 이루어진다.

img
  1. QNAME (str) : template 이름
  2. FLAG (int) : bitwise FLAG의 합
  3. SEQ (str)
  4. QUAL (str) : Phred quality score ASCII + 33 (ASCII)
img
  • (예1) 77 = 64 + 8 + 4 + 1
  • (예2) 141 = 128 + 8 + 4 + 1
    • 128 : the last segment in the template (is read2)
    • 64 : the first segment in the template (is read1)
    • 8 : next segment in the template unmapped (read2 unmapped)
    • 4 : segment unmapped (read1 unmapped)
    • 1 : template having multiple templates in sequencing (read is paired)

CRAM

CRAM 파일은 reference 서열에 aligned된 생물학적 서열을 SAM/BAM 파일에 비해 더욱 효율적으로 저장하기 위한 목적으로 고안되었다(Genome research, 2011, pdf). 압축 비율을 개선시켜 BAM에 비하여 보통 30-60% 가량 용량이 작다. 효율적인 용량으로 저장 비용을 줄임과 동시에 GA4GH (Global Alliance for Genomics and Health, link)의 관리 하에 유지되고 있으며, 유전체의 표준적인 압축 포맷으로 여겨진다.

 

GATK에서도 CRAM 파일을 지원하지만 기본적으로 BAM 파일을 대상으로 하기 때문에 성능의 차이가 있을 수 있다. 따라서 GATK에서는 CRAM은 단순 저장의 용도로 사용하고, 분석을 위해서는 먼저 BAM 파일로 변환하여 처리한다.

 

img

 

CRAM의 기본 구조는 여러 컨테이너의 나열이다. SAM 헤더의 압축본을 담은 컨테이너를 첫 시작으로, 여러 컨테이너 (압축 헤더와 슬라이스의 나열)로 구성되어 있다. 각 슬라이스는 alignment records가 블록의 형태로 나열되어 있다. 컨테이너의 압축 헤더는 각 데이터의 블록 위치, 코덱 등의 정보를 담는다. 인덱스 파일(.crai)을 통해 CRAM 파일에 선택적으로 접근할 수 있다.

 

img

 

VCF / GVCF

img
  • VCF - Variant Call Format (link)
img

 

  • GVCF - Genomic Variant Call Format (link)
  • Difference between QUAL and GQ annotations in germline variant calling (link)

 

[참고링크]

https://en.wikipedia.org/wiki/FASTQ_format

https://hhj6212.github.io/biology/tech/2020/08/26/Bioinformatics-fileformats.html

https://gatk.broadinstitute.org/hc/en-us/articles/360035890791-SAM-or-BAM-or-CRAM-Mapped-sequence-data-formats