#!/usr/bin/python import sys import os import random import math RNAFOLD_EXEC = "RNAfold" RNAEVAL_EXEC = "RNAeval" def runRNAFold(seq): (tmpFileOut,tmpFileIn,struct,energy) = ("tmpOut.dat","tmpIn.dat",None,None) inFile = open(tmpFileIn,"w") inFile.write(seq+"\n") inFile.close() os.system("%s > %s < %s"%(RNAFOLD_EXEC,tmpFileOut,tmpFileIn)) lineno = 0 for l in open(tmpFileOut,"r"): if lineno==1: data = l[:-1].split() struct = data[0] energy = float(" ".join(data[1:])[1:-1]) lineno += 1 os.remove("rna.ps") os.remove(tmpFileOut) return (struct,energy) def runRNAEval(seq,struct): tmpFile = "tmp.dat" tmpFileIn = "tmpin.dat" inFile = open(tmpFileIn,"w") inFile.write(seq+"\n"+struct+"\n") inFile.close() energy = None os.system("%s < %s > %s"%(RNAEVAL_EXEC,tmpFileIn,tmpFile)) lineno = 0 for l in open(tmpFile,"r"): if lineno==1: data = l[:-1].split() struct = data[0] energy = float(" ".join(data[1:])[1:-1]) lineno += 1 os.remove(tmpFile) os.remove(tmpFileIn) return energy if __name__ == '__main__': seq = sys.argv[1] print " Input Seq:",seq (struct,dG1) = runRNAFold(seq) print " RNAFold:",struct print " Predicted Energy:",dG1 dG2 = runRNAEval(seq,struct) print " RNAEval:",dG2