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 )