diff variant_effect_predictor/Bio/EnsEMBL/Variation/ExternalFeatureVariation.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/ExternalFeatureVariation.pm	Fri Aug 03 10:04:48 2012 -0400
@@ -0,0 +1,115 @@
+=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
+
+package Bio::EnsEMBL::Variation::ExternalFeatureVariation;
+
+use strict;
+use warnings;
+
+use Bio::EnsEMBL::Variation::ExternalFeatureVariationAllele;
+use Bio::EnsEMBL::Variation::Utils::VariationEffect qw(overlap);
+
+use base qw(Bio::EnsEMBL::Variation::RegulationVariation);
+
+sub new {
+    my $class = shift;
+
+    my %args = @_;
+
+    # swap a '-external_feature' argument for a '-feature' one for the superclass
+
+    for my $arg (keys %args) {
+        if (lc($arg) eq '-external_feature') {
+            $args{'-feature'} = delete $args{$arg};
+        }
+    }   
+
+    # call the superclass constructor
+    my $self = $class->SUPER::new(%args) || return undef;
+    
+    # rebless the alleles from vfoas to efvas
+    map { bless $_, 'Bio::EnsEMBL::Variation::ExternalFeatureVariationAllele' } 
+        @{ $self->get_all_ExternalFeatureVariationAlleles };
+    
+    return $self;
+}
+
+sub external_feature_stable_id {
+    my $self = shift;
+    return $self->SUPER::feature_stable_id(@_);
+}
+
+sub external_feature {
+    my ($self, $ef) = @_;
+    return $self->SUPER::feature($ef, 'ExternalFeature');
+}
+
+sub add_ExternalFeatureVariationAllele {
+    my $self = shift;
+    return $self->SUPER::add_VariationFeatureOverlapAllele(@_);
+}
+
+sub get_reference_ExternalFeatureVariationAllele {
+    my $self = shift;
+    return $self->SUPER::get_reference_VariationFeatureOverlapAllele(@_);
+}
+
+sub get_all_alternate_ExternalFeatureVariationAlleles {
+    my $self = shift;
+    return $self->SUPER::get_all_alternate_VariationFeatureOverlapAlleles(@_);
+}
+
+sub get_all_ExternalFeatureVariationAlleles {
+    my $self = shift;
+    return $self->SUPER::get_all_VariationFeatureOverlapAlleles(@_);
+}
+
+sub target_feature_stable_id {
+    my ($self, $target_feature_stable_id) = @_;
+    
+    $self->{target_feature_stable_id} = $target_feature_stable_id if $target_feature_stable_id;
+    
+    unless ($self->{target_feature_stable_id}) {
+        
+        # try to fetch it from the funcgen database
+
+        if (my $species = $self->{adaptor}->db->species) {
+            for my $entry (
+                @{ $self->external_feature->get_all_DBEntries($species.'_core_Transcript') }, 
+                @{ $self->external_feature->get_all_DBEntries($species.'_core_Gene') } ) {
+                if (my $id = $entry->primary_id) {
+
+                    $self->{target_feature_stable_id} = $id;
+
+                    # there should never be more than one, so we last out of the loop
+                    
+                    last;
+                }
+            }
+        }
+        else {
+            warn "Failed to get species from adaptor";
+        }
+    }
+    
+    return $self->{target_feature_stable_id};
+}
+
+1;