Bio-Roary
view release on metacpan or search on metacpan
CHANGELOG.md view on Meta::CPAN
- script to merge multifasta files together [\#65](https://github.com/sanger-pathogens/Roary/pull/65) ([andrewjpage](https://github.com/andrewjpage))
- rename output gene multfastas and pass all sequences through [\#64](https://github.com/sanger-pathogens/Roary/pull/64) ([andrewjpage](https://github.com/andrewjpage))
- Align genes at protein level and back translate to nucleotides [\#63](https://github.com/sanger-pathogens/Roary/pull/63) ([andrewjpage](https://github.com/andrewjpage))
- Depth first search for reordering spreadsheet [\#62](https://github.com/sanger-pathogens/Roary/pull/62) ([andrewjpage](https://github.com/andrewjpage))
- make the iterative cdhit script useful for standalone use [\#61](https://github.com/sanger-pathogens/Roary/pull/61) ([andrewjpage](https://github.com/andrewjpage))
- query\_pan\_genome\_update\_text [\#60](https://github.com/sanger-pathogens/Roary/pull/60) ([andrewjpage](https://github.com/andrewjpage))
- fix failing tests [\#59](https://github.com/sanger-pathogens/Roary/pull/59) ([andrewjpage](https://github.com/andrewjpage))
- Create plot for % blast identity [\#58](https://github.com/sanger-pathogens/Roary/pull/58) ([andrewjpage](https://github.com/andrewjpage))
- add a flag to keep intermediate files [\#57](https://github.com/sanger-pathogens/Roary/pull/57) ([andrewjpage](https://github.com/andrewjpage))
- set the known gene names to black and rest to colours [\#56](https://github.com/sanger-pathogens/Roary/pull/56) ([andrewjpage](https://github.com/andrewjpage))
- print fragment blocks [\#55](https://github.com/sanger-pathogens/Roary/pull/55) ([andrewjpage](https://github.com/andrewjpage))
- Fix ordering of accessory [\#54](https://github.com/sanger-pathogens/Roary/pull/54) ([andrewjpage](https://github.com/andrewjpage))
- fix r plots [\#53](https://github.com/sanger-pathogens/Roary/pull/53) ([andrewjpage](https://github.com/andrewjpage))
- Overlapping proteins [\#52](https://github.com/sanger-pathogens/Roary/pull/52) ([andrewjpage](https://github.com/andrewjpage))
- Gene order [\#51](https://github.com/sanger-pathogens/Roary/pull/51) ([andrewjpage](https://github.com/andrewjpage))
- pass job runner to iterative cdhit [\#50](https://github.com/sanger-pathogens/Roary/pull/50) ([andrewjpage](https://github.com/andrewjpage))
- iterative cdhit in a job [\#49](https://github.com/sanger-pathogens/Roary/pull/49) ([andrewjpage](https://github.com/andrewjpage))
- Fix tests [\#48](https://github.com/sanger-pathogens/Roary/pull/48) ([andrewjpage](https://github.com/andrewjpage))
- Prefilter optimisation [\#47](https://github.com/sanger-pathogens/Roary/pull/47) ([andrewjpage](https://github.com/andrewjpage))
- dont split groups [\#46](https://github.com/sanger-pathogens/Roary/pull/46) ([andrewjpage](https://github.com/andrewjpage))
- rename create plots R script [\#45](https://github.com/sanger-pathogens/Roary/pull/45) ([andrewjpage](https://github.com/andrewjpage))
lib/Bio/Roary/ExtractCoreGenesFromSpreadsheet.pm view on Meta::CPAN
has 'ordered_core_genes' => ( is => 'ro', isa => 'ArrayRef', lazy => 1, builder => '_build_ordered_core_genes' );
has 'core_definition' => ( is => 'ro', isa => 'Num', default => 1 );
has 'sample_names' => ( is => 'rw', isa => 'ArrayRef', default => sub { [] } );
has 'sample_names_to_genes' => ( is => 'rw', isa => 'HashRef', default => sub { {} } );
has 'allow_paralogs' => ( is => 'rw', isa => 'Bool', default => 0 );
has '_number_of_isolates' => ( is => 'rw', isa => 'Int' );
has '_gene_column' => ( is => 'rw', isa => 'Int' );
has '_num_isolates_column' => ( is => 'rw', isa => 'Int' );
has '_avg_sequences_per_isolate_column' => ( is => 'rw', isa => 'Int' );
has '_genome_fragement_column' => ( is => 'rw', isa => 'Int' );
has '_order_within_fragement_column' => ( is => 'rw', isa => 'Int' );
has '_min_no_isolates_for_core' => ( is => 'rw', isa => 'Num', lazy => 1, builder => '_build__min_no_isolates_for_core' );
sub _build__min_no_isolates_for_core {
my ($self) = @_;
my $threshold = $self->_number_of_isolates * $self->core_definition;
return $threshold;
}
sub _build__csv_parser {
lib/Bio/Roary/ExtractCoreGenesFromSpreadsheet.pm view on Meta::CPAN
for my $col_name (%columns_of_interest_mappings) {
if ( $header_row->[$i] eq $col_name ) {
$columns_of_interest_mappings{$col_name} = $i;
last;
}
}
}
$self->_gene_column( $columns_of_interest_mappings{'Gene'} );
$self->_num_isolates_column( $columns_of_interest_mappings{'No. isolates'} );
$self->_avg_sequences_per_isolate_column( $columns_of_interest_mappings{'Avg sequences per isolate'} );
$self->_genome_fragement_column( $columns_of_interest_mappings{'Genome Fragment'} );
$self->_order_within_fragement_column( $columns_of_interest_mappings{'Order within Fragment'} );
$self->_update_number_of_isolates($header_row);
# Get the sample_names
my @sample_names;
for ( my $i = $self->_length_of_fixed_headers() ; $i < @{$header_row} ; $i++ ) {
push( @sample_names, $header_row->[$i] );
}
$self->sample_names( \@sample_names );
}
lib/Bio/Roary/ExtractCoreGenesFromSpreadsheet.pm view on Meta::CPAN
sub _ordered_core_genes {
my ($self) = @_;
my %ordered_genes;
while ( my $row = $self->_csv_parser->getline( $self->_input_spreadsheet_fh ) ) {
next if ( @{$row} < 12 ); # no genes in group
next if ( !defined( $row->[ $self->_gene_column ] ) || $row->[ $self->_gene_column ] eq '' ); # no gene name
next
if ( !defined( $row->[ $self->_avg_sequences_per_isolate_column ] ) || $row->[ $self->_avg_sequences_per_isolate_column ] eq '' )
; # no average
next
if ( !defined( $row->[ $self->_genome_fragement_column ] ) || $row->[ $self->_genome_fragement_column ] eq '' )
; # fragment not defined
# next if($self->_number_of_isolates != $row->[$self->_num_isolates_column]); # if gene is not in all isolates
next if ( $row->[ $self->_num_isolates_column ] < $self->_min_no_isolates_for_core );
if ( $self->allow_paralogs ) {
# should never happen
next if ( $row->[ $self->_avg_sequences_per_isolate_column ] < 1 );
}
else {
next if ( $row->[ $self->_avg_sequences_per_isolate_column ] != 1 );
}
$ordered_genes{ $row->[ $self->_genome_fragement_column ] }{ $row->[ $self->_order_within_fragement_column ] } =
$row->[ $self->_gene_column ];
$self->_populate_sample_to_gene_lookup_with_row($row);
}
my @ordered_core_genes;
for my $fragment_key ( sort { $a <=> $b } keys %ordered_genes ) {
for my $order_within_fragement ( sort { $a <=> $b } keys %{ $ordered_genes{$fragment_key} } ) {
push( @ordered_core_genes, $ordered_genes{$fragment_key}{$order_within_fragement} );
}
}
return \@ordered_core_genes;
}
sub _build_ordered_core_genes {
my ($self) = @_;
my $header_row = $self->_csv_parser->getline( $self->_input_spreadsheet_fh );
$self->_setup_column_mappings($header_row);
lib/Bio/Roary/GroupStatistics.pm view on Meta::CPAN
my $num_sequences_in_group = $#{$genes} + 1;
my $avg_sequences_per_isolate = ceil( ( $num_sequences_in_group / $num_isolates_in_group ) * 100 ) / 100;
my $annotation = $self->annotate_groups_obj->consensus_product_for_id_names($genes);
my $annotated_group_name = $self->annotate_groups_obj->_groups_to_consensus_gene_names->{$group};
my $duplicate_gene_name = $self->_non_unique_name_for_group($annotated_group_name);
my $genome_number = '';
my $qc_comment = '';
my $order_within_fragement = '';
my $accessory_order_within_fragement = '';
my $accessory_genome_number = '';
if(defined($self->groups_to_contigs) && defined($self->groups_to_contigs->{$annotated_group_name}))
{
$genome_number = $self->groups_to_contigs->{$annotated_group_name}->{label};
$qc_comment = $self->groups_to_contigs->{$annotated_group_name}->{comment};
$order_within_fragement = $self->groups_to_contigs->{$annotated_group_name}->{order};
$accessory_genome_number = $self->groups_to_contigs->{$annotated_group_name}->{accessory_label};
$accessory_order_within_fragement = $self->groups_to_contigs->{$annotated_group_name}->{accessory_order};
}
my $group_size = $self->annotate_groups_obj->group_nucleotide_lengths->{$group};
my @row = (
$annotated_group_name, $duplicate_gene_name, $annotation,
$num_isolates_in_group, $num_sequences_in_group, $avg_sequences_per_isolate,$genome_number,$order_within_fragement,$accessory_genome_number,$accessory_order_within_fragement,$qc_comment,$group_size->{min}, $group_size->{max}, $group_size->{av...
);
for(my $i =0; $i < @row; $i++)
{
if(!defined($row[$i]))
{
$row[$i] = '';
}
}
lib/Bio/Roary/Output/EmblGroups.pm view on Meta::CPAN
$colour = $self->_block_colour( $self->groups_to_contigs->{$annotated_group_name}->{accessory_label} );
my $tab_file_entry = "FT$annotation_type$coordindates\n";
$tab_file_entry .= "FT /label=$annotated_group_name\n";
$tab_file_entry .= "FT /locus_tag=$annotated_group_name\n";
$tab_file_entry .= "FT /colour=$colour\n";
return $tab_file_entry;
}
sub _fragment_blocks {
my ( $self, $fh ) = @_;
my %fragment_numbers;
for my $group ( @{ $self->annotate_groups_obj->_groups } ) {
my $annotated_group_name = $self->annotate_groups_obj->_groups_to_consensus_gene_names->{$group};
next unless ( defined( $self->groups_to_contigs->{$annotated_group_name}->{accessory_label} ) );
next unless ( defined( $self->groups_to_contigs->{$annotated_group_name}->{ $self->ordering_key } ) );
next if ( $self->groups_to_contigs->{$annotated_group_name}->{ $self->ordering_key } eq '' );
push(
@{ $fragment_numbers{ $self->groups_to_contigs->{$annotated_group_name}->{accessory_label} } },
$self->groups_to_contigs->{$annotated_group_name}->{ $self->ordering_key }
);
}
for my $accessory_label ( keys %fragment_numbers ) {
next unless ( defined( $fragment_numbers{$accessory_label} ) );
my @sorted_fragment = sort { $a <=> $b } @{ $fragment_numbers{$accessory_label} };
my $tab_file_entry = '';
if ( @sorted_fragment > 1 ) {
my $min = $sorted_fragment[0];
my $max = $sorted_fragment[-1];
next if ( !defined($min) || !defined($max) || $min eq '' || $max eq '' );
$tab_file_entry = "FT feature $min" . '..' . "$max\n";
}
elsif ( @sorted_fragment == 1 ) {
my $min = $sorted_fragment[0];
next if ( !defined($min) || $min eq '' );
$tab_file_entry = "FT feature $min\n";
}
else {
next;
}
$tab_file_entry .= "FT /colour=" . $self->_block_colour($accessory_label) . "\n";
print {$fh} $tab_file_entry;
}
lib/Bio/Roary/Output/EmblGroups.pm view on Meta::CPAN
}
sub create_files {
my ($self) = @_;
print { $self->_output_header_fh } $self->_header_top();
for my $group ( @{ $self->annotate_groups_obj->_groups } ) {
print { $self->_output_fh } $self->_block($group);
print { $self->_output_header_fh } $self->_header_block($group);
}
$self->_fragment_blocks( $self->_output_header_fh );
print { $self->_output_header_fh } $self->_header_bottom();
close( $self->_output_header_fh );
close( $self->_output_fh );
}
no Moose;
__PACKAGE__->meta->make_immutable;
1;
( run in 1.262 second using v1.01-cache-2.11-cpan-364913b4093 )