samtools flags 的含义
对于双端比对的数据,生成的BAM文件中,R1端序列和R2端序列的标识符是一样的,之前一直不知道如何根据bam文件区分哪条序列是R1端,哪条序列是R2端,昨天仔细研究了一下,原来代表R1端和R2端的信息都存储在flag中,即bam文件的第二列;
在bam文件格式中定义了各种flag代表的意思
/*! @abstract the read is paired in sequencing, no matter whether it is mapped in a pair */
#define BAM_FPAIRED 1
/*! @abstract the read is mapped in a proper pair */
#define BAM_FPROPER_PAIR 2
/*! @abstract the read itself is unmapped; conflictive with BAM_FPROPER_PAIR */
#define BAM_FUNMAP 4
/*! @abstract the mate is unmapped */
#define BAM_FMUNMAP 8
/*! @abstract the read is mapped to the reverse strand */
#define BAM_FREVERSE 16
/*! @abstract the mate is mapped to the reverse strand */
#define BAM_FMREVERSE 32
/*! @abstract this is read1 */
#define BAM_FREAD1 64
/*! @abstract this is read2 */
#define BAM_FREAD2 128
/*! @abstract not primary alignment */
#define BAM_FSECONDARY 256
/*! @abstract QC failure */
#define BAM_FQCFAIL 512
/*! @abstract optical or PCR duplicate */
#define BAM_FDUP 1024
/*! @abstract supplementary alignment */
#define BAM_FSUPPLEMENTARY 2048
1 : 代表这个序列采用的是PE双端测序
2: 代表这个序列和参考序列完全匹配,没有插入缺失
4: 代表这个序列没有mapping到参考序列上
8: 代表这个序列的另一端序列没有比对到参考序列上,比如这条序列是R1,它对应的R2端序列没有比对到参考序列上
16:代表这个序列比对到参考序列的负链上
32 :代表这个序列对应的另一端序列比对到参考序列的负链上
64 : 代表这个序列是R1端序列, read1;
128 : 代表这个序列是R2端序列,read2;
256: 代表这个序列不是主要的比对,一条序列可能比对到参考序列的多个位置,只有一个是首要的比对位置,其他都是次要的
512: 代表这个序列在QC时失败了,被过滤不掉了(# 这个标签不常用)
1024: 代表这个序列是PCR重复序列(#这个标签不常用)
2048: 代表这个序列是补充的比对(#这个标签具体什么意思,没搞清楚,但是不常用)
上面的这几个标签都是2的n次方,这样的数列有一个特点,就是随机挑选其中的几个,它们的和是唯一的,比如
65 只能是1 和 64 组成,代表这个序列是双端测序,而且是read1
所以在bam文件中的第二列,即flag列的值代表这条序列符合上述所有条件的值的和,所以根据这个flag我们可以确定这条序列究竟是read1 还是read2
在新版的samtools中提供了一个flags 功能,可以查看flag 代表的含义,比如下面的sam文件
NB500986::HGJ2VBGXX:::: chr1 131M = TCTGACTTCCAGCAACTGCTGGCCTGTGCCAGGGTGCAAGCTGAG
CACTGGAGTGGAGTTTTCCTGTGGAGAGGAGCCATGCCTAGAGTGGGATGGGCCATTGTTCATCTTCTGGCCCCTGTTGTCTGCAT AAAAAEEEEEEEEEEEEEEEEEEEEEEEEEEAEEEEEEEEEEEAEEEEAEEEEEEEEEEEEEEEEEEEE
EEEEEEEEEEEEEEEEEEEEEEEEE/EE/EE<EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE AS:i: XN:i: XM:i: XO:i: XG:i: NM:i: MD:Z: YT:Z:UU XS:A:+ NH:i: CC:Z:
chr15 CP:i: HI:i:
NB500986::HGJ2VBGXX:::: chr1 128M = - GACTTCCAGCAACTGCTGGCCTGTGCCAGGGTGCAAGCTGAGCAC
TGGAGTGGAGTTTTCCTGTGGAGAGGAGCCATGCCTAGAGTGGGATGGGCCATTGTTCATCTTCTGGCCCCTGTTGTCTGCAT EEEEEEEEEEEEEEEEEEEEEEEEEEAEEEEEEE<AEEEEEEEEEEEAEEEAEEEEEEEEEEEAEEEEE
EEEEEEEEEEEEEEEEEEEEEAAEEAEEEEEAEEEEEEEEEE/EEEEEEEEEEEAAAAA AS:i: XN:i: XM:i: XO:i: XG:i: NM:i: MD:Z: YT:Z:UU XS:A:+ NH:i: CC:Z:
chr15 CP:i: HI:i:
一共有两个序列,他们的标识符是一样的,那怎么区分那个是R1端,那个是R2端呢?
直接根据flag 查看
samtools flags
0x1a3 PAIRED,PROPER_PAIR,MREVERSE,READ2,SECONDARY
samtools flags
0x153 PAIRED,PROPER_PAIR,REVERSE,READ1,SECONDARY
根据上面给结果可以看出,flag为419代表PAIREED(1), PROPER_PAIR(2),MREVRSE(32),READ2(128),SECONDARY(256),其中
PAIRED 代表这条序列采用双端测序, 其值为1;
PROPER_PAIR 代表这条序列完全匹配, 其值为2;
MREVRSE 代表这条序列对应的另一端序列比对到参考序列的负链上,其值为32;
READ2 代表这条序列是R2端序列,其值为128
SECONDARY 代表这条序列不是primary alignment, 其值为256
1 + 2 +32 +128 + 256 = 419
所以419对应的序列是R2端序列, 同理,339代表的序列是R1段序列
搞清楚了序列究竟是R1端还是R2端之后,还有一点值得注意的地方,samtools 还提供了一个bam2fq 的功能,根据bam文件抽取比对时采用的fastq序列
在bam文件中,第10列代表的是序列,第11列代表的是序列的质量,根据第二列的flag还可以确定序列是R1还是R2,
但是当序列本身比对到参考序列的负链时,即flag 包含16时,bam文件中记录的序列是原始序列的反向互补序列,而且质量值也是反向的,所以根据这样的序列还原时要小心一点,以上面flag为339的序列为例
因为339包含了REVERSE,所以对应的序列应该是第10列序列的反向互补序列,碱基质量值为第11列的反向序列,
搞清楚了这些,对于bam文件的理解又更清晰了一些。
samtools flags 的含义的更多相关文章
- 动手学习TCP:总结和索引
TCP是一个十分复杂的协议,通过前面几篇文章只涉及了TCP协议中一些基本的概念. 虽然说都是一些TCP最基本的概念,但是试验过程中一直在踩坑,例如:TCP flag设置错误,seq.ack号没有计算正 ...
- linux cpuInfo
转自:http://blog.csdn.net/lgstudyvc/article/details/7889364 /proc/cpuinfo文件分析 在Linux系统中,提供了proc文件系统显 ...
- [转]linux /proc/cpuinfo 文件分析
在Linux系统中,提供了proc文件系统显示系统的软硬件信息.如果想了解系统中CPU的提供商和相关配置信息,则可以通过/proc/cpuinfo文件得到.本文章针对该文件进行简单的总结. 基于不同指 ...
- 转:SDL2源代码分析
1:初始化(SDL_Init()) SDL简介 有关SDL的简介在<最简单的视音频播放示例7:SDL2播放RGB/YUV>以及<最简单的视音频播放示例9:SDL2播放PCM>中 ...
- /proc/cpuinfo zz
/proc/cpuinfo文件分析 在Linux系统中,提供了proc文件系统显示系统的软硬件信息.如果想了解系统中CPU的提供商和相关配置信息,则可以通过/proc/cpuinfo文件得到.本文章针 ...
- 最简单的视音频播放示例7:SDL2播放RGB/YUV
本文记录SDL播放视频的技术.在这里使用的版本是SDL2.实际上SDL本身并不提供视音频播放的功能,它只是封装了视音频播放的底层API.在Windows平台下,SDL封装了Direct3D这类的API ...
- Oracle alter index rebuild 与 ORA-08104 说明
在ITPUB 论坛上看到的一个帖子,很不错.根据论坛的帖子重做整理了一下. 原文链接如下: alter index rebuild online引发的血案 http://www.itpub.net/t ...
- HTTP POST请求的Apache Rewrite规则设置
最近自测后端模块时有个业务需求需要利用WebServer(我用的是Apache)将HTTP POST请求转发至后端C模块,后端处理后返回2进制加密数据.http post请求的url格式为: ...
- SDL2源代码分析3:渲染器(SDL_Renderer)
===================================================== SDL源代码分析系列文章列表: SDL2源代码分析1:初始化(SDL_Init()) SDL ...
随机推荐
- TinyXml 操作XML 常用操作
源代码下载:http://sourceforge.net/projects/tinyxml/files/ 如下是一个XML片段: <Persons> <Perso ...
- 在verilog中调用VHDL模块
习惯了自己发现一些小问题,既然发现了,就记下来吧,不然又要忘了,这是多么悲痛的领悟. 今天在用vivado进行块设计时所生成的顶层模块居然是用VHDL语言描述的,这时郁闷了,表示只看过VHDL语法但没 ...
- AAA含义图解
来源: <FreeRADIUS Beginner's Guide> 这本书 1,认证 2,授权 3,审计
- 对Android的恶意吐槽(勿看,有毒)
CSDN博客:http://blog.csdn.net/niu_gao 我觉得android系统中有一个特恶心人的大败笔.就是这个大败笔造成了android系统的卡卡卡不停. 这个大败笔就是对acti ...
- angular学习笔记(九)-css类和样式1
本篇主要介绍通过数据绑定来给元素添加特定的类名,从而应用特定的样式 从一个最基本的例子来看: <!DOCTYPE html> <html ng-app> <head> ...
- java+ajax实例
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding= ...
- iOS键盘类型以及样式展示
UIKeyboardTypeDefault: UIKeyboardTypeASCIICapable: UIKeyboardTypeNumbersAndPunctuation: UIKeyboardTy ...
- dubbo2.5.3注解版
1.环境 在机器192.168.0.4机器上安装了zookeeper,用于dubbo的服务注册,安装教程在另外一篇博客 http://www.cnblogs.com/520playboy/p ...
- pku1204 Word Puzzles AC自动机 二维字符串矩阵8个方向找模式串的起点坐标以及方向 挺好的!
/** 题目:pku1204 Word Puzzles 链接:http://poj.org/problem?id=1204 题意:给定一个L C(C <= 1000, L <= 1000) ...
- 奇妙的go语言(面向对象)
[ 声明:版权全部.欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 有过C++语言学习经历的朋友都知道.面向对象主要包含了三个基本特征:封装.继承和多态.封装,就 ...