SAM/BAM文件处理
当测序得到的fastq文件map到基因组之后,我们通常会得到一个sam或者bam为扩展名的文件。SAM的全称是sequence alignment/map format。而BAM就是SAM的二进制文件(B取自binary)。 那么SAM文件的格式是什么样子的呢?如果你想真实地了解SAM文件,可以查看它的说明文档。SAM由头文件和map结果组成。头文件由一行行以@起始的注释构成。而map结果是类似下面的东西:
HWI-ST1001:137:C12FPACXX:7:1115:14131:66670 0 chr1 12805 1 42M4I5M * 0 0 TTGGATGCCCCTCCACACCCTCTTGATCTTCCCTGTGATGTCACCAATATG CCCFFFFFHHGHHJJJJJHJJJJJJJJJJJJJJJJIJJJJJJJJJJJJIJJ AS:i:-28 XN:i:0 XM:i:2 XO:i:1XG:i:4 NM:i:6 MD:Z:2C41C2 YT:Z:UU NH:i:3 CC:Z:chr15 CP:i:102518319 XS:A:+ HI:i:0
HWI-ST1001:137:C12FPACXX:7:2313:17391:30032 272 chr1 13494 1 51M * 0 0 ACTGCCTGGCGCTGTGCCCTTCCTTTGCTCTGCCCGCTGGAGACAGTGTTT CFFFFHHJJJJIJJJJIJJJJJJJJJJJJJJJJJJJJJHHHHFA+FFFC@B AS:i:-3 XN:i:0 XM:i:1 XO:i:0 XG:i:0NM:i:1 MD:Z:44G6 YT:Z:UU XS:A:+ NH:i:3 CC:Z:chr15 CP:i:102517626 HI:i:0
HWI-ST1001:137:C12FPACXX:7:1109:17518:53305 16 chr1 13528 1 51M * 0 0 CGCTGGAGCCGGTGTTTGTCATGGGCCTGGGCTGCAGGGATCCTGCTACAA #############AB=?:*B?;A?<2+233++;A+A2+<7==@7,A<A<=> AS:i:-5 XN:i:0 XM:i:2 XO:i:0 XG:i:0NM:i:2 MD:Z:8A21T20 YT:Z:UU XS:A:+ NH:i:4 CC:Z:chr15 CP:i:102517592 HI:i:0
看上去很类似fastq文件,它也有read名称,序列,质量等信息,但是又不完全一样。首先,每个read只占一行,只是它被tab分成了很多列,一共有12列,分别记录了:
1. read名称
2. SAM标记
3. chromosome
4. 5′端起始位置
5. MAPQ(mapping quality,描述比对的质量,数字越大,特异性越高)
6. CIGAR字串,记录插入,删除,错配以及splice junctions(后剪切拼接的接头)
7. mate名称,记录mate pair信息
8. mate的位置
9. 模板的长度
10. read序列
11. read质量
12. 程序用标记
显然,其中chromosome至CIGAR的信息都是非常重要的。但是这些对我们不重要,我们只需要了解SAM/BAM文件是什么,就可以了。重要的是如果进行下游的操作。 要操作SAM/BAM文件,首先需要安装samtools。它的安装过程和所有的linux/unix程序一样,都是经过make之后生成可执行程序,然后把它的路径告知系统,或者放在系统可以找到的位置就可以了。 比如:
tar zxvf samtools-0.1.18.tar.bz2
cd samtools-0.1.18/
make
samtoolpath=`pwd`
PATH=PATH:$samtoolpath
然后就可以按照samtools主页上介绍的工具进行各种操作了。我们最常见的几步操作比如 0. SAM,BAM转换
samtools view -h file.bam > file.sam
samtools view -b -S file.sam > file.bam
1. sorting BAM文件。大多数下游程序都要求BAM文件是被排过序的。
samtools sort file.bam outputPrefix
2. 创建BAM index。这也是被大多数下游程序所要求。
samtools index sorted.bam
3. index模板基因组。这也是被大多数下游程序所要求。
samtools faidx Homo_sapiens_assembly19.fasta
在很多时候,我们还会看到一种扩展名为BED的mapping文件。其具体格式也是几经变化,但是现在以UCSC的描述为准。从BAM文件转换成BED文件,我们需要安装BEDtools。下载安装就不多说了。示例一个如何从BAM文件转换成BED文件的命令:
bamToBed -i reads.bam > reads.bed
更多的具体内容可以参见其说明文档。 当然,还有很多种格式来记录mapping的结果,大多数都收录在UCSC的帮助文档中。比如上次有人问及的.bw是什么文件(bigWig文件)之类的,都可以在那里找到答案。 上次谈及fastq文件时,有讲过其质量评估的问题,那么在mapping之后,如何对mapping的结果进行评估呢? 最简单的,就是通过samtools来评估mapping质量了。
samtools idxstats aln.sorted.bam
注意,这一步之前需要经过sort和index。结果会显示:
chr1 195471971 6112404 0
chr10 130694993 3933316 0
chr11 122082543 6550325 0
chr12 120129022 3876527 0
chr13 120421639 5511799 0
chr14 124902244 3949332 0
chr15 104043685 3872649 0
chr16 98207768 6038669 0
chr17 94987271 13544866 0
chr18 90702639 4739331 0
chr19 61431566 2706779 0
chr2 182113224 8517357 0
chr3 160039680 5647950 0
chr4 156508116 4880584 0
chr5 151834684 6134814 0
chr6 149736546 7955095 0
chr7 145441459 5463859 0
chr8 129401213 5216734 0
chr9 124595110 7122219 0
chrM 16299 1091260 0
chrX 171031299 3248378 0
chrY 91744698 259078 0
* 0 0 0
其中第一列是染色体名称,第二列是序列长度,第三列是mapped reads数,第四列是unmapped reads数。 如果是RNAseq,我们可以使用broad institute的RNA-SeQC来得到更加完整的报告。下载到文件之后,也许需要安装BWA来获取更精准的结果,但是如果不安装的话,也可以进行分析。一般来说,这一步不需要特别精准的结果,所以我很少使用BWA选项。下载的文件如果是.zip结尾的,直接把它改写成.jar就可以运行了。 在它的主页上下载所需要的Example RNA-seq Data。下载结束之后,该解压的解压缩。接下来运行:
samtools index example/ThousandReads.bam
samtools faidx example/Homo_sapiens_assembly19.fasta
java -Xmx2048m -jar RNA-SeQC_v1.1.7.jar -n 1000 -s "TestId|example/ThousandReads.bam|TestDesc" -t example/gencode.v7.annotation_goodContig.gtf -r example/Homo_sapiens_assembly19.fasta -o ./testReport/ -start gc -gc example/gencode.v7.gc.txt
以上的参数只有一个与其说明文档不一样的地方就是使用了-Xmx2048m来指定java虚拟机的内存大小为2G。如果遇到java.lang.OutOfMemoryError,还可以指定得再大些。
当然如果是自己的文件的话,还需要多两步:
1.BAM,reference及GTF文件的基因组名称必须一致。
2.需要使用picard工具包中的CreateSequenceDictionary来构建一个dictionary文件。
原文来自:http://pgfe.umassmed.edu/ou/archives/3050
生物信息学交流论坛 http://bbs.bbioo.com/forum-76-1.html
SAM/BAM文件处理的更多相关文章
- 文件格式——Sam&bam文件
Sam&bam文件 SAM是一种序列比对格式标准, 由sanger制定,是以TAB为分割符的文本格式.主要应用于测序序列mapping到基因组上的结果表示,当然也可以表示任意的多重比对结果.当 ...
- SAMTOOLS使用 SAM BAM文件处理
[怪毛匠子 整理] samtools学习及使用范例,以及官方文档详解 #第一步:把sam文件转换成bam文件,我们得到map.bam文件 system"samtools view -bS m ...
- sam/bam格式
1)Sam (Sequence Alignment/Map) ------------------------------------------------- 1) SAM 文件产生背景 随着Ill ...
- Edit Distance编辑距离(NM tag)- sam/bam格式解读进阶
sam格式很精炼,几乎包含了比对的所有信息,我们平常用到的信息很少,但特殊情况下,我们会用到一些较为生僻的信息,关于这些信息sam官方文档的介绍比较精简,直接看估计很难看懂. 今天要介绍的是如何通过b ...
- pysam - 多种格式基因组数据(sam/bam/vcf/bcf/cram/…)读写与处理模块(python)
在开发基因组相关流程或工具时,经常需要读取.处理和创建bam.vcf.bcf文件.目前已经有一些主流的处理此类格式文件的工具,如samtools.picard.vcftools.bcftools,但此 ...
- C++使用htslib库读入和写出bam文件
有时候我们需要使用C++处理bam文件,比如取出read1或者read2等符合特定条件的序列,根据cigar值对序列指定位置的碱基进行统计或者对序列进行处理并输出等,这时我们可以使用htslib库 ...
- pysam - 多种格式基因组数据(sam/bam/vcf/bcf/cram/…)读写与处理模块(python)--转载
pysam 模块介绍!!!! http://pysam.readthedocs.io/en/latest/index.html 在开发基因组相关流程或工具时,经常需要读取.处理和创建bam.vcf.b ...
- 解读sam格式文件
1,SAM文件格式介绍 SAM(The Sequence Alignment / Map format)格式,即序列比对文件的格式,详细介绍文档:http://samtools.github.io/h ...
- Pysam 处理bam文件
Pysam可用来处理bam文件 安装: 用 pip 或者 conda即可 使用: Pysam的函数有很多,主要的读取函数有: AlignmentFile:读取BAM/CRAM/SAM文件 Varian ...
随机推荐
- NSBundle
属性: .使用类方法创建一个NSBundler对象 + (NSBundle *)mainBundle; eg:[NSBundle mailBundle]; .使用路径获取一个NSBundle 对象,这 ...
- 在线文档预览方案-office web apps续篇
上一篇在线文档预览方案-office web apps发布后收到很多网友的留言提问,所以准备再写一篇,一来介绍一下域控服务器安装,总结一下大家问的多的问题,二来宣传预览服务安装与技术支持的事情. 阅读 ...
- mvc SelectList selected失效的解决方法
ViewBag.QuestionnaireType = new SelectList(questionCollectionTypeList, "CodeID", "Cod ...
- 通过实战理解C语言精要——函数篇
前言 本篇博客是对C语言函数部分的重点内容和细枝末节通过实战得到的经验的总结精炼,不涵盖C语言函数的全部内容,所有提炼内容均来自提炼与实战,阅读需要对函数部分有一定基础,可用于对C语言函数的理解提 ...
- ts 格式化日期输出
功能 像C#中DateTime的ToString的格式化输出一样,在js/ts中输出格式化的日期字符串 网上很多正则的,不加分隔符就不行了,和C#的格式也不一样 刚接触js/ts没两月,可能会有问题. ...
- Windows phone应用开发[22]-再谈下拉刷新
几周之前在博客更新一篇Windows phone应用开发[18]-下拉刷新 博文,有很多人在微博和博客评论中提到了很多问题.其实在实际项目中我基于这篇博文提出解决问题思路优化了这个解决方案.为了能够详 ...
- HTML 转 PDF
使用WkHtmlToXSharp,免费的软件,内集成了chrome 的内核,可以对CSS进行渲染,很好用 是需要传入 HTML 网页地址就可以转化为PDF文件,不过网页的编码要是 utf-8 Nuge ...
- doc2vec使用说明(二)gensim工具包 LabeledSentence
欢迎交流,转载请注明出处. 本文介绍gensim工具包中,带标签(一个或者多个)的文档的doc2vec 的向量表示. 应用场景: 当每个文档不仅可以由文本信息表示,还有别的其他标签信息时,比如,在商品 ...
- C++异常处理
引言 异常,让一个函数可以在发现自己无法处理的错误时抛出一个异常,希望它的调用者可以直接或者间接处理这个问题.而传统错误处理技术,检查到一个局部无法处理的问题时: 1.终止程序(例如atol,atoi ...
- 关于c++类的内存分配
参考:这里 虽然有些地方错了,但是也可以一看,大概能加深对c++类相关的内存分配的了解 然后这还不算十分深入,更深入的可以看这里. 这本书是时候读一下了:<深度探索C++对象模型> (待续 ...