2 # BioPerl module for Bio::TreeIO
4 # Please direct questions and support issues to <bioperl-l@bioperl.org>
6 # Cared for by Jason Stajich <jason@bioperl.org>
8 # Copyright Jason Stajich
10 # You may distribute this module under the same terms as perl itself
12 # POD documentation - main docs before the code
16 Bio::TreeIO - Parser for Tree files
22 my $treeio = Bio::TreeIO->new(-format => 'newick',
23 -file => 'globin.dnd');
24 while( my $tree = $treeio->next_tree ) {
25 print "Tree is ", $tree->number_nodes, "\n";
31 This is the driver module for Tree reading from data streams and
32 flatfiles. This is intended to be able to create Bio::Tree::TreeI
39 User feedback is an integral part of the evolution of this and other
40 Bioperl modules. Send your comments and suggestions preferably to
41 the Bioperl mailing list. Your participation is much appreciated.
43 bioperl-l@bioperl.org - General discussion
44 http://bioperl.org/wiki/Mailing_lists - About the mailing lists
48 Please direct usage questions or support issues to the mailing list:
50 I<bioperl-l@bioperl.org>
52 rather than to the module maintainer directly. Many experienced and
53 reponsive experts will be able look at the problem and quickly
54 address it. Please include a thorough description of the problem
55 with code and data examples if at all possible.
59 Report bugs to the Bioperl bug tracking system to help us keep track
60 of the bugs and their resolution. Bug reports can be submitted via the
63 https://github.com/bioperl/bioperl-live/issues
65 =head1 AUTHOR - Jason Stajich
67 Email jason-at-bioperl-dot-org
71 Allen Day E<lt>allenday@ucla.eduE<gt>
75 The rest of the documentation details each of the object methods.
76 Internal methods are usually preceded with a _
81 # Let the code begin...
88 # Object preamble - inherits from Bio::Root::Root
90 use Bio
::TreeIO
::TreeEventBuilder
;
92 use base
qw(Bio::Root::Root Bio::Root::IO Bio::Event::EventGeneratorI Bio::Factory::TreeFactoryI);
97 Usage : my $obj = Bio::TreeIO->new();
98 Function: Builds a new Bio::TreeIO object
100 Args : a hash. useful keys:
101 -format : Specify the format of the file. Supported formats:
103 newick Newick tree format
104 nexus Nexus tree format
106 svggraph SVG graphical representation of tree
107 tabtree ASCII text representation of tree
108 lintree lintree output format
113 my($caller,@args) = @_;
114 my $class = ref($caller) || $caller;
116 # or do we want to call SUPER on an object if $caller is an
120 if( $class =~ /Bio::TreeIO::(\S+)/ ) {
121 $obj = $class->SUPER::new
(@args);
122 $obj->_initialize(@args);
125 @param{ map { lc $_ } keys %param } = values %param; # lowercase keys
126 my $format = $param{'-format'} ||
127 $class->_guess_format( $param{'-file'} || $ARGV[0] ) ||
129 $format = "\L$format"; # normalize capitalization to lower case
131 # normalize capitalization
132 return undef unless( $class->_load_format_module($format) );
133 $obj = "Bio::TreeIO::$format"->new(@args);
142 Usage : $format = $obj->format()
143 Function: Get the tree format
144 Returns : tree format
149 # format() method inherited from Bio::Root::IO
155 Usage : my $tree = $treeio->next_tree;
156 Function: Gets the next tree off the stream
157 Returns : Bio::Tree::TreeI or undef if no more trees
164 $self->throw("Cannot call method next_tree on Bio::TreeIO object must use a subclass");
170 Usage : $treeio->write_tree($tree);
171 Function: Writes a tree onto the stream
173 Args : Bio::Tree::TreeI
179 my ($self,$tree) = @_;
180 $self->throw("Cannot call method write_tree on Bio::TreeIO object must use a subclass");
184 =head2 attach_EventHandler
186 Title : attach_EventHandler
187 Usage : $parser->attatch_EventHandler($handler)
188 Function: Adds an event handler to listen for events
190 Args : Bio::Event::EventHandlerI
194 sub attach_EventHandler
{
195 my ($self,$handler) = @_;
196 return if( ! $handler );
197 if( ! $handler->isa('Bio::Event::EventHandlerI') ) {
198 $self->warn("Ignoring request to attach handler ".ref($handler). ' because it is not a Bio::Event::EventHandlerI');
200 $self->{'_handler'} = $handler;
206 Title : _eventHandler
208 Function: Get the EventHandler
209 Returns : Bio::Event::EventHandlerI
217 return $self->{'_handler'};
221 my($self, @args) = @_;
222 $self->{'_handler'} = undef;
224 $self->get_params; # Initialize the default parameters.
226 my ($nen,$ini) = $self->_rearrange
227 ([qw(NEWLINE_EACH_NODE INTERNAL_NODE_ID)],@args);
228 $self->set_param('newline_each_node',$nen);
229 $self->set_param('internal_node_id',$ini);
231 $self->attach_EventHandler(Bio
::TreeIO
::TreeEventBuilder
->new
232 (-verbose
=> $self->verbose(), @args));
233 $self->_initialize_io(@args);
234 #$self->debug_params;
237 =head2 _load_format_module
239 Title : _load_format_module
240 Usage : *INTERNAL TreeIO stuff*
241 Function: Loads up (like use) a module at run time on demand
248 sub _load_format_module
{
249 my ($self,$format) = @_;
250 my $module = "Bio::TreeIO::" . $format;
254 $ok = $self->_load_module($module);
259 $self: $format cannot be found
261 For more information about the TreeIO system please see the TreeIO docs.
262 This includes ways of checking for formats at compile time, not run time
274 if (defined $value) {
275 $self->get_params->{$param} = $value;
277 return $self->get_params->{$param};
285 #print STDERR "[$param] -> [undef]\n" if (!defined $value);
286 return unless (defined $value);
287 #print STDERR "[$param] -> [$value]\n";
289 $self->get_params->{$param} = $value;
290 return $self->param($param);
295 return $self->get_params;
300 if (!defined $self->{_params
}) {
301 $self->{_params
} = $self->get_default_params;
304 return $self->{_params
};
311 # Apply all the passed parameters to our internal parm hashref.
312 my $cur_params = $self->get_params;
313 $self->{_params
} = { %$cur_params, %$params };
315 return $self->get_params;
318 sub get_default_params
{
327 my $params = $self->get_params;
330 foreach my $param (keys %$params) {
331 my $value = $params->{$param};
332 print STDERR
" [$param] -> [$value]\n";
339 Title : _guess_format
340 Usage : $obj->_guess_format($filename)
343 Returns : guessed format of filename (lower case)
350 return unless $_ = shift;
351 return 'newick' if /\.(dnd|newick|nh)$/i;
352 return 'nhx' if /\.(nhx)$/i;
353 return 'phyloxml' if /\.(xml)$/i;
354 return 'svggraph' if /\.svg$/i;
355 return 'lintree' if( /\.(lin|lintree)$/i );
366 return bless {'treeio' => shift},$class;
371 return $self->{'treeio'}->next_tree() || undef unless wantarray;
373 push @list,$obj while $obj = $self->{'treeio'}->next_tree();
379 $self->{'treeio'}->write_tree(@_);