Bio-Roary

 view release on metacpan or  search on metacpan

lib/Bio/Roary/PostAnalysis.pm  view on Meta::CPAN

has '_accessory_clustering' =>
  ( is => 'ro', isa => 'Maybe[Bio::Roary::AccessoryClustering]', lazy => 1, builder => '_build__accessory_clustering' );
has '_assembly_statistics' => ( is => 'ro', isa => 'Bio::Roary::AssemblyStatistics', lazy => 1, builder => '_build__assembly_statistics' );

has 'logger' => ( is => 'ro', lazy => 1, builder => '_build_logger' );

sub _build_logger {
    my ($self) = @_;
    Log::Log4perl->easy_init( level => $ERROR );
    my $logger = get_logger();
    return $logger;
}

sub run {
    my ($self) = @_;

    $self->logger->info("Reinflate clusters");
    $self->_inflate_clusters_obj->inflate();

    $self->logger->info("Split groups with paralogs");
    ## SPLIT GROUPS WITH PARALOGS ##
    if ( $self->dont_split_groups ) {
        move( $self->_output_inflate_unsplit_clusters_filename, $self->_output_inflate_clusters_filename );
    }
    else {
        $self->_split_groups_obj->split_groups;
    }

    $self->logger->info("Labelling the groups");
    $self->_group_labels_obj->add_labels();

    $self->logger->info("Transfering the annotation to the groups");
    $self->_annotate_groups_obj->reannotate;

    $self->logger->info("Creating accessory binary gene presence and absence fasta");
    $self->_accessory_binary_fasta->create_accessory_binary_fasta;

    $self->logger->info("Creating accessory binary gene presence and absence tree");
    $self->_accessory_binary_tree->run;

    $self->logger->info("Creating accessory gene presence and absence clusters");
    if ( $self->_accessory_clustering ) {
        $self->_accessory_clustering->sample_weights;
    }

    $self->logger->info("Creating the spreadsheet with gene presence and absence");
    $self->_group_statistics_obj->create_spreadsheet;
	$self->_group_statistics_obj->create_rtab;

    $self->logger->info("Creating summary statistics of the spreadsheet");
    $self->_assembly_statistics->create_summary_output;

    $self->logger->info("Creating tab files for R");
    $self->_number_of_groups_obj->create_output_files;

    system("create_pan_genome_plots.R") unless ( $self->dont_create_rplots == 1 );

    $self->logger->info("Create EMBL files");
    $self->_create_embl_files;

    my $clusters_not_exceeded = 1;
    if ( $self->output_multifasta_files ) {
        $self->logger->info("Creating files with the nucleotide sequences for every cluster");
        $clusters_not_exceeded = $self->_groups_multifastas_nuc_obj->create_files();
    }

    $self->_delete_intermediate_files;
    if ( $clusters_not_exceeded == 0 && $self->output_multifasta_files ) {
        $self->logger->error("Exiting early because number of clusters is too high");
        exit();
    }
}

sub _build__assembly_statistics {
    my ($self) = @_;
    return Bio::Roary::AssemblyStatistics->new(
        spreadsheet     => $self->_group_statistics_obj->output_filename,
        core_definition => $self->core_definition,
        logger          => $self->logger
    );
}

sub _build__accessory_clustering {
    my ($self) = @_;
    if ( ( -e $self->_accessory_binary_fasta->output_filename ) && ( -s $self->_accessory_binary_fasta->output_filename > 5 ) ) {
        $self->logger->info( $self->_accessory_binary_fasta->output_filename );
        return Bio::Roary::AccessoryClustering->new(
            input_file => $self->_accessory_binary_fasta->output_filename,
            cpus       => $self->cpus,
            logger     => $self->logger
        );
    }
    else {
        $self->logger->info("Theres no accessory binary file so skipping accessory binary clustering");
        return undef;
    }

}

sub _build__accessory_binary_tree {
    my ($self) = @_;
    return Bio::Roary::External::Fasttree->new(
        input_file => $self->_accessory_binary_fasta->output_filename,
        verbose    => $self->verbose,
        logger     => $self->logger
    );
}

sub _build__accessory_binary_fasta {
    my ($self) = @_;
    return Bio::Roary::AccessoryBinaryFasta->new(
        input_files         => $self->fasta_files,
        annotate_groups_obj => $self->_annotate_groups_obj,
        analyse_groups_obj  => $self->_analyse_groups_obj,
        logger              => $self->logger
    );
}

sub _build__split_groups_obj {
    my ($self) = @_;
    return Bio::Roary::SplitGroups->new(
        groupfile   => $self->_output_inflate_unsplit_clusters_filename,
        gff_files   => $self->input_files,
        fasta_files => $self->fasta_files,
        outfile     => $self->_output_inflate_clusters_filename,
        dont_delete => $self->dont_delete_files,
        logger      => $self->logger
    );



( run in 0.824 second using v1.01-cache-2.11-cpan-5a3173703d6 )