Mercurial > repos > willmclaren > ensembl_vep
diff variant_effect_predictor/Bio/EnsEMBL/Variation/VariationSet.pm @ 0:21066c0abaf5 draft
Uploaded
author | willmclaren |
---|---|
date | Fri, 03 Aug 2012 10:04:48 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/variant_effect_predictor/Bio/EnsEMBL/Variation/VariationSet.pm Fri Aug 03 10:04:48 2012 -0400 @@ -0,0 +1,410 @@ +=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>. + +=cut + +# Ensembl module for Bio::EnsEMBL::Variation::VariationSet +# +# Copyright (c) 2010 Ensembl +# + +=head1 NAME + +Bio::EnsEMBL::Variation::VariationSet - Ensembl representation of a set of +variations. + +=head1 SYNOPSIS + + use Bio::EnsEMBL::Variation::VariationSet; + + ... + + + +=head1 DESCRIPTION + +This is a class representing a set of variations that are grouped by e.g. +study, method, quality measure etc. + +=head1 METHODS + +=cut + + +use strict; +use warnings; + +package Bio::EnsEMBL::Variation::VariationSet; + +use Bio::EnsEMBL::Storable; +use Bio::EnsEMBL::Utils::Argument qw(rearrange); +use Bio::EnsEMBL::Utils::Exception qw(throw deprecate warning); +use Bio::EnsEMBL::Utils::Iterator; + +use vars qw(@ISA); + +@ISA = qw(Bio::EnsEMBL::Storable); + + +=head2 new + + Arg [dbID] : + int - unique internal identifier for this allele group + + Arg [ADAPTOR] : + Bio::EnsEMBL::Variation::DBSQL::VariationSetAdaptor + + Arg [NAME] : + string - the name of this variation set + + Arg [DESCRIPTION] : + string - A description explaining the charcteristics of this variation set + + Arg [SHORT_NAME] : + string - the short name of this variation set + + Example : + $ag = Bio::EnsEMBL::Variation::VariationSet->new + ( + -dbID => 12, + -adaptor => $var_set_adaptor, + -name => 'Phenotype-associated variations', + -description => 'Variations that have been associated with a phenotype', + -short_name => 'ph_variants' + ); + Description: Constructor. Instantiates a new VariationSet + Returntype : Bio::EnsEMBL::Variation::VariationSet + Exceptions : none + Caller : general + Status : At Risk + +=cut + +sub new { + my $class = shift; + + my ($dbID, $adaptor, $name, $description, $short_name) = + rearrange([qw(DBID ADAPTOR NAME DESCRIPTION SHORT_NAME)], @_); + + # Check that the dbID does not exceed the maximum dbID that can be stored in the variation_set_id SET construct in variation_set_variation + warn("Primary key variation_set_id $dbID for variation set '$name' exceeds " . $Bio::EnsEMBL::Variation::DBSQL::VariationSetAdaptor::MAX_VARIATION_SET_ID . ". Therefore, this variation set cannot be properly referenced in variation_set_variation") if ($dbID > $Bio::EnsEMBL::Variation::DBSQL::VariationSetAdaptor::MAX_VARIATION_SET_ID); + + return bless {'dbID' => $dbID, + 'adaptor' => $adaptor, + 'name' => $name, + 'description' => $description, + 'short_name' => $short_name}, $class; +} + +=head2 description + + Arg [1] : string $description + Example : print $vs->description(); + Description: Getter/Setter for the description of this VariationSet + Returntype : string + Exceptions : none + Caller : general + Status : At Risk + +=cut + +sub description { + my $self = shift; + my $desc = shift; + + $self->{'description'} = $desc if (defined($desc)); + + return $self->{'description'}; +} + +=head2 get_all_sub_VariationSets + Arg [1] : (optional) boolean $only_immediate + If true, will only get the direct subsets of this variation. The default behaviour is + to recursively get all subsets. + Example : print $vs->get_all_sub_VariationSets(); + Description: Recursively gets all variation sets that are subsets of this variation set. + Returntype : reference to list of Bio::EnsEMBL::Variation::VariationSet + Exceptions : none + Caller : general + Status : At Risk + +=cut + +sub get_all_sub_VariationSets { + my $self = shift; + my $only_immediate = shift; + + # A database adaptor must be attached to this object + if(!$self->adaptor()) { + warning('Cannot get sub variation sets without attached adaptor'); + return []; + } + + return $self->adaptor->fetch_all_by_super_VariationSet($self,$only_immediate); +} + +=head2 get_all_super_VariationSets + Arg [1] : (optional) boolean $only_immediate + If true, will only get the direct supersets of this variation. The default behaviour is + to recursively get all supersets. + Example : print $vs->get_all_super_VariationSets(); + Description: Recursively gets all variation sets that are above this variation set. + Returntype : reference to list of Bio::EnsEMBL::Variation::VariationSet + Exceptions : none + Caller : general + Status : At Risk + +=cut + +sub get_all_super_VariationSets { + my $self = shift; + my $only_immediate = shift; + + # A database adaptor must be attached to this object + if(!$self->adaptor()) { + warning('Cannot get super variation sets without attached adaptor'); + return []; + } + + return $self->adaptor->fetch_all_by_sub_VariationSet($self,$only_immediate); +} + +=head2 get_all_Variations + + Example : print $vs->get_all_Variations(); + Description: Gets all variations belonging to this variation set and all of its subsets. + Returntype : reference to list of Bio::EnsEMBL::Variation::Variation + Exceptions : none + Caller : general + Status : At Risk + +=cut + +sub get_all_Variations { + my $self = shift; + + # A database adaptor must be attached to this object + if(!$self->adaptor()) { + warning('Cannot get variations without attached adaptor'); + return []; + } + + # Call the method in VariationAdaptor that will handle this + my $variation_adaptor = $self->adaptor->db->get_VariationAdaptor(); + if(!$variation_adaptor) { + warning('Could not get variation adaptor from database'); + return []; + } + + # Get all variations from this set (and its subsets) + return $variation_adaptor->fetch_all_by_VariationSet($self); +} + + +=head2 get_all_StructuralVariations + + Example : print $vs->get_all_StructuralVariations(); + Description: Gets all structural variations belonging to this variation set and all of its subsets. + Returntype : reference to list of Bio::EnsEMBL::Variation::StructuralVariation + Exceptions : none + Caller : general + Status : At Risk + +=cut + +sub get_all_StructuralVariations { + my $self = shift; + + # A database adaptor must be attached to this object + if(!$self->adaptor()) { + warning('Cannot get structural variations without attached adaptor'); + return []; + } + + # Call the method in StructuralVariationAdaptor that will handle this + my $sv_adaptor = $self->adaptor->db->get_StructuralVariationAdaptor(); + if(!$sv_adaptor) { + warning('Could not get structural variation adaptor from database'); + return []; + } + + # Get all variations from this set (and its subsets) + return $sv_adaptor->fetch_all_by_VariationSet($self); +} + + +=head2 get_Variation_Iterator + + Example : my $var_iterator = $vs->get_Variation_Iterator; + Description: Gets an iterator over all variations belonging to this + variation set and all of its subsets. + Returntype : Bio::EnsEMBL::Utils::Iterator + Exceptions : none + Caller : general + Status : Experimental + +=cut + +sub get_Variation_Iterator { + my $self = shift; + + # A database adaptor must be attached to this object + unless ($self->adaptor) { + warning('Cannot get variations without attached adaptor'); + return Bio::EnsEMBL::Utils::Iterator->new; + } + + # Call the method in VariationAdaptor that will handle this + my $variation_adaptor = $self->adaptor->db->get_VariationAdaptor(); + + unless ($variation_adaptor) { + warning('Could not get variation adaptor from database'); + return Bio::EnsEMBL::Utils::Iterator->new; + } + + # Get an iterator over variations from this set (and its subsets) + return $variation_adaptor->fetch_Iterator_by_VariationSet($self); +} + + +=head2 get_StructuralVariation_Iterator + + Example : my $sv_iterator = $vs->get_StructuralVariation_Iterator; + Description: Gets an iterator over all structural variations belonging to this + variation set and all of its subsets. + Returntype : Bio::EnsEMBL::Utils::Iterator + Exceptions : none + Caller : general + Status : Experimental + +=cut + +sub get_StructuralVariation_Iterator { + my $self = shift; + + # A database adaptor must be attached to this object + unless ($self->adaptor) { + warning('Cannot get structural variations without attached adaptor'); + return Bio::EnsEMBL::Utils::Iterator->new; + } + + # Call the method in StructuralVariationAdaptor that will handle this + my $sv_adaptor = $self->adaptor->db->get_StructuralVariationAdaptor(); + + unless ($sv_adaptor) { + warning('Could not get dructural variation adaptor from database'); + return Bio::EnsEMBL::Utils::Iterator->new; + } + + # Get an iterator over Structural variations from this set (and its subsets) + return $sv_adaptor->fetch_Iterator_by_VariationSet($self); +} + + +=head2 get_all_VariationFeatures_by_Slice + + Arg [1] : Bio::EnsEMBL:Variation::Slice $slice + Example : my @vfs = +@{$vs->get_all_VariationFeatures_by_Slice($slice)}; + Description: Retrieves all variation features in a slice that belong to + this set. + Returntype : reference to list Bio::EnsEMBL::Variation::VariationFeature + Exceptions : throw on bad argument + Caller : general + Status : Stable + +=cut + +sub get_all_VariationFeatures_by_Slice { + my $self = shift; + my $slice = shift; + + if(!$self->adaptor()) { + warning('Cannot get variation features without attached adaptor'); + return []; + } + + my $vfa = $self->adaptor->db->get_VariationFeatureAdaptor(); + if(!$vfa) { + warning('Could not get variation feature adaptor from database'); + return []; + } + return $vfa->fetch_all_by_Slice_VariationSet($slice,$self); +} + +=head2 name + + Arg [1] : string $name + Example : print $vs->name(); + Description: Getter/Setter for the name of this VariationSet + Returntype : string + Exceptions : none + Caller : general + Status : At Risk + +=cut + +sub name { + my $self = shift; + my $name = shift; + + $self->{'name'} = $name if (defined($name)); + + return $self->{'name'}; +} + +=head2 short_name + + Arg [1] : string $short_name + Example : print $vs->short_name(); + Description: Getter/Setter for the short name of this VariationSet + Returntype : string + Exceptions : none + Caller : general + +=cut + +sub short_name { + my $self = shift; + my $short_name = shift; + + $self->{'short_name'} = $short_name if (defined($short_name)); + + return $self->{'short_name'}; +} + +# API-internal subroutine to get the bitvalue of this set's id and all of its subsets (unless specifically indicated not to) +sub _get_bitvalue { + my $self = shift; + my @args = @_; + + # If the subsets should be exluded, call the subroutine in the adaptor and return the result. No caching. + if (@args) { + return $self->adaptor->_get_bitvalue($self,@args); + } + + # Check if we have cached the bitvalue (including subsets), otherwise get it and cache it + unless (exists($self->{'_bitvalue'})) { + $self->{'_bitvalue'} = $self->adaptor->_get_bitvalue($self); + } + + # Return the cached value + return $self->{'_bitvalue'}; +} + +1;