1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 from data_store import Relax_data_store; ds = Relax_data_store()
24 from pipe_control import pipes
25 from lib.errors import RelaxError, RelaxNoPipeError, RelaxSpinSelectDisallowError
26 from test_suite.unit_tests.base_classes import UnitTestCase
27
28
30 """Testing base class for 'prompt.residue' and corresponding 'pipe_control.mol_res_spin' fns.
31
32 This base class also contains many shared unit tests.
33 """
34
36 """Set up for all the residue unit tests."""
37
38
39 ds.add(pipe_name='orig', pipe_type='mf')
40
41
42 ds.add(pipe_name='test', pipe_type='mf')
43
44
45 pipes.switch('orig')
46
47
49 """Function for setting up some data for the unit tests."""
50
51
52 dp = pipes.get_pipe('orig')
53
54
55 self.residue_fns.create(1, 'Ala')
56 dp.mol[0].res[0].spin[0].num = 111
57 dp.mol[0].res[0].spin[0].x = 1
58 dp.mol[0].name = 'Old mol'
59
60
61 dp.mol.add_item('New mol')
62
63
64 self.residue_fns.copy(res_from=':1', res_to='#New mol')
65 self.residue_fns.copy(res_from='#Old mol:1', res_to='#New mol:5')
66
67
68 dp.mol[0].res[0].spin[0].num = 222
69 dp.mol[0].res[0].spin[0].x = 2
70
71
73 """Test the copying of the residue data between different molecules.
74
75 The function tested is both pipe_control.mol_res_spin.copy_residue() and
76 prompt.residue.copy().
77 """
78
79
80 self.setup_data()
81
82
83 dp = pipes.get_pipe('orig')
84
85
86 self.assertEqual(dp.mol[0].res[0].num, 1)
87 self.assertEqual(dp.mol[0].res[0].name, 'Ala')
88 self.assertEqual(dp.mol[0].res[0].spin[0].num, 222)
89 self.assertEqual(dp.mol[0].res[0].spin[0].x, 2)
90
91
92 self.assertEqual(dp.mol[1].name, 'New mol')
93 self.assertEqual(dp.mol[1].res[0].num, 1)
94 self.assertEqual(dp.mol[1].res[0].name, 'Ala')
95 self.assertEqual(dp.mol[1].res[0].spin[0].num, 111)
96 self.assertEqual(dp.mol[1].res[0].spin[0].x, 1)
97
98
99 self.assertEqual(dp.mol[1].res[1].num, 5)
100 self.assertEqual(dp.mol[1].res[1].name, 'Ala')
101 self.assertEqual(dp.mol[1].res[1].spin[0].num, 111)
102 self.assertEqual(dp.mol[1].res[1].spin[0].x, 1)
103
104
105
107 """Test the copying of the residue data between different data pipes.
108
109 The function tested is both pipe_control.mol_res_spin.copy_residue() and
110 prompt.residue.copy().
111 """
112
113
114 dp = pipes.get_pipe('orig')
115 dp_test = pipes.get_pipe('test')
116
117
118 self.residue_fns.create(1, 'Ala')
119 dp.mol[0].res[0].spin[0].num = 111
120 dp.mol[0].res[0].spin[0].x = 1
121
122
123 self.residue_fns.copy(res_from=':1', pipe_to='test')
124 self.residue_fns.copy(pipe_from='orig', res_from=':1', pipe_to='test', res_to=':5')
125
126
127 dp.mol[0].res[0].spin[0].num = 222
128 dp.mol[0].res[0].spin[0].x = 2
129
130
131 self.assertEqual(dp.mol[0].res[0].num, 1)
132 self.assertEqual(dp.mol[0].res[0].name, 'Ala')
133 self.assertEqual(dp.mol[0].res[0].spin[0].num, 222)
134 self.assertEqual(dp.mol[0].res[0].spin[0].x, 2)
135
136
137 self.assertEqual(dp_test.mol[0].res[0].num, 1)
138 self.assertEqual(dp_test.mol[0].res[0].name, 'Ala')
139 self.assertEqual(dp_test.mol[0].res[0].spin[0].num, 111)
140 self.assertEqual(dp_test.mol[0].res[0].spin[0].x, 1)
141
142
143 self.assertEqual(dp_test.mol[0].res[1].num, 5)
144 self.assertEqual(dp_test.mol[0].res[1].name, 'Ala')
145 self.assertEqual(dp_test.mol[0].res[1].spin[0].num, 111)
146 self.assertEqual(dp_test.mol[0].res[1].spin[0].x, 1)
147
148
150 """Test the copying of the residue data between different data pipes.
151
152 The function tested is both pipe_control.mol_res_spin.copy_residue() and
153 prompt.residue.copy().
154 """
155
156
157 dp = pipes.get_pipe('orig')
158
159
160 self.residue_fns.create(1, 'Ala')
161 dp.mol[0].res[0].spin[0].num = 111
162 dp.mol[0].res[0].spin[0].x = 1
163
164
165 self.assertRaises(RelaxNoPipeError, self.residue_fns.copy, res_from=':1', pipe_to='test2')
166
167
169 """Test the copying of the residue data within a single molecule.
170
171 The function tested is both pipe_control.mol_res_spin.copy_residue() and
172 prompt.residue.copy().
173 """
174
175
176 dp = pipes.get_pipe('orig')
177
178
179 self.residue_fns.create(1, 'Ala')
180 dp.mol[0].res[0].spin[0].num = 111
181 dp.mol[0].res[0].spin[0].x = 1
182
183
184 self.residue_fns.copy(res_from=':1', res_to=':2')
185 self.residue_fns.copy(res_from=':1', pipe_to='orig', res_to=':3')
186
187
188 dp.mol[0].res[0].spin[0].num = 222
189 dp.mol[0].res[0].spin[0].x = 2
190
191
192 self.residue_fns.copy(res_from=':1', res_to=':4,Met')
193
194
195 self.assertEqual(dp.mol[0].res[0].num, 1)
196 self.assertEqual(dp.mol[0].res[0].name, 'Ala')
197 self.assertEqual(dp.mol[0].res[0].spin[0].num, 222)
198 self.assertEqual(dp.mol[0].res[0].spin[0].x, 2)
199
200
201 self.assertEqual(dp.mol[0].res[1].num, 2)
202 self.assertEqual(dp.mol[0].res[1].name, 'Ala')
203 self.assertEqual(dp.mol[0].res[1].spin[0].num, 111)
204 self.assertEqual(dp.mol[0].res[1].spin[0].x, 1)
205
206
207 self.assertEqual(dp.mol[0].res[2].num, 3)
208 self.assertEqual(dp.mol[0].res[2].name, 'Ala')
209 self.assertEqual(dp.mol[0].res[2].spin[0].num, 111)
210 self.assertEqual(dp.mol[0].res[2].spin[0].x, 1)
211
212
213 self.assertEqual(dp.mol[0].res[3].num, 4)
214 self.assertEqual(dp.mol[0].res[3].name, 'Met')
215 self.assertEqual(dp.mol[0].res[3].spin[0].num, 222)
216 self.assertEqual(dp.mol[0].res[3].spin[0].x, 2)
217
218
220 """The failure of copying residue data within a molecule of a non-existent residue.
221
222 The function tested is both pipe_control.mol_res_spin.copy_residue() and
223 prompt.residue.copy().
224 """
225
226
227 self.residue_fns.create(1, 'Ala')
228 self.residue_fns.create(-1, 'His')
229
230
231 self.assertRaises(RelaxError, self.residue_fns.copy, res_from=':Met', res_to=':2,Gly')
232
233
235 """The failure of copying residue data within a molecule to a residue which already exists.
236
237 The function tested is both pipe_control.mol_res_spin.copy_residue() and
238 prompt.residue.copy().
239 """
240
241
242 self.residue_fns.create(1, 'Ala')
243 self.residue_fns.create(-1, 'His')
244
245
246 self.assertRaises(RelaxError, self.residue_fns.copy, res_from=':1', res_to=':-1,Gly')
247
248
250 """Test the creation of a residue.
251
252 The function tested is both pipe_control.mol_res_spin.create_residue() and
253 prompt.residue.create().
254 """
255
256
257 dp = pipes.get_pipe('orig')
258
259
260 self.residue_fns.create(1, 'Ala')
261 self.residue_fns.create(2, 'Leu')
262 self.residue_fns.create(-3, 'Ser')
263
264
265 self.assertEqual(dp.mol[0].res[0].num, 1)
266 self.assertEqual(dp.mol[0].res[1].num, 2)
267 self.assertEqual(dp.mol[0].res[2].num, -3)
268
269
270 self.assertEqual(dp.mol[0].res[0].name, 'Ala')
271 self.assertEqual(dp.mol[0].res[1].name, 'Leu')
272 self.assertEqual(dp.mol[0].res[2].name, 'Ser')
273
274
276 """Test the failure of residue creation (by supplying two residues with the same number).
277
278 The function tested is both pipe_control.mol_res_spin.create_residue() and
279 prompt.residue.create().
280 """
281
282
283 self.residue_fns.create(1, 'Ala')
284
285
286 self.assertRaises(RelaxError, self.residue_fns.create, 1, 'Ala')
287
288
290 """Test residue deletion using residue name identifiers.
291
292 The function tested is both pipe_control.mol_res_spin.delete_residue() and
293 prompt.residue.delete().
294 """
295
296
297 dp = pipes.get_pipe('orig')
298
299
300 self.residue_fns.create(1, 'Ala')
301 self.residue_fns.create(2, 'Ala')
302 self.residue_fns.create(3, 'Ala')
303 self.residue_fns.create(4, 'Gly')
304 dp.mol[0].res[3].spin[0].num = 111
305 dp.mol[0].res[3].spin[0].x = 1
306
307
308 self.residue_fns.delete(res_id=':Ala')
309
310
311 self.assertEqual(dp.mol[0].res[0].num, 4)
312 self.assertEqual(dp.mol[0].res[0].name, 'Gly')
313 self.assertEqual(dp.mol[0].res[0].spin[0].num, 111)
314 self.assertTrue(hasattr(dp.mol[0].res[0].spin[0], 'x'))
315
316
318 """Test residue deletion using residue number identifiers.
319
320 The function tested is both pipe_control.mol_res_spin.delete_residue() and
321 prompt.residue.delete().
322 """
323
324
325 dp = pipes.get_pipe('orig')
326
327
328 self.residue_fns.create(1, 'Ala')
329 self.residue_fns.create(2, 'Ala')
330 self.residue_fns.create(3, 'Ala')
331 self.residue_fns.create(4, 'Gly')
332 dp.mol[0].res[3].spin[0].num = 111
333 dp.mol[0].res[3].spin[0].x = 1
334
335
336 self.residue_fns.delete(res_id=':1')
337
338
339 self.assertEqual(dp.mol[0].res[0].num, 2)
340 self.assertEqual(dp.mol[0].res[0].name, 'Ala')
341 self.assertEqual(dp.mol[0].res[1].num, 3)
342 self.assertEqual(dp.mol[0].res[1].name, 'Ala')
343 self.assertEqual(dp.mol[0].res[2].num, 4)
344 self.assertEqual(dp.mol[0].res[2].name, 'Gly')
345 self.assertEqual(dp.mol[0].res[2].spin[0].num, 111)
346 self.assertTrue(hasattr(dp.mol[0].res[2].spin[0], 'x'))
347
348
350 """Test the deletion of all residues.
351
352 The function tested is both pipe_control.mol_res_spin.delete_residue() and
353 prompt.residue.delete().
354 """
355
356
357 dp = pipes.get_pipe('orig')
358
359
360 self.residue_fns.create(1, 'Ala')
361 self.residue_fns.create(2, 'Ala')
362 self.residue_fns.create(3, 'Ala')
363 self.residue_fns.create(4, 'Ala')
364 dp.mol[0].res[3].spin[0].num = 111
365 dp.mol[0].res[3].spin[0].x = 1
366
367
368 self.residue_fns.delete(res_id=':1-4')
369
370
371 self.assertEqual(dp.mol[0].res[0].num, None)
372 self.assertEqual(dp.mol[0].res[0].name, None)
373
374
376 """Test the deletion of multiple residues.
377
378 The function tested is both pipe_control.mol_res_spin.delete_residue() and
379 prompt.residue.delete().
380 """
381
382
383 dp = pipes.get_pipe('orig')
384
385
386 self.residue_fns.create(1, 'Ala')
387 self.residue_fns.create(2, 'Ala')
388 self.residue_fns.create(3, 'Ala')
389 self.residue_fns.create(4, 'Ala')
390 dp.mol[0].res[3].spin[0].num = 111
391 dp.mol[0].res[3].spin[0].x = 1
392
393
394 self.residue_fns.delete(res_id=':1,3')
395
396
397 self.assertEqual(dp.mol[0].res[0].num, 2)
398 self.assertEqual(dp.mol[0].res[1].num, 4)
399 self.assertEqual(dp.mol[0].res[1].spin[0].num, 111)
400 self.assertTrue(hasattr(dp.mol[0].res[1].spin[0], 'x'))
401
402
404 """Test the failure of residue deletion when an atom id is supplied.
405
406 The function tested is both pipe_control.mol_res_spin.delete_residue() and
407 prompt.residue.delete().
408 """
409
410
411 self.assertRaises(RelaxSpinSelectDisallowError, self.residue_fns.delete, res_id='@2')
412
413
415 """Test the display of residue information.
416
417 The function tested is both pipe_control.mol_res_spin.display_residue() and
418 prompt.residue.display().
419 """
420
421
422 self.setup_data()
423
424
425 self.residue_fns.display()
426 self.residue_fns.display(':1')
427 self.residue_fns.display('#New mol:5')
428 self.residue_fns.display('#Old mol:1')
429
430
432 """Test the failure of the display of residue information.
433
434 The function tested is both pipe_control.mol_res_spin.display_residue() and
435 prompt.residue.display().
436 """
437
438
439 self.setup_data()
440
441
442 self.assertRaises(RelaxSpinSelectDisallowError, self.residue_fns.display, '@N')
443
444
446 """Test the renaming of a residue.
447
448 The function tested is both pipe_control.mol_res_spin.name_residue() and
449 prompt.residue.name().
450 """
451
452
453 dp = pipes.get_pipe('orig')
454
455
456 self.residue_fns.create(-10, 'His')
457
458
459 self.residue_fns.name(res_id=':-10', name='K', force=True)
460
461
462 self.assertEqual(dp.mol[0].res[0].name, 'K')
463
464
466 """Test the renaming of multiple residues.
467
468 The function tested is both pipe_control.mol_res_spin.name_residue() and
469 prompt.residue.name().
470 """
471
472
473 dp = pipes.get_pipe('orig')
474
475
476 self.residue_fns.create(1, 'Ala')
477 dp.mol[0].res[0].spin[0].num = 111
478
479
480 self.residue_fns.copy(res_from=':1', res_to=':2')
481 self.residue_fns.copy(res_from=':1', res_to=':3')
482
483
484 dp.mol[0].res[0].name = 'His'
485
486
487 self.residue_fns.copy(res_from=':1', res_to=':4,Met')
488
489
490 self.residue_fns.name(res_id=':Ala', name='Gln', force=True)
491
492
493 self.assertEqual(dp.mol[0].res[1].name, 'Gln')
494 self.assertEqual(dp.mol[0].res[2].name, 'Gln')
495
496
497 self.assertEqual(dp.mol[0].res[0].name, 'His')
498 self.assertEqual(dp.mol[0].res[3].name, 'Met')
499
500
502 """Test the failure of naming a residue when a spin id is given.
503
504 The function tested is both pipe_control.mol_res_spin.name_residue() and
505 prompt.residue.name().
506 """
507
508
509 self.assertRaises(RelaxSpinSelectDisallowError, self.residue_fns.name, res_id='@111', name='K')
510
511
513 """Test the renumbering of a residue.
514
515 The function tested is both pipe_control.mol_res_spin.number_residue() and
516 prompt.residue.number().
517 """
518
519
520 dp = pipes.get_pipe('orig')
521
522
523 self.residue_fns.create(-10, 'His')
524
525
526 self.residue_fns.number(res_id=':-10', number=10, force=True)
527
528
529 self.assertEqual(dp.mol[0].res[0].num, 10)
530
531
533 """Test the numbering of multiple residues.
534
535 The function tested is both pipe_control.mol_res_spin.number_residue() and
536 prompt.residue.number().
537 """
538
539
540 dp = pipes.get_pipe('orig')
541
542
543 self.residue_fns.create(1, 'Ala')
544
545
546 self.residue_fns.copy(res_from=':1', res_to=':2')
547 self.residue_fns.copy(res_from=':1', res_to=':3')
548
549
550 dp.mol[0].res[0].spin[0].name = 'His'
551
552
553 self.residue_fns.copy(res_from=':1', res_to=':4,Met')
554
555
556 self.assertRaises(RelaxError, self.residue_fns.number, res_id=':Ala', number=10)
557
558
560 """Test the failure of naming a residue when a spin id is given.
561
562 The function tested is both pipe_control.mol_res_spin.number_residue() and
563 prompt.residue.number().
564 """
565
566
567 self.assertRaises(RelaxSpinSelectDisallowError, self.residue_fns.number, res_id='@111', number=10)
568