1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 from data import Relax_data_store; ds = Relax_data_store()
25 from generic_fns.mol_res_spin import copy_residue, create_residue
26 from generic_fns import pipes
27 from relax_errors import RelaxError, RelaxMultiMolIDError, RelaxNoPipeError, RelaxResSelectDisallowError, RelaxSpinSelectDisallowError
28 from test_suite.unit_tests.base_classes import UnitTestCase
29
30
32 """Testing base class for 'prompt.molecule' and corresponding 'generic_fns.mol_spin_res' fns.
33
34 This base class also contains many shared unit tests.
35 """
36
38 """Set up for all the molecule unit tests."""
39
40
41 ds.add(pipe_name='orig', pipe_type='mf')
42
43
44 ds.add(pipe_name='test', pipe_type='mf')
45
46
47 pipes.switch('orig')
48
49
51 """Function for setting up some data for the unit tests."""
52
53
54 dp = pipes.get_pipe('orig')
55
56
57 create_residue(1, 'Ala')
58 dp.mol[0].res[0].spin[0].num = 111
59 dp.mol[0].res[0].spin[0].x = 1
60 dp.mol[0].name = 'Old mol'
61
62
63 dp.mol.add_item('New mol')
64
65
66 copy_residue(res_from=':1', res_to='#New mol')
67 copy_residue(res_from='#Old mol:1', res_to='#New mol:5')
68
69
70 dp.mol[0].res[0].spin[0].num = 222
71 dp.mol[0].res[0].spin[0].x = 2
72
73
75 """Test the copying of the molecule data between different data pipes.
76
77 The function tested is both generic_fns.mol_res_spin.copy_molecule() and
78 prompt.molecule.copy().
79 """
80
81
82 dp = pipes.get_pipe('orig')
83 dp_test = pipes.get_pipe('test')
84
85
86 self.molecule_fns.create('Old mol')
87 create_residue(1, 'Ala')
88 dp.mol[0].res[0].spin[0].num = 111
89 dp.mol[0].res[0].spin[0].x = 1
90
91
92 self.molecule_fns.copy(mol_from='#Old mol', pipe_to='test')
93 self.molecule_fns.copy(pipe_from='orig', mol_from='#Old mol', pipe_to='test', mol_to='#New mol')
94
95
96 dp.mol[0].res[0].spin[0].num = 222
97 dp.mol[0].res[0].spin[0].x = 2
98
99
100 self.assertEqual(dp.mol[0].name, 'Old mol')
101 self.assertEqual(dp.mol[0].res[0].num, 1)
102 self.assertEqual(dp.mol[0].res[0].name, 'Ala')
103 self.assertEqual(dp.mol[0].res[0].spin[0].num, 222)
104 self.assertEqual(dp.mol[0].res[0].spin[0].x, 2)
105
106
107 self.assertEqual(dp_test.mol[0].name, 'Old mol')
108 self.assertEqual(dp_test.mol[0].res[0].num, 1)
109 self.assertEqual(dp_test.mol[0].res[0].name, 'Ala')
110 self.assertEqual(dp_test.mol[0].res[0].spin[0].num, 111)
111 self.assertEqual(dp_test.mol[0].res[0].spin[0].x, 1)
112
113
114 self.assertEqual(dp_test.mol[1].name, 'New mol')
115 self.assertEqual(dp_test.mol[1].res[0].num, 1)
116 self.assertEqual(dp_test.mol[1].res[0].name, 'Ala')
117 self.assertEqual(dp_test.mol[1].res[0].spin[0].num, 111)
118 self.assertEqual(dp_test.mol[1].res[0].spin[0].x, 1)
119
120
122 """Test the failure of copying of the molecule data between different data pipes.
123
124 The function tested is both generic_fns.mol_res_spin.copy_molecule() and
125 prompt.molecule.copy().
126 """
127
128
129 dp = pipes.get_pipe('orig')
130
131
132 self.molecule_fns.create('Old mol')
133 create_residue(1, 'Ala')
134 dp.mol[0].res[0].spin[0].num = 111
135 dp.mol[0].res[0].spin[0].x = 1
136
137
138 self.assertRaises(RelaxNoPipeError, self.molecule_fns.copy, mol_from='#Old mol', pipe_to='test2')
139
140
142 """Test the copying of the molecule data within a single data pipe.
143
144 The function tested is both generic_fns.mol_res_spin.copy_molecule() and
145 prompt.molecule.copy().
146 """
147
148
149 dp = pipes.get_pipe('orig')
150
151
152 self.molecule_fns.create('Old mol')
153 create_residue(1, 'Ala')
154 dp.mol[0].res[0].spin[0].num = 111
155 dp.mol[0].res[0].spin[0].x = 1
156
157
158 self.molecule_fns.copy(mol_from='#Old mol', mol_to='#2')
159 self.molecule_fns.copy(mol_from='#Old mol', pipe_to='orig', mol_to='#3')
160
161
162 dp.mol[0].res[0].spin[0].num = 222
163 dp.mol[0].res[0].spin[0].x = 2
164
165
166 self.molecule_fns.copy(mol_from='#Old mol', mol_to='#4')
167
168
169 self.assertEqual(dp.mol[0].name, 'Old mol')
170 self.assertEqual(dp.mol[0].res[0].num, 1)
171 self.assertEqual(dp.mol[0].res[0].name, 'Ala')
172 self.assertEqual(dp.mol[0].res[0].spin[0].num, 222)
173 self.assertEqual(dp.mol[0].res[0].spin[0].x, 2)
174
175
176 self.assertEqual(dp.mol[1].name, 2)
177 self.assertEqual(dp.mol[1].res[0].num, 1)
178 self.assertEqual(dp.mol[1].res[0].name, 'Ala')
179 self.assertEqual(dp.mol[1].res[0].spin[0].num, 111)
180 self.assertEqual(dp.mol[1].res[0].spin[0].x, 1)
181
182
183 self.assertEqual(dp.mol[2].name, 3)
184 self.assertEqual(dp.mol[2].res[0].num, 1)
185 self.assertEqual(dp.mol[2].res[0].name, 'Ala')
186 self.assertEqual(dp.mol[2].res[0].spin[0].num, 111)
187 self.assertEqual(dp.mol[2].res[0].spin[0].x, 1)
188
189
190 self.assertEqual(dp.mol[3].name, 4)
191 self.assertEqual(dp.mol[3].res[0].num, 1)
192 self.assertEqual(dp.mol[3].res[0].name, 'Ala')
193 self.assertEqual(dp.mol[3].res[0].spin[0].num, 222)
194 self.assertEqual(dp.mol[3].res[0].spin[0].x, 2)
195
196
198 """Test the failure of the copying of the molecule data within a molecule.
199
200 The function tested is both generic_fns.mol_res_spin.copy_molecule() and
201 prompt.molecule.copy().
202 """
203
204
205 self.molecule_fns.create('GST')
206 self.molecule_fns.create('GB1')
207
208
209 self.assertRaises(RelaxError, self.molecule_fns.copy, mol_from='#MBP', mol_to='#IL4')
210
211
212 self.assertRaises(RelaxError, self.molecule_fns.copy, mol_from='#GST', mol_to='#GB1')
213
214
216 """Test the creation of a molecule data structure.
217
218 The function tested is both generic_fns.mol_res_spin.create_molecule() and
219 prompt.molecule.create().
220 """
221
222
223 dp = pipes.get_pipe('orig')
224
225
226 self.molecule_fns.create('Ap4Aase')
227 self.molecule_fns.create('ATP')
228 self.molecule_fns.create(mol_name='MgF4')
229
230
231 self.assertEqual(dp.mol[0].name, 'Ap4Aase')
232 self.assertEqual(dp.mol[1].name, 'ATP')
233 self.assertEqual(dp.mol[2].name, 'MgF4')
234
235
237 """Test the failure of molecule creation by supplying two molecules with the same name.
238
239 The function tested is both generic_fns.mol_res_spin.create_molecule() and
240 prompt.molecule.create().
241 """
242
243
244 self.molecule_fns.create('CaM')
245
246
247 self.assertRaises(RelaxError, self.molecule_fns.create, 'CaM')
248
249
251 """Test molecule deletion.
252
253 The function tested is both generic_fns.mol_res_spin.delete_molecule() and
254 prompt.molecule.delete().
255 """
256
257
258 self.setup_data()
259
260
261 dp = pipes.get_pipe('orig')
262
263
264 self.molecule_fns.delete(mol_id='#Old mol')
265
266
267 self.assertEqual(dp.mol[0].name, 'New mol')
268 self.assertEqual(dp.mol[0].res[0].num, 1)
269 self.assertEqual(dp.mol[0].res[0].name, 'Ala')
270 self.assertEqual(dp.mol[0].res[0].spin[0].num, 111)
271 self.assert_(hasattr(dp.mol[0].res[0].spin[0], 'x'))
272 self.assertEqual(dp.mol[0].res[1].num, 5)
273 self.assertEqual(dp.mol[0].res[1].name, 'Ala')
274 self.assertEqual(dp.mol[0].res[1].spin[0].num, 111)
275 self.assert_(hasattr(dp.mol[0].res[1].spin[0], 'x'))
276
277
279 """Test the deletion of all molecules.
280
281 The function tested is both generic_fns.mol_res_spin.delete_molecule() and
282 prompt.molecule.delete().
283 """
284
285
286 dp = pipes.get_pipe('orig')
287
288
289 self.setup_data()
290
291
292 self.molecule_fns.delete(mol_id='#Old mol')
293 self.molecule_fns.delete(mol_id='#New mol')
294
295
296 self.assertEqual(dp.mol[0].name, None)
297 self.assertEqual(dp.mol[0].res[0].num, None)
298 self.assertEqual(dp.mol[0].res[0].name, None)
299 self.assertEqual(dp.mol[0].res[0].spin[0].num, None)
300 self.assertEqual(dp.mol[0].res[0].spin[0].name, None)
301
302
315
316
331
332
346
347
349 """Test the renaming of a molecule.
350
351 The function tested is both generic_fns.mol_res_spin.name_molecule() and
352 prompt.molecule.name().
353 """
354
355
356 self.setup_data()
357
358
359 dp = pipes.get_pipe('orig')
360
361
362 self.molecule_fns.name(mol_id='#New mol', name='K', force=True)
363
364
365 self.assertEqual(dp.mol[1].name, 'K')
366
367
380
381
383 """Test the failure of the naming of multiple molecules to the same name.
384
385 The function tested is both generic_fns.mol_res_spin.name_molecule() and
386 prompt.molecule.name().
387 """
388
389
390 self.setup_data()
391
392
393 self.assertRaises(RelaxMultiMolIDError, self.molecule_fns.name, mol_id='#Old mol,New mol', name='K')
394