Raw content of Bio::EnsEMBL::Analysis::Runnable::ProteinAnnotation::Hmmpfam =pod =head1 NAME Bio::EnsEMBL::Analysis::Runnable::Protein::Hmmpfam =head1 SYNOPSIS # something like this my $query = new Bio::Seq(-file => $queryfile, -format => 'Fasta'); my $hmm = Bio::EnsEMBL::Pipeline::Runnable::Protein::Hmmpfam->new ('-query' => $query, '-program' => 'hmmpfam' or '/usr/local/pubseq/bin/hmmpfam', '-database' => '/data/Pfam_ls'); $hmm->run; my @results = @{$hmm->output}; =head1 DESCRIPTION =head1 APPENDIX =cut package Bio::EnsEMBL::Analysis::Runnable::ProteinAnnotation::Hmmpfam; use vars qw(@ISA); use strict; use Bio::EnsEMBL::Utils::Exception qw(throw warning); use Bio::EnsEMBL::Analysis::Runnable::ProteinAnnotation; @ISA = qw(Bio::EnsEMBL::Analysis::Runnable::ProteinAnnotation); sub multiprotein{ my ($self) = @_; return 1; } sub run_analysis { my ($self) = @_; my $options = ""; if (defined($self->options)) { $options .= $self->options; } if ($options !~ /\-\-acc/) { $options .= ' --acc'; } if ($options !~ /\-\-cpu/) { $options .= ' --cpu 1'; } my $cmd = $self->program . ' ' . $options . ' ' . $self->database . ' ' . $self->queryfile .' > '. $self->resultsfile; print STDERR "Running:$cmd\n"; throw ("Error running ".$self->program." on ". $self->queryfile." against ".$self->database)unless ((system ($cmd)) == 0); } =head2 parse_results Title : parse_results Usage : $self->parse_results ($filename) Function : parses program output to give a set of features Example : Returns : Args : filename (optional, can be filename, filehandle or pipe, not implemented) Throws : =cut sub parse_results { my ($self) = @_; my (@hits, $id); my $f = $self->resultsfile; if (-e $f and not -z $f) { my $fh; open ($fh, "<$f") or throw ("Error opening $f"); while (<$fh>) { chomp; #last if /^Alignments of top-scoring domains/; #next if (/^Model/ || /^\-/ || /^$/); if (/^Query sequence:\s+(\S+)/) { $id = $1; next; } if (my ($hid, $start, $end, $hstart, $hend, $score, $evalue) = /^(\S+)\s+\d+\/\d+\s+(\d+)\s+(\d+)\s+\S+\s+(\d+)\s+(\d+)\s+\S+\s+(\S+)\s+(\S+)/) { $evalue = sprintf ("%.3e", $evalue); my $fp = $self->create_protein_feature($start, $end, $score, $id, $hstart, $hend, $hid, $self->analysis, $evalue, 0); push @hits, $fp; } } } $self->output(\@hits); } 1;