#!/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
