annotate variant_effect_predictor/Bio/EnsEMBL/Variation/VariationFeatureOverlap.pm @ 3:d30fa12e4cc5 default tip

Merge heads 2:a5976b2dce6f and 1:09613ce8151e which were created as a result of a recently fixed bug.
author devteam <devteam@galaxyproject.org>
date Mon, 13 Jan 2014 10:38:30 -0500
parents 1f6dce3d34e0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 =head1 LICENSE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 Copyright (c) 1999-2012 The European Bioinformatics Institute and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 Genome Research Limited. All rights reserved.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 This software is distributed under a modified Apache license.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 For license details, please see
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 http://www.ensembl.org/info/about/code_licence.html
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 =head1 CONTACT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 Please email comments or questions to the public Ensembl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14 developers list at <dev@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16 Questions may also be sent to the Ensembl help desk at
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 <helpdesk@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 Bio::EnsEMBL::Variation::VariationFeatureOverlap
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 use Bio::EnsEMBL::Variation::VariationFeatureOverlap;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 my $vfo = Bio::EnsEMBL::Variation::VariationFeatureOverlap->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 -feature => $feature,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 -variation_feature => $var_feat
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 print "consequence type: ", (join ",", @{ $vfo->consequence_type }), "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 print "most severe consequence: ", $vfo->display_consequence, "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 A VariationFeatureOverlap represents a VariationFeature which is in close
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 proximity to another Ensembl Feature. It is the superclass of feature-specific
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 objects such as TranscriptVariation and RegulatoryFeatureVariation, and has
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 methods common to all such objects. You will not normally instantiate this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 class directly, instead instantiating one of the feature-specific subclasses.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 package Bio::EnsEMBL::Variation::VariationFeatureOverlap;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 use warnings;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 use Bio::EnsEMBL::Utils::Scalar qw(assert_ref);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 use Bio::EnsEMBL::Utils::Exception qw(throw warning);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 use Bio::EnsEMBL::Utils::Argument qw(rearrange);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 use Bio::EnsEMBL::Utils::Sequence qw(expand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 use Bio::EnsEMBL::Variation::Utils::Sequence qw(unambiguity_code);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 use Bio::EnsEMBL::Variation::VariationFeatureOverlapAllele;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 use base qw(Bio::EnsEMBL::Variation::BaseVariationFeatureOverlap);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 =head2 new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 Arg [-FEATURE] :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 The Bio::EnsEMBL::Feature associated with the given VariationFeature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 Arg [-VARIATION_FEATURE] :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 The Bio::EnsEMBL::VariationFeature associated with the given Feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 Arg [-ADAPTOR] :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 A Bio::EnsEMBL::Variation::DBSQL::VariationFeatureOverlapAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 Arg [-DISAMBIGUATE_SINGLE_NUCLEOTIDE_ALLELES] :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 A flag indiciating if ambiguous single nucleotide alleles should be disambiguated
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 when constructing the VariationFeatureOverlapAllele objects, e.g. a Variationfeature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 with an allele string like 'T/M' would be treated as if it were 'T/A/C'. We limit
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 ourselves to single nucleotide alleles to avoid the combinatorial explosion if we
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 allowed longer alleles with potentially many ambiguous bases.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 my $vfo = Bio::EnsEMBL::Variation::VariationFeatureOverlap->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 -feature => $feature,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 -variation_feature => $var_feat
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 Description: Constructs a new VariationFeatureOverlap instance given a VariationFeature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 and a Feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 Returntype : A new Bio::EnsEMBL::Variation::VariationFeatureOverlap instance
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 Exceptions : throws unless both VARIATION_FEATURE and FEATURE are supplied, or if the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 supplied ADAPTOR is the wrong class
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 my $class = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 my %args = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 # swap a '-variation_feature' argument for a '-base_variation_feature' one for the superclass
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 for my $arg (keys %args) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 if (lc($arg) eq '-variation_feature') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 $args{'-base_variation_feature'} = delete $args{$arg};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 my $self = $class->SUPER::new(%args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 my (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 $adaptor,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 $ref_feature,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 $disambiguate_sn_alleles,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 $no_ref_check,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 ) = rearrange([qw(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 ADAPTOR
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 REF_FEATURE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 DISAMBIGUATE_SINGLE_NUCLEOTIDE_ALLELES
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 NO_REF_CHECK
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 )], %args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 my $variation_feature = $self->base_variation_feature;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 assert_ref($variation_feature, 'Bio::EnsEMBL::Variation::VariationFeature');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 assert_ref($adaptor, 'Bio::EnsEMBL::Variation::DBSQL::VariationFeatureOverlapAdaptor') if $adaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 $ref_feature ||= $variation_feature->slice;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 $self->{adaptor} = $adaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 $self->{ref_feature} = $ref_feature;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 my $ref_allele;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 # we take the reference allele sequence from the reference sequence, not from the allele string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 unless($no_ref_check) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 $ref_allele = $ref_feature->subseq(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 $variation_feature->start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 $variation_feature->end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 $variation_feature->strand
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 # get the variation feature allele string, expand it, and split it into separate alleles
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 my $allele_string = $variation_feature->allele_string;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 expand(\$allele_string);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 my @alleles = split /\//, $allele_string;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 $ref_allele = $alleles[0] if $no_ref_check;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 $ref_allele = '-' unless $ref_allele;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 if ($disambiguate_sn_alleles) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 # if this flag is set, disambiguate any ambiguous single nucleotide alleles, so
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 # e.g. an allele string like T/M would be equivalent to an allele string of T/A/C
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 # we only do this for single nucleotide alleles to avoid the combinatorial explosion
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 # of long allele strings with potentially many ambiguous bases (because ensembl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 # genomes want this functionality)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 my @possible_alleles;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 for my $allele (@alleles) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 if ($allele !~ /^[ACGT-]+$/ && length($allele) == 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 for my $possible ( split //, unambiguity_code($allele) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 push @possible_alleles, $possible;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 # the allele is either unambiguous or longer than 1 nucleotide, so add it unaltered
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 push @possible_alleles, $allele;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 @alleles = @possible_alleles;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 # make sure the alleles are unique
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 # we also want to deal with alleles like (T)0 which expand into
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 # an empty string and we want to treat this as a deletion, so
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 # we replace
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 # any empty strings with '-'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 @alleles = keys %{ { map { ($_ || '-') => 1 } @alleles } };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 # create an object representing the reference allele
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 my $ref_vfoa = Bio::EnsEMBL::Variation::VariationFeatureOverlapAllele->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 -variation_feature_overlap => $self,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 -variation_feature_seq => $ref_allele,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 -is_reference => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 $self->add_VariationFeatureOverlapAllele($ref_vfoa);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 # create objects representing the alternate alleles
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 for my $allele (@alleles) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 next if $allele eq $ref_allele;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 my $vfoa = Bio::EnsEMBL::Variation::VariationFeatureOverlapAllele->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 -variation_feature_overlap => $self,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 -variation_feature_seq => $allele,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 -is_reference => 0,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 $self->add_VariationFeatureOverlapAllele($vfoa);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 return $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 sub new_fast {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 my ($class, $hashref) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 # swap a variation_feature argument for a base_variation_feature one
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 if ($hashref->{variation_feature}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 $hashref->{base_variation_feature} = delete $hashref->{variation_feature};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 return $class->SUPER::new_fast($hashref);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 sub dbID {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 unless ($self->{dbID}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 # we don't really have a dbID, so concatenate all the dbIDs of our alleles
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 $self->{dbID} = join '_', map { $_->dbID } @{ $self->get_all_alternate_VariationFeatureOverlapAlleles };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 return $self->{dbID};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 =head2 variation_feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 Arg [1] : (optional) A Bio::EnsEMBL::Variation::VariationFeature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 Description: Get/set the associated VariationFeature, lazy-loading it if required
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 Returntype : Bio::EnsEMBL::Variation::VariationFeature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 Exceptions : throws if the argument is the wrong type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 sub variation_feature {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 my ($self, $variation_feature) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 if ($variation_feature) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 assert_ref($variation_feature, 'Bio::EnsEMBL::Variation::VariationFeature');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 $self->base_variation_feature($variation_feature);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 if (my $vf_id = $self->{_variation_feature_id}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 # lazy-load the VariationFeature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 if (my $adap = $self->{adaptor}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 if (my $vfa = $adap->db->get_VariationFeatureAdaptor) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 if (my $vf = $vfa->fetch_by_dbID($vf_id)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 $self->base_variation_feature($vf);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 delete $self->{_variation_feature_id};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 return $self->base_variation_feature;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 sub _variation_feature_id {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 # get the dbID of the variation feature, using the VariationFeature object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 # if we have one, or the internal hash value if we don't
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 if (my $vf = $self->{variation_feature}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 return $vf->dbID;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 elsif (my $id = $self->{_variation_feature_id}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 return $id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 return undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 sub get_VariationFeatureOverlapAllele_for_allele_seq {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 my ($self, $allele_seq) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 return $self->{_alleles_by_seq}->{$allele_seq};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 =head2 add_VariationFeatureOverlapAllele
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 Arg [1] : A Bio::EnsEMBL::Variation::VariationFeatureOverlapAllele instance
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 Description: Add an allele to this VariationFeatureOverlap
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 Returntype : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 Exceptions : throws if the argument is not the expected type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 sub add_VariationFeatureOverlapAllele {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 my ($self, $vfoa) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 assert_ref($vfoa, 'Bio::EnsEMBL::Variation::VariationFeatureOverlapAllele');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 $self->add_BaseVariationFeatureOverlapAllele($vfoa);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 $self->{_alleles_by_seq}->{ $vfoa->variation_feature_seq } = $vfoa;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 =head2 get_reference_VariationFeatureOverlapAllele
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 Description: Get the object representing the reference allele of this VariationFeatureOverlapAllele
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 Returntype : Bio::EnsEMBL::Variation::VariationFeatureOverlapAllele instance
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 sub get_reference_VariationFeatureOverlapAllele {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 return $self->get_reference_BaseVariationFeatureOverlapAllele(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 =head2 get_all_alternate_VariationFeatureOverlapAlleles
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 Description: Get a list of the alternate alleles of this VariationFeatureOverlapAllele
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 Returntype : listref of Bio::EnsEMBL::Variation::VariationFeatureOverlapAllele objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 sub get_all_alternate_VariationFeatureOverlapAlleles {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 return $self->get_all_alternate_BaseVariationFeatureOverlapAlleles(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 =head2 get_all_VariationFeatureOverlapAlleles
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 Description: Get a list of the all the alleles, both reference and alternate, of this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 VariationFeatureOverlap
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 Returntype : listref of Bio::EnsEMBL::Variation::VariationFeatureOverlapAllele objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 sub get_all_VariationFeatureOverlapAlleles {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 return $self->get_all_BaseVariationFeatureOverlapAlleles(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 sub _convert_to_sara {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 my $ref_allele = $self->{reference_allele};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 $ref_allele->_convert_to_sara;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 $self->{alt_alleles} = [$ref_allele];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 sub _rearrange_alleles {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 my $keep_alleles = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 # fix alt alleles
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376 my $alt_alleles = $self->{alt_alleles};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 my @new_alleles = grep {$keep_alleles->{$_->variation_feature_seq}} @$alt_alleles;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378 $self->{alt_alleles} = scalar @new_alleles ? \@new_alleles : $alt_alleles;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 # copy to ref allele if homozygous non-ref
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 $self->{reference_allele} = $self->{alt_alleles}->[0] if scalar keys %$keep_alleles == 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 1;