annotate variant_effect_predictor/Bio/EnsEMBL/Upstream.pm @ 3:d30fa12e4cc5 default tip

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