annotate variant_effect_predictor/Bio/EnsEMBL/Variation/BaseVariationFeatureOverlap.pm @ 1:d6778b5d8382 draft default tip

Deleted selected files
author willmclaren
date Fri, 03 Aug 2012 10:05:43 -0400
parents 21066c0abaf5
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1 =head1 LICENSE
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
3 Copyright (c) 1999-2012 The European Bioinformatics Institute and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
4 Genome Research Limited. All rights reserved.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
5
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
6 This software is distributed under a modified Apache license.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
7 For license details, please see
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
8
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
9 http://www.ensembl.org/info/about/code_licence.html
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
10
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
11 =head1 CONTACT
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
12
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
13 Please email comments or questions to the public Ensembl
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
14 developers list at <dev@ensembl.org>.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
15
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
16 Questions may also be sent to the Ensembl help desk at
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
17 <helpdesk@ensembl.org>.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
18
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
19 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
20
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
21 =head1 NAME
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
22
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
23 Bio::EnsEMBL::Variation::BaseVariationFeatureOverlap
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
24
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
25 =head1 SYNOPSIS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
26
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
27 use Bio::EnsEMBL::Variation::BaseVariationFeatureOverlap;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
28
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
29 my $bvfo = Bio::EnsEMBL::Variation::BaseVariationFeatureOverlap->new(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
30 -feature => $feature,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
31 -base_variation_feature => $var_feat
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
32 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
33
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
34 print "consequence type: ", (join ",", @{ $bvfo->consequence_type }), "\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
35 print "most severe consequence: ", $bvfo->display_consequence, "\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
36
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
37 =head1 DESCRIPTION
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
38
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
39 A BaseVariationFeatureOverlap represents a BaseVariationFeature which is in close
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
40 proximity to another Ensembl Feature. It is the superclass of variation feature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
41 specific classes such as VariationFeatureOverlap and StructuralVariationOverlap
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
42 and has methods common to all such objects. You will not normally instantiate this
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
43 class directly, instead instantiating one of the more specific subclasses.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
44
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
45 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
46
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
47 package Bio::EnsEMBL::Variation::BaseVariationFeatureOverlap;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
48
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
49 use strict;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
50 use warnings;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
51
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
52 use Bio::EnsEMBL::Utils::Argument qw(rearrange);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
53 use Bio::EnsEMBL::Utils::Scalar qw(assert_ref);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
54 use Bio::EnsEMBL::Utils::Exception qw(throw warning);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
55 use Bio::EnsEMBL::Variation::Utils::VariationEffect qw(overlap within_cds);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
56
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
57 sub new {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
58 my $class = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
59
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
60 my (
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
61 $adaptor,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
62 $base_variation_feature,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
63 $feature,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
64 $no_transfer
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
65 ) = rearrange([qw(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
66 ADAPTOR
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
67 BASE_VARIATION_FEATURE
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
68 FEATURE
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
69 NO_TRANSFER
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
70 )], @_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
71
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
72 assert_ref($base_variation_feature, 'Bio::EnsEMBL::Variation::BaseVariationFeature');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
73
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
74 if (defined $feature) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
75
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
76 assert_ref($feature, 'Bio::EnsEMBL::Feature');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
77
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
78 # we need to ensure the Feature and the BaseVariationFeature live on the same slice
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
79 # so we explicitly transfer the Feature here
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
80 unless($no_transfer && $no_transfer == 1) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
81 $feature = $feature->transfer($base_variation_feature->slice)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
82 or throw("Unable to transfer the supplied feature to the same slice as the base variation feature");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
83 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
84 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
85
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
86 my $self = bless {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
87 base_variation_feature => $base_variation_feature,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
88 feature => $feature,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
89 adaptor => $adaptor,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
90 }, $class;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
91
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
92 return $self;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
93 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
94
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
95 sub new_fast {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
96 my ($class, $hashref) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
97 return bless $hashref, $class;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
98 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
99
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
100 =head2 feature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
101
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
102 Arg [1] : (optional) A Bio::EnsEMBL::Feature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
103 Description: Get/set the associated Feature, lazy-loading it if required
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
104 Returntype : Bio::EnsEMBL::Feature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
105 Exceptions : throws isf the argument is the wrong type
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
106 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
107
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
108 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
109
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
110 sub feature {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
111 my ($self, $feature, $type) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
112
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
113 if ($feature) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
114 assert_ref($feature, 'Bio::EnsEMBL::Feature');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
115 $self->{feature} = $feature;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
116 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
117
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
118 if ($type && !$self->{feature}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
119
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
120 # try to lazy load the feature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
121
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
122 if (my $adap = $self->{adaptor}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
123
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
124 my $get_method = 'get_'.$type.'Adaptor';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
125
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
126 # XXX: this can doesn't work because the method is AUTOLOADed, need to rethink this...
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
127 #if ($adap->db->dnadb->can($get_method)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
128 if (my $fa = $adap->db->dnadb->$get_method) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
129
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
130 # if we have a stable id for the feature use that
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
131 if (my $feature_stable_id = $self->{_feature_stable_id}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
132 if (my $f = $fa->fetch_by_stable_id($feature_stable_id)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
133 $self->{feature} = $f;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
134 delete $self->{_feature_stable_id};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
135 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
136 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
137 elsif (my $feature_label = $self->{_feature_label}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
138 # get a slice covering the vf
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
139
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
140 #for my $f ($fa->fetch_all_by_Slice_constraint)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
141 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
142 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
143 #}
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
144 else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
145 warn "Cannot get an adaptor for type: $type";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
146 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
147 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
148 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
149
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
150 return $self->{feature};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
151 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
152
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
153 sub _fetch_feature_for_stable_id {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
154
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
155 # we shouldn't actually need this method as there will apparently
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
156 # soon be core support for fetching any feature by its stable id,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
157 # but I'm waiting for core to add this...
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
158
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
159 my ($self, $feature_stable_id) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
160
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
161 my $type_lookup = {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
162 G => { type => 'Gene', group => 'core' },
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
163 T => { type => 'Transcript', group => 'core' },
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
164 R => { type => 'RegulatoryFeature', group => 'funcgen' },
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
165 };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
166
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
167 if ($feature_stable_id =~ /^ENS[A-Z]*([G|R|T])\d+$/) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
168
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
169 my $type = $type_lookup->{$1}->{type};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
170 my $group = $type_lookup->{$1}->{group};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
171
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
172 if (my $adap = $self->{adaptor}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
173
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
174 my $get_method = 'get_'.$type.'Adaptor';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
175
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
176 if ($adap->db->dnadb->can($get_method)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
177 if (my $fa = $adap->db->dnadb->$get_method) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
178
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
179 # if we have a stable id for the feature use that
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
180 if (my $feature_stable_id = $self->{_feature_stable_id}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
181 if (my $f = $fa->fetch_by_stable_id($feature_stable_id)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
182 $self->{feature} = $f;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
183 delete $self->{_feature_stable_id};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
184 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
185 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
186 elsif (my $feature_label = $self->{_feature_label}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
187 # get a slice covering the vf
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
188
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
189
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
190 #for my $f ($fa->fetch_all_by_Slice_constraint)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
191 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
192 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
193 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
194 else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
195 warn "Cannot get an adaptor for type: $type";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
196 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
197 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
198 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
199 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
200
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
201 sub _fetch_adaptor_for_group {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
202 my ($self, $group) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
203
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
204 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
205
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
206 sub _feature_stable_id {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
207 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
208 if ($self->feature && $self->feature->can('stable_id')) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
209 return $self->feature->stable_id;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
210 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
211 elsif (my $id = $self->{_feature_stable_id}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
212 return $id;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
213 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
214 else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
215 return undef;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
216 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
217 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
218
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
219 =head2 base_variation_feature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
220
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
221 Arg [1] : (optional) A Bio::EnsEMBL::Variation::BaseVariationFeature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
222 Description: Get/set the associated BaseVariationFeature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
223 Returntype : Bio::EnsEMBL::Variation::BaseVariationFeature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
224 Exceptions : throws if the argument is the wrong type
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
225 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
226
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
227 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
228
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
229 sub base_variation_feature {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
230 my ($self, $bvf) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
231
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
232 if ($bvf) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
233 assert_ref($bvf, 'Bio::EnsEMBL::Variation::BaseVariationFeature');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
234 $self->{base_variation_feature} = $bvf;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
235 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
236
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
237 return $self->{base_variation_feature};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
238 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
239
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
240 =head2 add_BaseVariationFeatureOverlapAllele
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
241
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
242 Arg [1] : A Bio::EnsEMBL::Variation::BaseVariationFeatureOverlapAllele instance
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
243 Description: Add an allele to this BaseVariationFeatureOverlap
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
244 Returntype : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
245 Exceptions : throws if the argument is not the expected type
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
246 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
247
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
248 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
249
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
250 sub add_BaseVariationFeatureOverlapAllele {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
251 my ($self, $bvfoa) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
252
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
253 assert_ref($bvfoa, 'Bio::EnsEMBL::Variation::BaseVariationFeatureOverlapAllele');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
254
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
255 if ($bvfoa->is_reference) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
256 $self->{reference_allele} = $bvfoa;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
257 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
258 else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
259 my $alt_alleles = $self->{alt_alleles} ||= [];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
260 push @$alt_alleles, $bvfoa;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
261 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
262 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
263
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
264 =head2 get_reference_BaseVariationFeatureOverlapAllele
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
265
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
266 Description: Get the object representing the reference allele of this BaseVariationFeatureOverlapAllele
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
267 Returntype : Bio::EnsEMBL::Variation::BaseVariationFeatureOverlapAllele instance
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
268 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
269 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
270
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
271 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
272
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
273 sub get_reference_BaseVariationFeatureOverlapAllele {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
274 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
275 return $self->{reference_allele};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
276 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
277
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
278 =head2 get_all_alternate_BaseVariationFeatureOverlapAlleles
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
279
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
280 Description: Get a list of the alternate alleles of this BaseVariationFeatureOverlapAllele
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
281 Returntype : listref of Bio::EnsEMBL::Variation::BaseVariationFeatureOverlapAllele objects
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
282 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
283 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
284
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
285 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
286
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
287 sub get_all_alternate_BaseVariationFeatureOverlapAlleles {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
288 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
289
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
290 $self->{alt_alleles} ||= [];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
291
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
292 return $self->{alt_alleles};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
293 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
294
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
295 =head2 get_all_BaseVariationFeatureOverlapAlleles
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
296
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
297 Description: Get a list of the all the alleles, both reference and alternate, of this
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
298 BaseVariationFeatureOverlap
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
299 Returntype : listref of Bio::EnsEMBL::Variation::BaseVariationFeatureOverlapAllele objects
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
300 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
301 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
302
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
303 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
304
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
305 sub get_all_BaseVariationFeatureOverlapAlleles {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
306 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
307
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
308 my @alleles = @{ $self->get_all_alternate_BaseVariationFeatureOverlapAlleles };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
309
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
310 my $ref = $self->get_reference_BaseVariationFeatureOverlapAllele;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
311
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
312 unshift @alleles, $ref if defined $ref;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
313
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
314 return \@alleles;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
315 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
316
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
317 =head2 consequence_type
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
318
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
319 Arg [1] : (optional) String $term_type
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
320 Description: Get a list of all the unique consequence terms of the alleles of this
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
321 BaseVariationFeatureOverlap. By default returns Ensembl display terms
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
322 (e.g. 'NON_SYNONYMOUS_CODING'). $term_type can also be 'label'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
323 (e.g. 'Non-synonymous coding'), 'SO' (Sequence Ontology, e.g.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
324 'non_synonymous_codon') or 'NCBI' (e.g. 'missense')
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
325 Returntype : listref of strings
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
326 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
327 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
328
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
329 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
330
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
331 sub consequence_type {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
332 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
333 my $term_type = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
334
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
335 my $method_name;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
336
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
337 # delete cached term
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
338 if(defined($term_type)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
339 delete $self->{_consequence_type};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
340 $method_name = $term_type.($term_type eq 'label' ? '' : '_term');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
341 $method_name = 'SO_term' unless defined $self->most_severe_OverlapConsequence && $self->most_severe_OverlapConsequence->can($method_name);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
342 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
343
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
344 $method_name ||= 'SO_term';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
345
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
346 unless ($self->{_consequence_type}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
347
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
348 # use a hash to ensure we don't include redundant terms (because more than one
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
349 # allele may have the same consequence SO_term)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
350
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
351 my %cons_types;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
352
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
353 for my $allele (@{ $self->get_all_alternate_BaseVariationFeatureOverlapAlleles }) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
354 for my $cons (@{ $allele->get_all_OverlapConsequences }) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
355 $cons_types{$cons->$method_name} = $cons->rank;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
356 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
357 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
358
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
359 # sort the consequence types by rank such that the more severe terms are earlier in the list
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
360
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
361 $self->{_consequence_type} = [ sort { $cons_types{$a} <=> $cons_types{$b} } keys %cons_types ];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
362 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
363
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
364 return $self->{_consequence_type};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
365 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
366
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
367 =head2 most_severe_OverlapConsequence
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
368
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
369 Description: Get the OverlapConsequence considered (by Ensembl) to be the most severe
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
370 consequence of all the alleles of this VariationFeatureOverlap
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
371 Returntype : Bio::EnsEMBL::Variation::OverlapConsequence
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
372 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
373 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
374
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
375 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
376
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
377 sub most_severe_OverlapConsequence {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
378 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
379
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
380 unless ($self->{_most_severe_consequence}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
381
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
382 my $highest;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
383
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
384 for my $allele (@{ $self->get_all_alternate_BaseVariationFeatureOverlapAlleles }) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
385 for my $cons (@{ $allele->get_all_OverlapConsequences }) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
386 $highest ||= $cons;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
387 if ($cons->rank < $highest->rank) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
388 $highest = $cons;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
389 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
390 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
391 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
392
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
393 $self->{_most_severe_consequence} = $highest;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
394 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
395
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
396 return $self->{_most_severe_consequence};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
397 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
398
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
399 =head2 display_consequence
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
400
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
401 Arg [1] : (optional) String $term_type
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
402 Description: Get the term for the most severe OverlapConsequence of this
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
403 VariationFeatureOverlap. By default returns Ensembl display terms
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
404 (e.g. 'NON_SYNONYMOUS_CODING'). $term_type can also be 'label'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
405 (e.g. 'Non-synonymous coding'), 'SO' (Sequence Ontology, e.g.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
406 'non_synonymous_codon') or 'NCBI' (e.g. 'missense')
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
407 Returntype : string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
408 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
409 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
410
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
411 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
412
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
413 sub display_consequence {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
414 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
415 my $term_type = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
416
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
417 my $method_name;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
418
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
419 # delete cached term
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
420 if(defined($term_type)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
421 $method_name = $term_type.($term_type eq 'label' ? '' : '_term');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
422 $method_name = 'SO_term' unless @{$self->get_all_OverlapConsequences} && $self->get_all_OverlapConsequences->[0]->can($method_name);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
423 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
424
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
425 $method_name ||= 'SO_term';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
426
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
427 my $worst_conseq = $self->most_severe_OverlapConsequence;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
428
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
429 return $worst_conseq ? $worst_conseq->$method_name : '';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
430 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
431
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
432 sub adaptor {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
433 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
434 $self->{adaptor} = shift if @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
435
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
436 # make adaptor an anonymous hash in its absence
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
437 # this allows the VEP to cache OverlapConsequences in offline mode
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
438 $self->{adaptor} ||= {};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
439
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
440 return $self->{adaptor};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
441 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
442
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
443 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
444