skip # off
[bioperl-run.git] / t / SABlastPlus.t
blobfdf2fe51b3034658fc80d1c360904c35c5152ef7
2 #-*-perl-*-
3 #$Id$
4 # testing StandAloneBlastPlus.pm
6 use strict;
7 use warnings;
8 our $home;
9 BEGIN {
10     use Bio::Root::Test;
11     test_begin(-tests => 65,
12            -requires_modules => [qw( Bio::Tools::Run::BlastPlus)]);
15 use_ok( 'Bio::Tools::Run::StandAloneBlastPlus' );
16 use_ok( 'Bio::Tools::Run::WrapperBase' );
17 use_ok( 'Bio::Tools::Run::WrapperBase::CommandExts' );
18 use Bio::SeqIO;
19 use Bio::AlignIO;
21 ok my $bpfac = Bio::Tools::Run::BlastPlus->new(-command => 'makeblastdb'), 
22     "BlastPlus factory";
24 SKIP : {
25     test_skip( -tests => 59,
26            -requires_executable => $bpfac);
27     diag('DB and mask make tests');
28     
29     # testing using fasta files as input...
30     ok my $fac = Bio::Tools::Run::StandAloneBlastPlus->new(
31     -db_data => test_input_file('test-spa.fas'),
32     -create => 1
33     ), "make factory";
34     ok $fac->make_db, "test db made with fasta";
35     like $fac->db, qr/DB.{5}/, "temp db";
36     is ($fac->db_type, 'nucl', "right type");
37     $fac->cleanup;
39     ok $fac = Bio::Tools::Run::StandAloneBlastPlus->new(
40     -db_name => 'test', 
41     -db_data => test_input_file('test-spa.fas'),
42     -create => 1
43     );
44     
45     like($fac->program_version, qr/2\.\d+\.\d+/, 'program version');
46     like($fac->package_version, qr/2\.\d+\.\d+/, 'package version');
47     
48     ok $fac->make_db, "named db made";
49     ok $fac->check_db, "check_db";
50     is $fac->db, 'test', "correct name";
51     is ref $fac->db_info, 'HASH', "dbinfo hash returned";
52     is $fac->db_type, 'nucl', "correct type";
54     ok $fac->make_mask(
55     -data=>test_input_file('test-spa.fas'), 
56     -masker=>'windowmasker'), "windowmasker mask made";
57     ok $fac->make_mask(
58     -data=>test_input_file('test-spa.fas'), 
59     -masker=>'dustmasker'), "dustmasker mask made";
61     $fac = Bio::Tools::Run::StandAloneBlastPlus->new(
62     -db_data => test_input_file('test-spa-p.fas'),
63     -create => 1
64     );
65     ok $fac->check_db('test'), "check_db with arg";
66     is $fac->db_info('test')->{_db_type}, 'nucl', "db_info with arg";
67     ok $fac->make_db, "protein db made";
68     is $fac->db_type, 'prot', "correct type";
69     ok $fac->make_mask(-data=>$fac->db, -masker=>'segmasker'), "segmasker mask made";
70     ok $fac->make_mask(
71     -data=>$fac->db, 
72     -masker=>'segmasker'), "segmasker mask made; blastdb as data";
73     $fac->_register_temp_for_cleanup('test');
74     $fac->cleanup;
75     
76     ok $fac = Bio::Tools::Run::StandAloneBlastPlus->new(
77     -db_data => test_input_file('test-spa-p.fas'),
78     -mask_file => test_input_file('segmask_data.asn'),
79     -create => 1
80     );
81     ok $fac->make_db, "protein db made with pre-built mask";
82     is $fac->db_filter_algorithms->[0]{algorithm_name}, 'seg', "db_info records mask info";
84     $fac->cleanup;
85     
87     ok $fac = Bio::Tools::Run::StandAloneBlastPlus->new(
88     -db_data => test_input_file('test-spa.fas'),
89     -masker=>'windowmasker',
90     -mask_data => test_input_file('test-spa.fas'),
91     -create => 1
92     );
93     $fac->no_throw_on_crash(1);
94     
95     TODO: {
96         local $TODO = 'BLAST+ 2.2.24+ not working';
97         ok $fac->make_db, "mask built and db made on construction (windowmasker)";
98     }
99     $fac->cleanup;
100     
101     ok $fac = Bio::Tools::Run::StandAloneBlastPlus->new(
102     -db_data => test_input_file('test-spa-p.fas'),
103     -masker=>'segmasker',
104     -mask_data => test_input_file('test-spa-p.fas'),
105     -create => 1
106     );
107     $fac->no_throw_on_crash(1);
108     TODO: {
109         local $TODO = 'BLAST+ 2.2.24+ not working';
110         ok $fac->make_db, "mask built and db made on construction (segmasker)";
111     }
112     $fac->cleanup;
113     
114     ok $fac = Bio::Tools::Run::StandAloneBlastPlus->new(
115     -db_data => test_input_file('test-spa.fas'),
116     -masker=>'dustmasker',
117     -mask_data => test_input_file('test-spa.fas'),
118     -create => 1
119     );
120     $fac->no_throw_on_crash(1);
121     TODO: {
122         local $TODO = 'BLAST+ 2.2.24+ not working';
123         ok $fac->make_db, "mask built and db made on construction (dustmasker)";
124     }
125     $fac->cleanup;
126     # tests with Bio:: objects as input
128     ok my $sio = Bio::SeqIO->new(-file => test_input_file('test-spa.fas'));
129     ok my $aio = Bio::AlignIO->new(-file => test_input_file('test-spa-p.fas'));
131     ok $fac = Bio::Tools::Run::StandAloneBlastPlus->new(
132     -db_name => 'siodb',
133     -db_data => $sio,
134     -create => 1
135     );
136     ok $fac->make_db, "make db from Bio::SeqIO";
137     $fac->cleanup;
138     ok $fac = Bio::Tools::Run::StandAloneBlastPlus->new(
139     -db_name => 'aiodb',
140     -db_data => $aio,
141     -create => 1
142     );
143     ok $fac->make_db, "make db from Bio::AlignIO";
145     $fac->cleanup;
147     $aio = Bio::AlignIO->new(-file=>test_input_file('test-aln.msf'));
148     my @seqs = $aio->next_aln->each_seq;
149     ok $fac = Bio::Tools::Run::StandAloneBlastPlus->new(
150     -db_name => 'aiodb',
151     -db_data => \@seqs,
152     -create => 1
153     );
154     ok $fac->make_db, 'make db from \@seqs';
156     $fac->_register_temp_for_cleanup( 'aiodb', 'siodb' );
157     $fac->cleanup;
159     # bug#3003 :
160     #$DB::single=1;
161     mkdir "./a"; mkdir "./a/b";
162     ok $fac = Bio::Tools::Run::StandAloneBlastPlus->new(
163     -db_dir => "./a/b",
164     -db_name => "test",
165     -db_data => test_input_file('test-spa.fas'),
166     -create => 1
167     ), "dbdir : ./a/b; dbname : test; create";
168     ok $fac->make_db, "make db";
169     lives_ok { Bio::Tools::Run::StandAloneBlastPlus->new(
170            -db_dir => "./a",
171            -db_name => "b/test"
172            ) };
173     lives_ok { Bio::Tools::Run::StandAloneBlastPlus->new(
174            -db_dir => ".",
175            -db_name => "a/b/test"
176            ) };
177     lives_ok { Bio::Tools::Run::StandAloneBlastPlus->new(
178            -db_name => "a/b/test"
179            ) };
180     dies_ok { Bio::Tools::Run::StandAloneBlastPlus->new(
181            -db_name => "/a/b/test"
182            ) };
183     $fac->_register_temp_for_cleanup('a/b/test');
184     $fac->cleanup;
185     rmdir 'a/b';
186     rmdir 'a';
187     # exception tests here someday.
189     # blast method tests
190     diag("run BLAST methods");
192     $fac = Bio::Tools::Run::StandAloneBlastPlus->new(
193     -db_data => test_input_file('test-spa.fas'),
194     -create => 1);
196     ok my $result = $fac->run( -method => 'blastn', -query => test_input_file('test-query.fas')), "run blastn";
197     is $result->num_hits, 291, "default hit limit";
198     ok $result = $fac->blastn( -query => test_input_file('test-query.fas'),
199                    -method_args => [ -num_alignments => 1000 ] ), "return more alignments (arg spec)";
200     is $result->num_hits, 291, "got more hits";
201     $fac->cleanup;
202     my $ntseq = Bio::Seq->new( -seq => 'GACGATCCTTCGGTGAGCAAAGAAATTTTAGCAGAAGCTAAAAAGCTAAACGATGCTCAAGCACCAAAAG', -id => 'SA009');
203     my $aaseq = $ntseq->translate;
205     ok $result = $fac->blastn( -query => $ntseq  ), "run blastn with Bio::Seq query";
206     $fac->no_throw_on_crash(1);
207     ok $result = $fac->tblastn( -query => $aaseq ), "run tblastn";
208     is $result->num_hits, 299, "tblastn hits";
209     ok $result = $fac->tblastx( -query => $ntseq ), "run tblastx";
210     is $result->num_hits, 299, "tblastx hits";
211     $fac->cleanup;
213     ok $fac = Bio::Tools::Run::StandAloneBlastPlus->new(
214     -db_data => test_input_file('test-spa-p.fas'),
215     -create => 1);
216     ok $result = $fac->blastp( -query => $aaseq ), "run blastp";
217     is $result->num_hits, 222, "blastp hits";
218     $fac->cleanup;
220     $sio = Bio::SeqIO->new(-file=>test_input_file('test-spa.fas'));    
221     $sio->next_seq;
222     my $seq1 = $sio->next_seq;
223     my $seq2 = $sio->next_seq;
225     ok $result = $fac->bl2seq( -method => 'blastn',
226                    -query => $seq1,
227                    -subject => $seq2 ), "bl2seq (blastn)";
228     is $result->num_hits, 1, "got hit";
229     ok $result = $fac->bl2seq( -method => 'blastx',
230                    -query => $seq1,
231                    -subject => $seq2 ), "bl2seq (blastx)";
232     is $result->num_hits, 1, "got hit";
233     $seq1 = $seq1->translate;
234     $seq2 = $seq2->translate;
235     ok $result = $fac->bl2seq( -method => 'blastp',
236                    -query => $seq1, 
237                    -subject => $seq2 ), "bl2seq (blastp)";
238     is $result->num_hits, 1, "got hit";
239     $fac->cleanup;
240 } # SKIP to here