fastq
SAM/BAM
SAM (sequence alignment/map)文件是用于存储二代测序数据匹配结果的文本 文件格式。BAM文件是其二进制格式,比SAM文件要节约存储空间,两者可以容易 地进行转换。SAM文件中一般有两部分构成,可选的头部(header section), 记录匹配信息的匹配部(alignment section)。头部主要是存储一些和文件格 式规格,匹配软件,匹配参考基因组等相关的信息。而匹配部则是序列的具体匹 配信息,每条序列占据一行,每行包含多个列存储不同的内容。
示例
假设存在下面的序列要存储为 SAM 文件。 ref 是参考基因组,而 r001 等是不 同的测序数据。
Coor 12345678901234 5678901234567890123456789012345
ref AGCATGTTAGATAA**GATAGCTGTGCTAGTAGGCAGTCAGCGCCAT
+r001/1 TTAGATAAAGGATA*CTG
+r002 aaaAGATAA*GGATA
+r003 gcctaAGCTAA
+r004 ATAGCT..............TCAGC
-r003 ttagctTAGGC
-r001/2 CAGCGGCAT
那么其存为 SAM 文件应为:
@HD VN:1.6 SO:coordinate
@SQ SN:ref LN:45
r001 99 ref 7 30 8M2I4M1D3M = 37 39 TTAGATAAAGGATACTG *
r002 0 ref 9 30 3S6M1P1I4M * 0 0 AAAAGATAAGGATA *
r003 0 ref 9 30 5S6M * 0 0 GCCTAAGCTAA * SA:Z:ref,29,-,6H5M,17,0;
r004 0 ref 16 30 6M14N5M * 0 0 ATAGCTTCAGC *
r003 2064 ref 29 17 6H5M * 0 0 TAGGC * SA:Z:ref,9,+,5S6M,30,1;
r001 147 ref 37 30 9M = 7 -39 CAGCGGCAT * NM:i:1
其中 @HD
和 @SQ
是头部,头部的行以 @ 起始。而文件中剩下的部分则是
匹配部,是具体的匹配信息。
头部
匹配部
在头部下面是包含序列匹配信息的匹配部。匹配部的每一行都代表了fastq中的 一条序列。匹配部有十一列。不同的文件中都会包含这十一列,只是对于有的匹 配信息,根据序列不同或者选项不同,有的列可能是0值或者空值。
- QNAME: String, [!-?A-~]{1,254}, 序列名称, 为fastq文件中一个序列的第一行信息.
- FLAG: Int, [0,2^16-1], 二进制的旗标.
- RNAME: String, *|[!-()+-<>-~][!-~]*, 参考序列的名称, 如果是基因组的话则是相应的染色体名称.
- POS: Int, [0,2^31-1], 以1为起始的在参考序列上的位置.
- MAPQ: Int, [0,2^8-1], 序列匹配的质量
- CIGAR: String, *|([0-9]+[MIDNSHPX=])+, CIGAR值, 反映了大致匹配情况.
- RNEXT: String, *|=|[!-()+-<>-~][!-~], 下一个匹配序列对应的参考序 列的名称, 如果与本序列相同, 则设置为 '=', 如果没有相关的信息则是 ''
- PNEXT: Int, [0,2^31-1], 下一个匹配序列对应的以1为起始的在参考序列上的位置.
- TLEN: Int, [-2^31+1,2^31-1], 模板长度.
- SEQ: String, *|[A-Za-z=.]+, 序列, fastq文件中第二行信息.
- QUAL: String, [!-~]+, 序列质量, fastq文件中第四行信息.
除了上面的必须有的列外,还有可选列,可选列中的信息都是按照 TAG:TYPE:VALUE 去排列的。
VCF/BCF
VCF 是用于存储 variant 信息的文本文件,BCF是二进制存储的方式。VCF文件 包括三部分:元数据部分(meta-information),表头部分(header)和数据部 分。
VCF 的例子如下所示:
##fileformat=VCFv4.2
##FILTER=<ID=PASS,Description="All filters passed">
##bcftoolsVersion=1.9+htslib-1.9
##bcftoolsCommand=mpileup -Ou -f /home/485/Reference/Homo_sapiens/UCSC/hg38/Sequence/WholeGenomeFasta/genome.fa /home/485/Background_1/Background_1.sorted.bam
##reference=file:///home/485/Reference/Homo_sapiens/UCSC/hg38/Sequence/WholeGenomeFasta/genome.fa
##contig=<ID=chr1,length=248956422>
##ALT=<ID=*,Description="Represents allele(s) other than observed.">
##INFO=<ID=INDEL,Number=0,Type=Flag,Description="Indicates that the variant is an INDEL.">
##INFO=<ID=IDV,Number=1,Type=Integer,Description="Maximum number of reads supporting an indel">
##INFO=<ID=IMF,Number=1,Type=Float,Description="Maximum fraction of reads supporting an indel">
##INFO=<ID=DP,Number=1,Type=Integer,Description="Raw read depth">
##INFO=<ID=VDB,Number=1,Type=Float,Description="Variant Distance Bias for filtering splice-site artefacts in RNA-seq data (bigger is better)",Version="3">
##INFO=<ID=RPB,Number=1,Type=Float,Description="Mann-Whitney U test of Read Position Bias (bigger is better)">
##INFO=<ID=MQB,Number=1,Type=Float,Description="Mann-Whitney U test of Mapping Quality Bias (bigger is better)">
##INFO=<ID=BQB,Number=1,Type=Float,Description="Mann-Whitney U test of Base Quality Bias (bigger is better)">
##INFO=<ID=MQSB,Number=1,Type=Float,Description="Mann-Whitney U test of Mapping Quality vs Strand Bias (bigger is better)">
##INFO=<ID=SGB,Number=1,Type=Float,Description="Segregation based metric.">
##INFO=<ID=MQ0F,Number=1,Type=Float,Description="Fraction of MQ0 reads (smaller is better)">
##FORMAT=<ID=PL,Number=G,Type=Integer,Description="List of Phred-scaled genotype likelihoods">
##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
##INFO=<ID=ICB,Number=1,Type=Float,Description="Inbreeding Coefficient Binomial test (bigger is better)">
##INFO=<ID=HOB,Number=1,Type=Float,Description="Bias in the number of HOMs number (smaller is better)">
##INFO=<ID=AC,Number=A,Type=Integer,Description="Allele count in genotypes for each ALT allele, in the same order as listed">
##INFO=<ID=AN,Number=1,Type=Integer,Description="Total number of alleles in called genotypes">
##INFO=<ID=DP4,Number=4,Type=Integer,Description="Number of high-quality ref-forward , ref-reverse, alt-forward and alt-reverse bases">
##INFO=<ID=MQ,Number=1,Type=Integer,Description="Average mapping quality">
##bcftools_callVersion=1.9+htslib-1.9
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT /home/485/data/Background_1/Background_1.sorted.bam
chr1 12198 . G C 11.7172 . DP=1;SGB=-0.379885;MQ0F=0;AC=2;AN=2;DP4=0,0,1,0;MQ=60 GT:PL 1/1:41,3,0
chr1 14464 . A T 117 . DP=44;VDB=3.43916e-10;SGB=-0.693141;RPB=0.804784;MQB=0.997831;BQB=0.960039;MQ0F=0;AC=2;AN=2;DP4=4,0,37,0;MQ=44 GT:PL 1/1:144,7,0
chr1 14653 . C T 85 . DP=252;VDB=1.88797e-18;SGB=-0.693147;RPB=7.469e-24;MQB=0.0373404;MQSB=0.720283;BQB=0.997816;MQ0F=0.0595238;ICB=1;HOB=0.5;AC=1;AN=2;DP4=151,17,69,1;MQ=32 GT:PL 0/1:118,0,255
元数据部分
元数据部分主要是关于计算环境的说明,关于参考序列的描述,和关于INFO的种种描述信息等。
##fileformat=VCFv4.2
: 当前 VCF 文件所采用的 VCF 格式版本, 最新的是4.2.##INFO=<ID=ID,Number=number,Type=type,Description="description",Source="source",Version="version">
: INFO 列对应的信息描述.##FILTER=<ID=ID,Description="description">
: FILTER 列信息, 过滤条 件的描述.##FORMAT=<ID=ID,Number=number,Type=type,Description="description">
: FORMAT 列信息, 该位点类型的简要描述, 具体信息在 INFO 列中.##ALT=<ID=type,Description=description>
: ALT列信息, variant的位点 信息描述.##contig=<ID=chr1,length=248956422>
: 在VCF文件中引用的参考序列名称 对应的信息.- ``
表头部分
表头部分只有一行,以‘#’号开头,是下面数据部分的每一列的表头。
- CHROM: 染色体名称
- POS: variant 在染色体上的位置
- ID:
- REF: 参考基因组上该位置的碱基,或者一小段序列(对于INDEL情况)。
- ALT: 比对序列中的该位点的碱基,如果是碱基替换则可能只是一个碱基,而 如果是INDEL,则可能是若干碱基。
- QUAL: 该位点质量
- FILTER:
- INFO: 该位点variant信息
- FORMAT:
- 文件名: bam文件地址
数据部分
数据部分就是具体的每个variant的信息了。
Reference
- https://samtools.github.io/hts-specs/SAMv1.pdf
- https://samtools.github.io/hts-specs/VCFv4.2.pdf