BioPerl-Run
view release on metacpan or search on metacpan
lib/Bio/Tools/Run/Phylo/QuickTree.pm view on Meta::CPAN
=head1 AUTHOR - Sendu Bala
Email bix@sendu.me.uk
=head1 APPENDIX
The rest of the documentation details each of the object methods.
Internal methods are usually preceded with a _
=cut
package Bio::Tools::Run::Phylo::QuickTree;
use strict;
use Bio::AlignIO;
use Bio::TreeIO;
use base qw(Bio::Tools::Run::WrapperBase);
our $PROGRAM_NAME = 'quicktree';
our $PROGRAM_DIR = $ENV{'QUICKTREEDIR'};
=head2 program_name
Title : program_name
Usage : $factory>program_name()
Function: holds the program name
Returns : string
Args : None
=cut
sub program_name {
return $PROGRAM_NAME;
}
=head2 program_dir
Title : program_dir
Usage : $factory->program_dir(@params)
Function: returns the program directory, obtained from ENV variable.
Returns : string
Args : None
=cut
sub program_dir {
return $PROGRAM_DIR;
}
=head2 new
Title : new
Usage : $factory = Bio::Tools::Run::Phylo::QuickTree->new(@params)
Function: creates a new QuickTree factory
Returns : Bio::Tools::Run::Phylo::QuickTree
Args : Optionally, provide any of the following (default in []):
-upgma => boolean # Use the UPGMA method to construct the tree [0]
-kimura => boolean # Use the kimura translation for pairwise
# distances [0]
-boot => int # Calculate bootstrap values with n iterations [0]
=cut
sub new {
my ($class, @args) = @_;
my $self = $class->SUPER::new(@args);
# for consistency with other run modules, allow params to be dashless
my %args = @args;
while (my ($key, $val) = each %args) {
if ($key !~ /^-/) {
delete $args{$key};
$args{'-'.$key} = $val;
}
}
my ($upgma, $kimura, $boot) = $self->_rearrange([qw(UPGMA
KIMURA
BOOT)], %args);
$self->upgma(1) if $upgma;
$self->kimura(1) if $kimura;
$self->boot($boot) if $boot;
return $self;
}
=head2 upgma
Title : upgma
Usage : $factory->upgma(1);
Function: Choose to use the UPGMA method to construct the tree.
Returns : boolean (default 0)
Args : None to get, boolean to set.
=cut
sub upgma {
my ($self, $bool) = @_;
if (defined ($bool)) {
$self->{upgma} = $bool;
}
return $self->{upgma} || 0;
}
=head2 kimura
Title : kimura
Usage : $factory->kimura(1);
Function: Choose to use the kimura translation for pairwise distances.
Returns : boolean (default 0)
Args : None to get, boolean to set.
=cut
sub kimura {
my ($self, $bool) = @_;
if (defined ($bool)) {
$self->{kimura} = $bool;
}
return $self->{kimura} || 0;
}
=head2 boot
Title : boot
Usage : $factory->boot(100);
Function: Choose to calculate bootstrap values with the supplied number of
iterations.
Returns : int (default 0)
Args : None to get, int to set.
=cut
sub boot {
my ($self, $int) = @_;
if (defined ($int)) {
$self->{boot} = $int;
}
return $self->{boot} || 0;
}
=head2 run
Title : run
Usage : $factory->run($stockholm_file);
$factory->run($align_object);
Function: Runs QuickTree to generate a tree
Returns : Bio::Tree::Tree object
Args : file name for your input alignment in stockholm format, OR
Bio::Align::AlignI compliant object (eg. Bio::SimpleAlign).
=cut
sub run {
my ($self, $in) = @_;
if (ref $in && $in->isa("Bio::Align::AlignI")) {
$in = $self->_writeAlignFile($in);
}
elsif (! -e $in) {
$self->throw("When not supplying a Bio::Align::AlignI object, you must supply a readable filename");
}
return $self->_run($in);
}
sub _run {
my ($self, $file)= @_;
my $exe = $self->executable || return;
my $param_str = $self->arguments." ".$self->_setparams;
my $command = $exe." $param_str ".$file;
$self->debug("QuickTree command = $command");
open(my $result, "$command |") || $self->throw("QuickTree call ($command) crashed: $?");
my $treeio = Bio::TreeIO->new(-format => 'nhx', -fh => $result);
my $tree = $treeio->next_tree;
close($result);
# if bootstraps were enabled, the bootstraps are the ids; convert to
# bootstrap and no id
if ($self->boot) {
my @nodes = $tree->get_nodes;
my %non_internal = map { $_ => 1 } ($tree->get_leaf_nodes, $tree->get_root_node);
foreach my $node (@nodes) {
next if exists $non_internal{$node};
$node->bootstrap && next; # protect ourselves incase the parser improves
( run in 0.813 second using v1.01-cache-2.11-cpan-96521ef73a4 )