简介
使用过pysam
和samtools
的小伙伴肯定了解 pileup
的操作,如果把BAM文件看作表格的话,那么通常我们是按行去解析它的record,进而获得一些信息,例如比对到哪条染色体,比对的开始位置和结束位置等. 另一种情况下,我们想要按照列去循环解析,得到这个列上的具体信息,典型的就是这个列上比对序列的碱基是什么?比对序列的位置是什么?以及是Match or Mismatch or indel 等。那么,该操作就需要引入pileup
操作了。
indel 等。那么,该操作就需要引入pileup
操作了。
pysam
包中分别有pileup
,PileupColumn
以及PuleupRead
对象来承担上述任务, 那么我们简单的在julia使用,不需要构建对象这么复杂的操作,写几个函数即可
引入需要的包
using XAM |
获取比对到某个位点和某个区间的read 数量
function pileup(bam::BAM.Reader,contig::String, pos::Int64) |
获取比对到某个位点的Query 序列的位置和比对情况
function get_query_position(bam::BAM.Reader, contig::String, pos::Int) |
该get_query_position
函数返回一个生成器,可以迭代获取比对到某个参考位点的record上的具体位置,例如
bam = open(BAM.Reader,"45T.cs.rmdup.sort.bam",index="45T.cs.rmdup.sort.bam.bai") |
当然,你可以做一个双重循环,计算很多位点的具体位置。
同样,该get_query_operation
函数返回的是具体比对类型,我们都知道,比对有M(match),I(insertion),D(deletion)组成,这个就可以打印对应的行为。
bam = open(BAM.Reader,"45T.cs.rmdup.sort.bam",index="45T.cs.rmdup.sort.bam.bai") |