Bio::Phylo::Unparsers::Nexus - Serializer used by Bio::Phylo::IO, no serviceable parts inside


Bio-Phylo documentation Contained in the Bio-Phylo distribution.

Index


Code Index:

NAME

Top

Bio::Phylo::Unparsers::Nexus - Serializer used by Bio::Phylo::IO, no serviceable parts inside

DESCRIPTION

Top

This module turns a Bio::Phylo::Matrices::Matrix object into a nexus formatted matrix. It is called by the Bio::Phylo::IO facade, don't call it directly. You can pass the following additional arguments to the unparse call:

	# an array reference of matrix, forest and taxa objects:
	-phylo => [ $block1, $block2 ]

	# the arguments that can be passed for matrix objects, 
	# refer to Bio::Phylo::Matrices::Matrix::to_nexus:
	-matrix_args => {}

	# the arguments that can be passed for forest objects, 
	# refer to Bio::Phylo::Forest::to_nexus:
	-forest_args => {}

	# the arguments that can be passed for taxa objects, 
	# refer to Bio::Phylo::Taxa::to_nexus:
	-taxa_args => {}	

	OR:

	# for backward compatibility:
	-phylo => $matrix	

SEE ALSO

Top

Bio::Phylo::IO

The nexus serializer is called by the Bio::Phylo::IO object.

Bio::Phylo::Manual

Also see the manual: Bio::Phylo::Manual and http://rutgervos.blogspot.com.

CITATION

Top

If you use Bio::Phylo in published research, please cite it:

Rutger A Vos, Jason Caravas, Klaas Hartmann, Mark A Jensen and Chase Miller, 2011. Bio::Phylo - phyloinformatic analysis using Perl. BMC Bioinformatics 12:63. http://dx.doi.org/10.1186/1471-2105-12-63

REVISION

Top

 $Id: Nexus.pm 1660 2011-04-02 18:29:40Z rvos $


Bio-Phylo documentation Contained in the Bio-Phylo distribution.
# $Id: Nexus.pm 1660 2011-04-02 18:29:40Z rvos $
package Bio::Phylo::Unparsers::Nexus;
use strict;
use base 'Bio::Phylo::Unparsers::Abstract';
use Bio::Phylo::Util::CONSTANT ':objecttypes';
use Bio::Phylo::Util::Exceptions 'throw';

sub _to_string {
    my $self   = shift;
    my $blocks = $self->{'PHYLO'};
    my $nexus  = "#NEXUS\n";
    my $type;
    eval { $type = $blocks->_type };

    # array?
    if ($@) {
        for my $block (@$blocks) {
            eval { $type = $block->_type };
            my %args;
            if ( $type == _FOREST_ ) {
                if ( exists $self->{'FOREST_ARGS'} ) {
                    %args = %{ $self->{'FOREST_ARGS'} };
                }
            }
            elsif ( $type == _TAXA_ ) {
                if ( exists $self->{'TAXA_ARGS'} ) {
                    %args = %{ $self->{'TAXA_ARGS'} };
                }
            }
            elsif ( $type == _MATRIX_ ) {
                if ( exists $self->{'MATRIX_ARGS'} ) {
                    %args = %{ $self->{'MATRIX_ARGS'} };
                }
            }
            elsif ($@) {
                throw 'ObjectMismatch' => "Can't unparse this object: $blocks";
            }
            $nexus .= $block->to_nexus(%args);
        }
    }

    # matrix?
    elsif ( defined $type and $type == _MATRIX_ ) {
        $nexus .= $blocks->to_nexus;
    }

    # project?
    elsif ( defined $type and $type == _PROJECT_ ) {
        $nexus = $blocks->to_nexus;
    }

    # wrong!
    else {
        throw 'ObjectMismatch' => "Can't unparse this object: $blocks";
    }
    return $nexus;
}

# podinherit_insert_token

1;