#!/usr/bin/perl # Description: Predict the helix topology for a single protein using TMHMM # Author: Peter Fischer Hallin # Email: pfh@cbs.dtu.dk # Version: 2.0,2.0b # Date: 2007-04-02 use SOAP::Lite; use strict; use MIME::Base64 qw(decode_base64); # create SOAP services entry points my $tmhmm = SOAP::Lite -> service('http://www.cbs.dtu.dk/ws/TMHMM/TMHMM_2_0b.wsdl'); my @SEQ_REQUEST; push @SEQ_REQUEST , ( SOAP::Data->name('entry' => \SOAP::Data->value( SOAP::Data->name('ident' => 'seq_0001') , SOAP::Data->name('seq' => 'MEILCEDNTSLSSIPNSLMQVDGDSGLYRNDFNSRDANSSDASNWTIDGENRTNLSFEGYLPPTCLSILHLQEKNWSALLTAVVIILTIAGNILVIMAVSLEKKLQNATNYFLMSLAIADMLLGFLVMPVSMLTILYGYRWPLPSKLCAVWIYLDVLFSTASIMHLCAISLDRYVAIQNPIHHSRFNSRTKAFLKIIAVWTISVGVSMPIPVFGLQDDSKVFKQGSCLLADDNFVLIGSFVAFFIPLTIMVITYFLTIKSLQKEATLCVSDLSTRAKLASFSFLPQSSLSSEKLFQRSIHREPGSYTGRRTMQSISNEQKACKVLGIVFFLFVVMWCPFFITNIMAVICKESCNEHVIGALLNVFVWIGYLSSAVNPLVYTLFNKTYRSAFSRYIQCQYKENRKPLQLILVNTIPALAYKSSQLQAGQNKDSKEDAEPTDNDCSMVTLGKQQSEETCTDNINTVNEKVSCV') ))) ; my $input = SOAP::Data->name( 'parameters' => \SOAP::Data->value( SOAP::Data->name('graphics' => "yes"), SOAP::Data->name('sequences' => \SOAP::Data->value(@SEQ_REQUEST)) ) ); # this method returns a jobid, which can be used to get the results later my $job = $tmhmm -> runService($input); my $jobid = SOAP::Data->name( 'job' => \SOAP::Data->value( SOAP::Data->name('jobid' => $job->{jobid}) )); print STDERR "TMHMM service launched with jobid: $job->{jobid}\n"; #set a loop for checking job status my $job = $tmhmm->pollQueue($jobid); while ($job->{status} !~ /FINISHED|REJECTED|FAILED/) { print STDERR "The job is: $job->{status}\n"; $job = $tmhmm->pollQueue($jobid); sleep 1; } #when job is done fetch results my $out = $tmhmm->fetchResult($jobid); my @RESULT; if (ref ( $out->{entries}->{entry} ) eq 'ARRAY') { @RESULT = @{$out->{entries}->{entry}}; } else { @RESULT = ( $out->{entries}->{entry}); } foreach my $result (@RESULT) { print "sequence: $result->{sequence}\n"; print "PredHel : $result->{PredHel}\n"; my @TOP; if (ref ( $result->{topology}->{entry} ) eq 'ARRAY') { @TOP = @{ $result->{topology}->{entry}}; } else { @TOP = ( $result->{topology}->{entry}); } print "#topology begin\n"; foreach my $top (@TOP) { print "$top->{begin}\t$top->{end}\t$top->{location}\n"; } open PNG , ">seq_0001.png"; binmode PNG; print PNG decode_base64($result->{image}->{content}); close PNG; print "#topology end\n"; }