Louis BECQUEY

Nettoyage + command line tests

...@@ -6,8 +6,6 @@ from math import sqrt, ceil ...@@ -6,8 +6,6 @@ from math import sqrt, ceil
6 import numpy as np 6 import numpy as np
7 import matplotlib.pyplot as plt 7 import matplotlib.pyplot as plt
8 8
9 -
10 -
11 log_path = "test.log" 9 log_path = "test.log"
12 log = open(log_path, 'a') 10 log = open(log_path, 'a')
13 11
...@@ -112,7 +110,7 @@ def get_list_str_by_seq(name, estimator, function, list_str, true_str, modules): ...@@ -112,7 +110,7 @@ def get_list_str_by_seq(name, estimator, function, list_str, true_str, modules):
112 max_mcc = get_mcc_structs_max(path_benchmark, name, estimator, function, extension, modules, true_str) 110 max_mcc = get_mcc_structs_max(path_benchmark, name, estimator, function, extension, modules, true_str)
113 list_str.append(max_mcc) 111 list_str.append(max_mcc)
114 112
115 -# ================== Code from Louis Beckey Benchark.py ============================== 113 +# ================== Code from Louis Becquey Benchark.py ==============================
116 def dbn_to_basepairs(structure): 114 def dbn_to_basepairs(structure):
117 parenthesis = [] 115 parenthesis = []
118 brackets = [] 116 brackets = []
...@@ -199,7 +197,7 @@ def f1_score(tp, tn, fp, fn): ...@@ -199,7 +197,7 @@ def f1_score(tp, tn, fp, fn):
199 def specificity(tp, tn, fp, fn): 197 def specificity(tp, tn, fp, fn):
200 return tn / (tn + fp) 198 return tn / (tn + fp)
201 199
202 -# ================== Code from Louis Beckey Benchark.py ============================== 200 +# ================== Code from Louis Becquey Benchark.py ==============================
203 201
204 #Get the best MCC value for all prediction of the results file of the sequence in argument 202 #Get the best MCC value for all prediction of the results file of the sequence in argument
205 def get_mcc_structs_max(path_benchmark, sequence_id, estimator, function, extension, modules, true_structure): 203 def get_mcc_structs_max(path_benchmark, sequence_id, estimator, function, extension, modules, true_structure):
......
...@@ -9,7 +9,7 @@ CC = g++ ...@@ -9,7 +9,7 @@ CC = g++
9 CFLAGS = -Icppsrc/ -I/usr/local/include -I$(CPLEX)/concert/include -I$(CPLEX)/cplex/include -g -O3 9 CFLAGS = -Icppsrc/ -I/usr/local/include -I$(CPLEX)/concert/include -I$(CPLEX)/cplex/include -g -O3
10 CXXFLAGS = --std=c++17 -Wall -Wpedantic -Wextra -Wno-deprecated-copy -Wno-ignored-attributes 10 CXXFLAGS = --std=c++17 -Wall -Wpedantic -Wextra -Wno-deprecated-copy -Wno-ignored-attributes
11 LINKER = g++ 11 LINKER = g++
12 -LDFLAGS = -L$(CPLEX)/concert/lib/x86-64_linux/static_pic/ -L$(CPLEX)/cplex/lib/x86-64_linux/static_pic/ -lboost_system -lboost_filesystem -lboost_program_options -lgomp -lconcert -lilocplex -lcplex -lpthread -ldl -lRNA -lm 12 +LDFLAGS = -Wno-free-nonheap-object -L$(CPLEX)/concert/lib/x86-64_linux/static_pic/ -L$(CPLEX)/cplex/lib/x86-64_linux/static_pic/ -lboost_system -lboost_filesystem -lboost_program_options -lgomp -lconcert -lilocplex -lcplex -lpthread -ldl -lRNA -lm
13 13
14 # change these to proper directories where each file should be 14 # change these to proper directories where each file should be
15 SRCDIR = cppsrc 15 SRCDIR = cppsrc
...@@ -32,7 +32,7 @@ $(OBJECTS): $(OBJDIR)/%.o : $(SRCDIR)/%.cpp $(INCLUDES) ...@@ -32,7 +32,7 @@ $(OBJECTS): $(OBJDIR)/%.o : $(SRCDIR)/%.cpp $(INCLUDES)
32 @echo -e "\033[00;32mCompiled "$<".\033[00m" 32 @echo -e "\033[00;32mCompiled "$<".\033[00m"
33 33
34 .PHONY: all 34 .PHONY: all
35 -all: $(BINDIR)/$(TARGET) doc 35 +all: $(BINDIR)/$(TARGET)
36 36
37 .PHONY: re 37 .PHONY: re
38 re: remove clean all 38 re: remove clean all
......
...@@ -87,11 +87,6 @@ MOIP::MOIP(const RNA& rna, string source, string source_path, float theta, bool ...@@ -87,11 +87,6 @@ MOIP::MOIP(const RNA& rna, string source, string source_path, float theta, bool
87 } else { 87 } else {
88 index_of_yuv_[u].push_back(rna_.get_RNA_length() * rna_.get_RNA_length() + 1); 88 index_of_yuv_[u].push_back(rna_.get_RNA_length() * rna_.get_RNA_length() + 1);
89 } 89 }
90 - /*for (u = 0; u < index_of_yuv_.size(); u++) {
91 - for (v = 0; v < index_of_yuv_[u].size(); v++) {
92 - cout << "["<< u << "]["<< v <<"]: " << index_of_yuv_[u][v] << endl;
93 - }
94 - }*/
95 if (verbose_) cout << endl; 90 if (verbose_) cout << endl;
96 91
97 // Add the x_i,j decision variables 92 // Add the x_i,j decision variables
...@@ -100,7 +95,7 @@ MOIP::MOIP(const RNA& rna, string source, string source_path, float theta, bool ...@@ -100,7 +95,7 @@ MOIP::MOIP(const RNA& rna, string source, string source_path, float theta, bool
100 index_of_xij_ = vector<vector<size_t>>(rna_.get_RNA_length() - 6, vector<size_t>(0)); 95 index_of_xij_ = vector<vector<size_t>>(rna_.get_RNA_length() - 6, vector<size_t>(0));
101 for (u = 0; u < rna_.get_RNA_length() - 6; u++) 96 for (u = 0; u < rna_.get_RNA_length() - 6; u++)
102 for (v = u + 4; v < rna_.get_RNA_length(); v++) // A basepair is possible if v > u+3 97 for (v = u + 4; v < rna_.get_RNA_length(); v++) // A basepair is possible if v > u+3
103 - if (rna_.get_pij(u, v) > theta and rna_.get_pij(u + 1, v - 1) > theta) { // ou u-1 v+1 ?? 98 + if (rna_.get_pij(u, v) > theta and rna_.get_pij(u + 1, v - 1) > theta) { // or u-1 v+1 ??
104 if (verbose_) cout << u << '-' << v << " "; 99 if (verbose_) cout << u << '-' << v << " ";
105 index_of_xij_[u].push_back(c); 100 index_of_xij_[u].push_back(c);
106 c++; 101 c++;
...@@ -110,11 +105,6 @@ MOIP::MOIP(const RNA& rna, string source, string source_path, float theta, bool ...@@ -110,11 +105,6 @@ MOIP::MOIP(const RNA& rna, string source, string source_path, float theta, bool
110 } else { 105 } else {
111 index_of_xij_[u].push_back(rna_.get_RNA_length() * rna_.get_RNA_length() + 1); 106 index_of_xij_[u].push_back(rna_.get_RNA_length() * rna_.get_RNA_length() + 1);
112 } 107 }
113 - /*for (u = 0; u < index_of_xij_.size(); u++) {
114 - for (v = 0; v < index_of_xij_[u].size(); v++) {
115 - cout << "["<< u << "]["<< v <<"]: " << index_of_xij_[u][v] << endl;
116 - }
117 - }*/
118 if (verbose_) cout << endl; 108 if (verbose_) cout << endl;
119 109
120 // Look for insertions sites, then create the appropriate Cxip variables 110 // Look for insertions sites, then create the appropriate Cxip variables
...@@ -221,25 +211,25 @@ MOIP::MOIP(const RNA& rna, string source, string source_path, float theta, bool ...@@ -221,25 +211,25 @@ MOIP::MOIP(const RNA& rna, string source, string source_path, float theta, bool
221 thread_pool.push_back(thread(&Pool::infinite_loop_func, &pool)); 211 thread_pool.push_back(thread(&Pool::infinite_loop_func, &pool));
222 212
223 // Read every RIN file and add it to the queue (iff valid) 213 // Read every RIN file and add it to the queue (iff valid)
224 - char error; 214 + char error;
225 for (auto it : recursive_directory_range(source_path)) 215 for (auto it : recursive_directory_range(source_path))
226 { 216 {
227 - if ((error = Motif::is_valid_RIN(it.path().string()))) // Returns error if RIN file is incorrect 217 + if ((error = Motif::is_valid_RIN(it.path().string()))) // Returns error if RIN file is incorrect
228 - { 218 + {
229 - if (verbose) 219 + if (verbose)
230 { 220 {
231 cerr << "\t> Ignoring RIN " << it.path().stem(); 221 cerr << "\t> Ignoring RIN " << it.path().stem();
232 switch (error) 222 switch (error)
233 { 223 {
234 case 'l': cerr << ", too short to be considered."; break; 224 case 'l': cerr << ", too short to be considered."; break;
235 case 'x': cerr << ", because not constraining the secondary structure."; break; 225 case 'x': cerr << ", because not constraining the secondary structure."; break;
236 - default: cerr << ", unknown reason"; 226 + default: cerr << ", unknown reason";
237 } 227 }
238 cerr << endl; 228 cerr << endl;
239 } 229 }
240 - errors++; 230 + errors++;
241 continue; 231 continue;
242 - } 232 + }
243 accepted++; 233 accepted++;
244 args_of_parallel_func args(it.path(), posInsertionSites_access); 234 args_of_parallel_func args(it.path(), posInsertionSites_access);
245 inserted++; 235 inserted++;
...@@ -264,12 +254,12 @@ MOIP::MOIP(const RNA& rna, string source, string source_path, float theta, bool ...@@ -264,12 +254,12 @@ MOIP::MOIP(const RNA& rna, string source, string source_path, float theta, bool
264 size_t errors = 0; 254 size_t errors = 0;
265 255
266 // Read every JSON files 256 // Read every JSON files
267 - vector<pair<uint,char>> errors_id; 257 + vector<pair<uint,char>> errors_id;
268 for (auto it : recursive_directory_range(source_path)) 258 for (auto it : recursive_directory_range(source_path))
269 { 259 {
270 errors_id = Motif::is_valid_JSON(it.path().string()); 260 errors_id = Motif::is_valid_JSON(it.path().string());
271 - if (!(errors_id.empty())) // Returns error if JSON file is incorrect 261 + if (!(errors_id.empty())) // Returns error if JSON file is incorrect
272 - { 262 + {
273 for(uint j = 0; j < errors_id.size(); j++) 263 for(uint j = 0; j < errors_id.size(); j++)
274 { 264 {
275 if(verbose) { 265 if(verbose) {
...@@ -293,7 +283,7 @@ MOIP::MOIP(const RNA& rna, string source, string source_path, float theta, bool ...@@ -293,7 +283,7 @@ MOIP::MOIP(const RNA& rna, string source, string source_path, float theta, bool
293 } 283 }
294 } 284 }
295 errors++; 285 errors++;
296 - } 286 + }
297 accepted++; 287 accepted++;
298 args_of_parallel_func args(it.path(), posInsertionSites_access); 288 args_of_parallel_func args(it.path(), posInsertionSites_access);
299 inserted++; 289 inserted++;
...@@ -306,7 +296,7 @@ MOIP::MOIP(const RNA& rna, string source, string source_path, float theta, bool ...@@ -306,7 +296,7 @@ MOIP::MOIP(const RNA& rna, string source, string source_path, float theta, bool
306 } 296 }
307 else 297 else
308 { 298 {
309 - cout << "!!! Unknown module source" << endl; 299 + cout << "Err: Unknown module source." << endl;
310 } 300 }
311 301
312 // Add the Cx,i,p decision variables 302 // Add the Cx,i,p decision variables
...@@ -1103,7 +1093,7 @@ void MOIP::allowed_motifs_from_rin(args_of_parallel_func arg_struct) ...@@ -1103,7 +1093,7 @@ void MOIP::allowed_motifs_from_rin(args_of_parallel_func arg_struct)
1103 mutex& posInsertionSites_access = arg_struct.posInsertionSites_mutex; 1093 mutex& posInsertionSites_access = arg_struct.posInsertionSites_mutex;
1104 1094
1105 std::ifstream motif; 1095 std::ifstream motif;
1106 - string filepath = rinfile.string(); 1096 + string filepath = rinfile.string();
1107 vector<vector<Component>> vresults, r_vresults; 1097 vector<vector<Component>> vresults, r_vresults;
1108 vector<string> component_sequences; 1098 vector<string> component_sequences;
1109 uint carnaval_id; 1099 uint carnaval_id;
...@@ -1112,7 +1102,7 @@ void MOIP::allowed_motifs_from_rin(args_of_parallel_func arg_struct) ...@@ -1112,7 +1102,7 @@ void MOIP::allowed_motifs_from_rin(args_of_parallel_func arg_struct)
1112 string reversed_rna = rna_.get_seq(); 1102 string reversed_rna = rna_.get_seq();
1113 1103
1114 std::reverse(reversed_rna.begin(), reversed_rna.end()); 1104 std::reverse(reversed_rna.begin(), reversed_rna.end());
1115 - filenumber = filepath.substr(filepath.find("Subfiles/")+9, filepath.find(".txt")); 1105 + filenumber = filepath.substr(filepath.find("Subfiles/")+9, filepath.find(".txt"));
1116 carnaval_id = 1 + stoi(filenumber); // Start counting at 1 to be consistant with the website numbering 1106 carnaval_id = 1 + stoi(filenumber); // Start counting at 1 to be consistant with the website numbering
1117 1107
1118 motif = std::ifstream(rinfile.string()); 1108 motif = std::ifstream(rinfile.string());
...@@ -1137,13 +1127,13 @@ void MOIP::allowed_motifs_from_rin(args_of_parallel_func arg_struct) ...@@ -1137,13 +1127,13 @@ void MOIP::allowed_motifs_from_rin(args_of_parallel_func arg_struct)
1137 { 1127 {
1138 Motif temp_motif = Motif(v, rinfile, carnaval_id, false); 1128 Motif temp_motif = Motif(v, rinfile, carnaval_id, false);
1139 1129
1140 - bool unprobable = false; 1130 + bool unprobable = false;
1141 - for (const Link& l : temp_motif.links_) 1131 + for (const Link& l : temp_motif.links_)
1142 - { 1132 + {
1143 - if (!allowed_basepair(l.nts.first,l.nts.second)) 1133 + if (!allowed_basepair(l.nts.first,l.nts.second))
1144 - unprobable = true; 1134 + unprobable = true;
1145 - } 1135 + }
1146 - if (unprobable) continue; 1136 + if (unprobable) continue;
1147 1137
1148 // Add it to the results vector 1138 // Add it to the results vector
1149 unique_lock<mutex> lock(posInsertionSites_access); 1139 unique_lock<mutex> lock(posInsertionSites_access);
...@@ -1328,7 +1318,7 @@ void MOIP::allowed_motifs_from_json(args_of_parallel_func arg_struct, vector<pai ...@@ -1328,7 +1318,7 @@ void MOIP::allowed_motifs_from_json(args_of_parallel_func arg_struct, vector<pai
1328 mutex& posInsertionSites_access = arg_struct.posInsertionSites_mutex; 1318 mutex& posInsertionSites_access = arg_struct.posInsertionSites_mutex;
1329 1319
1330 std::ifstream motif; 1320 std::ifstream motif;
1331 - string filepath = jsonfile.string(); 1321 + string filepath = jsonfile.string();
1332 vector<vector<Component>> vresults, r_vresults; 1322 vector<vector<Component>> vresults, r_vresults;
1333 vector<string> component_sequences; 1323 vector<string> component_sequences;
1334 vector<string> component_contacts; 1324 vector<string> component_contacts;
......
This diff is collapsed. Click to expand it.
No preview for this file type
1 +__'CRYSTAL_STRUCTURE_OF_A_TIGHT-BINDING_GLUTAMINE_TRNA_BOUND_TO_GLUTAMINE_AMINOACYL_TRNA_SYNTHETASE_'_(PDB_00376)
2 +GGGGUAUCGCCAAGCGGUAAGGCACCGGAUUCUGAUUCCGGAGGUCGAGGUUCGAAUCCUCGUACCCCAGCCA
3 +(((((((((([..)))....(((.(((((.({..).))))).])))((((.(.}.).)))))))))))..... + JSON432 + JSON615 32.0000000 19.2280288
4 +................****.................................................****
5 +(((((((((([..)))....(((.((((((....).))))).])))((((.(...).)))))))))))..... + JSON169 + JSON432 + JSON615 48.0000000 19.2123884
6 +................****..........****...................................****
7 +(((((((.(([.....))..(((.(((((.({..).))))).])))((((.(.}.).)))))))))))..... + JSON322 + JSON478 52.0000000 18.3718588
8 +............****................**...................................****
9 +((((((((((...)))....(([.((((((....).)))))...))((((.(...).))))))))))).]... + JSON169 + JSON615 + JSON763 57.0000000 18.3583187
10 +................****..........****.......***...........................**
11 +(((((((((([..)))....(((.((((((....).))))).])))(((.........))))))))))..... + JSON169 + JSON386 + JSON432 + JSON615 64.0000000 18.2180422
12 +................****..........****...............****................****
13 +(((((([(((...))).)..(((.(((((.(...).))))).){))((((.(...).))))]})))))..... + JSON322 + JSON471 80.0000000 17.8060915
14 +........**.....................***................*...........*........**
15 +(((((([((([..))).)..((..((((((....).))))).]{))((((.(...).))))]})))))..... + JSON169 + JSON432 + JSON471 96.0000000 17.7717258
16 +........**............*.......****......................*.....*......****
17 +(((((.((((...)))....(((.(((((.[.....))))).){))((((.(..]).)))))})))))..... + JSON154 + JSON432 + JSON471 105.0000000 17.5888835
18 +........**......**.............****.....................*.....*......****
19 +(((((.(((([..)))....((..((((((....).))))).][))((((.(...).)))))])))))..... + JSON169 + JSON432 + JSON471 + JSON615 112.0000000 17.5772109
20 +........**......****..*.......****......................*.....*......****
21 +(((((.((((...)))....(((.((((([[.....))))).){))(((.....]]..))))})))))..... + JSON154 + JSON386 + JSON432 + JSON471 121.0000000 16.5955778
22 +........**......**.............****..............****...*.....*......****
23 +(((((.(((([..)))....((..((((((....).))))).][))(((.........))))])))))..... + JSON169 + JSON386 + JSON432 + JSON471 + JSON615 128.0000000 16.5828646
24 +........**......****..*.......****...............****...*.....*......****
25 +(((((.(.(([.........{)).(((((.(...).))))).][(}[[[[.[..)].]]]])])))))..... + JSON322 + JSON471 + JSON478 + JSON615 132.0000000 15.2549277
26 +........**..********...........***................*...........*......****
27 +(((((((.............(...((((((....).)))))....)(((.........))))))))))..... + JSON169 + JSON386 + JSON432 + JSON432 + JSON473 + JSON478 + JSON615 141.0000000 14.8831569
28 +........************.**.......****.......****....****...............*****
29 +((((((..(((.........))).(((((.......)))))....(((((.(...).)))))))))))..... + JSON38 2916.0000000 14.7452026
30 +*******.*******......*****.....******............................********
31 +((((((..(((.........))).(((((.......)))))....((((.........))))))))))..... + JSON38 + JSON386 2932.0000000 13.7508564
32 +*******.*******......*****.....******............****............********
33 +((((((..(((.........))).(((((.......)))))....((....(...)....))))))))..... + JSON38 + JSON473 2941.0000000 11.8254010
34 +*******.*******......*****.....******..........****...*..........********
35 +(((((((.............(...((((((....).)))))....)(((.........))))))))))..... + JSON169 + JSON386 + JSON432 + JSON432 + JSON473 + JSON478 + JSON615 141.0000000 14.8831569
36 +........************.**.......****.......****....****..*.............****
37 +(((((.(.(([.........{)).(((((.(...).))))).][(}[[[[.[..)].]]]])])))))..... + JSON322 + JSON471 + JSON478 + JSON615 132.0000000 15.2549277
38 +........**..********...........***......................*.....*......****
39 +(((((.(((([..)))....((..((((((....).))))).][))((((.(...).)))))])))))..... + JSON169 + JSON432 + JSON471 + JSON615 112.0000000 17.5772109
40 +........**......****..*.......****................*...........*......****
41 +(((((.((((...)))....(((.(((((.[.....))))).){))((((.(..]).)))))})))))..... + JSON154 + JSON432 + JSON471 105.0000000 17.5888835
42 +........**......**.............****...............*...........*......****
43 +(((((([((([..))).)..((..((((((....).))))).]{))((((.(...).))))]})))))..... + JSON169 + JSON432 + JSON471 96.0000000 17.7717258
44 +........**............*.......****................*...........*......****
45 +(((((([(((...))).)..(((.(((((.(...).))))).){))((((.(...).))))]})))))..... + JSON322 + JSON471 80.0000000 17.8060915
46 +........**.....................***......................*.....*........**
47 +(((((((((([..)))....(((.(((((.({..).))))).])))((((.(.}.).)))))))))))..... + JSON322 + JSON615 32.0000000 19.2280288
48 +................****............**.....................................**
1 +__'CRYSTAL_STRUCTURE_OF_A_TIGHT-BINDING_GLUTAMINE_TRNA_BOUND_TO_GLUTAMINE_AMINOACYL_TRNA_SYNTHETASE_'_(PDB_00376)
2 +GGGGUAUCGCCAAGCGGUAAGGCACCGGAUUCUGAUUCCGGAGGUCGAGGUUCGAAUCCUCGUACCCCAGCCA
3 +(((((((((([..)))....(((.(((((.({..).))))).])))((((.(.}.).)))))))))))..... + JSON322 + JSON615 1.5000000 19.2280288
4 +................****............**.....................................**
5 +(((((((((([..)))....(((.(((((.(...).))))).])))((((.(...).)))))))))))..... + JSON322 + JSON615 1.5000200 19.2269926
6 +................****............**.....................................**
7 +(((((((.(([.....))..(((.(((((.({..).))))).])))((((.(.}.).)))))))))))..... + JSON322 + JSON478 1.7737056 18.3718588
8 +............****................**...................................****
9 +((((((((((...)))....(([.((((((....).)))))...))((((.(...).))))))))))).]... + JSON169 + JSON615 + JSON763 1.8613531 18.3583187
10 +................****..........****.......***...........................**
11 +.((((((((([..)))....(((.(((((.({..).))))).])))((((.(.}.).))))))))))...... + JSON322 + JSON432 + JSON615 2.0000000 18.2455939
12 +................****............**.................................******
13 +(((((((((({..)))....(((.((((([([..).))))).})))(((....].]..))))))))))..... + JSON322 + JSON386 + JSON615 2.0000200 18.2347086
14 +................****............**...............****..................**
15 +(((((([(((...))).)..(((.(((((.(...).))))).){))((((.(...).))))]})))))..... + JSON322 + JSON471 3.0000000 17.8060915
16 +........**.....................***......................*.....*........**
17 +(((((.((((...)))....(((.(((((.(...).))))).)[))((((.(...).)))))])))))..... + JSON322 + JSON471 + JSON615 3.5000000 17.6115766
18 +........**......****...........***......................*.....*........**
19 +.((((.((((...)))....(((.(((((.(...).))))).)[))((((.(...).)))))]))))...... + JSON322 + JSON432 + JSON471 + JSON615 4.0000000 16.6291417
20 +........**......****...........***......................*.....*....******
21 +.((((.((((...)))....(((.((((([(...).))))).){))(((......]..))))}))))...... + JSON322 + JSON386 + JSON432 + JSON471 + JSON615 4.5000000 15.6358360
22 +........**......****...........***...............****...*.....*....******
23 +(((((.(.(([.........{)).(((((<(...).))))).][(}[[[.....)>..]]])])))))..... + JSON322 + JSON386 + JSON471 + JSON478 + JSON615 4.7737056 14.2616220
24 +........**..********...........***...............****...*.....*......****
25 +.((((.((((...)))....(((.(((((.(...).)))))[){))(....(...)...]))}))))...... + JSON322 + JSON432 + JSON471 + JSON473 + JSON615 4.8613531 13.7313706
26 +........**......****...........***.............****...*.*.....*....******
27 +.((((.((.....[[)....(]].((((([(...).)))))..{[)(((.....]]..))))}))))...... + JSON322 + JSON386 + JSON432 + JSON432 + JSON471 + JSON615 5.0000000 13.7177100
28 +........****.**.****...........***...............****...*.....*....******
29 +(((((.(.((..........[)).(((((.(...).)))))(({(][....[..)]..))])})))))..... + JSON322 + JSON471 + JSON473 + JSON478 + JSON615 5.1350587 12.3759713
30 +........**..********...........***.............****.....*.....*.....*****
31 +.((((.....(..[[)....(]]..(((([(...).))))...{[)(((.....]]..))).}))))...... + JSON322 + JSON386 + JSON432 + JSON471 + JSON615 + JSON632 5.2737056 11.9911280
32 +......****...**.****...**......***...............****...*.....*....******
33 +.((((.((.....[[)....(]].(((((.(...).)))))[[{.)(....(...)..]]))}))))...... + JSON322 + JSON432 + JSON432 + JSON471 + JSON473 + JSON615 5.3613531 11.8157013
34 +........****.**.****...........***.............****...*.*.....*....******
35 +.((....(.....[[)....(]].((((([(...).))))).{{[)(((.....]]..))).}.}))...... + JSON322 + JSON386 + JSON432 + JSON432 + JSON471 + JSON615 + JSON928 5.5000000 11.2444565
36 +...****.****.**.****...........***...............****...*.....*....******
37 +.(........(..[[)....(]].((((([(...).))))).{{[)(((.....]]..))).}..})...... + JSON322 + JSON386 + JSON432 + JSON433 + JSON471 + JSON615 + JSON632 5.7737056 10.1268257
38 +..********...**.****...........***...............****...*.....***..******
39 +.((....(.....[[)....(]].(((((.(...).)))))[[{[)(....(..])..]]).}..))...... + JSON322 + JSON432 + JSON432 + JSON471 + JSON473 + JSON615 + JSON928 5.8613531 9.3610813
40 +...****.****.**.****...........***.............****.....*.....**...******
41 +.((....(.....[[)....(]].((.[.[(...)....)).{{[)(((.....]].]))).}.}))...... + JSON156 + JSON322 + JSON386 + JSON432 + JSON432 + JSON471 + JSON615 + JSON928 6.0000000 8.2749650
42 +...****.****.**.****...........***.****..........****...*.....*....******
43 +.(........(..[[)....(]].(((((.(...).)))))[[{.)(....(...)..]]).}...)...... + JSON322 + JSON432 + JSON433 + JSON471 + JSON473 + JSON615 + JSON632 6.1350587 8.2098083
44 +..********...**.****...........***.............****...*.*.....***..******
45 +.(........(..[[)....(]].((.[.[(...)....)).{{[)(((.....]].]))).}..})...... + JSON156 + JSON322 + JSON386 + JSON432 + JSON433 + JSON471 + JSON615 + JSON632 6.2737056 7.1573341
46 +..********...**.****...........***.****..........****...*.....***..******
47 +.((....(.....[[)....(]].((.[..(...)....)){{<[)(....(..]).]}}).>..))...... + JSON156 + JSON322 + JSON432 + JSON432 + JSON471 + JSON473 + JSON615 + JSON928 6.3613531 6.3915897
48 +...****.****.**.****...........***.****........****.....*.....**...******
49 +.(........(..[[)....(]].((.[..(...)....)){{<.)(....(...).]}}).>...)...... + JSON156 + JSON322 + JSON432 + JSON433 + JSON471 + JSON473 + JSON615 + JSON632 6.6350587 5.2403168
50 +..********...**.****...........***.****........****...*.*.....***..******
51 +.((((.((((...)))....((..(((((.({..).)))))[[<))(....(.}.)..]]))>))))...... + JSON322 + JSON432 + JSON471 + JSON473 + JSON615 4.8613531 13.7314599
52 +........**......****..*.........**.............****...*.*.....*....******
53 +.((((.((((...)))....(((.(((((.(...).))))).)[))((((.(...).)))))]))))...... + JSON322 + JSON432 + JSON471 + JSON615 4.0000000 16.6291417
54 +........**......****...........***................*...........*....******
55 +(((((.((((...)))....(((.(((((.(...).))))).)[))((((.(...).)))))])))))..... + JSON322 + JSON471 + JSON615 3.5000000 17.6115766
56 +........**......****...........***................*...........*........**
57 +(((((([(((...))).)..(((.(((((.(...).))))).){))((((.(...).))))]})))))..... + JSON322 + JSON471 3.0000000 17.8060915
58 +........**.....................***................*...........*........**
1 +__'CRYSTAL_STRUCTURE_OF_A_TIGHT-BINDING_GLUTAMINE_TRNA_BOUND_TO_GLUTAMINE_AMINOACYL_TRNA_SYNTHETASE_'_(PDB_00376)
2 +GGGGUAUCGCCAAGCGGUAAGGCACCGGAUUCUGAUUCCGGAGGUCGAGGUUCGAAUCCUCGUACCCCAGCCA
3 +(((((((((([..)))....(((.(((((.({..).))))).])))((((.(.}.).)))))))))))..... 0.0000000 19.2280288
4 +.........................................................................
5 +(((((((((([..)))....(((.(((((.({..).))))).])))((((.(.}.).)))))))))))..... + JSON322 0.0000000 19.2280288
6 +................................**.....................................**