JPRED-2 Move Jpred 3.0.1 to public Git
[jpred.git] / jpred / lib / PSIBLAST / Run.pm
1 package PSIBLAST::Run;
2
3 use Carp;
4 use base qw(Root);
5 use Run qw(check);
6
7 sub new {
8         my ($class, %args) = @_;
9         my $self = {};
10         bless $self, ref($class) || $class;
11
12         # -a number of CPUs used (default 1)
13         # -e e-value threshold for reporting sequences (default 10)
14         # -h e-value threshold for including sequences in PSSM (default 0.002)
15         # -m type of output
16         # -b max number of alignments reported (default 250)
17         # -v max number of sequences described (default 500)
18         # -j max number of itterations (default 1)
19         $self->args("-e0.05 -h0.01 -m6 -b10000 -v10000 -j3");
20         #$self->args("-a2 -e0.05 -h0.01 -m6 -b20000 -v20000 -j15");
21 #       $self->BLASTMAT("/software/jpred_bin/blast");
22 #       $self->BLASTDB("/software/jpred_uniprot_all_filt");
23
24         # Automatically run any arguments passed to the constructor
25         for (keys %args) {
26                 croak "No such method '$_' of object $class" unless $self->can($_);
27                 $self->$_($args{$_});
28         }
29
30         return $self;
31 }
32
33 sub path { defined $_[1] ? $_[0]->{path} = $_[1] : $_[0]->{path} }
34 sub args { defined $_[1] ? $_[0]->{args} = $_[1] : $_[0]->{args} }
35 sub database { defined $_[1] ? $_[0]->{data} = "-d $_[1]" : $_[0]->{data} }
36 sub input { defined $_[1] ? $_[0]->{input} = "-i $_[1]" : $_[0]->{input} }
37 sub output { defined $_[1] ? $_[0]->{output} = "-o $_[1]" : $_[0]->{output} }
38 sub matrix { defined $_[1] ? $_[0]->{matrix} = "-Q $_[1]" : $_[0]->{matrix} }
39 sub debug { defined $_[1] ? $_[0]->{debug} = $_[1] : $_[0]->{debug} }      # CC corrected - now works as expected. Before, debug was always on.
40 sub BLASTMAT { $ENV{BLASTMAT} = $_[1] }
41 sub BLASTDB { $ENV{BLASTDB} = $_[1] }
42
43 sub run {
44         my ($self) = @_;
45
46         # Required arguments
47         for (qw(path output database input)) {
48                 croak "Method '$_' needs to be set" unless defined $self->$_;
49         }
50
51         # Construct the command line
52         my @cmd;
53         for (qw(path args database input matrix output)) {
54                 next unless $self->$_;
55                 push @cmd, $self->$_;
56         }
57
58         my $cmd = join " ", @cmd;
59         # Execute PSIBLAST and check it ran okay
60         if ($self->debug) {
61                 #for (keys %ENV) { warn "$_=$ENV{$_}\n" }
62                 warn "$cmd\n"
63         }
64
65         system($cmd) == 0 or check("blastpgp", $?) and die "blastpgp was naughty";
66
67         # Clean up the error.log file it produces
68         if (-z "error.log") { unlink "error.log" }
69         else { warn "blastpgp error.log file was not empty\n" }
70 }
71
72 1;