使用preseq计算文库复杂度以及估计加测量

在评估下机数据的时候,如果发现数据去重复之后无法达到目标覆盖度,那么就需要进一步加测。然而,有些文库复杂度很低,即使加测很多数据也无法得到更多的有效信息。那么如何评估文库复杂度,判断是否有加测的必要呢?

使用preseq软件可以实现根据现有测序数据评估已测序数据的复杂度,以及整个文库的复杂度。其中子命令  c_curve可以方便的计算现有测序数据中总测序量(total reads)与 有效数据量(distinct reads)的关系。流程如下:

下载安装 preseq
http://smithlabresearch.org/software/preseq/
安装教程中说是需要解压后 make all来安装,实际上直接解压后就可以执行。正常运行需要事先有samtools的环境变量。

使用preseq计算复杂度

	
preseq c_curve  -P -B  inbam > out.c_curve.txt

其中 -P代表是pairend数据,-B代表输入是bam(也可以使用bed作为输入文件,我没测试过)
 


如果有多个文件可以通过以下代码合并

#!/usr/bin/perl -w
# 2017-12-17
# zxcippo
 
$header = "gene";
undef %total;
 
foreach $i(0..@ARGV-1){
        $header .="\t$ARGV[$i]";
        open I,"$ARGV[$i]";
        while(<I>){
                chomp;
                @tmp = split;
                $total{$tmp[0]}[$i] = $tmp[1];
        }
}
 
print "$header\n";
foreach $key(keys %total){
        foreach $i (0..@ARGV-1){
                if(! $total{$key}[$i]){
                        $total{$key}[$i] ="NA";
                }
        }
        print $key,"\t",join("\t",@{$total{$key}}),"\n";
}

之后使用ggplot作图,参考代码如下

 

require(ggplot2)
require(reshape2)
require(stringr)
options(stringsAsFactors=F)
read.table("./merged.c_curve.txt",header=T)->ccurve
ccurve_melt<-melt(data=ccurve,id.vars="gene",variable.name = "sample",value.name="distinct_reads")
str_replace(ccurve_melt$sample,pattern=".c_curve.txt",replacement="")
colnames(ccurve_melt)[1]<-"total_reads"
 
 
ggplot(data=ccurve_melt) + geom_line(aes(x=total_reads,y=distinct_reads,group = sample,color=sample))
dev.off()
 
 
p<- ggplot(data=ccurve_melt) + geom_line(aes(x=total_reads,y=distinct_reads,group = sample)) + geom_abline(intercept=0,slope=1,lty=2) + ylim(0,12e07) + xlim(0,12e07) + theme(axis.text.x=element_text(angle=270)) + facet_wrap(~sample,nrow = 4)
ggsave(plot= p ,filename="estimate_complexity_single_mini_abline.pdf",device="pdf",units = "cm" , width= 25 ,height=25)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章