Mercurial > repos > willmclaren > ensembl_vep
view variant_effect_predictor/Bio/EnsEMBL/Compara/GeneTreeNode.pm @ 1:d6778b5d8382 draft default tip
Deleted selected files
author | willmclaren |
---|---|
date | Fri, 03 Aug 2012 10:05:43 -0400 |
parents | 21066c0abaf5 |
children |
line wrap: on
line source
=head1 LICENSE Copyright (c) 1999-2012 The European Bioinformatics Institute and Genome Research Limited. All rights reserved. This software is distributed under a modified Apache license. For license details, please see http://www.ensembl.org/info/about/code_licence.html =head1 CONTACT Please email comments or questions to the public Ensembl developers list at <dev@ensembl.org>. Questions may also be sent to the Ensembl help desk at <helpdesk@ensembl.org>. =head1 NAME Bio::EnsEMBL::Compara::GeneTreeNode =head1 DESCRIPTION Specific subclass of NestedSet to add functionality when the nodes of this tree are GeneTreeMember objects and the tree is a representation of a gene derived Phylogenetic tree =head1 INHERITANCE TREE Bio::EnsEMBL::Compara::GeneTreeNode `- Bio::EnsEMBL::Compara::NestedSet =head1 AUTHORSHIP Ensembl Team. Individual contributions can be found in the CVS log. =head1 MAINTAINER $Author: mm14 $ =head VERSION $Revision: 1.15 $ =head1 APPENDIX The rest of the documentation details each of the object methods. Internal methods are usually preceded with an underscore (_) =cut package Bio::EnsEMBL::Compara::GeneTreeNode; use strict; use IO::File; use Bio::EnsEMBL::Utils::Argument; use Bio::EnsEMBL::Utils::Exception; use Bio::EnsEMBL::Compara::AlignedMemberSet; use base ('Bio::EnsEMBL::Compara::NestedSet'); sub tree { my $self = shift; if (@_) { $self->{'_tree'} = shift; } elsif ((not defined $self->{'_tree'}) and (defined $self->adaptor) and (defined $self->{_root_id})) { $self->{'_tree'} = $self->adaptor->db->get_GeneTreeAdaptor->fetch_by_root_id($self->{_root_id}); } return $self->{'_tree'}; } # tweaked to take into account the GeneTree object sub root { my $self = shift; if (defined $self->tree) { return $self->tree->root; } else { return $self->SUPER::root; } } =head2 release_tree Overview : Removes the to/from GeneTree reference to allow freeing memory Example : $self->release_tree; Returntype : undef Exceptions : none Caller : general =cut sub release_tree { my $self = shift; if (defined $self->tree) { delete $self->{'_tree'}->{'_root'}; delete $self->{'_tree'}; } return $self->SUPER::release_tree; } #use Data::Dumper; #sub string_node { # my $self = shift; # my $str = $self->SUPER::string_node; # if (defined $self->{'_tree'}) { # my $t = $self->{'_tree'}; # $str = chop($str)." $t/root_id=".($self->{'_tree'}->root_id)."/".join("/", map { "$_ => ${$t}{$_}" } keys %$t)."\n"; # } # return $str; #} sub get_leaf_by_Member { my $self = shift; my $member = shift; if($member->isa('Bio::EnsEMBL::Compara::GeneTreeNode')) { return $self->find_leaf_by_node_id($member->node_id); } elsif ($member->isa('Bio::EnsEMBL::Compara::Member')) { return $self->find_leaf_by_name($member->get_canonical_Member->stable_id); } else { die "Need a Member object!"; } } sub get_AlignedMemberSet { my $self = shift; my $set = Bio::EnsEMBL::Compara::AlignedMemberSet->new( -adaptor => $self->adaptor, -method_link_species_set_id => $self->tree->method_link_species_set_id, -stable_id => $self->tree->stable_id, -version => sprintf("%d.%d", $self->tree->version, $self->node_id), ); foreach my $member (@{$self->get_all_leaves}) { $set->add_Member($member) if $member->isa('Bio::EnsEMBL::Compara::GeneTreeMember'); } return $set; } sub get_SimpleAlign { my $self = shift; return $self->get_AlignedMemberSet->get_SimpleAlign(@_); } # Takes a protein tree and creates a consensus cigar line from the # constituent leaf nodes. sub consensus_cigar_line { my $self = shift; return $self->get_AlignedMemberSet->consensus_cigar_line(@_); } =head2 remove_nodes_by_taxon_ids Arg [1] : arrayref of taxon_ids Example : my $ret_tree = $tree->remove_nodes_by_taxon_ids($taxon_ids); Description : Returns the tree with removed nodes in taxon_id list. Returntype : Bio::EnsEMBL::Compara::GeneTreeNode object Exceptions : Caller : general Status : At risk (behaviour on exceptions could change) =cut sub remove_nodes_by_taxon_ids { my $self = shift; my $species_arrayref = shift; my @tax_ids = @{$species_arrayref}; # Turn the arrayref into a hash. my %tax_hash; map {$tax_hash{$_}=1} @tax_ids; my @to_delete; foreach my $leaf (@{$self->get_all_leaves}) { if (exists $tax_hash{$leaf->taxon_id}) { push @to_delete, $leaf; } } return $self->remove_nodes(\@to_delete); } =head2 keep_nodes_by_taxon_ids Arg [1] : arrayref of taxon_ids Example : my $ret_tree = $tree->keep_nodes_by_taxon_ids($taxon_ids); Description : Returns the tree with kept nodes in taxon_id list. Returntype : Bio::EnsEMBL::Compara::GeneTreeNode object Exceptions : Caller : general Status : At risk (behaviour on exceptions could change) =cut sub keep_nodes_by_taxon_ids { my $self = shift; my $species_arrayref = shift; my @tax_ids = @{$species_arrayref}; # Turn the arrayref into a hash. my %tax_hash; map {$tax_hash{$_}=1} @tax_ids; my @to_delete; foreach my $leaf (@{$self->get_all_leaves}) { unless (exists $tax_hash{$leaf->taxon_id}) { push @to_delete, $leaf; } } return $self->remove_nodes(\@to_delete); } 1;