Mercurial > repos > mahtabm > ensembl
comparison variant_effect_predictor/Bio/SearchIO/FastHitEventBuilder.pm @ 0:1f6dce3d34e0
Uploaded
author | mahtabm |
---|---|
date | Thu, 11 Apr 2013 02:01:53 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:1f6dce3d34e0 |
---|---|
1 # $Id: FastHitEventBuilder.pm,v 1.6 2002/12/05 13:46:35 heikki Exp $ | |
2 # | |
3 # BioPerl module for Bio::SearchIO::FastHitEventBuilder | |
4 # | |
5 # Cared for by Jason Stajich <jason@bioperl.org> | |
6 # | |
7 # Copyright Jason Stajich | |
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::SearchIO::FastHitEventBuilder - Event Handler for SearchIO events. | |
16 | |
17 =head1 SYNOPSIS | |
18 | |
19 # Do not use this object directly, this object is part of the SearchIO | |
20 # event based parsing system. | |
21 | |
22 # to use the FastHitEventBuilder do this | |
23 | |
24 use Bio::SearchIO::FastHitEventBuilder; | |
25 | |
26 my $searchio = new Bio::SearchIO(-format => $format, -file => $file); | |
27 | |
28 $searchio->attach_EventHandler(new Bio::SearchIO::FastHitEventBuilder); | |
29 | |
30 while( my $r = $searchio->next_result ) { | |
31 while( my $h = $r->next_hit ) { | |
32 # note that Hits will NOT have HSPs | |
33 } | |
34 } | |
35 | |
36 =head1 DESCRIPTION | |
37 | |
38 This object handles Search Events generated by the SearchIO classes | |
39 and build appropriate Bio::Search::* objects from them. This object | |
40 is intended for lightweight parsers which only want Hits and not deal | |
41 with the overhead of HSPs. It is a lot faster than the standard | |
42 parser event handler but of course you are getting less information | |
43 and less objects out. | |
44 | |
45 | |
46 =head1 FEEDBACK | |
47 | |
48 =head2 Mailing Lists | |
49 | |
50 User feedback is an integral part of the evolution of this and other | |
51 Bioperl modules. Send your comments and suggestions preferably to | |
52 the Bioperl mailing list. Your participation is much appreciated. | |
53 | |
54 bioperl-l@bioperl.org - General discussion | |
55 http://bioperl.org/MailList.shtml - About the mailing lists | |
56 | |
57 =head2 Reporting Bugs | |
58 | |
59 Report bugs to the Bioperl bug tracking system to help us keep track | |
60 of the bugs and their resolution. Bug reports can be submitted via | |
61 email or the web: | |
62 | |
63 bioperl-bugs@bioperl.org | |
64 http://bugzilla.bioperl.org/ | |
65 | |
66 =head1 AUTHOR - Jason Stajich | |
67 | |
68 Email jason@bioperl.org | |
69 | |
70 Describe contact details here | |
71 | |
72 =head1 CONTRIBUTORS | |
73 | |
74 Additional contributors names and emails here | |
75 | |
76 =head1 APPENDIX | |
77 | |
78 The rest of the documentation details each of the object methods. | |
79 Internal methods are usually preceded with a _ | |
80 | |
81 =cut | |
82 | |
83 | |
84 # Let the code begin... | |
85 | |
86 | |
87 package Bio::SearchIO::FastHitEventBuilder; | |
88 use vars qw(@ISA %KNOWNEVENTS); | |
89 use strict; | |
90 | |
91 use Bio::Root::Root; | |
92 use Bio::SearchIO::EventHandlerI; | |
93 use Bio::Search::HSP::HSPFactory; | |
94 use Bio::Search::Hit::HitFactory; | |
95 use Bio::Search::Result::ResultFactory; | |
96 | |
97 @ISA = qw(Bio::Root::Root Bio::SearchIO::EventHandlerI); | |
98 | |
99 =head2 new | |
100 | |
101 Title : new | |
102 Usage : my $obj = new Bio::SearchIO::FastHitEventBuilder(); | |
103 Function: Builds a new Bio::SearchIO::FastHitEventBuilder object | |
104 Returns : Bio::SearchIO::FastHitEventBuilder | |
105 Args : -hit_factory => Bio::Factory::ObjectFactoryI | |
106 -result_factory => Bio::Factory::ObjectFactoryI | |
107 | |
108 See L<Bio::Factory::ObjectFactoryI> for more information | |
109 | |
110 =cut | |
111 | |
112 sub new { | |
113 my ($class,@args) = @_; | |
114 my $self = $class->SUPER::new(@args); | |
115 my ($hspF,$hitF,$resultF) = $self->_rearrange([qw(HIT_FACTORY | |
116 RESULT_FACTORY)],@args); | |
117 $self->register_factory('hit', $hitF || Bio::Search::Hit::HitFactory->new()); | |
118 $self->register_factory('result', $resultF || Bio::Search::Result::ResultFactory->new()); | |
119 | |
120 return $self; | |
121 } | |
122 | |
123 # new comes from the superclass | |
124 | |
125 =head2 will_handle | |
126 | |
127 Title : will_handle | |
128 Usage : if( $handler->will_handle($event_type) ) { ... } | |
129 Function: Tests if this event builder knows how to process a specific event | |
130 Returns : boolean | |
131 Args : event type name | |
132 | |
133 | |
134 =cut | |
135 | |
136 sub will_handle{ | |
137 my ($self,$type) = @_; | |
138 # these are the events we recognize | |
139 return ( $type eq 'hit' || $type eq 'result' ); | |
140 } | |
141 | |
142 =head2 SAX methods | |
143 | |
144 =cut | |
145 | |
146 =head2 start_result | |
147 | |
148 Title : start_result | |
149 Usage : $handler->start_result($resulttype) | |
150 Function: Begins a result event cycle | |
151 Returns : none | |
152 Args : Type of Report | |
153 | |
154 =cut | |
155 | |
156 sub start_result { | |
157 my ($self,$type) = @_; | |
158 $self->{'_resulttype'} = $type; | |
159 $self->{'_hits'} = []; | |
160 return; | |
161 } | |
162 | |
163 =head2 end_result | |
164 | |
165 Title : end_result | |
166 Usage : my @results = $parser->end_result | |
167 Function: Finishes a result handler cycle Returns : A Bio::Search::Result::ResultI | |
168 Args : none | |
169 | |
170 =cut | |
171 | |
172 sub end_result { | |
173 my ($self,$type,$data) = @_; | |
174 if( defined $data->{'runid'} && | |
175 $data->{'runid'} !~ /^\s+$/ ) { | |
176 | |
177 if( $data->{'runid'} !~ /^lcl\|/) { | |
178 $data->{"RESULT-query_name"}= $data->{'runid'}; | |
179 } else { | |
180 ($data->{"RESULT-query_name"},$data->{"RESULT-query_description"}) = split(/\s+/,$data->{"RESULT-query_description"},2); | |
181 } | |
182 | |
183 if( my @a = split(/\|/,$data->{'RESULT-query_name'}) ) { | |
184 my $acc = pop @a ; # this is for accession |1234|gb|AAABB1.1|AAABB1 | |
185 # this is for |123|gb|ABC1.1| | |
186 $acc = pop @a if( ! defined $acc || $acc =~ /^\s+$/); | |
187 $data->{"RESULT-query_accession"}= $acc; | |
188 } | |
189 delete $data->{'runid'}; | |
190 } | |
191 my %args = map { my $v = $data->{$_}; s/RESULT//; ($_ => $v); } | |
192 grep { /^RESULT/ } keys %{$data}; | |
193 | |
194 $args{'-algorithm'} = uc( $args{'-algorithm_name'} || $type); | |
195 $args{'-hits'} = $self->{'_hits'}; | |
196 my $result = $self->factory('result')->create(%args); | |
197 $self->{'_hits'} = []; | |
198 return $result; | |
199 } | |
200 | |
201 =head2 start_hit | |
202 | |
203 Title : start_hit | |
204 Usage : $handler->start_hit() | |
205 Function: Starts a Hit event cycle | |
206 Returns : none | |
207 Args : type of event and associated hashref | |
208 | |
209 | |
210 =cut | |
211 | |
212 sub start_hit{ | |
213 my ($self,$type) = @_; | |
214 return; | |
215 } | |
216 | |
217 | |
218 =head2 end_hit | |
219 | |
220 Title : end_hit | |
221 Usage : $handler->end_hit() | |
222 Function: Ends a Hit event cycle | |
223 Returns : Bio::Search::Hit::HitI object | |
224 Args : type of event and associated hashref | |
225 | |
226 | |
227 =cut | |
228 | |
229 sub end_hit{ | |
230 my ($self,$type,$data) = @_; | |
231 my %args = map { my $v = $data->{$_}; s/HIT//; ($_ => $v); } grep { /^HIT/ } keys %{$data}; | |
232 $args{'-algorithm'} = uc( $args{'-algorithm_name'} || $type); | |
233 $args{'-query_len'} = $data->{'RESULT-query_length'}; | |
234 my ($hitrank) = scalar @{$self->{'_hits'}} + 1; | |
235 $args{'-rank'} = $hitrank; | |
236 my $hit = $self->factory('hit')->create(%args); | |
237 push @{$self->{'_hits'}}, $hit; | |
238 $self->{'_hsps'} = []; | |
239 return $hit; | |
240 } | |
241 | |
242 =head2 Factory methods | |
243 | |
244 =cut | |
245 | |
246 =head2 register_factory | |
247 | |
248 Title : register_factory | |
249 Usage : $handler->register_factory('TYPE',$factory); | |
250 Function: Register a specific factory for a object type class | |
251 Returns : none | |
252 Args : string representing the class and | |
253 Bio::Factory::ObjectFactoryI | |
254 | |
255 See L<Bio::Factory::ObjectFactoryI> for more information | |
256 | |
257 =cut | |
258 | |
259 sub register_factory{ | |
260 my ($self, $type,$f) = @_; | |
261 if( ! defined $f || ! ref($f) || | |
262 ! $f->isa('Bio::Factory::ObjectFactoryI') ) { | |
263 $self->throw("Cannot set factory to value $f".ref($f)."\n"); | |
264 } | |
265 $self->{'_factories'}->{lc($type)} = $f; | |
266 } | |
267 | |
268 | |
269 =head2 factory | |
270 | |
271 Title : factory | |
272 Usage : my $f = $handler->factory('TYPE'); | |
273 Function: Retrieves the associated factory for requested 'TYPE' | |
274 Returns : a Bio::Factory::ObjectFactoryI or undef if none registered | |
275 Args : name of factory class to retrieve | |
276 | |
277 See L<Bio::Factory::ObjectFactoryI> for more information | |
278 | |
279 =cut | |
280 | |
281 sub factory{ | |
282 my ($self,$type) = @_; | |
283 return $self->{'_factories'}->{lc($type)} || $self->throw("No factory registered for $type"); | |
284 } | |
285 | |
286 1; |