Mercurial > repos > dereeper > roary_plots
comparison Roary/lib/Bio/Roary/Output/GroupMultifasta.pm @ 0:c47a5f61bc9f draft
Uploaded
author | dereeper |
---|---|
date | Fri, 14 May 2021 20:27:06 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:c47a5f61bc9f |
---|---|
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 |