#!/usr/bin/python import sys, time from SOAPpy import WSDL kingdom = sys.argv[1] mol = sys.argv[2] def revcompl(seq): #returns the reverse complement of the DNA revseq = '' for c in seq: revseq = c + revseq revcompseq = '' for base in revseq: if base == 'A': revcompseq += 'T' elif base == 'T': revcompseq += 'A' elif base == 'C': revcompseq += 'G' elif base == 'G': revcompseq += 'C' return revcompseq # create SOAP services entry points RNAmmerWSDL = 'http://www.cbs.dtu.dk/ws/RNAmmer/RNAmmer_1_2a.wsdl' id = "" genome = "" #expect one fasta sequence from stdin for line in sys.stdin: if line == "": break if line.startswith(">"): id = line.rstrip("\n").split(">")[1] pass else: genome = genome + line.rstrip("\n") RmmerProxy = WSDL.Proxy(RNAmmerWSDL) # input for RNAmmer RmmerIn = {'kingdom' : kingdom, 'mol': mol, 'sequences' : {'entry': {'ident': id, 'seq': genome}}} # this method returns a jobid, which can be used to get the results later jobid = RmmerProxy.runService(RmmerIn) print 'RNAmmer service launched with jobid: %s' % jobid.jobid #set a loop for checking job status job = RmmerProxy.pollQueue({'jobid' : jobid.jobid}) while job.status != 'FINISHED': print 'The job is: %s' % job.status job = RmmerProxy.pollQueue({'jobid' : jobid.jobid}) time.sleep(5) print 'Job done, fetching results' #when job is done fetch results result = RmmerProxy.fetchResult({'jobid' : jobid.jobid}) for gene in result.entries.entry: sequence = gene.sequence #if gene.direction == "+": # sequence = genome[int(gene.start)-501:int(gene.start)+500] #else: # sequence = genome[int(gene.stop):int(gene.stop)+500] # sequence = revcompl(sequence) print ">16SrRNA_%s..%s" % (gene.start, gene.stop) for i in range(0,len(sequence),60): print sequence[i:i+60]