Bio-MUST-Core
view release on metacpan or search on metacpan
lib/Bio/MUST/Core/PostPred/Composition.pm view on Meta::CPAN
package Bio::MUST::Core::PostPred::Composition;
# ABSTRACT: Posterior predictive test for compositional bias
$Bio::MUST::Core::PostPred::Composition::VERSION = '0.252040';
use Moose;
use namespace::autoclean;
use autodie;
use feature qw(say);
# use Smart::Comments;
use List::AllUtils qw(sum);
use Tie::IxHash;
use Bio::MUST::Core::Types;
has 'seqs' => (
is => 'ro',
isa => 'Bio::MUST::Core::Ali',
required => 1,
coerce => 1,
handles => [
qw(gapmiss_regex all_seqs)
],
);
# TODO: consider a role if more tests are implemented
# private hash containing compositional biases
# Note: this hash is actually a Tie::IxHash (see builder)
has '_stat_for' => (
traits => ['Hash'],
is => 'ro',
isa => 'HashRef[Num]',
init_arg => undef,
lazy => 1,
builder => '_build_stat_for',
handles => {
all_ids => 'keys',
stat_for => 'get',
},
);
## no critic (ProhibitUnusedPrivateSubroutines)
sub _build_stat_for {
my $self = shift;
my %glb_freq_for;
tie my %seq_freq_for, 'Tie::IxHash';
my $regex = $self->gapmiss_regex;
my $glb_tot = 0;
# loop through seqs to store state freqs
for my $seq ($self->all_seqs) {
my %freq_for;
my $seq_tot = 0;
STATE:
for my $state ($seq->all_states) {
$state = uc $state;
# skip missing/gap states
( run in 0.561 second using v1.01-cache-2.11-cpan-39bf76dae61 )