1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 from unittest import TestCase
24
25
26 from data_store.seq_align import Sequence_alignments
27
28
30 """Unit tests for the data.seq_align relax module."""
31
32
37
38
40 """Generate the expected IDs."""
41
42
43 ids = []
44 for i in range(len(object_ids)):
45 ids.append("Object '%s'" % object_ids[i])
46 if models[i] != None:
47 ids[-1] += "; Model %i" % models[i]
48 ids[-1] += "; Molecule '%s'" % molecules[i]
49
50
51 return ids
52
53
55 """Return a data set for alignment testing."""
56
57
58 object_ids = ['frame_order', 'ensemble', 'ensemble', 'ensemble', 'ensemble', 'ensemble', 'ensemble', 'ensemble']
59 models = [None, 1, 1, 1, 1, 1, 1, 1]
60 molecules = [
61 'N-dom',
62 'ensemble 4M A',
63 'ensemble 4M B',
64 'ensemble 4M C',
65 'ensemble 4M D',
66 'CaM-IQ A',
67 'CaM-IQ B',
68 'CaM-IQ C'
69 ]
70 sequences = [
71 'LTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTIDFPEFLTMMARK*****',
72 '*DQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTIDFPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREADIDGDGQVNYEEFVQMMTA*****',
73 '*DQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTIDFPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREADIDGDGQVNYEEFVQMMTA*****',
74 '*DQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTIDFPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREADIDGDGQVNYEEFVQMMTA*****',
75 '*DQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTIDFPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREADIDGDGQVNYEEFVQMMTA*****',
76 ' QLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTIDFPEFLTMMARKMKSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREADIDGDGQVNYEEFVQMMT*****',
77 ' LTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTIDFPEFLTMMARKMKDEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREADIDGDGQVNYEEFVQMMT*****',
78 ' LTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTIDFPEFLTMMARKEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREADIDGDGQVNYEEFVQMMT*****',
79
80 'TEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADG',
81 'ADQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTIDFPEFLTMMARKM',
82 'LTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTIDFPEFLTMMAR'
83 ]
84 strings = [
85 '---LTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTIDFPEFLTMMARK------------------------------------------------------------------------*****----------------------------------------------------------------------------',
86 '*DQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTIDFPEFLTMMARK----------------------------------------------------------------------------MKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREADIDGDGQVNYEEFVQMMTA*****',
87 '*DQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTIDFPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREADIDGDGQVNYEEFVQMMTA*****----------------------------------------------------------------------------',
88 '*DQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTIDFPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREADIDGDGQVNYEEFVQMMTA*****----------------------------------------------------------------------------',
89 '*DQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTIDFPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREADIDGDGQVNYEEFVQMMTA*****----------------------------------------------------------------------------',
90 '--QLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTIDFPEFLTMMARK----MKSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREADIDGDGQVNYEEFVQMMT*****----------------------------------------------------------------------------',
91 '---LTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTIDFPEFLTMMARK----MKDEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREADIDGDGQVNYEEFVQMMT*****----------------------------------------------------------------------------',
92 '---LTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTIDFPEFLTMMARK-------EEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREADIDGDGQVNYEEFVQMMT*****----------------------------------------------------------------------------',
93 ]
94 gaps = []
95 for i in range(len(strings)):
96 gaps.append([])
97 for j in range(len(strings[0])):
98 if strings[i][j] == '-':
99 gaps[i].append(1)
100 else:
101 gaps[i].append(0)
102 msa_algorithm = 'Central Star'
103 pairwise_algorithm = 'NW70'
104 matrix = 'BLOSUM62'
105 gap_open_penalty = 10.0
106 gap_extend_penalty = 1.0
107 end_gap_open_penalty = 0.0
108 end_gap_extend_penalty = 0.0
109
110
111 return object_ids, models, molecules, sequences, strings, gaps, msa_algorithm, pairwise_algorithm, matrix, gap_open_penalty, gap_extend_penalty, end_gap_open_penalty, end_gap_extend_penalty
112
113
115 """Test the creation of a new sequence alignment object."""
116
117
118 object_ids, models, molecules, sequences, strings, gaps, msa_algorithm, pairwise_algorithm, matrix, gap_open_penalty, gap_extend_penalty, end_gap_open_penalty, end_gap_extend_penalty = self.return_align_data()
119
120
121 self.seq_align.add(object_ids=object_ids, models=models, molecules=molecules, sequences=sequences, strings=strings, gaps=gaps, msa_algorithm=msa_algorithm, pairwise_algorithm=pairwise_algorithm, matrix=matrix, gap_open_penalty=gap_open_penalty, gap_extend_penalty=gap_extend_penalty, end_gap_open_penalty=end_gap_open_penalty, end_gap_extend_penalty=end_gap_extend_penalty)
122
123
124 ids = self.generate_ids(object_ids, models, molecules)
125
126
127 for i in range(8):
128 print("Checking \"%s\"" % ids[i])
129 self.assertEqual(self.seq_align[0].ids[i], ids[i])
130 self.assertEqual(self.seq_align[0].object_ids[i], object_ids[i])
131 self.assertEqual(self.seq_align[0].models[i], models[i])
132 self.assertEqual(self.seq_align[0].molecules[i], molecules[i])
133 self.assertEqual(self.seq_align[0].sequences[i], sequences[i])
134 self.assertEqual(self.seq_align[0].strings[i], strings[i])
135 self.assertEqual(self.seq_align[0].gaps[i], gaps[i])
136 self.assertEqual(self.seq_align[0].msa_algorithm, msa_algorithm)
137 self.assertEqual(self.seq_align[0].pairwise_algorithm, pairwise_algorithm)
138 self.assertEqual(self.seq_align[0].matrix, matrix)
139 self.assertEqual(self.seq_align[0].gap_open_penalty, gap_open_penalty)
140 self.assertEqual(self.seq_align[0].gap_extend_penalty, gap_extend_penalty)
141 self.assertEqual(self.seq_align[0].end_gap_open_penalty, end_gap_open_penalty)
142 self.assertEqual(self.seq_align[0].end_gap_extend_penalty, end_gap_extend_penalty)
143
144
146 """Test the retrieval of pre-existing alignment."""
147
148
149 self.test_alignment_addition()
150
151
152 object_ids, models, molecules, sequences, strings, gaps, msa_algorithm, pairwise_algorithm, matrix, gap_open_penalty, gap_extend_penalty, end_gap_open_penalty, end_gap_extend_penalty = self.return_align_data()
153
154
155 align = self.seq_align.find_alignment(object_ids=object_ids, models=models, molecules=molecules, sequences=sequences, msa_algorithm=msa_algorithm, pairwise_algorithm=pairwise_algorithm, matrix=matrix, gap_open_penalty=gap_open_penalty, gap_extend_penalty=gap_extend_penalty, end_gap_open_penalty=end_gap_open_penalty, end_gap_extend_penalty=end_gap_extend_penalty)
156
157
158 self.assertNotEqual(align, None)
159
160
161 ids = self.generate_ids(object_ids, models, molecules)
162
163
164 for i in range(8):
165 print("Checking \"%s\"" % ids[i])
166 self.assertEqual(self.seq_align[0].object_ids[i], object_ids[i])
167 self.assertEqual(self.seq_align[0].models[i], models[i])
168 self.assertEqual(self.seq_align[0].molecules[i], molecules[i])
169
170
172 """Test the retrieval of non-existent alignment."""
173
174
175 self.test_alignment_addition()
176
177
178 object_ids, models, molecules, sequences, strings, gaps, msa_algorithm, pairwise_algorithm, matrix, gap_open_penalty, gap_extend_penalty, end_gap_open_penalty, end_gap_extend_penalty = self.return_align_data()
179
180
181 gap_open_penalty = 0.5
182
183
184 align = self.seq_align.find_alignment(object_ids=object_ids, models=models, molecules=molecules, sequences=sequences, msa_algorithm=msa_algorithm, pairwise_algorithm=pairwise_algorithm, matrix=matrix, gap_open_penalty=gap_open_penalty, gap_extend_penalty=gap_extend_penalty, end_gap_open_penalty=end_gap_open_penalty, end_gap_extend_penalty=end_gap_extend_penalty)
185
186
187 self.assertEqual(align, None)
188