0
|
1 package Bio::Roary::External::IterativeCdhit;
|
|
2
|
|
3 # ABSTRACT: Iteratively run CDhit
|
|
4
|
|
5 =head1 SYNOPSIS
|
|
6
|
|
7 Iteratively run CDhit
|
|
8
|
|
9 use Bio::Roary::External::IterativeCdhit;
|
|
10
|
|
11 my $seg= Bio::Roary::External::IterativeCdhit->new(
|
|
12 output_cd_hit_filename => '',
|
|
13 output_combined_filename => '',
|
|
14 number_of_input_files => 10,
|
|
15 output_filtered_clustered_fasta => '',
|
|
16 );
|
|
17
|
|
18 $seg->run();
|
|
19
|
|
20 =cut
|
|
21
|
|
22 use Moose;
|
|
23 with 'Bio::Roary::JobRunner::Role';
|
|
24
|
|
25 has 'output_cd_hit_filename' => ( is => 'ro', isa => 'Str', required => 1 );
|
|
26 has 'output_combined_filename' => ( is => 'ro', isa => 'Str', required => 1 );
|
|
27 has 'number_of_input_files' => ( is => 'ro', isa => 'Int', required => 1 );
|
|
28 has 'output_filtered_clustered_fasta' => ( is => 'ro', isa => 'Str', required => 1 );
|
|
29 has 'exec' => ( is => 'ro', isa => 'Str', default => 'iterative_cdhit' );
|
|
30 has '_max_cpus' => ( is => 'ro', isa => 'Int', default => 40 );
|
|
31 # Overload Role
|
|
32 has 'memory_in_mb' => ( is => 'ro', isa => 'Int', lazy => 1, builder => '_build_memory_in_mb' );
|
|
33
|
|
34 sub _build_memory_in_mb {
|
|
35 my ($self) = @_;
|
|
36 my $filename = $self->output_combined_filename;
|
|
37 my $memory_required = 2000;
|
|
38 if ( -e $filename ) {
|
|
39 $memory_required = -s $filename;
|
|
40
|
|
41 # Convert to mb
|
|
42 $memory_required = int( $memory_required / 1000000 );
|
|
43
|
|
44 # Pentuple memory for worst case senario
|
|
45 $memory_required *= 5;
|
|
46 $memory_required = 2000 if ( $memory_required < 2000 );
|
|
47 }
|
|
48
|
|
49 return $memory_required;
|
|
50 }
|
|
51
|
|
52 sub _build__max_available_memory_in_mb {
|
|
53 my ($self) = @_;
|
|
54 my $memory_to_cdhit = int( $self->memory_in_mb * 0.9 );
|
|
55 return $memory_to_cdhit;
|
|
56 }
|
|
57
|
|
58 sub _command_to_run {
|
|
59 my ($self) = @_;
|
|
60 my $cpus = ($self->cpus > $self->_max_cpus) ? $self->_max_cpus : $self->cpus;
|
|
61
|
|
62 return join(
|
|
63 ' ',
|
|
64 (
|
|
65 $self->exec, '-c', $self->output_cd_hit_filename, '-m',
|
|
66 $self->output_combined_filename, '-n', $self->number_of_input_files, '--cpus', $cpus, '-f',
|
|
67 $self->output_filtered_clustered_fasta
|
|
68 )
|
|
69 );
|
|
70 }
|
|
71
|
|
72 sub run {
|
|
73 my ($self) = @_;
|
|
74 my @commands_to_run;
|
|
75 push( @commands_to_run, $self->_command_to_run );
|
|
76 $self->logger->info( "Running command: " . $self->_command_to_run() );
|
|
77
|
|
78 my $job_runner_obj = $self->_job_runner_class->new(
|
|
79 commands_to_run => \@commands_to_run,
|
|
80 memory_in_mb => $self->memory_in_mb,
|
|
81 queue => $self->_queue,
|
|
82 cpus => $self->cpus
|
|
83 );
|
|
84 $job_runner_obj->run();
|
|
85
|
|
86 1;
|
|
87 }
|
|
88
|
|
89 no Moose;
|
|
90 __PACKAGE__->meta->make_immutable;
|
|
91
|
|
92 1;
|