#!/usr/bin/perl # Description: Extract a genome sequences using the GenomeAtlas 3.0 WSDL getSeq operation, and submit sequences to RNAmmer services to predict rRNA genes. # Author: Peter Fischer Hallin # Email: pfh@cbs.dtu.dk # Version: 1.2a # Date: 2007-01-27 use SOAP::Lite; use Data::Dumper; # create SOAP services entry points my $getseq = SOAP::Lite -> service('http://www.cbs.dtu.dk/ws/GenomeAtlas/GenomeAtlas_3_3.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 $rnammer = SOAP::Lite -> service('http://www.cbs.dtu.dk/ws/RNAmmer/RNAmmer_1_2a.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"; } ); # input parameters for retrieving the sequence information my $input = SOAP::Data->name( 'parameters' => \SOAP::Data->value( SOAP::Data->name('accession' => "L43967") ) ); # method which will retrieve the sequences die "unable to fetch sequence\n" unless my $sequences = $getseq -> getSeq($input); my @SEQ_REQUEST; my ($seq,$ident) = ($sequences->{contig}->{sequencedata}->{sequence}->{seq},$sequences->{contig}->{sequencedata}->{sequence}->{id}); push @SEQ_REQUEST , ( SOAP::Data->name('entry' => \SOAP::Data->value( SOAP::Data->name('ident' => $ident) , SOAP::Data->name('seq' => $seq) ))) ; #input for finding signaling peptides $input = SOAP::Data->name( 'parameters' => \SOAP::Data->value( SOAP::Data->name('kingdom' => "bac"), SOAP::Data->name('sequences' => \SOAP::Data->value(@SEQ_REQUEST)) ) ); my $job = $rnammer->runService($input); # this method returns a jobid, which can be used to get the results later my $jobid = SOAP::Data->name( 'job' => \SOAP::Data->value( SOAP::Data->name('jobid' => $job->{jobid}) )); #set a loop for checking job status $job = $rnammer -> pollQueue($jobid); while ($job->{status} !~ /FINISHED/) { print "The job is: $job->{status}\n"; $job = $rnammer->pollQueue($jobid); sleep 5; } my $out = $rnammer->fetchResult($jobid); my @RESULT; if (ref ( $out->{entries}->{entry} ) eq 'ARRAY') { @RESULT = @{$out->{entries}->{entry}}; } else { @RESULT = ( $out->{entries}->{entry}); } foreach my $gene (@RESULT) { print join("\t",($gene->{sequenceEntry},$gene->{start},$gene->{stop},$gene->{direction},$gene->{feature},$gene->{score}))."\n"; }