annotate variant_effect_predictor/Bio/EnsEMBL/Exon.pm @ 0:21066c0abaf5 draft

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