美文网首页
bedtools coverage统计目标区间覆盖度

bedtools coverage统计目标区间覆盖度

作者: 花生学生信 | 来源:发表于2024-03-24 16:41 被阅读0次

这里使用111份文章里构建的pan-genome,实际注释到的基因条目有154010个

genomecov 示意图
文章中使用genomecov -bga -split参数统计覆盖度,实际上是统计reads的叠加情况,试了一下,并不能直接统计基因区间的具体覆盖情况 二代需要>85%,前面可能理解错了

这里使用bedtools coverage,优势是可以直接计算出目标区域的平均深度。

首先从注释文件中得到gene/CDS区间的bed位置文件

gene区间,分为3列,tab分割 一个gene的CDS区间实际上过于抽象,

统计窗口内的平均覆盖深度

bedtools coverage -a gene.bed -b bams/DL651.bam >cov/DL651.cov
实际>95%覆盖度的条目有53074;>85%有75177个
每一列分别代表染色体、起止位点、reads数、碱基数、区间大小/基因长度、覆盖率

这样就可以大致确定每个基因的PAV情况了。

因为每一行的顺序是不变的,所有提取第七列方便后面合并,当然也可以一步完成

cat fqid|while read id
do
cut -f 7 ${id}.cov >tsv/$id.tsv
done

从只含有gene的注释提取id信息

###tq1.py
import re

# 读取文件
with open('gene', 'r') as file:
    lines = file.readlines()

# 提取第九列ID后的字符
results = []
for line in lines:
    columns = line.strip().split('\t')  # 假设文件是以制表符分隔的
    if len(columns) >= 9:
        match = re.search(r'ID=(.*?);', columns[8])  # 第九列是索引为8
        if match:
            results.append(match.group(1))

# 输出结果
for result in results:
    print(result)

###python tq1.py >geneid
整合完之后大概是这样子

替换成0,1

# 读取文件
data <- read.table("allcov.tsv", header = TRUE, sep="\t")

# 从第二列第二行开始,将符合条件的值替换
data[1:nrow(data), 2:ncol(data)] <- ifelse(data[1:nrow(data), 2:ncol(data)] > 0.85, 1, 0)

# 保存修改后的数据框
write.table(data, "allcov_modified.tsv", sep="\t", quote=FALSE, row.names=FALSE)
替换后的结果

相关文章

网友评论

      本文标题:bedtools coverage统计目标区间覆盖度

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