annotate variant_effect_predictor/Bio/SearchIO/exonerate.pm @ 0:1f6dce3d34e0

Uploaded
author mahtabm
date Thu, 11 Apr 2013 02:01:53 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 # $Id: exonerate.pm,v 1.3.2.3 2003/03/29 20:30:54 jason Exp $
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 # BioPerl module for Bio::SearchIO::exonerate
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5 # Cared for by Jason Stajich <jason@bioperl.org>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 # Copyright Jason Stajich
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::SearchIO::exonerate - parser for Exonerate
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 # do not use this module directly, it is a driver for SearchIO
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 use Bio::SearchIO;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22 my $searchio = new Bio::SearchIO(-file => 'file.exonerate',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 -format => 'exonerate');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26 while( my $r = $searchio->next_result ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 print $r->query_name, "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 This is a driver for the SearchIO system for parsing Exonerate (Guy
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 Slater) output. You can get Exonerate at
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 http://cvsweb.sanger.ac.uk/cgi-bin/cvsweb.cgi/exonerate/?cvsroot=Ensembl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 [until Guy puts up a Web reference,publication for it.]).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 An optional parameter -min_intron is supported by the L<new>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 initialization method. This is if you run Exonerate with a different
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 minimum intron length (default is 30) the parser will be able to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 detect the difference between standard deletions and an intron. Still
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 some room to play with there that might cause this to get
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 misinterpreted that has not been fully tested or explored.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 =head1 FEEDBACK
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 =head2 Mailing Lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 User feedback is an integral part of the evolution of this and other
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 Bioperl modules. Send your comments and suggestions preferably to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 the Bioperl mailing list. Your participation is much appreciated.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 bioperl-l@bioperl.org - General discussion
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 http://bioperl.org/MailList.shtml - About the mailing lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 =head2 Reporting Bugs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 Report bugs to the Bioperl bug tracking system to help us keep track
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 of the bugs and their resolution. Bug reports can be submitted via
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 email or the web:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 bioperl-bugs@bioperl.org
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 http://bioperl.org/bioperl-bugs/
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 =head1 AUTHOR - Jason Stajich
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 Email jason@bioperl.org
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 Describe contact details here
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 =head1 CONTRIBUTORS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 Additional contributors names and emails here
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 =head1 APPENDIX
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 The rest of the documentation details each of the object methods.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 Internal methods are usually preceded with a _
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 # Let the code begin...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 package Bio::SearchIO::exonerate;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 use vars qw(@ISA @STATES %MAPPING %MODEMAP $DEFAULT_WRITER_CLASS $MIN_INTRON);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 use Bio::SearchIO;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 @ISA = qw(Bio::SearchIO );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 use POSIX;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 %MODEMAP = ('ExonerateOutput' => 'result',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 'Hit' => 'hit',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 'Hsp' => 'hsp'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 %MAPPING =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 'Hsp_query-from'=> 'HSP-query_start',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 'Hsp_query-to' => 'HSP-query_end',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 'Hsp_hit-from' => 'HSP-hit_start',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 'Hsp_hit-to' => 'HSP-hit_end',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 'Hsp_qseq' => 'HSP-query_seq',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 'Hsp_hseq' => 'HSP-hit_seq',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 'Hsp_midline' => 'HSP-homology_seq',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 'Hsp_score' => 'HSP-score',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 'Hsp_qlength' => 'HSP-query_length',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 'Hsp_hlength' => 'HSP-hit_length',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 'Hsp_align-len' => 'HSP-hsp_length',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 'Hsp_identity' => 'HSP-identical',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 'Hsp_gaps' => 'HSP-hsp_gaps',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 'Hsp_hitgaps' => 'HSP-hit_gaps',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 'Hsp_querygaps' => 'HSP-query_gaps',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 'Hit_id' => 'HIT-name',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 'Hit_desc' => 'HIT-description',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 'Hit_len' => 'HIT-length',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 'Hit_score' => 'HIT-score',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 'ExonerateOutput_program' => 'RESULT-algorithm_name',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 'ExonerateOutput_query-def' => 'RESULT-query_name',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 'ExonerateOutput_query-desc'=> 'RESULT-query_description',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 'ExonerateOutput_query-len' => 'RESULT-query_length',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 $DEFAULT_WRITER_CLASS = 'Bio::Search::Writer::HitTableWriter';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 $MIN_INTRON=30; # This is the minimum intron size
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 =head2 new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 Title : new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 Usage : my $obj = new Bio::SearchIO::exonerate();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 Function: Builds a new Bio::SearchIO::exonerate object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 Returns : an instance of Bio::SearchIO::exonerate
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 Args :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 my ($class) = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 my $self = $class->SUPER::new(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 my ($min_intron) = $self->_rearrange([qw(MIN_INTRON)], @_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 if( $min_intron ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 $MIN_INTRON = $min_intron;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 =head2 next_result
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 Title : next_result
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 Usage : my $hit = $searchio->next_result;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 Function: Returns the next Result from a search
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 Returns : Bio::Search::Result::ResultI object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 Args : none
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 next_result{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 $self->{'_last_data'} = '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 my ($reporttype,$seenquery,$reportline);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 $self->start_document();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 my @hit_signifs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 my $seentop;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 my (@q_ex, @m_ex, @h_ex); ## gc addition
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 while( defined($_ = $self->_readline) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 if( /^Query:\s+(\S+)(\s+(.+))?/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 if( $seentop ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 $self->end_element({'Name' => 'ExonerateOutput'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 $self->_pushback($_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 return $self->end_document();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 $seentop = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 my ($nm,$desc) = ($1,$2);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 chomp($desc) if defined $desc;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 $self->{'_result_count'}++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 $self->start_element({'Name' => 'ExonerateOutput'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 $self->element({'Name' => 'ExonerateOutput_query-def',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 'Data' => $nm });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 $self->element({'Name' => 'ExonerateOutput_query-desc',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 'Data' => $desc });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 $self->element({'Name' => 'ExonerateOutput_program',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 'Data' => 'Exonerate' });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 } elsif ( /^Target:\s+(\S+)(\s+(.+))?/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 my ($nm,$desc) = ($1,$2);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 chomp($desc) if defined $desc;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 $self->start_element({'Name' => 'Hit'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 $self->element({'Name' => 'Hit_id',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 'Data' => $nm});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 $self->element({'Name' => 'Hit_desc',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 'Data' => $desc});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 } elsif( s/^cigar:\s+(\S+)\s+ # query sequence id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 (\d+)\s+(\d+)\s+([\-\+])\s+ # query start-end-strand
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 (\S+)\s+ # target sequence id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 (\d+)\s+(\d+)\s+([\-\+])\s+ # target start-end-strand
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 (\d+)\s+ # score
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 //ox ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 ## gc note:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 ## $qe and $he are no longer used for calculating the ends,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 ## just the $qs and $hs values and the alignment and insert lenghts
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 my ($qs,$qe,$qstrand) = ($2,$3,$4);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 my ($hs,$he,$hstrand) = ($6,$7,$8);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 my $score = $9;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 # $self->element({'Name' => 'ExonerateOutput_query-len',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 # 'Data' => $qe});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 # $self->element({'Name' => 'Hit_len',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 # 'Data' => $he});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 my @rest = split;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 if( $qstrand eq '-' ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 $qstrand = -1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 ($qs,$qe) = ($qe,$qs); # flip-flop if we're on opp strand
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 $qs--; $qe++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 } else { $qstrand = 1; }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 if( $hstrand eq '-' ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 $hstrand = -1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 ($hs,$he) = ($he,$hs); # flip-flop if we're on opp strand
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 $hs--; $he++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 } else { $hstrand = 1; }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 # okay let's do this right and generate a set of HSPs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 # from the cigar line
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 ## gc note:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 ## add one because these values are zero-based
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 ## this calculation was originally done lower in the code,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 ## but it's clearer to do it just once at the start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 $qs++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 $hs++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 my ($aln_len,$inserts,$deletes) = (0,0,0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 while( @rest >= 2 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 my ($state,$len) = (shift @rest, shift @rest);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 if( $state eq 'I' ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 $inserts+=$len;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 } elsif( $state eq 'D' ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 if( $len >= $MIN_INTRON ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 $self->start_element({'Name' => 'Hsp'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 $self->element({'Name' => 'Hsp_score',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 'Data' => $score});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 $self->element({'Name' => 'Hsp_align-len',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 'Data' => $aln_len});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 $self->element({'Name' => 'Hsp_identity',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 'Data' => $aln_len -
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 ($inserts + $deletes)});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 # HSP ends where the other begins
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 $self->element({'Name' => 'Hsp_query-from',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 'Data' => $qs});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 ## gc note:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 ## $qs is now the start of the next hsp
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 ## the end of this hsp is 1 before this position
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 ## (or 1 after in case of reverse strand)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 $qs += $aln_len*$qstrand;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 $self->element({'Name' => 'Hsp_query-to',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 'Data' => $qs - ($qstrand*1)});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 $hs += $deletes*$hstrand;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 $self->element({'Name' => 'Hsp_hit-from',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 'Data' => $hs});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 $hs += $aln_len*$hstrand;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 $self->element({'Name' => 'Hsp_hit-to',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 'Data' => $hs-($hstrand*1)});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 $self->element({'Name' => 'Hsp_align-len',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 'Data' => $aln_len + $inserts
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 + $deletes});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 $self->element({'Name' => 'Hsp_identity',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 'Data' => $aln_len });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 $self->element({'Name' => 'Hsp_gaps',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 'Data' => $inserts + $deletes});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 $self->element({'Name' => 'Hsp_querygaps',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 'Data' => $inserts});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 $self->element({'Name' => 'Hsp_hitgaps',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 'Data' => $deletes});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 ## gc addition start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 $self->element({'Name' => 'Hsp_qseq',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 'Data' => shift @q_ex,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 $self->element({'Name' => 'Hsp_hseq',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 'Data' => shift @h_ex,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 $self->element({'Name' => 'Hsp_midline',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 'Data' => shift @m_ex,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 ## gc addition end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 $self->end_element({'Name' => 'Hsp'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 $aln_len = $inserts = $deletes = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 $deletes+=$len;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 $aln_len += $len;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 $self->start_element({'Name' => 'Hsp'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 ## gc addition start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 $self->element({'Name' => 'Hsp_qseq',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 'Data' => shift @q_ex,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 $self->element({'Name' => 'Hsp_hseq',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 'Data' => shift @h_ex,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 $self->element({'Name' => 'Hsp_midline',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 'Data' => shift @m_ex,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 ## gc addition end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 $self->element({'Name' => 'Hsp_score',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 'Data' => $score});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 $self->element({'Name' => 'Hsp_query-from',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 'Data' => $qs});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 $qs += $aln_len*$qstrand;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 $self->element({'Name' => 'Hsp_query-to',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 'Data' => $qs - ($qstrand*1)});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 $hs += $deletes*$hstrand;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 $self->element({'Name' => 'Hsp_hit-from',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 'Data' => $hs});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 $hs += $aln_len*$hstrand;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 $self->element({'Name' => 'Hsp_hit-to',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 'Data' => $hs -($hstrand*1)});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 $self->element({'Name' => 'Hsp_align-len',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 'Data' => $aln_len});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 $self->element({'Name' => 'Hsp_identity',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 'Data' => $aln_len - ($inserts + $deletes)});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 $self->element({'Name' => 'Hsp_gaps',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 'Data' => $inserts + $deletes});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 $self->element({'Name' => 'Hsp_querygaps',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 'Data' => $inserts});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 $self->element({'Name' => 'Hsp_hitgaps',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 'Data' => $deletes});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 $self->end_element({'Name' => 'Hsp'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 $self->element({'Name' => 'Hit_score',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 'Data' => $score});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 $self->end_element({'Name' => 'Hit'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 $self->end_element({'Name' => 'ExonerateOutput'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 return $self->end_document();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 return $self->end_document() if( $seentop );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 =head2 start_element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 Title : start_element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 Usage : $eventgenerator->start_element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 Function: Handles a start element event
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 Returns : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 Args : hashref with at least 2 keys 'Data' and 'Name'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376 sub start_element{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 my ($self,$data) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378 # we currently don't care about attributes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 my $nm = $data->{'Name'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 my $type = $MODEMAP{$nm};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 if( $type ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 if( $self->_eventHandler->will_handle($type) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 my $func = sprintf("start_%s",lc $type);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 $self->_eventHandler->$func($data->{'Attributes'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 unshift @{$self->{'_elements'}}, $type;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 if($type eq 'result') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 $self->{'_values'} = {};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 $self->{'_result'}= undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 =head2 end_element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 Title : start_element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 Usage : $eventgenerator->end_element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 Function: Handles an end element event
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402 Returns : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403 Args : hashref with at least 2 keys 'Data' and 'Name'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 sub end_element {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 my ($self,$data) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 my $nm = $data->{'Name'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 my $type = $MODEMAP{$nm};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 my $rc;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 if( $type = $MODEMAP{$nm} ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 if( $self->_eventHandler->will_handle($type) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 my $func = sprintf("end_%s",lc $type);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 $rc = $self->_eventHandler->$func($self->{'_reporttype'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 $self->{'_values'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 shift @{$self->{'_elements'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422 } elsif( $MAPPING{$nm} ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424 if ( ref($MAPPING{$nm}) =~ /hash/i ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 my $key = (keys %{$MAPPING{$nm}})[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426 $self->{'_values'}->{$key}->{$MAPPING{$nm}->{$key}} = $self->{'_last_data'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428 $self->{'_values'}->{$MAPPING{$nm}} = $self->{'_last_data'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431 $self->debug( "unknown nm $nm, ignoring\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433 $self->{'_last_data'} = ''; # remove read data if we are at
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 # end of an element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435 $self->{'_result'} = $rc if( defined $type && $type eq 'result' );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436 return $rc;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439 =head2 element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441 Title : element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442 Usage : $eventhandler->element({'Name' => $name, 'Data' => $str});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 Function: Convience method that calls start_element, characters, end_element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444 Returns : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 Args : Hash ref with the keys 'Name' and 'Data'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450 sub element{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451 my ($self,$data) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452 $self->start_element($data);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453 $self->characters($data);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454 $self->end_element($data);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457 =head2 characters
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459 Title : characters
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460 Usage : $eventgenerator->characters($str)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461 Function: Send a character events
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462 Returns : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463 Args : string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468 sub characters{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469 my ($self,$data) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471 return unless ( defined $data->{'Data'} && $data->{'Data'} !~ /^\s+$/ );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473 $self->{'_last_data'} = $data->{'Data'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476 =head2 within_element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478 Title : within_element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479 Usage : if( $eventgenerator->within_element($element) ) {}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480 Function: Test if we are within a particular element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481 This is different than 'in' because within can be tested
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482 for a whole block.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483 Returns : boolean
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484 Args : string element name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489 sub within_element{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490 my ($self,$name) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491 return 0 if ( ! defined $name &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492 ! defined $self->{'_elements'} ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493 scalar @{$self->{'_elements'}} == 0) ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494 foreach ( @{$self->{'_elements'}} ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495 if( $_ eq $name ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496 return 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499 return 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503 =head2 in_element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505 Title : in_element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506 Usage : if( $eventgenerator->in_element($element) ) {}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507 Function: Test if we are in a particular element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508 This is different than 'in' because within can be tested
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509 for a whole block.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510 Returns : boolean
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511 Args : string element name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
512
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
513
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
514 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
515
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
516 sub in_element{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
517 my ($self,$name) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
518 return 0 if ! defined $self->{'_elements'}->[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
519 return ( $self->{'_elements'}->[0] eq $name)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
520 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
521
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
522 =head2 start_document
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
523
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
524 Title : start_document
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
525 Usage : $eventgenerator->start_document
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
526 Function: Handle a start document event
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
527 Returns : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
528 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
529
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
530
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
531 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
532
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
533 sub start_document{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
534 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
535 $self->{'_lasttype'} = '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
536 $self->{'_values'} = {};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
537 $self->{'_result'}= undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
538 $self->{'_elements'} = [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
539 $self->{'_reporttype'} = 'exonerate';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
540 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
541
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
542
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
543 =head2 end_document
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
544
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
545 Title : end_document
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
546 Usage : $eventgenerator->end_document
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
547 Function: Handles an end document event
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
548 Returns : Bio::Search::Result::ResultI object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
549 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
550
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
551
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
552 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
553
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
554 sub end_document{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
555 my ($self,@args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
556 return $self->{'_result'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
557 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
558
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
559
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
560 sub write_result {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
561 my ($self, $blast, @args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
562
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
563 if( not defined($self->writer) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
564 $self->warn("Writer not defined. Using a $DEFAULT_WRITER_CLASS");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
565 $self->writer( $DEFAULT_WRITER_CLASS->new() );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
566 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
567 $self->SUPER::write_result( $blast, @args );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
568 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
569
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
570 sub result_count {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
571 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
572 return $self->{'_result_count'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
573 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
574
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
575 sub report_count { shift->result_count }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
576
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
577 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
578