0
|
1 undef $VERSION;
|
|
2 package Bio::Roary::CommandLine::ParallelAllAgainstAllBlastp;
|
|
3
|
|
4 # ABSTRACT: Take in a FASTA file of proteins and blast against itself
|
|
5
|
|
6 =head1 SYNOPSIS
|
|
7
|
|
8 Take in a FASTA file of proteins and blast against itself
|
|
9
|
|
10 =cut
|
|
11
|
|
12 use Moose;
|
|
13 use Getopt::Long qw(GetOptionsFromArray);
|
|
14 use Bio::Roary::ParallelAllAgainstAllBlast;
|
|
15 use Bio::Roary::CombinedProteome;
|
|
16 use Bio::Roary::PrepareInputFiles;
|
|
17 extends 'Bio::Roary::CommandLine::Common';
|
|
18
|
|
19 has 'args' => ( is => 'ro', isa => 'ArrayRef', required => 1 );
|
|
20 has 'script_name' => ( is => 'ro', isa => 'Str', required => 1 );
|
|
21 has 'help' => ( is => 'rw', isa => 'Bool', default => 0 );
|
|
22
|
|
23 has 'fasta_files' => ( is => 'rw', isa => 'ArrayRef' );
|
|
24 has 'output_filename' => ( is => 'rw', isa => 'Str', default => 'blast_results' );
|
|
25 has 'job_runner' => ( is => 'rw', isa => 'Str', default => 'Local' );
|
|
26 has 'cpus' => ( is => 'rw', isa => 'Int', default => 1 );
|
|
27 has 'makeblastdb_exec' => ( is => 'rw', isa => 'Str', default => 'makeblastdb' );
|
|
28 has 'blastp_exec' => ( is => 'rw', isa => 'Str', default => 'blastp' );
|
|
29 has 'verbose' => ( is => 'rw', isa => 'Bool', default => 0 );
|
|
30
|
|
31 has '_error_message' => ( is => 'rw', isa => 'Str' );
|
|
32
|
|
33 sub BUILD {
|
|
34 my ($self) = @_;
|
|
35
|
|
36 my ( $fasta_files, $output_filename, $job_runner, $makeblastdb_exec, $blastp_exec, $help, $cpus, $verbose, );
|
|
37
|
|
38 GetOptionsFromArray(
|
|
39 $self->args,
|
|
40 'o|output=s' => \$output_filename,
|
|
41 'j|job_runner=s' => \$job_runner,
|
|
42 'm|makeblastdb_exec=s' => \$makeblastdb_exec,
|
|
43 'b|blastp_exec=s' => \$blastp_exec,
|
|
44 'p|processors=i' => \$cpus,
|
|
45 'v|verbose' => \$verbose,
|
|
46 'h|help' => \$help,
|
|
47 );
|
|
48
|
|
49 if ( @{ $self->args } == 0 ) {
|
|
50 $self->_error_message("Error: You need to provide a FASTA file");
|
|
51 }
|
|
52
|
|
53 if ( defined($verbose) ) {
|
|
54 $self->verbose($verbose);
|
|
55 $self->logger->level(10000);
|
|
56 }
|
|
57 $self->help($help) if(defined($help));
|
|
58 $self->output_filename($output_filename) if ( defined($output_filename) );
|
|
59 $self->makeblastdb_exec($makeblastdb_exec) if ( defined($makeblastdb_exec) );
|
|
60 $self->blastp_exec($blastp_exec) if ( defined($blastp_exec) );
|
|
61 $self->job_runner($job_runner) if ( defined($job_runner) );
|
|
62 $self->cpus($cpus) if ( defined($cpus) );
|
|
63 if ( $self->cpus > 1 ) {
|
|
64 $self->job_runner('Parallel');
|
|
65 }
|
|
66
|
|
67 for my $filename ( @{ $self->args } ) {
|
|
68 if ( !-e $filename ) {
|
|
69 $self->_error_message("Error: Cant access file $filename");
|
|
70 last;
|
|
71 }
|
|
72 }
|
|
73 $self->fasta_files( $self->args );
|
|
74
|
|
75 }
|
|
76
|
|
77 sub run {
|
|
78 my ($self) = @_;
|
|
79
|
|
80 ( !$self->help ) or die $self->usage_text;
|
|
81 if ( defined( $self->_error_message ) ) {
|
|
82 print $self->_error_message . "\n";
|
|
83 die $self->usage_text;
|
|
84 }
|
|
85
|
|
86 my $prepare_input_files = Bio::Roary::PrepareInputFiles->new(
|
|
87 input_files => $self->fasta_files,
|
|
88 );
|
|
89
|
|
90 my $output_combined_filename;
|
|
91 if(@{$self->fasta_files} > 1)
|
|
92 {
|
|
93 $output_combined_filename = 'combined_files.fa';
|
|
94 $self->logger->info("Combining protein files");
|
|
95 my $combine_fasta_files = Bio::Roary::CombinedProteome->new(
|
|
96 proteome_files => $prepare_input_files->fasta_files,
|
|
97 output_filename => $output_combined_filename,
|
|
98 maximum_percentage_of_unknowns => 5.0,
|
|
99 apply_unknowns_filter => 0
|
|
100 );
|
|
101 $combine_fasta_files->create_combined_proteome_file;
|
|
102 }
|
|
103 else
|
|
104 {
|
|
105 $output_combined_filename = $self->fasta_files->[0];
|
|
106 }
|
|
107
|
|
108 $self->logger->info("Beginning all against all blast");
|
|
109 my $blast_obj = Bio::Roary::ParallelAllAgainstAllBlast->new(
|
|
110 fasta_file => $output_combined_filename,
|
|
111 blast_results_file_name => $self->output_filename,
|
|
112 job_runner => $self->job_runner,
|
|
113 cpus => $self->cpus,
|
|
114 makeblastdb_exec => $self->makeblastdb_exec,
|
|
115 blastp_exec => $self->blastp_exec,
|
|
116 logger => $self->logger
|
|
117 );
|
|
118 $blast_obj->run();
|
|
119 }
|
|
120
|
|
121 sub usage_text {
|
|
122 my ($self) = @_;
|
|
123
|
|
124 return <<USAGE;
|
|
125 Usage: parallel_all_against_all_blastp [options] file.faa
|
|
126 Take in a FASTA file of proteins and blast against itself
|
|
127
|
|
128 Options: -p INT number of threads [1]
|
|
129 -o STR output filename for blast results [blast_results]
|
|
130 -m STR makeblastdb executable [makeblastdb]
|
|
131 -b STR blastp executable [blastp]
|
|
132 -v verbose output to STDOUT
|
|
133 -h this help message
|
|
134
|
|
135 For further info see: http://sanger-pathogens.github.io/Roary/
|
|
136 USAGE
|
|
137 }
|
|
138
|
|
139 __PACKAGE__->meta->make_immutable;
|
|
140 no Moose;
|
|
141 1;
|