annotate variant_effect_predictor/Bio/Tree/NodeI.pm @ 2:a5976b2dce6f

changing defualt values for ensembl database
author mahtabm
date Thu, 11 Apr 2013 17:15:42 +1000
parents 1f6dce3d34e0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 # $Id: NodeI.pm,v 1.19.2.2 2003/09/14 19:00:35 jason Exp $
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 # BioPerl module for Bio::Tree::NodeI
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5 # Cared for by Jason Stajich <jason@bioperl.org>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 # Copyright Jason Stajich
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 # You may distribute this module under the same terms as perl itself
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 # POD documentation - main docs before the code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15 Bio::Tree::NodeI - Interface describing a Tree Node
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 # get a Tree::NodeI somehow
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20 # like from a TreeIO
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 use Bio::TreeIO;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22 # read in a clustalw NJ in phylip/newick format
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 my $treeio = new Bio::TreeIO(-format => 'newick', -file => 'file.dnd');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 my $tree = $treeio->next_tree; # we'll assume it worked for demo purposes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26 # you might want to test that it was defined
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 my $rootnode = $tree->get_root_node;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 # process just the next generation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 foreach my $node ( $rootnode->each_Descendent() ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 print "branch len is ", $node->branch_length, "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 # process all the children
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 my $example_leaf_node;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 foreach my $node ( $rootnode->get_all_Descendents() ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 if( $node->is_Leaf ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 print "node is a leaf ... ";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 # for example use below
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 $example_leaf_node = $node unless defined $example_leaf_node;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 print "branch len is ", $node->branch_length, "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 # The ancestor() method points to the parent of a node
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 # A node can only have one parent
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 my $parent = $example_leaf_node->ancestor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 # parent won't likely have an description because it is an internal node
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 # but child will because it is a leaf
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 print "Parent id: ", $parent->id," child id: ",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 $example_leaf_node->id, "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 A NodeI is capable of the basic structure of building a tree and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 storing the branch length between nodes. The branch length is the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 length of the branch between the node and its ancestor, thus a root
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 node in a Tree will not typically have a valid branch length.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 Various implementations of NodeI may extend the basic functions and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 allow storing of other information (like attatching a species object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 or full sequences used to build a tree or alternative sequences). If
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 you don't know how to extend a Bioperl object please ask, happy to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 help, we would also greatly appreciate contributions with improvements
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 or extensions of the objects back to the Bioperl code base so that
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 others don't have to reinvent your ideas.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 =head1 FEEDBACK
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 =head2 Mailing Lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 User feedback is an integral part of the evolution of this and other
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 Bioperl modules. Send your comments and suggestions preferably to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 the Bioperl mailing list. Your participation is much appreciated.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 bioperl-l@bioperl.org - General discussion
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 http://bioperl.org/MailList.shtml - About the mailing lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 =head2 Reporting Bugs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 Report bugs to the Bioperl bug tracking system to help us keep track
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 of the bugs and their resolution. Bug reports can be submitted via
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 the web:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 http://bugzilla.bioperl.org/
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 =head1 AUTHOR - Jason Stajich
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 Email jason@bioperl.org
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 =head1 CONTRIBUTORS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 Aaron Mackey amackey@virginia.edu
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 =head1 APPENDIX
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 The rest of the documentation details each of the object methods.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 Internal methods are usually preceded with a _
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 # Let the code begin...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 package Bio::Tree::NodeI;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 use vars qw(@ISA);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 use Bio::Root::RootI;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 @ISA = qw(Bio::Root::RootI);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 =head2 add_Descendent
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 Title : add_Descendent
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 Usage : $node->add_Descendant($node);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 Function: Adds a descendent to a node
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 Returns : number of current descendents for this node
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 Args : Bio::Node::NodeI
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 sub add_Descendent{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 my ($self,@args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 $self->throw_not_implemented();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 =head2 each_Descendent
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 Title : each_Descendent
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 Usage : my @nodes = $node->each_Descendent;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 Function: all the descendents for this Node (but not their descendents
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 i.e. not a recursive fetchall)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 Returns : Array of Bio::Tree::NodeI objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 sub each_Descendent{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 $self->throw_not_implemented();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 =head2 Decorated Interface methods
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 =head2 get_all_Descendents
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 Title : get_all_Descendents($sortby)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 Usage : my @nodes = $node->get_all_Descendents;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 Function: Recursively fetch all the nodes and their descendents
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 *NOTE* This is different from each_Descendent
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 Returns : Array or Bio::Tree::NodeI objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 Args : $sortby [optional] "height", "creation" or coderef to be used
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 to sort the order of children nodes.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 sub get_all_Descendents{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 my ($self, $sortby) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 $sortby ||= 'height';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 my @nodes;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 foreach my $node ( $self->each_Descendent($sortby) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 push @nodes, ($node->get_all_Descendents($sortby), $node);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 return @nodes;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 *get_Descendents = \&get_all_Descendents;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 =head2 is_Leaf
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 Title : is_Leaf
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 Usage : if( $node->is_Leaf )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 Function: Get Leaf status
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 Returns : boolean
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 sub is_Leaf{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 $self->throw_not_implemented();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 =head2 descendent_count
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 Title : descendent_count
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 Usage : my $count = $node->descendent_count;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 Function: Counts the number of descendents a node has
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 (and all of their subnodes)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 Returns : integer
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 sub descendent_count{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 my $count = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 foreach my $node ( $self->each_Descendent ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 $count += 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 $node->can('descendent_count') ? $count += $node->descendent_count : next;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 return $count;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 =head2 to_string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 Title : to_string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 Usage : my $str = $node->to_string()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 Function: For debugging, provide a node as a string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 Returns : string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 sub to_string{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 return sprintf("%s%s%s",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 defined $self->id ? $self->id : '',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 defined $self->branch_length ? ':' . $self->branch_length : ' ',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 $self->is_Leaf() ? '(leaf)' : ''
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 =head2 height
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 Title : height
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 Usage : my $len = $node->height
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 Function: Returns the height of the tree starting at this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 node. Height is the maximum branchlength.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 Returns : The longest length (weighting branches with branch_length) to a leaf
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 sub height{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 if( $self->is_Leaf ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 if( !defined $self->branch_length ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 $self->debug(sprintf("Trying to calculate height of a node when a Node (%s) has an undefined branch_length\n",$self->id || '?' ));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 return 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 return $self->branch_length;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 my $max = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 foreach my $subnode ( $self->each_Descendent ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 my $s = $subnode->height;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 if( $s > $max ) { $max = $s; }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 return $max + ($self->branch_length || 1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 =head2 Get/Set methods
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 =head2 branch_length
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 Title : branch_length
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 Usage : $obj->branch_length()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 Function: Get/Set the branch length
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 Returns : value of branch_length
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 Args : newvalue (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 sub branch_length{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 my ($self)= @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 $self->throw_not_implemented();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 =head2 id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 Title : id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 Usage : $obj->id($newval)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 Function: The human readable identifier for the node
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 Returns : value of human readable id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 Args : newvalue (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 sub id{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 my ($self)= @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 $self->throw_not_implemented();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 =head2 internal_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 Title : internal_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 Usage : my $internalid = $node->internal_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 Function: Returns the internal unique id for this Node
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 Returns : unique id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 sub internal_id{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 $self->throw_not_implemented();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 =head2 description
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 Title : description
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 Usage : $obj->description($newval)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 Function: Get/Set the description string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 Returns : value of description
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 Args : newvalue (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 sub description{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 $self->throw_not_implemented();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 =head2 bootstrap
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 Title : bootstrap
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 Usage : $obj->bootstrap($newval)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 Function: Get/Set the bootstrap value
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 Returns : value of bootstrap
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 Args : newvalue (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 sub bootstrap{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 $self->throw_not_implemented();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 =head2 ancestor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 Title : ancestor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 Usage : my $node = $node->ancestor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 Function: Get/Set the ancestor node pointer for a Node
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 Returns : Null if this is top level node
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 sub ancestor{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 my ($self,@args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 $self->throw_not_implemented();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 =head2 invalidate_height
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 Title : invalidate_height
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 Usage : private helper method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 Function: Invalidate our cached value of the node height in the tree
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 Returns : nothing
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 sub invalidate_height {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 shift->throw_not_implemented();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378 =head2 Methods for associating Tag/Values with a Node
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 These methods associate tag/value pairs with a Node
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 =head2 add_tag_value
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 Title : add_tag_value
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 Usage : $node->add_tag_value($tag,$value)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 Function: Adds a tag value to a node
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 Returns : number of values stored for this tag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 Args : $tag - tag name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 $value - value to store for the tag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 sub add_tag_value{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 shift->throw_not_implemented();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 =head2 remove_tag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 Title : remove_tag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 Usage : $node->remove_tag($tag)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402 Function: Remove the tag and all values for this tag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403 Returns : boolean representing success (0 if tag does not exist)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404 Args : $tag - tagname to remove
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 sub remove_tag {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 shift->throw_not_implemented();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 =head2 remove_all_tags
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 Title : remove_all_tags
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 Usage : $node->remove_all_tags()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 Function: Removes all tags
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 Returns : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 Args : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424 sub remove_all_tags{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 shift->throw_not_implemented();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428 =head2 get_all_tags
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430 Title : get_all_tags
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431 Usage : my @tags = $node->get_all_tags()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432 Function: Gets all the tag names for this Node
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433 Returns : Array of tagnames
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 Args : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439 sub get_all_tags {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440 shift->throw_not_implemented();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 =head2 get_tag_values
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 Title : get_tag_values
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446 Usage : my @values = $node->get_tag_value($tag)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 Function: Gets the values for given tag ($tag)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448 Returns : Array of values or empty list if tag does not exist
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449 Args : $tag - tag name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454 sub get_tag_values{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455 shift->throw_not_implemented();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458 =head2 has_tag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460 Title : has_tag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461 Usage : $node->has_tag($tag)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462 Function: Boolean test if tag exists in the Node
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463 Returns : Boolean
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464 Args : $tag - tagname
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469 sub has_tag{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470 shift->throw_not_implemented();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473 1;