SAM 是sequence alignment format [http://samtools.github.io/hts-specs/SAMv1.pdf]的缩写,BAM文件是SAM的二进制文件
。当测序生成的fastq文件比对到参考基因组
后就会生成SAM文件或者BAM文件。大部分的数据分析都是始于SAM文件。
SAM 文件的结构
SAM格式文件包括头部注释部分
和比对结果部分
,头部分为''可选部分''。头部分位于比对部分之前,以“@”开头
。比对部分有11列是固定
的,其他多列可选。看如下例子:
@HD VN:1.0 SO:unsorted #VN版本,比对有无sorted
@SQ SN:17 LN:83257441 ##SQ:参考序列目录。SN:参考序列名字。LN:参考序列长度
@PG ID:hisat2 PN:hisat2 VN:2.1.0 CL:/home/bio/bin/hisat2/hisat2-align-s --wrapper basic-0 -c GTGCTGAACGACGAGGACTGCCGGGAGTTCCCCTGGCAC ##PG:program 。 ID:program record identifier 。 VN:程序版本。CL:command line
0 16 17 805144 60 39M * 0 0 GTGCCAGGGGAACTCCCGGCAGTCCTCGTCGTTCAGCAC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII AS:i:0 Z:39 YT:Z:UU NH:i:1
头部注释部分
-
@HD:说明VN的版本以及比对有无排列顺序,这个例子没有排序。
-
@SQ:参考序列目录。SN:参考序列名字。LN:参考序列长度。
-
@PG:使用的比对程序名,这个例子是hisat2
比对结果部分
比对结果部分每行标示一个read与参考序列的比对信息,前11列为必须字段,顺序固定。其余列是可选字段。前11列如下解释:
-
第一列Query Name:read的名称,即片段的编号。
-
第二列FLAG:如果不是以下数字中的一个,则是一下数据某几个的和
-
1:标示对应的二进制为01,标示read有多个测序数据,一般理解为有双端测序数据,另一条没有过滤掉;
-
2:二进制为10,标示read的多个片段都有比对结果,双端的read都比对上了;
-
4:表示这条read没有比对上;
-
8:标示下一条read没有比对上;
-
16:表示这条read的反向比对上了;
-
32:表示这条read的下一条的反向没有比对上;
-
64:表示样本中第一个片段;
-
128:表示样本中最后一条片段;
-
256:表示第二次比对;
-
512:表示比对的质量不合格;
-
1204:表示read是pcr或光学副本产生的;
-
2048:表示辅助比对结果;
-
>Bit Description
1 0x1 template having multiple segments in sequencing
2 0x2 each segment properly aligned according to the aligner
4 0x4 segment unmapped
8 0x8 next segment in the template unmapped
16 0x10 SEQ being reverse complemented
32 0x20 SEQ of the next segment in the template being reverse complemented
64 0x40 the first segment in the template
128 0x80 the last segment in the template
256 0x100 secondary alignment
512 0x200 not passing filters, such as platform/vendor quality controls
1024 0x400 PCR or optical duplicate
2048 0x800 supplementary alignment
-
第三列Reference Name:参考序列的名称,或者比对到参考序列上的染色体号。比对不上为*
-
第四列Position:比对上的位置,从1开始计数(顺着链的方向从1数起,哪个位置开始匹配)。没有比对上为0;
-
第五列Mapping Quality:比对的质量分数,越高表示比对的越准确。
-
第六列CIGAR:表示比对的结果。
* M:表示match或mismatch * I:表示插入 * D:表示删除 * N:表示skipped,跳过这段区域 * S:表示被剪切的序列存在于序列中 * H:表示被剪切的序列不存在于序列中 * P:表示padding(填补) * =:表示match * X:表示mismatch(错配,位置是一一对应的)
-
第七列RNEXT:表示下一个片段比对上的参考序列的编号,比对不上用’*‘,该片段和下一个片段比对上同一个参考片段,用’=‘;
-
第八列PNEXT:表示下一个片段比对上的位置,如果不可用,此处为0;
-
第九列TLEN:表示Template的长度。如果第八列大于第四列,则为正数,否则负数。
-
第十列SEQ:表示序列片段的序列信息,(注意CIGAR中M/I/S/=/X对应数字的和要等于序列长度),表示read的碱基序列,如果是比对到互补链上则是反转互补序列。
-
第十一列QUAL:表示read的质量,用ASCII编码表示。
网友评论