ora

 view release on metacpan or  search on metacpan

scripts/or.pl  view on Meta::CPAN

use Getopt::Long;
use File::Basename qw/ dirname /;
use Cwd qw/ abs_path /;
use Bio::Seq;
use Bio::SeqIO;
use Bio::ORA;

#----------------------------------------------------------
my $VERSION = '2.0';

#----------------------------------------------------------
sub hmm_disc
{
    my (
        $seq,    $name,   $id,  $translate, $evalue,
        $format, $detail, $aug, $hmm,       $filter,
        $frag,   $subset, $organism
       ) = @_;
    my $chrom;
    if    (defined $name)            { $chrom = $name . q{_} . $id; }
    elsif (defined $seq->display_id) { $chrom = $seq->display_id; }
    else                             { $chrom = 'noname_' . $id; }
    $seq->display_id($chrom);
    my $ora_obj = Bio::ORA->new($seq, $translate, $aug, $hmm);
    $ora_obj->{'_frag'} = $frag if (defined $frag);

    if (
        $ora_obj->find($evalue)
        && (
            !(defined $filter)
            || (   (defined $filter)
                && (substr($ora_obj->{'_hmmor'}[1], 2) == $filter))
           )
       )
    {

        if (defined $subset)
        {
            my $out =
              Bio::SeqIO->new('-format' => 'fasta', '-file' => ">>$subset");
            $out->write_seq($seq);
        }
        $ora_obj->show($format, $detail, $organism);
    }
    return $ora_obj->{'_verbose'};
}

sub fasta_filter
{
    my (
        $seq,    $ref,    $id,  $translate, $evalue,
        $format, $detail, $aug, $hmm,       $filter,
        $frag,   $subset, $organism
       ) = @_;
    my $mess = '* FASTA search for ' . $seq->display_id . "\n";
    my @hits = Bio::ORA->getHits($seq, 1, $ref);
    if ($#hits >= 0)
    {
        for (my $i = 0 ; $i <= $#hits ; $i++)
        {
            my ($hitstrand, $hitstart, $hitend) = split m/\|/, $hits[$i];
            my $seqstart = $hitstart - 250;
            $seqstart = 1 if ($seqstart < 1);
            my $seqend = $hitend + 250;
            $seqend = $seq->length() if ($seqend > $seq->length());
            my $seq_or = Bio::Seq->new(
                                  -seq      => $seq->subseq($seqstart, $seqend),
                                  -alphabet => 'dna',
                                  -id       => $seq->display_id . ":$seqstart-$seqend"
                                      );
            my $ora_obj = Bio::ORA->new($seq_or, $translate, $aug, $hmm);
            $ora_obj->{'_frag'} = $frag if (defined $frag);

            if (
                $ora_obj->find($evalue, $hitstrand, $seqstart, $seqend)
                && (
                    !(defined $filter)
                    || (   (defined $filter)
                        && (substr($ora_obj->{'_hmmor'}[1], 2) == $filter))
                   )
               )
            {

                if (defined $subset)
                {
                    my $out =
                      Bio::SeqIO->new('-format' => 'fasta',
                                      '-file'   => ">>$subset");
                    $out->write_seq($seq_or);
                }
                $ora_obj->show($format, $detail, $organism);
            }
            $mess .= q{ } . $ora_obj->{'_verbose'};
        }
    }
    else { $mess = '* No FASTA hit for ' . $seq->display_id . "\n"; }
    return $mess;
}

#------------------------ Main ----------------------------
my (
    $infile, $translate, $name,   $filter, $subset,
    $aug,    $frag,      $resume, $organism
   );
my ($evalue, $contigs, $verbose, $detail, $format, $out, $hmm, $ref) = (
                                   1e-10, 0, 0, 0, 'fasta', 1,
                                   abs_path(dirname(abs_path($0)) . '/or.hmm'),
                                   abs_path(dirname(abs_path($0)) . '/or.fasta')
                                                                       );
GetOptions(
           'sequence:s'  => \$infile,
           'hmmfile:s'   => \$hmm,
           'fastafile:s' => \$ref,
           'organism:s'  => \$organism,
           'c!'          => \$contigs,
           'a!'          => \$aug,
           'format:s'    => \$format,
           'expect:f'    => \$evalue,
           'name:s'      => \$name,
           'table:i'     => \$translate,
           'filter:i'    => \$filter,



( run in 0.756 second using v1.01-cache-2.11-cpan-71847e10f99 )