1 # BioPerl module for Bio::Annotation::Tree
3 # Please direct questions and support issues to <bioperl-l@bioperl.org>
5 # Cared for by Weigang Qiu <weigang at genectr.hunter.cuny.edu>
7 # Based on the Bio::Annotation::DBLink by Ewan Birney
9 # You may distribute this module under the same terms as perl itself
11 # POD documentation - main docs before the code
15 Bio::Annotation::Tree - Provide a tree as an annotation to a Bio::AnnotatableI
20 # Read a tree and an alignment
22 $treeio=Bio::TreeIO->new(-file=>'foo.dnd', -format=>'newic');
23 $tree=$treeio->next_tree;
24 $alnio=Bio::AlignIO->new(-file=>'foo.aln', -format=>'clustalw');
25 $aln=$alnio->next_aln;
27 # Construct a tree annotation
28 $ann_tree = Bio::Annotation::Tree->new (-tree_id => 'mytree',
32 # Add the tree annotation to AlignI
33 $ac = Bio::Annotation::Collection->new();
34 $ac->add_Annotation('tree', $ann_tree);
35 $aln->annotation($ac);
38 # The above procedures are sensible only if
39 # the tree is generated from the alignment. However,
40 # currently no effort has been made to check the consistency
41 # between the tree OTU names and the sequence names
45 Provides a Bio::AnnotationI object which contains a Bio::Tree::TreeI, which can
46 be added to a Bio::AnnotationCollectionI, which in turn be attached to a
47 Bio::AnnotatableI (typically a Bio::AlignI object)
51 Weigang Qiu - weigang at genectr.hunter.cuny.edu
60 The rest of the documentation details each of the object
61 methods. Internal methods are usually preceded with a '_'
65 # Let the code begin...
67 package Bio
::Annotation
::Tree
;
70 use base
qw(Bio::Root::Root Bio::AnnotationI Bio::TreeIO);
74 my($class,@args) = @_;
76 my $self = $class->SUPER::new
(@args);
78 my ($tree_id, $tree_obj, $tag) =
79 $self->_rearrange([ qw(
85 defined $tag && $self->tagname($tag);
86 defined $tree_id && $self->tree_id($tree_id);
87 defined $tree_obj && $self->tree($tree_obj);
90 # other possible variables to store
94 # defined $program && $self->program($program);
95 # defined $method && $self->method($method);
96 # defined $freq && $self->freq($tree_freq);
100 =head1 AnnotationI implementing functions
107 Usage : $ann_tree->as_text();
108 Function: output tree as a string
109 Returns : a newic tree file
117 my $tree = $self->tree || $self->throw("Tree object absent");
118 my $treeio = Bio
::TreeIO
->new();
119 $treeio->write_tree($tree);
125 Usage : my $str = $ann->display_text();
126 Function: returns a string. Unlike as_text(), this method returns a string
127 formatted as would be expected for te specific implementation.
129 One can pass a callback as an argument which allows custom text
130 generation; the callback is passed the current instance and any text
134 Args : [optional] callback
139 my $DEFAULT_CB = sub { $_[0]->as_text || ''};
142 my ($self, $cb) = @_;
144 $self->throw("Callback must be a code reference") if ref $cb ne 'CODE';
153 Usage : my $hashtree = $value->hash_tree
154 Function: For supporting the AnnotationI interface just returns the value
155 as a hashref with the key 'value' pointing to the value
156 Returns : hashrf to tree
164 $h->{'value'} = $self->tree();
171 Usage : $obj->tagname($newval)
172 Function: Get/set the tagname for this annotation value.
173 Setting this is optional. If set, it obviates the need to
174 provide a tag to Bio::AnnotationCollectionI when adding
175 this object. When obtaining an AnnotationI object from the
176 collection, the collection will set the value to the tag
177 under which it was stored unless the object has a tag
179 Returns : value of tagname (a scalar)
180 Args : new value (a scalar, optional)
186 my ($self,$value) = @_;
187 if( defined $value) {
188 $self->{'tagname'} = $value;
190 return $self->{'tagname'};
193 =head1 Specific accessors for Tree
198 Usage : $obj->tree_id($newval)
199 Function: Get/set a name for the tree
200 Returns : value of tagname (a scalar)
201 Args : new value (a scalar, optional)
208 return $self->{'tree_id'} = shift if defined($_[0]);
209 return $self->{'tree_id'};
215 Usage : $obj->tree($newval)
216 Function: Get/set tree
218 Args : new value (a tree ref, optional)
225 return $self->{'tree'} = shift if defined($_[0]);
226 return $self->{'tree'};