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

Deleted selected files
author willmclaren
date Fri, 03 Aug 2012 10:05:43 -0400
parents 21066c0abaf5
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1 =head1 LICENSE
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
3 Copyright (c) 1999-2012 The European Bioinformatics Institute and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
4 Genome Research Limited. All rights reserved.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
5
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
6 This software is distributed under a modified Apache license.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
7 For license details, please see
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
8
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
9 http://www.ensembl.org/info/about/code_licence.html
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
10
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
11 =head1 CONTACT
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
12
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
13 Please email comments or questions to the public Ensembl
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
14 developers list at <dev@ensembl.org>.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
15
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
16 Questions may also be sent to the Ensembl help desk at
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
17 <helpdesk@ensembl.org>.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
18
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
19 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
20
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
21 =head1 NAME Bio::EnsEMBL::Intron - A class representing an Intron
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
22
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
23 =head1 SYNOPSIS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
24
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
25 $intron = Bio::EnsEMBL::Intron->new( exon1, exon2, $analysis );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
26
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
27 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
28
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
29
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
30 package Bio::EnsEMBL::Intron;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
31 use strict;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
32 use warnings;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
33
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
34 use Bio::EnsEMBL::Utils::Exception qw( warning throw );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
35
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
36 use base qw(Bio::EnsEMBL::Feature);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
37
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
38 =head2 new
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
39
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
40 Arg [1] : Bio::EnsEMBL::Exon The 5' exon for the intron; required
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
41 Arg [2] : Bio::EnsEMBL::Exon The 3' exon for the intron; required
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
42 Arg [3] : Bio::EnsEMBL::Analysis Analysis to link to this Intron
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
43 Example : $intron = new Bio::EnsEMBL::Intron($exon1, $exon2)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
44 Description: Create an Intron object from two exons and an optional analysis
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
45 Returntype : Bio::EnsEMBL::Intron
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
46 Exceptions : exons not on the same strand or slice.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
47 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
48 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
49
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
50 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
51
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
52 sub new {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
53 my ( $proto, $e1, $e2, $analysis ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
54
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
55 my $class = ref $proto || $proto;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
56
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
57 my $self = $class->SUPER::new();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
58
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
59 if ( $e1->strand() == -1 ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
60 $self->{'end'} = $e1->start() - 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
61 $self->{'start'} = $e2->end() + 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
62 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
63 $self->{'start'} = $e1->end() + 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
64 $self->{'end'} = $e2->start() - 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
65 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
66
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
67 if ( $e1->strand() != $e2->strand() ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
68 # throw("Exons on different strand. Not allowed");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
69 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
70 $self->{'strand'} = $e1->strand();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
71 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
72
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
73 if ( $e1->slice() ne $e2->slice() ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
74 if ( ( $e1->slice()->seq_region_name() ne
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
75 $e2->slice()->seq_region_name() )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
76 && ( $e1->slice()->coord_system_name() ne
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
77 $e2->slice()->coord_system_name() ) )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
78 {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
79 throw("Exons on different slices. Not allowed");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
80 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
81 warning("Exons have different slice references to the same seq_region");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
82 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
83 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
84 $self->{'slice'} = $e1->slice();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
85 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
86
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
87 if($analysis) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
88 $self->analysis($analysis);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
89 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
90
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
91 $self->{'prev'} = $e1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
92 $self->{'next'} = $e2;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
93
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
94 return $self;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
95 } ## end sub new
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
96
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
97 =head2 length
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
98
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
99 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
100 Example : $length = $intron->length();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
101 Description: Returns the length of this intron
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
102 Returntype : Integer
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
103 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
104 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
105 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
106
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
107 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
108
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
109 sub length {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
110 my ($self) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
111
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
112 # TODO: Introns on circular slices, see Feature.pm but allow for
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
113 # zero-length introns.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
114
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
115 return $self->{'end'} - $self->{'start'} + 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
116 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
117
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
118
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
119 =head2 prev_Exon
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
120
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
121 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
122 Example : $exon = $intron->prev_Exon
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
123 Description: Returns the exon before this Intron
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
124 Returntype : Bio::EnsEMBL::Exon
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
125 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
126 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
127 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
128
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
129 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
130
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
131 sub prev_Exon {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
132 my ($self) = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
133
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
134 return $self->{'prev'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
135 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
136
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
137
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
138 =head2 next_Exon
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
139
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
140 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
141 Example : $exon = $intron->next_Exon
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
142 Description: Returns the exon after this Intron
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
143 Returntype : Bio::EnsEMBL::Exon
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
144 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
145 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
146 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
147
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
148 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
149
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
150 sub next_Exon {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
151 my ($self) = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
152
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
153 return $self->{'next'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
154 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
155
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
156 =head2 is_splice_canonical
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
157
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
158 Example : my $canonical = $intron->is_splice_canonical();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
159 Description : Indicates if the splice site is considered normal. This means
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
160 splice site variants equal to (D == donor, A == acceptor)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
161 GT (D) => AG (A)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
162 AT (D) => AC (A)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
163 GC (D) => AG (A)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
164 Returntype : Boolean indicating if the splice was as expected
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
165 Exceptions : See splice_seq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
166
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
167 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
168
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
169 sub is_splice_canonical {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
170 my ($self) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
171 my $splice = join q{}, @{$self->splice_seq()};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
172 my $canonical = {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
173 'GTAG' => 1, 'ATAC' => 1, 'GCAG' => 1
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
174 }->{$splice};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
175 return $canonical || 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
176 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
177
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
178 =head2 splice_seq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
179
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
180 Example : my ($donor, $acceptor) = @{$intron->splice_seq};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
181 Description : Get the donor and acceptor splice sites for this intron
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
182 Returntype : ArrayRef[String] The donor and acceptor sequences as Strings
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
183 Exceptions : Thrown if a feature Slice cannot be found
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
184
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
185 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
186
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
187 sub splice_seq {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
188 my ($self) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
189 my $slice = $self->feature_Slice();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
190 throw "Cannot retrieve feature_Slice() for this Intron" unless $slice;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
191 my $length = $self->length();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
192 my $donor_seq = uc($slice->subseq(1,2));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
193 my $acceptor_seq = uc($slice->subseq($length - 1, $length));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
194 return [$donor_seq, $acceptor_seq];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
195 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
196
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
197 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
198
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
199