17、SAM文件格式说明(转载迷宫中的将军)
@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 | 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 | 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;读取过程中,这些位都会被忽略;
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长度。
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]+)?)+ | 整数或数字列表 |
- 头部分:
- 要有@HD行,@HD行中必须有SO标签或GO标签之一,但不能二者同时有;
- reads被比对(mapped)后,要有@SQ行;
- RG标签无论在比对部分的什么地方出现,在头部分中都应该有一个对应的@RG行,该@RG行中有对应的ID标签;
- PG标签无论在比对部分的什么地方出现,在头部分中都应该有一个对应的@PG行,该@PG行中有对应的ID标签;
- 相邻的CIGAR operations应该不同;
- 比对质量不能超过255;
- 没比对上的reads:
- 如果一对read,一条比对到了参考基因组,另一条没比对上,那么没有比对上的read的RNAME和POS应该和比对上的那一条一样;
- 如果一个模板所有的片段都没有比对上,它们的RNAME应该被设置为*,POS被设为0;
- 如果POS加上CIGAR中的M=XDN长度的和超过了头部分中RNAME对应的SN在@SQ的LN字段指定的长度,那么这个比对行(alignment)应该是没有比对上的(unmapped);
- 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;
- 多重比对:
- 如果一个片段出现在多行中形成多重比对,那么只有一条记录可以在secondary alignment标志位(0x100)置0,RNEXT和PNEXT指向模板中配对read的primary行;
- secondary alignments的SEQ和QUAL应该被设置为*,以便减少文件大小。
- 可选标志:
- 如果模板有超过两个片段,应该有TC标志;
- 要有NM标志;
- 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:
- 如果想在CT标签中存放任意文本,使用关键值Note(大写字母N)来匹配GFF3;
- 多片段注释(例如含有内含子的基因)在SAM中应该用多行描述(就行多片段read一样)。对于有明确的生物学方向的片段(例如一个基因),第一个片段(对应FLAG位0x40)被用于第一部分(例如基因的5'端),所以一个位置像是拼接起来的GenBank条目(join(85052..85354, 85441..85621, 86097..86284))在SAM中会有3行,3行共享同一个QNAME:
- 如果把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中必须背拆开成两部分。
17、SAM文件格式说明(转载迷宫中的将军)的更多相关文章
- 转载 C#中敏捷开发规范
转载原地址 http://www.cnblogs.com/weixing/archive/2012/03/05/2380492.html 1.命名规则和风格 Naming Conventions an ...
- HDU1728 从迷宫中逃脱 【方向BFS】
从迷宫中逃脱 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- 如何快速转载CSDN中的博客
看到一篇<如何快速转载CSDN中的博客>,介绍通过检查元素→复制html来实现快速转载博客的方法.不过,不知道是我没有领会其精神还是其他原因,测试结果为失败.
- [转载]Java中继承、装饰者模式和代理模式的区别
[转载]Java中继承.装饰者模式和代理模式的区别 这是我在学Java Web时穿插学习Java设计模式的笔记 我就不转载原文了,直接指路好了: 装饰者模式和继承的区别: https://blog.c ...
- [转载]PyTorch中permute的用法
[转载]PyTorch中permute的用法 来源:https://blog.csdn.net/york1996/article/details/81876886 permute(dims) 将ten ...
- [转载]java中import作用详解
[转载]java中import作用详解 来源: https://blog.csdn.net/qq_25665807/article/details/74747868 这篇博客讲的真的很清楚,这个作者很 ...
- [转载]Pytorch中nn.Linear module的理解
[转载]Pytorch中nn.Linear module的理解 本文转载并援引全文纯粹是为了构建和分类自己的知识,方便自己未来的查找,没啥其他意思. 这个模块要实现的公式是:y=xAT+*b 来源:h ...
- [转载]Java中异常的捕获顺序(多个catch)
http://blog.sina.com.cn/s/blog_6b022bc60101cdbv.html [转载]Java中异常的捕获顺序(多个catch) (2012-11-05 09:47:28) ...
- 转载JQuery 中empty, remove 和 detach的区别
转载 http://www.cnblogs.com/lisongy/p/4109420.html .empty() 描述: 从DOM中移除集合中匹配元素的所有子节点. 这个方法不接受任何参数. 这个 ...
随机推荐
- NCL windows系统安装
http://www.doc88.com/p-192266283281.html NCL在Linux下的安装非常容易,只需下载适当版本的文件,设置好环境变量即可使用.NCL在Windows下的安装则要 ...
- leetcode 889. Spiral Matrix III
On a 2 dimensional grid with R rows and C columns, we start at (r0, c0) facing east. Here, the north ...
- Python 3 接口与归一化设计
一.接口与归一化设计: 1.归一化让使用者无需关心对象的类是什么,只需要知道这些对象都具备某些功能就可以了,这极大地降低了使用者的使用难度. 2.归一化使得高层的外部使用者可以不加区分的处理所有接口兼 ...
- 前端绘图方式Canvas和SVG的区别
Canvas和SVG是html5中支持2种可视化技术,都是可以在画布上绘制图形和放入图片.下面来介绍和分析一下他们. 一.Canvas 和 SVG 简介 1.什么是Canvas? Canvas 是H5 ...
- Qt窗口屏幕居中显示
转自--> http://blog.chinaunix.net/uid-20718335-id-364404.html 窗口的屏幕居中显示问题,在各开发工具中原理相同,首先使用特定的方法得到显示 ...
- HDU 4055 Number String:前缀和优化dp【增长趋势——处理重复选数】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4055 题意: 给你一个由'I', 'D', '?'组成的字符串,长度为n,代表了一个1~n+1的排列中 ...
- css3 多列布局使用
css3的出现,解决了不少前端的问题,比如动画,圆角等: 这里总结一下css3 的多列布局: w3c上给出了很多属性: 我们一般用到column-count.column-gap.column-wid ...
- 分享知识-快乐自己:Liunx-大数据(Hadoop)初始化环境搭建
大数据初始化环境搭建: 一):大数据(hadoop)初始化环境搭建 二):大数据(hadoop)环境搭建 三):运行wordcount案例 四):揭秘HDFS 五):揭秘MapReduce 六):揭秘 ...
- python基础-条件语句if
if语句: if 判断条件: 执行语句 else: 执行语句 flag = Falsename = 'huipaodexiong'if name == 'python': flag = True ...
- python习题-替换敏感词
#3.有一个文件,里面有一些敏感词汇,如下,如果输入这些词,就用**代替,#然后输出,例如输入今天没吃饭,碰到一个傻逼,原来那个sb是小明.输出今天没吃饭,碰到一个**,原来那个**是小明.#需求分析 ...