Mercurial > repos > dereeper > roary_plots
comparison Roary/lib/Bio/Roary/External/IterativeCdhit.pm @ 0:c47a5f61bc9f draft
Uploaded
author | dereeper |
---|---|
date | Fri, 14 May 2021 20:27:06 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:c47a5f61bc9f |
---|---|
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; |