annotate variant_effect_predictor/Bio/EnsEMBL/Variation/VariationFeature.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 # Ensembl module for Bio::EnsEMBL::Variation::VariationFeature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
22 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
23 # Copyright (c) 2004 Ensembl
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
24 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
25
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
26
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
27 =head1 NAME
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
28
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
29 Bio::EnsEMBL::Variation::VariationFeature - A genomic position for a nucleotide variation.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
30
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
31 =head1 SYNOPSIS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
32
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
33 # Variation feature representing a single nucleotide polymorphism
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
34 $vf = Bio::EnsEMBL::Variation::VariationFeature->new
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
35 (-start => 100,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
36 -end => 100,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
37 -strand => 1,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
38 -slice => $slice,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
39 -allele_string => 'A/T',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
40 -variation_name => 'rs635421',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
41 -map_weight => 1,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
42 -variation => $v);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
43
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
44 # Variation feature representing a 2bp insertion
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
45 $vf = Bio::EnsEMBL::Variation::VariationFeature->new
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
46 (-start => 1522,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
47 -end => 1521, # end = start-1 for insert
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
48 -strand => -1,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
49 -slice => $slice,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
50 -allele_string => '-/AA',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
51 -variation_name => 'rs12111',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
52 -map_weight => 1,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
53 -variation => $v2);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
54
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
55 ...
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
56
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
57 # a variation feature is like any other ensembl feature, can be
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
58 # transformed etc.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
59 $vf = $vf->transform('supercontig');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
60
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
61 print $vf->start(), "-", $vf->end(), '(', $vf->strand(), ')', "\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
62
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
63 print $vf->name(), ":", $vf->allele_string();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
64
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
65 # Get the Variation object which this feature represents the genomic
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
66 # position of. If not already retrieved from the DB, this will be
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
67 # transparently lazy-loaded
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
68 my $v = $vf->variation();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
69
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
70 =head1 DESCRIPTION
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
71
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
72 This is a class representing the genomic position of a nucleotide variation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
73 from the ensembl-variation database. The actual variation information is
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
74 represented by an associated Bio::EnsEMBL::Variation::Variation object. Some
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
75 of the information has been denormalized and is available on the feature for
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
76 speed purposes. A VariationFeature behaves as any other Ensembl feature.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
77 See B<Bio::EnsEMBL::Feature> and B<Bio::EnsEMBL::Variation::Variation>.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
78
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
79 =head1 METHODS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
80
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
81 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
82
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
83 use strict;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
84 use warnings;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
85
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
86 package Bio::EnsEMBL::Variation::VariationFeature;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
87
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
88 use Scalar::Util qw(weaken isweak);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
89
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
90 use Bio::EnsEMBL::Variation::BaseVariationFeature;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
91 use Bio::EnsEMBL::Utils::Exception qw(throw warning);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
92 use Bio::EnsEMBL::Utils::Scalar qw(assert_ref);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
93 use Bio::EnsEMBL::Utils::Argument qw(rearrange);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
94 use Bio::EnsEMBL::Utils::Sequence qw(reverse_comp);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
95 use Bio::EnsEMBL::Variation::Utils::Sequence qw(ambiguity_code hgvs_variant_notation SO_variation_class format_hgvs_string);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
96 use Bio::EnsEMBL::Variation::Utils::Sequence;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
97 use Bio::EnsEMBL::Variation::Variation;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
98 use Bio::EnsEMBL::Variation::Utils::VariationEffect qw(MAX_DISTANCE_FROM_TRANSCRIPT);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
99 use Bio::EnsEMBL::Variation::Utils::Constants qw($DEFAULT_OVERLAP_CONSEQUENCE %VARIATION_CLASSES);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
100 use Bio::EnsEMBL::Variation::RegulatoryFeatureVariation;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
101 use Bio::EnsEMBL::Variation::MotifFeatureVariation;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
102 use Bio::EnsEMBL::Variation::ExternalFeatureVariation;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
103 use Bio::EnsEMBL::Variation::IntergenicVariation;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
104 use Bio::EnsEMBL::Slice;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
105 use Bio::EnsEMBL::Variation::DBSQL::TranscriptVariationAdaptor;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
106 use Bio::PrimarySeq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
107 use Bio::SeqUtils;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
108
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
109 our @ISA = ('Bio::EnsEMBL::Variation::BaseVariationFeature');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
110
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
111 our $DEBUG = 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
112 =head2 new
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
113
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
114 Arg [-dbID] :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
115 see superclass constructor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
116
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
117 Arg [-ADAPTOR] :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
118 see superclass constructor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
119
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
120 Arg [-START] :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
121 see superclass constructor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
122 Arg [-END] :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
123 see superclass constructor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
124
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
125 Arg [-STRAND] :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
126 see superclass constructor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
127
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
128 Arg [-SLICE] :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
129 see superclass constructor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
130
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
131 Arg [-VARIATION_NAME] :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
132 string - the name of the variation this feature is for (denormalisation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
133 from Variation object).
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
134
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
135 Arg [-MAP_WEIGHT] :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
136 int - the number of times that the variation associated with this feature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
137 has hit the genome. If this was the only feature associated with this
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
138 variation_feature the map_weight would be 1.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
139
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
140 Arg [-VARIATION] :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
141 int - the variation object associated with this feature.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
142
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
143 Arg [-SOURCE] :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
144 string - the name of the source where the SNP comes from
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
145
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
146 Arg [-SOURCE_VERSION] :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
147 number - the version of the source where the SNP comes from
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
148
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
149 Arg [-VALIDATION_CODE] :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
150 reference to list of strings
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
151
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
152 Arg [-OVERLAP_CONSEQUENCES] :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
153 listref of Bio::EnsEMBL::Variation::OverlapConsequences - all the consequences of this VariationFeature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
154
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
155 Arg [-VARIATION_ID] :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
156 int - the internal id of the variation object associated with this
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
157 identifier. This may be provided instead of a variation object so that
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
158 the variation may be lazy-loaded from the database on demand.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
159
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
160 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
161 $vf = Bio::EnsEMBL::Variation::VariationFeature->new(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
162 -start => 100,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
163 -end => 100,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
164 -strand => 1,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
165 -slice => $slice,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
166 -allele_string => 'A/T',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
167 -variation_name => 'rs635421',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
168 -map_weight => 1,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
169 -source => 'dbSNP',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
170 -validation_code => ['cluster','doublehit'],
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
171 -variation => $v
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
172 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
173
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
174 Description: Constructor. Instantiates a new VariationFeature object.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
175 Returntype : Bio::EnsEMBL::Variation::Variation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
176 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
177 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
178 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
179
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
180 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
181
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
182 sub new {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
183 my $caller = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
184 my $class = ref($caller) || $caller;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
185
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
186 my $self = $class->SUPER::new(@_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
187
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
188 my (
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
189 $allele_str,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
190 $var_name,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
191 $map_weight,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
192 $variation,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
193 $variation_id,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
194 $source,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
195 $source_version,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
196 $is_somatic,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
197 $validation_code,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
198 $overlap_consequences,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
199 $class_so_term,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
200 $minor_allele,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
201 $minor_allele_freq,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
202 $minor_allele_count
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
203 ) = rearrange([qw(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
204 ALLELE_STRING
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
205 VARIATION_NAME
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
206 MAP_WEIGHT
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
207 VARIATION
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
208 _VARIATION_ID
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
209 SOURCE
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
210 SOURCE_VERSION
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
211 IS_SOMATIC
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
212 VALIDATION_CODE
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
213 OVERLAP_CONSEQUENCES
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
214 CLASS_SO_TERM
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
215 MINOR_ALLELE
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
216 MINOR_ALLELE_FREQUENCY
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
217 MINOR_ALLELE_COUNT
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
218 )], @_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
219
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
220 $self->{'allele_string'} = $allele_str;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
221 $self->{'variation_name'} = $var_name;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
222 $self->{'map_weight'} = $map_weight;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
223 $self->{'variation'} = $variation;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
224 $self->{'_variation_id'} = $variation_id;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
225 $self->{'source'} = $source;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
226 $self->{'source_version'} = $source_version;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
227 $self->{'is_somatic'} = $is_somatic;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
228 $self->{'validation_code'} = $validation_code;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
229 $self->{'overlap_consequences'} = $overlap_consequences;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
230 $self->{'class_SO_term'} = $class_so_term;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
231 $self->{'minor_allele'} = $minor_allele;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
232 $self->{'minor_allele_frequency'} = $minor_allele_freq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
233 $self->{'minor_allele_count'} = $minor_allele_count;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
234
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
235 return $self;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
236 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
237
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
238
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
239
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
240 sub new_fast {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
241
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
242 my $class = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
243 my $hashref = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
244 my $self = bless $hashref, $class;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
245 weaken($self->{'adaptor'}) if ( ! isweak($self->{'adaptor'}) );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
246 return $self;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
247
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
248 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
249
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
250
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
251 =head2 allele_string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
252
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
253 Arg [1] : string $newval (optional)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
254 The new value to set the allele_string attribute to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
255 Example : $allele_string = $obj->allele_string()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
256 Description: Getter/Setter for the allele_string attribute.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
257 The allele_string is a '/' demimited string representing the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
258 alleles associated with this features variation.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
259 Returntype : string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
260 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
261 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
262 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
263
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
264 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
265
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
266 sub allele_string{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
267 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
268 return $self->{'allele_string'} = shift if(@_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
269 return $self->{'allele_string'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
270 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
271
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
272 =head2 display_id
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
273
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
274 Arg [1] : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
275 Example : print $vf->display_id(), "\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
276 Description: Returns the 'display' identifier for this feature. For
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
277 VariationFeatures this is simply the name of the variation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
278 it is associated with.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
279 Returntype : string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
280 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
281 Caller : webcode
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
282 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
283
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
284 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
285
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
286 sub display_id {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
287 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
288 return $self->{'variation_name'} || '';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
289 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
290
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
291
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
292
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
293 =head2 variation_name
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
294
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
295 Arg [1] : string $newval (optional)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
296 The new value to set the variation_name attribute to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
297 Example : $variation_name = $obj->variation_name()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
298 Description: Getter/Setter for the variation_name attribute. This is the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
299 name of the variation associated with this feature.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
300 Returntype : string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
301 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
302 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
303 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
304
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
305 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
306
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
307 sub variation_name{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
308 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
309 return $self->{'variation_name'} = shift if(@_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
310 return $self->{'variation_name'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
311 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
312
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
313
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
314
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
315 =head2 map_weight
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
316
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
317 Arg [1] : int $newval (optional)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
318 The new value to set the map_weight attribute to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
319 Example : $map_weight = $obj->map_weight()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
320 Description: Getter/Setter for the map_weight attribute. The map_weight
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
321 is the number of times this features variation was mapped to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
322 the genome.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
323 Returntype : int
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
324 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
325 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
326 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
327
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
328 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
329
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
330 sub map_weight{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
331 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
332 return $self->{'map_weight'} = shift if(@_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
333 return $self->{'map_weight'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
334 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
335
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
336 =head2 minor_allele
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
337
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
338 Arg [1] : string $minor_allele (optional)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
339 The new minor allele string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
340 Example : $ma = $obj->minor_allele()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
341 Description: Get/set the minor allele of this variation, as reported by dbSNP
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
342 Returntype : string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
343 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
344 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
345 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
346
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
347 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
348
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
349 sub minor_allele {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
350 my ($self, $minor_allele) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
351 $self->{minor_allele} = $minor_allele if defined $minor_allele;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
352 return $self->{minor_allele}
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
353 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
354
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
355 =head2 minor_allele_frequency
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
356
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
357 Arg [1] : float $minor_allele_frequency (optional)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
358 The new minor allele frequency
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
359 Example : $maf = $obj->minor_allele_frequency()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
360 Description: Get/set the frequency of the minor allele of this variation, as reported by dbSNP
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
361 Returntype : float
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
362 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
363 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
364 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
365
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
366 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
367
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
368 sub minor_allele_frequency {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
369 my ($self, $minor_allele_frequency) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
370 $self->{minor_allele_frequency} = $minor_allele_frequency if defined $minor_allele_frequency;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
371 return $self->{minor_allele_frequency}
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
372 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
373
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
374 =head2 minor_allele_count
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
375
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
376 Arg [1] : int $minor_allele_count (optional)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
377 The new minor allele count
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
378 Example : $maf_count = $obj->minor_allele_count()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
379 Description: Get/set the sample count of the minor allele of this variation, as reported by dbSNP
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
380 Returntype : int
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
381 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
382 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
383 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
384
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
385 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
386
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
387 sub minor_allele_count {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
388 my ($self, $minor_allele_count) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
389 $self->{minor_allele_count} = $minor_allele_count if defined $minor_allele_count;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
390 return $self->{minor_allele_count}
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
391 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
392
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
393
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
394
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
395 =head2 get_all_TranscriptVariations
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
396
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
397 Arg [1] : (optional) listref of Bio::EnsEMBL::Transcript objects
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
398 Example : $vf->get_all_TranscriptVariations;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
399 Description : Get all the TranscriptVariations associated with this VariationFeature.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
400 If the optional list of Transcripts is supplied, get only TranscriptVariations
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
401 associated with those Transcripts.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
402 Returntype : listref of Bio::EnsEMBL::Variation::TranscriptVariation objects
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
403 Exceptions : Thrown on wrong argument type
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
404 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
405 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
406
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
407 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
408
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
409 sub get_all_TranscriptVariations {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
410
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
411 my ($self, $transcripts) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
412
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
413 if ($transcripts) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
414 assert_ref($transcripts, 'ARRAY');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
415 map { assert_ref($_, 'Bio::EnsEMBL::Transcript') } @$transcripts;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
416 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
417
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
418 #die unless $self->{transcript_variations};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
419
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
420 if ($self->dbID && not defined $self->{transcript_variations}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
421 # this VariationFeature is from the database, so we can just fetch the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
422 # TranscriptVariations from the database as well
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
423
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
424 if (my $db = $self->adaptor->db) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
425 my $tva = $db->get_TranscriptVariationAdaptor;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
426
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
427 # just fetch TVs for all Transcripts because that's more efficient,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
428 # we'll only return those asked for later on
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
429
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
430 my $tvs = $tva->fetch_all_by_VariationFeatures([$self]);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
431
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
432 map { $self->add_TranscriptVariation($_) } @$tvs;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
433 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
434 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
435 elsif (not defined $self->{transcript_variations}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
436 # this VariationFeature is not in the database so we have to build the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
437 # TranscriptVariations ourselves
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
438
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
439 unless ($transcripts) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
440 # if the caller didn't supply some transcripts fetch those around this VariationFeature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
441
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
442 # get a slice around this transcript including the maximum distance up and down-stream
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
443 # that we still call consequences for
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
444
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
445 my $slice = $self->feature_Slice->expand(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
446 MAX_DISTANCE_FROM_TRANSCRIPT,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
447 MAX_DISTANCE_FROM_TRANSCRIPT
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
448 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
449
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
450 # fetch all transcripts on this slice
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
451
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
452 $transcripts = $slice->get_all_Transcripts(1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
453 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
454
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
455 my @unfetched_transcripts = grep {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
456 not exists $self->{transcript_variations}->{$_->stable_id}
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
457 } @$transcripts;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
458
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
459 for my $transcript (@unfetched_transcripts) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
460 $self->add_TranscriptVariation(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
461 Bio::EnsEMBL::Variation::TranscriptVariation->new(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
462 -variation_feature => $self,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
463 -transcript => $transcript,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
464 -adaptor => ($self->adaptor->db ? $self->adaptor->db->get_TranscriptVariationAdaptor : undef),
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
465 )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
466 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
467 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
468 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
469
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
470 if ($transcripts) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
471 # just return TranscriptVariations for the requested Transcripts
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
472 return [ map { $self->{transcript_variations}->{$_->stable_id} } @$transcripts ];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
473 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
474 else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
475 # return all TranscriptVariations
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
476 return [ values %{ $self->{transcript_variations} } ];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
477 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
478 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
479
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
480 =head2 get_all_RegulatoryFeatureVariations
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
481
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
482 Description : Get all the RegulatoryFeatureVariations associated with this VariationFeature.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
483 Returntype : listref of Bio::EnsEMBL::Variation::RegulatoryFeatureVariation objects
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
484 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
485 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
486
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
487 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
488
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
489 sub get_all_RegulatoryFeatureVariations {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
490 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
491 return $self->_get_all_RegulationVariations('RegulatoryFeature', @_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
492 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
493
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
494 =head2 get_all_MotifFeatureVariations
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
495
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
496 Description : Get all the MotifFeatureVariations associated with this VariationFeature.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
497 Returntype : listref of Bio::EnsEMBL::Variation::MotifFeatureVariation objects
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
498 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
499 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
500
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
501 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
502
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
503 sub get_all_MotifFeatureVariations {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
504 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
505 return $self->_get_all_RegulationVariations('MotifFeature', @_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
506 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
507
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
508 =head2 get_all_ExternalFeatureVariations
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
509
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
510 Description : Get all the ExternalFeatureVariations associated with this VariationFeature.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
511 Returntype : listref of Bio::EnsEMBL::Variation::ExternalFeatureVariation objects
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
512 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
513 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
514
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
515 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
516
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
517 sub get_all_ExternalFeatureVariations {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
518 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
519 return $self->_get_all_RegulationVariations('ExternalFeature', @_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
520 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
521
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
522 sub _get_all_RegulationVariations {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
523 my ($self, $type) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
524
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
525 unless ($type && ($type eq 'RegulatoryFeature' || $type eq 'MotifFeature' || $type eq 'ExternalFeature')) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
526 throw("Invalid Ensembl Regulation type '$type'");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
527 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
528
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
529 unless ($self->{regulation_variations}->{$type}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
530
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
531 my $fg_adaptor;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
532
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
533 if (my $adap = $self->adaptor) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
534 if(my $db = $adap->db) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
535 $fg_adaptor = Bio::EnsEMBL::DBSQL::MergedAdaptor->new(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
536 -species => $adap->db->species,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
537 -type => $type,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
538 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
539 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
540
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
541 unless ($fg_adaptor) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
542 warning("Failed to get adaptor for $type");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
543 return [];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
544 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
545 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
546 else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
547 warning('Cannot get variation features without attached adaptor');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
548 return [];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
549 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
550
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
551 my $slice = $self->feature_Slice;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
552
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
553 my $constructor = 'Bio::EnsEMBL::Variation::'.$type.'Variation';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
554
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
555 eval {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
556 $self->{regulation_variations}->{$type} = [
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
557 map {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
558 $constructor->new(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
559 -variation_feature => $self,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
560 -feature => $_,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
561 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
562 } map { $_->transfer($self->slice) } @{ $fg_adaptor->fetch_all_by_Slice($slice) }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
563 ];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
564 };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
565
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
566 $self->{regulation_variations}->{$type} ||= [];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
567 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
568
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
569 return $self->{regulation_variations}->{$type};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
570 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
571
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
572 sub get_IntergenicVariation {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
573 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
574 my $no_ref_check = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
575
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
576 unless (exists $self->{intergenic_variation}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
577 if (scalar(@{ $self->get_all_TranscriptVariations }) == 0) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
578 $self->{intergenic_variation} = Bio::EnsEMBL::Variation::IntergenicVariation->new(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
579 -variation_feature => $self,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
580 -no_ref_check => $no_ref_check,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
581 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
582 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
583 else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
584 $self->{intergenic_variation} = undef;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
585 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
586 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
587
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
588 return $self->{intergenic_variation};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
589 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
590
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
591 =head2 get_all_VariationFeatureOverlaps
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
592
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
593 Description : Get all the VariationFeatureOverlaps associated with this VariationFeature, this
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
594 includes TranscriptVariations and regulatory feature overlap object.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
595 Returntype : listref of Bio::EnsEMBL::Variation::VariationFeatureOverlap objects
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
596 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
597 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
598
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
599 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
600
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
601 sub get_all_VariationFeatureOverlaps {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
602 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
603
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
604 my $vfos = [
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
605 @{ $self->get_all_TranscriptVariations },
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
606 @{ $self->get_all_RegulatoryFeatureVariations },
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
607 @{ $self->get_all_MotifFeatureVariations },
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
608 @{ $self->get_all_ExternalFeatureVariations },
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
609 ];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
610
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
611 if (my $iv = $self->get_IntergenicVariation) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
612 push @$vfos, $iv;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
613 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
614
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
615 return $vfos;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
616 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
617
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
618 =head2 add_TranscriptVariation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
619
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
620 Arg [1] : Bio::EnsEMBL::Variation::TranscriptVariation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
621 Example : $vf->add_TranscriptVariation($tv);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
622 Description : Adds a TranscriptVariation to the variation feature object.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
623 Exceptions : thrown on bad argument
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
624 Caller : Bio::EnsEMBL::Variation::TranscriptVariationAdaptor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
625 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
626
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
627 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
628
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
629 sub add_TranscriptVariation {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
630 my ($self, $tv) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
631 assert_ref($tv, 'Bio::EnsEMBL::Variation::TranscriptVariation');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
632 # we need to weaken the reference back to us to avoid a circular reference
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
633 weaken($tv->{base_variation_feature});
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
634 $self->{transcript_variations}->{$tv->transcript_stable_id} = $tv;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
635 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
636
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
637 =head2 variation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
638
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
639 Arg [1] : (optional) Bio::EnsEMBL::Variation::Variation $variation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
640 Example : $v = $vf->variation();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
641 Description: Getter/Setter for the variation associated with this feature.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
642 If not set, and this VariationFeature has an associated adaptor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
643 an attempt will be made to lazy-load the variation from the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
644 database.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
645 Returntype : Bio::EnsEMBL::Variation::Variation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
646 Exceptions : throw on incorrect argument
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
647 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
648 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
649
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
650 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
651
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
652 sub variation {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
653 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
654
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
655 if(@_) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
656 if(!ref($_[0]) || !$_[0]->isa('Bio::EnsEMBL::Variation::Variation')) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
657 throw("Bio::EnsEMBL::Variation::Variation argument expected");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
658 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
659 $self->{'variation'} = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
660 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
661 elsif(!defined($self->{'variation'}) && $self->adaptor() &&
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
662 defined($self->{'_variation_id'})) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
663 # lazy-load from database on demand
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
664 my $va = $self->adaptor->db()->get_VariationAdaptor();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
665 $self->{'variation'} = $va->fetch_by_dbID($self->{'_variation_id'});
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
666 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
667
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
668 return $self->{'variation'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
669 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
670
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
671 =head2 consequence_type
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
672
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
673 Arg [1] : (optional) String $term_type
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
674 Description: Get a list of all the unique consequence terms of this
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
675 VariationFeature. By default returns Ensembl display terms
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
676 (e.g. 'NON_SYNONYMOUS_CODING'). $term_type can also be 'label'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
677 (e.g. 'Non-synonymous coding'), 'SO' (Sequence Ontology, e.g.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
678 'non_synonymous_codon') or 'NCBI' (e.g. 'missense')
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
679 Returntype : listref of strings
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
680 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
681 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
682
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
683 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
684
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
685 sub consequence_type {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
686
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
687 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
688 my $term_type = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
689
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
690 my $method_name;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
691
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
692 # delete cached term
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
693 if(defined($term_type)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
694 delete $self->{consequence_types};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
695 $method_name = $term_type.($term_type eq 'label' ? '' : '_term');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
696 $method_name = 'SO_term' unless @{$self->get_all_OverlapConsequences} && $self->get_all_OverlapConsequences->[0]->can($method_name);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
697 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
698
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
699 $method_name ||= 'SO_term';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
700
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
701 if (exists($self->{current_consequence_method}) && $self->{current_consequence_method} ne $method_name) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
702 delete $self->{consequence_type};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
703 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
704
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
705 unless ($self->{consequence_types}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
706
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
707 # work out the terms from the OverlapConsequence objects
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
708
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
709 $self->{consequence_types} =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
710 [ map { $_->$method_name } @{ $self->get_all_OverlapConsequences } ];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
711 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
712
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
713 $self->{current_consequence_method} = $method_name;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
714
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
715 return $self->{consequence_types};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
716 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
717
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
718 =head2 get_all_OverlapConsequences
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
719
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
720 Description: Get a list of all the unique OverlapConsequences of this VariationFeature,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
721 calculating them on the fly from the TranscriptVariations if necessary
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
722 Returntype : listref of Bio::EnsEMBL::Variation::OverlapConsequence objects
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
723 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
724 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
725
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
726 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
727
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
728 sub get_all_OverlapConsequences {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
729 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
730
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
731 unless ($self->{overlap_consequences}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
732
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
733 # work them out and store them in a hash keyed by SO_term as we don't
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
734 # want duplicates from different VFOs
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
735
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
736 my %overlap_cons;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
737
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
738 for my $vfo (@{ $self->get_all_TranscriptVariations }) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
739 for my $allele (@{ $vfo->get_all_alternate_VariationFeatureOverlapAlleles }) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
740 for my $cons (@{ $allele->get_all_OverlapConsequences }) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
741 $overlap_cons{$cons->SO_term} = $cons;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
742 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
743 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
744 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
745
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
746 # if we don't have any consequences we use a default from Constants.pm
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
747 # (currently set to the intergenic consequence)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
748
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
749 $self->{overlap_consequences} = [
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
750 %overlap_cons ? values %overlap_cons : $DEFAULT_OVERLAP_CONSEQUENCE
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
751 ];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
752 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
753
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
754 return $self->{overlap_consequences};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
755 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
756
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
757 =head2 add_OverlapConsequence
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
758
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
759 Arg [1] : Bio::EnsEMBL::Variation::OverlapConsequence instance
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
760 Description: Add an OverlapConsequence to this VariationFeature's list
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
761 Returntype : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
762 Exceptions : throws if the argument is the wrong type
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
763 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
764
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
765 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
766
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
767 sub add_OverlapConsequence {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
768 my ($self, $oc) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
769 assert_ref($oc, 'Bio::EnsEMBL::Variation::OverlapConsequence');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
770 push @{ $self->{overlap_consequences} ||= [] }, $oc;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
771 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
772
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
773 =head2 most_severe_OverlapConsequence
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
774
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
775 Description: Get the OverlapConsequence considered (by Ensembl) to be the most severe
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
776 consequence of all the alleles of this VariationFeature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
777 Returntype : Bio::EnsEMBL::Variation::OverlapConsequence
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
778 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
779 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
780
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
781 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
782
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
783 sub most_severe_OverlapConsequence {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
784 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
785
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
786 unless ($self->{_most_severe_consequence}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
787
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
788 my $highest;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
789
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
790 for my $cons (@{ $self->get_all_OverlapConsequences }) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
791 $highest ||= $cons;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
792 if ($cons->rank < $highest->rank) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
793 $highest = $cons;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
794 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
795 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
796
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
797 $self->{_most_severe_consequence} = $highest;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
798 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
799
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
800 return $self->{_most_severe_consequence};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
801 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
802
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
803 =head2 display_consequence
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
804
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
805 Arg [1] : (optional) String $term_type
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
806 Description: Get the term for the most severe consequence of this
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
807 VariationFeature. By default returns Ensembl display terms
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
808 (e.g. 'NON_SYNONYMOUS_CODING'). $term_type can also be 'label'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
809 (e.g. 'Non-synonymous coding'), 'SO' (Sequence Ontology, e.g.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
810 'non_synonymous_codon') or 'NCBI' (e.g. 'missense')
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
811 Returntype : string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
812 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
813 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
814
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
815 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
816
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
817 sub display_consequence {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
818 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
819 my $term_type = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
820
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
821 my $method_name;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
822
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
823 # delete cached term
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
824 if(defined($term_type)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
825 $method_name = $term_type.($term_type eq 'label' ? '' : '_term');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
826 $method_name = 'SO_term' unless @{$self->get_all_OverlapConsequences} && $self->get_all_OverlapConsequences->[0]->can($method_name);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
827 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
828
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
829 $method_name ||= 'SO_term';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
830
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
831 return $self->most_severe_OverlapConsequence->$method_name;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
832 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
833
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
834 =head2 add_consequence_type
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
835
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
836 Status : Deprecated, use add_OverlapConsequence instead
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
837
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
838 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
839
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
840 sub add_consequence_type{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
841 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
842 warning('Deprecated method, use add_OverlapConsequence instead');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
843 return $self->add_OverlapConsequence(@_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
844 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
845
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
846 =head2 get_consequence_type
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
847
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
848 Status : Deprecated, use consequence_type instead
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
849
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
850 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
851
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
852 sub get_consequence_type {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
853 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
854 warning('Deprecated method, use consequence_type instead');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
855 return $self->consequence_type;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
856 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
857
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
858 =head2 ambig_code
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
859
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
860 Args : None
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
861 Example : my $ambiguity_code = $vf->ambig_code()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
862 Description : Returns the ambigutiy code for the alleles in the VariationFeature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
863 ReturnType : String $ambiguity_code
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
864 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
865 Caller : General
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
866 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
867
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
868 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
869
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
870 sub ambig_code{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
871 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
872
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
873 return &ambiguity_code($self->allele_string());
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
874 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
875
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
876 =head2 var_class
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
877
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
878 Args[1] : (optional) no_db - don't use the term from the database, always calculate it from the allele string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
879 (used by the ensembl variation pipeline)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
880 Example : my $variation_class = $vf->var_class
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
881 Description : returns the Ensembl term for the class of this variation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
882 ReturnType : string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
883 Exceptions : throws if we can't find a corresponding display term for an SO term
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
884 Caller : General
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
885 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
886
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
887 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
888
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
889 sub var_class {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
890
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
891 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
892 my $no_db = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
893
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
894 unless ($self->{class_display_term}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
895
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
896 my $so_term = $self->class_SO_term(undef, $no_db);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
897
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
898 # convert the SO term to the ensembl display term
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
899
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
900 $self->{class_display_term} = $self->is_somatic ?
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
901 $VARIATION_CLASSES{$so_term}->{somatic_display_term} :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
902 $VARIATION_CLASSES{$so_term}->{display_term};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
903 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
904
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
905 return $self->{class_display_term};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
906 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
907
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
908 =head2 class_SO_term
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
909
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
910 Args[1] : (optional) class_SO_term - the SO term for the class of this variation feature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
911 Args[2] : (optional) no_db - don't use the term from the database, always calculate it from the allele string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
912 (used by the ensembl variation pipeline)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
913 Example : my $SO_variation_class = $vf->class_SO_term()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
914 Description : Get/set the SO term for the class of this variation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
915 ReturnType : string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
916 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
917 Caller : General
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
918 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
919
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
920 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
921
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
922 sub class_SO_term {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
923 my ($self, $class_SO_term, $no_db) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
924
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
925 $self->{class_SO_term} = $class_SO_term if $class_SO_term;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
926
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
927 if ($no_db || !$self->{class_SO_term}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
928 $self->{class_SO_term} = SO_variation_class($self->allele_string);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
929 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
930
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
931 return $self->{class_SO_term};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
932 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
933
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
934 =head2 get_all_validation_states
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
935
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
936 Arg [1] : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
937 Example : my @vstates = @{$vf->get_all_validation_states()};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
938 Description: Retrieves all validation states for this variationFeature. Current
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
939 possible validation statuses are 'cluster','freq','submitter',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
940 'doublehit', 'hapmap'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
941 Returntype : reference to list of strings
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
942 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
943 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
944 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
945
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
946 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
947
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
948 sub get_all_validation_states {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
949 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
950 return Bio::EnsEMBL::Variation::Utils::Sequence::get_all_validation_states($self->{'validation_code'});
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
951 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
952
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
953
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
954 =head2 add_validation_state
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
955
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
956 Arg [1] : string $state
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
957 Example : $vf->add_validation_state('cluster');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
958 Description: Adds a validation state to this variation.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
959 Returntype : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
960 Exceptions : warning if validation state is not a recognised type
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
961 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
962 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
963
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
964 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
965
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
966 sub add_validation_state {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
967 Bio::EnsEMBL::Variation::Utils::Sequence::add_validation_state(@_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
968 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
969
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
970 =head2 source
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
971
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
972 Arg [1] : string $source_name (optional) - the new value to set the source attribute to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
973 Example : $source = $vf->source;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
974 Description: Getter/Setter for the source attribute
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
975 Returntype : the source name as a string,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
976 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
977 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
978 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
979
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
980 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
981
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
982 sub source {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
983 my ($self, $source) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
984 $self->{source} = $source if $source;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
985 return $self->{source};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
986 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
987
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
988 =head2 source_version
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
989
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
990 Arg [1] : number $source_version (optional) - the new value to set the source version attribute to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
991 Example : $source_version = $vf->source_version;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
992 Description: Getter/Setter for the source version attribute
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
993 Returntype : the source version as a number
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
994 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
995 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
996 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
997
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
998 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
999
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1000 sub source_version {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1001 my ($self, $source_version) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1002 $self->{source_version} = $source_version if $source_version;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1003 return $self->{source_version};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1004 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1005
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1006 =head2 is_somatic
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1007
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1008 Arg [1] : boolean $is_somatic (optional)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1009 The new value to set the is_somatic flag to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1010 Example : $is_somatic = $vf->is_somatic
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1011 Description: Getter/Setter for the is_somatic flag, which identifies this variation feature as either somatic or germline
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1012 Returntype : boolean
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1013 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1014 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1015 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1016
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1017 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1018
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1019 sub is_somatic {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1020 my ($self, $is_somatic) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1021 $self->{'is_somatic'} = $is_somatic if defined $is_somatic;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1022 return $self->{'is_somatic'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1023 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1024
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1025 =head2 is_tagged
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1026
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1027 Args : None
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1028 Example : my $populations = $vf->is_tagged();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1029 Description : If the variation is tagged in any population, returns an array with the populations where the variation_feature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1030 is tagged (using a criteria of r2 > 0.99). Otherwise, returns null
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1031 ReturnType : list of Bio::EnsEMBL::Variation::Population
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1032 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1033 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1034 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1035
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1036 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1037
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1038 sub is_tagged{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1039 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1040
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1041 if ($self->adaptor()){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1042 my $population_adaptor = $self->adaptor()->db()->get_PopulationAdaptor();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1043 return $population_adaptor->fetch_tagged_Population($self);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1044 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1045 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1046
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1047 =head2 is_tag
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1048
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1049 Args : None
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1050 Example : my $populations = $vf->is_tag();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1051 Description : Returns an array of populations in which this variation feature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1052 is a tag SNP.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1053 ReturnType : list of Bio::EnsEMBL::Variation::Population
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1054 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1055 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1056 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1057
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1058 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1059
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1060 sub is_tag{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1061 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1062
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1063 if ($self->adaptor()){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1064 my $population_adaptor = $self->adaptor()->db()->get_PopulationAdaptor();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1065 return $population_adaptor->fetch_tag_Population($self);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1066 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1067 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1068
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1069 =head2 get_all_tagged_VariationFeatures
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1070
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1071 Args : Bio::EnsEMBL::Variation::Population $pop (optional)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1072 Example : my $vfs = $vf->get_all_tagged_VariationFeatures();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1073 Description : Returns an arrayref of variation features that are tagged by
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1074 this variation feature, in the population $pop if specified.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1075 ReturnType : list of Bio::EnsEMBL::Variation::VariationFeature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1076 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1077 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1078 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1079
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1080 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1081
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1082 sub get_all_tagged_VariationFeatures {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1083 return $_[0]->adaptor->fetch_all_tagged_by_VariationFeature(@_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1084 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1085
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1086 =head2 get_all_tag_VariationFeatures
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1087
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1088 Args : Bio::EnsEMBL::Variation::Population $pop (optional)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1089 Example : my $vfs = $vf->get_all_tag_VariationFeatures();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1090 Description : Returns an arrayref of variation features that tag this
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1091 variation feature, in the population $pop if specified.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1092 ReturnType : list of Bio::EnsEMBL::Variation::VariationFeature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1093 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1094 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1095 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1096
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1097 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1098
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1099 sub get_all_tag_VariationFeatures {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1100 return $_[0]->adaptor->fetch_all_tags_by_VariationFeature(@_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1101 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1102
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1103 =head2 get_all_tag_and_tagged_VariationFeatures
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1104
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1105 Args : Bio::EnsEMBL::Variation::Population $pop (optional)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1106 Example : my $vfs = $vf->get_all_tag_and_tagged_VariationFeatures();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1107 Description : Returns an arrayref of variation features that either tag or are
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1108 tagged by this variation feature, in the population $pop if
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1109 specified.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1110 ReturnType : list of Bio::EnsEMBL::Variation::VariationFeature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1111 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1112 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1113 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1114
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1115 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1116
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1117 sub get_all_tag_and_tagged_VariationFeatures {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1118 return $_[0]->adaptor->fetch_all_tags_and_tagged_by_VariationFeature(@_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1119 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1120
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1121
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1122
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1123 =head2 is_reference
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1124 Arg : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1125 Example : my $reference = $vf->is_reference()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1126 Description: Returns 1 if VF's slice is a reference slice else 0
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1127 Returntype : int
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1128 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1129 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1130
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1131 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1132
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1133 sub is_reference {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1134 my ($self) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1135 my $slice = $self->slice;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1136
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1137 if ( !defined( $self->{'is_reference'} ) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1138 $self->{'is_reference'} = $slice->is_reference();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1139 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1140
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1141 return $self->{'is_reference'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1142 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1143
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1144 =head2 convert_to_SNP
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1145
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1146 Args : None
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1147 Example : my $snp = $vf->convert_to_SNP()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1148 Description : Creates a Bio::EnsEMBL::SNP object from Bio::EnsEMBL::VariationFeature. Mainly used for
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1149 backwards compatibility
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1150 ReturnType : Bio::EnsEMBL::SNP
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1151 Exceptions : None
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1152 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1153 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1154
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1155 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1156
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1157 sub convert_to_SNP{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1158 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1159
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1160 require Bio::EnsEMBL::SNP; #for backwards compatibility. It will only be loaded if the function is called
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1161
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1162 my $snp = Bio::EnsEMBL::SNP->new_fast({
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1163 'dbID' => $self->variation()->dbID(),
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1164 '_gsf_start' => $self->start,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1165 '_gsf_end' => $self->end,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1166 '_snp_strand' => $self->strand,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1167 '_gsf_score' => 1,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1168 '_type' => $self->var_class,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1169 '_validated' => $self->get_all_validation_states(),
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1170 'alleles' => $self->allele_string,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1171 '_ambiguity_code' => $self->ambig_code,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1172 '_mapweight' => $self->map_weight,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1173 '_source' => $self->source
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1174 });
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1175 return $snp;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1176 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1177
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1178 =head2 get_all_LD_values
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1179
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1180 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1181 Description : returns all LD values for this variation feature. This function will only work correctly if the variation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1182 database has been attached to the core database.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1183 ReturnType : Bio::EnsEMBL::Variation::LDFeatureContainer
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1184 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1185 Caller : snpview
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1186 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1187 : Variation database is under development.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1188
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1189 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1190
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1191 sub get_all_LD_values{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1192 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1193
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1194 if ($self->adaptor()){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1195 my $ld_adaptor = $self->adaptor()->db()->get_LDFeatureContainerAdaptor();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1196 return $ld_adaptor->fetch_by_VariationFeature($self);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1197 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1198 return {};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1199 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1200
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1201 =head2 get_all_LD_Populations
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1202
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1203 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1204 Description : returns a list of populations that could produces LD values
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1205 for this VariationFeature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1206 ReturnType : listref of Bio::EnsEMBL::Variation::Population objects
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1207 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1208 Caller : snpview
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1209 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1210
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1211 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1212
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1213 sub get_all_LD_Populations{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1214 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1215
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1216 my $pa = $self->adaptor->db->get_PopulationAdaptor;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1217 return [] unless $pa;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1218
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1219 my $ld_pops = $pa->fetch_all_LD_Populations;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1220 return [] unless $ld_pops;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1221
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1222 my $sth = $self->adaptor->db->prepare(qq{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1223 SELECT ip.population_sample_id, c.seq_region_start, c.genotypes
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1224 FROM compressed_genotype_region c, individual_population ip
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1225 WHERE c.sample_id = ip.individual_sample_id
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1226 AND c.seq_region_id = ?
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1227 AND c.seq_region_start < ?
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1228 AND c.seq_region_end > ?
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1229 });
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1230
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1231 my $this_vf_start = $self->seq_region_start;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1232
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1233 $sth->bind_param(1, $self->feature_Slice->get_seq_region_id);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1234 $sth->bind_param(2, $self->seq_region_end);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1235 $sth->bind_param(3, $this_vf_start);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1236
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1237 $sth->execute;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1238
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1239 my ($sample_id, $seq_region_start, $genotypes);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1240 $sth->bind_columns(\$sample_id, \$seq_region_start, \$genotypes);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1241
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1242 my %have_genotypes = ();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1243
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1244 while($sth->fetch()) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1245
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1246 next if $have_genotypes{$sample_id};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1247
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1248 if($seq_region_start == $this_vf_start) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1249 $have_genotypes{$sample_id} = 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1250 next;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1251 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1252
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1253 my @genotypes = unpack '(www)*', $genotypes;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1254 my $gt_start = $seq_region_start;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1255
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1256 while(my( $var_id, $gt_code, $gap ) = splice @genotypes, 0, 3 ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1257 if($gt_start == $this_vf_start) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1258 $have_genotypes{$sample_id} = 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1259 last;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1260 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1261 $gt_start += $gap + 1 if defined $gap;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1262 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1263 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1264
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1265 my @final_list = grep {$have_genotypes{$_->dbID}} @$ld_pops;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1266
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1267 return \@final_list;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1268 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1269
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1270 =head2 get_all_sources
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1271
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1272 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1273 Example : my @sources = @{$vf->get_all_sources()};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1274 Description : returns a list of all the sources for this
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1275 VariationFeature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1276 ReturnType : reference to list of strings
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1277 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1278 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1279 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1280 : Variation database is under development.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1281 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1282
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1283 sub get_all_sources{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1284 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1285
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1286 my @sources;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1287 my %sources;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1288 if ($self->adaptor()){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1289 map {$sources{$_}++} @{$self->adaptor()->get_all_synonym_sources($self)};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1290 $sources{$self->source}++;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1291 @sources = keys %sources;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1292 return \@sources;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1293 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1294 return \@sources;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1295 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1296
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1297 =head2 ref_allele_string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1298
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1299 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1300 Example : $reference_allele_string = $self->ref_allele_string()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1301 Description: Getter for the reference allele_string, always the first.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1302 Returntype : string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1303 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1304 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1305 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1306
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1307 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1308
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1309 sub ref_allele_string{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1310 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1311
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1312 my @alleles = split /[\|\\\/]/,$self->allele_string;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1313 return $alleles[0];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1314 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1315
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1316
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1317 =head2 get_all_VariationSets
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1318
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1319 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1320 Example : my @vs = @{$vf->get_all_VariationSets()};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1321 Description : returns a reference to a list of all the VariationSets this
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1322 VariationFeature is a member of
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1323 ReturnType : reference to list of Bio::EnsEMBL::Variation::VariationSets
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1324 Exceptions : if no adaptor is attached to this object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1325 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1326 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1327 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1328
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1329 sub get_all_VariationSets {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1330 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1331
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1332 if (!$self->adaptor()) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1333 throw('An adaptor must be attached in order to get all variation sets');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1334 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1335 my $vs_adaptor = $self->adaptor()->db()->get_VariationSetAdaptor();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1336 my $variation_sets = $vs_adaptor->fetch_all_by_Variation($self->variation());
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1337
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1338 return $variation_sets;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1339 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1340
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1341
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1342 =head2 get_all_Alleles
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1343
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1344 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1345 Example : @alleles = @{$vf->get_all_Alleles}
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1346 Description: Gets all Allele objects from the underlying variation object,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1347 with reference alleles first.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1348 Returntype : listref of Bio::EnsEMBL::Variation::Allele objects
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1349 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1350 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1351 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1352
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1353 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1354
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1355 sub get_all_Alleles{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1356 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1357
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1358 my @alleles = @{$self->variation->get_all_Alleles};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1359
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1360 # put all alleles in a hash
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1361 my %order = ();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1362 foreach my $allele(@alleles) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1363 $order{$allele->allele} = 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1364 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1365
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1366 $order{$self->ref_allele_string} = 2;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1367
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1368 # now sort them by population, submitter, allele
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1369 my @new_alleles = sort {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1370 ($a->population ? $a->population->name : "") cmp ($b->population ? $b->population->name : "") ||
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1371 ($a->subsnp ? $a->subsnp : "") cmp ($b->subsnp ? $b->subsnp : "") ||
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1372 $order{$b->allele} <=> $order{$a->allele}
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1373 } @alleles;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1374
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1375 return \@new_alleles;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1376 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1377
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1378
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1379 =head2 get_all_PopulationGenotypes
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1380
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1381 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1382 Example : @pop_gens = @{$vf->get_all_PopulationGenotypes}
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1383 Description: Gets all PopulationGenotype objects from the underlying variation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1384 object, with reference genotypes first.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1385 Returntype : listref of Bio::EnsEMBL::Variation::PopulationGenotype objects
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1386 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1387 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1388 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1389
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1390 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1391
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1392 sub get_all_PopulationGenotypes{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1393 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1394
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1395 my @gens = @{$self->variation->get_all_PopulationGenotypes};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1396
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1397 # put all alleles in a hash
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1398 my %order = ();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1399 foreach my $gen(@gens) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1400 # homs low priority, hets higher
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1401 $order{$gen->allele1.$gen->allele2} = ($gen->allele1 eq $gen->allele2 ? 1 : 2);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1402 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1403
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1404 # ref hom highest priority
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1405 $order{$self->ref_allele_string x 2} = 3;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1406
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1407 # now sort them by population, submitter, genotype
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1408 my @new_gens = sort {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1409 ($a->population ? $a->population->name : "") cmp ($b->population ? $b->population->name : "") ||
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1410 ($a->subsnp ? $a->subsnp : "") cmp ($b->subsnp ? $b->subsnp : "") ||
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1411 $order{$b->allele1.$b->allele2} <=> $order{$a->allele1.$a->allele2}
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1412 } @gens;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1413
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1414 return \@new_gens;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1415 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1416
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1417 =head2 get_all_hgvs_notations
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1418
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1419 Arg [1] : Bio::EnsEMBL::Feature $ref_feature (optional)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1420 Get the HGVS notation of this VariationFeature relative to the slice it is on. If an optional reference feature is supplied, returns the coordinates
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1421 relative to this feature.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1422 Arg [2] : string (Optional)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1423 Indicate whether the HGVS notation should be reported in genomic coordinates or cDNA coordinates.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1424 'g' -> Genomic position numbering
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1425 'c' -> cDNA position numbering
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1426 'p' -> protein position numbering
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1427 Arg [3] : string (Optional)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1428 A name to use for the reference can be supplied. By default the name returned by the display_id() method of the reference feature will be used.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1429 Arg [4] : string (Optional)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1430 Return just the HGVS notation corresponding to this allele
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1431
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1432 Example : my $vf = $variation_feature_adaptor->fetch_by_dbID(565770);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1433 my $tr = $transcript_adaptor->fetch_by_stable_id('ENST00000335295');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1434 my $hgvs = $vf->get_all_hgvs_notations($tr,'p');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1435 while (my ($allele,$hgvs_str) = each(%{$hgvs})) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1436 print "Allele $allele :\t$hgvs_str\n"; # Will print 'Allele - : ENSP00000333994.3:p.Val34_Tyr36delinsAsp'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1437 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1438
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1439 Description: Returns a reference to a hash with the allele as key and a string with the HGVS notation of this VariationFeature as value. By default uses the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1440 slice it is plcaed on as reference but a different reference feature can be supplied.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1441 Returntype : Hash reference
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1442 Exceptions : Throws exception if VariationFeature can not be described relative to the feature_Slice of the supplied reference feature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1443 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1444 Status : Experimental
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1445
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1446 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1447 sub get_all_hgvs_notations {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1448
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1449 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1450 my $ref_feature = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1451 my $numbering = shift; ## HGVS system g=genomic, c=coding, p=protein
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1452 my $reference_name = shift; ## If the ref_feature is a slice, this is over-written
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1453 my $use_allele = shift; ## optional single allele to check
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1454 my $transcript_variation = shift; ## optional transcript variation - looked up for c|p if not supplied
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1455
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1456 my %hgvs;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1457
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1458 ##### don't get them for HGMD mutations or CNV probes
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1459 return {} if ($self->allele_string =~ /INS|DEL|HGMD|CNV/ig || $self->var_class() =~ /microsat/i);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1460 ##### By default, use genomic position numbering
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1461 $numbering ||= 'g';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1462
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1463 # If no reference feature is supplied, set it to the slice underlying this VariationFeature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1464 $ref_feature ||= $self->slice();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1465
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1466 # Special parsing for LRG
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1467 if (defined $reference_name && $reference_name =~ /^LRG_/) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1468 # Remove version
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1469 if ($reference_name =~ /(.+)\.\d+$/) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1470 $reference_name = $1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1471 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1472 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1473
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1474 ### Check/get transcript variation available for protein & coding
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1475 if ($ref_feature->isa('Bio::EnsEMBL::Transcript')) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1476
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1477 # Get a TranscriptVariation object for this VariationFeature and the supplied Transcript if it wasn't passed in the call
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1478 $transcript_variation = $self->get_all_TranscriptVariations([$ref_feature])->[0] if (!defined($transcript_variation));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1479
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1480 ##### call new TranscriptVariationAllele method for each allele
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1481 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1482
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1483
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1484 if ($numbering eq 'p') {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1485
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1486 #### If there is no transcript variation supplied and the variant
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1487 #### is not in the translated region there is no protein change
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1488 return {} if (!defined($transcript_variation) ||
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1489 !defined($transcript_variation->translation_start()) ||
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1490 !defined($transcript_variation->translation_end()));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1491
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1492 ##### call TranscriptVariationAllele method for each allele
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1493 foreach my $transcriptVariationAllele (@{$transcript_variation->get_all_alternate_TranscriptVariationAlleles()} ){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1494
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1495 my $allele_string = $transcriptVariationAllele->feature_seq();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1496 my $hgvs_full_string = $transcriptVariationAllele->hgvs_protein();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1497
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1498 if($allele_string ne (split/\//,$self->allele_string())[1] ){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1499 reverse_comp(\$allele_string); ### hash returned relative to input variation feature strand regardless of transcript strand
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1500 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1501 $hgvs{$allele_string} = $hgvs_full_string ;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1502 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1503 return \%hgvs;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1504 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1505
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1506 elsif ( $numbering =~ m/c|n/) { ### coding or non- coding transcript
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1507
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1508 return {} if (!defined $transcript_variation);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1509
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1510 foreach my $transcriptVariationAllele (@{$transcript_variation->get_all_alternate_TranscriptVariationAlleles()} ){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1511
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1512 my $allele_string = $transcriptVariationAllele->feature_seq();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1513 my $hgvs_full_string = $transcriptVariationAllele->hgvs_transcript();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1514
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1515 if($allele_string ne (split/\//,$self->allele_string())[1] ){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1516 reverse_comp(\$allele_string); ### hash returned relative to input variation feature strand regardless of transcript strand
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1517 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1518 $hgvs{$allele_string} = $hgvs_full_string ;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1519 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1520 return \%hgvs;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1521 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1522
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1523 elsif( $numbering =~ m/g/ ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1524 #### handling both alleles together locally for genomic class
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1525 my $hgvs = $self->hgvs_genomic($ref_feature, $reference_name, $use_allele );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1526 return $hgvs;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1527 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1528 else{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1529 warn("HGVS notation is not available for coordinate system: $numbering");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1530 return {};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1531 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1532 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1533
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1534 ### HGVS short flanking sequence required to check if HGVS variant class should be dup rather than ins
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1535 sub _get_flank_seq{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1536
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1537 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1538
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1539 # Get the underlying slice and sequence
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1540 my $ref_slice = $self->slice();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1541
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1542 my @allele = split(/\//,$self->allele_string());
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1543 #### add flank at least as long as longest allele to allow checking
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1544 my $add_length = 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1545
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1546 foreach my $al(@allele){ ## may have >2 alleles
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1547 if(length($al) > $add_length){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1548 $add_length = length $al ;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1549 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1550 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1551 $add_length++;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1552
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1553 my $ref_start = $add_length ;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1554 my $ref_end = $add_length + ($self->end() - $self->start());
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1555 my $seq_start = ($self->start() - $ref_start);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1556
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1557 # Should we be at the beginning of the sequence, adjust the coordinates to not cause an exception
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1558 if ($seq_start < 0) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1559 $ref_start += $seq_start;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1560 $ref_end += $seq_start;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1561 $seq_start = 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1562 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1563
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1564 my $flank_seq = $ref_slice->subseq($seq_start +1 , $seq_start + $ref_end, 1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1565
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1566
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1567 return ($flank_seq, $ref_start, $ref_end );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1568 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1569
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1570 #### format HGVS hash for genomic reference sequence
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1571 ### Input: Variation feature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1572 ### Output: $hgvs_notation hash
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1573
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1574
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1575
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1576 =head2 hgvs_genomic
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1577
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1578 Arg [1] : Bio::EnsEMBL::Feature $ref_feature (optional)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1579 Get the HGVS notation of this VariationFeature relative to the slice it is on. If an optional reference feature is supplied, returns the coordinates
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1580 relative to this feature.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1581 Arg [2] : string (Optional)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1582 A name to use for the reference can be supplied. By default the name returned by the display_id() method of the reference feature will be used.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1583 Arg [4] : string (Optional)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1584 Return just the HGVS notation corresponding to this allele
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1585
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1586
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1587
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1588 Description: Returns a reference to a hash with the allele as key and a string with the genomic HGVS notation of this VariationFeature as value. By default uses the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1589 slice it is placed on as reference but a different reference feature can be supplied.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1590 Returntype : Hash reference
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1591 Exceptions : Throws exception if VariationFeature can not be described relative to the feature_Slice of the supplied reference feature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1592 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1593 Status : Experimental
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1594
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1595 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1596 sub hgvs_genomic{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1597
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1598 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1599 my $ref_feature = shift; ## can be a transcript
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1600 my $reference_name = shift; ## If the ref_feature is a slice, this is over-written
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1601 my $use_allele = shift; ## optional single allele to check
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1602
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1603 my %hgvs;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1604 ########set up sequence reference
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1605 my $ref_slice; #### need this for genomic notation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1606
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1607 if ($ref_feature->isa('Bio::EnsEMBL::Slice')) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1608 $ref_slice = $ref_feature;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1609 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1610 else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1611 # get slice if not supplied
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1612 $ref_slice = $ref_feature->feature_Slice;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1613 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1614
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1615 # Create new VariationFeature on the slice of the reference feature (unless the reference feature is the slice the VF is on)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1616 my $tr_vf;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1617 if ( $self->slice->coord_system->name() eq "chromosome") {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1618 $tr_vf = $self;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1619 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1620 else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1621 $tr_vf = $self->transfer($ref_slice);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1622 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1623 # Return undef if this VariationFeature could not be transferred
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1624 return {} if (!defined($tr_vf));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1625
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1626
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1627 # Return undef if this VariationFeature does not fall within the supplied feature.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1628 return {} if ($tr_vf->start < 1 ||
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1629 $tr_vf->end < 1 ||
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1630 $tr_vf->start > ($ref_feature->end - $ref_feature->start + 1) ||
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1631 $tr_vf->end > ($ref_feature->end - $ref_feature->start + 1));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1632
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1633 ######### define reference sequence name ###################################
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1634
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1635 # If the reference is a slice, use the seq_region_name as identifier
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1636 $reference_name ||= $ref_feature->seq_region_name if ($ref_feature->isa('Bio::EnsEMBL::Slice'));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1637
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1638 # Use the feature's display id as reference name unless specified otherwise.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1639 # If the feature is a transcript or translation, append the version number as well
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1640 $reference_name ||= $ref_feature->display_id() . ($ref_feature->isa('Bio::EnsEMBL::Transcript') &&
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1641 $ref_feature->display_id !~ /\.\d+$/ ? '.' . $ref_feature->version() : '');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1642
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1643
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1644 ##### get short flank sequence for duplication checking & adjusted variation coordinates
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1645 my ($ref_seq, $ref_start, $ref_end) = _get_flank_seq($tr_vf);;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1646
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1647 foreach my $allele ( split(/\//,$tr_vf->allele_string()) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1648
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1649 ## If a particular allele was requested, ignore others
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1650 next if (defined($use_allele) && $allele ne $use_allele);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1651
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1652 # Skip if the allele contains weird characters
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1653 next if $allele =~ m/[^ACGT\-]/ig;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1654
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1655 ##### vf strand is relative to slice - if transcript feature slice, may need complimenting
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1656 my $check_allele = $allele;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1657 if( $self->strand() <0 && $ref_slice->strand >0 ||
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1658 $self->strand() >0 && $ref_slice->strand < 0
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1659 ){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1660 reverse_comp(\$check_allele);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1661 if($DEBUG ==1){print "***************Flipping alt allele $allele => $check_allele to match coding strand\n";}
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1662 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1663
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1664 ## work out chrom coord for hgvs string if transcript slice supplied
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1665 my ($chr_start,$chr_end);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1666 if ( $tr_vf->slice->is_toplevel() == 1) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1667 $chr_start = $tr_vf->seq_region_start();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1668 $chr_end = $tr_vf->seq_region_end();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1669 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1670 else{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1671 ## add feature start to start of var-in-feature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1672 if( $tr_vf->seq_region_start() < $tr_vf->seq_region_end()){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1673 $chr_start = $tr_vf->start() + $tr_vf->seq_region_start() ;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1674 $chr_end = $tr_vf->end() + $tr_vf->seq_region_start() ;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1675 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1676 else{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1677 $chr_start = $tr_vf->seq_region_start() - $tr_vf->start() ;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1678 $chr_end = $tr_vf->seq_region_start() - $tr_vf->end() ;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1679 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1680 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1681
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1682
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1683 my $hgvs_notation = hgvs_variant_notation( $check_allele, ## alt allele in refseq strand orientation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1684 $ref_seq, ## substring of slice for ref allele extraction
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1685 $ref_start, ## start on substring of slice for ref allele extraction
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1686 $ref_end,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1687 $chr_start, ## start wrt seq region slice is on (eg. chrom)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1688 $chr_end,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1689 "");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1690
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1691
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1692 # Skip if e.g. allele is identical to the reference slice
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1693 next if (!defined($hgvs_notation));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1694
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1695 # Add the name of the reference
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1696 $hgvs_notation->{'ref_name'} = $reference_name;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1697 # Add the position_numbering scheme
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1698 $hgvs_notation->{'numbering'} = 'g';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1699
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1700 # Construct the HGVS notation from the data in the hash
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1701 $hgvs_notation->{'hgvs'} = format_hgvs_string( $hgvs_notation);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1702
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1703 $hgvs{$allele} = $hgvs_notation->{'hgvs'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1704 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1705 return \%hgvs;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1706
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1707 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1708
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1709
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1710
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1711 sub length {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1712 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1713 return $self->{'end'} - $self->{'start'} + 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1714 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1715
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1716 =head2 summary_as_hash
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1717
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1718 Example : $feature_summary = $feature->summary_as_hash();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1719 Description : Extends Feature::summary_as_hash
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1720 Retrieves a summary of this VariationFeature object.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1721
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1722 Returns : hashref of descriptive strings
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1723
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1724 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1725
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1726 sub summary_as_hash {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1727 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1728 my $summary_ref = $self->SUPER::summary_as_hash;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1729 $summary_ref->{'consequence_type'} = $self->display_consequence;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1730 my @allele_list = split(/\//,$self->allele_string);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1731 $summary_ref->{'alt_alleles'} = \@allele_list;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1732 return $summary_ref;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1733 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1734
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1735 1;