Bio-SearchIO-hmmer

 view release on metacpan or  search on metacpan

lib/Bio/SearchIO/hmmer3.pm  view on Meta::CPAN

                }
            }

            # Domain annotation for each sequence table data,
            # for hmmscan, hmmsearch & nhmmer
            elsif (   $buffer =~ /Domain( and alignment)? annotation for each/
                   or $buffer =~ /Annotation for each hit\s+\(and alignments\)/
                   ) {
                @hsp_list = ();    # Here for multi-query reports
                my $name;
                my $annot_counter = 0;

                while ( defined( $buffer = $self->_readline ) ) {
                    if (   $buffer =~ /\[No targets detected/
                        || $buffer =~ /Internal pipeline statistics/ )
                    {
                        $self->_pushback($buffer);
                        last;
                    }

                    if ( $buffer =~ m/^\>\>\s(\S*)\s+(.*)/ ) {
                        $name    = $1;
                        my $desc = $2;
                        $annot_counter++;
                        $domaincounter{"$name.$annot_counter"} = 0;

                        # The Hit Description from the Scores table can be truncated if
                        # its too long, so use the '>>' line description when its longer
                        if (length $hit_list[
                                             $hitinfo{"$name.$annot_counter"}
                                             ]
                                             [1] < length $desc
                            ) {
                            $hit_list[ $hitinfo{"$name.$annot_counter"} ][1] = $desc;
                        }

                        while ( defined( $buffer = $self->_readline ) ) {
                            if (   $buffer =~ m/Internal pipeline statistics/
                                || $buffer =~ m/Alignments for each domain/
                                || $buffer =~ m/^\s+Alignment:/
                                || $buffer =~ m/^\>\>/ )
                            {
                                $self->_pushback($buffer);
                                last;

lib/Bio/SearchIO/hmmer3.pm  view on Meta::CPAN

                                                   .*$|ox
                                             )
                                    ) {
                                    # Values assigned when IF succeeded
                                }
                                else {
                                    print STDERR "Missed this line: $buffer\n";
                                    next;
                                }

                                my $info = $hit_list[ $hitinfo{"$name.$annot_counter"} ];
                                if ( !defined $info ) {
                                    $self->warn(
                                        "Incomplete information: can't find HSP $name in list of hits\n"
                                    );
                                    next;
                                }

                                $domaincounter{"$name.$annot_counter"}++;
                                my $hsp_key
                                    = $name . "_" . $domaincounter{"$name.$annot_counter"};

                                # Keep it simple for now. let's customize later
                                @vals = (
                                    $hmm_start, $hmm_stop,
                                    $seq_start, $seq_stop,
                                    $score,     $ceval,
                                    $hitlength, '',
                                    '',         '',
                                    '',         ''
                                );
                                push @hsp_list, [ $name, @vals ];
                                $hspinfo{"$hsp_key.$annot_counter"} = $#hsp_list;
                            }
                        }
                    }
                    elsif ( $buffer =~ /Alignment(?:s for each domain)?:/ ) {
                        #line counter
                        my $count = 0;

                        # There's an optional block, so we sometimes need to
                        # count to 3, and sometimes to 4.
                        my $max_count = 3;

lib/Bio/SearchIO/hmmer3.pm  view on Meta::CPAN

                                $align_length = 0;
                                next;
                            }

                            if (   $buffer =~ /\s\s\=\=\sdomain\s(\d+)\s+/
                                or $buffer =~ /\s\sscore:\s\S+\s+/
                                ) {
                                my $domainnum = $1 || 1;
                                $count = 0;
                                my $key = $name . "_" . $domainnum;
                                $hsp        = $hsp_list[ $hspinfo{"$key.$annot_counter"} ];
                                $csline     = $$hsp[-5];
                                $hline      = $$hsp[-4];
                                $midline    = $$hsp[-3];
                                $qline      = $$hsp[-2];
                                $pline      = $$hsp[-1];
                                $lastdomain = $name;
                            }
                            # Consensus Structure or Reference track, some reports
                            # don't have it. Since it appears on top of the alignment,
                            # the reset of $align_length to 0 between alignment blocks



( run in 0.212 second using v1.01-cache-2.11-cpan-0a987023a57 )