diff variant_effect_predictor/Bio/EnsEMBL/Variation/OverlapConsequence.pm @ 0:1f6dce3d34e0

Uploaded
author mahtabm
date Thu, 11 Apr 2013 02:01:53 -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/OverlapConsequence.pm	Thu Apr 11 02:01:53 2013 -0400
@@ -0,0 +1,436 @@
+=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
+
+=head1 NAME
+
+Bio::EnsEMBL::Variation::OverlapConsequence
+
+=head1 SYNOPSIS
+
+    use Bio::EnsEMBL::Variation::OverlapConsequence;
+    
+    my $oc = Bio::EnsEMBL::Variation::OverlapConsequence->new(
+        -display_term       => 'NON_SYNONYMOUS_CODING',
+        -SO_term            => 'non_synonymous_codon',
+        -SO_accession       => 'SO:0001583',
+        -NCBI_term          => 'missense',
+        -feature_SO_term    => 'mRNA',
+        -description        => 'In coding sequence and results in an amino acid change in the encoded peptide sequence',
+        -predicate          => 'Bio::EnsEMBL::Variation::Utils::VariationEffect::non_synonymous_codon',
+        -label              => 'Non-synonymous coding',
+        -rank               => 7,
+        -feature_class      => 'Bio::EnsEMBL::Transcript',
+    );
+
+    if ($oc->predicate($transcript_variation_allele)) {
+        print "This allele is: ", $oc->display_term, "\n";
+    }
+
+=head1 DESCRIPTION
+
+An OverlapConsequence represents the consequence of an allele of a VariationFeature overlapping
+some other Ensembl Feature (and therefore applies to VariationFeatureOverlapAllele objects as these
+represent just such an event). It contains various values that represent the consequence type, such
+as the Sequence Ontology (SO) term and accession (which should always be unique), the Ensembl
+display_term (which will not always be unique), the relative rank of this consequence when compared 
+to other consequences etc. It also contains a reference to a subroutine, referred to as the 
+'predicate', which if a called with a VariationFeatureOverlapAllele (or a subclass) as the first and
+only argument, will return a true or false value if this consequence type applies to this allele.
+
+The list of OverlapConsequences used by Ensembl is defined in the Bio::EnsEMBL::Variation::Utils::Constants
+module, and can be imported from there.
+
+=cut
+
+package Bio::EnsEMBL::Variation::OverlapConsequence;
+
+use strict;
+use warnings;
+
+use Bio::EnsEMBL::Utils::Exception qw(throw);
+use Bio::EnsEMBL::Utils::Argument qw(rearrange);
+use Bio::EnsEMBL::Variation::Utils::VariationEffect;
+
+=head2 new
+    
+  Arg [-SO_ACCESSION] : 
+    The Sequence Ontology accession for this consequence type
+  
+  Arg [-SO_TERM] : 
+    The Sequence Ontology term for this consequence type
+  
+  Arg [-FEATURE_SO_TERM] : 
+    The Sequence Ontology term for the feature affected by this consequence type
+  
+  Arg [-FEATURE_CLASS] : 
+    The Ensembl class that represents the feature affected by this consequence type
+
+  Arg [-VARIANT_FEATURE_CLASS] : 
+    The Ensembl class that represents the variation feature this consequence applies to  
+  
+  Arg [-PREDICATE] : 
+    A reference to a subroutine that checks if this consequence type holds for
+    a given VariationFeatureOverlapAllele (or the name of such a subroutine)
+  
+  Arg [-RANK] : 
+    The relative rank of this consequence type when compred to other OverlapConsequence
+    objects
+  
+  Arg [-DISPLAY_TERM] : 
+    The Ensembl display term for this consequence type (used by default on the website)
+
+  Arg [-NCBI_TERM] : 
+    The NCBI term for this consequence type
+  
+  Arg [-DESCRIPTION] : 
+    A freetext description of this consequence type (used on the website)
+  
+  Arg [-LABEL] : 
+    A freetext label briefly describing this consequence type (used on the website)
+  
+  Arg [-IS_DEFAULT] : 
+    A flag indicating if this is the default consequence type used when none other applies
+    (in Ensembl this currently set on the intergenic OverlapConsequence)
+  
+  Example : 
+    my $oc = Bio::EnsEMBL::Variation::OverlapConsequence->new(
+        -display_term       => 'NON_SYNONYMOUS_CODING',
+        -SO_term            => 'non_synonymous_codon',
+        -SO_accession       => 'SO:0001583',
+        -NCBI_term          => 'missense',
+        -feature_SO_term    => 'mRNA',
+        -description        => 'In coding sequence and results in an amino acid change in the encoded peptide sequence',
+        -predicate          => 'Bio::EnsEMBL::Variation::Utils::VariationEffect::non_synonymous_codon',
+        -label              => 'Non-synonymous coding',
+        -rank               => 7,
+        -tier               => 1,
+        -feature_class      => 'Bio::EnsEMBL::Transcript',
+    );
+  
+  Description: Constructs a new OverlapConsequence instance
+  Returntype : A new Bio::EnsEMBL::Variation::OverlapConsequence instance 
+  Exceptions : none
+  Status     : At Risk
+
+=cut 
+
+sub new {
+    my $class = shift;
+    
+    my (
+        $SO_accession,
+        $SO_term,
+        $feature_SO_term,
+        $feature_class,
+        $variant_feature_class,
+        $predicate,
+        $rank,
+        $tier,
+        $display_term,
+        $NCBI_term,
+        $description,
+        $label,
+        $is_default,
+    ) = rearrange([qw(
+            SO_ACCESSION
+            SO_TERM
+            FEATURE_SO_TERM
+            FEATURE_CLASS
+            VARIANT_FEATURE_CLASS
+            PREDICATE
+            RANK
+            TIER
+            DISPLAY_TERM
+            NCBI_TERM
+            DESCRIPTION
+            LABEL
+            IS_DEFAULT
+        )], @_);
+
+    my $self = bless {
+        SO_accession            => $SO_accession,
+        SO_term                 => $SO_term,
+        feature_SO_term         => $feature_SO_term,
+        feature_class           => $feature_class,
+        variant_feature_class   => $variant_feature_class,
+        predicate               => $predicate,
+        rank                    => $rank,
+        tier                    => $tier,
+        display_term            => $display_term,
+        NCBI_term               => $NCBI_term,
+        description             => $description,
+        label                   => $label,
+        is_default              => $is_default,
+    }, $class;
+
+    return $self;
+}
+
+sub new_fast {
+    my ($class, $hashref) = @_;
+    return bless $hashref, $class;
+}
+
+=head2 SO_accession
+
+  Arg [1]    : (optional) accession to set
+  Description: Get/set the Sequence Ontology accession for this consequence type
+  Returntype : string
+  Exceptions : none
+  Status     : At Risk
+
+=cut
+
+sub SO_accession {
+    my ($self, $SO_accession) = @_;
+    $self->{SO_accession} = $SO_accession if $SO_accession;
+    return $self->{SO_accession};
+}
+
+=head2 SO_term
+
+  Arg [1]    : (optional) term to set
+  Description: Get/set the Sequence Ontology term for this consequence type
+  Returntype : string
+  Exceptions : none
+  Status     : At Risk
+
+=cut
+
+sub SO_term {
+    my ($self, $SO_term) = @_;
+    $self->{SO_term} = $SO_term if $SO_term;
+    return $self->{SO_term};
+}
+
+=head2 feature_SO_term
+
+  Arg [1]    : (optional) term to set
+  Description: Get/set the Sequence Ontology term for the feature affected by this consequence type
+  Returntype : string
+  Exceptions : none
+  Status     : At Risk
+
+=cut
+
+sub feature_SO_term {
+    my ($self, $feature_SO_term) = @_;
+    $self->{feature_SO_term} = $feature_SO_term if $feature_SO_term;
+    return $self->{feature_SO_term};
+}
+
+=head2 feature_class
+
+  Arg [1]    : (optional) class to set
+  Description: Get/set the Ensembl class representing the feature affected by this consequence type
+  Returntype : string
+  Exceptions : none
+  Status     : At Risk
+
+=cut
+
+sub feature_class {
+    my ($self, $feature_class) = @_;
+    $self->{feature_class} = $feature_class if $feature_class;
+    return $self->{feature_class} || '';
+}
+
+=head2 predicate
+
+  Arg [1]    : (optional) reference to subroutine (or the name of a subroutine)
+  Description: Get/set the predicate used to check if this consequence type applies 
+               to a given VariationFeatureOverlapAllele. Currently, if you supply 
+               a name (rather than a coderef), this subroutine must be found in the
+               Bio::EnsEMBL::Variation::Utils::VariationEffect module.
+  Returntype : coderef
+  Exceptions : throws if a name is supplied and the subroutine cannot be found in 
+               the expected module
+  Status     : At Risk
+
+=cut
+ 
+sub predicate {
+    my ($self, $predicate) = @_;
+    
+    $self->{predicate} = $predicate if $predicate;
+    
+    if ($self->{predicate} && ref $self->{predicate} ne 'CODE') {
+        my $name = $self->{predicate};
+
+        if (defined &$name && $name =~ /^Bio::EnsEMBL::Variation::Utils::VariationEffect/) {
+            $self->{predicate} = \&$name;
+        }
+        else {
+            throw("Can't find a subroutine called $name in the VariationEffect module?");
+        }
+    }
+    
+    return $self->{predicate};
+}
+
+=head2 rank
+
+  Arg [1]    : (optional) rank to set
+  Description: Get/set the relative rank of this OverlapConsequence when compared to other
+               OverlapConsequence objects. This is used, for example, to determine the most 
+               severe consequence of a VariationFeature. 
+  Returntype : integer
+  Exceptions : none
+  Status     : At Risk
+
+=cut
+
+sub rank {
+    my ($self, $rank) = @_;
+    $self->{rank} = $rank if $rank;
+    return $self->{rank};
+}
+
+=head2 tier
+
+  Arg [1]    : (optional) tier to set
+  Description: Get/set the tier this OverlapConsequence belongs to. Variations will be
+               assigned consequences in tier order; if a tier 1 consequence is assigned,
+               no tier 2 consequences will be checked/assigned. 
+  Returntype : integer
+  Exceptions : none
+  Status     : At Risk
+
+=cut
+
+sub tier {
+    my ($self, $tier) = @_;
+    $self->{tier} = $tier if $tier;
+    return $self->{tier};
+}
+
+
+=head2 display_term
+
+  Arg [1]    : (optional) term to set
+  Description: Get/set the Ensembl display term for this consequence type. This is
+               used by default on the website.
+  Returntype : string
+  Exceptions : none
+  Status     : At Risk
+
+=cut
+
+sub display_term {
+    my ($self, $display_term) = @_;
+    $self->{display_term} = $display_term if $display_term;
+    return $self->{display_term} || $self->SO_term;
+}
+
+=head2 NCBI_term
+
+  Arg [1]    : (optional) term to set
+  Description: Get/set the NCBI term for this consequence type
+  Returntype : string
+  Exceptions : none
+  Status     : At Risk
+
+=cut
+
+sub NCBI_term {
+    my ($self, $NCBI_term) = @_;
+    $self->{NCBI_term} = $NCBI_term if $NCBI_term;
+    return $self->{NCBI_term} || $self->SO_term;
+}
+
+=head2 description
+
+  Arg [1]    : (optional) description to set
+  Description: Get/set the description for this consequence type. This is used on the
+               website and is intended to be a freetext description of this consequence.
+  Returntype : string
+  Exceptions : none
+  Status     : At Risk
+
+=cut
+
+sub description {
+    my ($self, $description) = @_;
+    $self->{description} = $description if $description;
+    return $self->{description};
+}
+
+=head2 label
+
+  Arg [1]    : (optional) label to set
+  Description: Get/set the label for this consequence type. This is used on the
+               website and is intended to be a short description of this consequence.
+  Returntype : string
+  Exceptions : none
+  Status     : At Risk
+
+=cut
+
+sub label {
+    my ($self, $label) = @_;
+    $self->{label} = $label if $label;
+    return $self->{label};
+}
+
+=head2 variant_feature_class
+
+  Arg [1]    : (optional) class as a atring
+  Description: Get/set the class of variant features that this consequence can apply to
+  Returntype : string
+  Exceptions : none
+  Status     : At Risk
+
+=cut
+
+sub variant_feature_class {
+    my ($self, $class) = @_;
+    $self->{variant_feature_class} = $class if $class;
+    return $self->{variant_feature_class};
+}
+
+=head2 is_default
+
+  Arg [1]    : (optional) flag
+  Description: Get/set a flag indicating if this is the default consequence type.
+               There should only be one default OverlapConsequence, in Ensembl this
+               flag is only set on the INTERGENIC OverlapConsequence object.
+  Returntype : bool
+  Exceptions : none
+  Status     : At Risk
+
+=cut
+
+sub is_default {
+    my ($self, $is_default) = @_;
+    $self->{is_default} = $is_default if defined $is_default;
+    return $self->{is_default};
+}
+
+sub get_all_parent_SO_terms {
+    my ($self) = @_;
+    
+    if (my $adap = $self->{adaptor}) {
+        if (my $goa = $adap->db->get_SOTermAdaptor) {
+            
+        }
+    }
+}
+
+1;