annotate variant_effect_predictor/Bio/SeqFeature/PositionProxy.pm @ 1:d6778b5d8382 draft default tip

Deleted selected files
author willmclaren
date Fri, 03 Aug 2012 10:05:43 -0400
parents 21066c0abaf5
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1 # $Id: PositionProxy.pm,v 1.4 2002/10/22 07:38:41 lapp Exp $
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
3 # BioPerl module for Bio::SeqFeature::PositionProxy
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
4 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
5 # Cared for by Ewan Birney <birney@ebi.ac.uk>
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
6 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
7 # Copyright Ewan Birney
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
8 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
9 # You may distribute this module under the same terms as perl itself
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
10
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
11 # POD documentation - main docs before the code
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
12
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
13 =head1 NAME
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
14
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
15 Bio::SeqFeature::PositionProxy - handle features when truncation/revcom sequences span a feature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
16
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
17 =head1 SYNOPSIS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
18
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
19 $proxy = new Bio::SeqFeature::PositionProxy ( -loc => $loc,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
20 -parent => $basefeature);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
21
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
22 $seq->add_SeqFeature($feat);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
23
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
24
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
25
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
26 =head1 DESCRIPTION
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
27
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
28 PositionProxy is a Proxy Sequence Feature to handle truncation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
29 and revcomp without duplicating all the data within the sequence features.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
30 It holds a new location for a sequence feature and the original feature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
31 it came from to provide the additional annotation information.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
32
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
33 =head1 FEEDBACK
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
34
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
35 =head2 Mailing Lists
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
36
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
37 User feedback is an integral part of the evolution of this and other
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
38 Bioperl modules. Send your comments and suggestions preferably to one
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
39 of the Bioperl mailing lists. Your participation is much appreciated.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
40
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
41 bioperl-l@bioperl.org - General discussion
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
42 http://bio.perl.org/MailList.html - About the mailing lists
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
43
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
44 =head2 Reporting Bugs
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
45
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
46 Report bugs to the Bioperl bug tracking system to help us keep track
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
47 the bugs and their resolution. Bug reports can be submitted via email
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
48 or the web:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
49
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
50 bioperl-bugs@bio.perl.org
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
51 http://bugzilla.bioperl.org/
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
52
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
53 =head1 AUTHOR - Ewan Birney
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
54
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
55 Ewan Birney E<lt>birney@sanger.ac.ukE<gt>
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
56
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
57 =head1 DEVELOPERS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
58
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
59 This class has been written with an eye out of inheritence. The fields
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
60 the actual object hash are:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
61
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
62 _gsf_tag_hash = reference to a hash for the tags
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
63 _gsf_sub_array = reference to an array for sub arrays
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
64 _gsf_start = scalar of the start point
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
65 _gsf_end = scalar of the end point
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
66 _gsf_strand = scalar of the strand
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
67
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
68 =head1 APPENDIX
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
69
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
70 The rest of the documentation details each of the object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
71 methods. Internal methods are usually preceded with a _
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
72
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
73 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
74
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
75
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
76 # Let the code begin...
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
77
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
78
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
79 package Bio::SeqFeature::PositionProxy;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
80 use vars qw(@ISA);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
81 use strict;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
82
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
83 use Bio::Root::Root;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
84 use Bio::SeqFeatureI;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
85 use Bio::Tools::GFF;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
86
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
87
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
88 @ISA = qw(Bio::Root::Root Bio::SeqFeatureI);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
89
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
90 sub new {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
91 my ($caller, @args) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
92 my $self = $caller->SUPER::new(@args);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
93
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
94 my ($feature,$location) = $self->_rearrange([qw(PARENT LOC)],@args);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
95
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
96 if( !defined $feature || !ref $feature || !$feature->isa('Bio::SeqFeatureI') ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
97 $self->throw("Must have a parent feature, not a [$feature]");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
98 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
99
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
100 if( $feature->isa("Bio::SeqFeature::PositionProxy") ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
101 $feature = $feature->parent();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
102 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
103
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
104 if( !defined $location || !ref $location || !$location->isa('Bio::LocationI') ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
105 $self->throw("Must have a location, not a [$location]");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
106 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
107
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
108
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
109 return $self;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
110 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
111
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
112
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
113 =head2 location
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
114
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
115 Title : location
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
116 Usage : my $location = $seqfeature->location()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
117 Function: returns a location object suitable for identifying location
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
118 of feature on sequence or parent feature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
119 Returns : Bio::LocationI object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
120 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
121
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
122
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
123 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
124
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
125 sub location {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
126 my($self, $value ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
127
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
128 if (defined($value)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
129 unless (ref($value) and $value->isa('Bio::LocationI')) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
130 $self->throw("object $value pretends to be a location but ".
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
131 "does not implement Bio::LocationI");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
132 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
133 $self->{'_location'} = $value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
134 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
135 elsif (! $self->{'_location'}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
136 # guarantees a real location object is returned every time
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
137 $self->{'_location'} = Bio::Location::Simple->new();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
138 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
139 return $self->{'_location'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
140 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
141
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
142
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
143 =head2 parent
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
144
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
145 Title : parent
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
146 Usage : my $sf = $proxy->parent()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
147 Function: returns the seqfeature parent of this proxy
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
148 Returns : Bio::SeqFeatureI object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
149 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
150
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
151
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
152 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
153
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
154 sub parent {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
155 my($self, $value ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
156
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
157 if (defined($value)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
158 unless (ref($value) and $value->isa('Bio::SeqFeatureI')) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
159 $self->throw("object $value pretends to be a location but ".
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
160 "does not implement Bio::SeqFeatureI");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
161 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
162 $self->{'_parent'} = $value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
163 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
164
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
165 return $self->{'_parent'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
166 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
167
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
168
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
169
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
170 =head2 start
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
171
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
172 Title : start
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
173 Usage : $start = $feat->start
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
174 $feat->start(20)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
175 Function: Get
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
176 Returns : integer
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
177 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
178
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
179
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
180 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
181
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
182 sub start {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
183 my ($self,$value) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
184 return $self->location->start($value);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
185 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
186
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
187 =head2 end
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
188
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
189 Title : end
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
190 Usage : $end = $feat->end
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
191 $feat->end($end)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
192 Function: get
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
193 Returns : integer
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
194 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
195
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
196
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
197 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
198
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
199 sub end {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
200 my ($self,$value) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
201 return $self->location->end($value);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
202 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
203
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
204 =head2 length
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
205
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
206 Title : length
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
207 Usage :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
208 Function:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
209 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
210 Returns :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
211 Args :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
212
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
213
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
214 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
215
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
216 sub length {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
217 my ($self) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
218 return $self->end - $self->start() + 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
219 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
220
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
221 =head2 strand
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
222
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
223 Title : strand
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
224 Usage : $strand = $feat->strand()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
225 $feat->strand($strand)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
226 Function: get/set on strand information, being 1,-1 or 0
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
227 Returns : -1,1 or 0
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
228 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
229
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
230
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
231 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
232
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
233 sub strand {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
234 my ($self,$value) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
235 return $self->location->strand($value);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
236 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
237
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
238
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
239 =head2 attach_seq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
240
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
241 Title : attach_seq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
242 Usage : $sf->attach_seq($seq)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
243 Function: Attaches a Bio::Seq object to this feature. This
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
244 Bio::Seq object is for the *entire* sequence: ie
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
245 from 1 to 10000
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
246 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
247 Returns : TRUE on success
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
248 Args :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
249
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
250
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
251 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
252
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
253 sub attach_seq {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
254 my ($self, $seq) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
255
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
256 if ( !defined $seq || !ref $seq || ! $seq->isa("Bio::PrimarySeqI") ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
257 $self->throw("Must attach Bio::PrimarySeqI objects to SeqFeatures");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
258 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
259
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
260 $self->{'_gsf_seq'} = $seq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
261
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
262 # attach to sub features if they want it
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
263
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
264 foreach my $sf ( $self->sub_SeqFeature() ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
265 if ( $sf->can("attach_seq") ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
266 $sf->attach_seq($seq);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
267 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
268 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
269 return 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
270 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
271
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
272 =head2 seq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
273
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
274 Title : seq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
275 Usage : $tseq = $sf->seq()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
276 Function: returns the truncated sequence (if there) for this
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
277 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
278 Returns : sub seq on attached sequence bounded by start & end
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
279 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
280
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
281
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
282 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
283
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
284 sub seq {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
285 my ($self, $arg) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
286
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
287 if ( defined $arg ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
288 $self->throw("Calling SeqFeature::PositionProxy->seq with an argument. You probably want attach_seq");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
289 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
290
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
291 if ( ! exists $self->{'_gsf_seq'} ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
292 return undef;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
293 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
294
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
295 # assumming our seq object is sensible, it should not have to yank
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
296 # the entire sequence out here.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
297
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
298 my $seq = $self->{'_gsf_seq'}->trunc($self->start(), $self->end());
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
299
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
300
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
301 if ( $self->strand == -1 ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
302 $seq = $seq->revcom;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
303 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
304
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
305 return $seq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
306 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
307
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
308 =head2 entire_seq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
309
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
310 Title : entire_seq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
311 Usage : $whole_seq = $sf->entire_seq()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
312 Function: gives the entire sequence that this seqfeature is attached to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
313 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
314 Returns :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
315 Args :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
316
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
317
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
318 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
319
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
320 sub entire_seq {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
321 my ($self) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
322
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
323 return undef unless exists($self->{'_gsf_seq'});
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
324 return $self->{'_gsf_seq'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
325 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
326
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
327
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
328 =head2 seqname
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
329
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
330 Title : seqname
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
331 Usage : $obj->seq_id($newval)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
332 Function: There are many cases when you make a feature that you
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
333 do know the sequence name, but do not know its actual
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
334 sequence. This is an attribute such that you can store
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
335 the seqname.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
336
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
337 This attribute should *not* be used in GFF dumping, as
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
338 that should come from the collection in which the seq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
339 feature was found.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
340 Returns : value of seqname
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
341 Args : newvalue (optional)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
342
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
343
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
344 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
345
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
346 sub seqname {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
347 my ($obj,$value) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
348 if ( defined $value ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
349 $obj->{'_gsf_seqname'} = $value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
350 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
351 return $obj->{'_gsf_seqname'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
352 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
353
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
354
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
355
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
356 =head2 Proxies
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
357
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
358 These functions chain back to the parent for all non sequence related stuff.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
359
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
360
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
361 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
362
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
363 =head2 primary_tag
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
364
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
365 Title : primary_tag
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
366 Usage : $tag = $feat->primary_tag()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
367 Function: Returns the primary tag for a feature,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
368 eg 'exon'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
369 Returns : a string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
370 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
371
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
372
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
373 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
374
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
375 sub primary_tag{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
376 my ($self,@args) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
377
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
378 return $self->parent->primary_tag();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
379 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
380
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
381 =head2 source_tag
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
382
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
383 Title : source_tag
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
384 Usage : $tag = $feat->source_tag()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
385 Function: Returns the source tag for a feature,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
386 eg, 'genscan'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
387 Returns : a string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
388 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
389
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
390
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
391 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
392
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
393 sub source_tag{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
394 my ($self) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
395
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
396 return $self->parent->source_tag();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
397 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
398
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
399
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
400 =head2 has_tag
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
401
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
402 Title : has_tag
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
403 Usage : $tag_exists = $self->has_tag('some_tag')
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
404 Function:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
405 Returns : TRUE if the specified tag exists, and FALSE otherwise
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
406 Args :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
407
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
408
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
409 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
410
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
411 sub has_tag{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
412 my ($self,$tag) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
413
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
414 return $self->parent->has_tag($tag);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
415 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
416
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
417 =head2 each_tag_value
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
418
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
419 Title : each_tag_value
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
420 Usage : @values = $self->each_tag_value('some_tag')
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
421 Function:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
422 Returns : An array comprising the values of the specified tag.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
423 Args :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
424
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
425
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
426 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
427
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
428 sub each_tag_value {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
429 my ($self,$tag) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
430
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
431 return $self->parent->each_tag_value($tag);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
432 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
433
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
434 =head2 all_tags
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
435
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
436 Title : all_tags
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
437 Usage : @tags = $feat->all_tags()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
438 Function: gives all tags for this feature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
439 Returns : an array of strings
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
440 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
441
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
442
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
443 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
444
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
445 sub all_tags{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
446 my ($self) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
447
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
448 return $self->parent->all_tags();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
449 }