annotate variant_effect_predictor/Bio/Tools/Run/StandAloneBlast.pm @ 0:21066c0abaf5 draft

Uploaded
author willmclaren
date Fri, 03 Aug 2012 10:04:48 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1 # $Id: StandAloneBlast.pm,v 1.23.2.3 2003/03/29 20:18:51 jason Exp $
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
3 # BioPerl module for Bio::Tools::StandAloneBlast
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
4 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
5 # Cared for by Peter Schattner
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
6 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
7 # Copyright Peter Schattner
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 # POD documentation - main docs before the code
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
12
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
13 =head1 NAME
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
14
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
15 Bio::Tools::Run::StandAloneBlast - Object for the local execution of the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
16 NCBI Blast program suite (blastall, blastpgp, bl2seq)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
17
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
18 =head1 SYNOPSIS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
19
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
20 Local-blast "factory object" creation and blast-parameter initialization:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
21
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
22 @params = ('database' => 'swissprot','outfile' => 'blast1.out',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
23 '_READMETHOD' => 'Blast');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
24
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
25 $factory = Bio::Tools::Run::StandAloneBlast->new(@params);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
26
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
27 Blast a sequence against a database:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
28
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
29 $str = Bio::SeqIO->new(-file=>'t/amino.fa' , '-format' => 'Fasta' );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
30 $input = $str->next_seq();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
31 $input2 = $str->next_seq();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
32 $blast_report = $factory->blastall($input);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
33
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
34 Run an iterated Blast (psiblast) of a sequence against a database:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
35
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
36 $factory->j(3); # 'j' is blast parameter for # of iterations
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
37 $factory->outfile('psiblast1.out');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
38 $factory = Bio::Tools::Run::StandAloneBlast->new(@params);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
39 $blast_report = $factory->blastpgp($input);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
40
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
41 Use blast to align 2 sequences against each other:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
42
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
43 $factory = Bio::Tools::Run::StandAloneBlast->new('outfile' => 'bl2seq.out');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
44 $factory->bl2seq($input, $input2);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
45
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
46 Various additional options and input formats are available. See the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
47 DESCRIPTION section for details.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
48
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
49 =head1 DESCRIPTION
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
50
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
51 This DESCRIPTION only documents Bio::Tools::Run::StandAloneBlast: - a
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
52 Bioperl object for running the NCBI standAlone BLAST package. Blast,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
53 itself, is a large & complex program - for more information regarding
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
54 BLAST, please see the BLAST documentation which accompanies the BLAST
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
55 distribution. BLAST is available from ftp://ncbi.nlm.nih.gov/blast/.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
56
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
57 (A source of confusion in documenting a BLAST interface is that the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
58 term "program" is used in - at least - three different ways in the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
59 BLAST documentation. In this DESCRIPTION, "program" will refer to the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
60 BLAST routine set by BLAST's C<-p> parameter that can be set to blastn,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
61 blastp, tblastx etc. We will use the term Blast "executable" to refer
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
62 to the various different executable files that may be called - ie
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
63 blastall, blastpgp or bl2seq. In addition, there are several BLAST
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
64 capabilities (which are also referred to as "programs") and are
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
65 implemented by using specific combinations of BLAST executables,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
66 programs and parameters. They will be referred by their specific
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
67 names - eg PSIBLAST and PHIBLAST. )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
68
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
69 StandAloneBlast has been tested so far only under Linux. I expect
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
70 that it should also work under other Unix systems. However, since the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
71 module is implemented using (unix) system calls, modification may be
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
72 necessary before StandAloneBlast would work under non-Unix
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
73 operating systems (eg Windows, MacOS). Before running
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
74 StandAloneBlast it is necessary: to install BLAST on your system,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
75 to edit set the environmental variable $BLASTDIR or your $PATH
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
76 variable to point to the BLAST directory, and to ensure that users
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
77 have execute privileges for the BLAST program. If the databases
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
78 which will be searched by BLAST are located in the data subdirectory
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
79 of the blast program directory (the default installation location),
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
80 StandAloneBlast will find them; however, if the database files are
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
81 located in any other location, environmental variable $BLASTDATADIR
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
82 will need to be set to point to that directory.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
83
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
84 The use of the StandAloneBlast module is as follows: Initially, a
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
85 local blast "factory object" is created. The constructor may be passed
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
86 an optional array of (non-default) parameters to be used by the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
87 factory, eg:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
88
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
89 @params = ('program' => 'blastn', 'database' => 'ecoli.nt');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
90 $factory = Bio::Tools::Run::StandAloneBlast->new(@params);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
91
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
92 Any parameters not explicitly set will remain as the defaults of the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
93 BLAST executable. Note each BLAST executable has somewhat different
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
94 parameters and options. See the BLAST Documentation for a description
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
95 or run the BLAST executable from the command line followed solely with
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
96 a "-" to see a list of options and default values for that executable;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
97 eg E<gt>blastall -.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
98
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
99 BLAST parameters can be changed and/or examined at any time after the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
100 factory has been created. The program checks that any
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
101 parameter/switch being set/read is valid. Except where specifically
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
102 noted, StandAloneBlast uses the same single-letter, case-sensitive
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
103 parameter names as the actual blast program. Currently no checks are
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
104 included to verify that parameters are of the proper type (eg string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
105 or numeric) or that their values are within the proper range.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
106
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
107 As an example, to change the value of the Blast parameter 'e' ('e' is
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
108 the parameter for expectation-value cutoff)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
109
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
110 $expectvalue = 0.01;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
111 $factory->e($expectvalue);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
112
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
113 Note that for improved script readibility one can modify the name of
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
114 the BLAST parameters as desired as long as the initial letter (and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
115 case) of the parameter are preserved, eg
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
116 $factory-E<gt>expectvalue($expectvalue); Unfortunately, some of the BLAST
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
117 parameters are not the single letter one might expect (eg "iteration
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
118 round" in blastpgp is 'j'). Again one can check by using (eg)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
119
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
120 > blastpgp - .
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
121
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
122 Once the factory has been created and the appropriate parameters set,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
123 one can call one of the supported blast executables. The input
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
124 sequence(s) to these executables may be fasta file(s) as described in
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
125 the BLAST documentation.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
126
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
127 $inputfilename = 't/testquery.fa';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
128 $blast_report = $factory->blastall($inputfilename);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
129
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
130 In addition, sequence input may be in the form of either a Bio::Seq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
131 object or or an array of Bio::Seq objects, eg
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
132
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
133 $input = Bio::Seq->new(-id=>"test query",-seq=>"ACTACCCTTTAAATCAGTGGGGG");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
134 $blast_report = $factory->blastall($input);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
135
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
136 For blastall and non-psiblast blastpgp runs, report object is either a
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
137 BPlite.pm or Bio::SearchIO object, selected by the user with the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
138 parameter _READMETHOD. (The leading underscore is needed to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
139 distinguish this option from options which are passed to the BLAST
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
140 executable.) The default parser is Bio::SearchIO::blast. For
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
141 (multiple iteration) psiblast and bl2seq runs the report is
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
142 automatically parsed by the BPpsilite.pm and BPbl2seq.pm parsers
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
143 respectively, since neither Blast.pm nor BPlite can parse these
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
144 reports. In any case, the "raw" blast report is also available. The
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
145 filename is set by the in the 'outfile' parameter and has the default
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
146 value of "blastreport.out".
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
147
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
148 For psiblast execution in BLAST's "jumpstart" mode, the program must
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
149 be passed (in addition to the query sequence itself) an alignment
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
150 containing the query sequence (in the form of a SimpleAlign object) as
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
151 well as a "mask" specifying at what residues position-specific scoring
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
152 matrices (PSSMs) are to used and at what residues default scoring
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
153 matrices (eg BLOSUM) are to be used. See psiblast documentation for
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
154 more details. The mask itself is a string of 0's and 1's which is the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
155 same length as each sequence in the alignment and has a "1" at
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
156 locations where (PSSMs) are to be used and a "0" at all other
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
157 locations. So for example:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
158
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
159 $str = Bio::AlignIO->new(-file=> "cysprot.msf", '-format' => 'msf' );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
160 $aln = $str->next_aln();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
161 $len = $aln->length_aln();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
162 $mask = '1' x $len; # simple case where PSSM's to be used at all residues
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
163 $report = $factory->blastpgp("cysprot1.fa", $aln, $mask);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
164
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
165 For bl2seq execution, StandAloneBlast.pm can be combined with
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
166 AlignIO.pm to directly produce a SimpleAlign object from the alignment
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
167 of the two sequences produced by bl2seq as in:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
168
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
169 #Get 2 sequences
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
170 $str = Bio::SeqIO->new(-file=>'t/amino.fa' , '-format' => 'Fasta', );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
171 my $seq3 = $str->next_seq();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
172 my $seq4 = $str->next_seq();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
173
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
174 # Run bl2seq on them
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
175 $factory = Bio::Tools::Run::StandAloneBlast->new('outfile' => 'bl2seq.out');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
176 my $bl2seq_report = $factory->bl2seq($seq3, $seq4);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
177
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
178 # Use AlignIO.pm to create a SimpleAlign object from the bl2seq report
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
179 $str = Bio::AlignIO->new(-file=> 'bl2seq.out','-format' => 'bl2seq');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
180 $aln = $str->next_aln();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
181
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
182 For more examples of syntax and use of Blast.pm, the user is
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
183 encouraged to run the scripts standaloneblast.pl in the bioperl
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
184 /examples directory and StandAloneBlast.t in the bioperl /t directory.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
185
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
186 Note: There is a similar (but older) perl object interface offered by
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
187 nhgri. The nhgri module only supports blastall and does not support
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
188 blastpgp, psiblast, phiblast, bl2seq etc. This module can be found at
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
189 http://genome.nhgri.nih.gov/blastall/.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
190
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
191 =head1 DEVELOPERS NOTES
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
192
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
193 B<STILL TO BE WRITTEN>
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
194
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
195 Note: This module is still under development. If you would like that a
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
196 specific BLAST feature be added to this perl interface, let me know.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
197
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
198 =head1 FEEDBACK
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
199
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
200 =head2 Mailing Lists
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
201
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
202 User feedback is an integral part of the evolution of this and other
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
203 Bioperl modules. Send your comments and suggestions preferably to one
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
204 of the Bioperl mailing lists. Your participation is much appreciated.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
205
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
206 bioperl-l@bioperl.org - General discussion
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
207 http://bio.perl.org/MailList.html - About the mailing lists
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
208
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
209 =head2 Reporting Bugs
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
210
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
211 Report bugs to the Bioperl bug tracking system to help us keep track
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
212 the bugs and their resolution. Bug reports can be submitted via email
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
213 or the web:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
214
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
215 bioperl-bugs@bio.perl.org
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
216 http://bio.perl.org/bioperl-bugs/
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
217
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
218 =head1 AUTHOR - Peter Schattner
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
219
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
220 Email schattner@alum.mit.edu
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
221
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
222 =head1 APPENDIX
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
223
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
224 The rest of the documentation details each of the object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
225 methods. Internal methods are usually preceded with a _
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
226
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
227 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
228
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
229 package Bio::Tools::Run::StandAloneBlast;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
230
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
231 use vars qw($AUTOLOAD @ISA $PROGRAMDIR $DATADIR
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
232 @BLASTALL_PARAMS @BLASTPGP_PARAMS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
233 @BL2SEQ_PARAMS @OTHER_PARAMS %OK_FIELD
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
234 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
235 use strict;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
236 use Bio::Root::Root;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
237 use Bio::Root::IO;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
238 use Bio::Seq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
239 use Bio::SeqIO;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
240 use Bio::Tools::BPbl2seq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
241 use Bio::Tools::BPpsilite;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
242 use Bio::SearchIO;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
243 use Bio::Tools::Run::WrapperBase;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
244 use Bio::Factory::ApplicationFactoryI;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
245
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
246 BEGIN {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
247
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
248 @BLASTALL_PARAMS = qw( p d i e m o F G E X I q r v b f g Q
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
249 D a O J M W z K L Y S T l U y Z);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
250 @BLASTPGP_PARAMS = qw(d i A f e m o y P F G E X N g S H a I h c
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
251 j J Z O M v b C R W z K L Y p k T Q B l U);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
252 @BL2SEQ_PARAMS = qw(i j p g o d a G E X W M q r F e S T m);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
253
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
254
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
255 # Non BLAST parameters start with underscore to differentiate them
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
256 # from BLAST parameters
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
257 @OTHER_PARAMS = qw(_READMETHOD);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
258
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
259 # _READMETHOD = 'BPlite' (default) or 'Blast'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
260 # my @other_switches = qw(QUIET);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
261
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
262
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
263 # Authorize attribute fields
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
264 foreach my $attr (@BLASTALL_PARAMS, @BLASTPGP_PARAMS,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
265 @BL2SEQ_PARAMS, @OTHER_PARAMS )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
266 { $OK_FIELD{$attr}++; }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
267
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
268 # You will need to enable Blast to find the Blast program. This can be done
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
269 # in (at least) two different ways:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
270 # 1. define an environmental variable blastDIR:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
271 # export BLASTDIR=/home/peter/blast or
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
272 # 2. include a definition of an environmental variable BLASTDIR in every script that will
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
273 # use StandAloneBlast.pm.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
274 # BEGIN {$ENV{BLASTDIR} = '/home/peter/blast/'; }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
275 $PROGRAMDIR = $ENV{'BLASTDIR'} || '';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
276
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
277 # If local BLAST databases are not stored in the standard
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
278 # /data directory, the variable BLASTDATADIR will need to be set explicitly
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
279 $DATADIR = $ENV{'BLASTDATADIR'} || $ENV{'BLASTDB'} || '';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
280 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
281
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
282 @ISA = qw(Bio::Root::Root
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
283 Bio::Tools::Run::WrapperBase
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
284 Bio::Factory::ApplicationFactoryI);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
285
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
286 =head1 BLAST parameters
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
287
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
288 Essentially all BLAST parameter can be set via StandAloneBlast.pm.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
289 Some of the most commonly used parameters are listed below. All
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
290 parameters have defaults and are optional (I think.) For a complete
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
291 listing of settable parameters, run the relevant executable BLAST
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
292 program with the option "-" as in blastall -
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
293
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
294 =head2 Blastall
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
295
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
296 -p Program Name [String]
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
297 Input should be one of "blastp", "blastn", "blastx",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
298 "tblastn", or "tblastx".
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
299 -d Database [String] default = nr
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
300 The database specified must first be formatted with formatdb.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
301 Multiple database names (bracketed by quotations) will be accepted.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
302 An example would be -d "nr est"
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
303 -i Query File [File In] Set by StandAloneBlast.pm from script.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
304 default = stdin. The query should be in FASTA format. If multiple FASTA entries are in the input
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
305 file, all queries will be searched.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
306 -e Expectation value (E) [Real] default = 10.0
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
307 -o BLAST report Output File [File Out] Optional,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
308 default = ./blastreport.out ; set by StandAloneBlast.pm
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
309 -S Query strands to search against database (for blast[nx], and tblastx). 3 is both, 1 is top, 2 is bottom [Integer]
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
310 default = 3
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
311
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
312 =head2 Blastpgp (including Psiblast)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
313
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
314 -j is the maximum number of rounds (default 1; i.e., regular BLAST)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
315 -h is the e-value threshold for including sequences in the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
316 score matrix model (default 0.001)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
317 -c is the "constant" used in the pseudocount formula specified in the paper (default 10)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
318 -B Multiple alignment file for PSI-BLAST "jump start mode" Optional
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
319 -Q Output File for PSI-BLAST Matrix in ASCII [File Out] Optional
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
320
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
321 =head2 Bl2seq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
322
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
323 -i First sequence [File In]
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
324 -j Second sequence [File In]
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
325 -p Program name: blastp, blastn, blastx. For blastx 1st argument should be nucleotide [String]
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
326 default = blastp
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
327 -o alignment output file [File Out] default = stdout
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
328 -e Expectation value (E) [Real] default = 10.0
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
329 -S Query strands to search against database (blastn only). 3 is both, 1 is top, 2 is bottom [Integer]
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
330 default = 3
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
331
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
332 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
333
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
334 sub new {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
335 my ($caller, @args) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
336 # chained new
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
337 my $self = $caller->SUPER::new(@args);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
338
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
339 # to facilitiate tempfile cleanup
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
340 my ($tfh,$tempfile) = $self->io->tempfile();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
341 close($tfh); # we don't want the filehandle, just a temporary name
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
342 $self->outfile($tempfile);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
343 $self->_READMETHOD('Blast');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
344 while (@args) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
345 my $attr = shift @args;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
346 my $value = shift @args;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
347 next if( $attr eq '-verbose');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
348 # the workaround to deal with initializing
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
349 $attr = 'p' if $attr =~ /^\s*program\s*$/;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
350 $self->$attr($value);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
351 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
352 return $self;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
353 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
354
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
355 sub AUTOLOAD {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
356 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
357 my $attr = $AUTOLOAD;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
358 $attr =~ s/.*:://;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
359 my $attr_letter = substr($attr, 0, 1) ;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
360
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
361 # actual key is first letter of $attr unless first attribute
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
362 # letter is underscore (as in _READMETHOD), the $attr is a BLAST
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
363 # parameter and should be truncated to its first letter only
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
364 $attr = ($attr_letter eq '_') ? $attr : $attr_letter;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
365 $self->throw("Unallowed parameter: $attr !") unless $OK_FIELD{$attr};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
366 # $self->throw("Unallowed parameter: $attr !") unless $ok_field{$attr_letter};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
367 $self->{$attr_letter} = shift if @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
368 return $self->{$attr_letter};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
369 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
370
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
371 =head1 Methods
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
372
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
373 =head2 executable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
374
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
375 Title : executable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
376 Usage : my $exe = $blastfactory->executable('blastall');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
377 Function: Finds the full path to the 'codeml' executable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
378 Returns : string representing the full path to the exe
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
379 Args : [optional] name of executable to set path to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
380 [optional] boolean flag whether or not warn when exe is not found
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
381
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
382
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
383 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
384
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
385 sub executable {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
386 my ($self, $exename, $exe,$warn) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
387 $exename = 'blastall' unless defined $exename;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
388
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
389 if( defined $exe && -x $exe ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
390 $self->{'_pathtoexe'}->{$exename} = $exe;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
391 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
392 unless( defined $self->{'_pathtoexe'}->{$exename} ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
393 my $f = $self->program_path($exename);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
394 $exe = $self->{'_pathtoexe'}->{$exename} = $f if(-e $f && -x $f );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
395
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
396 # This is how I meant to split up these conditionals --jason
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
397 # if exe is null we will execute this (handle the case where
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
398 # PROGRAMDIR pointed to something invalid)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
399 unless( $exe ) { # we didn't find it in that last conditional
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
400 if( ($exe = $self->io->exists_exe($exename)) && -x $exe ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
401 $self->{'_pathtoexe'}->{$exename} = $exe;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
402 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
403 $self->warn("Cannot find executable for $exename") if $warn;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
404 $self->{'_pathtoexe'}->{$exename} = undef;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
405 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
406 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
407 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
408 return $self->{'_pathtoexe'}->{$exename};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
409 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
410
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
411
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
412 =head2 program_path
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
413
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
414 Title : program_path
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
415 Usage : my $path = $factory->program_path();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
416 Function: Builds path for executable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
417 Returns : string representing the full path to the exe
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
418 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
419
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
420 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
421
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
422 sub program_path {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
423 my ($self,$program_name) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
424 my @path;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
425 push @path, $self->program_dir if $self->program_dir;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
426 push @path, $program_name .($^O =~ /mswin/i ?'.exe':'');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
427
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
428 return Bio::Root::IO->catfile(@path);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
429 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
430
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
431 =head2 program_dir
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
432
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
433 Title : program_dir
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
434 Usage : my $dir = $factory->program_dir();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
435 Function: Abstract get method for dir of program. To be implemented
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
436 by wrapper.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
437 Returns : string representing program directory
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
438 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
439
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
440 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
441
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
442 sub program_dir {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
443 $PROGRAMDIR;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
444 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
445
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
446 sub program {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
447 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
448 if( wantarray ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
449 return ($self->executable, $self->p());
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
450 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
451 return $self->executable(@_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
452 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
453 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
454
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
455 =head2 blastall
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
456
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
457 Title : blastall
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
458 Usage : $blast_report = $factory->blastall('t/testquery.fa');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
459 or
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
460 $input = Bio::Seq->new(-id=>"test query",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
461 -seq=>"ACTACCCTTTAAATCAGTGGGGG");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
462 $blast_report = $factory->blastall($input);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
463 or
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
464 $seq_array_ref = \@seq_array; # where @seq_array is an array of Bio::Seq objects
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
465 $blast_report = $factory->blastall(\@seq_array);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
466 Returns : Reference to a Blast object or BPlite object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
467 containing the blast report.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
468 Args : Name of a file or Bio::Seq object or an array of
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
469 Bio::Seq object containing the query sequence(s).
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
470 Throws an exception if argument is not either a string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
471 (eg a filename) or a reference to a Bio::Seq object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
472 (or to an array of Seq objects). If argument is string,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
473 throws exception if file corresponding to string name can
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
474 not be found.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
475
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
476 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
477
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
478 sub blastall {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
479 my ($self,$input1) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
480 $self->io->_io_cleanup();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
481 my $executable = 'blastall';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
482 my $input2;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
483 # Create input file pointer
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
484 my $infilename1 = $self->_setinput($executable, $input1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
485 if (! $infilename1) {$self->throw(" $input1 ($infilename1) not Bio::Seq object or array of Bio::Seq objects or file name!");}
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
486
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
487 $self->i($infilename1); # set file name of sequence to be blasted to inputfilename1 (-i param of blastall)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
488
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
489 my $blast_report = &_generic_local_blast($self, $executable,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
490 $input1, $input2);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
491 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
492
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
493 =head2 blastpgp
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
494
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
495 Title : blastpgp
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
496 Usage : $blast_report = $factory-> blastpgp('t/testquery.fa');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
497 or
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
498 $input = Bio::Seq->new(-id=>"test query",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
499 -seq=>"ACTADDEEQQPPTCADEEQQQVVGG");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
500 $blast_report = $factory->blastpgp ($input);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
501 or
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
502 $seq_array_ref = \@seq_array; # where @seq_array is an array of Bio::Seq objects
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
503 $blast_report = $factory-> blastpgp(\@seq_array);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
504 Returns : Reference to a Blast object or BPlite object containing
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
505 the blast report.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
506 Args : Name of a file or Bio::Seq object. In psiblast jumpstart
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
507 mode two additional arguments are required: a SimpleAlign
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
508 object one of whose elements is the query and a "mask" to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
509 determine how BLAST should select scoring matrices see
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
510 DESCRIPTION above for more details.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
511
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
512 Throws an exception if argument is not either a string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
513 (eg a filename) or a reference to a Bio::Seq object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
514 (or to an array of Seq objects). If argument is string,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
515 throws exception if file corresponding to string name can
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
516 not be found.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
517 Returns : Reference to either a BPlite.pm, Blast.pm or BPpsilite.pm
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
518 object containing the blast report.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
519
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
520 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
521
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
522 sub blastpgp {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
523 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
524 my $executable = 'blastpgp';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
525 my $input1 = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
526 my $input2 = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
527 my $mask = shift; # used by blastpgp's -B option to specify which residues are position aligned
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
528
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
529 my ($infilename1, $infilename2 ) = $self->_setinput($executable,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
530 $input1, $input2,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
531 $mask);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
532 if (!$infilename1) {$self->throw(" $input1 not Bio::Seq object or array of Bio::Seq objects or file name!");}
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
533 $self->i($infilename1); # set file name of sequence to be blasted to inputfilename1 (-i param of blastpgp)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
534 if ($input2) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
535 unless ($infilename2) {$self->throw("$input2 not SimpleAlign Object in pre-aligned psiblast\n");}
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
536 $self->B($infilename2); # set file name of partial alignment to inputfilename2 (-B param of blastpgp)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
537 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
538 my $blast_report = &_generic_local_blast($self, $executable, $input1, $input2);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
539 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
540
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
541 =head2 bl2seq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
542
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
543 Title : bl2seq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
544 Usage : $factory-> blastpgp('t/seq1.fa', 't/seq2.fa');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
545 or
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
546 $input1 = Bio::Seq->new(-id=>"test query1",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
547 -seq=>"ACTADDEEQQPPTCADEEQQQVVGG");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
548 $input2 = Bio::Seq->new(-id=>"test query2",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
549 -seq=>"ACTADDEMMMMMMMDEEQQQVVGG");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
550 $blast_report = $factory->bl2seq ($input1, $input2);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
551 Returns : Reference to a BPbl2seq object containing the blast report.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
552 Args : Names of 2 files or 2 Bio::Seq objects containing the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
553 sequences to be aligned by bl2seq.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
554
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
555 Throws an exception if argument is not either a pair of
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
556 strings (eg filenames) or references to Bio::Seq objects.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
557 If arguments are strings, throws exception if files
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
558 corresponding to string names can not be found.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
559
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
560 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
561
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
562 sub bl2seq {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
563 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
564 my $executable = 'bl2seq';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
565 my $input1 = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
566 my $input2 = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
567
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
568 # Create input file pointer
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
569 my ($infilename1, $infilename2 ) = $self->_setinput($executable,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
570 $input1, $input2);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
571 if (!$infilename1){$self->throw(" $input1 not Seq Object or file name!");}
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
572 if (!$infilename2){$self->throw("$input2 not Seq Object or file name!");}
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
573
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
574 $self->i($infilename1); # set file name of first sequence to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
575 # be aligned to inputfilename1
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
576 # (-i param of bl2seq)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
577 $self->j($infilename2); # set file name of first sequence to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
578 # be aligned to inputfilename2
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
579 # (-j param of bl2seq)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
580
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
581 my $blast_report = &_generic_local_blast($self, $executable);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
582 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
583 #################################################
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
584
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
585 =head2 _generic_local_blast
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
586
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
587 Title : _generic_local_blast
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
588 Usage : internal function not called directly
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
589 Returns : Blast or BPlite object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
590 Args : Reference to calling object and name of BLAST executable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
591
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
592 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
593
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
594 sub _generic_local_blast {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
595 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
596 my $executable = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
597
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
598 # Create parameter string to pass to Blast program
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
599 my $param_string = $self->_setparams($executable);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
600
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
601 # run Blast
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
602 my $blast_report = &_runblast($self, $executable, $param_string);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
603 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
604
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
605
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
606 =head2 _runblast
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
607
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
608 Title : _runblast
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
609 Usage : Internal function, not to be called directly
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
610 Function: makes actual system call to Blast program
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
611 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
612 Returns : Report object in the appropriate format (BPlite,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
613 BPpsilite, Blast, or BPbl2seq)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
614 Args : Reference to calling object, name of BLAST executable,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
615 and parameter string for executable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
616
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
617 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
618
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
619 sub _runblast {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
620 my ($self,$executable,$param_string) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
621 my ($blast_obj,$exe);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
622 if( ! ($exe = $self->executable($executable)) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
623 $self->warn("cannot find path to $executable");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
624 return undef;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
625 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
626 my $commandstring = $exe. $param_string;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
627
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
628 # next line for debugging
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
629 $self->debug( "$commandstring \n");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
630
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
631 my $status = system($commandstring);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
632
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
633 $self->throw("$executable call crashed: $? $commandstring\n") unless ($status==0) ;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
634 my $outfile = $self->o() ; # get outputfilename
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
635 my $signif = $self->e() || 1e-5 ;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
636
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
637 # set significance cutoff to set expectation value or default value
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
638 # (may want to make this value vary for different executables)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
639
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
640 # If running bl2seq or psiblast (blastpgp with multiple iterations),
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
641 # the specific parsers for these programs must be used (ie BPbl2seq or
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
642 # BPpsilite). Otherwise either the Blast parser or the BPlite
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
643 # parsers can be selected.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
644
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
645 if ($executable =~ /bl2seq/i) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
646 if( $self->verbose > 0 ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
647 open(OUT, $outfile) || $self->throw("cannot open $outfile");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
648 while(<OUT>) { $self->debug($_)}
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
649 close(OUT);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
650 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
651 # Added program info so BPbl2seq can compute strand info
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
652 $blast_obj = Bio::Tools::BPbl2seq->new(-file => $outfile,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
653 -REPORT_TYPE => $self->p );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
654 # $blast_obj = Bio::Tools::BPbl2seq->new(-file => $outfile);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
655 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
656 elsif ($executable =~ /blastpgp/i && defined $self->j() &&
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
657 $self->j() > 1) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
658 print "using psilite parser\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
659 $blast_obj = Bio::Tools::BPpsilite->new(-file => $outfile);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
660 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
661 elsif ($self->_READMETHOD =~ /^Blast/i ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
662 $blast_obj = Bio::SearchIO->new(-file=>$outfile,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
663 -format => 'blast' ) ;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
664 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
665 elsif ($self->_READMETHOD =~ /^BPlite/i ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
666 $blast_obj = Bio::Tools::BPlite->new(-file=>$outfile);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
667 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
668 $self->warn("Unrecognized readmethod ".$self->_READMETHOD. " or executable $executable\n");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
669 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
670 return $blast_obj;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
671 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
672
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
673 =head2 _setinput
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
674
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
675 Title : _setinput
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
676 Usage : Internal function, not to be called directly
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
677 Function: Create input file(s) for Blast executable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
678 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
679 Returns : name of file containing Blast data input
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
680 Args : Seq object reference or input file name
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
681
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
682 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
683
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
684 sub _setinput {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
685 my ($self, $executable, $input1, $input2) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
686 my ($seq, $temp, $infilename1, $infilename2,$fh ) ;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
687 # If $input1 is not a reference it better be the name of a file with
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
688 # the sequence/ alignment data...
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
689 $self->io->_io_cleanup();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
690
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
691 SWITCH: {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
692 unless (ref $input1) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
693 $infilename1 = (-e $input1) ? $input1 : 0 ;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
694 last SWITCH;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
695 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
696 # $input may be an array of BioSeq objects...
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
697 if (ref($input1) =~ /ARRAY/i ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
698 ($fh,$infilename1) = $self->io->tempfile();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
699 $temp = Bio::SeqIO->new(-fh=> $fh, '-format' => 'Fasta');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
700 foreach $seq (@$input1) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
701 unless ($seq->isa("Bio::PrimarySeqI")) {return 0;}
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
702 $temp->write_seq($seq);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
703 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
704 close $fh;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
705 $fh = undef;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
706 last SWITCH;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
707 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
708 # $input may be a single BioSeq object...
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
709 elsif ($input1->isa("Bio::PrimarySeqI")) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
710 ($fh,$infilename1) = $self->io->tempfile();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
711
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
712 # just in case $input1 is taken from an alignment and has spaces (ie
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
713 # deletions) indicated within it, we have to remove them - otherwise
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
714 # the BLAST programs will be unhappy
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
715
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
716 my $seq_string = $input1->seq();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
717 $seq_string =~ s/\W+//g; # get rid of spaces in sequence
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
718 $input1->seq($seq_string);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
719 $temp = Bio::SeqIO->new(-fh=> $fh, '-format' => 'Fasta');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
720 $temp->write_seq($input1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
721 close $fh;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
722 undef $fh;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
723 # $temp->write_seq($input1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
724 last SWITCH;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
725 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
726 $infilename1 = 0; # Set error flag if you get here
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
727 } # End SWITCH
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
728 unless ($input2) { return $infilename1; }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
729 SWITCH2: {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
730 unless (ref $input2) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
731 $infilename2 = (-e $input2) ? $input2 : 0 ;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
732 last SWITCH2;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
733 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
734 if ($input2->isa("Bio::PrimarySeqI") && $executable eq 'bl2seq' ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
735 ($fh,$infilename2) = $self->io->tempfile();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
736
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
737 $temp = Bio::SeqIO->new(-fh=> $fh, '-format' => 'Fasta');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
738 $temp->write_seq($input2);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
739 close $fh;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
740 undef $fh;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
741 last SWITCH2;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
742 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
743 # Option for using psiblast's pre-alignment "jumpstart" feature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
744 elsif ($input2->isa("Bio::SimpleAlign") &&
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
745 $executable eq 'blastpgp' ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
746 # a bit of a lie since it won't be a fasta file
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
747 ($fh,$infilename2) = $self->io->tempfile();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
748
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
749 # first we retrieve the "mask" that determines which residues should
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
750 # by scored according to their position and which should be scored
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
751 # using the non-position-specific matrices
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
752
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
753 my @mask = split("", shift ); # get mask
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
754
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
755 # then we have to convert all the residues in every sequence to upper
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
756 # case at the positions that we want psiblast to use position specific
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
757 # scoring
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
758
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
759 foreach $seq ( $input2->each_seq() ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
760 my @seqstringlist = split("",$seq->seq());
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
761 for (my $i = 0; $i < scalar(@mask); $i++) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
762 unless ( $seqstringlist[$i] =~ /[a-zA-Z]/ ) {next}
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
763 $seqstringlist[$i] = $mask[$i] ? uc $seqstringlist[$i]: lc $seqstringlist[$i] ;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
764 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
765 my $newseqstring = join("", @seqstringlist);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
766 $seq->seq($newseqstring);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
767 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
768 # Now we need to write out the alignment to a file
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
769 # in the "psi format" which psiblast is expecting
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
770 $input2->map_chars('\.','-');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
771 $temp = Bio::AlignIO->new(-fh=> $fh, '-format' => 'psi');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
772 $temp->write_aln($input2);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
773 close $fh;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
774 undef $fh;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
775 last SWITCH2;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
776 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
777 $infilename2 = 0; # Set error flag if you get here
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
778 } # End SWITCH2
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
779 return ($infilename1, $infilename2);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
780 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
781
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
782 =head2 _setparams
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
783
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
784 Title : _setparams
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
785 Usage : Internal function, not to be called directly
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
786 Function: Create parameter inputs for Blast program
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
787 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
788 Returns : parameter string to be passed to Blast
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
789 Args : Reference to calling object and name of BLAST executable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
790
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
791 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
792
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
793 sub _setparams {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
794 my ($self,$executable) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
795 my ($attr, $value, @execparams);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
796
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
797 if ($executable eq 'blastall') {@execparams = @BLASTALL_PARAMS; }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
798 if ($executable eq 'blastpgp') {@execparams = @BLASTPGP_PARAMS; }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
799 if ($executable eq 'bl2seq') {@execparams = @BL2SEQ_PARAMS; }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
800
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
801 my $param_string = "";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
802 for $attr ( @execparams ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
803 $value = $self->$attr();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
804 next unless (defined $value);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
805 # Need to prepend datadirectory to database name
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
806 if ($attr eq 'd' && ($executable ne 'bl2seq')) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
807 # This is added so that you can specify a DB with a full path
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
808 if (! (-e $value.".nin" || -e $value.".pin")){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
809 $value = File::Spec->catdir($DATADIR,$value);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
810 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
811 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
812 # put params in format expected by Blast
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
813 $attr = '-'. $attr ;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
814 $param_string .= " $attr $value ";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
815 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
816
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
817 # if ($self->quiet()) { $param_string .= ' >/dev/null';}
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
818
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
819 return $param_string;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
820 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
821
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
822
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
823 =head1 Bio::Tools::Run::Wrapper methods
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
824
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
825 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
826
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
827 =head2 no_param_checks
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
828
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
829 Title : no_param_checks
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
830 Usage : $obj->no_param_checks($newval)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
831 Function: Boolean flag as to whether or not we should
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
832 trust the sanity checks for parameter values
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
833 Returns : value of no_param_checks
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
834 Args : newvalue (optional)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
835
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
836
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
837 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
838
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
839 =head2 save_tempfiles
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
840
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
841 Title : save_tempfiles
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
842 Usage : $obj->save_tempfiles($newval)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
843 Function:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
844 Returns : value of save_tempfiles
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
845 Args : newvalue (optional)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
846
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
847
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
848 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
849
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
850 =head2 outfile_name
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
851
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
852 Title : outfile_name
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
853 Usage : my $outfile = $tcoffee->outfile_name();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
854 Function: Get/Set the name of the output file for this run
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
855 (if you wanted to do something special)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
856 Returns : string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
857 Args : [optional] string to set value to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
858
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
859
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
860 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
861
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
862
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
863 =head2 tempdir
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
864
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
865 Title : tempdir
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
866 Usage : my $tmpdir = $self->tempdir();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
867 Function: Retrieve a temporary directory name (which is created)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
868 Returns : string which is the name of the temporary directory
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
869 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
870
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
871
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
872 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
873
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
874 =head2 cleanup
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
875
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
876 Title : cleanup
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
877 Usage : $tcoffee->cleanup();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
878 Function: Will cleanup the tempdir directory after a PAML run
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
879 Returns : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
880 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
881
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
882
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
883 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
884
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
885 =head2 io
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
886
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
887 Title : io
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
888 Usage : $obj->io($newval)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
889 Function: Gets a L<Bio::Root::IO> object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
890 Returns : L<Bio::Root::IO>
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
891 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
892
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
893
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
894 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
895
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
896 sub DESTROY {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
897 my $self= shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
898 unless ( $self->save_tempfiles ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
899 $self->cleanup();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
900 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
901 $self->SUPER::DESTROY();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
902 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
903
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
904 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
905 __END__