Filename | /Users/ap13/pathogens/Roary/lib/Bio/Roary/InflateClusters.pm |
Statements | Executed 42071 statements in 90.1ms |
Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
---|---|---|---|---|---|
1 | 1 | 1 | 85.9ms | 172ms | inflate | Bio::Roary::InflateClusters::
485 | 1 | 1 | 4.90ms | 37.0ms | _inflate_gene | Bio::Roary::InflateClusters::
410 | 1 | 1 | 3.59ms | 40.6ms | _inflate_line | Bio::Roary::InflateClusters::
1 | 1 | 1 | 136µs | 5.78ms | BEGIN@20 | Bio::Roary::InflateClusters::
1 | 1 | 1 | 39µs | 4.17ms | BEGIN@19 | Bio::Roary::InflateClusters::
1 | 1 | 1 | 33µs | 64µs | _build__mcl_fh | Bio::Roary::InflateClusters::
1 | 1 | 1 | 19µs | 392µs | _build__output_fh | Bio::Roary::InflateClusters::
1 | 1 | 1 | 11µs | 116µs | BEGIN@106 | Bio::Roary::InflateClusters::
Line | State ments |
Time on line |
Calls | Time in subs |
Code |
---|---|---|---|---|---|
1 | package Bio::Roary::InflateClusters; | ||||
2 | |||||
3 | # ABSTRACT: Take the clusters file from cd-hit and use it to inflate the output of MCL | ||||
4 | |||||
5 | =head1 SYNOPSIS | ||||
6 | |||||
7 | Take the clusters file from cd-hit and use it to inflate the output of MCL | ||||
8 | use Bio::Roary::InflateClusters; | ||||
9 | |||||
10 | my $obj = Bio::Roary::InflateClusters->new( | ||||
11 | clusters_filename => 'example.clstr', | ||||
12 | mcl_filename => 'example.mcl', | ||||
13 | output_file => 'example.output' | ||||
14 | ); | ||||
15 | $obj->inflate; | ||||
16 | |||||
17 | =cut | ||||
18 | |||||
19 | 2 | 46µs | 2 | 8.30ms | # spent 4.17ms (39µs+4.13) within Bio::Roary::InflateClusters::BEGIN@19 which was called:
# once (39µs+4.13ms) by Bio::Roary::PostAnalysis::BEGIN@13 at line 19 # spent 4.17ms making 1 call to Bio::Roary::InflateClusters::BEGIN@19
# spent 4.13ms making 1 call to Moose::import |
20 | 2 | 618µs | 1 | 5.78ms | # spent 5.78ms (136µs+5.64) within Bio::Roary::InflateClusters::BEGIN@20 which was called:
# once (136µs+5.64ms) by Bio::Roary::PostAnalysis::BEGIN@13 at line 20 # spent 5.78ms making 1 call to Bio::Roary::InflateClusters::BEGIN@20 |
21 | 1 | 3µs | 1 | 20.8ms | with 'Bio::Roary::ClustersRole'; # spent 20.8ms making 1 call to Moose::with |
22 | |||||
23 | 1 | 3µs | 1 | 1.63ms | has 'mcl_filename' => ( is => 'ro', isa => 'Str', required => 1 ); # spent 1.63ms making 1 call to Moose::has |
24 | 1 | 2µs | 1 | 1.60ms | has 'output_file' => ( is => 'ro', isa => 'Str', default => 'inflated_results' ); # spent 1.60ms making 1 call to Moose::has |
25 | 1 | 2µs | 1 | 1.54ms | has '_mcl_fh' => ( is => 'ro',lazy => 1, builder => '_build__mcl_fh' ); # spent 1.54ms making 1 call to Moose::has |
26 | 1 | 2µs | 1 | 1.52ms | has '_output_fh' => ( is => 'ro',lazy => 1, builder => '_build__output_fh' ); # spent 1.52ms making 1 call to Moose::has |
27 | 1 | 2µs | 1 | 3.36ms | has 'cdhit_groups_filename' => ( is => 'ro', isa => 'Maybe[Str]' ); # spent 3.36ms making 1 call to Moose::has |
28 | |||||
29 | sub _build__output_fh | ||||
30 | # spent 392µs (19+373) within Bio::Roary::InflateClusters::_build__output_fh which was called:
# once (19µs+373µs) by Bio::Roary::InflateClusters::_output_fh at line 11 of (eval 25)[Eval/Closure.pm:125] | ||||
31 | 3 | 387µs | my($self) = @_; | ||
32 | 2 | 373µs | open(my $fh, '>', $self->output_file) or Bio::Roary::Exceptions::CouldntWriteToFile->throw( error => 'Cant write to file: ' . $self->output_file ); # spent 369µs making 1 call to Bio::Roary::InflateClusters::CORE:open
# spent 4µs making 1 call to Bio::Roary::InflateClusters::output_file | ||
33 | return $fh; | ||||
34 | } | ||||
35 | |||||
36 | sub _build__mcl_fh | ||||
37 | # spent 64µs (33+31) within Bio::Roary::InflateClusters::_build__mcl_fh which was called:
# once (33µs+31µs) by Bio::Roary::InflateClusters::_mcl_fh at line 11 of (eval 25)[Eval/Closure.pm:125] | ||||
38 | 3 | 57µs | my($self) = @_; | ||
39 | 2 | 31µs | open(my $fh, $self->mcl_filename) or Bio::Roary::Exceptions::FileNotFound->throw( error => 'Cant open file: ' . $self->mcl_filename ); # spent 27µs making 1 call to Bio::Roary::InflateClusters::CORE:open
# spent 5µs making 1 call to Bio::Roary::InflateClusters::mcl_filename | ||
40 | return $fh; | ||||
41 | } | ||||
42 | |||||
43 | sub _inflate_line | ||||
44 | # spent 40.6ms (3.59+37.0) within Bio::Roary::InflateClusters::_inflate_line which was called 410 times, avg 99µs/call:
# 410 times (3.59ms+37.0ms) by Bio::Roary::InflateClusters::inflate at line 77, avg 99µs/call | ||||
45 | 2945 | 3.06ms | my($self, $line) = @_; | ||
46 | my @inflated_genes; | ||||
47 | chomp($line); | ||||
48 | my @gene_names = split(/[\t\s]+/, $line); | ||||
49 | for my $gene_name (@gene_names) | ||||
50 | { | ||||
51 | 485 | 37.0ms | push(@inflated_genes, $self->_inflate_gene($gene_name)); # spent 37.0ms making 485 calls to Bio::Roary::InflateClusters::_inflate_gene, avg 76µs/call | ||
52 | } | ||||
53 | return join(' ',@inflated_genes); | ||||
54 | } | ||||
55 | |||||
56 | sub _inflate_gene | ||||
57 | # spent 37.0ms (4.90+32.1) within Bio::Roary::InflateClusters::_inflate_gene which was called 485 times, avg 76µs/call:
# 485 times (4.90ms+32.1ms) by Bio::Roary::InflateClusters::_inflate_line at line 51, avg 76µs/call | ||||
58 | 2588 | 3.83ms | my($self, $gene_name) = @_; | ||
59 | my $inflated_gene = $gene_name; | ||||
60 | 485 | 30.9ms | if(defined($self->_clustered_genes->{$gene_name})) # spent 30.9ms making 485 calls to Bio::Roary::InflateClusters::_clustered_genes, avg 64µs/call | ||
61 | { | ||||
62 | 324 | 578µs | $inflated_gene = $inflated_gene."\t". join("\t",@{$self->_clustered_genes->{$gene_name}}); # spent 578µs making 324 calls to Bio::Roary::InflateClusters::_clustered_genes, avg 2µs/call | ||
63 | 324 | 576µs | delete($self->_clustered_genes->{$gene_name}); # spent 576µs making 324 calls to Bio::Roary::InflateClusters::_clustered_genes, avg 2µs/call | ||
64 | } | ||||
65 | return $inflated_gene; | ||||
66 | } | ||||
67 | |||||
68 | sub inflate | ||||
69 | # spent 172ms (85.9+86.1) within Bio::Roary::InflateClusters::inflate which was called:
# once (85.9ms+86.1ms) by Bio::Roary::PostAnalysis::run at line 64 of lib/Bio/Roary/PostAnalysis.pm | ||||
70 | 36518 | 82.0ms | my($self) = @_; | ||
71 | 1 | 86µs | my $mcl_fh = $self->_mcl_fh; # spent 86µs making 1 call to Bio::Roary::InflateClusters::_mcl_fh | ||
72 | |||||
73 | # Inflate genes from cdhit which were sent to mcl | ||||
74 | 1 | 12µs | while(<$mcl_fh>) # spent 12µs making 1 call to Bio::Roary::InflateClusters::CORE:readline | ||
75 | { | ||||
76 | my $line = $_; | ||||
77 | 1640 | 42.3ms | print { $self->_output_fh } $self->_inflate_line($line) . "\n"; # spent 40.6ms making 410 calls to Bio::Roary::InflateClusters::_inflate_line, avg 99µs/call
# spent 1.22ms making 410 calls to Bio::Roary::InflateClusters::_output_fh, avg 3µs/call
# spent 322µs making 410 calls to Bio::Roary::InflateClusters::CORE:print, avg 785ns/call
# spent 216µs making 410 calls to Bio::Roary::InflateClusters::CORE:readline, avg 528ns/call | ||
78 | } | ||||
79 | |||||
80 | #Â Inflate any clusters that were in the clusters file but not sent to mcl | ||||
81 | 1 | 3µs | for my $gene_name(keys %{$self->_clustered_genes}) # spent 3µs making 1 call to Bio::Roary::InflateClusters::_clustered_genes | ||
82 | { | ||||
83 | 161 | 340µs | next unless(defined($self->_clustered_genes->{$gene_name})); # spent 340µs making 161 calls to Bio::Roary::InflateClusters::_clustered_genes, avg 2µs/call | ||
84 | print { $self->_output_fh } $gene_name."\t". join("\t",@{$self->_clustered_genes->{$gene_name}})."\n"; | ||||
85 | } | ||||
86 | |||||
87 | 1 | 5µs | if(defined($self->cdhit_groups_filename)) # spent 5µs making 1 call to Bio::Roary::InflateClusters::cdhit_groups_filename | ||
88 | { | ||||
89 | #Â Add clusters which were excluded because the groups were full at the cdhit stage | ||||
90 | 2 | 40µs | open(my $cdhit_fh, $self->cdhit_groups_filename) or Bio::Roary::Exceptions::FileNotFound->throw( error => "CD hit group file not found: " . $self->cdhit_groups_filename); # spent 38µs making 1 call to Bio::Roary::InflateClusters::CORE:open
# spent 2µs making 1 call to Bio::Roary::InflateClusters::cdhit_groups_filename | ||
91 | 1 | 19µs | while(<$cdhit_fh>) # spent 19µs making 1 call to Bio::Roary::InflateClusters::CORE:readline | ||
92 | { | ||||
93 | my $line = $_; | ||||
94 | |||||
95 | 53292 | 42.9ms | if(defined($line)) # spent 27.0ms making 17764 calls to Bio::Roary::InflateClusters::_output_fh, avg 2µs/call
# spent 8.92ms making 17764 calls to Bio::Roary::InflateClusters::CORE:readline, avg 502ns/call
# spent 7.03ms making 17764 calls to Bio::Roary::InflateClusters::CORE:print, avg 396ns/call | ||
96 | { | ||||
97 | print { $self->_output_fh } $line ; | ||||
98 | } | ||||
99 | } | ||||
100 | } | ||||
101 | |||||
102 | 2 | 292µs | close($self->_output_fh); # spent 290µs making 1 call to Bio::Roary::InflateClusters::CORE:close
# spent 2µs making 1 call to Bio::Roary::InflateClusters::_output_fh | ||
103 | 1; | ||||
104 | } | ||||
105 | |||||
106 | 2 | 45µs | 2 | 221µs | # spent 116µs (11+105) within Bio::Roary::InflateClusters::BEGIN@106 which was called:
# once (11µs+105µs) by Bio::Roary::PostAnalysis::BEGIN@13 at line 106 # spent 116µs making 1 call to Bio::Roary::InflateClusters::BEGIN@106
# spent 105µs making 1 call to Moose::unimport |
107 | 1 | 8µs | 2 | 20.2ms | __PACKAGE__->meta->make_immutable; # spent 20.2ms making 1 call to Class::MOP::Class::make_immutable
# spent 15µs making 1 call to Bio::Roary::InflateClusters::meta |
108 | |||||
109 | 1 | 42µs | 1; |