Mercurial > repos > willmclaren > ensembl_vep
comparison variant_effect_predictor/Bio/Coordinate/Result.pm @ 0:21066c0abaf5 draft
Uploaded
author | willmclaren |
---|---|
date | Fri, 03 Aug 2012 10:04:48 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:21066c0abaf5 |
---|---|
1 # $Id: Result.pm,v 1.5.2.1 2003/02/20 05:11:45 heikki Exp $ | |
2 # | |
3 # bioperl module for Bio::Coordinate::Result | |
4 # | |
5 # Cared for by Heikki Lehvaslaiho <heikki@ebi.ac.uk> | |
6 # | |
7 # Copyright Heikki Lehvaslaiho | |
8 # | |
9 # You may distribute this module under the same terms as perl itself | |
10 | |
11 # POD documentation - main docs before the code | |
12 | |
13 =head1 NAME | |
14 | |
15 Bio::Coordinate::Result - Results from coordinate transformation | |
16 | |
17 =head1 SYNOPSIS | |
18 | |
19 use Bio::Coordinate::Result; | |
20 | |
21 #get results from a Bio::Coordinate::MapperI | |
22 $matched = $result->each_match; | |
23 | |
24 =head1 DESCRIPTION | |
25 | |
26 The results from Bio::Coordinate::MapperI are kept in an object which | |
27 itself is a split location, See L<Bio::Location::Split>. The results | |
28 are either Matches or Gaps. See L<Bio::Coordinate::Result::Match> and | |
29 L<Bio::Coordinate::Result::Match>. | |
30 | |
31 If only one Match is returned, there is a convenience method of | |
32 retrieving it or accessing its methods. Same holds true for a Gap. | |
33 | |
34 =head1 FEEDBACK | |
35 | |
36 =head2 Mailing Lists | |
37 | |
38 User feedback is an integral part of the evolution of this and other | |
39 Bioperl modules. Send your comments and suggestions preferably to the | |
40 Bioperl mailing lists Your participation is much appreciated. | |
41 | |
42 bioperl-l@bioperl.org - General discussion | |
43 http://bio.perl.org/MailList.html - About the mailing lists | |
44 | |
45 =head2 Reporting Bugs | |
46 | |
47 report bugs to the Bioperl bug tracking system to help us keep track | |
48 the bugs and their resolution. Bug reports can be submitted via | |
49 email or the web: | |
50 | |
51 bioperl-bugs@bio.perl.org | |
52 http://bugzilla.bioperl.org/ | |
53 | |
54 =head1 AUTHOR - Heikki Lehvaslaiho | |
55 | |
56 Email: heikki@ebi.ac.uk | |
57 Address: | |
58 | |
59 EMBL Outstation, European Bioinformatics Institute | |
60 Wellcome Trust Genome Campus, Hinxton | |
61 Cambs. CB10 1SD, United Kingdom | |
62 | |
63 =head1 CONTRIBUTORS | |
64 | |
65 Additional contributors names and emails here | |
66 | |
67 =head1 APPENDIX | |
68 | |
69 The rest of the documentation details each of the object | |
70 methods. Internal methods are usually preceded with a _ | |
71 | |
72 =cut | |
73 | |
74 | |
75 # Let the code begin... | |
76 | |
77 package Bio::Coordinate::Result; | |
78 use vars qw(@ISA ); | |
79 use strict; | |
80 | |
81 use Bio::Location::Split; | |
82 use Bio::Coordinate::ResultI; | |
83 | |
84 @ISA = qw(Bio::Location::Split Bio::Coordinate::ResultI); | |
85 | |
86 | |
87 =head2 add_location | |
88 | |
89 Title : add_sub_Location | |
90 Usage : $obj->add_sub_Location($variant) | |
91 Function: | |
92 | |
93 Pushes one Bio::LocationI into the list of variants. | |
94 | |
95 Example : | |
96 Returns : 1 when succeeds | |
97 Args : Location object | |
98 | |
99 =cut | |
100 | |
101 sub add_sub_Location { | |
102 my ($self,$value) = @_; | |
103 $self->throw("Is not a Bio::LocationI but [$value]") | |
104 unless $value->isa('Bio::LocationI'); | |
105 | |
106 $self->{'_match'} = $value | |
107 if $value->isa('Bio::Coordinate::Result::Match'); | |
108 | |
109 $self->{'_gap'} = $value | |
110 if $value->isa('Bio::Coordinate::Result::Gap'); | |
111 | |
112 $self->SUPER::add_sub_Location($value); | |
113 | |
114 } | |
115 | |
116 =head2 add_result | |
117 | |
118 Title : add_result | |
119 Usage : $obj->add_result($result) | |
120 Function: Adds the contents of one Bio::Coordinate::Result | |
121 Example : | |
122 Returns : 1 when succeeds | |
123 Args : Result object | |
124 | |
125 =cut | |
126 | |
127 sub add_result { | |
128 my ($self,$value) = @_; | |
129 | |
130 $self->throw("Is not a Bio::Coordinate::Result but [$value]") | |
131 unless $value->isa('Bio::Coordinate::Result'); | |
132 | |
133 map { $self->add_sub_Location($_);} $value->each_Location; | |
134 | |
135 } | |
136 | |
137 =head2 seq_id | |
138 | |
139 Title : seq_id | |
140 Usage : my $seqid = $location->seq_id(); | |
141 Function: Get/Set seq_id that location refers to | |
142 | |
143 We override this here in order to propagate to all sublocations | |
144 which are not remote (provided this root is not remote either) | |
145 | |
146 Returns : seq_id | |
147 Args : [optional] seq_id value to set | |
148 | |
149 | |
150 =cut | |
151 | |
152 sub seq_id { | |
153 my ($self, $seqid) = @_; | |
154 | |
155 my @ls = $self->each_Location; | |
156 if (@ls) { | |
157 return $ls[0]->seq_id; | |
158 } else { | |
159 return undef; | |
160 } | |
161 | |
162 } | |
163 | |
164 | |
165 =head2 Convenience methods | |
166 | |
167 These methods are shortcuts to Match and Gap locations. | |
168 | |
169 =cut | |
170 | |
171 =head2 each_gap | |
172 | |
173 Title : each_gap | |
174 Usage : $obj->each_gap(); | |
175 Function: | |
176 | |
177 Returns a list of Bio::Coordianate::Result::Gap objects. | |
178 | |
179 Returns : list of gaps | |
180 Args : none | |
181 | |
182 =cut | |
183 | |
184 sub each_gap{ | |
185 my ($self) = @_; | |
186 | |
187 | |
188 my @gaps; | |
189 foreach my $gap ($self->each_Location) { | |
190 push @gaps, $gap if $gap->isa('Bio::Coordinate::Result::Gap'); | |
191 } | |
192 return @gaps; | |
193 | |
194 } | |
195 | |
196 | |
197 =head2 each_match | |
198 | |
199 Title : each_match | |
200 Usage : $obj->each_match(); | |
201 Function: | |
202 | |
203 Returns a list of Bio::Coordinate::Result::Match objects. | |
204 | |
205 Returns : list of Matchs | |
206 Args : none | |
207 | |
208 =cut | |
209 | |
210 sub each_match { | |
211 my ($self) = @_; | |
212 | |
213 my @matches; | |
214 foreach my $match ($self->each_Location) { | |
215 push @matches, $match if $match->isa('Bio::Coordinate::Result::Match'); | |
216 } | |
217 return @matches; | |
218 } | |
219 | |
220 =head2 match | |
221 | |
222 Title : match | |
223 Usage : $match_object = $obj->match(); #or | |
224 $gstart = $obj->gap->start; | |
225 Function: Read only method for retrieving or accessing the match object. | |
226 Returns : one Bio::Coordinate::Result::Match | |
227 Args : | |
228 | |
229 =cut | |
230 | |
231 sub match { | |
232 my ($self) = @_; | |
233 | |
234 $self->warn("More than one match in results") | |
235 if $self->each_match > 1 and $self->verbose > 0; | |
236 unless (defined $self->{'_match'} ) { | |
237 my @m = $self->each_match; | |
238 $self->{'_match'} = $m[-1]; | |
239 } | |
240 return $self->{'_match'}; | |
241 } | |
242 | |
243 =head2 gap | |
244 | |
245 Title : gap | |
246 Usage : $gap_object = $obj->gap(); #or | |
247 $gstart = $obj->gap->start; | |
248 Function: Read only method for retrieving or accessing the gap object. | |
249 Returns : one Bio::Coordinate::Result::Gap | |
250 Args : | |
251 | |
252 =cut | |
253 | |
254 sub gap { | |
255 my ($self) = @_; | |
256 | |
257 $self->warn("More than one gap in results") | |
258 if $self->each_gap > 1 and $self->verbose > 0; | |
259 unless (defined $self->{'_gap'} ) { | |
260 my @m = $self->each_gap; | |
261 $self->{'_gap'} = $m[-1]; | |
262 } | |
263 return $self->{'_gap'}; | |
264 } | |
265 | |
266 | |
267 =head2 purge_gaps | |
268 | |
269 Title : purge_gaps | |
270 Usage : $gap_count = $obj->purge_gaps; | |
271 Function: remove all gaps from the Result | |
272 Returns : count of removed gaps | |
273 Args : | |
274 | |
275 =cut | |
276 | |
277 sub purge_gaps { | |
278 my ($self) = @_; | |
279 my @matches; | |
280 my $count = 0; | |
281 | |
282 foreach my $loc ($self->each_Location) { | |
283 if ($loc->isa('Bio::Coordinate::Result::Match')) { | |
284 push @matches, $loc; | |
285 } else { | |
286 $count++ | |
287 } | |
288 } | |
289 @{$self->{'_sublocations'}} = (); | |
290 delete $self->{'_gap'} ; | |
291 push @{$self->{'_sublocations'}}, @matches; | |
292 return $count; | |
293 } | |
294 | |
295 | |
296 1; |