2 # BioPerl module for Bio::Tree::NodeNHX
4 # Please direct questions and support issues to <bioperl-l@bioperl.org>
6 # Cared for by Aaron Mackey <amackey@virginia.edu>
8 # Copyright Aaron Mackey
10 # You may distribute this module under the same terms as perl itself
12 # POD documentation - main docs before the code
16 Bio::Tree::NodeNHX - A Simple Tree Node with support for NHX tags
20 use Bio::Tree::NodeNHX;
21 my $nodeA = Bio::Tree::NodeNHX->new();
22 my $nodeL = Bio::Tree::NodeNHX->new();
23 my $nodeR = Bio::Tree::NodeNHX->new();
25 my $node = Bio::Tree::NodeNHX->new();
26 $node->add_Descendents($nodeL);
27 $node->add_Descendents($nodeR);
29 print "node is not a leaf \n" if( $node->is_leaf);
33 Makes a Tree Node with NHX tags, suitable for building a Tree. See
34 L<Bio::Tree::Node> for a full list of functionality.
40 User feedback is an integral part of the evolution of this and other
41 Bioperl modules. Send your comments and suggestions preferably to
42 the Bioperl mailing list. Your participation is much appreciated.
44 bioperl-l@bioperl.org - General discussion
45 http://bioperl.org/wiki/Mailing_lists - About the mailing lists
49 Please direct usage questions or support issues to the mailing list:
51 I<bioperl-l@bioperl.org>
53 rather than to the module maintainer directly. Many experienced and
54 reponsive experts will be able look at the problem and quickly
55 address it. Please include a thorough description of the problem
56 with code and data examples if at all possible.
60 Report bugs to the Bioperl bug tracking system to help us keep track
61 of the bugs and their resolution. Bug reports can be submitted via
64 https://github.com/bioperl/bioperl-live/issues
66 =head1 AUTHOR - Aaron Mackey
68 Email amackey@virginia.edu
72 The NHX (New Hampshire eXtended) format was created by Chris Zmasek,
75 http://sourceforge.net/projects/forester-atv/
79 The rest of the documentation details each of the object methods.
80 Internal methods are usually preceded with a _
85 # Let the code begin...
87 package Bio
::Tree
::NodeNHX
;
91 use base
qw(Bio::Tree::Node);
96 Usage : my $obj = Bio::Tree::NodeNHX->new();
97 Function: Builds a new Bio::Tree::NodeNHX object
98 Returns : Bio::Tree::NodeNHX
99 Args : -left => pointer to Left descendent (optional)
100 -right => pointer to Right descenent (optional)
101 -branch_length => branch length [integer] (optional)
102 -bootstrap => bootstrap value (string)
103 -description => description of node
104 -id => unique id for node
105 -nhx => hashref of NHX tags and values
110 my($class,@args) = @_;
112 my $self = $class->SUPER::new
(@args);
113 my ($nhx) = $self->_rearrange([qw(NHX)], @args);
114 $self->nhx_tag($nhx);
120 # try to insure that everything is cleaned up
121 $self->SUPER::DESTROY
();
122 if( defined $self->{'_desc'} &&
123 ref($self->{'_desc'}) =~ /ARRAY/i ) {
124 while( my ($nodeid,$node) = each %{ $self->{'_desc'} } ) {
125 $node->{'_ancestor'} = undef; # insure no circular references
129 $self->{'_desc'} = {};
135 my @tags = $self->get_all_tags;
137 if( scalar(@tags) > 0 ) {
138 $tagstr = '[' . join(":", "&&NHX",
139 map { "$_=" .join(',',
140 $self->get_tag_values($_))}
143 return sprintf("%s%s%s",
144 defined $self->id ?
$self->id : '',
145 defined $self->branch_length ?
':' .
146 $self->branch_length : ' ',
153 Usage : my $tag = $nodenhx->nhx_tag(%tags);
154 Function: Set tag-value pairs for NHX nodes
156 Args : hashref to update the tags/value pairs
158 with a scalar value update the bootstrap value by default
164 my ($self, $tags) = @_;
165 if (defined $tags && (ref($tags) =~ /HASH/i)) {
166 while( my ($tag,$val) = each %$tags ) {
167 if( ref($val) =~ /ARRAY/i ) {
168 for my $v ( @
$val ) {
169 $self->add_tag_value($tag,$v);
172 $self->add_tag_value($tag,$val);
175 if (exists $tags->{'B'}) {
176 $self->bootstrap($tags->{'B'});
178 } elsif (defined $tags and ! ref ($tags)) {
179 $self->debug( "here with $tags\n");
180 # bootstrap by default
181 $self->bootstrap($tags);