Skip to content

Commit 3435774

Browse files
committed
Update sbc to take in vienna version
1 parent 5738867 commit 3435774

File tree

2 files changed

+25
-6
lines changed

2 files changed

+25
-6
lines changed

rna-prediction/predict_pm.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ def softmax(x):
6969
return e_x / e_x.sum(axis=0)
7070

7171

72-
def predict(secondary_structure, vienna_version=1, bool_print=True):
72+
def predict(secondary_structure, vienna_version=1, bool_print=True, vienna_path='../../../EteRNABot/eternabot/./RNAfold'):
7373
"""Runs EternaBrain algorithm
7474
7575
Arguments:
@@ -273,7 +273,7 @@ def predict(secondary_structure, vienna_version=1, bool_print=True):
273273
print(reg)
274274
break
275275

276-
level1,m2,solved_sap1 = sbc(secondary_structure,reg)
276+
level1,m2,solved_sap1 = sbc(secondary_structure,reg, vienna_version=vienna_version,vienna_path=path)
277277
level2,m3,solved_sap2 = dsp(secondary_structure,level1,vienna_version=vienna_version,vienna_path=path)
278278
print(level2)
279279
return solved_sap1 or solved_sap2, level2

rna-prediction/sap1.py

+23-4
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,31 @@
55
'''
66

77
import copy
8+
import sys
9+
import re
810
import RNA
911
#from eterna_score import eternabot_score
1012
from difflib import SequenceMatcher
1113
#from eterna_score import eternabot_score
1214
from random import choice
1315
from eterna_score import get_pairmap_from_secstruct
16+
from subprocess import Popen, PIPE, STDOUT
17+
18+
vienna_path='../../../EteRNABot/eternabot/./RNAfold'
19+
20+
def fold(seq, vienna_version=1, vienna_path='../../../EteRNABot/eternabot/./RNAfold'):
21+
if vienna_version == 1:
22+
if sys.version_info[:3] > (3,0):
23+
p = Popen([vienna_path, '-T','37.0'], stdout=PIPE, stdin=PIPE, stderr=STDOUT, encoding='utf8')
24+
else:
25+
p = Popen([vienna_path, '-T','37.0'], stdout=PIPE, stdin=PIPE, stderr=STDOUT)
26+
pair = p.communicate(input=''.join(seq))[0]
27+
formatted = re.split('\s+| \(?\s?',pair)
28+
s = formatted[1]
29+
else:
30+
s, _ = RNA.fold(seq)
31+
return s
32+
1433

1534
def hot_one_state(seq,index,base):
1635
#array = np.zeros(NUM_STATES)
@@ -19,7 +38,7 @@ def hot_one_state(seq,index,base):
1938
return copied_seq
2039

2140

22-
def convert_to_struc(base_seq):
41+
def convert_to_struc(base_seq, vienna_version=1):
2342
str_struc = []
2443
for i in base_seq:
2544
if i == 1:
@@ -31,7 +50,7 @@ def convert_to_struc(base_seq):
3150
elif i == 4:
3251
str_struc.append('C')
3352
struc = ''.join(str_struc)
34-
s,_ = RNA.fold(struc)
53+
s = fold(struc, vienna_version, vienna_path)
3554
return_struc = []
3655
for i in s:
3756
if i == '.':
@@ -134,7 +153,7 @@ def all_same(items):
134153
seq = 'AAAAAGUUUUGAGAAAGAAGUCUGGGGAAAAAAACUUGGGUUUCAAAGGGUGAAAUGGAAAAAAACAUUUCACCCAAAGUUCCUAUCCGAAAAAAAGGAUAGGAGCAAACUUAAAACAAAAA'
135154

136155

137-
def sbc(dot_bracket,seq): # Monte Carlo Tree Search with Depth 1
156+
def sbc(dot_bracket,seq, vienna_version=1, vienna_path='../../../EteRNABot/eternabot/./RNAfold'): # Monte Carlo Tree Search with Depth 1
138157
'''
139158
Mutates individual bases with MCTS
140159
@@ -156,7 +175,7 @@ def sbc(dot_bracket,seq): # Monte Carlo Tree Search with Depth 1
156175
# GAACGCACCUGCCUGUCUGGGUAGCAUGAA GAACUCACCUGCCUGUCUUGGUAGCAUCAA
157176
# global current_seq
158177
current_seq = convert_to_list(seq)
159-
cdb,_ = RNA.fold(seq)
178+
cdb = fold(seq, vienna_version, vienna_path)
160179
current_pm = get_pairmap_from_secstruct(cdb)
161180
for i in range(4):
162181
for location in range(len_puzzle):

0 commit comments

Comments
 (0)