Bio-Polloc
view release on metacpan or search on metacpan
lib/Bio/Polloc/Rule/repeat.pm view on Meta::CPAN
=head2 stringify_value
Produces a readable string containing the value of the rule.
=cut
sub stringify_value {
my ($self,@args) = @_;
my $out = "";
for my $k (keys %{$self->value}){
$out.= "$k=>".(defined $self->value->{$k} ? $self->value->{$k} : "")." ";
}
return $out;
}
=head2 value
Implements the C<_qualify_value()> from the L<Bio::Polloc::RuleI> interface
=head3 Arguments
Value (str or ref-to-hash or ref-to-array). The supported keys are:
=over
=item -res I<float>
Resolution (allowed error)
=item -minsize I<int>
Minimum size of the repeat
=item -maxsize I<int>
Maximum size of the repeat
=item -minperiod I<float>
Minimum period of the repeat
=item -maxperiod I<float>
Maximum period of the repeat
=item -exp I<float>
Minimum exponent (number of repeats)
=item -allowsmall I<bool (int)>
If true, allows spurious results
=item -win I<float>
Process by sliding windows of size C<2*n> overlaping by C<n>
=item -minsim I<float>
Minimum similarity percent
=item -maxsim I<float>
Maximum similarity percent
=back
=head3 Return
Value (I<hashref> or C<undef>).
=head1 INTERNAL METHODS
Methods intended to be used only within the scope of Bio::Polloc::*
=head2 _calculate_consensus
Attempts to calculate the consensus of the repeat units.
=head3 Arguments
The repetitive sequence with repeat units separated by spaces (I<str>).
=head3 Returns
The consensus sequence (I<str>)
=cut
sub _calculate_consensus {
my($self,$seq) = @_;
return unless $seq;
my $io = Bio::Polloc::Polloc::IO->new();
my $emma = $io->exists_exe("emma");
my $cons = $io->exists_exe("cons");
return "no-emma" unless $emma;
return "no-cons" unless $cons;
my ($outseq_fh, $outseq) = $io->tempfile;
my $i=0;
print $outseq_fh ">".(++$i)."\n$_\n" for split /\s+/, $seq;
close $outseq_fh;
return "err-seq" unless -s $outseq;
my $outaln = "$outseq.aln";
my $emmarun = Bio::Polloc::Polloc::IO->new(-file=>"$emma '$outseq' '$outaln' '/dev/null' -auto >/dev/null |");
while($emmarun->_readline){ print STDERR $_ }
$emmarun->close();
unless(-s $outaln){
unlink $outaln if -e $outaln;
return "err-aln";
}
my $consout = "";
my $consrun = Bio::Polloc::Polloc::IO->new(-file=>"$cons '$outaln' stdout -auto |");
while(my $ln = $consrun->_readline){
chomp $ln;
next if $ln =~ /^>/;
$consout .= $ln;
}
unlink $outaln;
$consrun->close();
$io->close();
return $consout;
}
=head2 _parameters
( run in 0.637 second using v1.01-cache-2.11-cpan-ceb78f64989 )