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

Merge heads 2:a5976b2dce6f and 1:09613ce8151e which were created as a result of a recently fixed bug.
author devteam <devteam@galaxyproject.org>
date Mon, 13 Jan 2014 10:38:30 -0500
parents 1f6dce3d34e0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 # $Id: SeqFeatureI.pm,v 1.43.2.5 2003/08/28 19:29:34 jason Exp $
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 # BioPerl module for Bio::SeqFeatureI
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5 # Cared for by Ewan Birney <birney@sanger.ac.uk>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 # Copyright Ewan Birney
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 # You may distribute this module under the same terms as perl itself
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 # POD documentation - main docs before the code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15 Bio::SeqFeatureI - Abstract interface of a Sequence Feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 # get a seqfeature somehow, eg,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 foreach $feat ( $seq->top_SeqFeatures() ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22 print "Feature from ", $feat->start, "to ",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 $feat->end, " Primary tag ", $feat->primary_tag,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24 ", produced by ", $feat->source_tag(), "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26 if( $feat->strand == 0 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 print "Feature applicable to either strand\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 print "Feature on strand ", $feat->strand,"\n"; # -1,1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 foreach $tag ( $feat->all_tags() ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 print "Feature has tag ", $tag, "with values, ",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 join(' ',$feat->each_tag_value($tag)), "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 print "new feature\n" if $feat->has_tag('new');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 # features can have sub features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 my @subfeat = $feat->get_SeqFeatures();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 This interface is the functions one can expect for any Sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 Feature, whatever its implementation or whether it is a more complex
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 type (eg, a Gene). This object doesn\'t actually provide any
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 implemention, it just provides the definitions of what methods one can
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 call. See Bio::SeqFeature::Generic for a good standard implementation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 of this object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 =head1 FEEDBACK
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 User feedback is an integral part of the evolution of this and other
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 Bioperl modules. Send your comments and suggestions preferably to one
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 of the Bioperl mailing lists. Your participation is much appreciated.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 bioperl-l@bioperl.org - General discussion
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 http://bio.perl.org/MailList.html - About the mailing lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 =head2 Reporting Bugs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 Report bugs to the Bioperl bug tracking system to help us keep track
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 the bugs and their resolution. Bug reports can be submitted via email
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 or the web:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 bioperl-bugs@bio.perl.org
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 http://bugzilla.bioperl.org/
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 =head1 APPENDIX
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 The rest of the documentation details each of the object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 methods. Internal methods are usually preceded with a _
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 # Let the code begin...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 package Bio::SeqFeatureI;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 use vars qw(@ISA $HasInMemory);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 BEGIN {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 eval { require Bio::DB::InMemoryCache };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 if( $@ ) { $HasInMemory = 0 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 else { $HasInMemory = 1 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 use Bio::RangeI;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 use Bio::Seq;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 use Carp;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 @ISA = qw(Bio::RangeI);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 =head1 SeqFeatureI specific methods
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 New method interfaces.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 =head2 get_SeqFeatures
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 Title : get_SeqFeatures
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 Usage : @feats = $feat->get_SeqFeatures();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 Function: Returns an array of sub Sequence Features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 Returns : An array
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 sub get_SeqFeatures{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 my ($self,@args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 $self->throw_not_implemented();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 =head2 display_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 Title : display_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 Usage : $name = $feat->display_name()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 Function: Returns the human-readable name of the feature for displays.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 Returns : a string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 sub display_name {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 shift->throw_not_implemented();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 =head2 primary_tag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 Title : primary_tag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 Usage : $tag = $feat->primary_tag()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 Function: Returns the primary tag for a feature,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 eg 'exon'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 Returns : a string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 sub primary_tag{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 my ($self,@args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 $self->throw_not_implemented();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 =head2 source_tag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 Title : source_tag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 Usage : $tag = $feat->source_tag()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 Function: Returns the source tag for a feature,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 eg, 'genscan'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 Returns : a string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 sub source_tag{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 my ($self,@args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 $self->throw_not_implemented();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 =head2 has_tag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 Title : has_tag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 Usage : $tag_exists = $self->has_tag('some_tag')
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 Function:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 Returns : TRUE if the specified tag exists, and FALSE otherwise
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 Args :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 sub has_tag{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 my ($self,@args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 $self->throw_not_implemented();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 =head2 get_tag_values
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 Title : get_tag_values
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 Usage : @values = $self->get_tag_values('some_tag')
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 Function:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 Returns : An array comprising the values of the specified tag.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 Args :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 sub get_tag_values {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 shift->throw_not_implemented();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 =head2 get_all_tags
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 Title : get_all_tags
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 Usage : @tags = $feat->get_all_tags()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 Function: gives all tags for this feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 Returns : an array of strings
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 sub get_all_tags{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 shift->throw_not_implemented();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 =head2 attach_seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 Title : attach_seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 Usage : $sf->attach_seq($seq)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 Function: Attaches a Bio::Seq object to this feature. This
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 Bio::Seq object is for the *entire* sequence: ie
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 from 1 to 10000
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 Note that it is not guaranteed that if you obtain a feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 from an object in bioperl, it will have a sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 attached. Also, implementors of this interface can choose
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 to provide an empty implementation of this method. I.e.,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 there is also no guarantee that if you do attach a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 sequence, seq() or entire_seq() will not return undef.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 The reason that this method is here on the interface is to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 enable you to call it on every SeqFeatureI compliant
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 object, and that it will be implemented in a useful way and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 set to a useful value for the great majority of use
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 cases. Implementors who choose to ignore the call are
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 encouraged to specifically state this in their
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 documentation.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 Returns : TRUE on success
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 Args : a Bio::PrimarySeqI compliant object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 sub attach_seq {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 shift->throw_not_implemented();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 =head2 seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 Title : seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 Usage : $tseq = $sf->seq()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 Function: returns the truncated sequence (if there is a sequence attached)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 for this feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 Returns : sub seq (a Bio::PrimarySeqI compliant object) on attached sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 bounded by start & end, or undef if there is no sequence attached
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 sub seq {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 shift->throw_not_implemented();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 =head2 entire_seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 Title : entire_seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 Usage : $whole_seq = $sf->entire_seq()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 Function: gives the entire sequence that this seqfeature is attached to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 Returns : a Bio::PrimarySeqI compliant object, or undef if there is no
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 sequence attached
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 sub entire_seq {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 shift->throw_not_implemented();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 =head2 seq_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 Title : seq_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 Usage : $obj->seq_id($newval)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 Function: There are many cases when you make a feature that you
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 do know the sequence name, but do not know its actual
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 sequence. This is an attribute such that you can store
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 the ID (e.g., display_id) of the sequence.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 This attribute should *not* be used in GFF dumping, as
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 that should come from the collection in which the seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 feature was found.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 Returns : value of seq_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 Args : newvalue (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 sub seq_id {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 shift->throw_not_implemented();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 =head2 gff_string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 Title : gff_string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 Usage : $str = $feat->gff_string;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 $str = $feat->gff_string($gff_formatter);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 Function: Provides the feature information in GFF format.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 The implementation provided here returns GFF2 by default. If you
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 want a different version, supply an object implementing a method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 gff_string() accepting a SeqFeatureI object as argument. E.g., to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 obtain GFF1 format, do the following:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 my $gffio = Bio::Tools::GFF->new(-gff_version => 1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 $gff1str = $feat->gff_string($gff1io);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 Returns : A string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 Args : Optionally, an object implementing gff_string().
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 sub gff_string{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 my ($self,$formatter) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 $formatter = $self->_static_gff_formatter unless $formatter;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 return $formatter->gff_string($self);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 my $static_gff_formatter = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 =head2 _static_gff_formatter
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 Title : _static_gff_formatter
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 Usage :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 Function:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 Returns :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 Args :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 sub _static_gff_formatter{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 my ($self,@args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 if( !defined $static_gff_formatter ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 $static_gff_formatter = Bio::Tools::GFF->new('-gff_version' => 2);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 return $static_gff_formatter;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 =head1 Bio::RangeI methods
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 List of interfaces inherited from Bio::RangeI (see L<Bio::RangeI>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 for details).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 =head2 start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 Title : start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 Usage : $start = $feat->start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 Function: Returns the start coordinate of the feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 Returns : integer
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 =head2 end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 Title : end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 Usage : $end = $feat->end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 Function: Returns the end coordinate of the feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 Returns : integer
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 =head2 strand
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 Title : strand
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 Usage : $strand = $feat->strand()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 Function: Returns strand information, being 1,-1 or 0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 Returns : -1,1 or 0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 =head1 Decorating methods
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 These methods have an implementation provided by Bio::SeqFeatureI,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 but can be validly overwritten by subclasses
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 =head2 spliced_seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403 Title : spliced_seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 Usage : $seq = $feature->spliced_seq()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 $seq = $feature_with_remote_locations->spliced_seq($db_for_seqs)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 Function: Provides a sequence of the feature which is the most
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 semantically "relevant" feature for this sequence. A
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 default implementation is provided which for simple cases
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 returns just the sequence, but for split cases, loops over
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 the split location to return the sequence. In the case of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 split locations with remote locations, eg
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 join(AB000123:5567-5589,80..1144)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 in the case when a database object is passed in, it will
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 attempt to retrieve the sequence from the database object,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 and "Do the right thing", however if no database object is
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 provided, it will generate the correct number of N's (DNA)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 or X's (protein, though this is unlikely).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 This function is deliberately "magical" attempting to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424 second guess what a user wants as "the" sequence for this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 Implementing classes are free to override this method with
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428 their own magic if they have a better idea what the user
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429 wants
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431 Args : [optional] A Bio::DB::RandomAccessI compliant object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432 Returns : A Bio::Seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436 sub spliced_seq {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 my $db = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440 if( ! $self->location->isa("Bio::Location::SplitLocationI") ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441 return $self->seq(); # nice and easy!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444 # redundant test, but the above ISA is probably not ideal.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 if( ! $self->location->isa("Bio::Location::SplitLocationI") ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446 $self->throw("not atomic, not split, yikes, in trouble!");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449 my $seqstr;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450 my $seqid = $self->entire_seq->display_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451 # This is to deal with reverse strand features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452 # so we are really sorting features 5' -> 3' on their strand
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453 # i.e. rev strand features will be sorted largest to smallest
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454 # as this how revcom CDSes seem to be annotated in genbank.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455 # Might need to eventually allow this to be programable?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456 # (can I mention how much fun this is NOT! --jason)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458 my ($mixed,$mixedloc,$fstrand) = (0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460 if( defined $db &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461 ref($db) && !$db->isa('Bio::DB::RandomAccessI') ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462 $self->warn("Must pass in a valid Bio::DB::RandomAccessI object for access to remote locations for spliced_seq");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463 $db = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464 } elsif( defined $db &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465 $HasInMemory && ! $db->isa('Bio::DB::InMemoryCache') ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466 $db = new Bio::DB::InMemoryCache(-seqdb => $db);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469 if( $self->isa('Bio::Das::SegmentI') &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470 ! $self->absolute ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471 $self->warn("Calling spliced_seq with a Bio::Das::SegmentI ".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472 "which does have absolute set to 1 -- be warned ".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473 "you may not be getting things on the correct strand");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476 my @locs = map { $_->[0] }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477 # sort so that most negative is first basically to order
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478 # the features on the opposite strand 5'->3' on their strand
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479 # rather than they way most are input which is on the fwd strand
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481 sort { $a->[1] <=> $b->[1] } # Yes Tim, Schwartzian transformation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482 map {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483 $fstrand = $_->strand unless defined $fstrand;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484 $mixed = 1 if defined $_->strand && $fstrand != $_->strand;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485 if( defined $_->seq_id ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486 $mixedloc = 1 if( $_->seq_id ne $seqid );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488 [ $_, $_->start* ($_->strand || 1)];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489 } $self->location->each_Location;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491 if ( $mixed ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492 $self->warn("Mixed strand locations, spliced seq using the input ".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493 "order rather than trying to sort");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494 @locs = $self->location->each_Location;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495 } elsif( $mixedloc ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496 # we'll use the prescribed location order
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497 @locs = $self->location->each_Location;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501 foreach my $loc ( @locs ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502 if( ! $loc->isa("Bio::Location::Atomic") ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503 $self->throw("Can only deal with one level deep locations");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505 my $called_seq;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506 if( $fstrand != $loc->strand ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507 $self->warn("feature strand is different from location strand!");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509 # deal with remote sequences
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510 if( defined $loc->seq_id &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511 $loc->seq_id ne $seqid ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
512 if( defined $db ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
513 my $sid = $loc->seq_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
514 $sid =~ s/\.\d+$//g;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
515 eval {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
516 $called_seq = $db->get_Seq_by_acc($sid);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
517 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
518 if( $@ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
519 $self->warn("In attempting to join a remote location, sequence $sid was not in database. Will provide padding N's. Full exception \n\n$@");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
520 $called_seq = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
521 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
522 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
523 $self->warn( "cannot get remote location for ".$loc->seq_id ." without a valid Bio::DB::RandomAccessI database handle (like Bio::DB::GenBank)");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
524 $called_seq = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
525 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
526 if( !defined $called_seq ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
527 $seqstr .= 'N' x $self->length;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
528 next;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
529 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
530 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
531 $called_seq = $self->entire_seq;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
532 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
533
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
534 if( $self->isa('Bio::Das::SegmentI') ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
535 my ($s,$e) = ($loc->start,$loc->end);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
536 $seqstr .= $called_seq->subseq($s,$e)->seq();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
537 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
538 # This is dumb subseq should work on locations...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
539 if( $loc->strand == 1 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
540 $seqstr .= $called_seq->subseq($loc->start,$loc->end);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
541 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
542 $seqstr .= $called_seq->trunc($loc->start,$loc->end)->revcom->seq();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
543 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
544 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
545 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
546 my $out = Bio::Seq->new( -id => $self->entire_seq->display_id . "_spliced_feat",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
547 -seq => $seqstr);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
548
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
549 return $out;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
550 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
551
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
552 =head1 RangeI methods
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
553
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
554 These methods are inherited from RangeI and can be used
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
555 directly from a SeqFeatureI interface. Remember that a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
556 SeqFeature is-a RangeI, and so wherever you see RangeI you
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
557 can use a feature ($r in the below documentation).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
558
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
559 =head2 overlaps
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
560
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
561 Title : overlaps
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
562 Usage : if($feat->overlaps($r)) { do stuff }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
563 if($feat->overlaps(200)) { do stuff }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
564 Function: tests if $feat overlaps $r
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
565 Args : a RangeI to test for overlap with, or a point
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
566 Returns : true if the Range overlaps with the feature, false otherwise
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
567
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
568
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
569 =head2 contains
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
570
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
571 Title : contains
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
572 Usage : if($feat->contains($r) { do stuff }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
573 Function: tests whether $feat totally contains $r
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
574 Args : a RangeI to test for being contained
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
575 Returns : true if the argument is totaly contained within this range
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
576
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
577
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
578 =head2 equals
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
579
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
580 Title : equals
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
581 Usage : if($feat->equals($r))
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
582 Function: test whether $feat has the same start, end, strand as $r
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
583 Args : a RangeI to test for equality
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
584 Returns : true if they are describing the same range
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
585
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
586
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
587 =head1 Geometrical methods
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
588
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
589 These methods do things to the geometry of ranges, and return
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
590 triplets (start, stop, strand) from which new ranges could be built.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
591
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
592 =head2 intersection
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
593
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
594 Title : intersection
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
595 Usage : ($start, $stop, $strand) = $feat->intersection($r)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
596 Function: gives the range that is contained by both ranges
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
597 Args : a RangeI to compare this one to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
598 Returns : nothing if they do not overlap, or the range that they do overlap
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
599
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
600 =head2 union
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
601
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
602 Title : union
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
603 Usage : ($start, $stop, $strand) = $feat->union($r);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
604 : ($start, $stop, $strand) = Bio::RangeI->union(@ranges);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
605 Function: finds the minimal range that contains all of the ranges
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
606 Args : a range or list of ranges to find the union of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
607 Returns : the range containing all of the ranges
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
608
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
609 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
610
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
611 =head2 location
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
612
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
613 Title : location
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
614 Usage : my $location = $seqfeature->location()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
615 Function: returns a location object suitable for identifying location
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
616 of feature on sequence or parent feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
617 Returns : Bio::LocationI object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
618 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
619
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
620
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
621 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
622
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
623 sub location {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
624 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
625
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
626 $self->throw_not_implemented();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
627 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
628
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
629
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
630 1;