#! /usr/bin/env python # bestPath.py # P.Clote # Computes best path output by Ivan's code import sys,os,misc TAG = 'barrier' N = len(TAG) def aux(filename): D = {}; num = 0; D[num] = [] file = open(filename) line = file.readline() while line: if line[:N] == TAG: num += 1 D[num] = [] else: secstr = line.strip() D[num].append(secstr) line = file.readline() file.close() del D[num] #last line is "barrier", so remove empty last value return D def getBestPath(rna,D): MAXENERGY = sys.maxint INDEX = sys.maxint keys = D.keys() keys.sort() for k in keys: maxenergy = -sys.maxint for secstr in D[k]: energy = misc.energyOfStr(rna,secstr) if energy > maxenergy: maxenergy = energy if maxenergy < MAXENERGY: MAXENERGY = maxenergy INDEX = k return MAXENERGY, D[INDEX] #best path and best energy def main(rna,filename): D = aux(filename) maxenergy, path = getBestPath(rna,D) print "Best path having energy %f" % maxenergy for secstr in path: print secstr if __name__ == '__main__': if len(sys.argv) < 3: print "Usage: %s RNA filename" % sys.argv[0] sys.exit(1) rna = sys.argv[1].upper() filename = sys.argv[2] main(rna,filename)