sam文件格式简介

简介
文件后缀名:.sam


bwa、Bowtie2是现下最流行的短序列比对软件,SAM(Sequence Alignment/Map)格式是一种通用的比对格式,用来存储reads到参考序列的比对信息。
SAM是一种序列比对格式标准,由sanger制定,是以TAB为分割符的文本格式。主要应用于测序序列mapping到基因组上的结果表示,当然也可以表示任意的多重比对结果。
不同的软件,不同的时期,不同的研究方向,都会创建一种或者多种格式标准,当然根据当时的需要,创建符合需求的标准,也是最容易的事情,而反过来想要真正的理解标准,也必须理解为什么要创建这样的标准,解决什么样的需要。我前面的有篇文章已经对于现有的多重比对的格式进行总结,但其更多的站在比较基因组学的角度。当我们去了解sam标准格式是什么的时候,就要思考既然以及有了这么多得标准,为什么还要定义SAM标准,当然拿所有的格式进行比较也并非易事,但是简单的对比,就可以了解其中一二,比如aln格式,是比对视图化的展示,存储的信息不够结构化,无法方便的作为另外程序的输入;表示信息的有限性,如果100个多重比对序列放到一个文件中,查看维护就会非常困难;还有些格式标准挺强大,但是太繁琐,同时不够灵活。那么反过来就是SAM格式的优点,那么SAM如何做到这一点的呢?


SAM要处理好的问题:


1. 非常多序列(read),mapping到多个参考基因组(reference)上;
2. 同一条序列,分多段(segment)比对到参考基因组上;
3. 无限量的,结构化信息表示,包括错配、删除、插入等比对信息;
行、列、注释说明
SAM分为两部分,注释信息(header section)和比对结果部分(alignment section)。
行:除注释外,每一行是一个read
注释信息可有可无,都是以@开头,用不同的tag表示不同的信息,主要有:


1.@HD,说明符合标准的版本、对比序列的排列顺序;
2.@SQ,参考序列说明;
3.@RG,比对上的序列(read)说明;
4.@PG,使用的程序说明;
5.@CO,任意的说明信息。
比对结果部分(alignment section),每一行表示一个片段(segment)的比对信息,包括11个必须的字段(mandatory fields)和一个可选的字段,字段之间用tag分割。必须的字段有11个,顺序固定,不可用时,根据字段定义,可以为’0’或者’*’,这是11个字段包括:


1. QNAME    比对片段的(template)的编号;read name,read的名字通常包括测序平台等信息
# eg.ILLUMINA-379DBF:1:1:3445:946#0/1
2. FLAG     位标识,template mapping情况的数字表示,每一个数字代表一种比对情况,这里的值是符合情况的数字相加总和;flag取值见备注(3)
# eg.16
3. RNAME    参考序列的编号,如果注释中对SQ-SN进行了定义,这里必须和其保持一致,另外对于没有mapping上的序列,这里是'*';
# eg.chr1
4. POS      比对上的位置,注意是从1开始计数,没有比对上,此处为0;
# eg.36576599
5. MAPQ     mappint的质量,,比对的质量分数,越高说明该read比对到参考基因组上的位置越唯一;
# eg.42
6. CIGAR    简要比对信息表达式(Compact Idiosyncratic Gapped Alignment Report),其以参考序列为基础,使用数字加字母表示比对结果,match/mismatch、insertion、deletion 对应字母 M、I、D。比如3S6M1P1I4M,前三个碱基被剪切去除了,然后6个比对上了,然后打开了一个缺口,有一个碱基插入,最后是4个比对上了,是按照顺序的;
# eg.36M 表示36个碱基在比对时完全匹配


###注:第七列到第九列是mate(备注1)的信息,若是单末端测序这几列均无意义###


7. RNEXT    下一个片段(即mate)比对上的参考序列的编号,没有另外的片段,这里是'*',同一个片段,用'=';
# eg.*
8. PNEXT    下一个片段(即mate)比对到参考序列上的第一个碱基位置,若无mate,则为0;
# eg.0
9. TLEN     Template的长度,最左边得为正,最右边的为负,中间的不用定义正负,不分区段(single-segment)的比对上,或者不可用时,此处为0(ISIZE,Inferred fragment size.详见Illumina中paired end sequencing 和 mate pair sequencing,是负数,推测应该是两条read之间的间隔(待查证),若无mate则为0);
# eg.0
10. SEQ     序列片段的序列信息,如果不存储此类信息,此处为'*',注意CIGAR中M/I/S/=/X对应数字的和要等于序列长度;
# eg.CGTTTCTGTGGGTGATGGGCCTGAGGGGCGTTCTCN
11. QUAL    序列的质量信息,read质量的ASCII编码。,格式同FASTQ一样。
# eg.PY[[YY_______________QQQQbILKIGEFGKB
12.第十二列之后:Optional fields,以tab建分割。详见备注(2)
# eg.AS:i:-1 XN:i:0 XM:i:1 XO:i:0 XG:i:0 NM:i:1 MD:Z:35T0 YT:Z:UU
可选字段(optional fields),格式如:TAG:TYPE:VALUE,其中TAG有两个大写字母组成,每个TAG代表一类信息,每一行一个TAG只能出现一次,TYPE表示TAG对应值的类型,可以是字符串、整数、字节、数组等。


要注意的几个概念,以及与之对应的模型:


·   reference
·   read
·   segment
·   template(参考序列和比对上的序列共同组成的序列为template)
·   alignment

·   seq


扩展
备注
(1)mate,在Illuminated中有两种测序技术:paired end sequencing,mate pair sequencing。这两种测序都是测的一个片段的两端,这两端产生的reads被称为mate1,mate2,单末端测序则无mate。


(2)Optional fields:


AS:i:<N>
    Alignment score.可以为负的,在local下可以为正的。 只有当Align≥1 time才出现
XS:i:<N>
    Alignment score for second-best alignment.  当Align>1 time出现
YS:i:<N>
    Alignment score for opposite mate in the paired-end alignment.   当该read是双末端测序中的一条时出现
XN:i:<N>
    The number of ambiguous bases in the reference covering this alignment.(推测是指不知道错配发生在哪个位置,推测是针对于插入和缺失,待查证)
XM:i:<N>
    错配碱基的数目
XO:i:<N>
    The number of gap opens(针对于比对中的插入和缺失)
XG:i:<N>
    The number of gap extensions(针对于比对中的插入和缺失)
NM:i:<N>
    The edit distance(read string转换成reference string需要的最少核苷酸的edits:插入/缺失/替换)
YF:Z:<S>
    该reads被过滤掉的原因。可能为LN(错配数太多,待查证)、NS(read中包含N或者.)、SC(match bonus低于设定的阈值)、QC(failing quality control,待证)
YT:Z:<S>
    值为UU表示不是pair中一部分(单末端?)、CP(是pair且可以完美匹配)
    DP(是pair但不能很好的匹配)、UP(是pair但是无法比对到参考序列上)
MD:Z:<S>
    比对上的错配碱基的字符串表示
(3)flag取值


0:比对到参考序列的正链上(待求证)
1:是paired-end或mate pair中的一条
2:双末端比对的一条
4:没有比对到参考序列上
8:是paired-end或mate pair中的一条,且无法比对到参考序列上
16:比对到参考序列的负链上
32:双末端reads的另一条(mate)比对到参考序列的负链上
64:这条read是mate 1
128:这条read是mate 2
参考:
SAM的定义:
SAM1.pdf
samtools:
samtools
发表的文献:
http://www.ncbi.nlm.nih.gov/pmc/articles/PMC2723002/
CIGAR的概念
http://asia.ensembl.org/common/Help/Glossary?db=core
一篇博客对于sam的解释
博耘生物
SAM格式-Bowtie2
http://davetang.org/wiki/tiki-index.php?page=SAM
perl模块
http://search.cpan.org/~lds/Bio-SamTools/lib/Bio/DB/Sam.pm

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SAM(Sequence Alignment/Map format)文件是一种常用的存储比对结果的格式。读取SAM文件可以使用多种编程语言和工具,以下是一些常用方法: 1. 使用SAMtools工具包读取SAM文件 SAMtools是一个常用的处理SAM和BAM格式文件的工具包,可以使用其中的samtools view命令来读取SAM文件,例如: ``` samtools view -S file.sam ``` 其中,"-S"选项表示输入文件SAM格式。 2. 使用Python中的pysam库读取SAM文件 pysam是一个Python库,提供了读写SAM/BAM/CRAM格式文件的功能。以下是使用pysam读取SAM文件的示例代码: ```python import pysam # 打开SAM文件 samfile = pysam.AlignmentFile("file.sam", "r") # 遍历SAM文件中的每个比对结果 for read in samfile: # 处理每个比对结果 print(read) # 关闭SAM文件 samfile.close() ``` 3. 使用Java中的SAMtools API读取SAM文件 SAMtools也提供了Java API,可以使用其中的SAMFileReader类来读取SAM文件,例如: ```java import java.io.File; import net.sf.samtools.*; public class ReadSAMFile { public static void main(String[] args) { // 打开SAM文件 SAMFileReader samReader = new SAMFileReader(new File("file.sam")); // 遍历SAM文件中的每个比对结果 for (SAMRecord read : samReader) { // 处理每个比对结果 System.out.println(read.getSAMString()); } // 关闭SAM文件 samReader.close(); } } ``` 以上是几种常用的读取SAM文件的方法,可以根据自己的需要选择合适的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值