Bio::Tools::CodonTable::is_start_codon: check in case of ambiguous codons (#266)
[bioperl-live.git] / lib / Bio / Annotation / Tree.pm
blobeeb3e19b259c39e55c4ae1d74517a8812d1ffdbc
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
13 =head1 NAME
15 Bio::Annotation::Tree - Provide a tree as an annotation to a Bio::AnnotatableI
16 object
18 =head1 SYNOPSIS
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',
29 -tree_obj => $tree,
32 # Add the tree annotation to AlignI
33 $ac = Bio::Annotation::Collection->new();
34 $ac->add_Annotation('tree', $ann_tree);
35 $aln->annotation($ac);
37 # NOTE & TODO:
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
43 =head1 DESCRIPTION
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)
49 =head1 AUTHOR
51 Weigang Qiu - weigang at genectr.hunter.cuny.edu
53 =head1 CONTRIBUTORS
55 Aaron Mackey
56 Jason Stajich
58 =head1 APPENDIX
60 The rest of the documentation details each of the object
61 methods. Internal methods are usually preceded with a '_'
63 =cut
65 # Let the code begin...
67 package Bio::Annotation::Tree;
69 use strict;
71 use base qw(Bio::Root::Root Bio::AnnotationI Bio::TreeIO);
74 sub new {
75 my($class,@args) = @_;
77 my $self = $class->SUPER::new(@args);
79 my ($tree_id, $tree_obj, $tag) =
80 $self->_rearrange([ qw(
81 TREE_ID
82 TREE_OBJ
83 TAGNAME
84 ) ], @args);
86 defined $tag && $self->tagname($tag);
87 defined $tree_id && $self->tree_id($tree_id);
88 defined $tree_obj && $self->tree($tree_obj);
89 return $self;
91 # other possible variables to store
92 # TREE_PROGRAM
93 # TREE_METHOD
94 # TREE_FREQUENCY
95 # defined $program && $self->program($program);
96 # defined $method && $self->method($method);
97 # defined $freq && $self->freq($tree_freq);
101 =head1 AnnotationI implementing functions
103 =cut
105 =head2 as_text
107 Title : as_text
108 Usage : $ann_tree->as_text();
109 Function: output tree as a string
110 Returns : a newic tree file
111 Args : None
113 =cut
115 sub as_text{
116 my ($self) = @_;
118 my $tree = $self->tree || $self->throw("Tree object absent");
119 my $treeio = Bio::TreeIO->new();
120 $treeio->write_tree($tree);
123 =head2 display_text
125 Title : display_text
126 Usage : my $str = $ann->display_text();
127 Function: returns a string. Unlike as_text(), this method returns a string
128 formatted as would be expected for te specific implementation.
130 One can pass a callback as an argument which allows custom text
131 generation; the callback is passed the current instance and any text
132 returned
133 Example :
134 Returns : a string
135 Args : [optional] callback
137 =cut
140 my $DEFAULT_CB = sub { $_[0]->as_text || ''};
142 sub display_text {
143 my ($self, $cb) = @_;
144 $cb ||= $DEFAULT_CB;
145 $self->throw("Callback must be a code reference") if ref $cb ne 'CODE';
146 return $cb->($self);
151 =head2 hash_tree
153 Title : hash_tree
154 Usage : my $hashtree = $value->hash_tree
155 Function: For supporting the AnnotationI interface just returns the value
156 as a hashref with the key 'value' pointing to the value
157 Returns : hashrf to tree
158 Args : none
160 =cut
162 sub hash_tree{
163 my $self = shift;
164 my $h = {};
165 $h->{'value'} = $self->tree();
166 return $h;
169 =head2 tagname
171 Title : tagname
172 Usage : $obj->tagname($newval)
173 Function: Get/set the tagname for this annotation value.
174 Setting this is optional. If set, it obviates the need to
175 provide a tag to Bio::AnnotationCollectionI when adding
176 this object. When obtaining an AnnotationI object from the
177 collection, the collection will set the value to the tag
178 under which it was stored unless the object has a tag
179 stored already.
180 Returns : value of tagname (a scalar)
181 Args : new value (a scalar, optional)
184 =cut
186 sub tagname{
187 my ($self,$value) = @_;
188 if( defined $value) {
189 $self->{'tagname'} = $value;
191 return $self->{'tagname'};
194 =head1 Specific accessors for Tree
196 =head2 tree_id
198 Title : tree_id
199 Usage : $obj->tree_id($newval)
200 Function: Get/set a name for the tree
201 Returns : value of tagname (a scalar)
202 Args : new value (a scalar, optional)
205 =cut
207 sub tree_id {
208 my $self = shift;
209 return $self->{'tree_id'} = shift if defined($_[0]);
210 return $self->{'tree_id'};
213 =head2 tree
215 Title : tree
216 Usage : $obj->tree($newval)
217 Function: Get/set tree
218 Returns : tree ref
219 Args : new value (a tree ref, optional)
222 =cut
224 sub tree {
225 my $self = shift;
226 return $self->{'tree'} = shift if defined($_[0]);
227 return $self->{'tree'};