annotate variant_effect_predictor/Bio/Tools/BPlite/Sbjct.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: Sbjct.pm,v 1.23.2.1 2003/02/20 00:39:03 jason Exp $
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2 ###############################################################################
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 # Bio::Tools::BPlite::Sbjct
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 ###############################################################################
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 # The original BPlite.pm module has been written by Ian Korf !
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 # see http://sapiens.wustl.edu/~ikorf
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 # BioPerl module for Bio::Tools::BPlite::Sbjct
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 # Cared for by Peter Schattner <schattner@alum.mit.edu>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15 # Copyright Peter Schattner
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 # You may distribute this module under the same terms as perl itself
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 # POD documentation - main docs before the code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 Bio::Tools::BPlite::Sbjct - A Blast Subject (database search Hit)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 use Bio::Tools::BPlite
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 my $report = new Bio::Tools::BPlite(-fh=>\*STDIN);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 while(my $sbjct = $report->nextSbjct) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 $sbjct->name; # access to the hit name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 "$sbjct"; # overloaded to return name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 $sbjct->nextHSP; # gets the next HSP from the sbjct
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 while(my $hsp = $sbjct->nextHSP) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 # canonical form is again a while loop
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 See L<Bio::Tools::BPlite> for a more detailed information about the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 BPlite BLAST parsing objects.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 The original BPlite.pm module has been written by Ian Korf!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 See http://sapiens.wustl.edu/~ikorf
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 The Sbjct object encapsulates a Hit in a Blast database
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 search. The Subjects are the "Hits" for a particular query. A
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 Subject may be made up of multiple High Scoring Pairs (HSP) which are
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 accessed through the nextHSP method.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 If you are searching for the P-value or percent identity that is
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 specific to each HSP and you will need to use the nextHSP method to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 get access to that data.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 =head1 FEEDBACK
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 =head2 Mailing Lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 User feedback is an integral part of the evolution of this and other
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 Bioperl modules. Send your comments and suggestions preferably to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 the Bioperl mailing list. Your participation is much appreciated.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 bioperl-l@bioperl.org - General discussion
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 http://bioperl.org/MailList.shtml - About the mailing lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 =head2 Reporting Bugs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 Report bugs to the Bioperl bug tracking system to help us keep track
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 of the bugs and their resolution. Bug reports can be submitted via
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 email or the web:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 bioperl-bugs@bioperl.org
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 http://bugzilla.bioperl.org/
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 =head1 AUTHOR - Peter Schattner
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 Email: schattner@alum.mit.edu
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 =head1 CONTRIBUTORS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 Jason Stajich, jason@bioperl.org
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 =head1 APPENDIX
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 The rest of the documentation details each of the object methods.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 Internal methods are usually preceded with a _
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 # Let the code begin...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 package Bio::Tools::BPlite::Sbjct;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 use Bio::Root::Root; # root object to inherit from
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 use Bio::Tools::BPlite::HSP; # we want to use HSP
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 #use overload '""' => 'name';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 use vars qw(@ISA);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 @ISA = qw(Bio::Root::Root);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 my ($class, @args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 my $self = $class->SUPER::new(@args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 ($self->{'NAME'},$self->{'LENGTH'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 $self->{'PARENT'}) =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 $self->_rearrange([qw(NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 LENGTH
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 PARENT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 )],@args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 $self->report_type($self->{'PARENT'}->{'BLAST_TYPE'} || 'UNKNOWN');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 $self->{'HSP_ALL_PARSED'} = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 return $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 =head2 name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 Title : name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 Usage : $name = $obj->name();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 Function : returns the name of the Sbjct
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 Returns : name of the Sbjct
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 Args :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 sub name {shift->{'NAME'}}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 =head2 report_type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 Title : report_type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 Usage : $type = $sbjct->report_type()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 Function : Returns the type of report from which this hit was obtained.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 This usually pertains only to BLAST and friends reports, for which
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 the report type denotes what type of sequence was aligned against
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 what (BLASTN: dna-dna, BLASTP prt-prt, BLASTX translated dna-prt,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 TBLASTN prt-translated dna, TBLASTX translated dna-translated dna).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 Returns : A string (BLASTN, BLASTP, BLASTX, TBLASTN, TBLASTX, UNKNOWN)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 Args : a string on set (you should know what you are doing)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 sub report_type {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 my ($self, $rpt) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 if($rpt) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 $self->{'_report_type'} = $rpt;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 return $self->{'_report_type'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 =head2 nextFeaturePair
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 Title : nextFeaturePair
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 Usage : $name = $obj->nextFeaturePair();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 Function : same as the nextHSP function
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 Returns : next FeaturePair
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 Args :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 sub nextFeaturePair {shift->nextHSP}; # just another name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 =head2 nextHSP
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 Title : nextHSP
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 Usage : $hsp = $obj->nextHSP();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 Function : returns the next available High Scoring Pair
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 Returns : Bio::Tools::HSP or null if finished
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 Args :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 sub nextHSP {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 return undef if $self->{'HSP_ALL_PARSED'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 ############################
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 # get and parse scorelines #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 ############################
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 my ($qframe, $sframe);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 my $scoreline = $self->_readline();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 my $nextline = $self->_readline();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 return undef if not defined $nextline;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 $scoreline .= $nextline;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 my ($score, $bits);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 if ($scoreline =~ /\d bits\)/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 ($score, $bits) = $scoreline =~
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 /Score = (\d+) \((\S+) bits\)/; # WU-BLAST
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 ($bits, $score) = $scoreline =~
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 /Score =\s+(\S+) bits \((\d+)/; # NCBI-BLAST
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 my ($match, $hsplength) = ($scoreline =~ /Identities = (\d+)\/(\d+)/);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 my ($positive) = ($scoreline =~ /Positives = (\d+)/);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 my ($gaps) = ($scoreline =~ /Gaps = (\d+)/);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 if($self->report_type() eq 'TBLASTX') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 ($qframe, $sframe) = $scoreline =~ /Frame =\s+([+-]\d)\s+\/\s+([+-]\d)/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 } elsif ($self->report_type() eq 'TBLASTN') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 ($sframe) = $scoreline =~ /Frame =\s+([+-]\d)/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 ($qframe) = $scoreline =~ /Frame =\s+([+-]\d)/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 $positive = $match if not defined $positive;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 $gaps = '0' if not defined $gaps;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 my ($p) = ($scoreline =~ /[Sum ]*P[\(\d+\)]* = (\S+)/);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 unless (defined $p) {(undef, $p) = $scoreline =~ /Expect(\(\d+\))? =\s+(\S+)/}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 my ($exp) = ($scoreline =~ /Expect(?:\(\d+\))? =\s+([^\s,]+)/);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 $exp = -1 unless( defined $exp );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 $self->throw("Unable to parse '$scoreline'") unless defined $score;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 #######################
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 # get alignment lines #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 #######################
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 my (@hspline);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 while( defined($_ = $self->_readline()) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 if ($_ =~ /^WARNING:|^NOTE:/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 while(defined($_ = $self->_readline())) {last if $_ !~ /\S/}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 elsif ($_ !~ /\S/) {next}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 elsif ($_ =~ /Strand HSP/) {next} # WU-BLAST non-data
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 elsif ($_ =~ /^\s*Strand/) {next} # NCBI-BLAST non-data
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 elsif ($_ =~ /^\s*Score/) {$self->_pushback($_); last}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 elsif ($_ =~ /^>|^Histogram|^Searching|^Parameters|^\s+Database:|^CPU\stime|^\s*Lambda/)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 #ps 5/28/01
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 # elsif ($_ =~ /^>|^Parameters|^\s+Database:|^CPU\stime/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 $self->_pushback($_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 $self->{'HSP_ALL_PARSED'} = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 elsif( $_ =~ /^\s*Frame/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 if ($self->report_type() eq 'TBLASTX') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 ($qframe, $sframe) = $_ =~ /Frame = ([\+-]\d)\s+\/\s+([\+-]\d)/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 } elsif ($self->report_type() eq 'TBLASTN') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 ($sframe) = $_ =~ /Frame = ([\+-]\d)/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 ($qframe) = $_ =~ /Frame = ([\+-]\d)/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 push @hspline, $_; # store the query line
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 $nextline = $self->_readline();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 # Skip "pattern" line when parsing PHIBLAST reports, otherwise store the alignment line
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 my $l1 = ($nextline =~ /^\s*pattern/) ? $self->_readline() : $nextline;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 push @hspline, $l1; # store the alignment line
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 my $l2 = $self->_readline(); push @hspline, $l2; # grab/store the sbjct line
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 #########################
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 # parse alignment lines #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 #########################
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 my ($ql, $sl, $as) = ("", "", "");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 my ($qb, $qe, $sb, $se) = (0,0,0,0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 my (@QL, @SL, @AS); # for better memory management
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 for(my $i=0;$i<@hspline;$i+=3) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 # warn $hspline[$i], $hspline[$i+2];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 $hspline[$i] =~ /^(?:Query|Trans):\s+(\d+)\s*([\D\S]+)\s+(\d+)/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 $ql = $2; $qb = $1 unless $qb; $qe = $3;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 my $offset = index($hspline[$i], $ql);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 $as = substr($hspline[$i+1], $offset, CORE::length($ql));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 $hspline[$i+2] =~ /^Sbjct:\s+(\d+)\s*([\D\S]+)\s+(\d+)/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 $sl = $2; $sb = $1 unless $sb; $se = $3;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 push @QL, $ql; push @SL, $sl; push @AS, $as;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 ##################
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 # the HSP object #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 ##################
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 $ql = join("", @QL);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 $sl = join("", @SL);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 $as = join("", @AS);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 # Query name and length are not in the report for a bl2seq report so {'PARENT'}->query and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 # {'PARENT'}->qlength will not be available.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 my ($qname, $qlength) = ('unknown','unknown');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 if ($self->{'PARENT'}->can('query')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 $qname = $self->{'PARENT'}->query;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 $qlength = $self->{'PARENT'}->qlength;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 my $hsp = new Bio::Tools::BPlite::HSP
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 ('-score' => $score,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 '-bits' => $bits,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 '-match' => $match,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 '-positive' => $positive,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 '-gaps' => $gaps,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 '-hsplength' => $hsplength,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 '-p' => $p,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 '-exp' => $exp,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 '-queryBegin' => $qb,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 '-queryEnd' => $qe,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 '-sbjctBegin' => $sb,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 '-sbjctEnd' => $se,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 '-querySeq' => $ql,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 '-sbjctSeq' => $sl,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 '-homologySeq'=> $as,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 '-queryName' => $qname,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 # '-queryName'=>$self->{'PARENT'}->query,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 '-sbjctName' => $self->{'NAME'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 '-queryLength'=> $qlength,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 # '-queryLength'=>$self->{'PARENT'}->qlength,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 '-sbjctLength'=> $self->{'LENGTH'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 '-queryFrame' => $qframe,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 '-sbjctFrame' => $sframe,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 '-blastType' => $self->report_type());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 return $hsp;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 =head2 _readline
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 Title : _readline
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 Usage : $obj->_readline
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 Function: Reads a line of input.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 Note that this method implicitely uses the value of $/ that is
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 in effect when called.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 Note also that the current implementation does not handle pushed
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 back input correctly unless the pushed back input ends with the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 value of $/.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 Returns :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 sub _readline{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 return $self->{'PARENT'}->_readline();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 =head2 _pushback
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 Title : _pushback
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 Usage : $obj->_pushback($newvalue)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 Function: puts a line previously read with _readline back into a buffer
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 Returns :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 Args : newvalue
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 sub _pushback {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 my ($self, $arg) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 return $self->{'PARENT'}->_pushback($arg);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 1;