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 )