Bio-NEXUS

 view release on metacpan or  search on metacpan

exec/readin_tcoffee.pl  view on Meta::CPAN

              'overall' => $overall_score,
              'column'  => [],
              'row'     => {},
              'otu'     => {}
};


for my $taxon_score (@otu_avg_scores) {
    my ($taxon, $score) = $taxon_score =~ /(\S+)\s+:\s+(\d+)/;
    $scores->{'row'}{$taxon} = $score;
}

my $metadata = {
                 'tcoffee_version' => $version,
                 'tcoffee_rundate' => $date,
                 'alignment_score' => $overall_score,
                 'row_scores'      => $scores->{'row'}
                };

## Get rid of the header
$tcoff =~ s/^.+:\s+\d+\n//s;

## Loop through the interleaved "blocks"
while ($tcoff =~ s/^(.*?\n)\n\n//s) {
    my $block = $1;
#        print Dumper $block;

    $block =~ s/Cons\s+([-\d]+)\s*$//i;
#    $scores->{'column'} .= $1;
    push(@{ $scores->{'column'} }, split(//, $1));

    while( $block =~ s/^(\S+)\s+(\S+)\n// ) {
        my $taxon = $1;
        my $seq = $2;
        $seq =~ s/[A-Z]/\?/g;
        push(@{ $scores->{'otu'}{$taxon} }, split(//, $seq));
    }
}

## Construct a NEXUS CharactersBlock object
my $charblock = new Bio::NEXUS::CharactersBlock();

$charblock->set_title('tcoffee');
#$charblock->add_link();
$charblock->set_format( { 'datatype' => 'standard', 'gap' => '-', 'missing' => '?' } );

my $otuset;
for my $taxon (keys %{ $scores->{'otu'} }) {
    push @$otuset, Bio::NEXUS::TaxUnit->new($taxon, $scores->{'otu'}{$taxon});
}
$charblock->get_otuset()->set_otus($otuset);

$charblock->set_taxlabels(keys %{ $scores->{'row'} });
$charblock->write();


## Subroutines ##

sub slurp {
    my ($filename) = @_;
    my $file_contents = do{ local(@ARGV, $/) = $filename; <>};
    return $file_contents;
}



( run in 2.674 seconds using v1.01-cache-2.11-cpan-b16cb0d3907 )