annotate variant_effect_predictor/Bio/TreeIO/TreeEventBuilder.pm @ 3:d30fa12e4cc5 default tip

Merge heads 2:a5976b2dce6f and 1:09613ce8151e which were created as a result of a recently fixed bug.
author devteam <devteam@galaxyproject.org>
date Mon, 13 Jan 2014 10:38:30 -0500
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: TreeEventBuilder.pm,v 1.11.2.1 2003/09/13 21:51:05 jason Exp $
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 # BioPerl module for Bio::TreeIO::TreeEventBuilder
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::TreeIO::TreeEventBuilder - Build Bio::Tree::Tree's and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16 Bio::Tree::Node's from Events
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20 # internal use only
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24 This object will take events and build a Bio::Tree::TreeI compliant
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 object makde up of Bio::Tree::NodeI objects.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 =head1 FEEDBACK
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 =head2 Mailing Lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 User feedback is an integral part of the evolution of this and other
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 Bioperl modules. Send your comments and suggestions preferably to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 the Bioperl mailing list. Your participation is much appreciated.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 bioperl-l@bioperl.org - General discussion
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 http://bioperl.org/MailList.shtml - About the mailing lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 =head2 Reporting Bugs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 Report bugs to the Bioperl bug tracking system to help us keep track
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 of the bugs and their resolution. Bug reports can be submitted via
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 email or the web:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 bioperl-bugs@bioperl.org
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 http://bugzilla.bioperl.org/
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 =head1 AUTHOR - Jason Stajich
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 Email jason@bioperl.org
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 Describe contact details here
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 =head1 CONTRIBUTORS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 Additional contributors names and emails here
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 =head1 APPENDIX
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 The rest of the documentation details each of the object methods.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 Internal methods are usually preceded with a _
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 # Let the code begin...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 package Bio::TreeIO::TreeEventBuilder;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 use vars qw(@ISA);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 use Bio::Root::Root;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 use Bio::Event::EventHandlerI;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 use Bio::Tree::Tree;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 use Bio::Tree::Node;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 @ISA = qw(Bio::Root::Root Bio::Event::EventHandlerI);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 =head2 new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 Title : new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 Usage : my $obj = new Bio::TreeIO::TreeEventBuilder();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 Function: Builds a new Bio::TreeIO::TreeEventBuilder object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 Returns : Bio::TreeIO::TreeEventBuilder
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 Args :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 my($class,@args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 my $self = $class->SUPER::new(@args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 my ($treetype, $nodetype) = $self->_rearrange([qw(TREETYPE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 NODETYPE)], @args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 $treetype ||= 'Bio::Tree::Tree';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 $nodetype ||= 'Bio::Tree::Node';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 eval {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 $self->_load_module($treetype);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 $self->_load_module($nodetype);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 if( $@ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 $self->throw("Could not load module $treetype or $nodetype. \n$@\n")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 $self->treetype($treetype);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 $self->nodetype($nodetype);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 $self->{'_treelevel'} = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 return $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 =head2 treetype
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 Title : treetype
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 Usage : $obj->treetype($newval)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 Function:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 Returns : value of treetype
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 Args : newvalue (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 sub treetype{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 my ($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 if( defined $value) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 $self->{'treetype'} = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 return $self->{'treetype'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 =head2 nodetype
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 Title : nodetype
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 Usage : $obj->nodetype($newval)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 Function:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 Returns : value of nodetype
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 Args : newvalue (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 sub nodetype{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 my ($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 if( defined $value) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 $self->{'nodetype'} = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 return $self->{'nodetype'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 =head2 SAX methods
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 =head2 start_document
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 Title : start_document
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 Usage : $handler->start_document
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 Function: Begins a Tree event cycle
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 Returns : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 Args : none
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 start_document {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 $self->{'_lastitem'} = {};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 $self->{'_currentitems'} = [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 $self->{'_currentnodes'} = [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 =head2 end_document
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 Title : end_document
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 Usage : my @trees = $parser->end_document
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 Function: Finishes a Phylogeny cycle
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 Returns : An array Bio::Tree::TreeI
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 sub end_document {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 my $vb = $self->verbose;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 my $root = $self->nodetype->new(-verbose => $vb);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 # aggregate the nodes into trees basically ad-hoc.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 while ( @{$self->{'_currentnodes'}} ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 my ($node) = ( shift @{$self->{'_currentnodes'}});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 $root->add_Descendent($node);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 $self->debug("Root node is " . $root->to_string()."\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 if( $self->verbose > 0 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 foreach my $node ( $root->get_Descendents ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 $self->debug("node is ". $node->to_string(). "\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 my $tree = $self->treetype->new(-root => $root,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 -verbose => $vb);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 return $tree;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 =head2 start_element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 Title : start_element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 Usage :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 Function:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 Returns :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 Args : $data => hashref with key 'Name'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 sub start_element{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 my ($self,$data) =@_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 $self->{'_lastitem'}->{$data->{'Name'}}++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 $self->debug("starting element: $data->{Name}\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 push @{$self->{'_lastitem'}->{'current'}},$data->{'Name'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 my %data;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 if( $data->{'Name'} eq 'node' ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 push @{$self->{'_currentitems'}}, \%data;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 } elsif ( $data->{Name} eq 'tree' ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 $self->{'_treelevel'}++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 =head2 end_element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 Title : end_element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 Usage :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 Function:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 Returns : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 Args : $data => hashref with key 'Name'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 sub end_element{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 my ($self,$data) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 $self->debug("end of element: $data->{Name}\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 if( $data->{'Name'} eq 'node' ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 my $tnode;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 my $node = pop @{$self->{'_currentitems'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 $tnode = $self->nodetype->new(-verbose => $self->verbose,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 %{$node});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 unless ( $node->{'-leaf'} ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 for ( splice( @{$self->{'_currentnodes'}},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 - $self->{'_nodect'}->[$self->{'_treelevel'}+1])) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 $self->debug("adding desc: " . $_->to_string . "\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 $tnode->add_Descendent($_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 $self->{_nodect}->[$self->{_treelevel}+1] = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 push @{$self->{'_currentnodes'}}, $tnode;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 $self->{_nodect}->[$self->{'_treelevel'}]++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 $self->debug ("added node: nodes in stack is ". scalar @{$self->{'_currentnodes'}} . ", treelevel: $self->{_treelevel}, nodect: $self->{_nodect}->[$self->{_treelevel}]\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 } elsif( $data->{'Name'} eq 'tree' ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 $self->debug("end of tree: nodes in stack is ". scalar @{$self->{'_currentnodes'}}. "\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 $self->{'_treelevel'}--;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 $self->{'_lastitem'}->{ $data->{'Name'} }--;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 pop @{$self->{'_lastitem'}->{'current'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 =head2 in_element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 Title : in_element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 Usage :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 Function:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 Returns :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 Args :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 sub in_element{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 my ($self,$e) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 return 0 if ! defined $self->{'_lastitem'} ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 ! defined $self->{'_lastitem'}->{'current'}->[-1];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 return ($e eq $self->{'_lastitem'}->{'current'}->[-1]);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 =head2 within_element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 Title : within_element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 Usage :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 Function:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 Returns :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 Args :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 sub within_element{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 my ($self,$e) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 return $self->{'_lastitem'}->{$e};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 =head2 characters
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 Title : characters
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 Usage : $handler->characters($text);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 Function: Processes characters
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 Returns : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 Args : text string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 sub characters{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 my ($self,$ch) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 if( $self->within_element('node') ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 my $hash = pop @{$self->{'_currentitems'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 if( $self->in_element('bootstrap') ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 $hash->{'-bootstrap'} = $ch;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 } elsif( $self->in_element('branch_length') ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 $hash->{'-branch_length'} = $ch;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 } elsif( $self->in_element('id') ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 $hash->{'-id'} = $ch;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 } elsif( $self->in_element('description') ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 $hash->{'-desc'} = $ch;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 } elsif ( $self->in_element('tag_name') ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 $hash->{'-NHXtagname'} = $ch;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 } elsif ( $self->in_element('tag_value') ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 $hash->{'-nhx'}->{$hash->{'-NHXtagname'}} = $ch;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 delete $hash->{'-NHXtagname'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 } elsif( $self->in_element('leaf') ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 $hash->{'-leaf'} = $ch;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 push @{$self->{'_currentitems'}}, $hash;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 $self->debug("chars: $ch\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 1;