1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 from math import pi, sqrt
24 from numpy import array
25 from numpy.linalg import norm
26 from os import listdir, sep
27 from tempfile import mkdtemp
28
29
30 from data import Relax_data_store; ds = Relax_data_store()
31 from generic_fns.align_tensor import calc_chi_tensor
32 from generic_fns.interatomic import interatomic_loop, return_interatom
33 from generic_fns.mol_res_spin import return_spin, spin_index_loop, spin_loop
34 from generic_fns.pipes import get_pipe
35 from status import Status; status = Status()
36 from test_suite.system_tests.base_classes import SystemTestCase
37
38
40 """Class for testing various aspects specific to the N-state model."""
41
43 """Auxiliary method for checking the correct loading of bond vectors."""
44
45
46 ds.order_new = array([ds.order_struct[ds.order_model[ds.order_model[0]]],
47 ds.order_struct[ds.order_model[ds.order_model[1]]],
48 ds.order_struct[ds.order_model[ds.order_model[2]]]])
49
50
51 C_pos = []
52 C_pos.append(array([6.250, 0.948, 1.968]))
53 C_pos.append(array([6.438, -0.139, 1.226]))
54 C_pos.append(array([6.108, -0.169, 0.378]))
55
56 H_pos = []
57 H_pos.append(array([7.243, 0.580, 1.676]))
58 H_pos.append(array([7.271, -0.291, 0.525]))
59 H_pos.append(array([5.735, 0.003, -0.639]))
60
61
62 vect = []
63 for i in range(3):
64 vect.append(H_pos[i] - C_pos[i])
65
66
67 for i in range(3):
68 vect[i] = vect[i] / norm(vect[i])
69
70
71 print("Structure order: %s" % ds.order_struct)
72 print("Model order: %s" % ds.order_model)
73 print("New order: %s" % ds.order_new)
74 for i in range(3):
75 print("\ni = %i" % i)
76 print("The real vector: %s" % vect[i])
77 print("The reordered vector: %s" % vect[ds.order_new[i]])
78 print("The loaded vector: %s" % cdp.interatomic[0].vector[i])
79
80
81 for i in range(3):
82 self.assertAlmostEqual(norm(C_pos[ds.order_new[i]] - cdp.mol[0].res[0].spin[0].pos[i]), 0.0)
83 self.assertAlmostEqual(norm(H_pos[ds.order_new[i]] - cdp.mol[0].res[0].spin[1].pos[i]), 0.0)
84 for i in range(3):
85 self.assertAlmostEqual(norm(vect[ds.order_new[i]] - cdp.interatomic[0].vector[i]), 0.0)
86
87
89 """A 5-state model in the xz-plane (no pivotting of alpha).
90
91 The 5 states correspond to the Euler angles (z-y-z notation):
92 - State 1: {0, pi/4, 0}
93 - State 2: {0, pi/8, 0}
94 - State 3: {0, 0, 0}
95 - State 4: {0, -pi/8, 0}
96 - State 5: {0, -pi/4, 0}
97 """
98
99
100 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'n_state_model'+sep+'5_state_xz.py')
101
102
103 self.assertAlmostEqual(cdp.probs[0], 0.2)
104 self.assertAlmostEqual(cdp.probs[1], 0.2)
105 self.assertAlmostEqual(cdp.probs[2], 0.2)
106 self.assertAlmostEqual(cdp.probs[3], 0.2)
107 self.assertAlmostEqual(cdp.probs[4], 0.2)
108
109
110 self.assertAlmostEqual(cdp.alpha[0], 0.0)
111 self.assertAlmostEqual(cdp.alpha[1], 0.0)
112 self.assertAlmostEqual(cdp.alpha[2], 0.0)
113 self.assertAlmostEqual(cdp.alpha[3], 0.0)
114 self.assertAlmostEqual(cdp.alpha[4], 0.0)
115
116
117 self.assertAlmostEqual(cdp.beta[0], pi/4)
118 self.assertAlmostEqual(cdp.beta[1], pi/8)
119 self.assertAlmostEqual(cdp.beta[2], 0.0)
120 self.assertAlmostEqual(cdp.beta[3], -pi/8)
121 self.assertAlmostEqual(cdp.beta[4], -pi/4)
122
123
124 self.assertAlmostEqual(cdp.gamma[0], 0.0)
125 self.assertAlmostEqual(cdp.gamma[1], 0.0)
126 self.assertAlmostEqual(cdp.gamma[2], 0.0)
127 self.assertAlmostEqual(cdp.gamma[3], 0.0)
128 self.assertAlmostEqual(cdp.gamma[4], 0.0)
129
130
131 self.assertAlmostEqual(cdp.chi2, 3.15009916529e-32)
132
133
135 """Test the conversion of the alignment tensor to the chi tensor."""
136
137
138 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'n_state_model'+sep+'A_to_chi.py')
139
140
141 for i in range(3):
142 self.assertAlmostEqual(cdp.chi[i, i] * 1e32, cdp.chi_ref[i] * 1e32, 2)
143
144
146 """Test the fitting of signless RDCs."""
147
148
149 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'n_state_model'+sep+'absolute_rdcs.py')
150
151
152 self.assertAlmostEqual(cdp.align_tensors[0].Axx, -0.351261/2000)
153 self.assertAlmostEqual(cdp.align_tensors[0].Ayy, 0.556994/2000)
154 self.assertAlmostEqual(cdp.align_tensors[0].Axy, -0.506392/2000)
155 self.assertAlmostEqual(cdp.align_tensors[0].Axz, 0.560544/2000)
156 self.assertAlmostEqual(cdp.align_tensors[0].Ayz, -0.286367/2000)
157 self.assertAlmostEqual(cdp.chi2, 0.0)
158 self.assertAlmostEqual(cdp.q_rdc, 0.0)
159
160
161 rdcs = [5.59633342475, 13.31357940769, 7.03826972130, 3.39286328073, 2.09118060289, 11.44314950665, 9.06351706695, 2.33713806872, 5.81432510092, 13.10212128419, 2.52845064335, 4.70528375938, 4.07965480340, 6.28030444828, 4.69179757106, 2.34216201798, 3.89567105101, 5.51427513007, 0.72184322202, 3.81502890358, 10.88354253947, 1.66151988717, 4.29930397984, 4.46950447650, 6.99742077188, 2.27879506276, 3.64303288709, 6.83945430255, 3.19585334782]
162
163
164 self.interpreter.rdc.back_calc('abs')
165
166
167 i = 0
168 for spin in spin_loop():
169
170 if not hasattr(spin, 'rdc'):
171 continue
172
173
174 self.assertAlmostEqual(spin.rdc['abs'], abs(rdcs[i]))
175 self.assertAlmostEqual(spin.rdc_bc['abs'], abs(rdcs[i]))
176
177
178 i += 1
179
180
182 """Test the fitting of signless RDCs for menthol."""
183
184
185 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'n_state_model'+sep+'absolute_rdcs_menthol.py')
186
187
188 self.assertAlmostEqual(cdp.align_tensors[0].Axx, -9.784232367053e-05)
189 self.assertAlmostEqual(cdp.align_tensors[0].Ayy, -7.158933725824e-05)
190 self.assertAlmostEqual(cdp.align_tensors[0].Axy, 4.467570786770e-06)
191 self.assertAlmostEqual(cdp.align_tensors[0].Axz, 5.153319781627e-06)
192 self.assertAlmostEqual(cdp.align_tensors[0].Ayz, 1.801211682780e-04)
193 self.assertAlmostEqual(cdp.chi2, 1044.9572886805781)
194 self.assertAlmostEqual(cdp.q_rdc, 0.0)
195 self.assertAlmostEqual(cdp.q_rdc_norm2, 0.81262759306400001)
196
197
199 """Test the use of RDCs and PCSs to find the alignment tensor."""
200
201
202 ds.mode = 'all'
203 tag = 'synth'
204
205
206 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'n_state_model'+sep+'align_fit.py')
207
208
209 self.assertAlmostEqual(cdp.align_tensors[0].Axx, -0.351261/2000)
210 self.assertAlmostEqual(cdp.align_tensors[0].Ayy, 0.556994/2000)
211 self.assertAlmostEqual(cdp.align_tensors[0].Axy, -0.506392/2000)
212 self.assertAlmostEqual(cdp.align_tensors[0].Axz, 0.560544/2000)
213 self.assertAlmostEqual(cdp.align_tensors[0].Ayz, -0.286367/2000)
214 self.assertAlmostEqual(cdp.chi2, 0.0)
215 self.assertAlmostEqual(cdp.q_rdc, 0.0)
216 self.assertAlmostEqual(cdp.q_pcs, 0.0)
217
218
219 pcs = [1.0261275236, 0.75832284646, 0.65377417467, 0.88410306916, 0.83665620282, 1.887881182, 1.6564530832, 1.8489841033, -1.1143070855, -0.52863087918, -0.67600660991, -0.36996952054, -0.50720205688, -0.39889489474, -0.41237130008, -0.71313422816, -0.58642013802, -1.2160818959, -1.3990341569, -1.4084215541, -1.2007391713, -2.1392542193, -2.0165726596, -1.7623442985, -1.6437792517, -1.2415832517, -1.3008765368, -1.5872391105, -1.8060331465, -1.9063640494, -1.9817787999, -0.85264936663, -0.98332177588, -0.13370651687, -0.41762890604, -0.038212181921, -0.37986098085, 0.63582157322, 0.48346482178, 1.7566240094, 1.5694652222, 1.9914499872, 2.5316890107, 1.4559940851, 1.8661428328, 0.65003087965, 0.91690449156, 3.2096229388, 3.5547526651, 3.0579308183, 3.5933428117, 2.9062016872, 3.3750576279, 2.1848555929, 2.4769802024, 1.6466129291, 1.7719619979, 1.1373876736, 1.2182451528]
220 i = 0
221 for spin in spin_loop():
222
223 if not hasattr(spin, 'pcs'):
224 continue
225
226
227 self.assertAlmostEqual(spin.pcs[tag], pcs[i])
228
229
230 self.assertAlmostEqual(spin.pcs_bc[tag], pcs[i])
231
232
233 for sim_index in range(cdp.sim_number):
234 self.assert_(abs(spin.pcs_sim[tag][sim_index] - spin.pcs[tag]) < 6.0*spin.pcs_err[tag])
235
236
237 i += 1
238
239
240 self.interpreter.pcs.back_calc(tag)
241
242
243 i = 0
244 for spin in spin_loop():
245
246 if not hasattr(spin, 'pcs'):
247 continue
248
249
250 self.assertAlmostEqual(spin.pcs_bc[tag], pcs[i])
251
252
253 i += 1
254
255
257 """Test the use of randomised RDCs and PCSs to find the alignment tensor."""
258
259
260 ds.mode = 'all'
261
262
263 ds.rand = True
264
265
266 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'n_state_model'+sep+'align_fit.py')
267
268
269 tag = 'synth'
270
271
272 for i in range(4):
273
274 self.assertAlmostEqual(cdp.align_tensors[0].Axx, -0.000189412096996)
275 self.assertAlmostEqual(cdp.align_tensors[0].Ayy, 0.000271130087923)
276 self.assertAlmostEqual(cdp.align_tensors[0].Axy, -0.000264898401302)
277 self.assertAlmostEqual(cdp.align_tensors[0].Axz, 0.000284115871058)
278 self.assertAlmostEqual(cdp.align_tensors[0].Ayz, -0.000152207413184)
279 self.assertAlmostEqual(cdp.chi2, 783.530808266)
280 self.assertAlmostEqual(cdp.q_pcs, 0.063345784112045375)
281 self.assertAlmostEqual(cdp.q_rdc, 0.084926009099013003)
282
283
284 spin = return_spin(':114@N')
285 interatom = return_interatom(':114@N', ':114@H')
286
287
288 self.assertAlmostEqual(interatom.rdc[tag], -8.9193269604999994)
289 self.assertAlmostEqual(interatom.rdc_bc[tag], -9.1030018792821394)
290 self.assertAlmostEqual(spin.pcs[tag], -0.41430390310999998)
291 self.assertAlmostEqual(spin.pcs_bc[tag], -0.39723010845807194)
292
293
294 if i == 0:
295
296 for interatom in interatomic_loop():
297 interatom.rdc_err = {tag: 1.0}
298 for spin in spin_loop():
299 spin.pcs_err = {tag: 0.1}
300
301
302 self.interpreter.monte_carlo.setup(number=3)
303 self.interpreter.monte_carlo.create_data()
304 self.interpreter.monte_carlo.initial_values()
305 self.interpreter.minimise('simplex', constraints=False, max_iter=5)
306 self.interpreter.monte_carlo.error_analysis()
307
308
309 if i == 2:
310 self.interpreter.rdc.back_calc(tag)
311 self.interpreter.pcs.back_calc(tag)
312
313
314 if i == 1:
315 self.interpreter.rdc.calc_q_factors()
316 self.interpreter.pcs.calc_q_factors()
317
318
320 """Test the use of PCSs to find the alignment tensor."""
321
322
323 ds.mode = 'pcs'
324
325
326 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'n_state_model'+sep+'align_fit.py')
327
328
329 self.assertAlmostEqual(cdp.align_tensors[0].Axx, -0.351261/2000)
330 self.assertAlmostEqual(cdp.align_tensors[0].Ayy, 0.556994/2000)
331 self.assertAlmostEqual(cdp.align_tensors[0].Axy, -0.506392/2000)
332 self.assertAlmostEqual(cdp.align_tensors[0].Axz, 0.560544/2000)
333 self.assertAlmostEqual(cdp.align_tensors[0].Ayz, -0.286367/2000)
334 self.assertAlmostEqual(cdp.chi2, 0.0)
335 self.assertAlmostEqual(cdp.q_pcs, 0.0)
336
337
339 """Test the use of randomised PCSs to find the alignment tensor."""
340
341
342 ds.mode = 'pcs'
343
344
345 ds.rand = True
346
347
348 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'n_state_model'+sep+'align_fit.py')
349
350
351 self.assertAlmostEqual(cdp.align_tensors[0].Axx, -0.000189165581069)
352 self.assertAlmostEqual(cdp.align_tensors[0].Ayy, 0.000271897288335)
353 self.assertAlmostEqual(cdp.align_tensors[0].Axy, -0.000264627388896)
354 self.assertAlmostEqual(cdp.align_tensors[0].Axz, 0.000284180080857)
355 self.assertAlmostEqual(cdp.align_tensors[0].Ayz, -0.00015165641132)
356 self.assertAlmostEqual(cdp.chi2, 756.268087443)
357 self.assertAlmostEqual(cdp.q_pcs, 0.063341567973121266)
358
359
361 """Test the use of RDCs to find the alignment tensor."""
362
363
364 ds.mode = 'rdc'
365
366
367 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'n_state_model'+sep+'align_fit.py')
368
369
370 self.assertAlmostEqual(cdp.align_tensors[0].Axx, -0.351261/2000)
371 self.assertAlmostEqual(cdp.align_tensors[0].Ayy, 0.556994/2000)
372 self.assertAlmostEqual(cdp.align_tensors[0].Axy, -0.506392/2000)
373 self.assertAlmostEqual(cdp.align_tensors[0].Axz, 0.560544/2000)
374 self.assertAlmostEqual(cdp.align_tensors[0].Ayz, -0.286367/2000)
375 self.assertAlmostEqual(cdp.chi2, 0.0)
376 self.assertAlmostEqual(cdp.q_rdc, 0.0)
377
378
380 """Test the use of randomised RDCs to find the alignment tensor."""
381
382
383 ds.mode = 'rdc'
384
385
386 ds.rand = True
387
388
389 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'n_state_model'+sep+'align_fit.py')
390
391
392
393
394 self.assertAlmostEqual(cdp.align_tensors[0].Axx, -0.00017045)
395 self.assertAlmostEqual(cdp.align_tensors[0].Ayy, 0.00024905)
396 self.assertAlmostEqual(cdp.align_tensors[0].Axy, -0.00027502)
397 self.assertAlmostEqual(cdp.align_tensors[0].Axz, 0.00029833)
398 self.assertAlmostEqual(cdp.align_tensors[0].Ayz, -0.00015125)
399 self.assertAlmostEqual(cdp.chi2, 23.5877482365)
400 self.assertAlmostEqual(cdp.q_rdc, 0.078460000413257444)
401 self.assertAlmostEqual(cdp.q_rdc_norm2, 0.14049691097282743)
402
403
405 """The copying of RDC and PCS data from one pipe to another."""
406
407
408 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'n_state_model'+sep+'data_copying.py')
409
410
411 orig = get_pipe('orig')
412 new = get_pipe('new')
413
414
415 self.assertEqual(orig.rdc_ids, new.rdc_ids)
416 self.assertEqual(orig.pcs_ids, new.pcs_ids)
417 self.assertEqual(orig.align_ids, new.align_ids)
418
419
420 for mol_index, res_index, spin_index in spin_index_loop():
421
422 spin_orig = orig.mol[mol_index].res[res_index].spin[spin_index]
423 spin_new = new.mol[mol_index].res[res_index].spin[spin_index]
424
425
426 for id in orig.align_ids:
427
428 if hasattr(spin_orig, 'rdc'):
429
430 self.assertEqual(spin_orig.rdc.keys(), spin_new.rdc.keys())
431
432
433 if id in spin_orig.rdc:
434 self.assertEqual(spin_orig.rdc[id], spin_new.rdc[id])
435
436
437 if hasattr(spin_orig, 'pcs'):
438
439 self.assertEqual(spin_orig.pcs.keys(), spin_new.pcs.keys())
440
441
442 if id in spin_orig.pcs:
443 self.assertEqual(spin_orig.pcs[id], spin_new.pcs[id])
444
445
447 """The 4-state model analysis of lactose using RDCs and PCSs."""
448
449
450 ds.model = 'fixed'
451
452
453 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'n_state_model'+sep+'lactose_n_state.py')
454
455
457 """The 4-state model analysis of lactose using RDCs and PCSs."""
458
459
460 ds.model = 'population'
461
462
463 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'n_state_model'+sep+'lactose_n_state.py')
464
465
491
492
616
617
619 """Test the use of RDCs and PCSs to find the alignment tensor with missing data."""
620
621
622 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'n_state_model'+sep+'missing_data_test.py')
623
624
625 A_5D = []
626 A_5D.append([1.42219822168827662867e-04, -1.44543001566521341940e-04, -7.07796211648713973798e-04, -6.01619494082773244303e-04, 2.02008007072950861996e-04])
627 A_5D.append([3.56720663040924505435e-04, -2.68385787902088840916e-04, -1.69361406642305853832e-04, 1.71873715515064501074e-04, -3.05790155096090983822e-04])
628 A_5D.append([2.32088908680377300801e-07, 2.08076808579168379617e-06, -2.21735465435989729223e-06, -3.74311563209448033818e-06, -2.40784858070560310370e-06])
629 A_5D.append([-2.62495279588228071048e-04, 7.35617367964106275147e-04, 6.39754192258981332648e-05, 6.27880171180572523460e-05, 2.01197582457700226708e-04])
630
631
632 for i in range(len(A_5D)):
633 self.assertAlmostEqual(cdp.align_tensors[i].Axx, A_5D[i][0])
634 self.assertAlmostEqual(cdp.align_tensors[i].Ayy, A_5D[i][1])
635 self.assertAlmostEqual(cdp.align_tensors[i].Axy, A_5D[i][2])
636 self.assertAlmostEqual(cdp.align_tensors[i].Axz, A_5D[i][3])
637 self.assertAlmostEqual(cdp.align_tensors[i].Ayz, A_5D[i][4])
638
639
640 self.assertAlmostEqual(cdp.chi2, 0.0)
641 self.assertAlmostEqual(cdp.q_rdc, 0.0)
642 self.assertAlmostEqual(cdp.q_pcs, 0.0)
643
644
646 """Test the Monte Carlo simulation data of fitting RDCs and PCSs."""
647
648
649 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'n_state_model'+sep+'monte_carlo_testing.py')
650
651
652 self.assertAlmostEqual(cdp.align_tensors[0].Axx, -0.351261/2000)
653 self.assertAlmostEqual(cdp.align_tensors[0].Ayy, 0.556994/2000)
654 self.assertAlmostEqual(cdp.align_tensors[0].Axy, -0.506392/2000)
655 self.assertAlmostEqual(cdp.align_tensors[0].Axz, 0.560544/2000)
656 self.assertAlmostEqual(cdp.align_tensors[0].Ayz, -0.286367/2000)
657 self.assertAlmostEqual(cdp.chi2 / 1e6, 1745860.0485368515 / 1e6, 6)
658 self.assertAlmostEqual(cdp.q_rdc, 0.0)
659 self.assertAlmostEqual(cdp.q_pcs, 0.0)
660
661
662 key = 'synth'
663
664
665 for spin in spin_loop():
666
667 print(spin)
668
669
670 self.assert_(hasattr(spin, 'pcs_sim'))
671 self.assert_(key in spin.pcs_sim)
672
673
674 for i in range(cdp.sim_number):
675 self.assertAlmostEqual(spin.pcs[key], spin.pcs_sim[key][i])
676
677
678 for interatom in interatomic_loop():
679
680 print(interatom)
681
682
683 self.assert_(hasattr(interatom, 'rdc_sim'))
684 self.assert_(key in interatom.rdc_sim)
685
686
687 for i in range(cdp.sim_number):
688 self.assertAlmostEqual(interatom.rdc[key], interatom.rdc_sim[key][i], 5)
689
690
691 for i in range(cdp.sim_number):
692 self.assertAlmostEqual(cdp.align_tensors[0].Axx, -0.351261/2000)
693 self.assertAlmostEqual(cdp.align_tensors[0].Ayy, 0.556994/2000)
694 self.assertAlmostEqual(cdp.align_tensors[0].Axy, -0.506392/2000)
695 self.assertAlmostEqual(cdp.align_tensors[0].Axz, 0.560544/2000)
696 self.assertAlmostEqual(cdp.align_tensors[0].Ayz, -0.286367/2000)
697 self.assertAlmostEqual(cdp.chi2 / 1e6, 1745860.0485368515 / 1e6, 5)
698
699
700 self.assertAlmostEqual(cdp.align_tensors[0].Axx_err, 0.0)
701 self.assertAlmostEqual(cdp.align_tensors[0].Ayy_err, 0.0)
702 self.assertAlmostEqual(cdp.align_tensors[0].Axy_err, 0.0)
703 self.assertAlmostEqual(cdp.align_tensors[0].Axz_err, 0.0)
704 self.assertAlmostEqual(cdp.align_tensors[0].Ayz_err, 0.0)
705
706
708 """Test the use of RDCs and PCSs to find the alignment tensor."""
709
710
711 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'n_state_model'+sep+'paramag_align_fit.py')
712
713
714 self.assertAlmostEqual(cdp.align_tensors[1].Axx, 0.001414718232784)
715 self.assertAlmostEqual(cdp.align_tensors[1].Ayy, 0.001530457843766)
716 self.assertAlmostEqual(cdp.align_tensors[1].Axy, 0.001689957281873)
717 self.assertAlmostEqual(cdp.align_tensors[1].Axz, 0.000838692329704)
718 self.assertAlmostEqual(cdp.align_tensors[1].Ayz, -0.000984302159683)
719 self.assertAlmostEqual(cdp.q_factors_rdc['Er'], 0.0, 7)
720 self.assertAlmostEqual(cdp.q_factors_rdc_norm2['Er'], 0.0, 7)
721 self.assertAlmostEqual(cdp.q_factors_pcs['Er'], 0.0, 7)
722 self.assertAlmostEqual(cdp.q_rdc, 0.0, 7)
723 self.assertAlmostEqual(cdp.q_pcs, 0.0, 7)
724
725
727 """Test the use of RDCs and PCSs to find the alignment tensor."""
728
729
730 ds.mode = 'all'
731
732
733 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'n_state_model'+sep+'paramag_centre_fit.py')
734
735
736 self.assertAlmostEqual(cdp.paramagnetic_centre[0], 32.555, 1)
737 self.assertAlmostEqual(cdp.paramagnetic_centre[1], -19.130, 1)
738 self.assertAlmostEqual(cdp.paramagnetic_centre[2], 27.775, 1)
739
740
741 self.assertAlmostEqual(cdp.align_tensors[0].Axx, -0.351261/2000, 5)
742 self.assertAlmostEqual(cdp.align_tensors[0].Ayy, 0.556994/2000, 5)
743 self.assertAlmostEqual(cdp.align_tensors[0].Axy, -0.506392/2000, 5)
744 self.assertAlmostEqual(cdp.align_tensors[0].Axz, 0.560544/2000, 5)
745 self.assertAlmostEqual(cdp.align_tensors[0].Ayz, -0.286367/2000, 5)
746 self.assertAlmostEqual(cdp.chi2, 0.0, 2)
747 self.assertAlmostEqual(cdp.q_rdc, 0.0, 2)
748 self.assertAlmostEqual(cdp.q_pcs, 0.0, 2)
749
750
752 """Test the back-calculation of PCSs for ubiquitin."""
753
754
755 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'n_state_model'+sep+'pcs_back_calc.py')
756
757
758 self.assertAlmostEqual(cdp.mol[0].res[0].spin[0].pcs_bc['A'], 0.061941887563792014)
759 self.assertAlmostEqual(cdp.mol[0].res[1].spin[0].pcs_bc['A'], -0.077886567972081502)
760 self.assertAlmostEqual(cdp.mol[0].res[2].spin[0].pcs_bc['A'], -0.13928519099517916)
761
762
764 """Test the fit of DNA PCSs at the true Ln3+ position."""
765
766
767 ds.para_centre = 'true'
768
769
770 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'n_state_model'+sep+'dna_pcs_fit.py')
771
772
773 self.assertAlmostEqual(cdp.align_tensors[0].Axx, 1.42219822168827662867e-04)
774 self.assertAlmostEqual(cdp.align_tensors[0].Ayy, -1.44543001566521341940e-04)
775 self.assertAlmostEqual(cdp.align_tensors[0].Axy, -7.07796211648713973798e-04)
776 self.assertAlmostEqual(cdp.align_tensors[0].Axz, -6.01619494082773244303e-04)
777 self.assertAlmostEqual(cdp.align_tensors[0].Ayz, 2.02008007072950861996e-04)
778 self.assertAlmostEqual(cdp.chi2, 0.0)
779 self.assertAlmostEqual(cdp.q_pcs, 0.0)
780
781
783 """Test the fit of DNA PCSs at a Ln3+ position of [0, 0, 0]."""
784
785
786 ds.para_centre = 'zero'
787
788
789 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'n_state_model'+sep+'dna_pcs_fit.py')
790
791
792 self.assertAlmostEqual(cdp.align_tensors[0].Axx, 9.739588118243e-07)
793 self.assertAlmostEqual(cdp.align_tensors[0].Ayy, -1.077401299806e-05)
794 self.assertAlmostEqual(cdp.align_tensors[0].Axy, -2.321033328910e-06)
795 self.assertAlmostEqual(cdp.align_tensors[0].Axz, 5.105903556692e-07)
796 self.assertAlmostEqual(cdp.align_tensors[0].Ayz, 1.676638764825e-05)
797 self.assertAlmostEqual(cdp.chi2, 2125.9562247877066)
798 self.assertAlmostEqual(cdp.q_pcs, 0.76065986767333704)
799
800
801 chi_diag = calc_chi_tensor(cdp.align_tensors[0].A_diag, 799.75376122 * 1e6, 298)
802 chi_diag = chi_diag * 1e33
803 self.assertAlmostEqual((chi_diag[2, 2] - (chi_diag[0, 0] + chi_diag[1, 1])/2.0), -6.726159808496, 5)
804 self.assertAlmostEqual((chi_diag[0, 0] - chi_diag[1, 1]), -3.960936794864, 6)
805
806
808 """Test the back-calculation of RDCs from a PCS derived tensor."""
809
810
811 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'n_state_model'+sep+'pcs_to_rdc.py')
812
813
814 self.assertAlmostEqual(cdp.interatomic[0].rdc_bc['A'], 4.1319413321530014)
815 self.assertAlmostEqual(cdp.interatomic[1].rdc_bc['A'], -9.5802642470087989)
816 self.assertAlmostEqual(cdp.interatomic[2].rdc_bc['A'], -16.244078605100817)
817
818
820 """Test the calculation of an alignment tensor from RDC data."""
821
822
823 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'n_state_model'+sep+'rdc_tensor.py')
824
825
827 """The full relative stereochemistry analysis."""
828
829
830 ds.tmpdir = mkdtemp()
831
832
833 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'n_state_model'+sep+'stereochem_analysis.py')
834
835
836 files = listdir(ds.tmpdir)
837 for file in files:
838 print("Checking file %s." % file)
839 self.assert_(file in ['NOE_viol_S_sorted', 'ensembles_superimposed', 'RDC_PAN_dist.agr', 'Q_factors_S', 'NOE_viol_curve.agr', 'NOE_viol_dist.agr', 'RDC_PAN_curve.agr', 'NOE_viol_S', 'Q_factors_R_sorted', 'NOE_results', 'Q_factors_R', 'NOE_viol_R_sorted', 'logs', 'NOE_viol_R', 'Q_factors_S_sorted', 'RDC_PAN_results', 'correlation_plot.agr', 'correlation_plot_scaled.agr'])
840
841
842 subdirs = ['ensembles_superimposed', 'logs', 'NOE_results', 'RDC_PAN_results']
843 files = [['S0.pdb', 'S2.pdb', 'R0.pdb', 'R1.pdb', 'S1.pdb', 'R2.pdb'],
844 ['RDC_PAN_analysis.log', 'NOE_viol.log'],
845 ['S_results_0.bz2', 'S_results_1.bz2', 'R_results_2.bz2', 'R_results_0.bz2', 'S_results_2.bz2', 'R_results_1.bz2'],
846 ['S_results_0.bz2', 'S_results_1.bz2', 'R_results_2.bz2', 'R_results_0.bz2', 'S_results_2.bz2', 'R_results_1.bz2']]
847 for i in range(len(subdirs)):
848 for file in listdir(ds.tmpdir + sep + subdirs[i]):
849 print("Checking file %s." % file)
850 self.assert_(file in files[i])
851
852
854 """Test the 'population' N-state model optimisation using RDCs and PCSs (with missing data)."""
855
856
857 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'n_state_model'+sep+'populations.py')
858
859
860 A_5D = []
861 A_5D.append([1.42219822168827662867e-04, -1.44543001566521341940e-04, -7.07796211648713973798e-04, -6.01619494082773244303e-04, 2.02008007072950861996e-04])
862 A_5D.append([3.56720663040924505435e-04, -2.68385787902088840916e-04, -1.69361406642305853832e-04, 1.71873715515064501074e-04, -3.05790155096090983822e-04])
863 A_5D.append([2.32088908680377300801e-07, 2.08076808579168379617e-06, -2.21735465435989729223e-06, -3.74311563209448033818e-06, -2.40784858070560310370e-06])
864 A_5D.append([-2.62495279588228071048e-04, 7.35617367964106275147e-04, 6.39754192258981332648e-05, 6.27880171180572523460e-05, 2.01197582457700226708e-04])
865
866
867 for i in range(len(A_5D)):
868 self.assertAlmostEqual(cdp.align_tensors[i].Axx, A_5D[i][0])
869 self.assertAlmostEqual(cdp.align_tensors[i].Ayy, A_5D[i][1])
870 self.assertAlmostEqual(cdp.align_tensors[i].Axy, A_5D[i][2])
871 self.assertAlmostEqual(cdp.align_tensors[i].Axz, A_5D[i][3])
872 self.assertAlmostEqual(cdp.align_tensors[i].Ayz, A_5D[i][4])
873
874
875 self.assertEqual(len(cdp.probs), 3)
876 self.assertAlmostEqual(cdp.probs[0], 0.3, 5)
877 self.assertAlmostEqual(cdp.probs[1], 0.6, 5)
878 self.assertAlmostEqual(cdp.probs[2], 0.1, 5)
879
880
881 self.assertAlmostEqual(cdp.chi2, 0.0, 5)
882 self.assertAlmostEqual(cdp.q_rdc, 0.0, 5)
883 self.assertAlmostEqual(cdp.q_pcs, 0.0, 5)
884
885
887 """Test the loading of inter-atomic vectors in the 'population' N-state model."""
888
889
890 ds.order_struct = [1, 2, 0]
891 ds.order_model = [0, 1, 2]
892
893
894 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'n_state_model'+sep+'vector_loading.py')
895
896
897 self.check_vectors()
898
899
901 """Test the loading of inter-atomic vectors in the 'population' N-state model."""
902
903
904 ds.order_struct = [0, 1, 2]
905 ds.order_model = [2, 0, 1]
906
907
908 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'n_state_model'+sep+'vector_loading.py')
909
910
911 self.check_vectors()
912
913
915 """Test the loading of inter-atomic vectors in the 'population' N-state model."""
916
917
918 ds.order_struct = [1, 0, 2]
919 ds.order_model = [2, 0, 1]
920
921
922 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'n_state_model'+sep+'vector_loading.py')
923
924
925 self.check_vectors()
926