Bio-MUST-Core
view release on metacpan or search on metacpan
lib/Bio/MUST/Core/SeqMask.pm view on Meta::CPAN
package Bio::MUST::Core::SeqMask;
# ABSTRACT: Sequence mask for selecting specific sites
# CONTRIBUTOR: Catherine COLSON <ccolson@doct.uliege.be>
# CONTRIBUTOR: Raphael LEONARD <rleonard@doct.uliege.be>
$Bio::MUST::Core::SeqMask::VERSION = '0.252040';
use Moose;
use namespace::autoclean;
use autodie;
use feature qw(say);
# use Smart::Comments '###';
use Carp;
use File::Basename;
use IPC::System::Simple qw(system);
use List::AllUtils 0.08 qw(uniq max sum natatime first_index last_index pairmap mesh bundle_by);
use Path::Class qw(file);
use POSIX qw(ceil floor);
use Bio::MUST::Core::Types;
use Bio::MUST::Core::Constants qw(:gaps :files);
use Bio::MUST::Core::Utils qw(change_suffix);
use aliased 'Bio::MUST::Core::Seq';
use aliased 'Bio::MUST::Core::Ali';
use aliased 'Bio::MUST::Core::IdList';
with 'Bio::MUST::Core::Roles::Commentable';
# public array
# Note: mask methods use the 0-based C/Perl array indexing
# ...but block methods encode bounds using the usual 1-based indexing
has 'mask' => (
traits => ['Array'],
is => 'ro',
isa => 'ArrayRef[Bool]',
default => sub { [] },
writer => '_set_mask',
handles => {
mask_len => 'count',
all_states => 'elements',
add_state => 'push',
set_state => 'set',
state_at => 'get',
},
);
sub first_site {
my $self = shift;
return first_index { $_ } $self->all_states;
}
sub last_site {
my $self = shift;
return last_index { $_ } $self->all_states;
}
sub count_sites {
my $self = shift;
my $count = grep { $_ } $self->all_states;
return $count;
( run in 2.191 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )