Bio-Phylo
view release on metacpan or search on metacpan
lib/Bio/Phylo/Forest.pm view on Meta::CPAN
=item calc_split_frequency()
Calculates frequency of provided split
Type : Calculation
Title : calc_split_frequency
Usage : my $freq = $trees->calc_split_frequency([$node1,$node2]);
Function: Calculates split frequency
Returns : Scalar, a number
Args : An array of taxon objects, or a taxa object
Comment :
=cut
sub calc_split_frequency {
my ( $self, $arg ) = @_;
my @trees = @{ $self->get_entities };
my $ntrees = scalar @trees;
if ($ntrees) {
my $count = 0;
for my $tree (@trees) {
$count++ if $tree->is_clade($arg);
}
return $count / $ntrees;
}
return 0;
}
=back
=head1 METHODS
=over
=item insert()
Inserts trees in forest.
Type : Method
Title : insert
Usage : $trees->insert( $tree1, $tree2, ... );
Function: Inserts trees in forest.
Returns : A Bio::Phylo::Forest object.
Args : Trees
Comment : The last seen tree that is set as default
becomes the default for the entire forest
=cut
sub insert {
my $self = shift;
if ( $self->can_contain(@_) ) {
my $seen_default = 0;
for my $tree ( reverse @_ ) {
if ( $tree->is_default ) {
if ( not $seen_default ) {
$seen_default++;
}
else {
$tree->set_not_default;
}
}
}
if ($seen_default) {
if ( my $tree = $self->get_default_tree ) {
$tree->set_not_default;
}
}
$self->SUPER::insert(@_);
}
else {
throw 'ObjectMismatch' => "Failed insertion: @_ [in $self]";
}
}
=item get_default_tree()
Gets the default tree in the forest.
Type : Method
Title : get_default_tree
Usage : my $tree = $trees->get_default_tree;
Function: Gets the default tree in the forest.
Returns : A Bio::Phylo::Forest::Tree object.
Args : None
Comment : If no default tree has been set,
returns first tree.
=cut
sub get_default_tree {
my $self = shift;
my $first = $self->first;
for my $tree ( @{ $self->get_entities } ) {
return $tree if $tree->is_default;
}
return $first;
}
=item check_taxa()
Validates taxon links of nodes in invocant's trees.
Type : Method
Title : check_taxa
Usage : $trees->check_taxa;
Function: Validates the taxon links of the
nodes of the trees in $trees
Returns : A validated Bio::Phylo::Forest object.
Args : None
=cut
sub check_taxa {
my $self = shift;
# is linked
if ( my $taxa = $self->get_taxa ) {
my %tips;
# build a hash of all the unlinked tips by their names
TIP: for my $tip ( map { @{ $_->get_terminals } } @{ $self->get_entities } ) {
next TIP if $tip->get_taxon && $taxa->contains($tip->get_taxon);
my $name = $tip->get_internal_name;
if ( not $tips{$name} ) {
$tips{$name} = [];
( run in 2.202 seconds using v1.01-cache-2.11-cpan-cdf2f3d4e48 )