annotate Roary/lib/Bio/Roary/Output/GroupMultifasta.pm @ 0:c47a5f61bc9f draft

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