美文网首页
pysam的使用

pysam的使用

作者: 九月_1012 | 来源:发表于2020-04-14 09:42 被阅读0次

    本文来源于panxiaoguang.github.io

    samtools是我们比较常用的处理bam文件的软件,但很多关于bam的具体信息,samtools不能给出,比如想获得某个ref位置,每条reads的碱基情况,及对应的readsID;获得比对到参考具体区间的碱基分布矩阵等。

    Pysam内置了较多的函数,可以非常灵活的满足,各种个性化的关于bam文件信息的提取。


      1. AlignmentFile对象内置方法
    • 2.AlignedSegmennt对象内置方法
      1. PileupColumn对象内置方法
      1. PileupRead对象内置方法

    1 获得pysam.Alignment对象

    import pysam
    samfile = pysam.AlignmentFile("test.bam","rb")
    #核查索引
    samfile.check_index()  #返回true
    

    2 AlignmentFile对象内置方法

    • 计算目标区域内比对上的reads数目
      count(self,contig=None, start=None, stop=None, region=None, until_eof=False, read_callback=’nofilter’, reference=None,end=None)
    #计算目标区域内比对上的reads数目
    samfile.count(contig='chr1', start=500, stop=600)  #注意是stop,而是end
    
    • 计算目标区域里的覆盖度
      count_coverage(self, contig=None,start=None, stop=None,region=None, quality_threshold=15, read_callback='all',reference=None,end=None)

    计算目标区域内的覆盖度。返回1个4维的array,代表ACGT的覆盖度,而每个维度的array长度为100,里面的数字代表该碱基在各个位置上的覆盖度。

    #计算目标区域里的覆盖度
    samfile.count_coverage(contig='chr1', start=500, end=600) 
    
    • 提取出比对到目标区域内的全部reads
      fetch(self, contig=None, start=None, stop=None, region=None, tid=None, until_eof=False, multiple_iterators=False, reference=None, end=None)

    提取比对到目标区域的全部reads,返回的是迭代器,可使用next、for循环访问。reads用的是AlignedSegment对象表示,以下主要说reads的AlignedSengment对象的内置方法

    allreads=sam.fetch(contig='chr1', start=500, end=600)
    reads1=next(allreads)                                                  
    
    

    find_introns(self, read_iterator)返回一个字典{(start, stop): count},列出了reads中的intronic sites(cigar字符串中的’N’)
    get_index_statistics(self)<u>通过index统计该BAM文件中在各个染色体上mapped/unmapped的reads个数</u>。

    sam.get_index_statistics()
    [IndexStats(contig='chr1', mapped=310538, unmapped=940, total=311478), IndexStats(contig='chr2', mapped=0, unmapped=0, total=0), 
     IndexStats(contig='chrM', mapped=0, unmapped=0, total=0)]
    

    get_reference_name(self, tid)

    • 根据染色体顺序,得到染色体名称
      得到tid(数字)相对应的reference name(字符串),例如在这个BAM中tid为0代表chr1,tid为1代表chr2,tid为24代表chrM。
    samfile.get_reference_name(0)'chr1'
    'chr1'
    

    与之对应的是<u>将染色体名称转为数字</u>,即将reference转换成tid

    sam.get_tid('chr2')
    1
    

    pileup(self, contig=None, start=None, stop=None, region=None, reference=None, end=None, **kwargs)
    类似于samtools的pileup操作,返回一个迭代器,每次迭代返回一个位点的PileupColumn对象,该对象的操作在后面进行详细介绍。

     pileupcolumn = sam.pileup("chr1", 999863, 999865,truncate=True) 
    pc=next(pileupcolumn)
    #stepper='nofilter', min_base_quality=0, min_mapping_quality=0
    
    
    sam.references
    ('chr1', 'chr2', 'chr3', 'chr4', 'chr5', 'chr6', 'chr7', 'chr8', 'chr9', 'chr10', 'chr11', 'chr12', 'chr13', 'chr14', 'chr15', 'chr16', 'chr17', 'chr18', 'chr19', 'chr20', 'chr21', 'chr22', 'chrX', 'chrY', 'chrM')
    #获得reads的cigar值
    reads1.cigarstring
    '2S151M'
    cigar记录的元组格式,下面的例子就代表了151M(0 代表 M)
    reads1.cigartuples
    [(0, 151)]
    
    Image.png
    • 谨记reads在pysam包内部的对象名称是AlignedSegment

    get_aligned_pairs(self, matches_only=False, with_seq=False)
    展示了query和reference之间的比对情况,如果遇到indel或者skipping的情况,相应的query或者reference会变为None

    # 比较两条reads的在ref上坐标的差值
    reads.compare(reads2)
    
    reads1.get_aligned_pairs(matches_only=False, with_seq=True)
    #[(0, 999850, 'C'), (1, 999851, 'G'), (2, 999852, 'G')]
    
    read1.get_blocks() #返回该reads比对到ref的起始与终止位置
    
    #返回该reads比对到的ref区域的reference碱基
    reads1.get_reference_sequence()   
    
    

    来源:
    https://panxiaoguang.github.io/2019/03/06/Pysam%E5%A4%84%E7%90%86bam%E6%96%87%E4%BB%B6/

    相关文章

      网友评论

          本文标题:pysam的使用

          本文链接:https://www.haomeiwen.com/subject/xjtzmhtx.html