sam文件格式说明

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sam文件格式说明相关的知识,希望对你有一定的参考价值。

参考技术A bowtie2是当前最流行的短序列比对软,SAM(SequenceAlignment/Map)格式是一种通用的比对格式,用来存储reads到参考序列的比对信息SAM是一种序列比对格式标准, 由sanger制定,是以TAB为分割符的文本格式。

主要应用于测序序列mapping到基因组上的结果表示,当然也可以表示任意的多

重比对结果

SAM分为两部分:注释信息和对比结果

注释信息以@开头

@HD:说明符合标准的版本。对比序列的排列顺序

@SQ:参考序列说明

@RG:比对上的序列(read)说明

@PG:使用的程序说明

@CO:任意的说明信息

比对结果部分

每一行代表一个片段的比对信息,包括11个必须的字段和一个可选字段,字段之间用tag分割

11个必须字段:

1:比对片段(read)的编号

2.位标识(flag)每一种数字代表一种情况,这里的值是符合情况的数字和

3.参考序列的编号,没有比对上的序列,这里为 *

4.比对上的位置 从1开始计数,没有比对上此处为0

5.MAPQ:mapping的质量

6.CIGAR:简要比对信息表达式 以参考序列为基础,使用数字加字幕表示比对结果

比如3S6M1P1I4M,前三个碱基被剪切去除了,然后6个比对上了,

然后打开了一个缺口,有一个碱基插入,最后是4个比对上了,是按照顺序的

“M”表示 match或 mismatch;

“I”表示 insert;

“D”表示 deletion;

“N”表示 skipped(跳过这段区域);

“S”表示 soft clipping(被剪切的序列存在于序列中);

“H”表示 hard clipping(被剪切的序列不存在于序列中);

“P”表示 padding;打开缺口

“=”表示 match;

“X”表示 mismatch(错配,位置是一一对应的)

7.下一个片段比对上的参考序列的标号,没有另外的片段这里为 * ,同一个片段 =

8.下一个片段比对上的位置,如果不可用,此处为0

9.Template的长度,最左边得为正,最右边的为负,中间的不用定义正负,

不分区段(single-segment)的比对上,或者不可用时,此处为0;

10.比对上的序列片段的序列信息,如果不存储此类信息,此处为’*‘,

长度=简要比对信息表达式算出来的结果

11.序列的质量信息,格式同FASTQ一样

17SAM文件格式说明(转载迷宫中的将军)

1. SAM格式说明
SAM代表Sequence Alignment/Map格式,是一种制表符分隔的文本格式,包含一个可选的头部分(header section,有人称之为“注释部分”),和一个比对部分(alignment section)。如果包含头部分,那么头部分必须置于比对部分之前。头部分的行以@符号开头,而比对部分的行不以@符号开头。比对部分的每一行包含11个必选的字段,用于说明重要的比对信息,如比对位置(mapping position)等;另有可变数量的可选字段,用于存储其他信息(flexible)或比对软件特异的信息。
(新一代测序数据的处理过程中,map/alignment总是同时出现,那么二者的区别是什么呢?大致上可以这样理解:map这个动作表示的是:把短片段对应到参考基因组的某个位置上。这个动作只回答“短片段来自长片段的什么位置?”这个问题;而align这个动作早在二代测序之前很久就有了,这个动作表示两条(或多条)序列(不管是核酸序列还是蛋白序列)的比较,回答的问题是“这两条序列之间有什么异同?”。显然在处理重测序数据的过程中,要先map,再align,即先把read定位到参考基因组的某个位置上,再比较read和参考基因组序列的异同。另外还可以认为:凡是要align,那一定是要先map的;但是map过后,却不一定要align(比如我只关注CNV或表达量等信息,而不关心具体序列的时候,就只需要map确定下read来自参考序列的哪个位置,而不需要align获取具体的序列间异同信息)。可见在SAM文件中,map和align这两个动作都要有,这可能就是这两个动作总是同时出现的原因。理解了这两个名字的含义和区别,就可以理解为什么是“mapping” position,因为确定position信息只需要mapping。map和align两个词,似乎都可以用中文“比对”一词来表示。下文中如果没有必要区分二者,将全都译作“比对”。参考资料见:https://www.biostars.org/p/180986/Devon Ryan的回答,以及https://liorpachter.wordpress.com/2015/11/01/what-is-a-read-mapping/
1.1 一个例子
假设我们有下列比对结果,小写字母代表碱基在比对时被切掉。read r001/1和r001/2组成一个read对,r003是一个嵌合read,r004代表一个被劈开的比对结果(a split alignment)。
技术分享
相应的SAM格式是(原文注释:下图中的FLAG列中的值对应二进制位标志的含义如下:99 = 0x63:一对read中的第一条/下一条read与reference反向互补/适当匹配(properly aligned)/多个片段(一个read对算是一个alignment(名称都是r001),因此此处的multiple segments意指该alignment含有两个片段(segments),也就是read对中的两条reads);0:没有标志设置,因此是一个匹配上的片段;2064 = 0x810:supplementary/反向互补;147 = 0x93:一对read中的第二条/反向互补/适当匹配/多个片段):
技术分享
1.2 术语与概念
模板(Template):一段DNA/RNA序列,它的一部分在测序仪上被测序,或被从原始序列中组装。(意思就是:我们通过测序仪测序的那段序列,或者通过组装原始序列得到的更长的序列,就是模板的一部分)。(从后文来看,对于Illumina双端测序来说,template指的就是插入片段)
片段(Segment):一段连续的序列或子序列(subsequence);
读段(Read):一段来自测序仪的原始序列。read可以包含多个片段(一条read在比对过程中可能会被拆分成几段,对应到参考序列不同的位置上。read被拆分后形成的片段即为segment)。对于测序数据,reads根据测序顺序进行编号;
线性比对(Linear alignment):一条比对到参考序列上的read可能会有插入、缺失、skips和切除(clipping),但只要没有方向的改变(例如,read的一部分比对到了正义链上,另一部分比对到了反义链上),就是Linear alignment。一个线性比对结果可以代表一个SAM记录;(似乎应该是:一条SAM记录能且只能保存一个线性比对结果)
嵌合比对(Chimeric alignment):不是线性比对的比对。嵌合比对中包含了一套没有大范围重叠的线性比对(嵌合比对中的每一个片段都是线性比对。关于大范围重叠的说法是为了和多重比对区分)。一般地,嵌合比对中的一个线性比对被认为是“有代表性的比对”(representative alignment),而其他的线性比对被称为补充的(supplementary),用补充比对标志(supplementary alignment flag)加以区别。嵌合比对的所有SAM记录有相同的QNAME,其flag值的0x40和0x80位都相同(见1.4节)。哪个线性比对被视为有代表性是任意选择的。(可见嵌合比对中,各个segments的独立性更强:都不在双链的同一条链了。另外,如果一条read的不同部分比对到了不同的染色体上,那肯定也是嵌合比对了,因为不同染色体之间讨论方向相同是没有意义的。)
read比对(read alignment):能代表一条read的比对结果的线性比对或嵌合比对;
多重比对(Multiple mapping):由于重复序列等情况的存在,一条read在参考基因组上的正确位置可能无法确定。在这种情况下,一条read可能会有多种比对结果,其中一种被视为主要的(primary),所有其他的比对结果的SAM记录的flag标志中都会有一个“次要比对结果”的标志。所有这些SAM记录拥有相同的QNAME,flag标志的0x40位和0x80位有相同的值。一般被指定为“主要”的比对结果是最佳比对,如果都是最佳比对,则任意指定一条。(原文注释:嵌合比对主要由结构变异、基因融合、组装错误、RNA测序或实验过程中的一些原因造成,更经常出现在长reads中。嵌合比对中的线性比对没有大片段的重叠,每个线性比对有较高的mapping质量值,可以用于SNP/INDEL的检测;而多重比对主要是序列重复造成的,不经常出现在长reads中。如果一条read有多重比对的情况,所有的比对互相之间几乎完全完全重叠。除了一个最佳比对外,所有其他比对的质量值都<3,且会被大多数SNP/INDEL检测软件忽略)。
以1为起始的坐标系(1-based coordinate system):序列的第一位是1的坐标系。在这种坐标系中,一个区域用闭区间表示。例如,第三位和第七位碱基之间的区域表示为[3,7]。SAM, VCF, GFF和Wiggle格式使用以1为起始的坐标系;
以0为起始的坐标系(0-based coordinate system):序列的第一位是0的坐标系。在这种坐标系中,一个区域用左闭右开区间表示。例如,第三位和第七位碱基之间的区域表示为[2,7)(原文如此。难道不应该是[3,8)么?)。BAM, BCFv2, BED和PSL格式使用以0为起始的坐标系;
Phred scale:如果一个概率值0<p≤1,这个p值的phred scale等于-10log(10)p,舍入为最近的整数。
1.3 头部分
头部分的行以@开头,后面紧接着一个或两个字母的头记录类型编码。头部分中,每行都是以制表符分隔的,除了@CO行,每个数据字段都服从‘TAG:VALUE’这一格式,其中TAG是一个两字符的字符串,定义了VALUE的格式和内容。所以头部分的行都符合这一正则表达式: /^@[A-Z][A-Z](\t[A-Za-z][A-Za-z0-9]:[ -~]+)+$/或者 /^@CO\t.*/
下表描述了头部分可能用到的记录类型和它们的预定义的标签。带星号标记的标签是必需的,比如每个@SQ行必须要有SN和LN字段。由于有可选字段,你可以自由为更多数据字段增加新的标签。含有小写字母的标签被保留供个人使用,在本说明将来的版本中不会被正式定义。(原文注释:最好的做法是设计和试验新的字段或少数人用到的字段时用小写字母标签。对于可能会被广泛使用的新标签,向hts-specs提交或者给[email protected]发邮件,将相应的大写字母标签添加到说明中。)
@HD 头部分行。如果有这一行,这一行应该是第一行。
VN* 文件格式版本。该标签的值服从正则表达式:
/^[0-9]+\.[0-9]+$/。(VN肯定是VersioN)
SO 比对的排列顺序。有效值包括:unknown(默认的), unsorted, queryname和coordinate。对于coordinate排序,排序的主键是RNAME字段(reference name,如果是人的全基因组,那就是染色体1-22,X,Y,chrM),顺序根据@SQ行中的顺序确定;排序的次键是POS字段。RNAME和POS都相同的比对结果,顺序是任意的。RNAME字段中的值是星号的比对结果放在其他比对结果之后,顺序是任意的。(SO肯定是Sorting Order)
GO 比对结果的分组(grouping),表明相似的比对记录被聚集到一起,但是文件总体上未必被排序。有效值有:none(默认的),query(比对结果根据QNAME分组),reference(比对结果根据RNAME/POS分组)。(GO代表Grouping Order?那SO必然GO喽?)
@SQ 参考序列字典。@SQ行的顺序定义了对比对进行排序的顺序。
SN* 参考序列名称。每个@SQ行必须有独一无二的SN标签。该字段的值被用在比对记录的RNAME字段和RNEXT字段,服从正则表达式
[!-)+-<>-~][!-~]*
LN* 参考序列长度,范围[1,2^31-1]
AH 表明这一(参考)序列是一个交替基因座(alternate locus)。值是primary assembly中的位置for which this sequence is an alternative,格式是
‘chr:start-end’, ‘chr’ (如果知道的话)或者‘*’(如果不知道),其中chr是primary assembly中的一个序列。该标签(AH)一定不能出现在primary assembly中的序列中(这段迷迷糊糊的)。
AS 基因组组装ID(Genome assembly identifier)
M5 大写字母表示的序列的MD5检验,去掉空格但是包含pads(用*表示)。(对什么文件做的MD5检验?空格和pads有是怎么回事?参考基因组?)
SP 物种
UR 序列的URI(原文是URI,强烈怀疑应该是URL)。这个值可能以一种标准协议开始,如http或ftp。如果不是以这些协议的一种开始,那可能是系统路径。
@RG read分组。允许存在多个未排序的@RG行。
ID* Read分组ID。每个@RG行必须有一个独一无二的ID,ID的值被用在比对记录的RG标签中。必须独一无二。合并SAM文件是,为了处理冲突,该值可能会被修改。
CN 产生数据的测序中心的名字。
DS 描述(Description)
DT 这批数据产生的日期
FO Flow order。对应用于每个read的每个flow的核苷酸的核苷碱基阵列。多碱基的flow采用IUPAC格式编码,非核苷酸flow用其他字符编码。正则表达式:
/\*|[ACMGRSVTWYHKDBN]+/
KS 对应每条read的key sequence的碱基阵列
LB 文库
PG 处理read分组的程序。
PI 预测的插入片段大小的中位数。
PL 测序使用的平台/技术。有效值:CAPILLARY, LS454,ILLUMINA, SOLID,HELICOS,IONTORRENT,ONT和PACBIO.
PM 平台模式,提供平台/技术进一步细节的自由格式的文本。
PU 平台单元(比如flowcell编号,lane编号(对Illumina)或slide编号(对SOLiD)),独一无二的ID。
SM 样本。如果混样的话,就用混养池名称。
@PG 程序
ID* 程序记录ID。每个@PG行必须有一个独一无二的ID。ID的值被用在@PG其他行的PG标签和PP标签。合并SAM文件时,为了避免冲突,PG的ID可能会被修改PG IDs
PN 程序名称
CL 命令行
PP 之前的@PG-ID。必须匹配另一个@PG的ID标签。@PG记录可以用PP标签连接起来,链中的最后一个记录没有PP标签。这条链定义了应用到比对结果中的程序的顺序。合并SAM文件时,为了处理PG ID的冲突,PP 的值可能会被修改。链中的第一个PG记录(也就是SAM记录中被PG标签指定的那个)描述了最近处理SAM的程序;链中的下一个PG记录描述了下一个最近的处理SAM记录的程序。SAM记录的PG ID不是必然指定链中最新的PG记录,而是可能指向任意一个PG记录,暗示SAM记录已经被PG记录中的程序操作过,该程序通过PP标签指定。
DS 描述
VN 程序版本
@CO 注释。允许多行未排序的@CO行。
1.4 比对部分:必选字段
在SAM格式中,比对部分的每行表示一个片段(segment)的线性比对(linear alignment)。每行有11个必选字段,这些字段总是以相同的顺序出现,不过如果相应的信息确实,字段的值可以使0或者“*”(随不同字段而不同)。下表给出了SAM格式中必选字段的概览:
字段 值类型 值的正则表达式/范围 简要描述
1 QNAME String [!-?A-~]{1,254} 查询模板名称
2 FLAG Int [0,2^16-1] 二进制形式的标志
3 RNAME String \*|[!-()+-<>-~][!-~]* 参考序列名称
4 POS Int [0,2^31-1] 以1起始计数的最左侧的比对位置
5 MAPQ Int [0,2^8-1] 比对质量值
6 CIGAR String \*|([0-9]+[MIDNSHPX=])+ CIGAR字符串(CIGAR全称:Compact Idiosyncratic Gapped Alignment Report)
7 RNEXT String \*|=|[!-()+-<>-~][!-~]* 与本行read配对的read的参考序列名称
8 PNEXT Int [0,2^31-1] 与本行read配对的read的比对位置
9 TLEN Int [-2^31+1,2^31-1] 观察到的模板长度(应该是测序结果对应的模板的跨度范围。不然read长度都是一样长的,这个字段就没有意义了)
10 SEQ String \*|[A-Za-z=.]+ 片段(segment)序列
11 QUAL String [!-~]+ phred表示的碱基质量值+33后得到的ASCII码
1. QNAME: Query template NAME. 有相同QNAME的reads/segments被视为来自同一模板(template)。QNAME为“*”表示信息无法获得。在SAM文件中,当read的比对是嵌合的,或者出现多重比对的情况时,一条read可能会占据多个比对行。
2. FLAG: 二进制FLAG的组合,每一位的解释如下表所示:
1 0x1 测序中,模板有多个片段
2 0x2 每个片段都被合适地匹配
4 0x4 片段未被比对到参考基因组上
8 0x8 模板中的另一个片段没有被匹配
16 0x10 序列(与参考基因组)是反向互补的
32 0x20 模板中另一个片段的序列是反向互补的
64 0x40 模板中的第一个片段
128 0x80 模板中的最后一个片段
256 0x100 次要比对
512 0x200 未通过过滤
1024 0x400 PCR重复或光学重复
2048 0x800 补充比对
  • 对于SAM文件中的每个read/contig,有且只有一行的FLAG满足‘FLAG & 0x900==0’。这一样被称为这条read的主行(primary line);
  • 当所用工具检测到0x100位为1时,这一比对结果不会被用于特定的分析。这一位一般在多重比对出现时用来标记其余比对(alternative mappings);
  • 0x800位表明相应的币兑行是嵌合比对的一部分。0x800位被标记的行在SAM中被称为补充行(supplementary line);
  • 0x4位是识别read是否未比对(unmapped)的唯一可信的地方。如果0x4置1,RNAME, POS, CIGAR, MAPQ, 以及FLAG的0x2, 0x100, 0x800位都不应该有值;
  • 0x10位标明序列(SEQ字段)是否被反向互补处理过以及碱基质量值(QUAL字段)是否被反向处理过。如果0x4位没有被置1,表明链map到了链上(this corresponds to the strand to which the segment has been mapped);如果0x4位被置1,表明未被比对的read(unmapped read)的方向就是下机时原始的方向(this indicates whether the unmapped read is stored in its original orientation as it came off the sequencing machine,该句中的‘whether’和‘unmapped’两个词令人困惑);
  • 0x40位和0x80位反映了不同测序技术中read在每个template中的顺序。(原文注释:例如,在Illumina双端测序中,第一条read(0x40)对应R1正向read,最后一条(0x80)read对应R2反向read。注意这里的正向反向与片段比对到参考序列上的方向无关,比对后两条read中的0条,1条,两条有reverse标志(0x10)都是有可能的)如果0x40位和0x80位都置1,这条read是线性模板的一部分,但是既不是第一条也不是最后一条read。如果二者都置0,read在template中的索引未知,在非线性模板或数据处理过程中信息丢失时会出现这种情况;
  • 如果0x1置0,0x2, 0x8, 0x20, 0x40, 0x80位都没有意义;
  • 表中未列出的位留作后用。现有软件在写入过程中,都不应该将这些位置1;读取过程中,这些位都会被忽略;
3. RNAME:比对的参考序列名称。如果头部分有@SQ行,所有的RNAME(除了“*”以外)必须出现在SN标签下。没有坐标的没比对上的片段在该字段的值为“*”。不过,没比对上的片段也可能有一个普通坐标,以便排序后将其放在所需的位置上。如果RNAME是“*”,POS, CIGAR字段都没有意义;
4. POS:以1位起始的坐标系中,“消耗”一个参考序列碱基的第一个CIGARoperation最左边的位置。参考序列的第一个碱基的坐标是1。没比对上的没有坐标的read的POS是0。如果POS是0,RNAME和CIGAR字段没有意义;
5. MAPQ:比对质量值,等于-10log10P(P是比对位置错误的可能性),舍入到最近的整数。值为255时表示比对质量值未知;
6. CIGAR:CIGAR字符串(CIGAR全称:Compact Idiosyncratic Gapped Alignment Report,简单特质缺口比对报告???)。CIGAR operation如下表所示(‘*’表示CIGAR值未知):
Op BAM 描述 消耗待比对序列 消耗参考序列
M 0 位置能比对上 yes yes
I 1 相对参考序列有插入 yes no
D 2 相对参考序列有缺失 no yes
N 3 从参考序列上跳过一段 no yes
S 4 软切割(被切割的序列保留在SEQ中) yes no
H 5 硬切割(被切割的序列不出现在SEQ中) no no
P 6 补丁(打了补丁的参考序列中的沉默缺失) no no
= 7 read碱基与参考序列相同 yes yes
X 8 read碱基与参考序列不同 yes yes
  • “消耗查询序列”与“消耗参考序列”分别指CIGAR是否引起比对沿着查询序列和参考序列的方向向前前进一个或几个碱基;
  • H 只能出现在CIGAR的开始或最后;
  • S的两边必为H,否则必须位于CIGAR的两端;
  • 对于mRNA到基因组的比对,N表示内含子。对于其他类型的比对,N的解释未被定义;
  • MIS=X的长度和应该等于SEQ长度。
7. RNEXT:模板(template)中的下一条read的主要比对的参考序列名称。对于最后一条read,下一条read就是模板中的第一条read。如果头部分有@SQ行,RNEXT(如果不是*或=)必须出现在SQ-SN标签中。信息未知时,该字段被设置为星号(*),如果RNEXT与与RNAME相同,则为等号(=)。如果不是“=”,且模板中的下一条read有主要比对(在FLAG的0x100位也能看出来),该字段的值等同于下一条read主要比对行的RNAME。如果RNEXT是“*”,PNEXT和FLAG的0x20位没有意义。
8. PNEXT:模板中下一条read的主要比对的位置。信息未知时值为0,。这一字段等于下一条read的主要比对的POS值。如果PNEXT是0,则RNEXT和FLAG的0x20位没有意义。
9. TLEN:有符号的模板长度观察值。如果(同一模板的)所有的片段都比对到相同的参考序列,无符号的模板长度观察值等于最左到最右的碱基数。最左边的片段有一个正号,最右片段为负号。中间片段的符号未定义。单片段模板或信息未知时,该字段值设为0;
10. SEQ:片段序列。当序列未储存时,这一字段可能是“*”。如果不是“*”,序列长度必须等于CIGAR中MIS=X长度的和。“=”表示测序碱基与参考序列碱基相同。字母大小写没有意义。
11. QUAL:碱基质量值+33对应的ASCII字符(和Sanger FASTQ格式中的质量值字符串一个意思)。碱基质量值是碱基错误可能性的phred-scaled处理,等于-10log10P(碱基错误概率)。质量值未储存时该字段值为‘*’。如果不是“*”,SEQ不可为“*”,且质量值字符串的长度应该等于SEQ的长度。
1.5 比对部分:可选字段
所有可选字段服从TAG:TYPE:VALUE格式,其中TAG是一个两字符字符串,符合正则表达式/[A-Za-z][A-Za-z0-9]/。每个TAG在一个比对行中只能出现一次。含有小写字母的TAG保留给终端用户使用。在可选字段中,TYPE是大小写敏感的单字母,定义VALUE的格式:
TYPE 相应值的正则表达式 描述
A [!-~] 可打印字符
i [-+]?[0-9]+ 有符号的整数(SAM格式对这里整数的范围没有要求,但BAM要求范围是[?2^31 ,2^32 ),所以SAM也得在这个范围内)
f [-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)? 单精度浮点数
Z [ !-~]* 可打印字符串,包含空格
H ([0-9A-F][0-9A-F])* 十六进制格式的二进制数列表(例如,二进制列表[0x1a, 0xe3, 0x1]对应十六进制串 ‘1AE301’)
B [cCsSiIf](,[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?)+ 整数或数字列表
对于一个整数或数字列表(类型B),第一位字母指明后面逗号分隔的列表的数字类型,可以是‘cCsSiIf’中的一个,分别对应int8 t (有符号的8位整数), uint8 t (无符号的8位整数), int16 t, uint16 t, int32 t, uint32 t and float(Explicit typing eases format parsing and helps to reduce the file size when SAM is converted to BAM)。输入输出过程中,如果其他类型也能与列表兼容,列表元素的类型可能会改变。
预定义的标签(tags)在另一个的SAM可选字段说明中有描述,其中描述了已有的标准tag字段的细节及关于创建新的可能会引起大家兴趣的(be of general interest)conventions。以X、Y、Z开头的标签和包含小写字母的标签保留为个人所用,不会在本说明未来版本中正式定义。
2 关于SAM格式的推荐操作
本部分描述了针对SAM格式中数据的最佳操作(best practice),一般不是必须的,但对于一些特定软件发挥适当功能可能是必须的。
  1. 头部分:
    1. 要有@HD行,@HD行中必须有SO标签或GO标签之一,但不能二者同时有;
    2. reads被比对(mapped)后,要有@SQ行;
    3. RG标签无论在比对部分的什么地方出现,在头部分中都应该有一个对应的@RG行,该@RG行中有对应的ID标签;
    4. PG标签无论在比对部分的什么地方出现,在头部分中都应该有一个对应的@PG行,该@PG行中有对应的ID标签;
  2. 相邻的CIGAR operations应该不同;
  3. 比对质量不能超过255;
  4. 没比对上的reads:
    1. 如果一对read,一条比对到了参考基因组,另一条没比对上,那么没有比对上的read的RNAME和POS应该和比对上的那一条一样;
    2. 如果一个模板所有的片段都没有比对上,它们的RNAME应该被设置为*,POS被设为0;
    3. 如果POS加上CIGAR中的M=XDN长度的和超过了头部分中RNAME对应的SN在@SQ的LN字段指定的长度,那么这个比对行(alignment)应该是没有比对上的(unmapped);
    4. Unmapped reads should be stored in the orientation in which they came off the sequencing machine and have their reverse flag bit (0x10) correspondingly unset.没比对上的reads应该按照从测序以上产生时的方向存放,其反向标志位(0x10)置0;
  5. 多重比对:
    1. 如果一个片段出现在多行中形成多重比对,那么只有一条记录可以在secondary alignment标志位(0x100)置0,RNEXT和PNEXT指向模板中配对read的primary行;
    2. secondary alignments的SEQ和QUAL应该被设置为*,以便减少文件大小。
  6. 可选标志:
    1. 如果模板有超过两个片段,应该有TC标志;
    2. 要有NM标志;
  7. Annotation dummy reads: These have SEQ set to *, FLAG bits 0x100 and 0x200 set (secondary and filtered), and a CT tag.注释哑reads(dummy reads):SEQ被设置为*,FLAG的0x100位(secondary)和0x200位(filtered)被置1,且有CT tag的reads:
    1. 如果想在CT标签中存放任意文本,使用关键值Note(大写字母N)来匹配GFF3;
    2. 多片段注释(例如含有内含子的基因)在SAM中应该用多行描述(就行多片段read一样)。对于有明确的生物学方向的片段(例如一个基因),第一个片段(对应FLAG位0x40)被用于第一部分(例如基因的5‘端),所以一个位置像是拼接起来的GenBank条目(join(85052..85354, 85441..85621, 86097..86284))在SAM中会有3行,3行共享同一个QNAME:
技术分享
    1. 如果把GFF3转为SAM,保留CT标志中第九列所有键、值,除了用于QNAME的独一无二的ID。GFF3第一列(seqid)、第四列(start)、第五列(end)使用SAM的RNAME、POS、CIGAR编码。GFF3中的第三列(type)和第七列(strand)储存在CT标签中。剩下的GFF3中的第二列(source)、第六列(score)和第八列(phase)以FSource、FScore和FPhase为键的储存在CT标签中(GFF3中的键只能使用大写字母,所以这些名字都避开了与GFF3中的键的冲突)。(基因的)断裂位置的特点在GFF3中使用多行描述,RNEXT和PNEXT列适当填充,与SAM中的多片段哑reads类似。在环形基因组中,有些reads会包含基因组的起点,对于这种情况,SAM/BAM中没有统一的规定,因此GFF3中包含参考序列起点的行在SAM中必须背拆开成两部分。
3. SAM中描述组装序列的方法
略。
4. BAM格式说明
略。
5. 加索引的BAM
略。




以上是关于sam文件格式说明的主要内容,如果未能解决你的问题,请参考以下文章

bam / sam格式说明

bwa比对软件的使用以及其结果文件(sam)格式说明

SAM文件格式介绍

bam文件格式说明

常见格式——sam

sam格式的简单了解