美文网首页
phylop 中遇到的maf sort 与 split 问题

phylop 中遇到的maf sort 与 split 问题

作者: jcf的学习笔记 | 来源:发表于2022-03-02 11:26 被阅读0次

    在运行phylop时遇到"ERROR maf_read_subset: invalid idx_offset -2" 的报错, 作者是这样解释的

    image.png

    1、 maf文件的第一个物种在每一个比对块中必须是一样的,作为参考基因组
    2、 maf文件比对块的顺序必须是被排序的
    3、 maf文件的参考基因组文件,应该只包含一条染色体

    上述描述翻译成人话就是,maf文件需要按照参考基因组的染色体分割以及按照坐标由低到高排序,但是他分享的这些maf_sort,maf-sort, mafSplit.py 都不太好用,花半天时间下载可能还有一堆报错,所以还不如自己写一个简单的split 与 sort 的脚本。

    参考maf格式如下


    e12a1c1d1f3c41c7b4b79c92cc875a6.png

    自动在maf输入文件下生成分割并排序好的maf,这个脚本可能会比较占内存,maf过大的或者服务器内存比较小的慎用,脚本如下

    #!/usr/bin/envs perl -w
    
    use strict;
    
    my $usage=<<USAGE;
    
    perl $0 maf
    
    script will create each splited maf by chromosomes of reference at the path of maf input.
    
    USAGE
    
    die "$usage\n" unless @ARGV == 1;
    
    open MF, "$ARGV[0]" or die "";
    $/="\na\n";
    my ($header, %hash);
    while (<MF>)
    {
            chomp;
            if (m/^#/)
            {
                    $header="$_\n";
            }else{
                    my @line=split/\s+/, $_;
                    $hash{$line[1]}{$line[2]}=$_;
            }
    }
    
    close MF;
    
    $/="\n";
    
    foreach my $chr (sort keys %hash){
            next if ($chr =~ m/ChrM/ || $chr =~m/ChrC/);
            #next unless $chr =~ m/A_tha_pep/;
            my $out=split/\./, $chr;
            open OUT, ">$chr.maf" or die "";
            print OUT "$header\n";
            foreach my $pos (sort {$a<=>$b} keys %{$hash{$chr}}){
                    print OUT "a\n$hash{$chr}{$pos}";
            }
            close OUT;
            print "chr has been done! \n ";
    }
    
    

    相关文章

      网友评论

          本文标题:phylop 中遇到的maf sort 与 split 问题

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