import RNA
sequence = "GGGGAAAACCCC"
RNA.cvar.uniq_ML = 1
subopt_data = { 'counter' : 1, 'sequence' : sequence }
def print_subopt_result(structure, energy, data):
if not structure == None:
print ">subopt %d" % data['counter']
print "%s" % data['sequence']
print "%s [%6.2f]" % (structure, energy)
data['counter'] = data['counter'] + 1
a = RNA.fold_compound(sequence)
a.subopt_cb(500, print_subopt_result, subopt_data);
import RNA
seq1 = "CUCGUCGCCUUAAUCCAGUGCGGGCGCUAGACAUCUAGUUAUCGCCGCAA"
RNA.cvar.dangles = 0
mm_data = { 'dummy': RNA.fold_compound(seq1), 'params': RNA.param() }
revert_NN = {
RNA.DECOMP_PAIR_HP: lambda i, j, k, l, f, p: - f.eval_hp_loop(i, j) - 100,
RNA.DECOMP_PAIR_IL: lambda i, j, k, l, f, p: - f.eval_int_loop(i, j, k, l) - 100,
RNA.DECOMP_PAIR_ML: lambda i, j, k, l, f, p: - p.MLclosing - p.MLintern[0] - (j - i - k + l - 2) * p.MLbase - 100,
RNA.DECOMP_ML_ML_STEM: lambda i, j, k, l, f, p: - p.MLintern[0] - (l - k - 1) * p.MLbase,
RNA.DECOMP_ML_STEM: lambda i, j, k, l, f, p: - p.MLintern[0] - (j - i - k + l) * p.MLbase,
RNA.DECOMP_ML_ML: lambda i, j, k, l, f, p: - (j - i - k + l) * p.MLbase,
RNA.DECOMP_ML_UP: lambda i, j, k, l, f, p: - (j - i + 1) * p.MLbase,
RNA.DECOMP_EXT_STEM: lambda i, j, k, l, f, p: - f.E_ext_loop(k, l),
RNA.DECOMP_EXT_STEM_EXT: lambda i, j, k, l, f, p: - f.E_ext_loop(i, k),
RNA.DECOMP_EXT_EXT_STEM: lambda i, j, k, l, f, p: - f.E_ext_loop(l, j),
RNA.DECOMP_EXT_EXT_STEM1: lambda i, j, k, l, f, p: - f.E_ext_loop(l, j-1),
}
def MaximumMatching(i, j, k, l, d, data):
return revert_NN[d](i, j, k, l, data['dummy'], data['params'])
fc = RNA.fold_compound(seq1)
fc.sc_add_f(MaximumMatching)
fc.sc_add_data(mm_data, None)
(s, mm) = fc.mfe()
print "%s\n%s (MM: %d)\n" % (seq1, s, -mm)