全国咨询热线123456789
xxnxx
发布时间:2022-10-16 08:10浏览次数:
  • xxnxx
  • 题目:


    每个基因组(或序列集合)中可能包含多条scaffolds、contigs、染色体或其他小片段,通常使用Nxx(xx范围从01到99)统计来衡量序列或基因组的组装质量,经常用的指标有N50,N90等等。


    为描述方便,假设某基因组包含多条contigs。假设基因组总长度为S,则N50代表存在一个最大的L,在此基因组中所有长度大于等于L的contigs的总长度至少达到S的50%,则此最大的L=N50。


    求一个给定基因组的N80。




    我们假设存在一个基因组:


    my $a = 'ATAAT';my $b = 'GAATACA';my $c = 'ATGGAC';my $d = 'TACACTTAC';my @all = ($a, $b, $c, $d);

    定义几个全局变量,用来存储后面需要计算的数据:


    my $total_length = 0;my @lengths;

    先把每个长度存起来, 同时计算总长度


    for(@all){ chomp; $total_length += length $_; push @lengths, length $_;}

    把长度按从大到小排序:


    @lengths = reverse sort @lengths;my $n80 = $total_length * 0.8;

    现在我们长度从大到小排序的


    那么我们从长度大的开始依次取, 直到大于n80, 那么此时的数据就是我们需要的数据段


    my $n_totle = 0;for (@lengths){ $n_totle += $_; if($n_totle >= $n80){ print "$_n"; exit; }}

  • xxnxx
  • -->