#!/usr/bin/perl use SOAP::Lite; use strict; # e.g. bac and ssu my ($kingdom,$mol) = @ARGV; 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" , ; }); # read first fasta entry from stdin my $id; my $seq; my $genome = ""; while () { chomp; last if /^>/ and defined $id; $id = $1 if /^>(.*)/; $genome .= $1 if /^([A-Za-z]+)$/; } #input for finding signaling peptides my $input = SOAP::Data->name( 'parameters' => \SOAP::Data->value( SOAP::Data->name('kingdom' => $kingdom), SOAP::Data->name('mol' => $mol), SOAP::Data->name('sequences' => \SOAP::Data->value( SOAP::Data->name('entry' => \SOAP::Data->value( SOAP::Data->name('ident' => $id) , SOAP::Data->name('seq' => $genome))))))); my $job = $rnammer->runService($input); print STDERR "# job submitted with jobid $job->{jobid}\n"; # 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}) )); while (my $jobid = $rnammer->pollQueue($jobid)) { if ( $jobid->{status} eq 'FINISHED' ) { print STDERR "# finished ... \n"; last; } elsif ( $jobid->{status} =~ /ACTIVE|QUEUED/ ) { print STDERR "# status:$jobid->{status}\n"; sleep 2; } else { print STDERR "# unexpected queue status: '$jobid->{status}'\n"; exit 1; } } my $out = $rnammer->fetchResult($jobid); my @RESULT; if (ref ( $out->{entries}->{entry} ) eq 'ARRAY') { @RESULT = @{$out->{entries}->{entry}}; } else { @RESULT = ( $out->{entries}->{entry}); } my @UNITS; foreach my $gene (@RESULT) { my $sequence = $gene->{sequence}; #if ( $gene->{direction} eq "+" ) { # $sequence = substr($genome , ($gene->{start}-501),500); #} else { # $sequence = substr($genome, $gene->{stop},500); # $sequence = revcompl($sequence); #} print ">16SrRNA_$gene->{start}..$gene->{stop}\n"; for ( my $i = 0 ; $i < length($sequence ) ; $i+=60 ) { print substr( $sequence , $i , 60)."\n"; } } sub revcompl { # this function will do the reverse complement of the DNA $_[0] =~ tr/ATGC/TACG/; return reverse $_[0]; }