#!/usr/bin/perl # Description: Use eFetch to retrieve a protein sequence given its id and predict if it's a signalling peptide # Author: Francisco Roque # Email: chico@cbs.dtu.dk # Version: SignalP 3.1 # Date: 2008-01-23 # test with sequence Q9BS26 use SOAP::Lite; # create SOAP services entry points my $efetch = SOAP::Lite -> service('http://www.ncbi.nlm.nih.gov/entrez/eutils/soap/efetch.wsdl') ->on_fault( sub { my($self, $res) = @_; die "faultcode:", ref $res ? $res->faultcode : $self->transport->status, "\n" , "faultstring:", ref $res ? $res->faultstring : $self->transport->status, "\n"; } ); my $signalp = SOAP::Lite -> service('http://www.cbs.dtu.dk/ws/SignalP/SignalP_3_1.wsdl') ->on_fault( sub { my($self, $res) = @_; die "faultcode:", ref $res ? $res->faultcode : $self->transport->status, "\n" , "faultstring:", ref $res ? $res->faultstring : $self->transport->status, "\n"; } ); my $protid = shift; # method which will retrieve the sequences my $sequence = $efetch -> run_eFetch( SOAP::Data->name(db => "protein"), SOAP::Data->name(id => $protid)); print "Got sequence ".$sequence->{GBSeq}->{'GBSeq_primary-accession'}."\n"; # build the sequences array which will serve as input for SignalP my @SEQUENCES; my ($seq,$ident) = ($sequence->{GBSeq}->{GBSeq_sequence}, $sequence->{GBSeq}->{'GBSeq_primary-accession'}); push @SEQUENCES , ( SOAP::Data->name('entry' => \SOAP::Data->value( SOAP::Data->name('ident' => "SEQ$nameid") , SOAP::Data->name('seq' => $seq) ))) ; #input for finding signaling peptides $input = SOAP::Data->name( 'parameters' => \SOAP::Data->value( SOAP::Data->name('organism' => "euk"), SOAP::Data->name('sequences' => \SOAP::Data->value(@SEQUENCES)) ) ); # this method returns a jobid, which can be used to get the results later my $job = $signalp -> runService($input); my $jobid = SOAP::Data->name( 'job' => \SOAP::Data->value( SOAP::Data->name('jobid' => $job->{jobid}) )); print "SignalP service launched with jobid: $job->{jobid}\n"; #set a loop for checking job status $job = $signalp -> pollQueue($jobid); while ($job->{status} !~ /FINISHED/) { print "The job is: $job->{status}\n"; $job = $signalp->pollQueue($jobid); sleep 5; } print "The job is: $job->{status}, fetching results\n"; #when job is done fetch results my $signalout = $signalp->fetchResult($jobid); if (ref ( $signalout->{prediction}->{gff_record} ) eq 'ARRAY') { @SIGNALOUT = @{$signalout->{prediction}->{gff_record}}; } else { @SIGNALOUT = ($signalout->{prediction}->{gff_record}); } #get the predicted peptides' sequence foreach $prediction (@SIGNALOUT) { #if predicted as signal peptide if ($prediction->{comment} =~ /Y/) { print "seqname: $sequence->{GBSeq}->{'GBSeq_primary-accession'}\n"; print "score: $prediction->{score}\n"; print "seq: ".uc($sequence->{GBSeq}->{GBSeq_sequence})."\n"; print "start: $prediction->{start}\n"; print "end: $prediction->{end}\n"; } };