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

Deleted selected files
author willmclaren
date Fri, 03 Aug 2012 10:05:43 -0400
parents 21066c0abaf5
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1 =head1 LICENSE
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
3 Copyright (c) 1999-2012 The European Bioinformatics Institute and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
4 Genome Research Limited. All rights reserved.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
5
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
6 This software is distributed under a modified Apache license.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
7 For license details, please see
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
8
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
9 http://www.ensembl.org/info/about/code_licence.html
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
10
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
11 =head1 CONTACT
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
12
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
13 Please email comments or questions to the public Ensembl
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
14 developers list at <dev@ensembl.org>.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
15
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
16 Questions may also be sent to the Ensembl help desk at
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
17 <helpdesk@ensembl.org>.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
18
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
19 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
20
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
21 =head1 NAME
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
22
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
23 Bio::EnsEMBL::Upstream - Object that defines an upstream region
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
24
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
25 =head1 SYNOPSIS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
26
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
27 use Bio::EnsEMBL::Upstream;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
28
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
29 my $upstream = Bio::EnsEMBL::Upstream->new(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
30 -transcript => $transcript,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
31 -length => 2000 # bp
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
32 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
33
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
34 # Retrieve coordinates of upstream region
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
35 my $upstream_region_start = $upstream->upstart;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
36 my $upstream_region_end = $upstream->upend;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
37
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
38 # Retrieve coordinates in 'downstream' first intron
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
39 my $intron_region_start = $upstream->downstart;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
40 my $intron_region_end = $upstream->downend;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
41
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
42 # Coordinates are returned in the same scheme as the input transcript.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
43 # However, the coordinates of an upstream region can be transformed to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
44 # any other scheme using a slice
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
45
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
46 $upstream->transform($slice);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
47
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
48 # Coordinates can be retrieved in scheme in the same manner as the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
49 # above.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
50
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
51 =head1 DESCRIPTION
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
52
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
53 An object that determines the upstream region of a transcript. Such a
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
54 region is non-coding and ensures that other genes or transcripts are
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
55 not present. Ultimately, these objects can be used to looking for
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
56 promoter elements. To this end, it is also possible to derive a region
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
57 downstream of the first exon, within the first intron and where promoter
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
58 elements sometimes are found.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
59
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
60 =head1 METHODS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
61
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
62 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
63
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
64 package Bio::EnsEMBL::Upstream;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
65
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
66 use strict;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
67 use vars qw(@ISA);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
68 use Bio::EnsEMBL::DBSQL::DBAdaptor;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
69 use Bio::EnsEMBL::DBSQL::SimpleFeatureAdaptor;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
70
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
71 use Bio::EnsEMBL::Utils::Exception qw(throw);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
72 use Bio::EnsEMBL::Utils::Argument qw(rearrange);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
73
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
74 @ISA = qw(Bio::EnsEMBL::Feature);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
75
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
76
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
77 =head2 new
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
78
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
79 Arg [transcript] : (optional) Bio::EnsEMBL::Transcript
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
80 Arg [length] : (optional) int $length
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
81 Example : $upstream = Bio::EnsEMBL::Upstream->new(-transcript => $transcript,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
82 -length => 2000);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
83 Description: Creates a new upstream object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
84 Returntype : Bio::EnsEMBL::Upstream
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
85 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
86 Caller : Bio::EnsEMBL::Transcript, general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
87 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
88
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
89 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
90
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
91 sub new {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
92 my ($class, @args) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
93 my $self = {};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
94
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
95 bless $self, $class;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
96
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
97 my ($transcript,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
98 $length) = rearrange([qw(TRANSCRIPT
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
99 LENGTH
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
100 )],@args);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
101
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
102 $self->transcript($transcript) if defined $transcript;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
103 $self->length($length) if $length;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
104
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
105 return $self
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
106 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
107
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
108 =head2 transcript
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
109
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
110 Arg : (optional) Bio::EnsEMBL::Transcript
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
111 Example : $self->transcript($transcript);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
112 Description: Getter/setter for transcript object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
113 Returntype : Bio::EnsEMBL::Transcript
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
114 Exceptions : Throws if argument is not undefined
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
115 or a Bio::EnsEMBL::Transcript
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
116 Caller : $self->new, $self->_derive_coords,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
117 $self->_first_coding_Exon
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
118 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
119
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
120 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
121
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
122
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
123 sub transcript {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
124 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
125
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
126 if (@_){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
127 $self->{_transcript} = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
128
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
129 if (defined $self->{_transcript}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
130 throw("Transcript is not a Bio::EnsEMBL::Transcript")
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
131 if (! $self->{_transcript}->isa("Bio::EnsEMBL::Transcript"));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
132 $self->_flush_cache;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
133 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
134 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
135
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
136 return $self->{_transcript}
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
137 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
138
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
139 =head2 length
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
140
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
141 Arg : (optional) int $length
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
142 Example : $self->length(2000); # bp
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
143 Description: Getter/setter for upstream region length.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
144 Returntype : int
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
145 Exceptions : Throws if length is requested before it has been set.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
146 Caller : $self->new, $self->_derive_coords
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
147 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
148
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
149 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
150
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
151 sub length {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
152 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
153
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
154 if (@_){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
155 $self->{_length} = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
156 $self->_flush_cache;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
157 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
158
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
159 throw("Region length has not been set.")
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
160 unless $self->{_length};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
161
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
162 return $self->{_length}
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
163 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
164
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
165 =head2 _flush_cache
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
166
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
167 Arg : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
168 Example : $self->_flush_cache;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
169 Description: Empties cached coordinates (called when
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
170 coordinate scheme or region length has changed).
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
171 Returntype : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
172 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
173 Caller : $self->length, $self->transform
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
174 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
175
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
176 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
177
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
178 sub _flush_cache {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
179 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
180
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
181 $self->upstart(undef);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
182 $self->upend(undef);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
183 $self->downstart(undef);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
184 $self->downend(undef);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
185 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
186
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
187 =head2 upstart
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
188
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
189 Arg : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
190 Example : $self->upstart;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
191 Description: Returns the start coordinate of the region
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
192 upstream of the transcript. This coordinate
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
193 is always the furthest from the translation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
194 initiation codon, whereas upend always abutts
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
195 the translation initiation codon.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
196 Returntype : int
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
197 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
198 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
199 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
200
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
201 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
202
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
203 sub upstart {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
204 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
205
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
206 if (@_) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
207 $self->{_upstart} = shift @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
208 return
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
209 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
210
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
211 if (! defined $self->{_upstart}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
212 $self->_derive_coords('up');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
213 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
214
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
215 return $self->{_upstart}
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
216 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
217
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
218 =head2 upend
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
219
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
220 Arg : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
221 Example : $self->upend;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
222 Description: Returns the end coordinate of the region
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
223 upstream of the transcript. This coordinate
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
224 always always abutts the translation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
225 initiation codon, whereas upstart always
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
226 returns the coorindate furthest from the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
227 translation initiation codon.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
228 Returntype : int
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
229 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
230 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
231 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
232
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
233 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
234
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
235 sub upend {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
236 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
237
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
238 if (@_) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
239 $self->{_upend} = shift @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
240 return
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
241 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
242
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
243 if (! defined $self->{_upend}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
244 $self->_derive_coords('up');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
245 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
246
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
247 return $self->{_upend}
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
248 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
249
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
250 =head2 downstart
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
251
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
252 Arg : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
253 Example : $self->downstart;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
254 Description: Returns the start coordinate of the region
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
255 in the first intron of the transcript. This
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
256 coordinate is always closest to the first
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
257 exon (irregardless of strand).
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
258 Returntype : int
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
259 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
260 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
261 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
262
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
263 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
264
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
265 sub downstart {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
266 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
267
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
268 if (@_) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
269 $self->{_downstart} = shift @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
270 return
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
271 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
272
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
273 if (! defined $self->{_downstart}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
274 $self->_derive_coords('down');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
275 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
276
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
277 return $self->{_downstart}
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
278 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
279
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
280 =head2 downend
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
281
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
282 Arg : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
283 Example : $self->downend;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
284 Description: Returns the end coordinate of the region
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
285 in the first intron of the transcript. This
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
286 coordinate is always furthest from the first
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
287 exon (irregardless of strand).
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
288 Returntype : int
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
289 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
290 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
291 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
292
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
293 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
294
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
295 sub downend {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
296 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
297
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
298 if (@_) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
299 $self->{_downend} = shift @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
300 return
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
301 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
302
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
303 if (! defined $self->{_downend}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
304 $self->_derive_coords('down');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
305 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
306
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
307 return $self->{_downend}
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
308 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
309
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
310 =head2 transform
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
311
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
312 Arg :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
313 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
314 Description: Not yet implemented
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
315 Returntype :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
316 Exceptions :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
317 Caller :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
318 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
319
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
320 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
321
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
322
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
323 # Over-riding inherited class. As yet unimplemented.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
324
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
325 sub transform {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
326 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
327
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
328 throw("No transform method implemented for " . $self);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
329 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
330
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
331 =head2 derive_upstream_coords
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
332
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
333 Arg : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
334 Example : my ($upstart, $upend)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
335 = $self->derive_upstream_coords;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
336 Description: Derives upstream coordinates (for
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
337 compatability with older scripts).
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
338 Returntype : arrayref
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
339 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
340 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
341 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
342
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
343 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
344
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
345 sub derive_upstream_coords {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
346 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
347
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
348 return [$self->upstart, $self->upend]
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
349 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
350
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
351 =head2 derive_downstream_coords
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
352
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
353 Arg : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
354 Example : my ($downstart, $downend)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
355 = $self->derive_downstream_coords;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
356 Description: Derives downstream coordinates (for
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
357 compatability with older scripts).
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
358 Returntype : arrayref
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
359 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
360 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
361 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
362
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
363 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
364
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
365 sub derive_downstream_coords {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
366 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
367
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
368 return [$self->downstart, $self->downend]
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
369 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
370
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
371 =head2 _derive_coords
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
372
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
373 Arg : string $direction (either 'up' or 'down').
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
374 Example : $self->_derive_coords('up');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
375 Description: Determines the coordinates of either upstream
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
376 or downstream region.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
377 Returntype : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
378 Exceptions : Throws if argument is not either 'up' or 'down'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
379 Caller : $self->upstart, $self->upend, $self->downstart,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
380 $self->downend
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
381 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
382
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
383 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
384
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
385 sub _derive_coords {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
386 my ($self, $direction) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
387
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
388 # Check direction
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
389 throw("Must specify either \'up\' of \'down\'-stream direction to derive coords.")
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
390 unless (($direction eq 'up')||($direction eq 'down'));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
391
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
392 # Put things in easily accessible places.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
393 my $core_db_slice_adaptor = $self->transcript->slice->adaptor;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
394 my $region_length = $self->length;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
395
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
396 # Whatever coord system the gene is currently is, transform to the toplevel.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
397 my $transcript = $self->transcript->transform('toplevel');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
398
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
399 # Use our transformed transcript to determine the upstream region coords.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
400 # End should always be just before the coding start (like ATG), including 3' UTR.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
401 # Start is the outer limit of the region upstream (furthest from ATG).
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
402
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
403 my $region_start;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
404 my $region_end;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
405
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
406 if ($transcript->strand == 1){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
407 if ($direction eq 'up'){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
408 $region_end = $transcript->coding_region_start - 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
409 $region_start = $region_end - $region_length;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
410 } elsif ($direction eq 'down'){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
411 $region_end = $self->_first_coding_Exon->end + 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
412 $region_start = $region_end + $region_length;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
413 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
414 } elsif ($transcript->strand == -1) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
415 if ($direction eq 'up'){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
416 $region_end = $transcript->coding_region_end + 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
417 $region_start = $region_end + $region_length;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
418
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
419 } elsif ($direction eq 'down'){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
420 $region_end = $self->_first_coding_Exon->start - 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
421 $region_start = $region_end - $region_length;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
422 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
423 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
424
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
425 # Trim the upstream/downstream region to remove extraneous coding sequences
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
426 # from other genes and/or transcripts.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
427
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
428 my ($slice_low_coord, $slice_high_coord) = sort {$a <=> $b} ($region_start, $region_end);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
429
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
430 my $region_slice
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
431 = $core_db_slice_adaptor->fetch_by_region($transcript->slice->coord_system->name,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
432 $transcript->slice->seq_region_name,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
433 $slice_low_coord,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
434 $slice_high_coord);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
435
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
436 if ($transcript->strand == 1) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
437 if ($direction eq 'up') {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
438 $region_start += $self->_bases_to_trim('left_end', $region_slice);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
439 } elsif ($direction eq 'down') {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
440 $region_start -= $self->_bases_to_trim('right_end', $region_slice);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
441 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
442 } elsif ($transcript->strand == -1) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
443 if ($direction eq 'up') {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
444 $region_start -= $self->_bases_to_trim('right_end', $region_slice);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
445 } elsif ($direction eq 'down') {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
446 $region_start += $self->_bases_to_trim('left_end', $region_slice);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
447 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
448 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
449
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
450 # Always return start < end
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
451
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
452 ($region_start, $region_end) = sort {$a <=> $b} ($region_start, $region_end);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
453
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
454 if ($direction eq 'up') {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
455 $self->upstart($region_start);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
456 $self->upend($region_end);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
457 } elsif ($direction eq 'down') {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
458 $self->downstart($region_start);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
459 $self->downend($region_end);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
460 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
461 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
462
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
463 =head2 _bases_to_trim
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
464
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
465 Arg : string $end_to_trim (either 'right_end' or
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
466 'left_end').
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
467 Arg : Bio::EnsEMBL::Slice
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
468 Example : $self->_derive_coords('right_end', $slice);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
469 Description: Finds exons from other genes/transcripts that
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
470 invade our upstream/downstream slice and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
471 returns the number of bases that should be
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
472 truncated from the appropriate end of the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
473 upstream/downstream region.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
474 Returntype : in
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
475 Exceptions : Throws if argument is not either 'right_end'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
476 or 'left_end'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
477 Caller : $self->_derive_coords
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
478 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
479
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
480 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
481
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
482 # Method to look for coding regions that invade the upstream region. For
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
483 # now, this method returns the number of bases to trim. I doesn't yet
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
484 # do anything special if an exon is completely swallowed (truncates at
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
485 # the end of the overlapping exon and discards any non-coding sequence
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
486 # further upstream) or overlaps the 'wrong' end of the region (cases where
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
487 # two alternate exons share one end of sequence - does this happen?).
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
488
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
489 # The input argument 'end' defines the end of the slice that should be
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
490 # truncated.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
491
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
492 sub _bases_to_trim {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
493 my ($self, $end_to_trim, $slice) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
494
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
495 throw "Slice end argument must be either left_end or right_end"
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
496 unless ($end_to_trim eq 'right_end' || $end_to_trim eq 'left_end');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
497
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
498 my @overlap_coords;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
499 my $slice_length = $slice->length;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
500 my $right_trim = 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
501 my $left_trim = 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
502
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
503 foreach my $exon (@{$slice->get_all_Exons}){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
504 next if $exon->stable_id eq $self->_first_coding_Exon->stable_id;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
505
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
506 my $start = $exon->start;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
507 my $end = $exon->end;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
508
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
509 # Choose from four possible exon arrangements
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
510
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
511 # -----|********************|----- Slice
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
512 # --|=========================|--- Exon arrangement 1
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
513 # ----------|======|-------------- Exon arrangement 2
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
514 # --|=======|--------------------- Exon arrangement 3
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
515 # -------------------|=========|-- Exon arrangement 4
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
516
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
517
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
518 if ($start <= 0 && $end >= $slice_length) { # exon arrangement 1
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
519 $right_trim = $slice_length - 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
520 $left_trim = $slice_length - 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
521 last;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
522
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
523 } elsif ($start >= 0 && $end <= $slice_length) { # exon arrangement 2
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
524 my $this_right_trim = ($slice_length - $start) + 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
525
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
526 $right_trim = $this_right_trim
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
527 if $this_right_trim > $right_trim;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
528
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
529 $left_trim = $end
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
530 if $end > $left_trim;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
531
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
532 } elsif ($start <= 0 && $end < $slice_length) { # exon arrangement 3
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
533 $right_trim = $slice_length; # a bit draconian
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
534 $left_trim = $end
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
535 if $end > $left_trim;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
536
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
537 } elsif ($start > 0 && $end >= $slice_length) { # exon arrangement 4
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
538 my $this_right_trim = ($slice_length - $start) + 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
539
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
540 $right_trim = $this_right_trim
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
541 if $this_right_trim > $right_trim;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
542
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
543 $left_trim = $slice_length; # also a bit draconian
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 return $right_trim if $end_to_trim eq 'right_end';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
549 return $left_trim if $end_to_trim eq 'left_end';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
550 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
551
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
552 =head2 _first_coding_Exon
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
553
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
554 Arg : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
555 Example : $self->_first_coding_Exon;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
556 Description: Finds the first exon of our transcript that
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
557 contains coding bases.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
558 Returntype : Bio::EnsEMBL::Exon
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
559 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
560 Caller : $self->_derive_coords, $self->_bases_to_trim
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
561 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
562
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
563 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
564
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
565 sub _first_coding_Exon {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
566 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
567
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
568 unless ($self->{_first_coding_exon}){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
569
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
570 my $exons = $self->transcript->get_all_translateable_Exons;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
571
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
572 $self->{_first_coding_exon} = $exons->[0]
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
573 if $self->transcript->strand == 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
574 $self->{_first_coding_exon} = $exons->[-1]
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
575 if $self->transcript->strand == -1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
576 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
577
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
578 return $self->{_first_coding_exon}
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
579 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
580
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
581
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
582 return 1;