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 )