抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

Julia读取BAM的库

想要计算Insert size,需要提供一个基因组比对后的文件,sam也好,bam也罢。那么,使用julia语言计算该值的第一步便是了解如何读取和解析BAM文件格式。

我们使用BioJulia提供的XAM包来读取BAM文件。所以我们需要首先安装该包。
打开julia,输入]进入Pkg模式

1
add XAM

使用XAM读取和解析BAM文件的一般格式

1
2
3
4
5
6
7
reader = open(BAM.Reader, "data.bam")
record = BAM.Record()
while !eof(reader)
empty!(record)
read!(reader, record)
# 做一些事情,例如解析和计算
end

上面的流程总体上就是

  • 使用BAM.Reader读取文件
  • 定义一个空的Record对象
  • 从头至尾循环整个BAMfile
  • 将每行bam读入Record

这样的操作方式可以节省内存,避免循环很大的bam文件爆内存。

什么是Insert Size?

通俗的讲,Insert 长度就是指双端序列比对后,模版的长度。所以我们要计算需要保证如下条件

  1. reads是成对,最好是Proper paired
  2. 只需要计算read1即可,不然就算重了
  3. 即使Proper paired也会有负的Insert,需要移除

代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using XAM
using Statistics

function insert_size_dist(Reader::XAM.BAM.Reader)
insert_length = Int64[]
record = BAM.Record()
while !eof(Reader)
empty!(record)
read!(Reader, record)
if BAM.flag(record) & 0x2 != 0 ## paired
if BAM.flag(record) & 0x40 != 0 ## first in pair
t_len = BAM.templength(record)
if t_len > 0
push!(insert_length, t_len)
end
end
end
end
(mean(insert_length), std(insert_length))
end

评论