annotate variant_effect_predictor/Bio/Tools/BPlite/Sbjct.pm @ 1:d6778b5d8382 draft default tip

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