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
24 import platform
25 import numpy
26 from os import path, sep, walk
27 from re import search
28 import sys
29 from tempfile import mkdtemp, mkstemp
30
31
32 from auto_analyses.dauvergne_protocol import dAuvergne_protocol
33 from data_store import Relax_data_store; ds = Relax_data_store()
34 import dep_check
35 from lib.compat import linux_distribution
36 from pipe_control import pipes
37 from pipe_control.interatomic import interatomic_loop
38 from pipe_control.mol_res_spin import spin_loop
39 from lib.errors import RelaxError, RelaxMultiSpinIDError
40 from lib.physical_constants import N15_CSA
41 from lib.io import DummyFileObject, open_read_file
42 from status import Status; status = Status()
43 from test_suite.system_tests.base_classes import SystemTestCase
44
45
46
47 SYSTEM = platform.system()
48 RELEASE = platform.release()
49 VERSION = platform.version()
50 WIN32_VER = platform.win32_ver()
51 DIST = linux_distribution()
52 ARCH = platform.architecture()
53 MACH = platform.machine()
54 PROC = platform.processor()
55 PY_VER = platform.python_version()
56 NUMPY_VER = numpy.__version__
57 LIBC_VER = platform.libc_ver()
58
59
60 if SYSTEM == 'Windows' or SYSTEM == 'Microsoft':
61
62 SYSTEM = 'Windows'
63
64
65
66 -class Mf(SystemTestCase):
67 """TestCase class for the functional tests of model-free analysis."""
68
69 - def __init__(self, methodName='runTest'):
70 """Skip some tests if bmrblib is not installed.
71
72 @keyword methodName: The name of the test.
73 @type methodName: str
74 """
75
76
77 super(Mf, self).__init__(methodName)
78
79
80 if not dep_check.bmrblib_module and methodName in ['test_bug_24131_bmrb_deposition', 'test_bug_24131_missing_interaction']:
81
82 status.skipped_tests.append([methodName, 'Bmrblib', self._skip_type])
83
84
90
91
93 """Common code for the test_read_results_1_3*() tests."""
94
95
96 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'model_free'+sep+'OMP'
97
98
99 self.interpreter.pipe.create('1.2', 'mf')
100 self.interpreter.results.read(file='final_results_trunc2_1.2', dir=path)
101
102
103 pipe_12 = pipes.get_pipe('1.2')
104 pipe_13 = pipes.get_pipe('1.3')
105
106
107 print("Comparison of the objects of the base data pipe:")
108 self.object_comparison(obj1=pipe_12, obj2=pipe_13, skip=['mol', 'interatomic', 'diff_tensor'])
109
110
111 print("Comparison of the objects of the diffusion tensor:")
112 self.object_comparison(obj1=pipe_12.diff_tensor, obj2=pipe_13.diff_tensor)
113
114
115 self.assertEqual(len(pipe_12.mol), len(pipe_13.mol))
116
117
118 for i in range(len(pipe_12.mol)):
119
120 print("Comparison of the objects of the molecule:")
121 self.object_comparison(obj1=pipe_12.mol[i], obj2=pipe_13.mol[i], skip=['res'])
122
123
124 self.assertEqual(len(pipe_12.mol[i].res), len(pipe_13.mol[i].res))
125
126
127 for j in range(len(pipe_12.mol[i].res)):
128
129 if j > 10:
130 break
131
132
133 print("Comparison of the objects of the residue:")
134 self.object_comparison(obj1=pipe_12.mol[i].res[j], obj2=pipe_13.mol[i].res[j], skip=['spin'])
135
136
137 self.assertEqual(len(pipe_12.mol[i].res[j].spin), len(pipe_13.mol[i].res[j].spin))
138
139
140 for k in range(len(pipe_12.mol[i].res[j].spin)):
141
142 print("Comparison of the objects of the spin:")
143 self.object_comparison(obj1=pipe_12.mol[i].res[j].spin[k], obj2=pipe_13.mol[i].res[j].spin[k])
144
145
146 for i in range(len(pipe_12.interatomic)):
147
148 print("Comparison of the objects of the interatomic data containers:")
149 self.object_comparison(obj1=pipe_12.interatomic[i], obj2=pipe_13.interatomic[i])
150
151
153 """Method for returning a string to help debug the minimisation.
154
155 @param spin: The SpinContainer of the optimised spin.
156 @type spin: SpinContainer instance
157 @return: The debugging string.
158 @rtype: str
159 """
160
161
162 string = 'Optimisation failure.\n\n'
163
164
165 string = string + "%-18s%-25s\n" % ("System: ", SYSTEM)
166 string = string + "%-18s%-25s\n" % ("Release: ", RELEASE)
167 string = string + "%-18s%-25s\n" % ("Version: ", VERSION)
168 string = string + "%-18s%-25s\n" % ("Win32 version: ", (WIN32_VER[0] + " " + WIN32_VER[1] + " " + WIN32_VER[2] + " " + WIN32_VER[3]))
169 string = string + "%-18s%-25s\n" % ("Distribution: ", (DIST[0] + " " + DIST[1] + " " + DIST[2]))
170 string = string + "%-18s%-25s\n" % ("Architecture: ", (ARCH[0] + " " + ARCH[1]))
171 string = string + "%-18s%-25s\n" % ("Machine: ", MACH)
172 string = string + "%-18s%-25s\n" % ("Processor: ", PROC)
173 string = string + "%-18s%-25s\n" % ("Python version: ", PY_VER)
174 string = string + "%-18s%-25s\n" % ("Numpy version: ", NUMPY_VER)
175 string = string + "%-18s%-25s\n" % ("Libc version: ", (LIBC_VER[0] + " " + LIBC_VER[1]))
176
177
178
179 string = string + '\n'
180 if spin.local_tm != None:
181 string = string + "%-15s %30.16g\n" % ('local_tm (ns):', spin.local_tm * 1e9)
182 if spin.s2 != None:
183 string = string + "%-15s %30.16g\n" % ('s2:', spin.s2)
184 if spin.s2f != None:
185 string = string + "%-15s %30.16g\n" % ('s2f:', spin.s2f)
186 if spin.s2s != None:
187 string = string + "%-15s %30.16g\n" % ('s2s:', spin.s2s)
188 if spin.te != None:
189 string = string + "%-15s %30.13g\n" % ('te (ps):', spin.te * 1e12)
190 if spin.tf != None:
191 string = string + "%-15s %30.13g\n" % ('tf (ps):', spin.tf * 1e12)
192 if spin.ts != None:
193 string = string + "%-15s %30.13g\n" % ('ts (ps):', spin.ts * 1e12)
194 if spin.rex != None:
195 string = string + "%-15s %30.17g\n" % ('rex:', spin.rex * (2.0 * pi * cdp.spectrometer_frq[cdp.ri_ids[0]])**2)
196 string = string + "%-15s %30.17g\n" % ('chi2:', spin.chi2)
197 string = string + "%-15s %30i\n" % ('iter:', spin.iter)
198 string = string + "%-15s %30i\n" % ('f_count:', spin.f_count)
199 string = string + "%-15s %30i\n" % ('g_count:', spin.g_count)
200 string = string + "%-15s %30i\n" % ('h_count:', spin.h_count)
201 string = string + "%-15s %30s\n" % ('warning:', spin.warning)
202
203
204 return string
205
206
217
218
220 """Check if the contents of 2 objects are the same."""
221
222
223 print("dir(obj1): %s" % dir(obj1))
224 print("dir(obj2): %s" % dir(obj2))
225 self.assertEqual(dir(obj1), dir(obj2))
226
227
228 for name in dir(obj1):
229
230 if skip and name in skip:
231 continue
232
233
234 if search('^_', name):
235 continue
236
237
238 if name in obj1.__class__.__dict__:
239 continue
240
241
242 print("\t" + name)
243
244
245 sub_obj1 = getattr(obj1, name)
246 sub_obj2 = getattr(obj2, name)
247
248
249 self.assertEqual(type(sub_obj1), type(sub_obj2))
250
251
252 if isinstance(sub_obj1, dict):
253 self.assertEqual(sub_obj1, sub_obj2)
254 else:
255 self.assertEqual(str(sub_obj1), str(sub_obj2))
256
257
259 """Test catching U{bug #14872<https://web.archive.org/web/https://gna.org/bugs/?14872>}, the unicode string selection failure as submitted by Olivier Serve."""
260
261
262 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'bug_14872_unicode_selection.py')
263
264
266 """Test catching U{bug #14941<https://web.archive.org/web/https://gna.org/bugs/?14941>}, the local tm global model selection problem as submitted by Mikaela Stewart (mikaela dot stewart att gmail dot com)."""
267
268
269 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'bug_14941_local_tm_global_selection.py')
270
271
273 """Test catching U{bug #15050<https://web.archive.org/web/https://gna.org/bugs/?15050>}, 'PipeContainer' object has no attribute 'diff_tensor' error as submitted by U{Tiago Pais<https://web.archive.org/web/https://gna.org/users/tpais>}."""
274
275
276 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'bug_15050.py')
277
278
280 """Test catching bugs U{#12582<https://web.archive.org/web/https://gna.org/bugs/?12582>}, U{#12591<https://web.archive.org/web/https://gna.org/bugs/?12591>} and U{#12607<https://web.archive.org/web/https://gna.org/bugs/?12607>} as submitted by Chris Brosey."""
281
282
283 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'bugs_12582_12591_12607.py')
284
285
286 self.assertNotEqual(cdp.mol[0].res[1].spin[0].s2, 1.0)
287
288
290 """Test catching U{bug #18790<https://web.archive.org/web/https://gna.org/bugs/?18790>}, the negative relaxation data RelaxError reported by Vitaly Vostrikov."""
291
292
293 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'bug_18790_negative_error.py')
294
295
297 """U{Bug #20213<https://web.archive.org/web/https://gna.org/bugs/?20213>} catch, the model selection failure due to the presence of Asp and Gln sidechain N spins."""
298
299
300 ds.tmpdir = mkdtemp()
301
302
303 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'bug_20213_asn_sidechain.py')
304
305
307 """U{Bug #20464<https://web.archive.org/web/https://gna.org/bugs/?20464>} catch, the failure due to missing relaxation data."""
308
309
310 self.interpreter.reset()
311
312
313 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'bug_20464_missing_ri_data.py')
314
315
317 """U{Bug #20563<https://web.archive.org/web/https://gna.org/bugs/?20563>} catch, the failure due to missing relaxation data errors."""
318
319
320 self.interpreter.reset()
321
322
323 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'bug_20563_missing_ri_error.py')
324
325
327 """U{Bug #20531<https://web.archive.org/web/https://gna.org/bugs/?20531>} catch, the RelaxFault when creating the Molmol macros."""
328
329
330 self.interpreter.reset()
331
332
333 state = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'saved_states'+sep+'bug_20531_mf_relaxfault.bz2'
334 self.interpreter.state.load(state, force=True)
335
336
337 ds.tmpdir = mkdtemp()
338
339
340 self.interpreter.molmol.macro_write(data_type='s2', dir=ds.tmpdir, force=True)
341 self.interpreter.molmol.macro_write(data_type='s2f', dir=ds.tmpdir, force=True)
342 self.interpreter.molmol.macro_write(data_type='s2s', dir=ds.tmpdir, force=True)
343 self.interpreter.molmol.macro_write(data_type='amp_fast', dir=ds.tmpdir, force=True)
344 self.interpreter.molmol.macro_write(data_type='amp_slow', dir=ds.tmpdir, force=True)
345 self.interpreter.molmol.macro_write(data_type='te', dir=ds.tmpdir, force=True)
346 self.interpreter.molmol.macro_write(data_type='tf', dir=ds.tmpdir, force=True)
347 self.interpreter.molmol.macro_write(data_type='ts', dir=ds.tmpdir, force=True)
348 self.interpreter.molmol.macro_write(data_type='time_fast', dir=ds.tmpdir, force=True)
349 self.interpreter.molmol.macro_write(data_type='time_slow', dir=ds.tmpdir, force=True)
350 self.interpreter.molmol.macro_write(data_type='rex', dir=ds.tmpdir, force=True)
351
352
353 self.interpreter.pymol.macro_write(data_type='s2', dir=ds.tmpdir, force=True)
354 self.interpreter.pymol.macro_write(data_type='s2f', dir=ds.tmpdir, force=True)
355 self.interpreter.pymol.macro_write(data_type='s2s', dir=ds.tmpdir, force=True)
356 self.interpreter.pymol.macro_write(data_type='amp_fast', dir=ds.tmpdir, force=True)
357 self.interpreter.pymol.macro_write(data_type='amp_slow', dir=ds.tmpdir, force=True)
358 self.interpreter.pymol.macro_write(data_type='te', dir=ds.tmpdir, force=True)
359 self.interpreter.pymol.macro_write(data_type='tf', dir=ds.tmpdir, force=True)
360 self.interpreter.pymol.macro_write(data_type='ts', dir=ds.tmpdir, force=True)
361 self.interpreter.pymol.macro_write(data_type='time_fast', dir=ds.tmpdir, force=True)
362 self.interpreter.pymol.macro_write(data_type='time_slow', dir=ds.tmpdir, force=True)
363 self.interpreter.pymol.macro_write(data_type='rex', dir=ds.tmpdir, force=True)
364
365
366 self.interpreter.grace.write(x_data_type='res_num', y_data_type='s2', file='s2.agr', dir=ds.tmpdir, force=True)
367 self.interpreter.grace.write(x_data_type='res_num', y_data_type='s2f', file='s2f.agr', dir=ds.tmpdir, force=True)
368 self.interpreter.grace.write(x_data_type='res_num', y_data_type='s2s', file='s2s.agr', dir=ds.tmpdir, force=True)
369 self.interpreter.grace.write(x_data_type='res_num', y_data_type='te', file='te.agr', dir=ds.tmpdir, force=True)
370 self.interpreter.grace.write(x_data_type='res_num', y_data_type='tf', file='tf.agr', dir=ds.tmpdir, force=True)
371 self.interpreter.grace.write(x_data_type='res_num', y_data_type='ts', file='ts.agr', dir=ds.tmpdir, force=True)
372 self.interpreter.grace.write(x_data_type='res_num', y_data_type='rex', file='rex.agr', dir=ds.tmpdir, force=True)
373 self.interpreter.grace.write(x_data_type='s2', y_data_type='te', file='s2_vs_te.agr', dir=ds.tmpdir, force=True)
374 self.interpreter.grace.write(x_data_type='s2', y_data_type='rex', file='s2_vs_rex.agr', dir=ds.tmpdir, force=True)
375 self.interpreter.grace.write(x_data_type='te', y_data_type='rex', file='te_vs_rex.agr', dir=ds.tmpdir, force=True)
376
377
378 self.interpreter.value.write(param='s2', file='s2.txt', dir=ds.tmpdir, force=True)
379 self.interpreter.value.write(param='s2f', file='s2f.txt', dir=ds.tmpdir, force=True)
380 self.interpreter.value.write(param='s2s', file='s2s.txt', dir=ds.tmpdir, force=True)
381 self.interpreter.value.write(param='te', file='te.txt', dir=ds.tmpdir, force=True)
382 self.interpreter.value.write(param='tf', file='tf.txt', dir=ds.tmpdir, force=True)
383 self.interpreter.value.write(param='ts', file='ts.txt', dir=ds.tmpdir, force=True)
384 self.interpreter.value.write(param='rex', file='rex.txt', dir=ds.tmpdir, force=True)
385 self.interpreter.value.write(param='local_tm', file='local_tm.txt', dir=ds.tmpdir, force=True)
386
387
389 """U{Bug #20531<https://web.archive.org/web/https://gna.org/bugs/?20531>} catch, the RelaxFault when creating the Molmol macros.
390
391 This was the first attempt at catching the bug, but it failed. However the code paths tested here are not tested in any other tests, so this system test will remain.
392 """
393
394
395 self.interpreter.sequence.read(file='Ap4Aase.seq', dir=status.install_path + sep+'test_suite'+sep+'shared_data'+sep, res_num_col=1, res_name_col=2)
396
397
398 self.interpreter.spin.name('N')
399 self.interpreter.spin.element('N')
400 self.interpreter.spin.isotope('15N')
401
402
403 models = ['m0', 'm1', 'm2', 'm3', 'm4', 'm5', 'm6', 'm7', 'm8', 'm9'] + ['tm0', 'tm1', 'tm2', 'tm3', 'tm4', 'tm5', 'tm6', 'tm7', 'tm8', 'tm9']
404
405
406 self.interpreter.spectrometer.frequency(id='600', frq=600000000.1)
407
408
409 for i in range(len(models)):
410 self.interpreter.model_free.select_model(model=models[i], spin_id=':%s'%(i+1))
411
412
413 self.interpreter.value.set(param='s2', val=0.8)
414 self.interpreter.value.set(param='s2f', val=0.85)
415 self.interpreter.value.set(param='s2s', val=0.7)
416 self.interpreter.value.set(param='local_tm', val=8000e-12)
417 self.interpreter.value.set(param='te', val=20e-12)
418 self.interpreter.value.set(param='tf', val=40e-12)
419 self.interpreter.value.set(param='ts', val=2000e-12)
420 self.interpreter.value.set(param='rex', val=1.5e-18)
421
422
423 ds.tmpdir = mkdtemp()
424
425
426 self.interpreter.molmol.macro_write(data_type='s2', dir=ds.tmpdir, force=True)
427 self.interpreter.molmol.macro_write(data_type='s2f', dir=ds.tmpdir, force=True)
428 self.interpreter.molmol.macro_write(data_type='s2s', dir=ds.tmpdir, force=True)
429 self.interpreter.molmol.macro_write(data_type='amp_fast', dir=ds.tmpdir, force=True)
430 self.interpreter.molmol.macro_write(data_type='amp_slow', dir=ds.tmpdir, force=True)
431 self.interpreter.molmol.macro_write(data_type='te', dir=ds.tmpdir, force=True)
432 self.interpreter.molmol.macro_write(data_type='tf', dir=ds.tmpdir, force=True)
433 self.interpreter.molmol.macro_write(data_type='ts', dir=ds.tmpdir, force=True)
434 self.interpreter.molmol.macro_write(data_type='time_fast', dir=ds.tmpdir, force=True)
435 self.interpreter.molmol.macro_write(data_type='time_slow', dir=ds.tmpdir, force=True)
436 self.interpreter.molmol.macro_write(data_type='rex', dir=ds.tmpdir, force=True)
437
438
439 self.interpreter.pymol.macro_write(data_type='s2', dir=ds.tmpdir, force=True)
440 self.interpreter.pymol.macro_write(data_type='s2f', dir=ds.tmpdir, force=True)
441 self.interpreter.pymol.macro_write(data_type='s2s', dir=ds.tmpdir, force=True)
442 self.interpreter.pymol.macro_write(data_type='amp_fast', dir=ds.tmpdir, force=True)
443 self.interpreter.pymol.macro_write(data_type='amp_slow', dir=ds.tmpdir, force=True)
444 self.interpreter.pymol.macro_write(data_type='te', dir=ds.tmpdir, force=True)
445 self.interpreter.pymol.macro_write(data_type='tf', dir=ds.tmpdir, force=True)
446 self.interpreter.pymol.macro_write(data_type='ts', dir=ds.tmpdir, force=True)
447 self.interpreter.pymol.macro_write(data_type='time_fast', dir=ds.tmpdir, force=True)
448 self.interpreter.pymol.macro_write(data_type='time_slow', dir=ds.tmpdir, force=True)
449 self.interpreter.pymol.macro_write(data_type='rex', dir=ds.tmpdir, force=True)
450
451
452 self.interpreter.grace.write(x_data_type='res_num', y_data_type='s2', file='s2.agr', dir=ds.tmpdir, force=True)
453 self.interpreter.grace.write(x_data_type='res_num', y_data_type='s2f', file='s2f.agr', dir=ds.tmpdir, force=True)
454 self.interpreter.grace.write(x_data_type='res_num', y_data_type='s2s', file='s2s.agr', dir=ds.tmpdir, force=True)
455 self.interpreter.grace.write(x_data_type='res_num', y_data_type='te', file='te.agr', dir=ds.tmpdir, force=True)
456 self.interpreter.grace.write(x_data_type='res_num', y_data_type='tf', file='tf.agr', dir=ds.tmpdir, force=True)
457 self.interpreter.grace.write(x_data_type='res_num', y_data_type='ts', file='ts.agr', dir=ds.tmpdir, force=True)
458 self.interpreter.grace.write(x_data_type='res_num', y_data_type='rex', file='rex.agr', dir=ds.tmpdir, force=True)
459 self.interpreter.grace.write(x_data_type='s2', y_data_type='te', file='s2_vs_te.agr', dir=ds.tmpdir, force=True)
460 self.interpreter.grace.write(x_data_type='s2', y_data_type='rex', file='s2_vs_rex.agr', dir=ds.tmpdir, force=True)
461 self.interpreter.grace.write(x_data_type='te', y_data_type='rex', file='te_vs_rex.agr', dir=ds.tmpdir, force=True)
462
463
464 self.interpreter.value.write(param='s2', file='s2.txt', dir=ds.tmpdir, force=True)
465 self.interpreter.value.write(param='s2f', file='s2f.txt', dir=ds.tmpdir, force=True)
466 self.interpreter.value.write(param='s2s', file='s2s.txt', dir=ds.tmpdir, force=True)
467 self.interpreter.value.write(param='te', file='te.txt', dir=ds.tmpdir, force=True)
468 self.interpreter.value.write(param='tf', file='tf.txt', dir=ds.tmpdir, force=True)
469 self.interpreter.value.write(param='ts', file='ts.txt', dir=ds.tmpdir, force=True)
470 self.interpreter.value.write(param='rex', file='rex.txt', dir=ds.tmpdir, force=True)
471 self.interpreter.value.write(param='local_tm', file='local_tm.txt', dir=ds.tmpdir, force=True)
472
473
475 """U{Bug #20613<https://web.archive.org/web/https://gna.org/bugs/?20613>} catch, the failure of the auto-analysis due to diffusion tensor PDB creation for the local tm global model."""
476
477
478 self.interpreter.reset()
479
480
481 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'bug_20613_auto_mf_diff_tensor_pdb.py')
482
483
485 """Catch U{bug #20683<https://web.archive.org/web/https://gna.org/bugs/?20683>}, the model-free analysis failure due to infinite values in the Bruker Dynamics Centre files."""
486
487
488 self.interpreter.reset()
489
490
491 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'bug_20683_bdc_inf_values.py')
492
493
495 """Test catching U{bug #21079<https://web.archive.org/web/https://gna.org/bugs/?21079>}, the local tm global model selection."""
496
497
498 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'bug_21079_local_tm_global_selection.py')
499
500
502 """U{Bug #23933<https://web.archive.org/web/https://gna.org/bugs/?23933>} catch, the global name 'ids' is not defined error when loading relaxation data."""
503
504
505 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'model_free'+sep+'bug_23933_relax_data_read_ids'
506
507
508 self.interpreter.structure.read_pdb(file='LARA_N_term_no_helixFH_reg.pdb', dir=path)
509
510
511 self.interpreter.structure.load_spins(spin_id='@N')
512 self.interpreter.structure.load_spins(spin_id='@H')
513 self.interpreter.structure.load_spins(spin_id='@NE1')
514 self.interpreter.structure.load_spins(spin_id='@HE1')
515
516
517 self.assertRaises(RelaxMultiSpinIDError, self.interpreter.relax_data.read, ri_id='R1_600', ri_type='R1', frq=600402816.0, file='r1_600.txt', dir=path, res_num_col=1, data_col=2, error_col=3)
518
519
521 """Test catching U{bug #24131<https://web.archive.org/web/https://gna.org/bugs/?24131>}, the BMRB export failure with the SpinContainer object having no s2 value."""
522
523
524 ds.tmpfile_handle, ds.tmpfile = mkstemp()
525
526
527 self.assertRaises(RelaxError, self.script_exec, status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'bug_24131_bmrb_deposition.py')
528
529
531 """Test catching U{bug #24131<https://web.archive.org/web/https://gna.org/bugs/?24131>}, the BMRB export failure with missing interatomic interactions."""
532
533
534 ds.tmpfile_handle, ds.tmpfile = mkstemp()
535
536
537 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'bug_24131_missing_interaction.py')
538
539
541 """Creating model m4 with parameters {S2, te, Rex} using model_free.create_model()."""
542
543
544 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'create_m4.py')
545
546
547 self.assertEqual(cdp.mol[0].res[1].spin[0].model, 'm4')
548 self.assertEqual(cdp.mol[0].res[1].spin[0].params, ['s2', 'te', 'rex'])
549
550
552 """Catch a failure when loading relaxation data."""
553
554
555 dir = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'model_free'+sep+'sphere'
556
557
558 self.interpreter.sequence.read(file='noe.500.out', dir=dir, spin_id_col=None, mol_name_col=1, res_num_col=2, res_name_col=3, spin_num_col=4, spin_name_col=5, sep=None, spin_id=None)
559
560
561 self.interpreter.relax_data.read(ri_id='noe500', ri_type='NOE', frq=500000000.0, file='noe.500.out', dir=dir, spin_id_col=None, mol_name_col=1, res_num_col=2, res_name_col=3, spin_num_col=4, spin_name_col=5, data_col=6, error_col=7, sep=None, spin_id='@N')
562
563
565 """Check the execution of auto_analyses.dauvergne_protocol."""
566
567
568 ds.tmpdir = mkdtemp()
569
570
571 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'dauvergne_protocol.py')
572
573
574 self.assertEqual(cdp.diff_tensor.type, 'sphere')
575 self.assertAlmostEqual(cdp.diff_tensor.tm, 1e-8)
576 self.assertEqual(cdp.diff_tensor.fixed, True)
577
578
579 self.assertAlmostEqual(cdp.chi2, 4e-19)
580
581
582 mol_names = ["sphere_mol1"] * 20
583 res_names = ["GLY"] * 20
584 res_nums = []
585 for i in range(1, 10):
586 res_nums.append(i)
587 res_nums.append(i)
588 res_nums.append(i)
589 res_nums.append(i)
590 spin_names = ["N", "H"] * 9 + ["NE1", "HE1"]
591 spin_nums = list(range(1, 21))
592 isotopes = ["15N", "1H"] * 10
593 csa = [-172e-6, None] * 10
594 select = [True, False] * 10
595 fixed = [False, False] * 10
596 s2 = [0.8, None] * 10
597 te = [20e-12, None] * 10
598
599
600 i = 0
601 for spin, mol_name, res_num, res_name in spin_loop(full_info=True):
602
603 self.assertEqual(mol_name, mol_names[i])
604 self.assertEqual(res_name, res_names[i])
605 self.assertEqual(res_num, res_nums[i])
606 self.assertEqual(spin.name, spin_names[i])
607 self.assertEqual(spin.num, spin_nums[i])
608
609
610 self.assertEqual(spin.select, select[i])
611 self.assertEqual(spin.fixed, fixed[i])
612 self.assertEqual(spin.isotope, isotopes[i])
613 if csa[i] == None:
614 self.assertEqual(spin.csa, None)
615 else:
616 self.assertAlmostEqual(spin.csa, csa[i])
617
618
619 self.assertEqual(spin.model, 'm2')
620 self.assertEqual(spin.equation, 'mf_orig')
621 self.assertEqual(len(spin.params), 2)
622 self.assertEqual(spin.params[0], 's2')
623 self.assertEqual(spin.params[1], 'te')
624 if s2[i] == None:
625 self.assertEqual(spin.s2, None)
626 else:
627 self.assertAlmostEqual(spin.s2, 0.8)
628 self.assertEqual(spin.s2f, None)
629 self.assertEqual(spin.s2s, None)
630 self.assertEqual(spin.local_tm, None)
631 if te[i] == None:
632 self.assertEqual(spin.te, None)
633 else:
634 self.assertAlmostEqual(spin.te, 20e-12)
635 self.assertEqual(spin.tf, None)
636 self.assertEqual(spin.ts, None)
637 self.assertEqual(spin.rex, None)
638
639
640 self.assertEqual(spin.chi2, None)
641 self.assertEqual(spin.iter, None)
642 self.assertEqual(spin.f_count, None)
643 self.assertEqual(spin.g_count, None)
644 self.assertEqual(spin.h_count, None)
645 self.assertEqual(spin.warning, None)
646
647
648 i += 1
649
650
651 i = 0
652 for interatom in interatomic_loop():
653 self.assertAlmostEqual(interatom.r, 1.02 * 1e-10)
654
655
656 format1 = "%s%s%s" % (ds.tmpdir, sep, '%s')
657 format2 = "%s%s%s%s%s" % (ds.tmpdir, sep, '%s', sep, '%s')
658 format3 = "%s%s%s%s%s%s%s" % (ds.tmpdir, sep, '%s', sep, '%s', sep, '%s')
659 format4 = "%s%s%s%s%s%s%s%s%s" % (ds.tmpdir, sep, '%s', sep, '%s', sep, '%s', sep, '%s')
660
661
662 dirs = [
663 format1 % ("local_tm"),
664 format2 % ("local_tm", "tm1"),
665 format2 % ("local_tm", "tm0"),
666 format2 % ("local_tm", "aic"),
667 format1 % ("sphere"),
668 format2 % ("sphere", "init"),
669 format2 % ("sphere", "round_1"),
670 format3 % ("sphere", "round_1", "m1"),
671 format3 % ("sphere", "round_1", "m2"),
672 format3 % ("sphere", "round_1", "aic"),
673 format3 % ("sphere", "round_1", "opt"),
674 format2 % ("sphere", "round_2"),
675 format3 % ("sphere", "round_2", "m1"),
676 format3 % ("sphere", "round_2", "m2"),
677 format3 % ("sphere", "round_2", "aic"),
678 format3 % ("sphere", "round_2", "opt"),
679 format1 % ("prolate"),
680 format2 % ("prolate", "init"),
681 format2 % ("prolate", "round_1"),
682 format3 % ("prolate", "round_1", "m1"),
683 format3 % ("prolate", "round_1", "m2"),
684 format3 % ("prolate", "round_1", "aic"),
685 format3 % ("prolate", "round_1", "opt"),
686 format2 % ("prolate", "round_2"),
687 format3 % ("prolate", "round_2", "m1"),
688 format3 % ("prolate", "round_2", "m2"),
689 format3 % ("prolate", "round_2", "aic"),
690 format3 % ("prolate", "round_2", "opt"),
691 format1 % ("oblate"),
692 format2 % ("oblate", "init"),
693 format2 % ("oblate", "round_1"),
694 format3 % ("oblate", "round_1", "m1"),
695 format3 % ("oblate", "round_1", "m2"),
696 format3 % ("oblate", "round_1", "aic"),
697 format3 % ("oblate", "round_1", "opt"),
698 format2 % ("oblate", "round_2"),
699 format3 % ("oblate", "round_2", "m1"),
700 format3 % ("oblate", "round_2", "m2"),
701 format3 % ("oblate", "round_2", "aic"),
702 format3 % ("oblate", "round_2", "opt"),
703 format1 % ("ellipsoid"),
704 format2 % ("ellipsoid", "init"),
705 format2 % ("ellipsoid", "round_1"),
706 format3 % ("ellipsoid", "round_1", "m1"),
707 format3 % ("ellipsoid", "round_1", "m2"),
708 format3 % ("ellipsoid", "round_1", "aic"),
709 format3 % ("ellipsoid", "round_1", "opt"),
710 format2 % ("ellipsoid", "round_2"),
711 format3 % ("ellipsoid", "round_2", "m1"),
712 format3 % ("ellipsoid", "round_2", "m2"),
713 format3 % ("ellipsoid", "round_2", "aic"),
714 format3 % ("ellipsoid", "round_2", "opt"),
715 format1 % ("final"),
716 format2 % ("final", "grace"),
717 format2 % ("final", "pymol"),
718 format2 % ("final", "molmol")
719 ]
720 for root, dirs, files in walk(ds.tmpdir):
721 for dir in dirs:
722 dir_path = "%s%s%s" % (root, sep, dir)
723 print("Checking for the directory '%s'." % dir_path)
724 self.assertTrue(path.isdir(dir_path))
725
726
727 files = [
728 format3 % ("local_tm", "tm0", "results.bz2"),
729 format3 % ("local_tm", "tm1", "results.bz2"),
730 format3 % ("local_tm", "aic", "results.bz2"),
731 format3 % ("sphere", "init", "results.bz2"),
732 format4 % ("sphere", "round_1", "m1", "results.bz2"),
733 format4 % ("sphere", "round_1", "m2", "results.bz2"),
734 format4 % ("sphere", "round_1", "aic", "results.bz2"),
735 format4 % ("sphere", "round_1", "opt", "results.bz2"),
736 format4 % ("sphere", "round_2", "m1", "results.bz2"),
737 format4 % ("sphere", "round_2", "m2", "results.bz2"),
738 format4 % ("sphere", "round_2", "aic", "results.bz2"),
739 format4 % ("sphere", "round_2", "opt", "results.bz2"),
740 format3 % ("prolate", "init", "results.bz2"),
741 format4 % ("prolate", "round_1", "m1", "results.bz2"),
742 format4 % ("prolate", "round_1", "m2", "results.bz2"),
743 format4 % ("prolate", "round_1", "aic", "results.bz2"),
744 format4 % ("prolate", "round_1", "opt", "results.bz2"),
745 format4 % ("prolate", "round_2", "m1", "results.bz2"),
746 format4 % ("prolate", "round_2", "m2", "results.bz2"),
747 format4 % ("prolate", "round_2", "aic", "results.bz2"),
748 format4 % ("prolate", "round_2", "opt", "results.bz2"),
749 format3 % ("oblate", "init", "results.bz2"),
750 format4 % ("oblate", "round_1", "m1", "results.bz2"),
751 format4 % ("oblate", "round_1", "m2", "results.bz2"),
752 format4 % ("oblate", "round_1", "aic", "results.bz2"),
753 format4 % ("oblate", "round_1", "opt", "results.bz2"),
754 format4 % ("oblate", "round_2", "m1", "results.bz2"),
755 format4 % ("oblate", "round_2", "m2", "results.bz2"),
756 format4 % ("oblate", "round_2", "aic", "results.bz2"),
757 format4 % ("oblate", "round_2", "opt", "results.bz2"),
758 format3 % ("ellipsoid", "init", "results.bz2"),
759 format4 % ("ellipsoid", "round_1", "m1", "results.bz2"),
760 format4 % ("ellipsoid", "round_1", "m2", "results.bz2"),
761 format4 % ("ellipsoid", "round_1", "aic", "results.bz2"),
762 format4 % ("ellipsoid", "round_1", "opt", "results.bz2"),
763 format4 % ("ellipsoid", "round_2", "m1", "results.bz2"),
764 format4 % ("ellipsoid", "round_2", "m2", "results.bz2"),
765 format4 % ("ellipsoid", "round_2", "aic", "results.bz2"),
766 format4 % ("ellipsoid", "round_2", "opt", "results.bz2"),
767 format2 % ("final", "results.bz2"),
768 format2 % ("final", "s2.txt"),
769 format2 % ("final", "s2f.txt"),
770 format2 % ("final", "s2s.txt"),
771 format2 % ("final", "local_tm.txt"),
772 format2 % ("final", "te.txt"),
773 format2 % ("final", "tf.txt"),
774 format2 % ("final", "ts.txt"),
775 format2 % ("final", "rex.txt"),
776 format2 % ("final", "rex_500.txt"),
777 format2 % ("final", "rex_900.txt"),
778 format2 % ("final", "tensor.pdb"),
779 format3 % ("final", "grace", "s2.agr"),
780 format3 % ("final", "grace", "s2f.agr"),
781 format3 % ("final", "grace", "s2s.agr"),
782 format3 % ("final", "grace", "te.agr"),
783 format3 % ("final", "grace", "tf.agr"),
784 format3 % ("final", "grace", "ts.agr"),
785 format3 % ("final", "grace", "rex.agr"),
786 format3 % ("final", "grace", "s2_vs_rex.agr"),
787 format3 % ("final", "grace", "s2_vs_te.agr"),
788 format3 % ("final", "grace", "te_vs_rex.agr"),
789 format3 % ("final", "pymol", "s2.pml"),
790 format3 % ("final", "pymol", "s2f.pml"),
791 format3 % ("final", "pymol", "s2s.pml"),
792 format3 % ("final", "pymol", "amp_fast.pml"),
793 format3 % ("final", "pymol", "amp_slow.pml"),
794 format3 % ("final", "pymol", "te.pml"),
795 format3 % ("final", "pymol", "tf.pml"),
796 format3 % ("final", "pymol", "ts.pml"),
797 format3 % ("final", "pymol", "time_fast.pml"),
798 format3 % ("final", "pymol", "time_slow.pml"),
799 format3 % ("final", "pymol", "rex.pml"),
800 format3 % ("final", "molmol", "s2.mac"),
801 format3 % ("final", "molmol", "s2f.mac"),
802 format3 % ("final", "molmol", "s2s.mac"),
803 format3 % ("final", "molmol", "amp_fast.mac"),
804 format3 % ("final", "molmol", "amp_slow.mac"),
805 format3 % ("final", "molmol", "te.mac"),
806 format3 % ("final", "molmol", "tf.mac"),
807 format3 % ("final", "molmol", "ts.mac"),
808 format3 % ("final", "molmol", "time_fast.mac"),
809 format3 % ("final", "molmol", "time_slow.mac"),
810 format3 % ("final", "molmol", "rex.mac"),
811 ]
812 for root, dirs, files in walk(ds.tmpdir):
813 for file in files:
814 file_path = "%s%s%s" % (root, sep, file)
815 print("Checking for the file '%s'." % file_path)
816 self.assertTrue(path.isfile(file_path))
817
818
820 """Catch a failure when loading relaxation data."""
821
822
823 dir = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'model_free'+sep+'sphere'
824
825
826 self.interpreter.reset()
827
828
829 self.interpreter.pipe.create('sphere test', 'mf', bundle='sphere test')
830
831
832 self.interpreter.sequence.read(file='noe.500.out', dir=dir, spin_id_col=None, mol_name_col=1, res_num_col=2, res_name_col=3, spin_num_col=4, spin_name_col=5, sep=None, spin_id=None)
833
834
835 self.interpreter.relax_data.read(ri_id='r1.500', ri_type='R1', frq=500000000.0, file='r1.500.out', dir=dir, spin_id_col=None, mol_name_col=1, res_num_col=2, res_name_col=3, spin_num_col=4, spin_name_col=5, data_col=6, error_col=7, sep=None, spin_id=None)
836 self.interpreter.relax_data.read(ri_id='r2.500', ri_type='R2', frq=500000000.0, file='r2.500.out', dir=dir, spin_id_col=None, mol_name_col=1, res_num_col=2, res_name_col=3, spin_num_col=4, spin_name_col=5, data_col=6, error_col=7, sep=None, spin_id=None)
837 self.interpreter.relax_data.read(ri_id='noe.500', ri_type='NOE', frq=500000000.0, file='noe.500.out', dir=dir, spin_id_col=None, mol_name_col=1, res_num_col=2, res_name_col=3, spin_num_col=4, spin_name_col=5, data_col=6, error_col=7, sep=None, spin_id=None)
838 self.interpreter.relax_data.read(ri_id='r1.900', ri_type='R1', frq=900000000.0, file='r1.900.out', dir=dir, spin_id_col=None, mol_name_col=1, res_num_col=2, res_name_col=3, spin_num_col=4, spin_name_col=5, data_col=6, error_col=7, sep=None, spin_id=None)
839 self.interpreter.relax_data.read(ri_id='r2.900', ri_type='R2', frq=900000000.0, file='r2.900.out', dir=dir, spin_id_col=None, mol_name_col=1, res_num_col=2, res_name_col=3, spin_num_col=4, spin_name_col=5, data_col=6, error_col=7, sep=None, spin_id=None)
840 self.interpreter.relax_data.read(ri_id='noe.900', ri_type='NOE', frq=900000000.0, file='noe.900.out', dir=dir, spin_id_col=None, mol_name_col=1, res_num_col=2, res_name_col=3, spin_num_col=4, spin_name_col=5, data_col=6, error_col=7, sep=None, spin_id=None)
841 self.interpreter.relax_data.peak_intensity_type(ri_id='noe.900', type='height')
842 self.interpreter.relax_data.peak_intensity_type(ri_id='r2.900', type='height')
843 self.interpreter.relax_data.peak_intensity_type(ri_id='r1.900', type='height')
844 self.interpreter.relax_data.peak_intensity_type(ri_id='noe.500', type='height')
845 self.interpreter.relax_data.peak_intensity_type(ri_id='r2.500', type='height')
846 self.interpreter.relax_data.peak_intensity_type(ri_id='r1.500', type='height')
847 self.interpreter.relax_data.peak_intensity_type(ri_id='r1.500', type='height')
848
849
850 self.interpreter.structure.read_pdb(file='sphere.pdb', dir=dir, read_mol=None, set_mol_name=None, read_model=None, set_model_num=None, alt_loc=None, verbosity=1, merge=False)
851 self.interpreter.structure.get_pos(spin_id=None, ave_pos=True)
852 self.interpreter.interatom.define(spin_id1='@N*', spin_id2='@H*', direct_bond=True, spin_selection=True, pipe=None)
853 self.interpreter.interatom.set_dist(spin_id1='@N*', spin_id2='@H*', ave_dist=1.02e-10, unit='meter')
854 self.interpreter.interatom.unit_vectors(ave=True)
855
856
857 self.interpreter.value.set(val=-0.000172, param='csa', index=0, spin_id='@N*', error=False, force=True)
858
859
860 self.interpreter.spin.isotope(isotope='15N', spin_id='@N*', force=True)
861 self.interpreter.spin.isotope(isotope='1H', spin_id='@H*', force=True)
862
863
864 ds.tmpdir = mkdtemp()
865
866
867 dAuvergne_protocol(pipe_name='sphere test', pipe_bundle='sphere test', results_dir=ds.tmpdir, diff_model=['local_tm', 'sphere'], mf_models=['m1', 'm2'], local_tm_models=['tm0', 'tm1'], grid_inc=3, diff_tensor_grid_inc={'sphere': 5, 'prolate': 5, 'oblate': 5, 'ellipsoid': 3}, min_algor='newton', mc_sim_num=2, max_iter=1, conv_loop=True)
868
869
871 """Back-calculate relaxation data."""
872
873
874 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'generate_ri.py')
875
876
878 """Test the creation of a LaTeX table of model-free results, mimicking the latex_mf_table.py sample script."""
879
880
881 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'latex_mf_table.py')
882
883
885 """Test the optimisation of the test set {tm=10, S2=0.8, te=40}."""
886
887
888 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_setup_local_tm_10_S2_0_8_te_40.py')
889
890
891 frq = ['400', '500', '600', '700', '800', '900', '1000']
892
893
894 for i in range(len(frq)):
895 self.interpreter.relax_data.read('NOE_%s'%frq[i], 'NOE', float(frq[i])*1e6, 'noe.%s.out' % frq[i], dir=cdp.path, res_num_col=1, res_name_col=2, data_col=3, error_col=4, spin_id='@N')
896 self.interpreter.relax_data.read('R1_%s'%frq[i], 'R1', float(frq[i])*1e6, 'r1.%s.out' % frq[i], dir=cdp.path, res_num_col=1, res_name_col=2, data_col=3, error_col=4, spin_id='@N')
897 self.interpreter.relax_data.read('R2_%s'%frq[i], 'R2', float(frq[i])*1e6, 'r2.%s.out' % frq[i], dir=cdp.path, res_num_col=1, res_name_col=2, data_col=3, error_col=4, spin_id='@N')
898
899
900 self.interpreter.value.set([15.0e-9, 1.0, 0.0], ['local_tm', 's2', 'te'])
901
902
903 self.interpreter.minimise.execute('newton', 'gmw', 'back')
904
905
906 spin = cdp.mol[0].res[0].spin[0]
907
908
909 self.value_test(spin, local_tm=10, s2=0.8, te=40, chi2=0.0)
910
911
913 """Test the optimisation of the test set {tm=10, S2=0.8, te=40}."""
914
915
916 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_setup_local_tm_10_S2_0_8_te_40.py')
917
918
919 frq = ['400', '500', '600', '700', '800', '900', '1000']
920
921
922 for i in range(len(frq)):
923 self.interpreter.relax_data.read('NOE_%s'%frq[i], 'NOE', float(frq[i])*1e6, 'noe.%s.out' % frq[i], dir=cdp.path, res_num_col=1, res_name_col=2, data_col=3, error_col=4, spin_id='@N')
924 self.interpreter.relax_data.read('R1_%s'%frq[i], 'R1', float(frq[i])*1e6, 'r1.%s.out' % frq[i], dir=cdp.path, res_num_col=1, res_name_col=2, data_col=3, error_col=4, spin_id='@N')
925 self.interpreter.relax_data.read('R2_%s'%frq[i], 'R2', float(frq[i])*1e6, 'r2.%s.out' % frq[i], dir=cdp.path, res_num_col=1, res_name_col=2, data_col=3, error_col=4, spin_id='@N')
926
927
928 self.interpreter.value.set([15.0e-9, 1.0, 0.0], ['local_tm', 's2', 'te'])
929
930
931 self.interpreter.minimise.execute('newton', 'gmw', 'back')
932
933
934 spin = cdp.mol[0].res[0].spin[0]
935
936
937 self.value_test(spin, local_tm=10, s2=0.8, te=40, chi2=0.0)
938
939
941 """Test the optimisation of the test set {tm=10, S2=0.8, te=40}."""
942
943
944 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_setup_local_tm_10_S2_0_8_te_40.py')
945
946
947 self.interpreter.relax_data.read('R2_700', 'R2', 700*1e6, 'r2.700.out', dir=cdp.path, res_num_col=1, res_name_col=2, data_col=3, error_col=4, spin_id='@N')
948 self.interpreter.relax_data.read('NOE_500', 'NOE', 500*1e6, 'noe.500.out', dir=cdp.path, res_num_col=1, res_name_col=2, data_col=3, error_col=4, spin_id='@N')
949 self.interpreter.relax_data.read('R1_500', 'R1', 500*1e6, 'r1.500.out', dir=cdp.path, res_num_col=1, res_name_col=2, data_col=3, error_col=4, spin_id='@N')
950 self.interpreter.relax_data.read('R1_900', 'R1', 900*1e6, 'r1.900.out', dir=cdp.path, res_num_col=1, res_name_col=2, data_col=3, error_col=4, spin_id='@N')
951 self.interpreter.relax_data.read('NOE_900', 'NOE', 900*1e6, 'noe.900.out', dir=cdp.path, res_num_col=1, res_name_col=2, data_col=3, error_col=4, spin_id='@N')
952 self.interpreter.relax_data.read('R2_900', 'R2', 900*1e6, 'r2.900.out', dir=cdp.path, res_num_col=1, res_name_col=2, data_col=3, error_col=4, spin_id='@N')
953 self.interpreter.relax_data.read('R1_700', 'R1', 700*1e6, 'r1.700.out', dir=cdp.path, res_num_col=1, res_name_col=2, data_col=3, error_col=4, spin_id='@N')
954 self.interpreter.relax_data.read('NOE_700', 'NOE', 700*1e6, 'noe.700.out', dir=cdp.path, res_num_col=1, res_name_col=2, data_col=3, error_col=4, spin_id='@N')
955 self.interpreter.relax_data.read('R2_500', 'R2', 500*1e6, 'r2.500.out', dir=cdp.path, res_num_col=1, res_name_col=2, data_col=3, error_col=4, spin_id='@N')
956
957
958 self.interpreter.value.set([15.0e-9, 1.0, 0.0], ['local_tm', 's2', 'te'])
959
960
961 self.interpreter.minimise.execute('newton', 'gmw', 'back')
962
963
964 spin = cdp.mol[0].res[0].spin[0]
965
966
967 self.value_test(spin, local_tm=10, s2=0.8, te=40, chi2=0.0)
968
969
971 """Test the optimisation of the m0 model-free model against the tm0 parameter grid."""
972
973
974 cdp._model = 'm0'
975 cdp._value_test = self.value_test
976
977
978 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm0_grid.py')
979
980
982 """Test the optimisation of the m0 model-free model against the tm0 parameter grid, testing the grid search."""
983
984
985 cdp._model = 'm0'
986 cdp._value_test = self.value_test
987 cdp._grid_search = True
988
989
990 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm0_grid.py')
991
992
994 """Test the optimisation of the m1 model-free model against the tm0 parameter grid."""
995
996
997 cdp._model = 'm1'
998 cdp._value_test = self.value_test
999
1000
1001 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm0_grid.py')
1002
1003
1005 """Test the optimisation of the m1 model-free model against the tm0 parameter grid."""
1006
1007
1008 cdp._model = 'm1'
1009 cdp._value_test = self.value_test
1010 cdp._grid_search = True
1011
1012
1013 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm0_grid.py')
1014
1015
1017 """Test the optimisation of the m2 model-free model against the tm0 parameter grid."""
1018
1019
1020 cdp._model = 'm2'
1021 cdp._value_test = self.value_test
1022
1023
1024 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm0_grid.py')
1025
1026
1028 """Test the optimisation of the m3 model-free model against the tm0 parameter grid."""
1029
1030
1031 cdp._model = 'm3'
1032 cdp._value_test = self.value_test
1033
1034
1035 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm0_grid.py')
1036
1037
1039 """Test the optimisation of the m4 model-free model against the tm0 parameter grid."""
1040
1041
1042 cdp._model = 'm4'
1043 cdp._value_test = self.value_test
1044
1045
1046 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm0_grid.py')
1047
1048
1050 """Test the optimisation of the m1 model-free model against the tm1 parameter grid."""
1051
1052
1053 cdp._model = 'm1'
1054 cdp._value_test = self.value_test
1055
1056
1057 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm1_grid.py')
1058
1059
1061 """Test the optimisation of the m2 model-free model against the tm2 parameter grid."""
1062
1063
1064 cdp._model = 'm2'
1065 cdp._value_test = self.value_test
1066
1067
1068 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm2_grid.py')
1069
1070
1072 """Test the optimisation of the m4 model-free model against the tm2 parameter grid."""
1073
1074
1075 cdp._model = 'm4'
1076 cdp._value_test = self.value_test
1077
1078
1079 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm2_grid.py')
1080
1081
1083 """Test the optimisation of the m3 model-free model against the tm3 parameter grid."""
1084
1085
1086 cdp._model = 'm3'
1087 cdp._value_test = self.value_test
1088
1089
1090 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm3_grid.py')
1091
1092
1094 """Test the optimisation of the m4 model-free model against the tm4 parameter grid."""
1095
1096
1097 cdp._model = 'm4'
1098 cdp._value_test = self.value_test
1099
1100
1101 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm4_grid.py')
1102
1103
1105 """Test the optimisation of the m5 model-free model against the tm5 parameter grid."""
1106
1107
1108 cdp._model = 'm5'
1109 cdp._value_test = self.value_test
1110
1111
1112 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm5_grid.py')
1113
1114
1116 """Test the optimisation of the m6 model-free model against the tm6 parameter grid."""
1117
1118
1119 cdp._model = 'm6'
1120 cdp._value_test = self.value_test
1121
1122
1123 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm6_grid.py')
1124
1125
1127 """Test the optimisation of the m7 model-free model against the tm7 parameter grid."""
1128
1129
1130 cdp._model = 'm7'
1131 cdp._value_test = self.value_test
1132
1133
1134 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm7_grid.py')
1135
1136
1138 """Test the optimisation of the m8 model-free model against the tm8 parameter grid."""
1139
1140
1141 cdp._model = 'm8'
1142 cdp._value_test = self.value_test
1143
1144
1145 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm8_grid.py')
1146
1147
1149 """Test the optimisation of the m9 model-free model against the tm9 parameter grid."""
1150
1151
1152 cdp._model = 'm9'
1153 cdp._value_test = self.value_test
1154
1155
1156 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm9_grid.py')
1157
1158
1160 """Try a very minimal model-free analysis on the OMP relaxation data."""
1161
1162
1163 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'omp_model_free.py')
1164
1165
1166 dp = pipes.get_pipe('final')
1167
1168
1169 self.assertEqual(dp.mol[0].res[0].spin[0].select_sim, [True, False, True])
1170 self.assertEqual(dp.mol[0].res[1].spin[0].select_sim, [True, True, False])
1171 self.assertEqual(dp.mol[0].res[2].spin[0].select_sim, [True, True, True])
1172 self.assertTrue(not hasattr(dp.mol[0].res[3].spin[0], 'select_sim'))
1173
1174
1176 """Mapping the {S2, te, Rex} chi2 space through the OpenDX user function dx.map()."""
1177
1178
1179 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opendx_s2_te_rex.py')
1180
1181
1183 """Mapping the {theta, phi, Da} chi2 space through the OpenDX user function dx.map()."""
1184
1185
1186 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'model_free'+sep+'S2_0.970_te_2048_Rex_0.149'
1187
1188
1189 self.interpreter.structure.read_pdb(file='pdb', dir=path, read_model=1)
1190
1191
1192 self.interpreter.structure.load_spins('@N')
1193
1194
1195 self.interpreter.relax_data.read('R1_600', 'R1', 600.0*1e6, 'r1.600.out', dir=path, res_num_col=1, res_name_col=2, data_col=3, error_col=4)
1196 self.interpreter.relax_data.read('R2_600', 'R2', 600.0*1e6, 'r2.600.out', dir=path, res_num_col=1, res_name_col=2, data_col=3, error_col=4)
1197 self.interpreter.relax_data.read('NOE_600', 'NOE', 600.0*1e6, 'noe.600.out', dir=path, res_num_col=1, res_name_col=2, data_col=3, error_col=4)
1198 self.interpreter.relax_data.read('R1_500', 'R1', 500.0*1e6, 'r1.500.out', dir=path, res_num_col=1, res_name_col=2, data_col=3, error_col=4)
1199 self.interpreter.relax_data.read('R2_500', 'R2', 500.0*1e6, 'r2.500.out', dir=path, res_num_col=1, res_name_col=2, data_col=3, error_col=4)
1200 self.interpreter.relax_data.read('NOE_500', 'NOE', 500.0*1e6, 'noe.500.out', dir=path, res_num_col=1, res_name_col=2, data_col=3, error_col=4)
1201
1202
1203 self.interpreter.diffusion_tensor.init((1.601 * 1e7, 1.34, 72.4, 90-77.9), param_types=4)
1204
1205
1206 self.interpreter.structure.load_spins('@H')
1207 self.interpreter.interatom.define(spin_id1='@N', spin_id2='@H', direct_bond=True)
1208 self.interpreter.interatom.set_dist(spin_id1='@N', spin_id2='@H', ave_dist=1.02 * 1e-10)
1209 self.interpreter.interatom.unit_vectors()
1210
1211
1212 self.interpreter.value.set(N15_CSA, 'csa')
1213 self.interpreter.value.set([0.8, 50 * 1e-12, 0.0], ['s2', 'te', 'rex'])
1214
1215
1216 self.interpreter.spin.isotope('15N', spin_id='@N')
1217 self.interpreter.spin.isotope('1H', spin_id='@H')
1218
1219
1220 self.interpreter.model_free.select_model(model='m4')
1221
1222
1223 self.interpreter.dx.map(params=['theta', 'phi', 'Da'], spin_id='#pdb_mol1:2@N', inc=2, lower=[0, 0, -0.5*1e7], upper=[pi, 2.0*pi, 1.0*1e7], file_prefix='devnull')
1224
1225
1227 """Mapping the {local_tm, S2, te} chi2 space through the OpenDX user function dx.map()."""
1228
1229
1230 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'model_free'+sep+'S2_0.970_te_2048_Rex_0.149'
1231
1232
1233 self.interpreter.sequence.read(file='noe.500.out', dir=path, res_num_col=1, res_name_col=2)
1234
1235
1236 self.interpreter.relax_data.read('R1_600', 'R1', 600.0*1e6, 'r1.600.out', dir=path, res_num_col=1, res_name_col=2, data_col=3, error_col=4)
1237 self.interpreter.relax_data.read('R2_600', 'R2', 600.0*1e6, 'r2.600.out', dir=path, res_num_col=1, res_name_col=2, data_col=3, error_col=4)
1238 self.interpreter.relax_data.read('NOE_600', 'NOE', 600.0*1e6, 'noe.600.out', dir=path, res_num_col=1, res_name_col=2, data_col=3, error_col=4)
1239 self.interpreter.relax_data.read('R1_500', 'R1', 500.0*1e6, 'r1.500.out', dir=path, res_num_col=1, res_name_col=2, data_col=3, error_col=4)
1240 self.interpreter.relax_data.read('R2_500', 'R2', 500.0*1e6, 'r2.500.out', dir=path, res_num_col=1, res_name_col=2, data_col=3, error_col=4)
1241 self.interpreter.relax_data.read('NOE_500', 'NOE', 500.0*1e6, 'noe.500.out', dir=path, res_num_col=1, res_name_col=2, data_col=3, error_col=4)
1242
1243
1244 self.interpreter.spin.name('N')
1245 self.interpreter.spin.element('N')
1246
1247
1248 self.interpreter.sequence.attach_protons()
1249
1250
1251 self.interpreter.interatom.define(spin_id1='@N', spin_id2='@H', direct_bond=True)
1252 self.interpreter.interatom.set_dist(spin_id1='@N', spin_id2='@H', ave_dist=1.02 * 1e-10)
1253
1254
1255 self.interpreter.value.set(N15_CSA, 'csa')
1256
1257
1258 self.interpreter.spin.isotope('15N', spin_id='@N')
1259 self.interpreter.spin.isotope('1H', spin_id='@H')
1260
1261
1262 self.interpreter.model_free.select_model(model='tm2')
1263
1264
1265 self.interpreter.dx.map(params=['local_tm', 's2', 'te'], spin_id=':2@N', inc=2, lower=[5e-9, 0.0, 0.0], file_prefix='devnull')
1266
1267
1269 """Constrained BFGS opt, backtracking line search {S2=0.970, te=2048, Rex=0.149}
1270
1271 The optimisation options are:
1272 - BFGS optimisation.
1273 - Backtracking line search.
1274 - Constrained.
1275
1276 The true data set is:
1277 - S2 = 0.970
1278 - te = 2048 ps
1279 - Rex = 0.149 s^-1
1280
1281 Relevant links for this test are:
1282 - U{https://web.archive.org/web/https://mail.gna.org/public/relax-devel/2009-05/msg00003.html}
1283 - U{https://web.archive.org/web/https://mail.gna.org/public/relax-users/2011-01/msg00029.html}
1284 - U{https://web.archive.org/web/https://web.archive.org/web/https://gna.org/bugs/?12573}
1285 - U{https://web.archive.org/web/https://mail.gna.org/public/relax-users/2008-10/msg00089.html}
1286 - U{https://web.archive.org/web/https://web.archive.org/web/https://gna.org/bugs/?14173}
1287 """
1288
1289
1290 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_setup_S2_0_970_te_2048_Rex_0_149.py')
1291
1292
1293 self.interpreter.value.set([1.0, 0.0, 0.0], ['s2', 'te', 'rex'])
1294
1295
1296 self.interpreter.minimise.execute('bfgs', 'back')
1297
1298
1299 spin = cdp.mol[0].res[1].spin[0]
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495 select = True
1496 s2 = 0.9699999999999995
1497 te = 2048.000000000022283
1498 rex = 0.14900000000000566 / (2.0 * pi * cdp.spectrometer_frq[cdp.ri_ids[0]])**2
1499 chi2 = 3.1024517431117421e-27
1500 iter = [154, 156, 157, 158, 162, 175, 203]
1501 f_count = [598, 695, 701, 722, 735, 744, 758, 955]
1502 g_count = [161, 162, 163, 164, 165, 169, 182, 209]
1503 h_count = 0
1504 warning = None
1505
1506
1507 self.assertEqual(cdp.mol[0].res[0].spin[0].select, False)
1508 self.value_test(spin, select=select, s2=s2, te=te, rex=rex, chi2=chi2)
1509
1510
1512 """Constrained BFGS opt, More and Thuente line search {S2=0.970, te=2048, Rex=0.149}
1513
1514 The optimisation options are:
1515 - BFGS optimisation.
1516 - More and Thuente line search.
1517 - Constrained.
1518
1519 The true data set is:
1520 - S2 = 0.970
1521 - te = 2048 ps
1522 - Rex = 0.149 s^-1
1523
1524 Relevant links for this test are:
1525 - U{https://web.archive.org/web/https://mail.gna.org/public/relax-devel/2009-05/msg00003.html}
1526 - U{https://web.archive.org/web/https://mail.gna.org/public/relax-users/2011-01/msg00029.html}
1527 - U{https://web.archive.org/web/https://web.archive.org/web/https://gna.org/bugs/?12573}
1528 - U{https://web.archive.org/web/https://mail.gna.org/public/relax-users/2008-10/msg00089.html}
1529 - U{https://web.archive.org/web/https://web.archive.org/web/https://gna.org/bugs/?14174}
1530 """
1531
1532
1533 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_setup_S2_0_970_te_2048_Rex_0_149.py')
1534
1535
1536 self.interpreter.value.set([1.0, 0.0, 0.0], ['s2', 'te', 'rex'])
1537
1538
1539 self.interpreter.minimise.execute('bfgs', 'mt')
1540
1541
1542 spin = cdp.mol[0].res[1].spin[0]
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687 select = True
1688 s2 = 0.9700000000000580
1689 te = 2048.000000011044449
1690 rex = 0.148999999998904 / (2.0 * pi * cdp.spectrometer_frq[cdp.ri_ids[0]])**2
1691 chi2 = 4.3978813282102374e-23
1692 iter = 120
1693 f_count = [377, 381, 384, 386, 388]
1694 g_count = [377, 381, 384, 386, 388]
1695 h_count = 0
1696 warning = None
1697
1698
1699 self.assertEqual(cdp.mol[0].res[0].spin[0].select, False)
1700 self.value_test(spin, select=select, s2=s2, te=te, rex=rex, chi2=chi2)
1701
1702
1704 """Constrained coordinate descent opt, backtracking line search {S2=0.970, te=2048, Rex=0.149}
1705
1706 The optimisation options are:
1707 - Coordinate descent optimisation.
1708 - Backtracking line search.
1709 - Constrained.
1710
1711 The true data set is:
1712 - S2 = 0.970
1713 - te = 2048 ps
1714 - Rex = 0.149 s^-1
1715 """
1716
1717
1718 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_setup_S2_0_970_te_2048_Rex_0_149.py')
1719
1720
1721 self.interpreter.value.set([1.0, 0.0, 0.0], ['s2', 'te', 'rex'])
1722
1723
1724 self.interpreter.minimise.execute('cd', 'back', max_iter=50)
1725
1726
1727 spin = cdp.mol[0].res[1].spin[0]
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756 select = True
1757 s2 = 0.9097900390625
1758 te = 25.00000000000000
1759 rex = 1.24017333984375 / (2.0 * pi * cdp.spectrometer_frq[cdp.ri_ids[0]])**2
1760 chi2 = 53.476155463267176
1761 iter = 50
1762 f_count = 131
1763 g_count = 51
1764 h_count = 0
1765 warning = 'Maximum number of iterations reached'
1766
1767
1768 self.assertEqual(cdp.mol[0].res[0].spin[0].select, False)
1769 self.value_test(spin, select=select, s2=s2, te=te, rex=rex, chi2=chi2)
1770
1771
1773 """Constrained coordinate descent opt, More and Thuente line search {S2=0.970, te=2048, Rex=0.149}
1774
1775 The optimisation options are:
1776 - Coordinate descent optimisation.
1777 - More and Thuente line search.
1778 - Constrained.
1779
1780 The true data set is:
1781 - S2 = 0.970
1782 - te = 2048 ps
1783 - Rex = 0.149 s^-1
1784
1785 Relevant links for this test are:
1786 - U{https://web.archive.org/web/https://web.archive.org/web/https://gna.org/bugs/?12573}
1787 - U{https://web.archive.org/web/https://mail.gna.org/public/relax-users/2008-10/msg00089.html}
1788 - U{https://web.archive.org/web/https://web.archive.org/web/https://gna.org/bugs/?14175}
1789 """
1790
1791
1792 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_setup_S2_0_970_te_2048_Rex_0_149.py')
1793
1794
1795 self.interpreter.value.set([1.0, 0.0, 0.0], ['s2', 'te', 'rex'])
1796
1797
1798 self.interpreter.minimise.execute('cd', 'mt')
1799
1800
1801 spin = cdp.mol[0].res[1].spin[0]
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902 select = True
1903 s2 = 0.9700000000219674
1904 te = 2048.000001534187049
1905 rex = 0.14899999946977982 / (2.0 * pi * cdp.spectrometer_frq[cdp.ri_ids[0]])**2
1906 chi2 = 2.3477234248531005e-18
1907 iter = [198, 200]
1908 f_count = [738, 757, 874]
1909 g_count = [738, 757, 874]
1910 h_count = 0
1911 warning = None
1912
1913
1914 self.assertEqual(cdp.mol[0].res[0].spin[0].select, False)
1915 self.value_test(spin, select=select, s2=s2, te=te, rex=rex, chi2=chi2)
1916
1917
1919 """Constrained Newton opt, GMW Hessian mod, backtracking line search {S2=0.970, te=2048, Rex=0.149}
1920
1921 The optimisation options are:
1922 - Newton optimisation.
1923 - GMW Hessian modification.
1924 - Backtracking line search.
1925 - Constrained.
1926
1927 The true data set is:
1928 - S2 = 0.970
1929 - te = 2048 ps
1930 - Rex = 0.149 s^-1
1931
1932 Relevant links for this test are:
1933 - U{https://web.archive.org/web/https://web.archive.org/web/https://gna.org/bugs/?12573}
1934 - U{https://web.archive.org/web/https://mail.gna.org/public/relax-users/2008-10/msg00089.html}
1935 - U{https://web.archive.org/web/https://web.archive.org/web/https://gna.org/bugs/?14177}
1936 """
1937
1938
1939 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_setup_S2_0_970_te_2048_Rex_0_149.py')
1940
1941
1942 self.interpreter.value.set([1.0, 0.0, 0.0], ['s2', 'te', 'rex'])
1943
1944
1945 self.interpreter.minimise.execute('newton', 'gmw', 'back')
1946
1947
1948 spin = cdp.mol[0].res[1].spin[0]
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049 select = True
2050 s2 = 0.9699999999999994
2051 te = 2048.000000000045020
2052 rex = 0.14900000000001817 / (2.0 * pi * cdp.spectrometer_frq[cdp.ri_ids[0]])**2
2053 chi2 = 7.3040158179665562e-28
2054 iter = 18
2055 f_count = [55, 57, 94]
2056 g_count = [23]
2057 h_count = 18
2058 warning = None
2059
2060
2061 self.assertEqual(cdp.mol[0].res[0].spin[0].select, False)
2062 self.value_test(spin, select=select, s2=s2, te=te, rex=rex, chi2=chi2)
2063
2064
2066 """Constrained Newton opt, GMW Hessian mod, More and Thuente line search {S2=0.970, te=2048, Rex=0.149}
2067
2068 The optimisation options are:
2069 - Newton optimisation.
2070 - GMW Hessian modification.
2071 - More and Thuente line search.
2072 - Constrained.
2073
2074 The true data set is:
2075 - S2 = 0.970
2076 - te = 2048 ps
2077 - Rex = 0.149 s^-1
2078
2079 Relevant links for this test are:
2080 - U{https://web.archive.org/web/https://web.archive.org/web/https://gna.org/bugs/?12573}
2081 - U{https://web.archive.org/web/https://mail.gna.org/public/relax-users/2008-10/msg00089.html}
2082 - U{https://web.archive.org/web/https://web.archive.org/web/https://gna.org/bugs/?14176}
2083 """
2084
2085
2086 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_setup_S2_0_970_te_2048_Rex_0_149.py')
2087
2088
2089 self.interpreter.value.set([1.0, 0.0, 0.0], ['s2', 'te', 'rex'])
2090
2091
2092 self.interpreter.minimise.execute('newton', 'gmw', 'mt')
2093
2094
2095 self.monte_carlo()
2096
2097
2098 spin = cdp.mol[0].res[1].spin[0]
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229 select = True
2230 s2 = 0.9699999999999993
2231 te = 2048.000000000041837
2232 rex = 0.14900000000002225 / (2.0 * pi * cdp.spectrometer_frq[cdp.ri_ids[0]])**2
2233 chi2 = 6.8756889983348349e-28
2234 iter = 22
2235 f_count = [91, 95, 153, 159, 160, 165]
2236 g_count = [91, 95, 153, 159, 160, 165]
2237 h_count = 22
2238 warning = None
2239
2240
2241 self.assertEqual(cdp.mol[0].res[0].spin[0].select, False)
2242 self.value_test(spin, select=select, s2=s2, te=te, rex=rex, chi2=chi2)
2243
2244
2246 """Constrained steepest descent opt, backtracking line search {S2=0.970, te=2048, Rex=0.149}
2247
2248 The optimisation options are:
2249 - Steepest descent optimisation.
2250 - Backtracking line search.
2251 - Constrained.
2252
2253 The true data set is:
2254 - S2 = 0.970
2255 - te = 2048 ps
2256 - Rex = 0.149 s^-1
2257 """
2258
2259
2260 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_setup_S2_0_970_te_2048_Rex_0_149.py')
2261
2262
2263 self.interpreter.value.set([1.0, 0.0, 0.0], ['s2', 'te', 'rex'])
2264
2265
2266 self.interpreter.minimise.execute('sd', 'back', max_iter=50)
2267
2268
2269 spin = cdp.mol[0].res[1].spin[0]
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298 select = True
2299 s2 = 0.91579220834688024
2300 te = 0.30568658722531733
2301 rex = 0.34008409798366124 / (2.0 * pi * cdp.spectrometer_frq[cdp.ri_ids[0]])**2
2302 chi2 = 68.321956795264342
2303 iter = 50
2304 f_count = 134
2305 g_count = 51
2306 h_count = 0
2307 warning = 'Maximum number of iterations reached'
2308
2309
2310 self.assertEqual(cdp.mol[0].res[0].spin[0].select, False)
2311 self.value_test(spin, select=select, s2=s2, te=te, rex=rex, chi2=chi2)
2312
2313
2315 """Constrained steepest descent opt, More and Thuente line search {S2=0.970, te=2048, Rex=0.149}
2316
2317 The optimisation options are:
2318 - Steepest descent optimisation.
2319 - More and Thuente line search.
2320 - Constrained.
2321
2322 The true data set is:
2323 - S2 = 0.970
2324 - te = 2048 ps
2325 - Rex = 0.149 s^-1
2326 """
2327
2328
2329 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_setup_S2_0_970_te_2048_Rex_0_149.py')
2330
2331
2332 self.interpreter.value.set([1.0, 0.0, 0.0], ['s2', 'te', 'rex'])
2333
2334
2335 self.interpreter.minimise.execute('sd', 'mt', max_iter=50)
2336
2337
2338 spin = cdp.mol[0].res[1].spin[0]
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367 select = True
2368 s2 = 0.91619994957822126
2369 te = 0.12319687570987945
2370 rex = 0.16249110942961512 / (2.0 * pi * cdp.spectrometer_frq[cdp.ri_ids[0]])**2
2371 chi2 = 73.843613546506191
2372 iter = 50
2373 f_count = 108
2374 g_count = 108
2375 h_count = 0
2376 warning = 'Maximum number of iterations reached'
2377
2378
2379 self.assertEqual(cdp.mol[0].res[0].spin[0].select, False)
2380 self.value_test(spin, select=select, s2=s2, te=te, rex=rex, chi2=chi2)
2381
2382
2384 """Constrained grid search {S2=0.970, te=2048, Rex=0.149}.
2385
2386 The optimisation options are:
2387 - Constrained grid search.
2388
2389 The true data set is:
2390 - S2 = 0.970
2391 - te = 2048 ps
2392 - Rex = 0.149 s^-1
2393 """
2394
2395
2396 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_setup_S2_0_970_te_2048_Rex_0_149.py')
2397
2398
2399 self.interpreter.minimise.grid_search(inc=11)
2400
2401
2402 spin = cdp.mol[0].res[1].spin[0]
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431 select = True
2432 s2 = 1.0
2433 te = 0.0
2434 rex = 0.0
2435 chi2 = 3.9844117908982288
2436 iter = 1331
2437 f_count = 1331
2438 g_count = 0
2439 h_count = 0
2440 warning = None
2441
2442
2443 self.assertEqual(cdp.mol[0].res[0].spin[0].select, False)
2444 self.value_test(spin, select=select, s2=s2, te=te, rex=rex, chi2=chi2)
2445
2446
2448 """Reading of relaxation data using the user function relax_data.read()."""
2449
2450
2451 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'model_free'+sep+'S2_0.970_te_2048_Rex_0.149'
2452
2453
2454 self.interpreter.sequence.read(file='noe.500.out', dir=path, res_num_col=1, res_name_col=2)
2455
2456
2457 self.interpreter.relax_data.read(ri_id='R1_600', ri_type='R1', frq=600.0 * 1e6, file='r1.600.out', dir=path, res_num_col=1, res_name_col=2, data_col=3, error_col=4)
2458
2459
2460 self.assertEqual(cdp.mol[0].res[1].spin[0].ri_data['R1_600'], 1.3874977659397683)
2461 self.assertEqual(cdp.mol[0].res[1].spin[0].ri_data_err['R1_600'], 0.027749955318795365)
2462
2463
2465 """Read a relax 1.2 model-free results file using the user function results.read()."""
2466
2467
2468 self.interpreter.results.read(file='results_1.2', dir=status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'model_free')
2469
2470
2471 print(cdp)
2472
2473
2474 num = [3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30, 31, 33, 34, 35]
2475 select = [False, False, False, False, False, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, False, False, False]
2476 model = ['m6', 'm8', 'm6', 'm6', 'm5', 'm5', 'm6', 'm5', 'm5', 'm5', 'm5', 'm5', 'm5', 'm5', 'm5', 'm5', 'm5', 'm5', 'm5', 'm5', 'm5', 'm8']
2477 params = [['s2f', 'tf', 's2', 'ts'], ['s2f', 'tf', 's2', 'ts', 'rex'], ['s2f', 'tf', 's2', 'ts'], ['s2f', 'tf', 's2', 'ts'], ['s2f', 's2', 'ts'], ['s2f', 's2', 'ts'], ['s2f', 'tf', 's2', 'ts'], ['s2f', 's2', 'ts'], ['s2f', 's2', 'ts'], ['s2f', 's2', 'ts'], ['s2f', 's2', 'ts'], ['s2f', 's2', 'ts'], ['s2f', 's2', 'ts'], ['s2f', 's2', 'ts'], ['s2f', 's2', 'ts'], ['s2f', 's2', 'ts'], ['s2f', 's2', 'ts'], ['s2f', 's2', 'ts'], ['s2f', 's2', 'ts'], ['s2f', 's2', 'ts'], ['s2f', 's2', 'ts'], ['s2f', 'tf', 's2', 'ts', 'rex']]
2478 s2 = [0.36670427146403667, 0.29007016882193892, 0.32969827132809559, 0.32795333510352148, 0.48713005133752196, 0.40269538236298569, 0.40700811448591556, 0.4283551026406261, 0.51176783207279875, 0.40593664887508263, 0.39437732735324443, 0.51457448574034614, 0.3946900969237977, 0.44740698217286901, 0.48527716982891644, 0.40845486062540021, 0.45839900995265137, 0.52650140958170921, 0.4293599736020427, 0.4057313062564018, 0.49877862202992485, 0.2592017578673716]
2479 s2f = [0.74487419686217116, 0.75358958979175727, 0.77751085082436211, 0.79095600331751026, 0.81059857999556584, 0.83190224667917501, 0.80119109731193627, 0.83083248649122576, 0.86030420847112021, 0.84853537580616367, 0.82378413185968968, 0.82419108009774422, 0.85121172821954216, 0.8736616181472916, 0.84117641395909415, 0.82881488883235521, 0.82697284935760407, 0.85172375147802715, 0.81366357660551614, 0.80525752789388483, 0.87016608774434312, 0.72732036363757913]
2480 s2s = [0.49230363061145249, 0.38491796164819009, 0.4240433056059994, 0.41462904855388333, 0.60095102971952741, 0.48406574687168274, 0.50800379067049317, 0.51557336720143987, 0.59486845122178478, 0.47839684761453399, 0.47873867934666214, 0.62433881919629686, 0.46368028522041266, 0.51210557140148982, 0.57690296800513374, 0.49281795745831319, 0.55430962492751434, 0.61815983018913379, 0.5276873464009153, 0.50385285725620466, 0.57319933407525203, 0.35637907423767778]
2481 tf = [51.972302580836775, 40.664901270582988, 28.130299965023671, 33.804249387275249, None, None, 39.01236115991609, None, None, None, None, None, None, None, None, None, None, None, None, None, None, 44.039078787981225]
2482 ts = [4485.91415175767, 4102.7781982031429, 3569.2837792404325, 6879.5308400989479, 3372.9879908647699, 4029.0617588044606, 4335.5290462417324, 4609.1336532777468, 2628.5638771308277, 3618.1332115807745, 6208.3028336637644, 3763.0843884066526, 3847.9994107906346, 2215.2061317769703, 2936.1282626562524, 3647.0715185456729, 3803.6990762708042, 2277.5259401416288, 3448.4496004396187, 3884.6917561878495, 1959.3267951363712, 4100.8496898773756]
2483 rex = [None, 0.37670424516405815, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, 0.71472288436387088]
2484
2485
2486 ri_ids = ['R1_500', 'R2_500', 'NOE_500', 'R1_600', 'R2_600', 'NOE_600', 'R1_750', 'R2_750', 'NOE_750']
2487 types_list = ['R1', 'R2', 'NOE', 'R1', 'R2', 'NOE', 'R1', 'R2', 'NOE']
2488 frqs_list = [500000000.0] * 3 + [600000000.0] * 3 + [750000000.0] * 3
2489 ri_type = {}
2490 frqs = {}
2491 for i in range(len(ri_ids)):
2492 ri_type[ri_ids[i]] = types_list[i]
2493 frqs[ri_ids[i]] = frqs_list[i]
2494
2495 ri_data = {}
2496 ri_data['R1_500'] = [2.2480000000000002, 2.2679999999999998, 2.2309999999999999, 2.383, 2.1960000000000002, 2.3570000000000002, 2.3340000000000001, 2.3999999999999999, 2.2839999999999998, 2.3889999999999998, 2.375, 2.274, 2.407, 2.3220000000000001, 2.2130000000000001, 2.351, 2.3260000000000001, 2.2949999999999999, 2.2829999999999999, 2.302, 2.2719999999999998, 2.2280000000000002]
2497 ri_data['R2_500'] = [5.3419999999999996, 5.3730000000000002, 5.1280000000000001, 5.6749999999999998, 5.9669999999999996, 5.8410000000000002, 5.774, 6.0419999999999998, 6.3129999999999997, 5.9210000000000003, 6.1269999999999998, 6.1120000000000001, 6.0570000000000004, 5.6399999999999997, 6.2809999999999997, 5.8890000000000002, 5.875, 6.1429999999999998, 5.7370000000000001, 5.5490000000000004, 5.7110000000000003, 5.4020000000000001]
2498 ri_data['NOE_500'] = [0.4617, 0.46560000000000001, 0.61670000000000003, 0.60860000000000003, 0.68869999999999998, 0.6663, 0.58620000000000005, 0.64939999999999998, 0.61070000000000002, 0.61180000000000001, 0.73129999999999995, 0.69650000000000001, 0.65139999999999998, 0.4929, 0.65920000000000001, 0.63029999999999997, 0.64380000000000004, 0.53500000000000003, 0.63839999999999997, 0.65000000000000002, 0.49909999999999999, 0.45979999999999999]
2499 ri_data['R1_600'] = [1.8879999999999999, 1.992, 2.0270000000000001, 1.9790000000000001, 1.9399999999999999, 2.0550000000000002, 2.0030000000000001, 2.0139999999999998, 1.982, 2.1000000000000001, 2.008, 1.927, 2.1019999999999999, 2.0830000000000002, 1.9910000000000001, 2.036, 1.9990000000000001, 1.9490000000000001, 1.976, 1.9870000000000001, 2.0, 1.9379999999999999]
2500 ri_data['R2_600'] = [5.6100000000000003, 5.7869999999999999, 5.4029999999999996, 6.1849999999999996, 6.3150000000000004, 5.9809999999999999, 6.1600000000000001, 6.2460000000000004, 6.4340000000000002, 6.0069999999999997, 6.399, 6.6799999999999997, 6.1369999999999996, 5.952, 6.3239999999999998, 5.9699999999999998, 6.3979999999999997, 6.4379999999999997, 6.1139999999999999, 6.0960000000000001, 6.3250000000000002, 6.1050000000000004]
2501 ri_data['NOE_600'] = [0.62929999999999997, 0.64429999999999998, 0.5393, 0.71509999999999996, 0.73870000000000002, 0.75580000000000003, 0.64239999999999997, 0.74429999999999996, 0.69440000000000002, 0.73140000000000005, 0.7681, 0.73399999999999999, 0.75680000000000003, 0.62470000000000003, 0.73529999999999995, 0.73740000000000006, 0.73080000000000001, 0.6603, 0.70899999999999996, 0.69040000000000001, 0.59199999999999997, 0.56830000000000003]
2502 ri_data['R1_750'] = [1.6220000000000001, 1.706, 1.73, 1.665, 1.627, 1.768, 1.706, 1.7030000000000001, 1.7649999999999999, 1.8129999999999999, 1.675, 1.6339999999999999, 1.845, 1.7829999999999999, 1.764, 1.7470000000000001, 1.681, 1.647, 1.6850000000000001, 1.667, 1.7010000000000001, 1.6850000000000001]
2503 ri_data['R2_750'] = [6.2619999999999996, 6.5359999999999996, 5.8959999999999999, 6.6840000000000002, 6.8819999999999997, 6.7569999999999997, 6.5620000000000003, 7.0030000000000001, 6.9740000000000002, 6.649, 6.9829999999999997, 7.2309999999999999, 6.4429999999999996, 6.6840000000000002, 6.8070000000000004, 6.4850000000000003, 6.9400000000000004, 6.944, 6.4640000000000004, 6.4889999999999999, 6.9009999999999998, 6.9539999999999997]
2504 ri_data['NOE_750'] = [0.61909999999999998, 0.65890000000000004, 0.72009999999999996, 0.71009999999999995, 0.75219999999999998, 0.80420000000000003, 0.70020000000000004, 0.81999999999999995, 0.81040000000000001, 0.83409999999999995, 0.81299999999999994, 0.81910000000000005, 0.7782, 0.74760000000000004, 0.8115, 0.7379, 0.81100000000000005, 0.78249999999999997, 0.75729999999999997, 0.78259999999999996, 0.75139999999999996, 0.65210000000000001]
2505
2506 ri_data_err = {}
2507 ri_data_err['R1_500'] = [0.044999999999999998, 0.044999999999999998, 0.044499999999999998, 0.048000000000000001, 0.043999999999999997, 0.047, 0.0465, 0.048000000000000001, 0.045499999999999999, 0.048000000000000001, 0.047500000000000001, 0.045499999999999999, 0.048000000000000001, 0.0465, 0.044499999999999998, 0.047, 0.0465, 0.045499999999999999, 0.045499999999999999, 0.045999999999999999, 0.045499999999999999, 0.044499999999999998]
2508 ri_data_err['R2_500'] = [0.107, 0.1075, 0.10249999999999999, 0.1135, 0.11899999999999999, 0.11650000000000001, 0.11600000000000001, 0.121, 0.1265, 0.11799999999999999, 0.123, 0.122, 0.1215, 0.1125, 0.17599999999999999, 0.11749999999999999, 0.11749999999999999, 0.123, 0.1145, 0.111, 0.1145, 0.108]
2509 ri_data_err['NOE_500'] = [0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003]
2510 ri_data_err['R1_600'] = [0.037999999999999999, 0.040000000000000001, 0.040500000000000001, 0.0395, 0.0385, 0.041000000000000002, 0.040000000000000001, 0.040500000000000001, 0.040000000000000001, 0.042000000000000003, 0.041500000000000002, 0.039, 0.042000000000000003, 0.042000000000000003, 0.0395, 0.040500000000000001, 0.040000000000000001, 0.039, 0.0395, 0.040000000000000001, 0.040500000000000001, 0.039]
2511 ri_data_err['R2_600'] = [0.1125, 0.11550000000000001, 0.108, 0.1235, 0.1265, 0.1275, 0.123, 0.125, 0.1285, 0.12, 0.128, 0.13350000000000001, 0.1225, 0.11899999999999999, 0.1265, 0.1195, 0.128, 0.129, 0.1225, 0.122, 0.1265, 0.1225]
2512 ri_data_err['NOE_600'] = [0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003]
2513 ri_data_err['R1_750'] = [0.032500000000000001, 0.034000000000000002, 0.035000000000000003, 0.033500000000000002, 0.032500000000000001, 0.035499999999999997, 0.034000000000000002, 0.034000000000000002, 0.035499999999999997, 0.036499999999999998, 0.033500000000000002, 0.032500000000000001, 0.036999999999999998, 0.035499999999999997, 0.035499999999999997, 0.035000000000000003, 0.033500000000000002, 0.033000000000000002, 0.034000000000000002, 0.033000000000000002, 0.034000000000000002, 0.033500000000000002]
2514 ri_data_err['R2_750'] = [0.1255, 0.1305, 0.11799999999999999, 0.13400000000000001, 0.13800000000000001, 0.13550000000000001, 0.13150000000000001, 0.14050000000000001, 0.13950000000000001, 0.13300000000000001, 0.14000000000000001, 0.14449999999999999, 0.129, 0.13400000000000001, 0.13600000000000001, 0.1295, 0.13850000000000001, 0.13900000000000001, 0.1295, 0.13, 0.13800000000000001, 0.13900000000000001]
2515 ri_data_err['NOE_750'] = [0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003, 0.050000000000000003]
2516
2517
2518 self.assertEqual(cdp.pipe_type, 'mf')
2519 self.assertEqual(cdp.hybrid_pipes, [])
2520
2521
2522 self.assertEqual(cdp.diff_tensor.type, 'sphere')
2523 self.assertEqual(cdp.diff_tensor.tm, 6.2029050826362826e-09)
2524
2525
2526 self.assertEqual(cdp.chi2, 88.0888600975)
2527 self.assertEqual(cdp.iter, 1)
2528 self.assertEqual(cdp.f_count, 20)
2529 self.assertEqual(cdp.g_count, 2)
2530 self.assertEqual(cdp.h_count, 1)
2531 self.assertEqual(cdp.warning, None)
2532
2533
2534 self.assertEqual(cdp.ri_ids, ri_ids)
2535 for ri_id in ri_ids:
2536 self.assertEqual(cdp.ri_type[ri_id], ri_type[ri_id])
2537 self.assertEqual(cdp.spectrometer_frq[ri_id], frqs[ri_id])
2538
2539
2540 j = 0
2541 for i in range(len(cdp.mol[0].res)):
2542
2543 res = cdp.mol[0].res[i]
2544 spin = cdp.mol[0].res[i].spin[0]
2545 h_spin = None
2546 if len(cdp.mol[0].res[i].spin) > 1:
2547 h_spin = cdp.mol[0].res[i].spin[1]
2548
2549
2550 print(res)
2551 print(spin)
2552
2553
2554 self.assertEqual(res.num, num[i])
2555 self.assertEqual(res.name, 'XXX')
2556 self.assertEqual(spin.num, None)
2557 if select[i]:
2558 self.assertEqual(spin.name, 'N')
2559 self.assertEqual(spin.fixed, False)
2560 else:
2561 self.assertEqual(spin.name, None)
2562 self.assertEqual(spin.select, select[i])
2563 if h_spin:
2564 self.assertEqual(h_spin.num, None)
2565 self.assertEqual(h_spin.name, 'H')
2566 self.assertEqual(h_spin.select, False)
2567
2568
2569 if not select[i]:
2570 continue
2571
2572
2573 self.assertEqual(spin.isotope, '15N')
2574 self.assertEqual(h_spin.isotope, '1H')
2575
2576
2577 self.assertEqual(spin.model, model[j])
2578 self.assertEqual(spin.equation, 'mf_ext')
2579 self.assertEqual(spin.params, params[j])
2580 self.assertEqual(spin.s2, s2[j])
2581 self.assertEqual(spin.s2f, s2f[j])
2582 self.assertEqual(spin.s2s, s2s[j])
2583 self.assertEqual(spin.local_tm, None)
2584 self.assertEqual(spin.te, None)
2585 if tf[j] != None:
2586 tf[j] = tf[j]*1e-12
2587 self.assertEqual(spin.tf, tf[j])
2588 self.assertEqual(spin.ts, ts[j]*1e-12)
2589 if rex[j] != None:
2590 rex[j] = rex[j]/(2.0*pi*500000000.0)**2
2591 self.assertEqual(spin.rex, rex[j])
2592 self.assertEqual(spin.csa, -0.00016999999999999999)
2593
2594
2595 self.assertEqual(spin.chi2, None)
2596 self.assertEqual(spin.iter, None)
2597 self.assertEqual(spin.f_count, None)
2598 self.assertEqual(spin.g_count, None)
2599 self.assertEqual(spin.h_count, None)
2600 self.assertEqual(spin.warning, None)
2601
2602
2603 for ri_id in cdp.ri_ids:
2604 print(ri_id)
2605 self.assertEqual(spin.ri_data[ri_id], ri_data[ri_id][j])
2606 self.assertEqual(spin.ri_data_err[ri_id], ri_data_err[ri_id][j])
2607
2608
2609 j = j + 1
2610
2611
2612 for i in range(len(cdp.interatomic)):
2613 self.assertEqual(cdp.interatomic[i].r, 1.0200000000000001e-10)
2614
2615
2617 """Read the truncated relax 1.2 model-free results file for PSE-4."""
2618
2619
2620 self.interpreter.results.read(file='pse4_trunc', dir=status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'model_free')
2621
2622
2623 print(cdp)
2624
2625
2626 num = [24, 27]
2627 name = ['ser', 'gln']
2628 eqi = [None, 'mf_ext']
2629 select = [False, True]
2630 model = [None, 'm5']
2631 params = [[], ['s2f', 's2', 'ts']]
2632 s2 = [None, 0.86578779694713515]
2633 s2f = [None, 0.88618694421409949]
2634 s2s = [None, 0.97698098871784322]
2635 s2s_sim = [[None, None, None],
2636 [0.95852080081635382, 0.97574415413309512, 0.97293450506144197]]
2637 tf = [None, None]
2638 ts = [None, 598.8142249659868e-12]
2639 rex = [None, None]
2640 csa = [None, -0.00017199999999999998]
2641 ri_ids = ['R1_800', 'NOE_800', 'R1_600', 'R2_600', 'NOE_600', 'R1_500', 'R2_500', 'NOE_500']
2642 ri_type_list = ['R1', 'NOE', 'R1', 'R2', 'NOE', 'R1', 'R2', 'NOE']
2643 frq_list = [799744000.0]*2 + [599737000.0]*3 + [499719000.0]*3
2644 ri_data_list = [[],
2645 [0.6835, 0.81850000000000001, 0.98409999999999997, 16.5107, 0.79796699999999998, 1.3174999999999999, 15.381500000000001, 0.73046900000000003]]
2646 ri_data_err_list = [[],
2647 [0.026957200000000001, 0.025881000000000001, 0.0243073, 0.497137, 0.028663000000000001, 0.038550000000000001, 0.40883999999999998, 0.022016299999999999]]
2648 ri_type = {}
2649 frq = {}
2650 ri_data = [{}, {}]
2651 ri_data_err = [{}, {}]
2652 for i in range(len(ri_ids)):
2653 ri_type[ri_ids[i]] = ri_type_list[i]
2654 frq[ri_ids[i]] = frq_list[i]
2655 ri_data[1][ri_ids[i]] = ri_data_list[1][i]
2656 ri_data_err[1][ri_ids[i]] = ri_data_err_list[1][i]
2657
2658
2659 r = [None, 1.0200000000000001e-10]
2660
2661
2662 self.assertEqual(cdp.pipe_type, 'mf')
2663 self.assertEqual(cdp.hybrid_pipes, [])
2664
2665
2666 self.assertEqual(cdp.diff_tensor.type, 'ellipsoid')
2667 self.assertEqual(cdp.diff_tensor.tm, 1.2682770910095516e-08)
2668 self.assertEqual(cdp.diff_tensor.tm_err, 2.4053909822304126e-11)
2669 self.assertEqual(cdp.diff_tensor.tm_sim[0], 1.2666656725867738e-08)
2670 self.assertEqual(cdp.diff_tensor.tm_sim[1], 1.2689812011679408e-08)
2671 self.assertEqual(cdp.diff_tensor.tm_sim[2], 1.2698266641804573e-08)
2672
2673
2674 self.assertEqual(cdp.chi2, 935.13348627485448)
2675 self.assertEqual(cdp.chi2_sim[0], 898.0981500197106)
2676 self.assertEqual(cdp.chi2_sim[1], 904.11113814725172)
2677 self.assertEqual(cdp.chi2_sim[2], 902.03890817023728)
2678 self.assertEqual(cdp.iter, 1)
2679 self.assertEqual(cdp.iter_sim[0], 23)
2680 self.assertEqual(cdp.iter_sim[1], 30)
2681 self.assertEqual(cdp.iter_sim[2], 16)
2682 self.assertEqual(cdp.f_count, 21)
2683 self.assertEqual(cdp.f_count_sim[0], 61)
2684 self.assertEqual(cdp.f_count_sim[1], 501)
2685 self.assertEqual(cdp.f_count_sim[2], 59)
2686 self.assertEqual(cdp.g_count, 2)
2687 self.assertEqual(cdp.g_count_sim[0], 27)
2688 self.assertEqual(cdp.g_count_sim[1], 34)
2689 self.assertEqual(cdp.g_count_sim[2], 20)
2690 self.assertEqual(cdp.h_count, 1)
2691 self.assertEqual(cdp.h_count_sim[0], 23)
2692 self.assertEqual(cdp.h_count_sim[1], 30)
2693 self.assertEqual(cdp.h_count_sim[2], 16)
2694 self.assertEqual(cdp.warning, None)
2695 self.assertEqual(cdp.warning_sim[0], None)
2696 self.assertEqual(cdp.warning_sim[1], None)
2697 self.assertEqual(cdp.warning_sim[2], None)
2698
2699
2700 self.assertEqual(cdp.ri_ids, ri_ids)
2701 for ri_id in ri_ids:
2702 self.assertEqual(cdp.ri_type[ri_id], ri_type[ri_id])
2703 self.assertEqual(cdp.spectrometer_frq[ri_id], frq[ri_id])
2704
2705
2706 for i in range(len(cdp.mol[0].res)):
2707
2708 res = cdp.mol[0].res[i]
2709 spin = cdp.mol[0].res[i].spin[0]
2710 h_spin = cdp.mol[0].res[i].spin[1]
2711
2712
2713 print(res)
2714 print(spin)
2715
2716
2717 self.assertEqual(res.num, num[i])
2718 self.assertEqual(res.name, name[i])
2719 self.assertEqual(spin.num, None)
2720 self.assertEqual(spin.name, 'N')
2721 self.assertEqual(spin.select, select[i])
2722 self.assertEqual(spin.fixed, False)
2723 self.assertEqual(h_spin.num, None)
2724 self.assertEqual(h_spin.name, 'H')
2725 self.assertEqual(h_spin.select, False)
2726
2727
2728 self.assertEqual(spin.isotope, '15N')
2729 self.assertEqual(h_spin.isotope, '1H')
2730
2731
2732 self.assertEqual(spin.model, model[i])
2733 self.assertEqual(spin.equation, eqi[i])
2734 self.assertEqual(spin.params, params[i])
2735 self.assertEqual(spin.s2, s2[i])
2736 self.assertEqual(spin.s2f, s2f[i])
2737 self.assertEqual(spin.s2s, s2s[i])
2738 self.assertEqual(spin.local_tm, None)
2739 self.assertEqual(spin.te, None)
2740 self.assertEqual(spin.tf, tf[i])
2741 self.assertEqual(spin.ts, ts[i])
2742 self.assertEqual(spin.rex, rex[i])
2743 self.assertEqual(spin.csa, csa[i])
2744 for j in range(3):
2745 self.assertEqual(spin.s2s_sim[j], s2s_sim[i][j])
2746
2747
2748 self.assertEqual(spin.chi2, None)
2749 self.assertEqual(spin.iter, None)
2750 self.assertEqual(spin.f_count, None)
2751 self.assertEqual(spin.g_count, None)
2752 self.assertEqual(spin.h_count, None)
2753 self.assertEqual(spin.warning, None)
2754
2755
2756 if i == 0:
2757 self.assertEqual(spin.ri_data, {})
2758 self.assertEqual(spin.ri_data_err, {})
2759 else:
2760 for ri_id in ri_ids:
2761 self.assertEqual(spin.ri_data[ri_id], ri_data[i][ri_id])
2762 self.assertEqual(spin.ri_data_err[ri_id], ri_data_err[i][ri_id])
2763
2764
2765 for i in range(len(cdp.interatomic)):
2766 self.assertEqual(cdp.interatomic[i].r, r[i])
2767
2768
2770 """Read the truncated relax 1.2 model-free results file for TEM-1."""
2771
2772
2773 self.interpreter.results.read(file='tem1_trunc', dir=status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'model_free')
2774
2775
2776 print(cdp)
2777
2778
2779 num = [26, 27, 29, 30, 31, 32, 33, 34]
2780 name = ['His', 'Pro', 'Thr', 'Leu', 'Val', 'Lys', 'Val', 'Lys']
2781 eqi = [None, None, None, 'mf_ext', 'mf_orig', 'mf_orig', None, 'mf_orig']
2782 select = [False, False, False, True, True, True, False, True]
2783 model = [None, None, None, 'm5', 'm2', 'm1', None, 'm1']
2784 params = [None, None, None, ['s2f', 's2', 'ts'], ['s2', 'te'], ['s2'], None, ['s2']]
2785 s2 = [None, None, None, 0.85674161305142216, 0.89462664243726608, 0.90201790111143165, None, 0.92099297347361675]
2786 s2f = [None, None, None, 0.88220054271390302, None, None, None, None]
2787 s2s = [None, None, None, 0.97114156200339452, None, None, None, None]
2788 te = [None, None, None, None, 43.262426916926735*1e-12, None, None, None]
2789 tf = [None, None, None, None, None, None, None, None]
2790 ts = [None, None, None, 2385.912514843546*1e-12, None, None, None, None]
2791 rex = [None, None, None, None, None, None, None, None]
2792 csa = [None, None, None, -0.00017199999999999998, -0.00017199999999999998, -0.00017199999999999998, None, -0.00017199999999999998]
2793 ri_ids = ['R1_800', 'R2_800', 'R1_600', 'R2_600', 'NOE_600', 'R1_500', 'R2_500', 'NOE_500']
2794 ri_type_list = ['R1', 'R2', 'R1', 'R2', 'NOE', 'R1', 'R2', 'NOE']
2795 frq_list = [799812000.0]*2 + [599739000.0]*3 + [499827000.0]*3
2796 ri_data_list = [[],
2797 [],
2798 [],
2799 [0.75680000000000003, 18.797999999999998, 1.0747, 16.477, 0.86873100000000003, 1.2625999999999999, 15.3367, 0.77803197999999996],
2800 [0.75019999999999998, 19.201599999999999, 1.0617000000000001, 17.652899999999999, 0.73757200000000001, 1.3165, 15.949, 0.72442474000000001],
2801 [0.75860000000000005, 19.303799999999999, 1.0605, 16.593699999999998, 0.79137500000000005, 1.3425, 15.327199999999999, 0.83449132000000004],
2802 [],
2803 [0.71919999999999995, 20.165400000000002, 1.0729, 17.291899999999998, 0.80444599999999999, 1.2971999999999999, 15.9963, 0.73164684999999996]]
2804 ri_data_err_list = [[],
2805 [],
2806 [],
2807 [0.028001600000000001, 0.21729999999999999, 0.031166300000000001, 0.44487900000000002, 0.043210699999999998, 0.054291800000000001, 0.69015199999999999, 0.038901600000000001],
2808 [0.028899999999999999, 0.25640000000000002, 0.030789299999999999, 0.476628, 0.036686799999999999, 0.0566095, 0.71770500000000004, 0.036221200000000002],
2809 [0.033399999999999999, 0.2233, 0.030754500000000001, 0.44802999999999998, 0.039363000000000002, 0.057727500000000001, 0.689724, 0.041724600000000001],
2810 [],
2811 [0.027699999999999999, 0.52810000000000001, 0.031399999999999997, 0.46688099999999999, 0.040013100000000003, 0.055779599999999999, 0.71983399999999997, 0.036582299999999998]]
2812 ri_type = {}
2813 frq = {}
2814 ri_data = []
2815 ri_data_err = []
2816 for i in range(len(ri_data_list)):
2817 ri_data.append({})
2818 ri_data_err.append({})
2819
2820 for i in range(len(ri_ids)):
2821 ri_type[ri_ids[i]] = ri_type_list[i]
2822 frq[ri_ids[i]] = frq_list[i]
2823 for j in range(len(ri_data_list)):
2824 if len(ri_data_list[j]):
2825 ri_data[j][ri_ids[i]] = ri_data_list[j][i]
2826 ri_data_err[j][ri_ids[i]] = ri_data_err_list[j][i]
2827
2828 chi2 = [None, None, None, 7.9383923597292441, 10.93852890925343, 3.1931459495488084, None, 8.3598891989018611]
2829 iter = [None, None, None, 55, 10, 3, None, 3]
2830 f_count = [None, None, None, 170, 148, 10, None, 10]
2831 g_count = [None, None, None, 60, 14, 6, None, 6]
2832 h_count = [None, None, None, 55, 10, 3, None, 3]
2833
2834
2835 r = [None, None, None, 1.0200000000000001e-10, 1.0200000000000001e-10, 1.0200000000000001e-10, None, 1.0200000000000001e-10]
2836
2837
2838 self.assertEqual(cdp.pipe_type, 'mf')
2839 self.assertEqual(cdp.hybrid_pipes, [])
2840
2841
2842 self.assertEqual(cdp.diff_tensor.type, 'ellipsoid')
2843 self.assertEqual(cdp.diff_tensor.tm, 1.2526607261882971e-08)
2844 self.assertEqual(cdp.diff_tensor.Da, 2784606.8835473624)
2845 self.assertEqual(cdp.diff_tensor.Dr, 0.097243698709517518)
2846 self.assertEqual(cdp.diff_tensor.alpha, 48.852555276419558 / 360.0 * 2.0 * pi)
2847 self.assertEqual(cdp.diff_tensor.beta, 9.7876096346750447 / 360.0 * 2.0 * pi)
2848 self.assertEqual(cdp.diff_tensor.gamma, 42.15815798778408 / 360.0 * 2.0 * pi)
2849
2850
2851 self.assertEqual(cdp.ri_ids, ri_ids)
2852 for ri_id in ri_ids:
2853 self.assertEqual(cdp.ri_type[ri_id], ri_type[ri_id])
2854 self.assertEqual(cdp.spectrometer_frq[ri_id], frq[ri_id])
2855
2856
2857 for i in range(len(cdp.mol[0].res)):
2858
2859 res = cdp.mol[0].res[i]
2860 spin = cdp.mol[0].res[i].spin[0]
2861 h_spin = cdp.mol[0].res[i].spin[1]
2862
2863
2864 print(res)
2865 print(spin)
2866
2867
2868 self.assertEqual(res.num, num[i])
2869 self.assertEqual(res.name, name[i])
2870 self.assertEqual(spin.num, None)
2871 self.assertEqual(spin.name, 'N')
2872 self.assertEqual(spin.select, select[i])
2873 self.assertEqual(spin.fixed, False)
2874 self.assertEqual(h_spin.num, None)
2875 self.assertEqual(h_spin.name, 'H')
2876 self.assertEqual(h_spin.select, False)
2877
2878
2879 self.assertEqual(spin.isotope, '15N')
2880 self.assertEqual(h_spin.isotope, '1H')
2881
2882
2883 self.assertEqual(spin.model, model[i])
2884 self.assertEqual(spin.equation, eqi[i])
2885 self.assertEqual(spin.params, params[i])
2886 self.assertEqual(spin.s2, s2[i])
2887 self.assertEqual(spin.s2f, s2f[i])
2888 self.assertEqual(spin.s2s, s2s[i])
2889 self.assertEqual(spin.local_tm, None)
2890 self.assertEqual(spin.te, te[i])
2891 self.assertEqual(spin.tf, tf[i])
2892 self.assertEqual(spin.ts, ts[i])
2893 self.assertEqual(spin.rex, rex[i])
2894 self.assertEqual(spin.csa, csa[i])
2895
2896
2897 self.assertEqual(spin.chi2, chi2[i])
2898 self.assertEqual(spin.iter, iter[i])
2899 self.assertEqual(spin.f_count, f_count[i])
2900 self.assertEqual(spin.g_count, g_count[i])
2901 self.assertEqual(spin.h_count, h_count[i])
2902 self.assertEqual(spin.warning, None)
2903
2904
2905 if not len(ri_data[i]):
2906 self.assertEqual(spin.ri_data, {})
2907 self.assertEqual(spin.ri_data_err, {})
2908 else:
2909 for ri_id in ri_ids:
2910 self.assertEqual(spin.ri_data[ri_id], ri_data[i][ri_id])
2911 self.assertEqual(spin.ri_data_err[ri_id], ri_data_err[i][ri_id])
2912
2913
2914 for i in range(len(cdp.interatomic)):
2915 self.assertEqual(cdp.interatomic[i].r, r[i])
2916
2917
2930
2931
2944
2945
2958
2959
2961 """Read a 1.3 model-free results file (relax XML version 2) with corrupted floats.
2962
2963 The floats are deliberately mangled to test the IEEE-754 reading.
2964 """
2965
2966
2967 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'model_free'+sep+'OMP'
2968
2969
2970 self.interpreter.pipe.create('1.3', 'mf')
2971 self.interpreter.results.read(file='final_results_trunc2_1.3_v2_broken', dir=path)
2972
2973
2974 self.check_read_results_1_3()
2975
2976
2989
2990
2992 """Selecting model m4 with parameters {S2, te, Rex} using model_free.select_model()."""
2993
2994
2995 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'model_free'+sep+'S2_0.970_te_2048_Rex_0.149'
2996
2997
2998 self.interpreter.sequence.read(file='noe.500.out', dir=path, res_num_col=1, res_name_col=2)
2999
3000
3001 self.interpreter.model_free.select_model(model='m4')
3002
3003
3004 self.assertEqual(cdp.mol[0].res[1].spin[0].model, 'm4')
3005 self.assertEqual(cdp.mol[0].res[1].spin[0].params, ['s2', 'te', 'rex'])
3006
3007
3009 """Setting the CSA value through the user function value.set()."""
3010
3011
3012 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'model_free'+sep+'S2_0.970_te_2048_Rex_0.149'
3013
3014
3015 self.interpreter.sequence.read(file='noe.500.out', dir=path, res_num_col=1, res_name_col=2)
3016
3017
3018 self.interpreter.value.set(N15_CSA, 'csa')
3019
3020
3021 self.assertEqual(cdp.mol[0].res[1].spin[0].csa, N15_CSA)
3022
3023
3025 """Test the optimisation of the tm0 model-free parameter grid."""
3026
3027
3028 cdp._model = 'tm0'
3029 cdp._value_test = self.value_test
3030
3031
3032 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm0_grid.py')
3033
3034
3036 """Test the optimisation of the tm1 model-free parameter grid."""
3037
3038
3039 cdp._model = 'tm1'
3040 cdp._value_test = self.value_test
3041
3042
3043 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm1_grid.py')
3044
3045
3047 """Test the optimisation of the tm2 model-free parameter grid."""
3048
3049
3050 cdp._model = 'tm2'
3051 cdp._value_test = self.value_test
3052
3053
3054 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm2_grid.py')
3055
3056
3058 """Test the optimisation of the tm3 model-free parameter grid."""
3059
3060
3061 cdp._model = 'tm3'
3062 cdp._value_test = self.value_test
3063
3064
3065 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm3_grid.py')
3066
3067
3069 """Test the optimisation of the tm4 model-free parameter grid."""
3070
3071
3072 cdp._model = 'tm4'
3073 cdp._value_test = self.value_test
3074
3075
3076 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm4_grid.py')
3077
3078
3080 """Test the optimisation of the tm5 model-free parameter grid."""
3081
3082
3083 cdp._model = 'tm5'
3084 cdp._value_test = self.value_test
3085
3086
3087 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm5_grid.py')
3088
3089
3091 """Test the optimisation of the tm6 model-free parameter grid."""
3092
3093
3094 cdp._model = 'tm6'
3095 cdp._value_test = self.value_test
3096
3097
3098 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm6_grid.py')
3099
3100
3102 """Test the optimisation of the tm7 model-free parameter grid."""
3103
3104
3105 cdp._model = 'tm7'
3106 cdp._value_test = self.value_test
3107
3108
3109 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm7_grid.py')
3110
3111
3113 """Test the optimisation of the tm8 model-free parameter grid."""
3114
3115
3116 cdp._model = 'tm8'
3117 cdp._value_test = self.value_test
3118
3119
3120 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm8_grid.py')
3121
3122
3124 """Test the optimisation of the tm9 model-free parameter grid."""
3125
3126
3127 cdp._model = 'tm9'
3128 cdp._value_test = self.value_test
3129
3130
3131 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm9_grid.py')
3132
3133
3135 """Try a component of model-free analysis on Tyler Reddy's peptide data (truncated)."""
3136
3137
3138 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'tylers_peptide.py')
3139
3140
3142 """Writing of model-free results using the user function results.write()."""
3143
3144
3145 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'model_free'+sep+'OMP'
3146
3147
3148 self.interpreter.results.read(file='final_results_trunc2_1.2', dir=path)
3149
3150
3151 file = DummyFileObject()
3152
3153
3154 self.interpreter.results.write(file=file, dir=path)
3155
3156
3157 test_lines = file.readlines()
3158 file.close()
3159
3160
3161 if sys.version_info[0] >= 3 and sys.version_info[1] >= 2:
3162 file = open_read_file(file_name='final_results_trunc2_3.0', dir=path)
3163
3164
3165 elif sys.version_info[0] >= 3 and sys.version_info[1] == 1:
3166 file = open_read_file(file_name='final_results_trunc2_3.0_oldxml', dir=path)
3167
3168
3169 elif dep_check.xml_type == 'internal' and sys.version_info[0] >= 2 and sys.version_info[1] >= 7 and sys.version_info[2] >= 3:
3170 file = open_read_file(file_name='final_results_trunc2_3.0', dir=path)
3171
3172
3173 else:
3174 file = open_read_file(file_name='final_results_trunc2_3.0_oldxml', dir=path)
3175
3176
3177 true_lines = file.readlines()
3178 file.close()
3179
3180
3181 for i in range(len(test_lines)):
3182
3183
3184 if i == 1 or i == 2:
3185 continue
3186
3187
3188 test = test_lines[i]
3189 true = true_lines[i]
3190
3191
3192 try:
3193
3194 if search('<value>', test):
3195 test = test.lstrip()
3196 test = test.replace('<value>', '')
3197 test = test.replace('</value>', '')
3198 if search('<ieee_754_byte_array>', test):
3199 test = test.lstrip()
3200 test = test.replace('<ieee_754_byte_array>', '')
3201 test = test.replace('</ieee_754_byte_array>', '')
3202
3203 test = eval(test)
3204 except:
3205 pass
3206
3207
3208 try:
3209
3210 if search('<value>', true):
3211 true = true.lstrip()
3212 true = true.replace('<value>', '')
3213 true = true.replace('</value>', '')
3214 if search('<ieee_754_byte_array>', true):
3215 true = true.lstrip()
3216 true = true.replace('<ieee_754_byte_array>', '')
3217 true = true.replace('</ieee_754_byte_array>', '')
3218
3219 true = eval(true)
3220 except:
3221 pass
3222
3223
3224 self.assertEqual(test, true)
3225
3226
3227 - def value_test(self, spin, select=True, local_tm=None, s2=None, s2f=None, s2s=None, te=None, tf=None, ts=None, rex=None, chi2=None, iter=None, f_count=None, g_count=None, h_count=None, warning=None):
3228 """Test the optimisation values."""
3229
3230
3231 mesg = self.mesg_opt_debug(spin)
3232
3233
3234 if iter != None and not isinstance(iter, list):
3235 iter = [iter]
3236 if f_count != None and not isinstance(f_count, list):
3237 f_count = [f_count]
3238 if g_count != None and not isinstance(g_count, list):
3239 g_count = [g_count]
3240 if h_count != None and not isinstance(h_count, list):
3241 h_count = [h_count]
3242
3243
3244
3245
3246
3247 self.assertEqual(spin.select, select, msg=mesg)
3248
3249
3250 if local_tm != None:
3251 self.assertAlmostEqual(spin.local_tm / 1e-9, local_tm, msg=mesg)
3252 else:
3253 self.assertEqual(spin.local_tm, None, msg=mesg)
3254
3255
3256 if s2 != None:
3257 self.assertAlmostEqual(spin.s2, s2, msg=mesg)
3258 else:
3259 self.assertEqual(spin.s2, None, msg=mesg)
3260
3261
3262 if s2f != None:
3263 self.assertAlmostEqual(spin.s2f, s2f, 5, msg=mesg)
3264 else:
3265 self.assertEqual(spin.s2f, None, msg=mesg)
3266
3267
3268 if s2s != None:
3269 self.assertAlmostEqual(spin.s2s, s2s, 5, msg=mesg)
3270 else:
3271 self.assertEqual(spin.s2s, None, msg=mesg)
3272
3273
3274 if isinstance(te, float):
3275 self.assertAlmostEqual(spin.te / 1e-12, te, 5, msg=mesg)
3276 elif te == None:
3277 self.assertEqual(spin.te, None, msg=mesg)
3278
3279
3280 if isinstance(tf, float):
3281 self.assertAlmostEqual(spin.tf / 1e-12, tf, 4, msg=mesg)
3282 elif tf == None:
3283 self.assertEqual(spin.tf, None, msg=mesg)
3284
3285
3286 if isinstance(ts, float):
3287 self.assertAlmostEqual(spin.ts / 1e-12, ts, 4, msg=mesg)
3288 elif ts == None:
3289 self.assertEqual(spin.ts, None, msg=mesg)
3290
3291
3292 if isinstance(rex, float):
3293 self.assertAlmostEqual(spin.rex * (2.0 * pi * cdp.spectrometer_frq[cdp.ri_ids[0]])**2, rex * (2.0 * pi * cdp.spectrometer_frq[cdp.ri_ids[0]])**2, msg=mesg)
3294 elif rex == None:
3295 self.assertEqual(spin.rex, None, msg=mesg)
3296
3297
3298 if chi2 != None:
3299 self.assertAlmostEqual(spin.chi2, chi2, msg=mesg)
3300 if iter != None:
3301 self.assertTrue(spin.iter in iter, msg=mesg)
3302 if f_count != None:
3303 self.assertTrue(spin.f_count in f_count, msg=mesg)
3304 if g_count != None:
3305 self.assertTrue(spin.g_count in g_count, msg=mesg)
3306 if h_count != None:
3307 self.assertTrue(spin.h_count in h_count, msg=mesg)
3308 if warning != None:
3309 self.assertEqual(spin.warning, warning, msg=mesg)
3310