• 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

  • 相关阅读:
    JDK+Jmeter 环境搭建
    APP自动化中三大定位工具
    APP自动化环境配置
    pytest生成allure报告
    pytest怎么标记用例?
    pytest中怎么实现参数化?
    pytest中怎么引用前置中的变量
    pytest_前置后置
    toast文本提示信息元素获取
    js处理日历
  • 原文地址:https://www.cnblogs.com/zkkaka/p/6160317.html
Copyright © 2020-2023  润新知