annotate variant_effect_predictor/Bio/SearchIO/fasta.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: fasta.pm,v 1.33.2.3 2003/08/28 16:01:03 jason Exp $
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 # BioPerl module for Bio::SearchIO::fasta
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::fasta - A SearchIO parser for FASTA results
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 object directly, use it through the SearchIO system
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20 use Bio::SearchIO;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 my $searchio = new Bio::SearchIO(-format => 'fasta',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22 -file => 'report.FASTA');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 while( my $result = $searchio->next_result ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24 # ....
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 This object contains the event based parsing code for FASTA format reports.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 =head1 FEEDBACK
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 =head2 Mailing Lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 User feedback is an integral part of the evolution of this and other
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 Bioperl modules. Send your comments and suggestions preferably to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 the Bioperl mailing list. Your participation is much appreciated.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 bioperl-l@bioperl.org - General discussion
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 http://bioperl.org/MailList.shtml - About the mailing lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 =head2 Reporting Bugs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 Report bugs to the Bioperl bug tracking system to help us keep track
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 of the bugs and their resolution. Bug reports can be submitted via
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 email or the web:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 bioperl-bugs@bioperl.org
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 http://bugzilla.bioperl.org/
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 =head1 AUTHOR - Jason Stajich
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 Email jason@bioperl.org
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 Describe contact details here
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 =head1 CONTRIBUTORS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 Additional contributors names and emails here
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 =head1 APPENDIX
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 The rest of the documentation details each of the object methods.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 Internal methods are usually preceded with a _
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 # Let the code begin...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 package Bio::SearchIO::fasta;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 use vars qw(@ISA %MODEMAP %MAPPING $IDLENGTH);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 # Object preamble - inherits from Bio::Root::RootI
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 use Bio::SearchIO;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 use POSIX;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 BEGIN {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 # Set IDLENGTH to a new value if you have
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 # compile FASTA with a different ID length
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 # (actually newest FASTA allows the setting of this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 # via -C parameter, default is 6)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 $IDLENGTH = 6;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 # mapping of NCBI Blast terms to Bioperl hash keys
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 %MODEMAP = ('FastaOutput' => 'result',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 'Hit' => 'hit',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 'Hsp' => 'hsp'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 # This should really be done more intelligently, like with
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 # XSLT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 %MAPPING =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 'Hsp_bit-score' => 'HSP-bits',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 'Hsp_score' => 'HSP-score',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 'Hsp_sw-score' => 'HSP-swscore',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 'Hsp_evalue' => 'HSP-evalue',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 'Hsp_query-from'=> 'HSP-query_start',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 'Hsp_query-to' => 'HSP-query_end',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 'Hsp_hit-from' => 'HSP-hit_start',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 'Hsp_hit-to' => 'HSP-hit_end',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 'Hsp_positive' => 'HSP-conserved',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 'Hsp_identity' => 'HSP-identical',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 'Hsp_gaps' => 'HSP-hsp_gaps',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 'Hsp_hitgaps' => 'HSP-hit_gaps',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 'Hsp_querygaps' => 'HSP-query_gaps',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 'Hsp_qseq' => 'HSP-query_seq',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 'Hsp_hseq' => 'HSP-hit_seq',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 'Hsp_midline' => 'HSP-homology_seq',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 'Hsp_align-len' => 'HSP-hsp_length',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 'Hsp_query-frame'=> 'HSP-query_frame',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 'Hsp_hit-frame' => 'HSP-hit_frame',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 'Hit_id' => 'HIT-name',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 'Hit_len' => 'HIT-length',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 'Hit_accession' => 'HIT-accession',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 'Hit_def' => 'HIT-description',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 'Hit_signif' => 'HIT-significance',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 'Hit_score' => 'HIT-score',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 'FastaOutput_program' => 'RESULT-algorithm_name',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 'FastaOutput_version' => 'RESULT-algorithm_version',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 'FastaOutput_query-def'=> 'RESULT-query_name',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 'FastaOutput_querydesc'=> 'RESULT-query_description',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 'FastaOutput_query-len'=> 'RESULT-query_length',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 'FastaOutput_db' => 'RESULT-database_name',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 'FastaOutput_db-len' => 'RESULT-database_entries',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 'FastaOutput_db-let' => 'RESULT-database_letters',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 'Parameters_matrix' => { 'RESULT-parameters' => 'matrix'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 'Parameters_expect' => { 'RESULT-parameters' => 'expect'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 'Parameters_include' => { 'RESULT-parameters' => 'include'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 'Parameters_sc-match' => { 'RESULT-parameters' => 'match'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 'Parameters_sc-mismatch' => { 'RESULT-parameters' => 'mismatch'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 'Parameters_gap-open' => { 'RESULT-parameters' => 'gapopen'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 'Parameters_gap-ext' => { 'RESULT-parameters' => 'gapext'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 'Parameters_word-size' => { 'RESULT-parameters' => 'wordsize'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 'Parameters_ktup' => { 'RESULT-parameters' => 'ktup'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 'Parameters_filter' => {'RESULT-parameters' => 'filter'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 'Statistics_db-num' => { 'RESULT-statistics' => 'dbentries'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 'Statistics_db-len' => { 'RESULT-statistics' => 'dbletters'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 'Statistics_hsp-len' => { 'RESULT-statistics' => 'hsplength'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 'Statistics_eff-space' => { 'RESULT-statistics' => 'effectivespace'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 'Statistics_kappa' => { 'RESULT-statistics' => 'kappa' },
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 'Statistics_lambda' => { 'RESULT-statistics' => 'lambda' },
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 'Statistics_entropy' => { 'RESULT-statistics' => 'entropy'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 @ISA = qw(Bio::SearchIO );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 =head2 new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 Title : new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 Usage : my $obj = new Bio::SearchIO::fasta();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 Function: Builds a new Bio::SearchIO::fasta object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 Returns : Bio::SearchIO::fasta
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 Args : -idlength - set ID length to something other
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 than the default (7), this is only
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 necessary if you have compiled FASTA
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 with a new default id length to display
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 in the HSP alignment blocks
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 sub _initialize {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 my($self,@args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 $self->SUPER::_initialize(@args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 return unless @args;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 my ($idlength) = $self->_rearrange([qw(IDLENGTH)],@args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 $self->idlength($idlength || $IDLENGTH);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 $self->_eventHandler->register_factory('hsp', Bio::Search::HSP::HSPFactory->new(-type => 'Bio::Search::HSP::FastaHSP'));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 return 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 =head2 next_result
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 Title : next_result
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 Usage : my $hit = $searchio->next_result;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 Function: Returns the next Result from a search
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 Returns : Bio::Search::Result::ResultI object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 sub next_result{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 my $data = '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 my $seentop = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 my $current_hsp;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 $self->start_document();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 my @hit_signifs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 while( defined ($_ = $self->_readline )) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 next if( ! $self->in_element('hsp') &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 /^\s+$/); # skip empty lines
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 if( /(\S+)\s+searches\s+a\s+((protein\s+or\s+DNA\s+sequence)|(sequence\s+database))/i || /(\S+) compares a/ ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 ( m/^# / && ($_ = $self->_readline) &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 /(\S+)\s+searches\s+a\s+((protein\s+or\s+DNA\s+sequence)|(sequence\s+database))/i || /(\S+) compares a/
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 if( $seentop ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 $self->_pushback($_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 $self->end_element({ 'Name' => 'FastaOutput'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 return $self->end_document();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 $self->{'_reporttype'} = $1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 $self->start_element({ 'Name' => 'FastaOutput' } );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 $self->{'_result_count'}++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 $seentop = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 $self->element({ 'Name' => 'FastaOutput_program',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 'Data' => $self->{'_reporttype'}});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 $_ = $self->_readline();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 my ($version) = (/version\s+(\S+)/);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 $version = '' unless defined $version;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 $self->{'_version'} = $version;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 $self->element({ 'Name' => 'FastaOutput_version',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 'Data' => $version});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 my ($last, $leadin, $type, $querylen, $querytype, $querydef);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 while( defined($_ = $self->_readline()) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 if( /^ (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 (?:\s+>) | # fa33 lead-in
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 (?:\s*\d+\s*>>>) # fa34 mlib lead-in
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 (.*)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 /x
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 ($leadin, $querydef) = ($1, $2);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 if ($leadin =~ m/>>>/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 if($querydef =~ /^(.*?)\s+(?:\-\s+)?(\d+)\s+(aa|nt)\s*$/o ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 ($querydef, $querylen, $querytype) = ($1, $2, $3);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 if( $last =~ /(\S+)[:,]\s*(\d+)\s+(aa|nt)/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 ($querylen, $querytype) = ($2, $3);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 $querydef ||= $1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 } elsif ( m/^\s*vs\s+\S+/o ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 if ( $last =~ /(\S+)[,:]\s+(\d+)\s+(aa|nt)/o) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 ($querydef, $querylen, $querytype) = ($1, $2, $3);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 $last = $_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 if( $self->{'_reporttype'} &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 $self->{'_reporttype'} eq 'FASTA'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 if( $querytype eq 'nt') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 $self->{'_reporttype'} = 'FASTN' ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 } elsif( $querytype eq 'aa' ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 $self->{'_reporttype'} = 'FASTP' ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 my ($name, $descr) = $querydef =~ m/^(\S+)\s*(.*?)\s*$/o;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 $self->element({'Name' => 'FastaOutput_query-def',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 'Data' => $name});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 $self->element({'Name' => 'FastaOutput_querydesc',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 'Data' => $descr});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 if ($querylen) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 $self->element({'Name' => 'FastaOutput_query-len',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 'Data' => $querylen});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 $self->warn("unable to find and set query length");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 if( $last =~ /^\s*vs\s+(\S+)/ ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 ($last =~ /^searching\s+(\S+)\s+library/) ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 (defined $_ && /^\s*vs\s+(\S+)/) ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 (defined ($_ = $self->_readline()) && /^\s*vs\s+(\S+)/)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 $self->element({'Name' => 'FastaOutput_db',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 'Data' => $1});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 } elsif (m/^\s+opt(?:\s+E\(\))?$/o) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 # histogram ... read over it more rapidly than the larger outer loop:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 while (defined($_ = $self->_readline)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 last if m/^>\d+/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 } elsif( /(\d+) residues in\s+(\d+)\s+sequences/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 $self->element({'Name' => 'FastaOutput_db-let',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 'Data' => $1});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 $self->element({'Name' => 'FastaOutput_db-len',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 'Data' => $2});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 $self->element({'Name' => 'Statistics_db-len',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 'Data' => $1});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 $self->element({'Name' => 'Statistics_db-num',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 'Data' => $2});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 } elsif( /Lambda=\s*(\S+)/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 $self->element({'Name' => 'Statistics_lambda',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 'Data' => $1});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 } elsif (/K=\s*(\S+)/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 $self->element({'Name' => 'Statistics_kappa',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 'Data' => $1});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 } elsif( /^\s*(Smith-Waterman).+(\S+)\s*matrix [^\]]*?(xS)?\]/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 $self->element({'Name' => 'Parameters_matrix',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 'Data' => $2});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 $self->element({'Name' => 'Parameters_filter',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 'Data' => defined $3 ? 1 : 0,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 $self->{'_reporttype'} = $1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 $self->element({ 'Name' => 'FastaOutput_program',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 'Data' => $self->{'_reporttype'}});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 } elsif( /The best( related| unrelated)? scores are:/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 my $rel = $1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 my @labels = split;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 @labels = map {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 if ($_ =~ m/^E\((\d+)\)$/o) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 $self->element({'Name' => 'Statistics_eff-space', 'Data' => $1});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 "evalue";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 $_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 } @labels[$rel ? 5 : 4 .. $#labels];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 while( defined ($_ = $self->_readline() ) &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 ! /^\s+$/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 my @line = split;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 if ($line[-1] =~ m/\=/o && $labels[-1] eq 'fs') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 # unlabelled alignment hit;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 push @labels, "aln_code";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 my %data;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 @data{@labels} = splice(@line, @line - @labels);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 if ($line[-1] =~ m/\[([1-6rf])\]/o) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 my $fr = $1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 $data{lframe} = ($fr =~ /\d/o ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 ($fr <= 3 ? "+$fr" : "-@{[$fr-3]}") :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 ($fr eq 'f' ? '+1' : '-1')
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 pop @line;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 $data{lframe} = '0';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 if ($line[-1] =~ m/^\(?(\d+)\)$/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 $data{hit_len} = $1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 pop @line;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 if ($line[-1] =~ m/^\($/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 pop @line;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 $data{hit_len} = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 # rebuild the first part of the line, preserving spaces:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 ($_) = m/^(\S+(?:\s+\S+){$#line})/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 my ($id, $desc) = split(/\s+/,$_,2);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 my @pieces = split(/\|/,$id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 my $acc = pop @pieces;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 $acc =~ s/\.\d+$//;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 @data{qw(id desc acc)} = ($id, $desc, $acc);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 push @hit_signifs, \%data;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 } elsif( /^\s*([T]?FAST[XYAF]).+,\s*(\S+)\s*matrix[^\]]+?(xS)?\]\s*ktup:\s*(\d+)/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378 $self->element({'Name' => 'Parameters_matrix',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 'Data' => $2});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 $self->element({'Name' => 'Parameters_filter',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 'Data' => defined $3 ? 1 : 0,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 $self->element({'Name' => 'Parameters_ktup',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 'Data' => $4});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 $self->{'_reporttype'} = $1 if( $self->{'_reporttype'} !~ /FAST[PN]/i ) ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 $self->element({ 'Name' => 'FastaOutput_program',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 'Data' => $self->{'_reporttype'}});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 } elsif( /(?:gap\-pen|open\/ext):\s+([\-\+]?\d+)\s*\/\s*([\-\+]?\d+).+width:\s+(\d+)/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 $self->element({'Name' => 'Parameters_gap-open',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 'Data' => $1});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393 $self->element({'Name' => 'Parameters_gap-ext',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 'Data' => $2});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 $self->element({'Name' => 'Parameters_word-size',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 'Data' => $3});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 } elsif( /^>>(.+?)\s+\((\d+)\s*(aa|nt)\)$/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 if( $self->in_element('hsp') ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 $self->end_element({ 'Name' => 'Hsp'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 if( $self->in_element('hit') ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402 $self->end_element({ 'Name' => 'Hit'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 $self->start_element({'Name' => 'Hit'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 $self->element({ 'Name' => 'Hit_len',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407 'Data' => $2});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 my ($id,$desc) = split(/\s+/,$1,2);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 $self->element({ 'Name' => 'Hit_id',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 'Data' => $id});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 my @pieces = split(/\|/,$id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 my $acc = pop @pieces;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 $acc =~ s/\.\d+$//;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 $self->element({ 'Name' => 'Hit_accession',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 'Data' => $acc});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 $self->element({ 'Name' => 'Hit_def',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 'Data' => $desc});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 $_ = $self->_readline();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 my ($score,$bits,$e) = /Z-score: \s* (\S+) \s*
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 (?: bits: \s* (\S+) \s+ )?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422 (?: E|expect ) \s* \(\) :? \s*(\S+)/x;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 $bits = $score unless defined $bits;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 my $v = shift @hit_signifs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426 if( defined $v ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 @{$v}{qw(evalue bits z-sc)} = ($e, $bits, $score);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430 $self->element({'Name' => 'Hit_signif',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431 'Data' => $v ? $v->{evalue} : $e });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432 $self->element({'Name' => 'Hit_score',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433 'Data' => $v ? $v->{bits} : $bits });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 $self->start_element({'Name' => 'Hsp'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436 $self->element({'Name' => 'Hsp_score',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437 'Data' => $v ? $v->{'z-sc'} : $score });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 $self->element({'Name' => 'Hsp_evalue',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439 'Data' => $v ? $v->{evalue} : $e });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440 $self->element({'Name' => 'Hsp_bit-score',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441 'Data' => $v ? $v->{bits} : $bits });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442 $_ = $self->_readline();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 if( /Smith-Waterman score:\s*(\d+)/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444 $self->element({'Name' => 'Hsp_sw-score',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 'Data' => $1});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 if( / (\S+)\% \s* identity
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448 (?:\s* \( \s* (\S+)\% \s* ungapped \) )?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449 \s* in \s* (\d+) \s+ (?:aa|nt) \s+ overlap \s*
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450 \( (\d+) \- (\d+) : (\d+) \- (\d+) \)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451 /x ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452 my ($identper,$gapper,$len,$querystart,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453 $queryend,$hitstart,$hitend) = ($1,$2,$3,$4,$5,$6,$7);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454 my $ident = POSIX::ceil(($identper/100) * $len);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455 my $gaps = ( defined $gapper ) ? POSIX::ceil ( ($gapper/100) * $len) : undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457 $self->element({'Name' => 'Hsp_gaps',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458 'Data' => $gaps});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459 $self->element({'Name' => 'Hsp_identity',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460 'Data' => $ident});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461 $self->element({'Name' => 'Hsp_positive',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462 'Data' => $ident});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463 $self->element({'Name' => 'Hsp_align-len',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464 'Data' => $len});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466 $self->element({'Name' => 'Hsp_query-from',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467 'Data' => $querystart});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468 $self->element({'Name' => 'Hsp_query-to',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469 'Data' => $queryend});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470 $self->element({'Name' => 'Hsp_hit-from',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471 'Data' => $hitstart});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472 $self->element({'Name' => 'Hsp_hit-to',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473 'Data' => $hitend});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477 if ($v) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478 $self->element({'Name' => 'Hsp_querygaps', 'Data' => $v->{qgaps} }) if exists $v->{qgaps};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479 $self->element({'Name' => 'Hsp_hitgaps', 'Data' => $v->{lgaps} }) if exists $v->{lgaps};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481 if ($self->{'_reporttype'} =~ m/^FAST[NXY]$/o) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482 if( 8 == scalar grep { exists $v->{$_} } qw(an0 ax0 pn0 px0 an1 ax1 pn1 px1) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483 if ($v->{ax0} < $v->{an0}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484 $self->element({'Name' => 'Hsp_query-frame', 'Data' => "-@{[(($v->{px0} - $v->{ax0}) % 3) + 1]}" });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486 $self->element({'Name' => 'Hsp_query-frame', 'Data' => "+@{[(($v->{an0} - $v->{pn0}) % 3) + 1]}" });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488 if ($v->{ax1} < $v->{an1}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489 $self->element({'Name' => 'Hsp_hit-frame', 'Data' => "-@{[(($v->{px1} - $v->{ax1}) % 3) + 1]}" });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491 $self->element({'Name' => 'Hsp_hit-frame', 'Data' => "+@{[(($v->{an1} - $v->{pn1}) % 3) + 1]}" });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494 $self->element({'Name' => 'Hsp_query-frame', 'Data' => $v->{lframe} });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495 $self->element({'Name' => 'Hsp_hit-frame', 'Data' => 0 });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498 $self->element({'Name' => 'Hsp_query-frame', 'Data' => 0 });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499 $self->element({'Name' => 'Hsp_hit-frame', 'Data' => $v->{lframe} });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503 $self->warn( "unable to parse FASTA score line: $_");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505 } elsif( /\d+\s*residues\s*in\s*\d+\s*query\s*sequences/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506 if( $self->in_element('hsp') ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507 $self->end_element({'Name' => 'Hsp'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509 if( $self->in_element('hit') ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510 $self->end_element({'Name' => 'Hit'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
512
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
513 # $_ = $self->_readline();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
514 # my ( $liblen,$libsize) = /(\d+)\s+residues\s*in(\d+)\s*library/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
515 # fast forward to the end of the file as there is
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
516 # nothing else left to do with this file and want to be sure and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
517 # reset it
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
518 while(defined($_ = $self->_readline() ) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
519 last if( /^Function used was/);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
520 if( /(\S+)\s+searches\s+a\s+(protein\s+or\s+DNA\s+sequence)|(sequence\s+database)/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
521 $self->_pushback($_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
522 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
523 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
524
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
525 if (@hit_signifs) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
526 # process remaining best hits
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
527 for my $h (@hit_signifs) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
528 # Hsp_score Hsp_evalue Hsp_bit-score
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
529 # Hsp_sw-score Hsp_gaps Hsp_identity Hsp_positive
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
530 # Hsp_align-len Hsp_query-from Hsp_query-to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
531 # Hsp_hit-from Hsp_hit-to Hsp_qseq Hsp_midline
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
532
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
533 $self->start_element({'Name' => 'Hit'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
534 $self->element({ 'Name' => 'Hit_len',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
535 'Data' => $h->{hit_len}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
536 }) if exists $h->{hit_len};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
537 $self->element({ 'Name' => 'Hit_id',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
538 'Data' => $h->{id}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
539 }) if exists $h->{id};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
540 $self->element({ 'Name' => 'Hit_accession',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
541 'Data' => $h->{acc}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
542 }) if exists $h->{acc};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
543 $self->element({ 'Name' => 'Hit_def',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
544 'Data' => $h->{desc}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
545 }) if exists $h->{desc};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
546 $self->element({'Name' => 'Hit_signif',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
547 'Data' => $h->{evalue}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
548 }) if exists $h->{evalue};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
549 $self->element({'Name' => 'Hit_score',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
550 'Data' => $h->{bits}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
551 }) if exists $h->{bits};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
552
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
553 $self->start_element({'Name' => 'Hsp'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
554 $self->element({'Name' => 'Hsp_score', 'Data' => $h->{'z-sc'} }) if exists $h->{'z-sc'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
555 $self->element({'Name' => 'Hsp_evalue', 'Data' => $h->{evalue} }) if exists $h->{evalue};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
556 $self->element({'Name' => 'Hsp_bit-score', 'Data' => $h->{bits} }) if exists $h->{bits};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
557 $self->element({'Name' => 'Hsp_sw-score', 'Data' => $h->{sw} }) if exists $h->{sw};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
558 $self->element({'Name' => 'Hsp_gaps', 'Data' => $h->{'%_gid'} }) if exists $h->{'%_gid'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
559 $self->element({'Name' => 'Hsp_identity', 'Data' => POSIX::ceil($h->{'%_id'} * $h->{alen}) })
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
560 if (exists $h->{'%_id'} && exists $h->{alen});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
561 $self->element({'Name' => 'Hsp_positive', 'Data' => 100 * $h->{'%_id'} }) if exists $h->{'%_id'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
562 $self->element({'Name' => 'Hsp_align-len', 'Data' => $h->{alen} }) if exists $h->{alen};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
563 $self->element({'Name' => 'Hsp_query-from', 'Data' => $h->{an0} }) if exists $h->{an0};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
564 $self->element({'Name' => 'Hsp_query-to', 'Data' => $h->{ax0} }) if exists $h->{ax0};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
565 $self->element({'Name' => 'Hsp_hit-from', 'Data' => $h->{an1} }) if exists $h->{an1};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
566 $self->element({'Name' => 'Hsp_hit-to', 'Data' => $h->{ax1} }) if exists $h->{ax1};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
567
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
568 $self->element({'Name' => 'Hsp_querygaps', 'Data' => $h->{qgaps} }) if exists $h->{qgaps};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
569 $self->element({'Name' => 'Hsp_hitgaps', 'Data' => $h->{lgaps} }) if exists $h->{lgaps};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
570
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
571 if ($self->{'_reporttype'} =~ m/^FAST[NXY]$/o) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
572 if( 8 == scalar grep { exists $h->{$_} } qw(an0 ax0 pn0 px0 an1 ax1 pn1 px1) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
573 if ($h->{ax0} < $h->{an0}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
574 $self->element({'Name' => 'Hsp_query-frame', 'Data' => "-@{[(($h->{px0} - $h->{ax0}) % 3) + 1]}" });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
575 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
576 $self->element({'Name' => 'Hsp_query-frame', 'Data' => "+@{[(($h->{an0} - $h->{pn0}) % 3) + 1]}" });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
577 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
578 if ($h->{ax1} < $h->{an1}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
579 $self->element({'Name' => 'Hsp_hit-frame', 'Data' => "-@{[(($h->{px1} - $h->{ax1}) % 3) + 1]}" });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
580 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
581 $self->element({'Name' => 'Hsp_hit-frame', 'Data' => "+@{[(($h->{an1} - $h->{pn1}) % 3) + 1]}" });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
582 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
583 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
584 $self->element({'Name' => 'Hsp_query-frame', 'Data' => $h->{lframe} });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
585 $self->element({'Name' => 'Hsp_hit-frame', 'Data' => 0 });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
586 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
587 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
588 $self->element({'Name' => 'Hsp_query-frame', 'Data' => 0 });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
589 $self->element({'Name' => 'Hsp_hit-frame', 'Data' => $h->{lframe} });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
590 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
591
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
592 $self->end_element({'Name' => 'Hsp'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
593 $self->end_element({'Name' => 'Hit'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
594 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
595 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
596
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
597 $self->end_element({ 'Name' => 'FastaOutput'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
598 return $self->end_document();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
599 } elsif( /^\s*\d+\s*>>>/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
600 if ($self->within_element('FastaOutput')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
601 if( $self->in_element('hsp') ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
602 $self->end_element({'Name' => 'Hsp'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
603 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
604 if( $self->in_element('hit') ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
605 $self->end_element({'Name' => 'Hit'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
606 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
607
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
608 if (@hit_signifs) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
609 # process remaining best hits
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
610 for my $h (@hit_signifs) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
611 $self->start_element({'Name' => 'Hit'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
612 $self->element({ 'Name' => 'Hit_len',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
613 'Data' => $h->{hit_len}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
614 }) if exists $h->{hit_len};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
615 $self->element({ 'Name' => 'Hit_id',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
616 'Data' => $h->{id}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
617 }) if exists $h->{id};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
618 $self->element({ 'Name' => 'Hit_accession',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
619 'Data' => $h->{acc}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
620 }) if exists $h->{acc};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
621 $self->element({ 'Name' => 'Hit_def',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
622 'Data' => $h->{desc}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
623 }) if exists $h->{desc};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
624 $self->element({'Name' => 'Hit_signif',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
625 'Data' => $h->{evalue}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
626 }) if exists $h->{evalue};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
627 $self->element({'Name' => 'Hit_score',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
628 'Data' => $h->{bits}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
629 }) if exists $h->{bits};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
630
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
631 $self->start_element({'Name' => 'Hsp'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
632 $self->element({'Name' => 'Hsp_score', 'Data' => $h->{'z-sc'} }) if exists $h->{'z-sc'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
633 $self->element({'Name' => 'Hsp_evalue', 'Data' => $h->{evalue} }) if exists $h->{evalue};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
634 $self->element({'Name' => 'Hsp_bit-score', 'Data' => $h->{bits} }) if exists $h->{bits};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
635 $self->element({'Name' => 'Hsp_sw-score', 'Data' => $h->{sw} }) if exists $h->{sw};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
636 $self->element({'Name' => 'Hsp_gaps', 'Data' => $h->{'%_gid'} }) if exists $h->{'%_gid'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
637 $self->element({'Name' => 'Hsp_identity', 'Data' => POSIX::ceil($h->{'%_id'} * $h->{alen}) })
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
638 if (exists $h->{'%_id'} && exists $h->{alen});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
639 $self->element({'Name' => 'Hsp_positive', 'Data' => $h->{'%_id'} }) if exists $h->{'%_id'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
640 $self->element({'Name' => 'Hsp_align-len', 'Data' => $h->{alen} }) if exists $h->{alen};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
641 $self->element({'Name' => 'Hsp_query-from', 'Data' => $h->{an0} }) if exists $h->{an0};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
642 $self->element({'Name' => 'Hsp_query-to', 'Data' => $h->{ax0} }) if exists $h->{ax0};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
643 $self->element({'Name' => 'Hsp_hit-from', 'Data' => $h->{an1} }) if exists $h->{an1};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
644 $self->element({'Name' => 'Hsp_hit-to', 'Data' => $h->{ax1} }) if exists $h->{ax1};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
645
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
646 $self->element({'Name' => 'Hsp_querygaps', 'Data' => $h->{qgaps} }) if exists $h->{qgaps};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
647 $self->element({'Name' => 'Hsp_hitgaps', 'Data' => $h->{lgaps} }) if exists $h->{lgaps};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
648
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
649 if ($self->{'_reporttype'} =~ m/^FAST[NXY]$/o) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
650 if( 8 == scalar grep { exists $h->{$_} } qw(an0 ax0 pn0 px0 an1 ax1 pn1 px1) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
651 if ($h->{ax0} < $h->{an0}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
652 $self->element({'Name' => 'Hsp_query-frame', 'Data' => "-@{[(($h->{px0} - $h->{ax0}) % 3) + 1]}" });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
653 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
654 $self->element({'Name' => 'Hsp_query-frame', 'Data' => "+@{[(($h->{an0} - $h->{pn0}) % 3) + 1]}" });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
655 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
656 if ($h->{ax1} < $h->{an1}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
657 $self->element({'Name' => 'Hsp_hit-frame', 'Data' => "-@{[(($h->{px1} - $h->{ax1}) % 3) + 1]}" });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
658 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
659 $self->element({'Name' => 'Hsp_hit-frame', 'Data' => "+@{[(($h->{an1} - $h->{pn1}) % 3) + 1]}" });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
660 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
661 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
662 $self->element({'Name' => 'Hsp_query-frame', 'Data' => $h->{lframe} });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
663 $self->element({'Name' => 'Hsp_hit-frame', 'Data' => 0 });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
664 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
665 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
666 $self->element({'Name' => 'Hsp_query-frame', 'Data' => 0 });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
667 $self->element({'Name' => 'Hsp_hit-frame', 'Data' => $h->{lframe} });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
668 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
669
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
670 $self->end_element({'Name' => 'Hsp'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
671 $self->end_element({'Name' => 'Hit'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
672 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
673 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
674 $self->end_element({ 'Name' => 'FastaOutput' });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
675 $self->_pushback($_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
676 return $self->end_document();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
677 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
678 $self->start_element({ 'Name' => 'FastaOutput' });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
679 $self->{'_result_count'}++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
680 $seentop = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
681 $self->element({ 'Name' => 'FastaOutput_program',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
682 'Data' => $self->{'_reporttype'} });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
683 $self->element({ 'Name' => 'FastaOutput_version',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
684 'Data' => $self->{'_version'} });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
685
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
686 my ($type, $querylen, $querytype, $querydef);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
687
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
688 if( /^\s*\d+\s*>>>(.*)/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
689 $querydef = $1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
690 if($querydef =~ /^(.*?)\s+(?:\-\s+)?(\d+)\s+(aa|nt)\s*$/o ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
691 ($querydef, $querylen, $querytype) = ($1, $2, $3);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
692 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
693 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
694
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
695 if( $self->{'_reporttype'} &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
696 $self->{'_reporttype'} eq 'FASTA'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
697 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
698 if( $querytype eq 'nt') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
699 $self->{'_reporttype'} = 'FASTN' ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
700 } elsif( $querytype eq 'aa' ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
701 $self->{'_reporttype'} = 'FASTP' ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
702 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
703 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
704 my ($name,$descr) = ($querydef =~ m/^(\S+)(?:\s+(.*))?\s*$/o);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
705 $self->element({'Name' => 'FastaOutput_query-def',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
706 'Data' => $name});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
707 $self->element({'Name' => 'FastaOutput_querydesc',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
708 'Data' => $descr});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
709 if ($querylen) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
710 $self->element({'Name' => 'FastaOutput_query-len',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
711 'Data' => $querylen});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
712 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
713 $self->warn("unable to find and set query length");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
714 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
715
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
716
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
717 if( defined ($_ = $self->_readline()) && /^\s*vs\s+(\S+)/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
718 $self->element({'Name' => 'FastaOutput_db',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
719 'Data' => $1});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
720 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
721 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
722 } elsif( $self->in_element('hsp' ) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
723
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
724 my @data = ( '','','');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
725 my $count = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
726 my $len = $self->idlength + 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
727 my ($seq1_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
728 while( defined($_ ) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
729 chomp;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
730 $self->debug( "$count $_\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
731
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
732 if( /residues in \d+\s+query\s+sequences/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
733 $self->_pushback($_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
734 last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
735 } elsif( /^>>/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
736 $self->_pushback($_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
737 last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
738 } elsif (/^\s*\d+\s*>>>/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
739 $self->_pushback($_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
740 last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
741 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
742 if( $count == 0 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
743 unless( /^\s+\d+/ || /^\s+$/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
744 $self->_pushback($_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
745 $count = 2;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
746 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
747 } elsif( $count == 1 || $count == 3 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
748 if( /^(\S+)\s+/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
749 $len = CORE::length($1) if $len < CORE::length($1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
750 s/\s+$//; # trim trailing spaces,we don't want them
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
751 $data[$count-1] = substr($_,$len);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
752 } elsif( /^\s+(\d+)/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
753 $count = -1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
754 $self->_pushback($_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
755 } elsif( /^\s+$/ || length($_) == 0) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
756 $count = 5;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
757 # going to skip these
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
758 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
759 $self->warn("Unrecognized alignment line ($count) '$_'");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
760 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
761 } elsif( $count == 2 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
762 if( /^\s+\d+\s+/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
763 $self->warn("$_\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
764 $count = 4;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
765 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
766 # toss the first IDLENGTH characters of the line
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
767 if( length($_) >= $len ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
768 $data[$count-1] = substr($_,$len);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
769 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
770 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
771 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
772 last if( $count++ >= 5);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
773 $_ = $self->_readline();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
774 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
775 if( length($data[0]) > 0 || length($data[2]) > 0 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
776 $self->characters({'Name' => 'Hsp_qseq',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
777 'Data' => $data[0] });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
778 $self->characters({'Name' => 'Hsp_midline',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
779 'Data' => $data[1]});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
780 $self->characters({'Name' => 'Hsp_hseq',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
781 'Data' => $data[2]});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
782 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
783 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
784 if( ! $seentop ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
785 $self->debug($_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
786 $self->warn("unrecognized FASTA Family report file!");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
787 return undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
788 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
789 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
790 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
791 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
792
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
793
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
794 =head2 start_element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
795
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
796 Title : start_element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
797 Usage : $eventgenerator->start_element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
798 Function: Handles a start element event
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
799 Returns : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
800 Args : hashref with at least 2 keys 'Data' and 'Name'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
801
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
802
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
803 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
804
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
805 sub start_element{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
806 my ($self,$data) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
807 # we currently don't care about attributes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
808 my $nm = $data->{'Name'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
809 if( my $type = $MODEMAP{$nm} ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
810 $self->_mode($type);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
811 if( $self->_eventHandler->will_handle($type) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
812 my $func = sprintf("start_%s",lc $type);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
813 $self->_eventHandler->$func($data->{'Attributes'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
814 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
815 unshift @{$self->{'_elements'}}, $type;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
816 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
817 if($nm eq 'FastaOutput') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
818 $self->{'_values'} = {};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
819 $self->{'_result'}= undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
820 $self->{'_mode'} = '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
821 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
822
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
823 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
824
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
825 =head2 end_element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
826
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
827 Title : start_element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
828 Usage : $eventgenerator->end_element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
829 Function: Handles an end element event
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
830 Returns : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
831 Args : hashref with at least 2 keys 'Data' and 'Name'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
832
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
833
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
834 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
835
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
836 sub end_element {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
837 my ($self,$data) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
838 my $nm = $data->{'Name'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
839 my $rc;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
840 # Hsp are sort of weird, in that they end when another
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
841 # object begins so have to detect this in end_element for now
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
842 if( $nm eq 'Hsp' ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
843 foreach ( qw(Hsp_qseq Hsp_midline Hsp_hseq) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
844 $self->element({'Name' => $_,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
845 'Data' => $self->{'_last_hspdata'}->{$_}});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
846 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
847 $self->{'_last_hspdata'} = {}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
848 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
849
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
850 if( my $type = $MODEMAP{$nm} ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
851 if( $self->_eventHandler->will_handle($type) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
852 my $func = sprintf("end_%s",lc $type);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
853 $rc = $self->_eventHandler->$func($self->{'_reporttype'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
854 $self->{'_values'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
855 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
856 shift @{$self->{'_elements'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
857
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
858 } elsif( $MAPPING{$nm} ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
859 if ( ref($MAPPING{$nm}) =~ /hash/i ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
860 my $key = (keys %{$MAPPING{$nm}})[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
861 $self->{'_values'}->{$key}->{$MAPPING{$nm}->{$key}} = $self->{'_last_data'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
862 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
863 $self->{'_values'}->{$MAPPING{$nm}} = $self->{'_last_data'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
864 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
865 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
866 $self->warn( "unknown nm $nm, ignoring\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
867 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
868 $self->{'_last_data'} = ''; # remove read data if we are at
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
869 # end of an element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
870 $self->{'_result'} = $rc if( $nm eq 'FastaOutput' );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
871 return $rc;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
872
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
873 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
874
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
875 =head2 element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
876
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
877 Title : element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
878 Usage : $eventhandler->element({'Name' => $name, 'Data' => $str});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
879 Function: Convience method that calls start_element, characters, end_element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
880 Returns : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
881 Args : Hash ref with the keys 'Name' and 'Data'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
882
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
883
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
884 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
885
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
886 sub element{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
887 my ($self,$data) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
888 $self->start_element($data);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
889 $self->characters($data);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
890 $self->end_element($data);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
891 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
892
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
893
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
894 =head2 characters
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
895
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
896 Title : characters
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
897 Usage : $eventgenerator->characters($str)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
898 Function: Send a character events
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
899 Returns : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
900 Args : string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
901
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
902
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
903 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
904
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
905 sub characters{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
906 my ($self,$data) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
907
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
908 return unless ( defined $data->{'Data'} );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
909 if( $data->{'Data'} =~ /^\s+$/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
910 return unless $data->{'Name'} =~ /Hsp\_(midline|qseq|hseq)/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
911 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
912
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
913 if( $self->in_element('hsp') &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
914 $data->{'Name'} =~ /Hsp\_(qseq|hseq|midline)/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
915
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
916 $self->{'_last_hspdata'}->{$data->{'Name'}} .= $data->{'Data'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
917 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
918
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
919 $self->{'_last_data'} = $data->{'Data'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
920 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
921
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
922 =head2 _mode
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
923
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
924 Title : _mode
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
925 Usage : $obj->_mode($newval)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
926 Function:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
927 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
928 Returns : value of _mode
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
929 Args : newvalue (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
930
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
931
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
932 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
933
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
934 sub _mode{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
935 my ($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
936 if( defined $value) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
937 $self->{'_mode'} = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
938 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
939 return $self->{'_mode'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
940 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
941
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
942 =head2 within_element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
943
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
944 Title : within_element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
945 Usage : if( $eventgenerator->within_element($element) ) {}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
946 Function: Test if we are within a particular element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
947 This is different than 'in' because within can be tested
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
948 for a whole block.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
949 Returns : boolean
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
950 Args : string element name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
951
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
952
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
953 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
954
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
955 sub within_element{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
956 my ($self,$name) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
957 return 0 if ( ! defined $name &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
958 ! defined $self->{'_elements'} ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
959 scalar @{$self->{'_elements'}} == 0) ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
960 foreach ( @{$self->{'_elements'}} ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
961 if( $_ eq $name || $_ eq $MODEMAP{$name} ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
962 return 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
963 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
964 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
965 return 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
966 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
967
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
968 =head2 in_element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
969
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
970 Title : in_element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
971 Usage : if( $eventgenerator->in_element($element) ) {}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
972 Function: Test if we are in a particular element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
973 This is different than 'in' because within can be tested
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
974 for a whole block.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
975 Returns : boolean
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
976 Args : string element name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
977
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
978
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
979 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
980
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
981 sub in_element{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
982 my ($self,$name) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
983 return 0 if ! defined $self->{'_elements'}->[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
984 return ( $self->{'_elements'}->[0] eq $name ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
985 (exists $MODEMAP{$name} && $self->{'_elements'}->[0] eq $MODEMAP{$name})
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
986 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
987 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
988
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
989
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
990 =head2 start_document
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
991
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
992 Title : start_document
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
993 Usage : $eventgenerator->start_document
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
994 Function: Handles a start document event
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
995 Returns : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
996 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
997
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
998
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
999 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1000
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1001 sub start_document{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1002 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1003 $self->{'_lasttype'} = '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1004 $self->{'_values'} = {};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1005 $self->{'_result'}= undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1006 $self->{'_mode'} = '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1007 $self->{'_elements'} = [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1008 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1009
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1010
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1011 =head2 end_document
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1012
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1013 Title : end_document
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1014 Usage : $eventgenerator->end_document
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1015 Function: Handles an end document event
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1016 Returns : Bio::Search::Result::ResultI object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1017 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1018
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1019
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1020 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1021
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1022 sub end_document{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1023 my ($self,@args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1024 return $self->{'_result'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1025 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1026
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1027 =head2 idlength
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1028
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1029 Title : idlength
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1030 Usage : $obj->idlength($newval)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1031 Function: Internal storage of the length of the ID desc
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1032 in the HSP alignment blocks. Defaults to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1033 $IDLENGTH class variable value
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1034 Returns : value of idlength
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1035 Args : newvalue (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1036
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1037
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1038 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1039
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1040 sub idlength{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1041 my ($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1042 if( defined $value) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1043 $self->{'_idlength'} = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1044 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1045 return $self->{'_idlength'} || $IDLENGTH;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1046 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1047
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1048
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1049 =head2 result_count
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1050
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1051 Title : result_count
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1052 Usage : my $count = $searchio->result_count
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1053 Function: Returns the number of results we have processed
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1054 Returns : integer
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1055 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1056
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1057
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1058 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1059
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1060 sub result_count {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1061 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1062 return $self->{'_result_count'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1063 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1064
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1065 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1066