生信分析中大家接触最多的文件肯定会有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。
@CO:任意的说明信息。
比对信息部分
第1列. QNAME 表示的是查询序列的名称即短片段(reads)的名称;
第2列. FLAG 以整数来表示比对的结果,不同数值有不同的意义,数值也可以是下列数的组合;
sam 文件第二列flag含义:
1 : 代表这个序列采用的是PE双端测序
2: 代表这个序列和参考序列完全匹配,没有错配和插入缺失
4: 代表这个序列没有mapping到参考序列上
8: 代表这个序列的另一端序列没有比对到参考序列上,比如这条序列是R1,它对应的R2端序列没有比对到参考序列上
16:代表这个序列比对到参考序列的负链上
32 :代表这个序列对应的另一端序列比对到参考序列的负链上
64 : 代表这个序列是R1端序列, read1;
128 : 代表这个序列是R2端序列,read2;
256: 代表这个序列不是主要的比对,一条序列可能比对到参考序列的多个位置,只有一个是首要的比对位置,其他都是次要的
73 = 64+8+1 (R1匹配上,R2没有匹配上)
153 = 128+16+8+1(R2比对到负链接,R1没有匹配上)
97 = 64+32+1 (R2比对到负链,R1不是完全匹配)
99 = 64+32+2+1 (R2比对到负链,R1完全匹配)
147 = 128+16+2+1 (R2完全匹配到负链)
145 = 128+16+1 (R2比对到负链,R1不是完全匹配)
83 = 64+16+2+1 (R1完全匹配到负链)
163 = 128+32+2+1(R2完全匹配,R1比对到负链)
如果以上情况都不符合则默认为:0
第3列. RNAME 表示参考序列的名称,比如基因组的染色体编号等,如果没有比对上则显示为*;
第4列. POS 表示比对的起始位置,以1开始计数,如果没有比对上则显示为0;
第5列. MAPQ 比对质量;
第6列. CIGAR CIGAR 字符串,即比对的详细情况,简要比对信息表达式(Compact Idiosyncratic Gapped Alignment Report),其以参考序列为基础,使用数字加字母表示比对结果,比如3S6M1P1I4M,前三个碱基被剪切去除了,然后6个比对上了,然后打开了一 个缺口,有一个碱基插入,最后是4个比对上了,是按照顺序的;
*M:表示match或mismatch,*I:表示插入,*D:表示删除*N:表示skipped,跳过这段区域,,*S:表示被剪切的序列存在于序列中*H:表示被剪切的序列不存在于序列中,*P:表示padding(填补),*=:表示match,*X:表示mismatch(错配,位置是一一对应的)
第7列. RNEXT 双末端测序中下一个reads比对的参考系列的名称,如果没有则用*表示,如果和前一个reads比对到同一个参考序列则用=表示;
第8列. PNEXT 下一个reads比对到参考序列上的位置,如果没有则用0表示;
第9列. ISIZE/TLEN query序列的模板长度或者插入长度,Template的长度,最左边得为正,最右边的为负,中间的不用定义正负,不分区段(single-segment)的比对上,或者不可用时,此处为0;
第10列. reads的序列信息;
第11列. reads的序列质量信息,同FASTQ。