Bio-MUST-Apps-HmmCleaner

 view release on metacpan or  search on metacpan

bin/transferCleaner.pl  view on Meta::CPAN

#!/usr/bin/env perl
# PODNAME: transferCleaner.pl
# ABSTRACT: transfer amino acid LSSs on corresponding nucleotide alignment
# CONTRIBUTOR: Denis BAURAIN <denis.baurain@uliege.be>

use Modern::Perl;
use Getopt::Euclid;

## no critic (RequireLocalizedPunctuationVars)
BEGIN{
    $ENV{Smart_Comments} = $ARGV{-v}
        ? join q{ }, map { '#' x (2 + $_) } 1..$ARGV{-v}
        : q{}
    ;
}
## use critic
use Smart::Comments -ENV;
use Bio::MUST::Core::Utils qw(change_suffix);
use aliased 'Bio::MUST::Apps::HmmCleaner';
use aliased 'Bio::MUST::Core::Ali';
use Path::Class;

### Lauching script...

### INFILE : $ARGV{'<infile>'}

my $ali = Ali->load($ARGV{'<infile>'});

my %log;
my $logfile = file($ARGV{'-log'});
my $fh = $logfile->openr;

my $corg;
my @spans;
while (my $line = <$fh>) {
    chomp $line;
    unless (substr($line,0,1) =~ m/\s/xms) {
        if (defined $corg && @spans > 0) {
            $log{$corg} = [@spans];
            @spans = ();
        }
        $corg = $line;
    } else {
        $line =~ s/\s+//xmsg;
        my ($s,$e) = split "-", $line;
        push @spans, [$s,$e];
    }
}
$log{$corg} = [@spans] if (@spans);

#### %log

for my $seqid (keys %log) {
    my $seq = $ali->get_seq_with_id($seqid);

    for my $span (@{$log{$seqid}}) {
        my $e_nt = (($$span[1]-1)*3)+2;
        my $s_nt = ($$span[0]-1)*3;
        my @indexes = $s_nt..$e_nt;

        for my $pos (@indexes) {
            $seq->edit_seq($pos,1,$ARGV{'-delchar'});
        }
    }
}



( run in 1.104 second using v1.01-cache-2.11-cpan-75ffa21a3d4 )