annotate variant_effect_predictor/Bio/SearchIO/Writer/TextResultWriter.pm @ 3:d30fa12e4cc5 default tip

Merge heads 2:a5976b2dce6f and 1:09613ce8151e which were created as a result of a recently fixed bug.
author devteam <devteam@galaxyproject.org>
date Mon, 13 Jan 2014 10:38:30 -0500
parents 1f6dce3d34e0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 # $Id: TextResultWriter.pm,v 1.5.2.5 2003/09/15 16:19:24 jason Exp $
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 # BioPerl module for Bio::SearchIO::Writer::TextResultWriter
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::Writer::TextResultWriter - Object to implement writing a Bio::Search::ResultI in Text.
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 use Bio::SearchIO;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20 use Bio::SearchIO::Writer::TextResultWriter;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22 my $in = new Bio::SearchIO(-format => 'blast',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 -file => shift @ARGV);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 my $writer = new Bio::SearchIO::Writer::TextResultWriter();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26 my $out = new Bio::SearchIO(-writer => $writer);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 $out->write_result($in->next_result);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 This object implements the SearchWriterI interface which will produce
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 a set of Text for a specific Bio::Search::Report::ReportI interface.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 You can also provide the argument -filters => \%hash to filter the at
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 the hsp, hit, or result level. %hash is an associative array which
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 contains any or all of the keys (HSP, HIT, RESULT). The values
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 pointed to by these keys would be references to a subroutine which
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 expects to be passed an object - one of Bio::Search::HSP::HSPI,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 Bio::Search::Hit::HitI, and Bio::Search::Result::ResultI respectively.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 Each function needs to return a boolean value as to whether or not the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 passed element should be included in the output report - true if it is to be included, false if it to be omitted.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 For example to filter on sequences in the database which are too short
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 for your criteria you would do the following.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 Define a hit filter method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 sub hit_filter {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 my $hit = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 return $hit->length E<gt> 100; # test if length of the hit sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 # long enough
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 my $writer = new Bio::SearchIO::Writer::TextResultWriter(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 -filters => { 'HIT' =E<gt> \&hit_filter }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 Another example would be to filter HSPs on percent identity, let's
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 only include HSPs which are 75% identical or better.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 sub hsp_filter {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 my $hsp = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 return $hsp->percent_identity E<gt> 75;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 my $writer = new Bio::SearchIO::Writer::TextResultWriter(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 -filters => { 'HSP' =E<gt> \&hsp_filter }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 See L<Bio::SearchIO::SearchWriterI> for more info on the filter method.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 This module will use the module Text::Wrap if it is installed to wrap
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 the Query description line. If you do not have Text::Wrap installed
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 this module will work fine but you won't have the Query line wrapped.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 You will see a warning about this when you first instantiate a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 TextResultWriter - to avoid these warnings from showing up, simply set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 the verbosity upon initialization to -1 like this: my $writer = new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 Bio::SearchIO::Writer::TextResultWriter(-verbose => -1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 =head1 FEEDBACK
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 =head2 Mailing Lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 User feedback is an integral part of the evolution of this and other
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 Bioperl modules. Send your comments and suggestions preferably to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 the Bioperl mailing list. Your participation is much appreciated.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 bioperl-l@bioperl.org - General discussion
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 http://bioperl.org/MailList.shtml - About the mailing lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 =head2 Reporting Bugs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 Report bugs to the Bioperl bug tracking system to help us keep track
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 of the bugs and their resolution. Bug reports can be submitted via
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 email or the web:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 bioperl-bugs@bioperl.org
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 http://bugzilla.bioperl.org/
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 =head1 AUTHOR - Jason Stajich
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 Email jason@bioperl.org
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 =head1 APPENDIX
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 The rest of the documentation details each of the object methods.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 Internal methods are usually preceded with a _
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 # Let the code begin...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 package Bio::SearchIO::Writer::TextResultWriter;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 use vars qw(@ISA $MaxNameLen $MaxDescLen $AlignmentLineWidth
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 $DescLineLen $TextWrapLoaded);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 # Object preamble - inherits from Bio::Root::RootI
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 BEGIN {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 $MaxDescLen = 65;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 $AlignmentLineWidth = 60;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 eval { require Text::Wrap; $TextWrapLoaded = 1;};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 if( $@ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 $TextWrapLoaded = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 use Bio::Root::Root;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 use Bio::SearchIO::SearchWriterI;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 use POSIX;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 @ISA = qw(Bio::Root::Root Bio::SearchIO::SearchWriterI);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 =head2 new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 Title : new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 Usage : my $obj = new Bio::SearchIO::Writer::TextResultWriter();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 Function: Builds a new Bio::SearchIO::Writer::TextResultWriter object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 Returns : Bio::SearchIO::Writer::TextResultWriter
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 Args : -filters => hashref with any or all of the keys (HSP HIT RESULT)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 which have values pointing to a subroutine reference
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 which will expect to get a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 my($class,@args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 my $self = $class->SUPER::new(@args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 my ($filters) = $self->_rearrange([qw(FILTERS)],@args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 if( defined $filters ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 if( !ref($filters) =~ /HASH/i ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 $self->warn("Did not provide a hashref for the FILTERS option, ignoring.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 while( my ($type,$code) = each %{$filters} ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 $self->filter($type,$code);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 unless( $TextWrapLoaded ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 $self->warn("Could not load Text::Wrap - the Query Description will not be line wrapped\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 $Text::Wrap::columns = $MaxDescLen;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 return $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 =head2 to_string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 Purpose : Produces data for each Search::Result::ResultI in a string.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 : This is an abstract method. For some useful implementations,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 : see ResultTableWriter.pm, HitTableWriter.pm,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 : and HSPTableWriter.pm.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 Usage : print $writer->to_string( $result_obj, @args );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 Argument : $result_obj = A Bio::Search::Result::ResultI object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 : @args = any additional arguments used by your implementation.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 Returns : String containing data for each search Result or any of its
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 : sub-objects (Hits and HSPs).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 Throws : n/a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 sub to_string {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 my ($self,$result,$num) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 $num ||= 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 return unless defined $result;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 my ($resultfilter,$hitfilter, $hspfilter) = ( $self->filter('RESULT'),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 $self->filter('HIT'),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 $self->filter('HSP') );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 return '' if( defined $resultfilter && ! &{$resultfilter}($result) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 my ($qtype,$dbtype,$dbseqtype,$type);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 my $alg = $result->algorithm;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 # This is actually wrong for the FASTAs I think
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 if( $alg =~ /T(FAST|BLAST)([XY])/i ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 $qtype = $dbtype = 'translated';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 $dbseqtype = $type = 'PROTEIN';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 } elsif( $alg =~ /T(FAST|BLAST)N/i ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 $qtype = '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 $dbtype = 'translated';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 $type = 'PROTEIN';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 $dbseqtype = 'NUCLEOTIDE';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 } elsif( $alg =~ /(FAST|BLAST)N/i ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 $alg =~ /(WABA|EXONERATE)/i ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 $qtype = $dbtype = '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 $type = $dbseqtype = 'NUCLEOTIDE';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 } elsif( $alg =~ /(FAST|BLAST)P/ || $alg =~ /SSEARCH/i ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 $qtype = $dbtype = '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 $type = $dbseqtype = 'PROTEIN';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 } elsif( $alg =~ /(FAST|BLAST)[XY]/i ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 $qtype = 'translated';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 $dbtype = 'PROTEIN';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 $dbseqtype = $type = 'PROTEIN';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 print STDERR "algorithm was ", $result->algorithm, " couldn't match\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 my %baselens = ( 'Sbjct:' => ( $dbtype eq 'translated' ) ? 3 : 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 'Query:' => ( $qtype eq 'translated' ) ? 3 : 1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 my $str;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 if( ! defined $num || $num <= 1 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 $str = &{$self->start_report}($result);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 $str .= &{$self->title}($result);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 $str .= $result->algorithm_reference || $self->algorithm_reference($result);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 $str .= &{$self->introduction}($result);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 $str .= qq{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 Score E
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 Sequences producing significant alignments: (bits) value
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 my $hspstr = '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 if( $result->can('rewind')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 $result->rewind(); # support stream based parsing routines
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 while( my $hit = $result->next_hit ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 next if( defined $hitfilter && ! &{$hitfilter}($hit) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 my $nm = $hit->name();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 $self->debug( "no $nm for name (".$hit->description(). "\n")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 unless $nm;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 my ($gi,$acc) = &{$self->id_parser}($nm);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 my $p = "%-$MaxDescLen". "s";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 my $descsub;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 my $desc = sprintf("%s %s",$nm,$hit->description);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 if( length($desc) - 3 > $MaxDescLen) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 $descsub = sprintf($p,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 substr($desc,0,$MaxDescLen-3) .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 "...");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 $descsub = sprintf($p,$desc);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 $str .= sprintf("%s %-4s %s\n",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 $descsub,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 defined $hit->raw_score ? $hit->raw_score : ' ',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 defined $hit->significance ? $hit->significance : '?');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 my @hsps = $hit->hsps;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 $hspstr .= sprintf(">%s %s\n%9sLength = %d\n\n",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 $hit->name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 defined $hit->description ? $hit->description : '',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 '', # empty is for the %9s in the str formatting
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 $hit->length);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 foreach my $hsp ( @hsps ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 next if( defined $hspfilter && ! &{$hspfilter}($hsp) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 $hspstr .= sprintf(" Score = %4s bits (%s), Expect = %s",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 $hsp->bits, $hsp->score, $hsp->evalue);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 if( $hsp->pvalue ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 $hspstr .= ", P = ".$hsp->pvalue;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 $hspstr .= "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 $hspstr .= sprintf(" Identities = %d/%d (%d%%)",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 ( $hsp->frac_identical('total') *
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 $hsp->length('total')),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 $hsp->length('total'),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 POSIX::floor($hsp->frac_identical('total')
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 * 100));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 if( $type eq 'PROTEIN' ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 $hspstr .= sprintf(", Positives = %d/%d (%d%%)",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 ( $hsp->frac_conserved('total') *
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 $hsp->length('total')),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 $hsp->length('total'),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 POSIX::floor($hsp->frac_conserved('total') * 100));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 if( $hsp->gaps ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 $hspstr .= sprintf(", Gaps = %d/%d (%d%%)",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 $hsp->gaps('total'),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 $hsp->length('total'),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 POSIX::floor(100 * $hsp->gaps('total') /
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 $hsp->length('total')));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 $hspstr .= "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 my ($hframe,$qframe) = ( $hsp->hit->frame,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 $hsp->query->frame);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 my ($hstrand,$qstrand) = ($hsp->hit->strand,$hsp->query->strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 # so TBLASTX will have Query/Hit frames
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 # BLASTX will have Query frame
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 # TBLASTN will have Hit frame
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 if( $hstrand || $qstrand ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 $hspstr .= " Frame = ";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 my ($signq, $signh);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 unless( $hstrand ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 $hframe = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 # if strand is null or 0 then it is protein
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 # and this no frame
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 $signh = $hstrand < 0 ? '-' : '+';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 unless( $qstrand ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 $qframe = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 # if strand is null or 0 then it is protein
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 $signq =$qstrand < 0 ? '-' : '+';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 # remember bioperl stores frames as 0,1,2 (GFF way)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 # BLAST reports reports as 1,2,3 so
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 # we have to add 1 to the frame values
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 if( defined $hframe && ! defined $qframe) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 $hspstr .= "$signh".($hframe+1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 } elsif( defined $qframe && ! defined $hframe) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 $hspstr .= "$signq".($qframe+1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 $hspstr .= sprintf(" %s%d / %s%d",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 $signq,$qframe+1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 $signh, $hframe+1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 $hspstr .= "\n\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 my @hspvals = ( {'name' => 'Query:',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 'seq' => $hsp->query_string,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 'start' => ( $hstrand >= 0 ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 $hsp->query->start :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 $hsp->query->end),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 'end' => ($qstrand >= 0 ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 $hsp->query->end :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 $hsp->query->start),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 'index' => 0,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 'direction' => $qstrand || 1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 },
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 { 'name' => ' 'x6, # this might need to adjust for long coordinates??
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 'seq' => $hsp->homology_string,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 'start' => undef,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 'end' => undef,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 'index' => 0,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 'direction' => 1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 },
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 { 'name' => 'Sbjct:',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 'seq' => $hsp->hit_string,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 'start' => ($hstrand >= 0 ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 $hsp->hit->start : $hsp->hit->end),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 'end' => ($hstrand >= 0 ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 $hsp->hit->end : $hsp->hit->start),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 'index' => 0,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 'direction' => $hstrand || 1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 # let's set the expected length (in chars) of the starting number
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 # in an alignment block so we can have things line up
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 # Just going to try and set to the largest
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 my ($numwidth) = sort { $b <=> $a }(length($hspvals[0]->{'start'}),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378 length($hspvals[0]->{'end'}),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 length($hspvals[2]->{'start'}),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 length($hspvals[2]->{'end'}));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 my $count = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 while ( $count <= $hsp->length('total') ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 foreach my $v ( @hspvals ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 my $piece = substr($v->{'seq'}, $v->{'index'} +$count,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 $AlignmentLineWidth);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 my $cp = $piece;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 my $plen = scalar ( $cp =~ tr/\-//);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 my ($start,$end) = ('','');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 if( defined $v->{'start'} ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 $start = $v->{'start'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 # since strand can be + or - use the direction
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 # to signify which whether to add or substract from end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393 my $d = $v->{'direction'} * ( $AlignmentLineWidth - $plen )*
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 $baselens{$v->{'name'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 if( length($piece) < $AlignmentLineWidth ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 $d = (length($piece) - $plen) * $v->{'direction'} *
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 $baselens{$v->{'name'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 $end = $v->{'start'} + $d - $v->{'direction'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 $v->{'start'} += $d;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402 $hspstr .= sprintf("%s %-".$numwidth."s %s %s\n",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403 $v->{'name'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404 $start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 $piece,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 $end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 $count += $AlignmentLineWidth;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 $hspstr .= "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 $hspstr .= "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 $str .= "\n\n".$hspstr;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 $str .= sprintf(qq{ Database: %s
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 Posted date: %s
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 Number of letters in database: %s
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 Number of sequences in database: %s
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422 Matrix: %s
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 },
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424 $result->database_name(),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 $result->get_statistic('posted_date') ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426 POSIX::strftime("%b %d, %Y %I:%M %p",localtime),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 &_numwithcommas($result->database_entries()),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428 &_numwithcommas($result->database_letters()),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429 $result->get_parameter('matrix') || '');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431 if( defined (my $open = $result->get_parameter('gapopen')) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432 $str .= sprintf("Gap Penalties Existence: %d, Extension: %d\n",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433 $open || 0, $result->get_parameter('gapext') || 0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436 # skip those params we've already output
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437 foreach my $param ( grep { ! /matrix|gapopen|gapext/i }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 $result->available_parameters ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439 $str .= "$param: ". $result->get_parameter($param) ."\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442 $str .= "Search Statistics\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 # skip posted date, we already output it
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444 foreach my $stat ( sort grep { ! /posted_date/ }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 $result->available_statistics ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446 my $expect = $result->get_parameter('expect');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 my $v = $result->get_statistic($stat);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448 if( $v =~ /^\d+$/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449 $v = &_numwithcommas($v);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451 if( defined $expect &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452 $stat eq 'seqs_better_than_cutoff' ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453 $str .= "seqs_better_than_$expect: $v\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455 my $v =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456 $str .= "$stat: $v\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459 $str .= "\n\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460 return $str;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464 =head2 start_report
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466 Title : start_report
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467 Usage : $index->start_report( CODE )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468 Function: Stores or returns the code to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469 write the start of the <HTML> block, the <TITLE> block
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470 and the start of the <BODY> block of HTML. Useful
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471 for (for instance) specifying alternative
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472 HTML if you are embedding the output in
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473 an HTML page which you have already started.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474 (For example a routine returning a null string).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475 Returns \&default_start_report (see below) if not
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476 set.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477 Example : $index->start_report( \&my_start_report )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478 Returns : ref to CODE if called without arguments
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479 Args : CODE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483 sub start_report {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484 my( $self, $code ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485 if ($code) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486 $self->{'_start_report'} = $code;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488 return $self->{'_start_report'} || \&default_start_report;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491 =head2 default_start_report
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493 Title : default_start_report
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494 Usage : $self->default_start_report($result)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495 Function: The default method to call when starting a report.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496 Returns : sting
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497 Args : First argument is a Bio::Search::Result::ResultI
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501 sub default_start_report {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502 my ($result) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503 return "";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506 =head2 title
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508 Title : title
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509 Usage : $self->title($CODE)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511 Function: Stores or returns the code to provide HTML for the given
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
512 BLAST report that will appear at the top of the BLAST report
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
513 HTML output. Useful for (for instance) specifying
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
514 alternative routines to write your own titles.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
515 Returns \&default_title (see below) if not
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
516 set.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
517 Example : $index->title( \&my_title )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
518 Returns : ref to CODE if called without arguments
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
519 Args : CODE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
520
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
521 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
522
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
523 sub title {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
524 my( $self, $code ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
525 if ($code) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
526 $self->{'_title'} = $code;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
527 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
528 return $self->{'_title'} || \&default_title;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
529 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
530
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
531 =head2 default_title
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
532
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
533 Title : default_title
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
534 Usage : $self->default_title($result)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
535 Function: Provides HTML for the given BLAST report that will appear
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
536 at the top of the BLAST report output.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
537 Returns : empty for text implementation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
538 Args : First argument is a Bio::Search::Result::ResultI
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
539
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
540 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
541
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
542 sub default_title {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
543 my ($result) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
544 return "";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
545 # The HTML implementation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
546 # return sprintf(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
547 # qq{<CENTER><H1><a href="http://bioperl.org">Bioperl</a> Reformatted HTML of %s Search Report<br> for %s</H1></CENTER>},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
548 # $result->algorithm,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
549 # $result->query_name());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
550 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
551
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
552
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
553 =head2 introduction
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
554
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
555 Title : introduction
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
556 Usage : $self->introduction($CODE)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
557
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
558 Function: Stores or returns the code to provide HTML for the given
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
559 BLAST report detailing the query and the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
560 database information.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
561 Useful for (for instance) specifying
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
562 routines returning alternative introductions.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
563 Returns \&default_introduction (see below) if not
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
564 set.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
565 Example : $index->introduction( \&my_introduction )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
566 Returns : ref to CODE if called without arguments
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
567 Args : CODE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
568
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
569 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
570
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
571 sub introduction {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
572 my( $self, $code ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
573 if ($code) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
574 $self->{'_introduction'} = $code;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
575 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
576 return $self->{'_introduction'} || \&default_introduction;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
577 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
578
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
579 =head2 default_introduction
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
580
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
581 Title : default_introduction
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
582 Usage : $self->default_introduction($result)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
583 Function: Outputs HTML to provide the query
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
584 and the database information
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
585 Returns : string containing HTML
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
586 Args : First argument is a Bio::Search::Result::ResultI
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
587 Second argument is string holding literature citation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
588
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
589 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
590
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
591 sub default_introduction {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
592 my ($result) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
593
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
594 return sprintf(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
595 qq{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
596 Query= %s
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
597 (%s letters)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
598
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
599 Database: %s
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
600 %s sequences; %s total letters
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
601 },
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
602 &_linewrap($result->query_name . " " .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
603 $result->query_description),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
604 &_numwithcommas($result->query_length),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
605 $result->database_name(),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
606 &_numwithcommas($result->database_entries()),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
607 &_numwithcommas($result->database_letters()),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
608 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
609 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
610
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
611 =head2 end_report
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
612
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
613 Title : end_report
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
614 Usage : $self->end_report()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
615 Function: The method to call when ending a report, this is
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
616 mostly for cleanup for formats which require you to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
617 have something at the end of the document (</BODY></HTML>)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
618 for HTML
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
619 Returns : string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
620 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
621
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
622 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
623
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
624 sub end_report {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
625 return "";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
626 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
627
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
628
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
629 # copied from Bio::Index::Fasta
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
630 # useful here as well
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
631
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
632 =head2 id_parser
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
633
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
634 Title : id_parser
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
635 Usage : $index->id_parser( CODE )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
636 Function: Stores or returns the code used by record_id to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
637 parse the ID for record from a string. Useful
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
638 for (for instance) specifying a different
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
639 parser for different flavours of FASTA file.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
640 Returns \&default_id_parser (see below) if not
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
641 set. If you supply your own id_parser
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
642 subroutine, then it should expect a fasta
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
643 description line. An entry will be added to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
644 the index for each string in the list returned.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
645 Example : $index->id_parser( \&my_id_parser )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
646 Returns : ref to CODE if called without arguments
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
647 Args : CODE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
648
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
649 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
650
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
651 sub id_parser {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
652 my( $self, $code ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
653
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
654 if ($code) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
655 $self->{'_id_parser'} = $code;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
656 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
657 return $self->{'_id_parser'} || \&default_id_parser;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
658 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
659
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
660
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
661
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
662 =head2 default_id_parser
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
663
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
664 Title : default_id_parser
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
665 Usage : $id = default_id_parser( $header )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
666 Function: The default Fasta ID parser for Fasta.pm
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
667 Returns $1 from applying the regexp /^>\s*(\S+)/
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
668 to $header.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
669 Returns : ID string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
670 Args : a fasta header line string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
671
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
672 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
673
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
674 sub default_id_parser {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
675 my ($string) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
676 my ($gi,$acc);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
677 if( $string =~ s/gi\|(\d+)\|?// )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
678 { $gi = $1; $acc = $1;}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
679
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
680 if( $string =~ /(\w+)\|([A-Z\d\.\_]+)(\|[A-Z\d\_]+)?/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
681 $acc = defined $2 ? $2 : $1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
682 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
683 $acc = $string;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
684 $acc =~ s/^\s+(\S+)/$1/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
685 $acc =~ s/(\S+)\s+$/$1/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
686 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
687 return ($gi,$acc);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
688 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
689
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
690 sub MIN { $a <=> $b ? $a : $b; }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
691 sub MAX { $a <=> $b ? $b : $a; }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
692
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
693
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
694 =head2 algorithm_reference
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
695
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
696 Title : algorithm_reference
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
697 Usage : my $reference = $writer->algorithm_reference($result);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
698 Function: Returns the appropriate Bibliographic reference for the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
699 algorithm format being produced
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
700 Returns : String
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
701 Args : L<Bio::Search::Result::ResultI> to reference
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
702
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
703
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
704 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
705
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
706 sub algorithm_reference{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
707 my ($self,$result) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
708 return '' if( ! defined $result || !ref($result) ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
709 ! $result->isa('Bio::Search::Result::ResultI')) ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
710 if( $result->algorithm =~ /BLAST/i ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
711 my $res = $result->algorithm . ' '. $result->algorithm_version. "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
712 if( $result->algorithm_version =~ /WashU/i ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
713 return $res .qq{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
714 Copyright (C) 1996-2000 Washington University, Saint Louis, Missouri USA.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
715 All Rights Reserved.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
716
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
717 Reference: Gish, W. (1996-2000) http://blast.wustl.edu
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
718 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
719 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
720 return $res . qq{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
721 Reference: Altschul, Stephen F., Thomas L. Madden, Alejandro A. Schaffer,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
722 Jinghui Zhang, Zheng Zhang, Webb Miller, and David J. Lipman (1997),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
723 "Gapped BLAST and PSI-BLAST: a new generation of protein database search
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
724 programs", Nucleic Acids Res. 25:3389-3402.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
725 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
726 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
727 } elsif( $result->algorithm =~ /FAST/i ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
728 return $result->algorithm. " ". $result->algorithm_version . "\n".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
729 "\nReference: Pearson et al, Genomics (1997) 46:24-36\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
730 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
731 return '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
732 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
733 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
734
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
735 # from Perl Cookbook 2.17
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
736 sub _numwithcommas {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
737 my $num = reverse( $_[0] );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
738 $num =~ s/(\d{3})(?=\d)(?!\d*\.)/$1,/g;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
739 return scalar reverse $num;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
740 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
741
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
742 sub _linewrap {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
743 my ($str) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
744 if($TextWrapLoaded) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
745 return Text::Wrap::wrap("","",$str); # use Text::Wrap
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
746 } else { return $str; } # cannot wrap
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
747 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
748 =head2 Methods Bio::SearchIO::SearchWriterI
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
749
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
750 L<Bio::SearchIO::SearchWriterI> inherited methods.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
751
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
752 =head2 filter
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
753
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
754 Title : filter
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
755 Usage : $writer->filter('hsp', \&hsp_filter);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
756 Function: Filter out either at HSP,Hit,or Result level
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
757 Returns : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
758 Args : string => data type,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
759 CODE reference
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
760
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
761
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
762 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
763
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
764
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
765 1;