# $Id: Nexus.pm 843 2009-03-04 23:50:27Z rvos $ package Bio::Phylo::Unparsers::Nexus; use strict; use Bio::Phylo::IO; use Bio::Phylo::Util::CONSTANT qw(:objecttypes); use Bio::Phylo::Util::Exceptions 'throw'; use vars qw(@ISA); @ISA=qw(Bio::Phylo::IO); =head1 NAME Bio::Phylo::Unparsers::Nexus - Serializer used by Bio::Phylo::IO, no serviceable parts inside =head1 DESCRIPTION This module turns a L object into a nexus formatted matrix. It is called by the L 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 =begin comment Type : Constructor Title : _new Usage : my $nex = Bio::Phylo::Unparsers::Nexus->_new; Function: Initializes a Bio::Phylo::Unparsers::Nexus object. Returns : A Bio::Phylo::Unparsers::Nexus object. Args : none. =end comment =cut sub _new { my $class = shift; my $self = {}; if (@_) { my %opts = @_; foreach my $key ( keys %opts ) { my $localkey = uc $key; $localkey =~ s/-//; unless ( ref $opts{$key} ) { $self->{$localkey} = uc $opts{$key}; } else { $self->{$localkey} = $opts{$key}; } } } bless $self, $class; return $self; } =begin comment Type : Wrapper Title : _to_string($matrix) Usage : $nexus->_to_string($matrix); Function: Stringifies a matrix object into a nexus formatted table. Alias : Returns : SCALAR Args : Bio::Phylo::Matrices::Matrix; =end comment =cut 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; } # wrong! else { throw 'ObjectMismatch' => "Can't unparse this object: $blocks"; } return $nexus; } # podinherit_insert_token # podinherit_start_token_do_not_remove # AUTOGENERATED pod created by /Users/rvosa/Applications/podinherit on Wed Mar 4 17:13:58 2009 # DO NOT EDIT the code below, rerun /Users/rvosa/Applications/podinherit instead. =pod =head1 INHERITED METHODS Bio::Phylo::Unparsers::Nexus inherits from one or more superclasses. This means that objects of class Bio::Phylo::Unparsers::Nexus also "do" the methods from the superclasses in addition to the ones implemented in this class. Below is the documentation for those additional methods, organized by superclass. =head2 SUPERCLASS Bio::Phylo::IO Bio::Phylo::Unparsers::Nexus inherits from superclass L. Below are the public methods (if any) from this superclass. =over =item parse() Parses a file or string. Type : Class method Title : parse Usage : my $obj = Bio::Phylo::IO->parse(%options); Function: Creates (file) handle, instantiates appropriate parser. Returns : A Bio::Phylo::* object Args : -file => (path), or -string => (scalar), -format => (description format), -(other) => (parser specific options) Comments: The parse method makes assumptions about the capabilities of Bio::Phylo::Parsers::* modules: i) their names match those of the -format => (blah) arguments, insofar that ucfirst(blah) . '.pm' is an existing module; ii) the modules implement a _from_handle, or a _from_string method. Exceptions are thrown if either assumption is violated. If @ARGV contains even key/value pairs such as "format newick file " (note: no dashes) these will be prepended to @_, for one-liners. =item unparse() Unparses object(s) to a string. Type : Class method Title : unparse Usage : my $string = Bio::Phylo::IO->unparse( %options ); Function: Turns Bio::Phylo object into a string according to specified format. Returns : SCALAR Args : -phylo => (Bio::Phylo object), -format => (description format), -(other) => (parser specific options) =back =cut # podinherit_stop_token_do_not_remove =head1 SEE ALSO =over =item L The nexus serializer is called by the L object. =item L Also see the manual: L and L. =back =head1 REVISION $Id: Nexus.pm 843 2009-03-04 23:50:27Z rvos $ =cut 1;