基因组比对专题——sam文件格式详解(2)

2024-04-01  本文已影响0人  逐鸿

在最近的学习工作中,我越来越认识到生物信息学分析重要的基础之一是对文件格式与含义有着深刻的认识。因此,在深入了解比对之前,必须对其中所要用到的文件格式加以研究。本文参考自SAMv1.pdf (samtools.github.io)

本文对SAM文件的比对区域进行了说明,前序知识请参考基因组比对专题--sam文件格式详尽解读 (1) - 简书 (jianshu.com)

比对区域

在SAM格式文件中,比对区域的每一行通常都用来表示与特定参考序列的比对情况。每行由11个或是更多的字段通过TAB ("\t") 彼此分隔组成。前11个字段的内容与顺序被严格要求与定义。若是在这些字段(前11个)字段中,某些信息不可用,那么必须使用"0"或"*"进行站位,选择哪种取决于该字段应该包含的数据类型。下面将分别介绍这11个字段。

1.QNAME

这是在比对区域中每行中第一个记录的字段。全称Query template NAME,翻译为查询模版名称。对于读段或是片段,它们都有独特的QNAME。若是读段或片段具备相同QNAME,则认为它们来自同一模板。如果QNAME字段为"*"时,则该信息不可用或是未指定。

当一个读段可以与参考序列上的多个区域都对应上时(多重比对),或是可能跨越参考序列上多个区域从而形成嵌合比对,即一个读段的不同部分最佳比对结果是参考序列上的一段不连续区域(通俗理解:读段的某部分比对到参考序列的A处,而又有一部分比对到B处),那么这种情况下同一QNAME可以在比对文件中的多行中。

2.FLAG

这是在比对区域中每行中第二个记录的字段。全称Bitwise Flag,翻译为位标志。该字段使用二进制表示法,其中每位(可以形象理解为十位,百位,千位...)的布尔值(0或1)表示改行比对结果是否具备该位置属性。在这里使用了12位来表示比对结果是否分别具备12种属性(这种描述仅针对目前广泛使用的samv1.6版本)。当然,为了节省空间,在存储信息时,通常会将二进制转换为十进制存储。例如,如果在SAM文件中FLAG值为50,那么就意味着二进制的 “000000110010” 换算为的十进制,表示这一行的比对信息具备2,16,32三种值对应的属性。那么现在将对这十二种属性一一加以说明(这里使用十进制)

补充说明:

对于SAM文件,如果存在多个SEQ相同的行,必须只能有一行满足FLAG的值不可分解为256或是2048与其他数字的和。可以看到,256和2048分别表示次级比对和补充比对,如果FLAG值不能分解出它们,那么就代表了该种比对结果既不是次要比对也不是嵌合比对,从而确定该比对结果为主要比对。而每个SEQ只能有一个主要比对。

3.RNAME

这是比对区域当中记录的第3个字段,英文全称为reference name。该字段用于表示QNAME中的读段或是序列比对到参考序列的名称。并且如果该SAM文件中头部区域使用了@SQ(相关知识参考基因组比对专题--sam文件格式详尽解读 (1) - 简书 (jianshu.com)),那么RNAME(除非是“”)必须出现在头部区域中的SN的TAG中,以形成一一对应的关系。当然,可以赋予一个比对不成功的读段或序列一个普通的坐标,例如这可以使其参与到其后的对文件进行排序的过程中。但是,如果RNAME为“”,那么POS字段和CIGAR字段不应当包含任何有效信息。

4.POS

这是比对区域当中记录的第四个字段,英文全称为position,表示位置。该字段表示读段或是序列映射到参考序列的起始位置。这个位置坐标是基于步长为1计数的,并且是以第一个“消耗”参考序列碱基的CIGAR操作的最左侧的比对位置为值。而参考序列的起始坐标设置为1。举例说明:如果GIGAR操作消耗的第一个碱基是参考序列上的坐标为10的碱基,那么POS就记为10。

其中,CIGAR字符串中的一些操作被认为是“消耗”参考序列碱基的,这意味着这些操作涉及到了参考序列上的碱基。例如,匹配(M)、删除(D)、错配(X)和等同(=)操作都是“消耗”参考碱基的操作,因为它们都涉及到了参考序列上的位置。而插入(I)和软裁剪(S)等操作则不“消耗”参考序列碱基,因为它们仅涉及到读段或序列。有关CIGAR字段详细信息参见下文。

对于没有成功比对到参考序列上的读段或序列,那么POS的值将被设置为0。如果POS值为0,那么RNAME和CIGAR区域也无法描述任何有效信息。

5.MAPQ

这是比对区域中记录的第五个字段,英文全称为mapping quality,翻译为比对质量。它的计算方法为:
value = -10*log_{10}(rate)

其中value表示比对质量分数,rate表示比对错误概率。当比对质量不可用时,该字段值会被设置为255

6.CIGAR

这是比对区域当中记录的第六个字段,英文全称为Concise Idiosyncratic Gapped Alignment Report,翻译为简洁的特殊间隙比对报告。说人话就是,通过字符表示查询序列与参考序列的比对结果的具体内容是什么,为了能够清楚知道接下来对字符的解释描述里的内容,我先举一个例子:假设某个CIGAR字符串为10M5I10M,那么这就表示查询的前10个碱基与参考序列相匹配,随后在查询序列中存在一个5碱基的插入片段,紧接着查询序列的10个碱基由于参考序列匹配或不匹配,具体的字符包括哪些呢?如下:

操作符 描述 消耗查询序列 消耗参考序列
M 表示查询序列匹配或不匹配参考序列
I 向参考序列中插入
D 从参考序列中删除
N 从参考序列中跳过
S 软剪切(在SEQ中呈现的剪切序列)
H 硬剪切(在SEQ中未呈现剪切的序列)
P 填充(从填充的参考序列中静默删除)
= 表示查询序列匹配参考序列
X 表示查询序列不匹配参考序列

下面对一些模棱两可的描述给出详细说明

7.RNEXT

这是比对区域当中记录的第七个字段,英文全称为Reference sequence name of the primary alignment of the NEXT read in the template,翻译为模版中下一个读段主要比对的参考序列的名称。该字段用于描述来自同一模版的某一个读段的下一个读段主要比对到的参考序列名称。

如果该读段已经是模版中最后一个读段,那么下一个读段就变成了第一个读段。与RNAME一样,如果使用了@SQ,那么RNEXT字段中的值也要与某个@SQ行中的SN的TAG值相同。当信息不可用时,此字段设为"*"。

如果RNEXT与RNAME相同,则设置为“=”。如果模版中的下一个读段有一个主要比对(即该这种比对结果被认为是最佳比对结果),并且RNEXT不是“=”,那么RNEXT应当与下一个读段或序列的RNAME相同。

此外,如果RNEXT是“*”,则无法给出PNEXT和一些相关FLAG值,如32。

8.PNEXT

这是比对区域当中记录的第八个字段,英文全称为Position of the primary alignment of the NEXT read in the template,翻译为,模版中下一个读段主要比对的参考序列的位置。类似于POS之于RNAME,PNEXT与RNEXT也是这种关系,并且计数方法也想同,不难发现,其值就等同于下一个读段比对结果所在行的POS。如果下一个读段或序列的比对位置信息不可用,那么PNEXT设置为0,此时,不能对RNEXT和一些相关FALG值进行使用,如32。

9.TLEN

这是比对区域当中记录的第九个字段,英文全称为signed observed template length,翻译为带符号的观察到的模版长度。该字段的目的是提供一个快速地方式来了解读段在参考序列上的位置和跨度,特别是对双末端测序结果来说。这里的长度包含了从一端的开始到另一端的结尾,以及他们之间所有序列的长度(|结束-开始 + 1|绝对值)。其正负号代表读段的方向,如果值为正,那么就意味着该读段在双端读取上的位于左侧,为负则是右侧。而程序在计算时,是基于CIGAR字符串的结果,而“S”标注的区域不参与运算。当模版仅为单段或是信息不可用时,这个值将会被设置为0。但是,对于模版比对开始和结束的定义存在争议,故该值的实现以使用的工具为准

10.SEQ

这是比对区域当中记录的第十个字段,英文全称为segment sequence, 翻译为片段序列。它描述了查询序列的本身的序列信息(A,G,C,T...)。当序列信息在这里没有被存储时,通常会使用“*”来代替。否则,序列的长度必须等于CIGAR字段中M/I/S/=/X操作的长度之和。“=”表示基础与参考基础相同。

11.QUAL

这是比对区域中记录的第十一个字段,英文全称为quality,翻译为质量。简单来说,它记录了SEQ字段中每个碱基的质量分数加33后变换的ASCII字符。质量分数的计算方法为:
value = -10*log_{10}(rate)

其中value为质量分数,rate为碱基错误率。将得到的值四舍五入并+33后,对应的ASCII码就是QUAL字段中记载的内容,这种原理与FASTQ文件是一样的。

这里需要注意,如果一个读段或是序列信息不可用,那么QUAL的字段将被设置为"*"。但是如果QUAL字段不为空,那么SEQ序列必须不为空,且QUAL字段长度也必须与SEQ长度相同。

12.可选字段

在结束了上述11个规定字段,随后的字段为可选字段,可以添加更多的比对结果信息,其组织形式一般为TAG:TYPE:VALUE,并与其他格式一样,保持TAB键分隔字段。

一个经典的例子是MD:Z标签,提供了足够的信息来精确地描述哪些位置匹配,哪些位置存在替换错误(即不匹配)。MD标签以一种紧凑的格式描述了参考序列和读取序列之间的匹配情况,包括完美匹配的长度和特定位置的碱基不匹配。

例如,MD:Z:35A64表示前35个碱基完全匹配,第36位上参考序列的碱基是A,但在读取序列中不是(不匹配),后面紧接着是64个碱基的完全匹配。

上一篇 下一篇

猜你喜欢

热点阅读