Bio_AssemblyImprovement
view release on metacpan or search on metacpan
lib/Bio/AssemblyImprovement/Scaffold/SSpace/Iterative.pm view on Meta::CPAN
package Bio::AssemblyImprovement::Scaffold::SSpace::Iterative;
# ABSTRACT: Iteratively run SSpace.
use Moose;
use Cwd;
use File::Basename;
use File::Copy;
use Bio::AssemblyImprovement::Scaffold::SSpace::Main;
with 'Bio::AssemblyImprovement::Scaffold::SSpace::OutputFilenameRole';
with 'Bio::AssemblyImprovement::Scaffold::SSpace::TempDirectoryRole';
has 'input_files' => ( is => 'ro', isa => 'ArrayRef', required => 1 );
has 'insert_size' => ( is => 'ro', isa => 'Int', required => 1 );
has 'merge_sizes' => ( is => 'ro', isa => 'ArrayRef[Int]', lazy => 1, builder => '_build_merge_sizes' );
has 'threads' => ( is => 'ro', isa => 'Int', default => 1 );
has 'scaffolder_exec' => ( is => 'ro', isa => 'Str', required => 1 );
has 'debug' => ( is => 'ro', isa => 'Bool', default => 0);
has 'output_base_directory' => ( is => 'ro', isa => 'Str', lazy => 1, builder => '_build_output_base_directory' );
has '_intermediate_filename' => ( is => 'ro', isa => 'Str', lazy => 1, builder => '_build__intermediate_filename' );
sub _build_output_base_directory
{
my ($self) = @_;
return getcwd();
}
sub _build_merge_sizes {
my ($self) = @_;
return [ 90, 80, 70, 60, 50, 40, 30, 25, 20, 15, 10, 10, 7, 7, 5, 5 ];
}
sub _build__intermediate_filename {
my ($self) = @_;
my ( $filename, $directories, $suffix ) = fileparse( $self->input_assembly );
return join( '/', ( $self->_temp_directory, $filename ) );
}
sub _single_scaffolding_iteration {
my ( $self, $merge_size ) = @_;
my $scaffold = Bio::AssemblyImprovement::Scaffold::SSpace::Main->new(
input_files => $self->input_files,
input_assembly => $self->_intermediate_filename,
insert_size => $self->insert_size,
merge_size => $merge_size,
threads => $self->threads,
scaffolder_exec => $self->scaffolder_exec,
debug => $self->debug
)->run;
move( $scaffold->output_filename, $self->_intermediate_filename );
return $self;
}
sub final_output_filename
{
my ($self) = @_;
my ( $filename, $directories, $suffix ) = fileparse( $self->input_assembly, qr/\.[^.]*/ );
return $self->output_base_directory.'/' . $filename . "." . $self->_output_prefix . $suffix;
}
sub run {
my ($self) = @_;
$self->output_base_directory();
my $original_cwd = getcwd();
chdir( $self->_temp_directory );
copy( $self->input_assembly, $self->_intermediate_filename );
for my $merge_size ( @{ $self->merge_sizes } ) {
$self->_single_scaffolding_iteration($merge_size);
}
chdir($original_cwd);
move( $self->_intermediate_filename, $self->final_output_filename );
( run in 0.867 second using v1.01-cache-2.11-cpan-437f7b0c052 )