annotate variant_effect_predictor/Bio/EnsEMBL/Variation/AlleleFeature.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::AlleleFeature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
22 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
23 # Copyright (c) 2005 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::AlleleFeature - A genomic position for an allele in a sample.
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 # Allele feature representing a single nucleotide polymorphism
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
34 $af = Bio::EnsEMBL::Variation::AlleleFeature->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',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
40 -variation_name => 'rs635421',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
41 -variation => $v);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
42 ...
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
43
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
44 # a allele feature is like any other ensembl feature, can be
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
45 # transformed etc.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
46 $af = $af->transform('supercontig');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
47
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
48 print $af->start(), "-", $af->end(), '(', $af->strand(), ')', "\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
49
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
50 print $af->name(), ":", $af->allele_string();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
51
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
52 # Get the Variation object which this feature represents the genomic
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
53 # position of. If not already retrieved from the DB, this will be
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
54 # transparently lazy-loaded
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
55 my $v = $af->variation();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
56
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
57 =head1 DESCRIPTION
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
58
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
59 This is a class representing the genomic position of a allele in a sample
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
60 from the ensembl-variation database. The actual variation information is
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
61 represented by an associated Bio::EnsEMBL::Variation::Variation object. Some
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
62 of the information has been denormalized and is available on the feature for
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
63 speed purposes. A AlleleFeature behaves as any other Ensembl feature.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
64 See B<Bio::EnsEMBL::Feature> and B<Bio::EnsEMBL::Variation::Variation>.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
65
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
66 =head1 METHODS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
67
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
68 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
69
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
70 use strict;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
71 use warnings;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
72
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
73 package Bio::EnsEMBL::Variation::AlleleFeature;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
74
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
75 use Bio::EnsEMBL::Feature;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
76 use Bio::EnsEMBL::Utils::Exception qw(throw warning);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
77 use Bio::EnsEMBL::Utils::Argument qw(rearrange);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
78 use Bio::EnsEMBL::Variation::Utils::Sequence qw(unambiguity_code);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
79 use Bio::EnsEMBL::Variation::ConsequenceType;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
80
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
81 our @ISA = ('Bio::EnsEMBL::Feature');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
82
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
83 =head2 new
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
84
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
85 Arg [-ADAPTOR] :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
86 see superclass constructor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
87
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
88 Arg [-START] :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
89 see superclass constructor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
90 Arg [-END] :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
91 see superclass constructor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
92
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
93 Arg [-STRAND] :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
94 see superclass constructor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
95
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
96 Arg [-SLICE] :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
97 see superclass constructor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
98
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
99 Arg [-VARIATION_NAME] :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
100 string - the name of the variation this feature is for (denormalisation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
101 from Variation object).
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
102
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
103 Arg [-SOURCE] :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
104 string - the name of the source where the SNP comes from
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
105
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
106 Arg [-VARIATION] :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
107 int - the variation object associated with this feature.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
108
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
109 Arg [-VARIATION_ID] :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
110 int - the internal id of the variation object associated with this
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
111 identifier. This may be provided instead of a variation object so that
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
112 the variation may be lazy-loaded from the database on demand.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
113
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
114 Arg [-SAMPLE_ID] :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
115 int - the internal id of the sample object associated with this
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
116 identifier. This may be provided instead of the object so that
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
117 the population/individual may be lazy-loaded from the database on demand.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
118
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
119 Arg [-ALLELE_STRING] :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
120 string - the allele for this AlleleFeature object.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
121
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
122 Arg [-OVERLAP_CONSEQUENCES] :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
123 listref of Bio::EnsEMBL::Variation::OverlapConsequence objects.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
124
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
125 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
126 $af = Bio::EnsEMBL::Variation::AlleleFeature->new
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
127 (-start => 100,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
128 -end => 100,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
129 -strand => 1,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
130 -slice => $slice,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
131 -allele_string => 'A',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
132 -consequence_type => 'NON_SYNONYMOUS_CODING',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
133 -variation_name => 'rs635421',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
134 -source => 'Celera',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
135 -sample_id => $sample_id,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
136 -variation => $v);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
137
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
138 Description: Constructor. Instantiates a new AlleleFeature object.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
139 Returntype : Bio::EnsEMBL::Variation::AlleleFeature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
140 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
141 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
142 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
143
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
144 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
145
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
146 sub new {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
147 my $caller = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
148 my $class = ref($caller) || $caller;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
149
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
150 my $self = $class->SUPER::new(@_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
151 my ($allele, $overlap_consequences, $var_name, $variation, $variation_id, $population, $sample_id, $source) =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
152 rearrange([qw(ALLELE_STRING OVERLAP_CONSEQUENCES VARIATION_NAME
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
153 VARIATION VARIATION_ID SAMPLE_ID SOURCE)], @_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
154
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
155 $self->{'allele_string'} = $allele;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
156 $self->{'overlap_consequences'} = $overlap_consequences;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
157 $self->{'variation_name'} = $var_name;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
158 $self->{'variation'} = $variation;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
159 $self->{'_variation_id'} = $variation_id;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
160 $self->{'_sample_id'} = $sample_id;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
161 $self->{'source'} = $source;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
162
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
163 return $self;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
164 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
165
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
166
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
167
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
168 sub new_fast {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
169 my $class = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
170 my $hashref = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
171 return bless $hashref, $class;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
172 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
173
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
174
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
175 =head2 allele_string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
176
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
177 Arg [1] : string $newval (optional)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
178 The new value to set the allele attribute to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
179 Example : $allele = $obj->allele_string()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
180 Description: Getter/Setter for the allele attribute.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
181 Returntype : string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
182 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
183 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
184 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
185
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
186 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
187
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
188 sub allele_string{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
189 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
190 return $self->{'allele_string'} = shift if(@_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
191
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
192 return $self->{'allele_string'} if ($self->{'_half_genotype'}); #for half genotypes
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
193 return join('|',split (//,unambiguity_code($self->{'allele_string'}))); #for heterozygous alleles
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
194 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
195
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
196
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
197
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
198 =head2 consequence_type
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
199
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
200 Arg [1] : (optional) String $term_type
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
201 Description: Get a list of all the unique consequence terms of this
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
202 AlleleFeature. By default returns Ensembl display terms
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
203 (e.g. 'NON_SYNONYMOUS_CODING'). $term_type can also be 'label'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
204 (e.g. 'Non-synonymous coding'), 'SO' (Sequence Ontology, e.g.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
205 'non_synonymous_codon') or 'NCBI' (e.g. 'missense')
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
206 Returntype : listref of strings
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
207 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
208 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
209
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
210 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
211
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
212 sub consequence_type {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
213
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
214 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
215 my $term_type = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
216
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
217 if($self->_is_sara) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
218 return ['SARA'];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
219 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
220 else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
221 delete $self->{consequence_type} if defined($term_type);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
222
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
223 unless ($self->{consequence_type}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
224
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
225 $term_type ||= 'SO';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
226 my $method_name = $term_type.($term_type eq 'label' ? '' : '_term');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
227 $method_name = 'SO_term' unless $self->most_severe_OverlapConsequence->can($method_name);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
228
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
229 # work out the terms from the OverlapConsequence objects
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
230 $self->{consequence_type} =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
231 [ $self->_is_sara ? 'SARA' : map { $_->$method_name } @{ $self->get_all_OverlapConsequences } ];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
232
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
233 return $self->{consequence_type};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
234 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
235 }
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 =head2 get_all_OverlapConsequences
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
240
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
241 Description: Get a list of all the unique OverlapConsequences of this AlleleFeature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
242 Returntype : listref of Bio::EnsEMBL::Variation::OverlapConsequence objects
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
243 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
244 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
245
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
246 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
247
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
248 sub get_all_OverlapConsequences {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
249 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
250 return $self->{overlap_consequences}
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
251 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
252
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
253
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
254 =head2 most_severe_OverlapConsequence
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
255
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
256 Description: Get the OverlapConsequence considered (by Ensembl) to be the most severe
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
257 consequence of all the alleles of this AlleleFeature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
258 Returntype : Bio::EnsEMBL::Variation::OverlapConsequence
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
259 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
260 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
261
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
262 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
263
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
264 sub most_severe_OverlapConsequence {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
265 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
266
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
267 unless ($self->{_most_severe_consequence}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
268
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
269 my $highest;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
270
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
271 for my $cons (@{ $self->get_all_OverlapConsequences }) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
272 $highest ||= $cons;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
273 if ($cons->rank < $highest->rank) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
274 $highest = $cons;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
275 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
276 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
277
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
278 $self->{_most_severe_consequence} = $highest;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
279 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
280
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
281 return $self->{_most_severe_consequence};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
282 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
283
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
284 =head2 display_consequence
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
285
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
286 Arg [1] : (optional) String $term_type
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
287 Description: Get the term for the most severe consequence of this
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
288 AlleleFeature. By default returns Ensembl display terms
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
289 (e.g. 'NON_SYNONYMOUS_CODING'). $term_type can also be 'label'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
290 (e.g. 'Non-synonymous coding'), 'SO' (Sequence Ontology, e.g.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
291 'non_synonymous_codon') or 'NCBI' (e.g. 'missense')
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
292 Returntype : string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
293 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
294 Caller : webteam
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
295 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
296
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
297 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
298
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
299 sub display_consequence {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
300 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
301 my $term_type = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
302
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
303 if($self->_is_sara) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
304 return 'SARA';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
305 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
306 else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
307 $term_type ||= 'SO';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
308 my $method_name = $term_type.($term_type eq 'label' ? '' : '_term');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
309 $method_name = 'SO_term' unless $self->most_severe_OverlapConsequence->can($method_name);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
310
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
311 return $self->most_severe_OverlapConsequence->$method_name;
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
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
316 =head2 get_all_TranscriptVariations
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
317
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
318 Arg [1] : (optional) listref of Bio::EnsEMBL::Transcript objects
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
319 Example : $af->get_all_TranscriptVariations;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
320 Description : Get all the TranscriptVariations associated with this AlleleFeature.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
321 If the optional list of Transcripts is supplied, get only TranscriptVariations
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
322 associated with those Transcripts.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
323 Returntype : listref of Bio::EnsEMBL::Variation::TranscriptVariation objects
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
324 Exceptions : Thrown on wrong argument type
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 get_all_TranscriptVariations {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
331 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
332 my $trs = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
333
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
334 my $cons = $self->variation_feature->get_all_TranscriptVariations($trs);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
335
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
336 # convert the TV to a SARA one if this is a SARA genotype
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
337 if($self->_is_sara) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
338 $_->_convert_to_sara foreach @$cons;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
339 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
340
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
341 # otherwise we need to rearrange the TranscriptVariationAlleles based
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
342 # on the alleles of this genotype
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
343 else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
344 my %alleles;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
345 $alleles{$_} = 1 foreach split /\||\/|\\/, $self->allele_string;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
346
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
347 $_->_rearrange_alleles(\%alleles) foreach @$cons;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
348 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
349
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
350 return $cons;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
351 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
352
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
353 =head2 variation_name
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
354
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
355 Arg [1] : string $newval (optional)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
356 The new value to set the variation_name attribute to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
357 Example : $variation_name = $obj->variation_name()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
358 Description: Getter/Setter for the variation_name attribute. This is the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
359 name of the variation associated with this feature.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
360 Returntype : string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
361 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
362 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
363 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
364
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
365 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
366
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
367 sub variation_name{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
368 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
369 return $self->{'variation_name'} = shift if(@_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
370 return $self->{'variation_name'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
371 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
372
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
373 =head2 variation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
374
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
375 Arg [1] : (optional) Bio::EnsEMBL::Variation::Variation $variation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
376 Example : $v = $af->variation();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
377 Description: Getter/Setter for the variation associated with this feature.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
378 If not set, and this AlleleFeature has an associated adaptor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
379 an attempt will be made to lazy-load the variation from the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
380 database.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
381 Returntype : Bio::EnsEMBL::Variation::Variation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
382 Exceptions : throw on incorrect argument
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
383 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
384 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
385
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
386 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
387
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
388 sub variation {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
389 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
390
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
391 if(@_) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
392 if(!ref($_[0]) || !$_[0]->isa('Bio::EnsEMBL::Variation::Variation')) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
393 throw("Bio::EnsEMBL::Variation::Variation argument expected");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
394 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
395 $self->{'variation'} = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
396 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
397 elsif(!defined($self->{'variation'}) && $self->{'adaptor'} &&
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
398 defined($self->{'_variation_id'})) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
399 # lazy-load from database on demand
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
400 my $va = $self->{'adaptor'}->db()->get_VariationAdaptor();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
401 $self->{'variation'} = $va->fetch_by_dbID($self->{'_variation_id'});
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
402 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
403
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
404 return $self->{'variation'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
405 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
406
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
407 =head2 variation_feature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
408
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
409 Arg [1] : (optional) Bio::EnsEMBL::Variation::VariationFeature $vf
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
410 Example : $vf = $af->variation_feature();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
411 Description: Getter/Setter for the variation feature associated with this feature.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
412 If not set, and this AlleleFeature has an associated adaptor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
413 an attempt will be made to lazy-load the variation from the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
414 database.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
415 Returntype : Bio::EnsEMBL::Variation::VariationFeature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
416 Exceptions : throw on incorrect argument
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
417 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
418 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
419
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
420 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
421
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
422 sub variation_feature {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
423 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
424
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
425 if(@_) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
426 if(!ref($_[0]) || !$_[0]->isa('Bio::EnsEMBL::Variation::VariationFeature')) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
427 throw("Bio::EnsEMBL::Variation::VariationFeature argument expected");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
428 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
429 $self->{'variation_feature'} = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
430 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
431 elsif(!defined($self->{'variation_feature'}) && $self->{'adaptor'} &&
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
432 defined($self->{'_variation_feature_id'})) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
433 # lazy-load from database on demand
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
434 my $va = $self->{'adaptor'}->db()->get_VariationFeatureAdaptor();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
435 $self->{'variation_feature'} = $va->fetch_by_dbID($self->{'_variation_feature_id'});
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
436 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
437
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
438 return $self->{'variation_feature'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
439 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
440
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
441 =head2 individual
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
442
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
443 Arg [1] : (optional) Bio::EnsEMBL::Variation::Individual $individual
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
444 Example : $p = $af->individual();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
445 Description: Getter/Setter for the individual associated with this feature.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
446 If not set, and this AlleleFeature has an associated adaptor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
447 an attempt will be made to lazy-load the individual from the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
448 database.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
449 Returntype : Bio::EnsEMBL::Variation::Individual
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
450 Exceptions : throw on incorrect argument
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
451 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
452 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
453
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
454 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
455
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
456 sub individual {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
457 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
458
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
459 if(@_) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
460 if(!ref($_[0]) || !$_[0]->isa('Bio::EnsEMBL::Variation::Individual')) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
461 throw("Bio::EnsEMBL::Variation::Individual argument expected");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
462 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
463 $self->{'individual'} = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
464 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
465 elsif(!defined($self->{'individual'}) && $self->{'adaptor'} &&
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
466 defined($self->{'_sample_id'})) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
467 # lazy-load from database on demand
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
468 my $ia = $self->{'adaptor'}->db()->get_IndividualAdaptor();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
469 $self->{'individual'} = $ia->fetch_by_dbID($self->{'_sample_id'});
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
470 if (!defined $self->{'individual'}){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
471 warning("AlleleFeature attached to Strain, not Individual");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
472 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
473 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
474
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
475 return $self->{'individual'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
476 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
477
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
478
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
479 =head2 apply_edit
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
480
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
481 Arg [1] : reference to string $seqref
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
482 Arg [2] : int $start of the seq_ref
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
483 Example : $sequence = 'ACTGAATATTTAAGGCA';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
484 $af->apply_edit(\$sequence,$start);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
485 print $sequence, "\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
486 Description: Applies this AlleleFeature directly to a sequence which is
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
487 passed by reference.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
488 If either the start or end of this AlleleFeature are not defined
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
489 this function will not do anything to the passed sequence.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
490 Returntype : reference to the same sequence that was passed in
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
491 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
492 Caller : Slice
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
493 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
494
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
495 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
496
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
497 sub apply_edit {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
498
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
499 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
500 my $seqref = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
501
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
502 if(ref($seqref) ne 'SCALAR') {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
503 throw("Reference to scalar argument expected");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
504 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
505
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
506 if(!defined($self->{'start'}) || !defined($self->{'end'})) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
507 return $seqref;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
508 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
509
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
510
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
511 my $len = $self->length;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
512 my $as = $self->{'allele_string'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
513 $as =~ s/\-//g;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
514
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
515 substr($$seqref, $self->{'start'}-1, $len) = $as;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
516
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
517 return $seqref;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
518
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
519 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
520
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
521 =head2 length_diff
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
522
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
523 Arg [1] : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
524 Example : my $diff = $af->length_diff();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
525 Description: Returns the difference in length caused by applying this
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
526 AlleleFeature to a sequence. This may be be negative (deletion),
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
527 positive (insertion) or 0 (replacement).
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
528 If either start or end are not defined 0 is returned.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
529 Returntype : int
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
530 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
531 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
532 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
533
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
534 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
535
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
536 sub length_diff {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
537
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
538 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
539
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
540 return 0 if(!defined($self->{'end'}) || !defined($self->{'start'}));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
541
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
542 return length($self->{'allele_string'}) - ($self->{'end'} - $self->{'start'} + 1) if ($self->{'allele_string'} ne '-');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
543 return 0 - ($self->{'end'} - $self->{'start'} +1) if ($self->{'allele_string'} eq '-'); #do we need the +1 in the distance ??
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
544
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
545 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
546
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
547
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
548 sub length {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
549 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
550 return $self->{'end'} - $self->{'start'} + 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
551 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
552
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
553 =head2 source
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
554
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
555 Arg [1] : string $source (optional)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
556 The new value to set the source attribute to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
557 Example : $source = $vf->source()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
558 Description: Getter/Setter for the source attribute
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
559 Returntype : string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
560 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
561 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
562 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
563
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
564 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
565
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
566 sub source{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
567 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
568 return $self->{'source'} = shift if(@_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
569 return $self->{'source'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
570 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
571
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
572 =head2 ref_allele_string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
573
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
574 Args : None
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
575 Example : $allele = $obj->ref_allele_string()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
576 Description: Getter for the reference allele.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
577 Returntype : string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
578 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
579 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
580 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
581
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
582 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
583
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
584 sub ref_allele_string{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
585 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
586
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
587 my $reference_allele;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
588 if ( ref ($self->slice) eq 'Bio::EnsEMBL::Slice' ){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
589 #we already have the reference slice, so just get the sequence
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
590 $reference_allele = $self->seq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
591 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
592 else{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
593 #we have a Strain or IndividualSlice, get the reference sequence from the method
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
594 $reference_allele = $self->slice->ref_subseq($self->start,$self->end,$self->strand) || '-';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
595 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
596
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
597 return $reference_allele;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
598 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
599
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
600 =head2 get_all_sources
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
601
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
602 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
603 Example : my @sources = @{$af->get_all_sources()};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
604 Description : returns a list of all the sources for this
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
605 AlleleFeature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
606 ReturnType : reference to list of strings
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
607 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
608 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
609 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
610 : Variation database is under development.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
611 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
612
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
613 sub get_all_sources{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
614 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
615
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
616 my @sources;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
617 my %sources;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
618 if ($self->{'adaptor'}){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
619 map {$sources{$_}++} @{$self->{'adaptor'}->get_all_synonym_sources($self)};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
620 $sources{$self->source}++;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
621 @sources = keys %sources;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
622 return \@sources;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
623 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
624 return \@sources;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
625 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
626
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
627 sub _is_sara{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
628 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
629
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
630 if(!defined($self->{_is_sara})) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
631 my $allele_string = $self->allele_string;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
632 my $ref = $self->ref_allele_string;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
633
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
634 my $is_sara = 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
635
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
636 foreach my $a(split /\/|\||\\/, $allele_string) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
637 $is_sara = 0 if $ref !~ /$a/i;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
638 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
639
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
640 $self->{_is_sara} = $is_sara;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
641 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
642
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
643 return $self->{_is_sara};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
644 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
645
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
646 1;