annotate variant_effect_predictor/Bio/EnsEMBL/Exon.pm @ 0:1f6dce3d34e0

Uploaded
author mahtabm
date Thu, 11 Apr 2013 02:01:53 -0400
parents
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::Exon - A class representing an Exon
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 $ex = new Bio::EnsEMBL::Exon(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 -START => 100,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 -END => 200,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 -STRAND => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 -SLICE => $slice,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 -DBID => $dbID,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 -ANALYSIS => $analysis,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 -STABLE_ID => 'ENSE000000123',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 -VERSION => 2
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 # seq() returns a Bio::Seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 my $seq = $exon->seq->seq();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 # Peptide only makes sense within transcript context
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 my $pep = $exon->peptide($transcript)->seq();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 # Normal feature operations can be performed:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 $exon = $exon->transform('clone');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 $exon->move( $new_start, $new_end, $new_strand );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 print $exon->slice->seq_region_name();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 This is a class which represents an exon which is part of a transcript.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 See Bio::EnsEMBL:Transcript
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 =head1 METHODS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 package Bio::EnsEMBL::Exon;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 use Bio::EnsEMBL::Feature;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 use Bio::Seq; # exons have to have sequences...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 use Bio::EnsEMBL::Utils::Exception qw( warning throw deprecate );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 use Bio::EnsEMBL::Utils::Argument qw( rearrange );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 use Bio::EnsEMBL::Utils::Scalar qw( assert_ref );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 use Bio::EnsEMBL::DBSQL::SupportingFeatureAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 use vars qw(@ISA);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 @ISA = qw(Bio::EnsEMBL::Feature);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 =head2 new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 Arg [-SLICE]: Bio::EnsEMBL::SLice - Represents the sequence that this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 feature is on. The coordinates of the created feature are
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 relative to the start of the slice.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 Arg [-START]: The start coordinate of this feature relative to the start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 of the slice it is sitting on. Coordinates start at 1 and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 are inclusive.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 Arg [-END] : The end coordinate of this feature relative to the start of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 the slice it is sitting on. Coordinates start at 1 and are
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 inclusive.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 Arg [-STRAND]: The orientation of this feature. Valid values are 1,-1,0.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 Arg [-SEQNAME] : (optional) A seqname to be used instead of the default name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 of the of the slice. Useful for features that do not have an
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 attached slice such as protein features.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 Arg [-dbID] : (optional) internal database id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 Arg [-ADAPTOR]: (optional) Bio::EnsEMBL::DBSQL::BaseAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 Arg [-PHASE] : the phase.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 Arg [-END_PHASE]: the end phase
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 Arg [-STABLE_ID]: (optional) the stable id of the exon
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 Arg [-VERSION] : (optional) the version
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 Arg [-CREATED_DATE] : (optional) the created date
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 Arg [-MODIFIED_DATE]: (optional) the last midifeid date
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 Example : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 Description: create an Exon object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 Returntype : Bio::EnsEMBL::Exon
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 Exceptions : if phase is not valid (i.e. 0,1, 2 -1)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 my $class = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 $class = ref $class || $class;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 my $self = $class->SUPER::new( @_ );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 my ( $phase, $end_phase, $stable_id, $version, $created_date,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 $modified_date, $is_current, $is_constitutive )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 = rearrange( [
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 "PHASE", "END_PHASE",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 "STABLE_ID", "VERSION",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 "CREATED_DATE", "MODIFIED_DATE",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 "IS_CURRENT", "IS_CONSTITUTIVE"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 ],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 @_
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 if ( defined($phase) ) { # make sure phase is valid.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 $self->phase($phase);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 $self->{'end_phase'} = $end_phase;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 $self->{'stable_id'} = $stable_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 $self->{'version'} = $version;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 $self->{'created_date'} = $created_date;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 $self->{'modified_date'} = $modified_date;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 # Default is_current
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 if ( !defined($is_current) ) { $is_current = 1 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 $self->{'is_current'} = $is_current;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 # Default is_constitutive
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 if ( !defined($is_constitutive) ) { $is_constitutive = 0 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 $self->{'is_constitutive'} = $is_constitutive;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 return $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 # =head2 new_fast
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 # Arg [1] : Bio::EnsEMBL::Slice $slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 # Arg [2] : int $start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 # Arg [3] : int $end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 # Arg [4] : int $strand (1 or -1)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 # Example : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 # Description: create an Exon object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 # Returntype : Bio::EnsEMBL::Exon
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 # Exceptions : throws if end < start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 # Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 # Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 # =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 # sub new_fast {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 # my ($class, $slice, $start, $end, $strand) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 # my $self = bless {}, $class;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 # # Swap start and end if they're in the wrong order
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 # # We assume that the strand is correct and keep the input value.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 # if ($start > $end) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 # throw( "End smaller than start not allowed" );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 # }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 # $self->start ($start);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 # $self->end ($end);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 # $self->strand($strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 # $self->slice($slice);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 # return $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 # }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 =head2 end_phase
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 Arg [1] : (optional) int $end_phase
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 Example : $end_phase = $feat->end_phase;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 Description: Gets/Sets the end phase of the exon.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 end_phase = number of bases from the last incomplete codon of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 this exon.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 Usually, end_phase = (phase + exon_length)%3
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 but end_phase could be -1 if the exon is half-coding and its 3
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 prime end is UTR.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 Returntype : int
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 Exceptions : warning if end_phase is called without an argument and the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 value is not set.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 sub end_phase {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 if (@_) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 $self->{'end_phase'} = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 if ( !defined( $self->{'end_phase'} ) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 warning("No end phase set in Exon. You must set it explicitly.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 return $self->{'end_phase'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 =head2 phase
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 Arg [1] : (optional) int $phase
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 Example : my $phase = $exon->phase;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 $exon->phase(2);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 Description: Gets/Sets the phase of the exon.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 Returntype : int
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 Exceptions : throws if phase is not (0, 1 2 or -1).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 Get or set the phase of the Exon, which tells the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 translation machinery, which makes a peptide from
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 the DNA, where to start.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 The Ensembl phase convention can be thought of as
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 "the number of bases of the first codon which are
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 on the previous exon". It is therefore 0, 1 or 2
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 (or -1 if the exon is non-coding). In ascii art,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 with alternate codons represented by B<###> and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 B<+++>:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 Previous Exon Intron This Exon
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 ...------------- -------------...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 5' Phase 3'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 ...#+++###+++### 0 +++###+++###+...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 ...+++###+++###+ 1 ++###+++###++...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 ...++###+++###++ 2 +###+++###+++...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 Here is another explanation from Ewan:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 Phase means the place where the intron lands
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 inside the codon - 0 between codons, 1 between
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 the 1st and second base, 2 between the second and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 3rd base. Exons therefore have a start phase and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 a end phase, but introns have just one phase.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 sub phase {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 my ($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 if (defined($value)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 # Value must be 0,1,2, or -1 for non-coding
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 if ($value =~ /^(-1|0|1|2)$/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 #print STDERR "Setting phase to $value\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 $self->{'phase'} = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 throw("Bad value ($value) for exon phase. Should only be" .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 " -1,0,1,2\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 return $self->{'phase'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 =head2 frame
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 Arg [1] : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 Example : $frame = $exon->frame
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 Description: Gets the frame of this exon
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 Returntype : int
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 Exceptions : thrown if an arg is passed
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 thrown if frame cannot be calculated due to a bad phase value
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 sub frame {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 my ($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 if( defined $value ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 throw("Cannot set frame. Deduced from seq_start and phase");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 # frame is mod 3 of the translation point
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 if( $self->phase == -1 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 return '.'; # gff convention for no frame info
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 if( $self->phase == 0 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 return $self->start%3;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 if( $self->phase == 1 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 return ($self->start+2)%3;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 if( $self->phase == 2 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 return ($self->start+1)%3;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 throw("bad phase in exon ".$self->phase);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 =head2 start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 Arg [1] : int $start (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 Example : $start = $exon->start();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 Description: Getter/Setter for the start of this exon. The superclass
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 implmentation is overridden to flush the internal sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 cache if this value is altered
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 Returntype : int
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 sub start {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 # if an arg was provided, flush the internal sequence cache
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 delete $self->{'_seq_cache'} if(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 return $self->SUPER::start(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 =head2 end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 Arg [1] : int $end (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 Example : $end = $exon->end();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 Description: Getter/Setter for the end of this exon. The superclass
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 implmentation is overridden to flush the internal sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 cache if this value is altered
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 Returntype : int
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 sub end {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 # if an arg was provided, flush the internal sequence cache
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 delete $self->{'_seq_cache'} if(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 return $self->SUPER::end(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 =head2 strand
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 Arg [1] : int $strand (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 Example : $start = $exon->strand();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 Description: Getter/Setter for the strand of this exon. The superclass
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 implmentation is overridden to flush the internal sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 cache if this value is altered
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 Returntype : int
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 sub strand {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 # if an arg was provided, flush the internal sequence cache
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376 delete $self->{'_seq_cache'} if(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 return $self->SUPER::strand(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 =head2 cdna_start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 Arg [1] : Bio::EnsEMBL::Transcript $transcript
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 The transcript for which cDNA coordinates should be
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 relative to.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 Example : $cdna_start = $exon->cdna_start($transcript);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 Description : Returns the start position of the exon in cDNA
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 coordinates.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 Since an exon may be part of one or more transcripts,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 the relevant transcript must be given as argument to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 this method.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 Return type : Integer
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 Exceptions : Throws if the given argument is not a transcript.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393 Throws if the first part of the exon maps into a gap.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 Throws if the exon can not be mapped at all.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 sub cdna_start {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 my ($self, $transcript) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402 assert_ref($transcript, 'Bio::EnsEMBL::Transcript', 'transcript');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404 my $id = $transcript->dbID();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 if(defined $id && exists $self->{cdna_start}->{$id}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407 return $self->{cdna_start}->{$id};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 my $cdna_start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 my @coords = $transcript->genomic2cdna($self->start(), $self->end(), $self->strand());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 if(@coords && !$coords[0]->isa('Bio::EnsEMBL::Mapper::Gap')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 $cdna_start = $coords[0]->start();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 elsif(@coords) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 throw "First part of exon maps into gap";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 throw "Can not map exon";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422 if(defined $id) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 $self->{cdna_start}->{$id} = $cdna_start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426 return $cdna_start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 } ## end sub cdna_start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429 =head2 cdna_end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431 Arg [1] : Bio::EnsEMBL::Transcript $transcript
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432 The transcript for which cDNA coordinates should be
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433 relative to.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 Example : $cdna_end = $exon->cdna_end($transcript);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435 Description : Returns the end position of the exon in cDNA
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436 coordinates.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437 Since an exon may be part of one or more transcripts,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 the relevant transcript must be given as argument to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439 this method.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440 Return type : Integer
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441 Exceptions : Throws if the given argument is not a transcript.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442 Throws if the last part of the exon maps into a gap.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 Throws if the exon can not be mapped at all.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449 sub cdna_end {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450 my ($self, $transcript) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451 assert_ref($transcript, 'Bio::EnsEMBL::Transcript', 'transcript');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453 my $id = $transcript->dbID();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455 if(defined $id && exists $self->{cdna_end}->{$id}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456 return $self->{cdna_end}->{$id};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459 my $cdna_end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460 my @coords = $transcript->genomic2cdna($self->start(), $self->end(), $self->strand());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461 if(@coords && !$coords[-1]->isa('Bio::EnsEMBL::Mapper::Gap')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462 $cdna_end = $coords[-1]->end();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464 elsif(@coords) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465 throw "Last part of exon maps into gap";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468 throw "Can not map exon";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471 if(defined $id) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472 $self->{cdna_end}->{$id} = $cdna_end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475 return $cdna_end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476 } ## end sub cdna_end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478 =head2 cdna_coding_start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480 Arg [1] : Bio::EnsEMBL::Transcript $transcript
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481 The transcript for which cDNA coordinates should be
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482 relative to.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483 Example : $cdna_coding_start = $exon->cdna_coding_start($transcript);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484 Description : Returns the start position of the coding region of the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485 exon in cDNA coordinates. Returns undef if the whole
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486 exon is non-coding.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487 Since an exon may be part of one or more transcripts,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488 the relevant transcript must be given as argument to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489 this method.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490 Return type : Integer or undef
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491 Exceptions : Throws if the given argument is not a transcript.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497 sub cdna_coding_start {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498 my ($self, $transcript) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499 assert_ref($transcript, 'Bio::EnsEMBL::Transcript', 'transcript');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501 my $id = $transcript->dbID();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503 if(defined $id && exists $self->{cdna_coding_start}->{$id}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504 return $self->{cdna_coding_start}->{$id};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507 my $cdna_coding_start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508 my $transcript_coding_start = $transcript->cdna_coding_start();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509 if(defined $transcript_coding_start) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510 my $cdna_start = $self->cdna_start($transcript);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
512 if ( $transcript_coding_start < $cdna_start ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
513 # Coding region starts upstream of this exon...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
514
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
515 if ( $transcript->cdna_coding_end() < $cdna_start ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
516 # ... and also ends upstream of this exon.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
517 $cdna_coding_start = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
518 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
519 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
520 # ... and does not end upstream of this exon.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
521 $cdna_coding_start = $cdna_start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
522 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
523 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
524 # Coding region starts either within or downstream of this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
525 # exon.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
526
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
527 if ( $transcript_coding_start <= $self->cdna_end($transcript) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
528 # Coding region starts within this exon.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
529 $cdna_coding_start = $transcript_coding_start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
530 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
531 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
532 # Coding region starts downstream of this exon.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
533 $cdna_coding_start = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
534 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
535 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
536 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
537 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
538 $cdna_coding_start = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
539 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
540
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
541 if(defined $id) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
542 $self->{cdna_coding_start}->{$id} = $cdna_coding_start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
543 $self->{cdna_coding_end}->{$id} = undef if ! defined $cdna_coding_start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
544 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
545
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
546 return $cdna_coding_start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
547 } ## end sub cdna_coding_start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
548
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
549 =head2 cdna_coding_end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
550
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
551 Arg [1] : Bio::EnsEMBL::Transcript $transcript
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
552 The transcript for which cDNA coordinates should be
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
553 relative to.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
554 Example : $cdna_coding_end = $exon->cdna_coding_end($transcript);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
555 Description : Returns the end position of the coding region of the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
556 exon in cDNA coordinates. Returns undef if the whole
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
557 exon is non-coding.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
558 Since an exon may be part of one or more transcripts,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
559 the relevant transcript must be given as argument to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
560 this method.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
561 Return type : Integer or undef
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
562 Exceptions : Throws if the given argument is not a transcript.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
563 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
564 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
565
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
566 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
567
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
568 sub cdna_coding_end {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
569 my ($self, $transcript) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
570 assert_ref($transcript, 'Bio::EnsEMBL::Transcript', 'transcript');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
571
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
572 my $id = $transcript->dbID();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
573
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
574 if(defined $id && exists $self->{cdna_coding_end}->{$id}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
575 return $self->{cdna_coding_end}->{$id};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
576 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
577
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
578 my $cdna_coding_end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
579 my $transcript_coding_end = $transcript->cdna_coding_end();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
580 if(defined $transcript_coding_end) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
581 my $cdna_end = $self->cdna_end($transcript);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
582
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
583 if ( $transcript_coding_end > $cdna_end ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
584
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
585 # Coding region ends downstream of this exon...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
586 if ( $transcript->cdna_coding_start() > $cdna_end ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
587 # ... and also starts downstream of this exon.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
588 $cdna_coding_end = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
589 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
590 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
591 # ... and does not start downstream of this exon.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
592 $cdna_coding_end = $cdna_end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
593 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
594 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
595 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
596 # Coding region ends either within or upstream of this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
597 # exon.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
598
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
599 if ( $transcript_coding_end >= $self->cdna_start($transcript) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
600 # Coding region ends within this exon.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
601 $cdna_coding_end = $transcript_coding_end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
602 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
603 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
604 # Coding region ends upstream of this exon.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
605 $cdna_coding_end = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
606 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
607 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
608 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
609 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
610 $cdna_coding_end = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
611 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
612
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
613 if(defined $id) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
614 $self->{cdna_coding_end}->{$id} = $cdna_coding_end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
615 $self->{cdna_coding_start}->{$id} = undef if ! defined $cdna_coding_end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
616 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
617
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
618 return $cdna_coding_end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
619 } ## end sub cdna_coding_end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
620
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
621 =head2 coding_region_start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
622
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
623 Arg [1] : Bio::EnsEMBL::Transcript $transcript
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
624 Example : $coding_region_start =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
625 $exon->coding_region_start($transcript);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
626 Description : Returns the start position of the coding region
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
627 of the exon in slice-relative coordinates on the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
628 forward strand. Returns undef if the whole exon is
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
629 non-coding.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
630 Since an exon may be part of one or more transcripts,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
631 the relevant transcript must be given as argument to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
632 this method.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
633 Return type : Integer or undef
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
634 Exceptions : Throws if the given argument is not a transcript.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
635 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
636 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
637
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
638 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
639
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
640 # The implementation of this method is analogous to the implementation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
641 # of cdna_coding_start().
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
642
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
643 sub coding_region_start {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
644 my ($self, $transcript) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
645 assert_ref($transcript, 'Bio::EnsEMBL::Transcript', 'transcript');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
646
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
647 my $id = $transcript->dbID();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
648
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
649 if(defined $id && exists $self->{coding_region_start}->{$id}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
650 return $self->{coding_region_start}->{$id};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
651 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
652
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
653 my $coding_region_start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
654 my $transcript_coding_start = $transcript->coding_region_start();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
655 if(defined $transcript_coding_start) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
656 my $start = $self->start();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
657
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
658 if ( $transcript_coding_start < $start ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
659 # Coding region starts upstream of this exon...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
660
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
661 if ( $transcript->coding_region_end() < $start ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
662 # ... and also ends upstream of this exon.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
663 $coding_region_start = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
664 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
665 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
666 # ... and does not end upstream of this exon.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
667 $coding_region_start = $start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
668 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
669 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
670 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
671 # Coding region starts either within or downstream of this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
672 # exon.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
673
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
674 if ( $transcript_coding_start <= $self->end() ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
675 # Coding region starts within this exon.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
676 $coding_region_start = $transcript_coding_start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
677 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
678 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
679 # Coding region starts downstream of this exon.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
680 $coding_region_start = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
681 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
682 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
683 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
684 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
685 $coding_region_start = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
686 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
687
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
688 if(defined $id) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
689 $self->{coding_region_start}->{$id} = $coding_region_start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
690 $self->{coding_region_end}->{$id} = undef if ! defined $coding_region_start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
691 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
692
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
693 return $coding_region_start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
694 } ## end sub coding_region_start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
695
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
696 =head2 coding_region_end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
697
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
698 Arg [1] : Bio::EnsEMBL::Transcript $transcript
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
699 Example : $coding_region_end =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
700 $exon->coding_region_end($transcript);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
701 Description : Returns the end position of the coding region of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
702 the exon in slice-relative coordinates on the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
703 forward strand. Returns undef if the whole exon is
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
704 non-coding.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
705 Since an exon may be part of one or more transcripts,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
706 the relevant transcript must be given as argument to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
707 this method.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
708 Return type : Integer or undef
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
709 Exceptions : Throws if the given argument is not a transcript.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
710 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
711 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
712
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
713 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
714
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
715 # The implementation of this method is analogous to the implementation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
716 # of cdna_coding_end().
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
717
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
718 sub coding_region_end {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
719 my ($self, $transcript) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
720 assert_ref($transcript, 'Bio::EnsEMBL::Transcript', 'transcript');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
721
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
722 my $id = $transcript->dbID();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
723
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
724 if(defined $id && exists $self->{coding_region_end}->{$id}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
725 return $self->{coding_region_end}->{$id};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
726 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
727
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
728 my $coding_region_end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
729 my $transcript_coding_end = $transcript->coding_region_end();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
730 if(defined $transcript_coding_end) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
731
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
732 my $end = $self->end();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
733 if($transcript_coding_end > $end) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
734 # Coding region ends downstream of this exon...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
735
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
736 if ( $transcript->coding_region_start() > $end ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
737 # ... and also starts downstream of this exon.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
738 $coding_region_end = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
739 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
740 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
741 # ... and does not start downstream of this exon.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
742 $coding_region_end = $end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
743 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
744 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
745 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
746 # Coding region ends either within or upstream of this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
747 # exon.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
748 if ( $transcript_coding_end >= $self->start() ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
749 $coding_region_end = $transcript_coding_end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
750 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
751 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
752 $coding_region_end = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
753 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
754 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
755 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
756 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
757 # This is a non-coding transcript.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
758 $coding_region_end = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
759 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
760
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
761 if(defined $id) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
762 $self->{coding_region_end}->{$id} = $coding_region_end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
763 $self->{coding_region_start}->{$id} = undef if ! defined $coding_region_end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
764 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
765
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
766 return $coding_region_end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
767 } ## end sub coding_region_end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
768
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
769 =head2 slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
770
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
771 Arg [1] : Bio::EnsEMBL::Slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
772 Example : $slice = $exon->slice();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
773 Description: Getter/Setter for the slice this exon is on. The superclass
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
774 implmentation is overridden to flush the internal sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
775 cache if this value is altered
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
776 Returntype : Bio::EnsEMBL::Slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
777 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
778 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
779 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
780
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
781 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
782
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
783 sub slice {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
784 my ( $self, $slice ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
785
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
786 if ( defined($slice) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
787 # If a new slice was provided, flush the internal sequence cache and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
788 # transfer all supporting evidence to the new slice.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
789
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
790 delete $self->{'_seq_cache'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
791
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
792 if ( exists( $self->{'_supporting_evidence'} ) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
793 my @new_features;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
794
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
795 for my $old_feature ( @{ $self->{'_supporting_evidence'} } ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
796
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
797 my $new_feature;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
798
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
799 if ( defined( $old_feature->slice() ) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
800 $new_feature = $old_feature->transfer($slice);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
801 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
802 # If the old feature does not have a slice, assume transfer is
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
803 # not necessary.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
804 $new_feature = $old_feature;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
805 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
806
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
807 push( @new_features, $new_feature );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
808 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
809
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
810 $self->{'_supporting_evidence'} = \@new_features;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
811 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
812
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
813 return $self->SUPER::slice($slice);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
814 } elsif ( @_ > 1 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
815 return $self->SUPER::slice(undef);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
816 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
817 return $self->SUPER::slice();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
818 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
819 } ## end sub slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
820
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
821 =head2 equals
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
822
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
823 Arg [1] : Bio::EnsEMBL::Exon exon
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
824 Example : if ($exonA->equals($exonB)) { ... }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
825 Description : Compares two exons for equality.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
826 The test for eqality goes through the following list
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
827 and terminates at the first true match:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
828
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
829 1. If Bio::EnsEMBL::Feature::equals() returns false,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
830 then the exons are *not* equal.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
831 2. If both exons have stable IDs: if these are the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
832 same, the exons are equal, otherwise not.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
833 3. If the exons have the same start, end, strand, and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
834 phase, then they are equal, otherwise not.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
835
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
836 Return type : Boolean (0, 1)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
837
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
838 Exceptions : Thrown if a non-transcript is passed as the argument.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
839
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
840 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
841
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
842 sub equals {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
843 my ( $self, $exon ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
844
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
845 if ( !defined($exon) ) { return 0 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
846 if ( $self eq $exon ) { return 1 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
847
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
848 assert_ref( $exon, 'Bio::EnsEMBL::Exon' );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
849
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
850 my $feature_equals = $self->SUPER::equals($exon);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
851 if ( defined($feature_equals) && $feature_equals == 0 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
852 return 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
853 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
854
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
855 if ( defined( $self->stable_id() ) && defined( $exon->stable_id() ) )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
856 {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
857 if ( $self->stable_id() eq $exon->stable_id() ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
858 return 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
859 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
860 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
861 return 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
862 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
863 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
864
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
865 if ( $self->start() == $exon->start() &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
866 $self->end() == $exon->end() &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
867 $self->strand() == $exon->strand() &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
868 $self->phase() == $exon->phase() &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
869 $self->end_phase() == $exon->end_phase() )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
870 {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
871 return 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
872 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
873
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
874 return 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
875 } ## end sub equals
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
876
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
877 =head2 move
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
878
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
879 Arg [1] : int start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
880 Arg [2] : int end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
881 Arg [3] : (optional) int strand
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
882 Example : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
883 Description: Sets the start, end and strand in one call rather than in
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
884 3 seperate calls to the start(), end() and strand() methods.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
885 This is for convenience and for speed when this needs to be
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
886 done within a tight loop. This overrides the superclass
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
887 move() method so that the internal sequence cache can be
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
888 flushed if the exon if moved.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
889 Returntype : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
890 Exceptions : Thrown is invalid arguments are provided
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
891 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
892 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
893
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
894 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
895
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
896 sub move {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
897 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
898 # flush the internal sequence cache
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
899 delete $self->{'_seq_cache'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
900 return $self->SUPER::move(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
901 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
902
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
903
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
904 =head2 transform
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
905
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
906 Arg 1 : String $coordinate_system_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
907 Arg [2] : String $coordinate_system_version
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
908 Description: moves this exon to the given coordinate system. If this exon has
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
909 attached supporting evidence, they move as well.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
910 Returntype : Bio::EnsEMBL::Exon
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
911 Exceptions : wrong parameters
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
912 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
913 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
914
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
915 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
916
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
917 sub transform {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
918 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
919
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
920 # catch for old style transform calls
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
921 if( !@_ || ( ref $_[0] &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
922 ($_[0]->isa( "Bio::EnsEMBL::Slice" ) or $_[0]->isa( "Bio::EnsEMBL::LRGSlice" ))
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
923 )) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
924 deprecate('Calling transform without a coord system name is deprecated.');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
925 return $self->_deprecated_transform(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
926 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
927
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
928 my $new_exon = $self->SUPER::transform( @_ );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
929 if (not defined $new_exon or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
930 $new_exon->length != $self->length) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
931 return undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
932 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
933
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
934 if( exists $self->{'_supporting_evidence'} ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
935 my @new_features;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
936 for my $old_feature ( @{$self->{'_supporting_evidence'}} ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
937 my $new_feature = $old_feature->transform( @_ );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
938 if (defined $new_feature) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
939 push( @new_features, $new_feature );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
940 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
941 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
942 $new_exon->{'_supporting_evidence'} = \@new_features;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
943 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
944
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
945 #dont want to share the same sequence cache
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
946 delete $new_exon->{'_seq_cache'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
947
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
948 return $new_exon;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
949 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
950
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
951
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
952 =head2 transfer
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
953
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
954 Arg [1] : Bio::EnsEMBL::Slice $destination_slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
955 Example : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
956 Description: Moves this Exon to given target slice coordinates. If Features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
957 are attached they are moved as well. Returns a new exon.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
958 Returntype : Bio::EnsEMBL::Gene
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
959 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
960 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
961 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
962
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
963 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
964
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
965 sub transfer {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
966 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
967
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
968 my $new_exon = $self->SUPER::transfer( @_ );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
969 return undef unless $new_exon;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
970
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
971 if( exists $self->{'_supporting_evidence'} ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
972 my @new_features;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
973 for my $old_feature ( @{$self->{'_supporting_evidence'}} ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
974 my $new_feature = $old_feature->transfer( @_ );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
975 push( @new_features, $new_feature );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
976 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
977 $new_exon->{'_supporting_evidence'} = \@new_features;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
978 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
979
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
980 #dont want to share the same sequence cache
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
981 delete $new_exon->{'_seq_cache'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
982
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
983 return $new_exon;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
984 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
985
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
986
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
987 =head2 add_supporting_features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
988
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
989 Arg [1] : Bio::EnsEMBL::Feature $feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
990 Example : $exon->add_supporting_features(@features);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
991 Description: Adds a list of supporting features to this exon.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
992 Duplicate features are not added.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
993 If supporting features are added manually in this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
994 way, prior to calling get_all_supporting_features then the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
995 get_all_supporting_features call will not retrieve supporting
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
996 features from the database.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
997 Returntype : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
998 Exceptions : throw if any of the features are not Feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
999 throw if any of the features are not in the same coordinate
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1000 system as the exon
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1001 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1002 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1003
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1004 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1005
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1006 sub add_supporting_features {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1007 my ($self,@features) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1008
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1009 return unless @features;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1010
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1011 $self->{_supporting_evidence} ||= [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1012
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1013 # check whether this feature object has been added already
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1014 FEATURE: foreach my $feature (@features) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1015 unless($feature && $feature->isa("Bio::EnsEMBL::Feature")) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1016 throw("Supporting feat [$feature] not a " .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1017 "Bio::EnsEMBL::Feature");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1018 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1019
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1020 if ((defined $self->slice() && defined $feature->slice())&&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1021 ( $self->slice()->name() ne $feature->slice()->name())){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1022 throw("Supporting feat not in same coord system as exon\n" .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1023 "exon is attached to [".$self->slice()->name()."]\n" .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1024 "feat is attached to [".$feature->slice()->name()."]");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1025 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1026
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1027 foreach my $added_feature ( @{ $self->{_supporting_evidence} } ){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1028 # compare objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1029 if ( $feature == $added_feature ){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1030 # this feature has already been added
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1031 next FEATURE;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1032 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1033 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1034
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1035 # no duplicate was found, add the feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1036 push(@{$self->{_supporting_evidence}},$feature);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1037 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1038 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1039
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1040
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1041 =head2 flush_supporting_features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1042
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1043 Example : $exon->flush_supporting_features;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1044 Description : Removes all supporting evidence from the exon.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1045 Return type : (Empty) listref
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1046 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1047 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1048 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1049
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1050 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1051
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1052 sub flush_supporting_features {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1053 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1054 $self->{'_supporting_evidence'} = [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1055 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1056
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1057
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1058 =head2 get_all_supporting_features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1059
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1060 Arg [1] : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1061 Example : @evidence = @{$exon->get_all_supporting_features()};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1062 Description: Retreives any supporting features added manually by
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1063 calls to add_supporting_features. If no features have been
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1064 added manually and this exon is in a database (i.e. it h
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1065 Returntype : listreference of Bio::EnsEMBL::BaseAlignFeature objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1066 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1067 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1068 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1069
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1070 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1071
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1072 sub get_all_supporting_features {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1073 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1074
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1075 if( !exists $self->{_supporting_evidence} ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1076 if($self->adaptor) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1077 my $sfa = $self->adaptor->db->get_SupportingFeatureAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1078 $self->{_supporting_evidence} = $sfa->fetch_all_by_Exon($self);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1079 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1080 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1081
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1082 return $self->{_supporting_evidence} || [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1083 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1084
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1085
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1086 =head2 find_supporting_evidence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1087
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1088 # This method is only for genebuild backwards compatibility.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1089 # Avoid using it if possible
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1090
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1091 Arg [1] : Bio::EnsEMBL::Feature $features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1092 The list of features to search for supporting (i.e. overlapping)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1093 evidence.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1094 Arg [2] : (optional) boolean $sorted
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1095 Used to speed up the calculation of overlapping features.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1096 Should be set to true if the list of features is sorted in
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1097 ascending order on their start coordinates.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1098 Example : $exon->find_supporting_evidence(\@features);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1099 Description: Looks through all the similarity features and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1100 stores as supporting features any feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1101 that overlaps with an exon.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1102 Returntype : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1103 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1104 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1105 Status : Medium Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1106
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1107 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1108
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1109 sub find_supporting_evidence {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1110 my ($self,$features,$sorted) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1111
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1112 foreach my $f (@$features) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1113 # return if we have a sorted feature array
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1114 if ($sorted == 1 && $f->start > $self->end) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1115 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1116 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1117 if ($f->sub_SeqFeature) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1118 my @subf = $f->sub_SeqFeature;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1119
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1120 $self->find_supporting_evidence(\@subf);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1121 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1122 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1123 if ($f->entire_seq()->name eq $self->slice()->name) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1124 if ($f->end >= $self->start && $f->start <= $self->end && $f->strand == $self->strand) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1125 $self->add_supporting_features($f);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1126 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1127 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1128 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1129 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1130 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1131
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1132
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1133 =head2 stable_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1134
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1135 Arg [1] : string $stable_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1136 Example : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1137 Description: get/set for attribute stable_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1138 Returntype : string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1139 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1140 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1141 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1142
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1143 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1144
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1145 sub stable_id {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1146 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1147 $self->{'stable_id'} = shift if( @_ );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1148 return $self->{'stable_id'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1149 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1150
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1151
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1152 =head2 created_date
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1153
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1154 Arg [1] : string $created_date
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1155 Example : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1156 Description: get/set for attribute created_date
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1157 Returntype : string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1158 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1159 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1160 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1161
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1162 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1163
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1164 sub created_date {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1165 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1166 $self->{'created_date'} = shift if ( @_ );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1167 return $self->{'created_date'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1168 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1169
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1170
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1171 =head2 modified_date
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1172
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1173 Arg [1] : string $modified_date
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1174 Example : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1175 Description: get/set for attribute modified_date
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1176 Returntype : string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1177 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1178 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1179 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1180
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1181 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1182
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1183 sub modified_date {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1184 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1185 $self->{'modified_date'} = shift if ( @_ );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1186 return $self->{'modified_date'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1187 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1188
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1189
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1190 =head2 version
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1191
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1192 Arg [1] : string $version
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1193 Example : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1194 Description: get/set for attribute version
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1195 Returntype : string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1196 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1197 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1198 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1199
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1200 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1201
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1202 sub version {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1203 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1204 $self->{'version'} = shift if( @_ );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1205 return $self->{'version'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1206 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1207
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1208
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1209 =head2 is_current
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1210
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1211 Arg [1] : Boolean $is_current
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1212 Example : $exon->is_current(1)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1213 Description: Getter/setter for is_current state of this exon.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1214 Returntype : Int
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1215 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1216 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1217 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1218
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1219 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1220
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1221 sub is_current {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1222 my ( $self, $value ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1223
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1224 if ( defined($value) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1225 $self->{'is_current'} = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1226 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1227 return $self->{'is_current'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1228 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1229
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1230 =head2 is_constitutive
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1231
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1232 Arg [1] : Boolean $is_constitutive
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1233 Example : $exon->is_constitutive(0)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1234 Description: Getter/setter for is_constitutive state of this exon.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1235 Returntype : Int
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1236 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1237 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1238 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1239
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1240 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1241
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1242 sub is_constitutive {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1243 my ( $self, $value ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1244
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1245 if ( defined($value) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1246 $self->{'is_constitutive'} = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1247 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1248 return $self->{'is_constitutive'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1249 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1250
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1251
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1252 =head2 adjust_start_end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1253
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1254 Arg 1 : int $start_adjustment
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1255 Arg 2 : int $end_adjustment
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1256 Example : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1257 Description: returns a new Exon with this much shifted coordinates
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1258 Returntype : Bio::EnsEMBL::Exon
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1259 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1260 Caller : Transcript->get_all_translateable_Exons()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1261 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1262
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1263 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1264
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1265 sub adjust_start_end {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1266 my ( $self, $start_adjust, $end_adjust ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1267
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1268 my $new_exon = Bio::EnsEMBL::Exon->new();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1269 %{$new_exon} = %{$self};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1270
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1271 #invalidate the sequence cache
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1272 delete $new_exon->{'_seq_cache'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1273
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1274 if( $self->strand() == 1 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1275 $new_exon->start( $self->start() + $start_adjust );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1276 $new_exon->end( $self->end() + $end_adjust )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1277 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1278 $new_exon->start( $self->start() - $end_adjust );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1279 $new_exon->end( $self->end() - $start_adjust )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1280 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1281
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1282 return $new_exon;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1283 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1284
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1285
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1286 =head2 peptide
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1287
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1288 Arg [1] : Bio::EnsEMBL::Transcript $tr
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1289 Example : my $pep_str = $exon->peptide($transcript)->seq;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1290 Description: Retrieves the portion of the transcripts peptide
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1291 encoded by this exon. The transcript argument is necessary
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1292 because outside of the context of a transcript it is not
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1293 possible to correctly determine the translation. Note that
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1294 an entire amino acid will be present at the exon boundaries
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1295 even if only a partial codon is present. Therefore the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1296 concatenation of all of the peptides of a transcripts exons
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1297 is not the same as a transcripts translation because the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1298 summation may contain duplicated amino acids at splice sites.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1299 In the case that this exon is entirely UTR, a Bio::Seq object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1300 with an empty sequence string is returned.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1301 Returntype : Bio::Seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1302 Exceptions : thrown if transcript argument is not provided
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1303 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1304 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1305
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1306 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1307
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1308 sub peptide {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1309 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1310 my $tr = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1311
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1312 unless($tr && ref($tr) && $tr->isa('Bio::EnsEMBL::Transcript')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1313 throw("transcript arg must be Bio::EnsEMBL:::Transcript not [$tr]");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1314 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1315
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1316 #convert exons coordinates to peptide coordinates
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1317 my $tmp_exon = $self->transfer($tr->slice);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1318 if (!$tmp_exon) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1319 throw("Couldn't transfer exon to transcript's slice");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1320 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1321
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1322 my @coords =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1323 $tr->genomic2pep($tmp_exon->start, $tmp_exon->end, $tmp_exon->strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1324
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1325 #filter out gaps
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1326 @coords = grep {$_->isa('Bio::EnsEMBL::Mapper::Coordinate')} @coords;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1327
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1328 #if this is UTR then the peptide will be empty string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1329 my $pep_str = '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1330
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1331
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1332 if(scalar(@coords) > 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1333 my $coord = $self->_merge_ajoining_coords(\@coords);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1334 if($coord) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1335 @coords = ($coord);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1336 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1337 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1338 my ($e_id, $tr_id) = ($self->stable_id(), $tr->stable_id());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1339 throw("Error. Exon maps to multiple locations in peptide and those".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1340 " locations are not continuous." .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1341 " Is this exon [$e_id] a member of this transcript [$tr_id]?");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1342 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1343 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1344 elsif(scalar(@coords) == 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1345 my $c = $coords[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1346 my $pep = $tr->translate;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1347
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1348 #bioperl doesn't give back residues for incomplete codons
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1349 #make sure we don't subseq too far...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1350 my ($start, $end);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1351 $end = ($c->end > $pep->length) ? $pep->length : $c->end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1352 $start = ($c->start < $end) ? $c->start : $end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1353 $pep_str = $tr->translate->subseq($start, $end);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1354 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1355
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1356 return
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1357 Bio::Seq->new( -seq => $pep_str,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1358 -moltype => 'protein',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1359 -alphabet => 'protein',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1360 -id => $self->display_id );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1361 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1362
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1363 =head2 _merge_ajoining_coords
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1364
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1365 Arg [1] : ArrayRef of Bio::EnsEMBL::Mapper::Coordinate objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1366 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1367 Description : Merges coords which are ajoining or overlapping
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1368 Returntype : Bio::EnsEMBL::Mapper::Coordinate or undef if it cannot happen
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1369 Exceptions : Exception if the cooords cannot be condensed into one location
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1370 Caller : internal
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1371 Status : Development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1372
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1373 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1374
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1375 sub _merge_ajoining_coords {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1376 my ($self, $coords) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1377
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1378 my $okay = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1379 my $coord = shift @{$coords};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1380 my $start = $coord->start();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1381 my $last_end = $coord->end();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1382 foreach my $other_coord (@{$coords}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1383 if( ($last_end + 1) >= $other_coord->start() ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1384 $last_end = $other_coord->end();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1385 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1386 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1387 $okay = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1388 last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1389 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1390 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1391
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1392 if(!$okay) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1393 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1394 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1395
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1396 my $new_coord = Bio::EnsEMBL::Mapper::Coordinate->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1397 $coord->id(), $start, $last_end, $coord->strand(), $coord->rank());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1398 return $new_coord;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1399 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1400
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1401
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1402
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1403
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1404 =head2 seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1405
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1406 Arg [1] : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1407 Example : my $seq_str = $exon->seq->seq;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1408 Description: Retrieves the dna sequence of this Exon.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1409 Returned in a Bio::Seq object. Note that the sequence may
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1410 include UTRs (or even be entirely UTR).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1411 Returntype : Bio::Seq or undef
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1412 Exceptions : warning if argument passed,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1413 warning if exon does not have attatched slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1414 warning if exon strand is not defined (or 0)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1415 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1416 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1417
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1418 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1419
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1420 sub seq {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1421 my ( $self, $arg ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1422
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1423 if ( defined $arg ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1424 warning("seq setting on Exon not supported currently");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1425 $self->{'_seq_cache'} = $arg->seq();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1426 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1427
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1428 if ( !defined( $self->{'_seq_cache'} ) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1429 my $seq;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1430
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1431 if ( !defined $self->slice() ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1432 warning("Cannot retrieve seq for exon without slice\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1433 return undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1434 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1435
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1436 if ( !$self->strand() ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1437 warning("Cannot retrieve seq for unstranded exon\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1438 return undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1439 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1440
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1441 if ($self->slice->is_circular() ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1442 if ( $self->slice->start > $self->slice->end) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1443 # Normally exons overlapping chromosome origin will have negative feature start, but slice will be from 1 .. length
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1444 # But in case you got an exon attached to a sub slice try this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1445 my $mid_point = $self->slice()->seq_region_length() - $self->slice()->start() + 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1446 my $seq1 = $self->slice()->subseq( $self->start(), $mid_point, $self->strand() );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1447
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1448 my $seq2 = $self->slice()->subseq( $mid_point + 1, $self->end(), $self->strand() );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1449
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1450 $seq = $self->strand() > 0 ? "$seq1$seq2" : "$seq2$seq1";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1451 } elsif ( $self->start < 0 || $self->start > $self->end) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1452 # Normally exons overlapping chromosome origin will be 0 based, and can have negative start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1453 # But if you go via sub_Slice it gives you chromosome based coordinates, i.e it will have start greater then end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1454 my $start_point = $self->slice->seq_region_length + $self->slice->start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1455 my $mid_point = $self->slice->seq_region_length;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1456 my $seq1 = $self->slice->subseq( $self->start, $mid_point, $self->strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1457 my $seq2 = $self->slice->subseq(1, $self->end, $self->strand );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1458 $seq = $self->strand > 0 ? "$seq1$seq2" : "$seq2$seq1";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1459 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1460 # End this is the case for genes not overlapping the origin
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1461 $seq = $self->slice()->subseq( $self->start(), $self->end(), $self->strand() );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1462 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1463 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1464 $seq = $self->slice()->subseq( $self->start(), $self->end(), $self->strand() );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1465 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1466
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1467 $self->{'_seq_cache'} = $seq;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1468 } ## end if ( !defined( $self->...))
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1469
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1470 return
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1471 Bio::Seq->new( -seq => $self->{'_seq_cache'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1472 -id => $self->display_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1473 -moltype => 'dna',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1474 -alphabet => 'dna' );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1475 } ## end sub seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1476
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1477
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1478 =head2 hashkey
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1479
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1480 Arg [1] : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1481 Example : if(exists $hash{$exon->hashkey}) { do_something(); }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1482 Description: Returns a unique hashkey that can be used to uniquely identify
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1483 this exon. Exons are considered to be identical if they share
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1484 the same seq_region, start, end, strand, phase, end_phase.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1485 Note that this will consider two exons on different slices
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1486 to be different, even if they actually are not.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1487 Returntype : string formatted as slice_name-start-end-strand-phase-end_phase
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1488 Exceptions : thrown if not all the necessary attributes needed to generate
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1489 a unique hash value are set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1490 set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1491 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1492 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1493
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1494 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1495
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1496 sub hashkey {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1497 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1498
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1499 my $slice = $self->{'slice'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1500 my $slice_name = ($slice) ? $slice->name() : undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1501 my $start = $self->{'start'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1502 my $end = $self->{'end'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1503 my $strand = $self->{'strand'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1504 my $phase = $self->{'phase'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1505 my $end_phase = $self->{'end_phase'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1506
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1507 if(!defined($slice_name)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1508 throw('Slice must be set to generate correct hashkey.');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1509 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1510
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1511 if(!defined($start)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1512 warning("start attribute must be defined to generate correct hashkey.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1513 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1514
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1515 if(!defined($end)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1516 throw("end attribute must be defined to generate correct hashkey.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1517 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1518
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1519 if(!defined($strand)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1520 throw("strand attribute must be defined to generate correct hashkey.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1521 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1522
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1523 if(!defined($phase)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1524 throw("phase attribute must be defined to generate correct hashkey.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1525 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1526
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1527 if(!defined($end_phase)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1528 throw("end_phase attribute must be defined to generate correct hashkey.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1529 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1530
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1531 return "$slice_name-$start-$end-$strand-$phase-$end_phase";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1532 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1533
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1534
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1535 =head2 display_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1536
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1537 Arg [1] : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1538 Example : print $exons->display_id();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1539 Description: This method returns a string that is considered to be
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1540 the 'display' identifier. For exons this is (depending on
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1541 availability and in this order) the stable Id, the dbID or an
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1542 empty string.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1543 Returntype : string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1544 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1545 Caller : web drawing code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1546 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1547
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1548 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1549
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1550 sub display_id {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1551 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1552 return $self->{'stable_id'} || $self->dbID || '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1553 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1554
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1555
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1556 =head2 load
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1557
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1558 Args : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1559 Example : $exon->load();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1560 Description : The Ensembl API makes extensive use of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1561 lazy-loading. Under some circumstances (e.g.,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1562 when copying genes between databases), all data of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1563 an object needs to be fully loaded. This method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1564 loads the parts of the object that are usually
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1565 lazy-loaded.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1566 Returns : Nothing.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1567
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1568 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1569
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1570 sub load {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1571 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1572
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1573 $self->analysis();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1574 $self->stable_id();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1575 $self->get_all_supporting_features();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1576 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1577
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1578 =head1 DEPRECATED METHODS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1579
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1580 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1581
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1582
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1583 =head2 _get_stable_entry_info
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1584
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1585 Description: DEPRECATED.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1586
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1587 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1588
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1589 sub _get_stable_entry_info {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1590 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1591 deprecate( "This function shouldnt be called any more" );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1592 if( !defined $self->adaptor ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1593 return undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1594 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1595 $self->adaptor->get_stable_entry_info($self);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1596 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1597
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1598
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1599 =head2 temporary_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1600
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1601 Description: DEPRECATED. This should not be necessary.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1602
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1603 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1604
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1605 sub temporary_id {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1606 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1607 deprecate('It should not be necessary to use this method.');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1608 $self->{'tempID'} = shift if(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1609 return $self->{'tempID'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1610 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1611
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1612
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1613 =head2 created
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1614
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1615 Description: DEPRECATED. Do not use.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1616
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1617 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1618
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1619 sub created {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1620 my ($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1621 deprecate( "Created attribute not supported any more." );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1622 if(defined $value ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1623 $self->{'_created'} = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1624 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1625 return $self->{'_created'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1626 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1627
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1628 =head2 modified
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1629
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1630 Description: DEPRECATED. Do not use.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1631
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1632 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1633
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1634
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1635 sub modified {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1636 my ($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1637 deprecate( "Modified attribute not supported any more." );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1638 if( defined $value ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1639 $self->{'_modified'} = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1640 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1641 return $self->{'_modified'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1642 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1643
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1644
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1645 =head2 type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1646
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1647 Description: DEPRECATED. Do not use.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1648
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1649 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1650
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1651 sub type {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1652 my ($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1653 deprecate("Type attribute not supported anymore.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1654 if (defined($value)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1655 $self->{'type'} = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1656 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1657 return $self->{'type'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1658 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1659
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1660
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1661 1;