0
|
1 package Bio::Roary::Output::GroupMultifasta;
|
|
2
|
|
3 # ABSTRACT: Take in a group and create a multifasta file
|
|
4
|
|
5 =head1 SYNOPSIS
|
|
6
|
|
7 Take in a group and create a multifasta file
|
|
8 use Bio::Roary::Output::GroupMultifasta;
|
|
9
|
|
10 my $obj = Bio::Roary::Output::GroupMultifasta->new(
|
|
11 group_name => 'aaa',
|
|
12 analyse_groups => $analyse_groups,
|
|
13 output_filename_base => 'abc'
|
|
14 );
|
|
15 $obj->create_file();
|
|
16
|
|
17 =cut
|
|
18
|
|
19 use Moose;
|
|
20 use Bio::SeqIO;
|
|
21 use Bio::Roary::Exceptions;
|
|
22 use Bio::Roary::AnalyseGroups;
|
|
23
|
|
24 has 'group_name' => ( is => 'ro', isa => 'Str', required => 1 );
|
|
25 has 'analyse_groups' => ( is => 'ro', isa => 'Bio::Roary::AnalyseGroups', required => 1 );
|
|
26 has 'output_filename_base' => ( is => 'ro', isa => 'Str', default => 'output_groups' );
|
|
27 has '_genes' => ( is => 'ro', isa => 'ArrayRef', lazy => 1, builder => '_build__genes' );
|
|
28 has '_output_seq_io' => ( is => 'ro', lazy => 1, builder => '_build__output_seq_io' );
|
|
29
|
|
30 sub _build__output_seq_io {
|
|
31 my ($self) = @_;
|
|
32 my $output_name = $self->output_filename_base . '_' . $self->group_name;
|
|
33 $output_name =~ s!\W!_!g;
|
|
34 $output_name .= '.fa';
|
|
35 return Bio::SeqIO->new( -file => ">" . $output_name, -format => 'Fasta' );
|
|
36 }
|
|
37
|
|
38 sub _build__genes {
|
|
39 my ($self) = @_;
|
|
40 return $self->analyse_groups->_groups_to_genes->{ $self->group_name };
|
|
41 }
|
|
42
|
|
43 sub _lookup_sequence {
|
|
44 my ( $self, $gene, $filename ) = @_;
|
|
45 return undef if(! defined($filename));
|
|
46 my $fasta_obj = Bio::SeqIO->new( -file => $filename, -format => 'Fasta' );
|
|
47 while ( my $seq = $fasta_obj->next_seq() ) {
|
|
48 next unless ( $seq->display_id eq $gene );
|
|
49 return $seq;
|
|
50 }
|
|
51 return undef;
|
|
52 }
|
|
53
|
|
54 sub create_file {
|
|
55 my ($self) = @_;
|
|
56 for my $gene ( @{ $self->_genes } ) {
|
|
57 my $seq = $self->_lookup_sequence( $gene, $self->analyse_groups->_genes_to_file->{$gene} );
|
|
58 next unless ( defined($seq) );
|
|
59 $self->_output_seq_io->write_seq($seq);
|
|
60 }
|
|
61
|
|
62 1;
|
|
63 }
|
|
64
|
|
65 no Moose;
|
|
66 __PACKAGE__->meta->make_immutable;
|
|
67
|
|
68 1;
|
|
69
|