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  from shutil import copytree 
  29  import sys 
  30  from tempfile import mkdtemp 
  31   
  32   
  33  from data import Relax_data_store; ds = Relax_data_store() 
  34  import dep_check 
  35  from generic_fns import pipes 
  36  from generic_fns.interatomic import interatomic_loop 
  37  from generic_fns.mol_res_spin import spin_loop 
  38  from physical_constants import N15_CSA, NH_BOND_LENGTH 
  39  from relax_io import DummyFileObject, open_read_file 
  40  from status import Status; status = Status() 
  41  from test_suite.system_tests.base_classes import SystemTestCase 
  42   
  43   
  44   
  45  SYSTEM = platform.system() 
  46  RELEASE = platform.release() 
  47  VERSION = platform.version() 
  48  WIN32_VER = platform.win32_ver() 
  49  DIST = platform.dist() 
  50  ARCH = platform.architecture() 
  51  MACH = platform.machine() 
  52  PROC = platform.processor() 
  53  PY_VER = platform.python_version() 
  54  NUMPY_VER = numpy.__version__ 
  55  LIBC_VER = platform.libc_ver() 
  56   
  57   
  58  if SYSTEM == 'Windows' or SYSTEM == 'Microsoft': 
  59       
  60      SYSTEM = 'Windows' 
  61   
  62   
  63   
  64 -class Mf(SystemTestCase): 
   65      """TestCase class for the functional tests of model-free analysis.""" 
  66   
  72   
  73   
  75          """Common code for the test_read_results_1_3*() tests.""" 
  76   
  77           
  78          path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'model_free'+sep+'OMP' 
  79   
  80           
  81          self.interpreter.pipe.create('1.2', 'mf') 
  82          self.interpreter.results.read(file='final_results_trunc_1.2', dir=path) 
  83   
  84           
  85          pipe_12 = pipes.get_pipe('1.2') 
  86          pipe_13 = pipes.get_pipe('1.3') 
  87   
  88           
  89          print("Comparison of the objects of the base data pipe:") 
  90          self.object_comparison(obj1=pipe_12, obj2=pipe_13, skip=['mol', 'interatomic', 'diff_tensor']) 
  91   
  92           
  93          print("Comparison of the objects of the diffusion tensor:") 
  94          self.object_comparison(obj1=pipe_12.diff_tensor, obj2=pipe_13.diff_tensor) 
  95   
  96           
  97          self.assertEqual(len(pipe_12.mol), len(pipe_13.mol)) 
  98   
  99           
 100          for i in range(len(pipe_12.mol)): 
 101               
 102              print("Comparison of the objects of the molecule:") 
 103              self.object_comparison(obj1=pipe_12.mol[i], obj2=pipe_13.mol[i], skip=['res']) 
 104   
 105               
 106              self.assertEqual(len(pipe_12.mol[i].res), len(pipe_13.mol[i].res)) 
 107   
 108               
 109              for j in range(len(pipe_12.mol[i].res)): 
 110                   
 111                  if j > 10: 
 112                      break 
 113   
 114                   
 115                  print("Comparison of the objects of the residue:") 
 116                  self.object_comparison(obj1=pipe_12.mol[i].res[j], obj2=pipe_13.mol[i].res[j], skip=['spin']) 
 117   
 118                   
 119                  self.assertEqual(len(pipe_12.mol[i].res[j].spin), len(pipe_13.mol[i].res[j].spin)) 
 120   
 121                   
 122                  for k in range(len(pipe_12.mol[i].res[j].spin)): 
 123                       
 124                      print("Comparison of the objects of the spin:") 
 125                      self.object_comparison(obj1=pipe_12.mol[i].res[j].spin[k], obj2=pipe_13.mol[i].res[j].spin[k]) 
 126   
 127           
 128          for i in range(len(pipe_12.interatomic)): 
 129               
 130              print("Comparison of the objects of the molecule:") 
 131              self.object_comparison(obj1=pipe_12.interatomic[i], obj2=pipe_13.interatomic[i]) 
  132   
 133   
 135          """Method for returning a string to help debug the minimisation. 
 136   
 137          @param spin:    The SpinContainer of the optimised spin. 
 138          @type spin:     SpinContainer instance 
 139          @return:        The debugging string. 
 140          @rtype:         str 
 141          """ 
 142   
 143           
 144          string = 'Optimisation failure.\n\n' 
 145   
 146           
 147          string = string + "%-18s%-25s\n" % ("System: ", SYSTEM) 
 148          string = string + "%-18s%-25s\n" % ("Release: ", RELEASE) 
 149          string = string + "%-18s%-25s\n" % ("Version: ", VERSION) 
 150          string = string + "%-18s%-25s\n" % ("Win32 version: ", (WIN32_VER[0] + " " + WIN32_VER[1] + " " + WIN32_VER[2] + " " + WIN32_VER[3])) 
 151          string = string + "%-18s%-25s\n" % ("Distribution: ", (DIST[0] + " " + DIST[1] + " " + DIST[2])) 
 152          string = string + "%-18s%-25s\n" % ("Architecture: ", (ARCH[0] + " " + ARCH[1])) 
 153          string = string + "%-18s%-25s\n" % ("Machine: ", MACH) 
 154          string = string + "%-18s%-25s\n" % ("Processor: ", PROC) 
 155          string = string + "%-18s%-25s\n" % ("Python version: ", PY_VER) 
 156          string = string + "%-18s%-25s\n" % ("Numpy version: ", NUMPY_VER) 
 157          string = string + "%-18s%-25s\n" % ("Libc version: ", (LIBC_VER[0] + " " + LIBC_VER[1])) 
 158   
 159   
 160           
 161          string = string + '\n' 
 162          if spin.local_tm != None: 
 163              string = string + "%-15s %30.16g\n" % ('local_tm (ns):',    spin.local_tm * 1e9) 
 164          if spin.s2 != None: 
 165              string = string + "%-15s %30.16g\n" % ('s2:',               spin.s2) 
 166          if spin.s2f != None: 
 167              string = string + "%-15s %30.16g\n" % ('s2f:',              spin.s2f) 
 168          if spin.s2s != None: 
 169              string = string + "%-15s %30.16g\n" % ('s2s:',              spin.s2s) 
 170          if spin.te != None: 
 171              string = string + "%-15s %30.13g\n" % ('te (ps):',          spin.te * 1e12) 
 172          if spin.tf != None: 
 173              string = string + "%-15s %30.13g\n" % ('tf (ps):',          spin.tf * 1e12) 
 174          if spin.ts != None: 
 175              string = string + "%-15s %30.13g\n" % ('ts (ps):',          spin.ts * 1e12) 
 176          if spin.rex != None: 
 177              string = string + "%-15s %30.17g\n" % ('rex:',      spin.rex * (2.0 * pi * cdp.frq[cdp.ri_ids[0]])**2) 
 178          string = string +   "%-15s %30.17g\n" % ('chi2:',   spin.chi2) 
 179          string = string +   "%-15s %30i\n"   % ('iter:',    spin.iter) 
 180          string = string +   "%-15s %30i\n"   % ('f_count:', spin.f_count) 
 181          string = string +   "%-15s %30i\n"   % ('g_count:', spin.g_count) 
 182          string = string +   "%-15s %30i\n"   % ('h_count:', spin.h_count) 
 183          string = string +   "%-15s %30s\n"   % ('warning:', spin.warning) 
 184   
 185           
 186          return string 
  187   
 188   
 199   
 200   
 202          """Check if the contents of 2 objects are the same.""" 
 203   
 204           
 205          self.assertEqual(dir(obj1), dir(obj2)) 
 206   
 207           
 208          for name in dir(obj1): 
 209               
 210              if skip and name in skip: 
 211                  continue 
 212   
 213               
 214              if search('^_', name): 
 215                  continue 
 216   
 217               
 218              if name in list(obj1.__class__.__dict__.keys()): 
 219                  continue 
 220   
 221               
 222              print("\t" + name) 
 223   
 224               
 225              sub_obj1 = getattr(obj1, name) 
 226              sub_obj2 = getattr(obj2, name) 
 227   
 228               
 229              self.assertEqual(type(sub_obj1), type(sub_obj2)) 
 230   
 231               
 232              if isinstance(sub_obj1, dict): 
 233                  self.assertEqual(sub_obj1, sub_obj2) 
 234              else: 
 235                  self.assertEqual(str(sub_obj1), str(sub_obj2)) 
  236   
 237   
 239          """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.""" 
 240   
 241           
 242          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'bug_14872_unicode_selection.py') 
  243   
 244   
 246          """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).""" 
 247   
 248           
 249          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') 
  250   
 251   
 253          """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>}.""" 
 254   
 255           
 256          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'bug_15050.py') 
  257   
 258   
 260          """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.""" 
 261   
 262           
 263          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'bugs_12582_12591_12607.py') 
 264   
 265           
 266          self.assertNotEqual(cdp.mol[0].res[1].spin[0].s2, 1.0) 
  267   
 268   
 270          """Test catching U{bug #18790<https://web.archive.org/web/https://gna.org/bugs/?18790>}, the negative relaxation data RelaxError reported by Vitaly Vostrikov.""" 
 271   
 272           
 273          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'bug_18790_negative_error.py') 
  274   
 275   
 277          """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.""" 
 278   
 279           
 280          ds.tmpdir = mkdtemp() 
 281   
 282           
 283          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'bug_20213_asn_sidechain.py') 
  284   
 285   
 287          """U{Bug #20464<https://web.archive.org/web/https://gna.org/bugs/?20464>} catch, the failure due to missing relaxation data.""" 
 288   
 289           
 290          self.interpreter.reset() 
 291   
 292           
 293          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'bug_20464_missing_ri_data.py') 
  294   
 295   
 297          """U{Bug #20563<https://web.archive.org/web/https://gna.org/bugs/?20563>} catch, the failure due to missing relaxation data errors.""" 
 298   
 299           
 300          self.interpreter.reset() 
 301   
 302           
 303          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'bug_20563_missing_ri_error.py') 
  304   
 305   
 307          """U{Bug #20531<https://web.archive.org/web/https://gna.org/bugs/?20531>} catch, the RelaxFault when creating the Molmol macros.""" 
 308   
 309           
 310          self.interpreter.reset() 
 311   
 312           
 313          state = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'saved_states'+sep+'bug_20531_mf_relaxfault.bz2' 
 314          self.interpreter.state.load(state, force=True) 
 315   
 316           
 317          ds.tmpdir = mkdtemp() 
 318   
 319           
 320          self.interpreter.molmol.macro_write(data_type='s2',        dir=ds.tmpdir, force=True) 
 321          self.interpreter.molmol.macro_write(data_type='s2f',       dir=ds.tmpdir, force=True) 
 322          self.interpreter.molmol.macro_write(data_type='s2s',       dir=ds.tmpdir, force=True) 
 323          self.interpreter.molmol.macro_write(data_type='amp_fast',  dir=ds.tmpdir, force=True) 
 324          self.interpreter.molmol.macro_write(data_type='amp_slow',  dir=ds.tmpdir, force=True) 
 325          self.interpreter.molmol.macro_write(data_type='te',        dir=ds.tmpdir, force=True) 
 326          self.interpreter.molmol.macro_write(data_type='tf',        dir=ds.tmpdir, force=True) 
 327          self.interpreter.molmol.macro_write(data_type='ts',        dir=ds.tmpdir, force=True) 
 328          self.interpreter.molmol.macro_write(data_type='time_fast', dir=ds.tmpdir, force=True) 
 329          self.interpreter.molmol.macro_write(data_type='time_slow', dir=ds.tmpdir, force=True) 
 330          self.interpreter.molmol.macro_write(data_type='rex',       dir=ds.tmpdir, force=True) 
 331   
 332           
 333          self.interpreter.pymol.macro_write(data_type='s2',        dir=ds.tmpdir, force=True) 
 334          self.interpreter.pymol.macro_write(data_type='s2f',       dir=ds.tmpdir, force=True) 
 335          self.interpreter.pymol.macro_write(data_type='s2s',       dir=ds.tmpdir, force=True) 
 336          self.interpreter.pymol.macro_write(data_type='amp_fast',  dir=ds.tmpdir, force=True) 
 337          self.interpreter.pymol.macro_write(data_type='amp_slow',  dir=ds.tmpdir, force=True) 
 338          self.interpreter.pymol.macro_write(data_type='te',        dir=ds.tmpdir, force=True) 
 339          self.interpreter.pymol.macro_write(data_type='tf',        dir=ds.tmpdir, force=True) 
 340          self.interpreter.pymol.macro_write(data_type='ts',        dir=ds.tmpdir, force=True) 
 341          self.interpreter.pymol.macro_write(data_type='time_fast', dir=ds.tmpdir, force=True) 
 342          self.interpreter.pymol.macro_write(data_type='time_slow', dir=ds.tmpdir, force=True) 
 343          self.interpreter.pymol.macro_write(data_type='rex',       dir=ds.tmpdir, force=True) 
 344   
 345           
 346          self.interpreter.grace.write(x_data_type='spin', y_data_type='s2',  file='s2.agr',        dir=ds.tmpdir, force=True) 
 347          self.interpreter.grace.write(x_data_type='spin', y_data_type='s2f', file='s2f.agr',       dir=ds.tmpdir, force=True) 
 348          self.interpreter.grace.write(x_data_type='spin', y_data_type='s2s', file='s2s.agr',       dir=ds.tmpdir, force=True) 
 349          self.interpreter.grace.write(x_data_type='spin', y_data_type='te',  file='te.agr',        dir=ds.tmpdir, force=True) 
 350          self.interpreter.grace.write(x_data_type='spin', y_data_type='tf',  file='tf.agr',        dir=ds.tmpdir, force=True) 
 351          self.interpreter.grace.write(x_data_type='spin', y_data_type='ts',  file='ts.agr',        dir=ds.tmpdir, force=True) 
 352          self.interpreter.grace.write(x_data_type='spin', y_data_type='rex', file='rex.agr',       dir=ds.tmpdir, force=True) 
 353          self.interpreter.grace.write(x_data_type='s2',   y_data_type='te',  file='s2_vs_te.agr',  dir=ds.tmpdir, force=True) 
 354          self.interpreter.grace.write(x_data_type='s2',   y_data_type='rex', file='s2_vs_rex.agr', dir=ds.tmpdir, force=True) 
 355          self.interpreter.grace.write(x_data_type='te',   y_data_type='rex', file='te_vs_rex.agr', dir=ds.tmpdir, force=True) 
 356   
 357           
 358          self.interpreter.value.write(param='s2',       file='s2.txt',       dir=ds.tmpdir, force=True) 
 359          self.interpreter.value.write(param='s2f',      file='s2f.txt',      dir=ds.tmpdir, force=True) 
 360          self.interpreter.value.write(param='s2s',      file='s2s.txt',      dir=ds.tmpdir, force=True) 
 361          self.interpreter.value.write(param='te',       file='te.txt',       dir=ds.tmpdir, force=True) 
 362          self.interpreter.value.write(param='tf',       file='tf.txt',       dir=ds.tmpdir, force=True) 
 363          self.interpreter.value.write(param='ts',       file='ts.txt',       dir=ds.tmpdir, force=True) 
 364          self.interpreter.value.write(param='rex',      file='rex.txt',      dir=ds.tmpdir, force=True) 
 365          self.interpreter.value.write(param='local_tm', file='local_tm.txt', dir=ds.tmpdir, force=True) 
  366   
 367   
 369          """U{Bug #20531<https://web.archive.org/web/https://gna.org/bugs/?20531>} catch, the RelaxFault when creating the Molmol macros. 
 370   
 371          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. 
 372          """ 
 373   
 374           
 375          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) 
 376   
 377           
 378          self.interpreter.spin.name('N') 
 379          self.interpreter.spin.element('N') 
 380          self.interpreter.spin.isotope('15N') 
 381   
 382           
 383          models = ['m0', 'm1', 'm2', 'm3', 'm4', 'm5', 'm6', 'm7', 'm8', 'm9'] + ['tm0', 'tm1', 'tm2', 'tm3', 'tm4', 'tm5', 'tm6', 'tm7', 'tm8', 'tm9'] 
 384   
 385           
 386          self.interpreter.frq.set(id='600', frq=600000000.1) 
 387   
 388           
 389          for i in range(len(models)): 
 390              self.interpreter.model_free.select_model(model=models[i], spin_id=':%s'%(i+1)) 
 391   
 392           
 393          self.interpreter.value.set(param='s2', val=0.8) 
 394          self.interpreter.value.set(param='s2f', val=0.85) 
 395          self.interpreter.value.set(param='s2s', val=0.7) 
 396          self.interpreter.value.set(param='local_tm', val=8000e-12) 
 397          self.interpreter.value.set(param='te', val=20e-12) 
 398          self.interpreter.value.set(param='tf', val=40e-12) 
 399          self.interpreter.value.set(param='ts', val=2000e-12) 
 400          self.interpreter.value.set(param='rex', val=1.5e-18) 
 401   
 402           
 403          ds.tmpdir = mkdtemp() 
 404   
 405           
 406          self.interpreter.molmol.macro_write(data_type='s2',        dir=ds.tmpdir, force=True) 
 407          self.interpreter.molmol.macro_write(data_type='s2f',       dir=ds.tmpdir, force=True) 
 408          self.interpreter.molmol.macro_write(data_type='s2s',       dir=ds.tmpdir, force=True) 
 409          self.interpreter.molmol.macro_write(data_type='amp_fast',  dir=ds.tmpdir, force=True) 
 410          self.interpreter.molmol.macro_write(data_type='amp_slow',  dir=ds.tmpdir, force=True) 
 411          self.interpreter.molmol.macro_write(data_type='te',        dir=ds.tmpdir, force=True) 
 412          self.interpreter.molmol.macro_write(data_type='tf',        dir=ds.tmpdir, force=True) 
 413          self.interpreter.molmol.macro_write(data_type='ts',        dir=ds.tmpdir, force=True) 
 414          self.interpreter.molmol.macro_write(data_type='time_fast', dir=ds.tmpdir, force=True) 
 415          self.interpreter.molmol.macro_write(data_type='time_slow', dir=ds.tmpdir, force=True) 
 416          self.interpreter.molmol.macro_write(data_type='rex',       dir=ds.tmpdir, force=True) 
 417   
 418           
 419          self.interpreter.pymol.macro_write(data_type='s2',        dir=ds.tmpdir, force=True) 
 420          self.interpreter.pymol.macro_write(data_type='s2f',       dir=ds.tmpdir, force=True) 
 421          self.interpreter.pymol.macro_write(data_type='s2s',       dir=ds.tmpdir, force=True) 
 422          self.interpreter.pymol.macro_write(data_type='amp_fast',  dir=ds.tmpdir, force=True) 
 423          self.interpreter.pymol.macro_write(data_type='amp_slow',  dir=ds.tmpdir, force=True) 
 424          self.interpreter.pymol.macro_write(data_type='te',        dir=ds.tmpdir, force=True) 
 425          self.interpreter.pymol.macro_write(data_type='tf',        dir=ds.tmpdir, force=True) 
 426          self.interpreter.pymol.macro_write(data_type='ts',        dir=ds.tmpdir, force=True) 
 427          self.interpreter.pymol.macro_write(data_type='time_fast', dir=ds.tmpdir, force=True) 
 428          self.interpreter.pymol.macro_write(data_type='time_slow', dir=ds.tmpdir, force=True) 
 429          self.interpreter.pymol.macro_write(data_type='rex',       dir=ds.tmpdir, force=True) 
 430   
 431           
 432          self.interpreter.grace.write(x_data_type='spin', y_data_type='s2',  file='s2.agr',        dir=ds.tmpdir, force=True) 
 433          self.interpreter.grace.write(x_data_type='spin', y_data_type='s2f', file='s2f.agr',       dir=ds.tmpdir, force=True) 
 434          self.interpreter.grace.write(x_data_type='spin', y_data_type='s2s', file='s2s.agr',       dir=ds.tmpdir, force=True) 
 435          self.interpreter.grace.write(x_data_type='spin', y_data_type='te',  file='te.agr',        dir=ds.tmpdir, force=True) 
 436          self.interpreter.grace.write(x_data_type='spin', y_data_type='tf',  file='tf.agr',        dir=ds.tmpdir, force=True) 
 437          self.interpreter.grace.write(x_data_type='spin', y_data_type='ts',  file='ts.agr',        dir=ds.tmpdir, force=True) 
 438          self.interpreter.grace.write(x_data_type='spin', y_data_type='rex', file='rex.agr',       dir=ds.tmpdir, force=True) 
 439          self.interpreter.grace.write(x_data_type='s2',   y_data_type='te',  file='s2_vs_te.agr',  dir=ds.tmpdir, force=True) 
 440          self.interpreter.grace.write(x_data_type='s2',   y_data_type='rex', file='s2_vs_rex.agr', dir=ds.tmpdir, force=True) 
 441          self.interpreter.grace.write(x_data_type='te',   y_data_type='rex', file='te_vs_rex.agr', dir=ds.tmpdir, force=True) 
 442   
 443           
 444          self.interpreter.value.write(param='s2',       file='s2.txt',       dir=ds.tmpdir, force=True) 
 445          self.interpreter.value.write(param='s2f',      file='s2f.txt',      dir=ds.tmpdir, force=True) 
 446          self.interpreter.value.write(param='s2s',      file='s2s.txt',      dir=ds.tmpdir, force=True) 
 447          self.interpreter.value.write(param='te',       file='te.txt',       dir=ds.tmpdir, force=True) 
 448          self.interpreter.value.write(param='tf',       file='tf.txt',       dir=ds.tmpdir, force=True) 
 449          self.interpreter.value.write(param='ts',       file='ts.txt',       dir=ds.tmpdir, force=True) 
 450          self.interpreter.value.write(param='rex',      file='rex.txt',      dir=ds.tmpdir, force=True) 
 451          self.interpreter.value.write(param='local_tm', file='local_tm.txt', dir=ds.tmpdir, force=True) 
  452   
 453   
 455          """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.""" 
 456   
 457           
 458          self.interpreter.reset() 
 459   
 460           
 461          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') 
  462   
 463   
 465          """Creating model m4 with parameters {S2, te, Rex} using model_free.create_model().""" 
 466   
 467           
 468          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'create_m4.py') 
 469   
 470           
 471          self.assertEqual(cdp.mol[0].res[1].spin[0].model, 'm4') 
 472          self.assertEqual(cdp.mol[0].res[1].spin[0].params, ['s2', 'te', 'rex']) 
  473   
 474   
 476          """Check the execution of auto_analyses.dauvergne_protocol.""" 
 477   
 478           
 479          ds.tmpdir = mkdtemp() 
 480   
 481           
 482          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'dauvergne_protocol.py') 
 483   
 484           
 485          self.assertEqual(cdp.diff_tensor.type, 'sphere') 
 486          self.assertAlmostEqual(cdp.diff_tensor.tm, 1e-8) 
 487          self.assertEqual(cdp.diff_tensor.fixed, True) 
 488   
 489           
 490          self.assertAlmostEqual(cdp.chi2, 4e-19) 
 491   
 492           
 493          mol_names = ["sphere_mol1"] * 20 
 494          res_names = ["GLY"] * 20 
 495          res_nums = [] 
 496          for i in range(1, 10): 
 497              res_nums.append(i) 
 498              res_nums.append(i) 
 499          res_nums.append(i) 
 500          res_nums.append(i) 
 501          spin_names = ["N", "H"] * 9 + ["NE1", "HE1"] 
 502          spin_nums = list(range(1, 21)) 
 503          isotopes = ["15N", "1H"] * 10 
 504          csa = [-172e-6, None] * 10 
 505          select = [True, False] * 10 
 506          fixed = [False, False] * 10 
 507          s2 = [0.8, None] * 10 
 508          te = [20e-12, None] * 10 
 509   
 510           
 511          i = 0 
 512          for spin, mol_name, res_num, res_name in spin_loop(full_info=True): 
 513               
 514              self.assertEqual(mol_name, mol_names[i]) 
 515              self.assertEqual(res_name, res_names[i]) 
 516              self.assertEqual(res_num,  res_nums[i]) 
 517              self.assertEqual(spin.name, spin_names[i]) 
 518              self.assertEqual(spin.num,  spin_nums[i]) 
 519   
 520               
 521              self.assertEqual(spin.select, select[i]) 
 522              self.assertEqual(spin.fixed, fixed[i]) 
 523              self.assertEqual(spin.isotope, isotopes[i]) 
 524              if csa[i] == None: 
 525                  self.assertEqual(spin.csa, None) 
 526              else: 
 527                  self.assertAlmostEqual(spin.csa, csa[i]) 
 528   
 529               
 530              self.assertEqual(spin.model, 'm2') 
 531              self.assertEqual(spin.equation, 'mf_orig') 
 532              self.assertEqual(len(spin.params), 2) 
 533              self.assertEqual(spin.params[0], 's2') 
 534              self.assertEqual(spin.params[1], 'te') 
 535              if s2[i] == None: 
 536                  self.assertEqual(spin.s2, None) 
 537              else: 
 538                  self.assertAlmostEqual(spin.s2, 0.8) 
 539              self.assertEqual(spin.s2f, None) 
 540              self.assertEqual(spin.s2s, None) 
 541              self.assertEqual(spin.local_tm, None) 
 542              if te[i] == None: 
 543                  self.assertEqual(spin.te, None) 
 544              else: 
 545                  self.assertAlmostEqual(spin.te, 20e-12) 
 546              self.assertEqual(spin.tf, None) 
 547              self.assertEqual(spin.ts, None) 
 548              self.assertEqual(spin.rex, None) 
 549   
 550               
 551              self.assertEqual(spin.chi2, None) 
 552              self.assertEqual(spin.iter, None) 
 553              self.assertEqual(spin.f_count, None) 
 554              self.assertEqual(spin.g_count, None) 
 555              self.assertEqual(spin.h_count, None) 
 556              self.assertEqual(spin.warning, None) 
 557   
 558               
 559              i += 1 
 560   
 561           
 562          i = 0 
 563          for interatom in interatomic_loop(): 
 564              self.assertAlmostEqual(interatom.r, 1.02 * 1e-10) 
 565   
 566           
 567          format1 = "%s%s%s" % (ds.tmpdir, sep, '%s') 
 568          format2 = "%s%s%s%s%s" % (ds.tmpdir, sep, '%s', sep, '%s') 
 569          format3 = "%s%s%s%s%s%s%s" % (ds.tmpdir, sep, '%s', sep, '%s', sep, '%s') 
 570          format4 = "%s%s%s%s%s%s%s%s%s" % (ds.tmpdir, sep, '%s', sep, '%s', sep, '%s', sep, '%s') 
 571   
 572           
 573          dirs = [ 
 574              format1 % ("local_tm"), 
 575              format2 % ("local_tm", "tm1"), 
 576              format2 % ("local_tm", "tm0"), 
 577              format2 % ("local_tm", "aic"), 
 578              format1 % ("sphere"), 
 579              format2 % ("sphere", "init"), 
 580              format2 % ("sphere", "round_1"), 
 581              format3 % ("sphere", "round_1", "m1"), 
 582              format3 % ("sphere", "round_1", "m2"), 
 583              format3 % ("sphere", "round_1", "aic"), 
 584              format3 % ("sphere", "round_1", "opt"), 
 585              format2 % ("sphere", "round_2"), 
 586              format3 % ("sphere", "round_2", "m1"), 
 587              format3 % ("sphere", "round_2", "m2"), 
 588              format3 % ("sphere", "round_2", "aic"), 
 589              format3 % ("sphere", "round_2", "opt"), 
 590              format1 % ("prolate"), 
 591              format2 % ("prolate", "init"), 
 592              format2 % ("prolate", "round_1"), 
 593              format3 % ("prolate", "round_1", "m1"), 
 594              format3 % ("prolate", "round_1", "m2"), 
 595              format3 % ("prolate", "round_1", "aic"), 
 596              format3 % ("prolate", "round_1", "opt"), 
 597              format2 % ("prolate", "round_2"), 
 598              format3 % ("prolate", "round_2", "m1"), 
 599              format3 % ("prolate", "round_2", "m2"), 
 600              format3 % ("prolate", "round_2", "aic"), 
 601              format3 % ("prolate", "round_2", "opt"), 
 602              format1 % ("oblate"), 
 603              format2 % ("oblate", "init"), 
 604              format2 % ("oblate", "round_1"), 
 605              format3 % ("oblate", "round_1", "m1"), 
 606              format3 % ("oblate", "round_1", "m2"), 
 607              format3 % ("oblate", "round_1", "aic"), 
 608              format3 % ("oblate", "round_1", "opt"), 
 609              format2 % ("oblate", "round_2"), 
 610              format3 % ("oblate", "round_2", "m1"), 
 611              format3 % ("oblate", "round_2", "m2"), 
 612              format3 % ("oblate", "round_2", "aic"), 
 613              format3 % ("oblate", "round_2", "opt"), 
 614              format1 % ("ellipsoid"), 
 615              format2 % ("ellipsoid", "init"), 
 616              format2 % ("ellipsoid", "round_1"), 
 617              format3 % ("ellipsoid", "round_1", "m1"), 
 618              format3 % ("ellipsoid", "round_1", "m2"), 
 619              format3 % ("ellipsoid", "round_1", "aic"), 
 620              format3 % ("ellipsoid", "round_1", "opt"), 
 621              format2 % ("ellipsoid", "round_2"), 
 622              format3 % ("ellipsoid", "round_2", "m1"), 
 623              format3 % ("ellipsoid", "round_2", "m2"), 
 624              format3 % ("ellipsoid", "round_2", "aic"), 
 625              format3 % ("ellipsoid", "round_2", "opt"), 
 626              format1 % ("final"), 
 627              format2 % ("final", "grace"), 
 628              format2 % ("final", "pymol"), 
 629              format2 % ("final", "molmol") 
 630          ] 
 631          for root, dirs, files in walk(ds.tmpdir): 
 632              for dir in dirs: 
 633                  dir_path = "%s%s%s" % (root, sep, dir) 
 634                  print("Checking for the directory '%s'." % dir_path) 
 635                  self.assert_(path.isdir(dir_path)) 
 636   
 637           
 638          files = [ 
 639              format3 % ("local_tm", "tm0", "results.bz2"), 
 640              format3 % ("local_tm", "tm1", "results.bz2"), 
 641              format3 % ("local_tm", "aic", "results.bz2"), 
 642              format3 % ("sphere", "init", "results.bz2"), 
 643              format4 % ("sphere", "round_1", "m1", "results.bz2"), 
 644              format4 % ("sphere", "round_1", "m2", "results.bz2"), 
 645              format4 % ("sphere", "round_1", "aic", "results.bz2"), 
 646              format4 % ("sphere", "round_1", "opt", "results.bz2"), 
 647              format4 % ("sphere", "round_2", "m1", "results.bz2"), 
 648              format4 % ("sphere", "round_2", "m2", "results.bz2"), 
 649              format4 % ("sphere", "round_2", "aic", "results.bz2"), 
 650              format4 % ("sphere", "round_2", "opt", "results.bz2"), 
 651              format3 % ("prolate", "init", "results.bz2"), 
 652              format4 % ("prolate", "round_1", "m1", "results.bz2"), 
 653              format4 % ("prolate", "round_1", "m2", "results.bz2"), 
 654              format4 % ("prolate", "round_1", "aic", "results.bz2"), 
 655              format4 % ("prolate", "round_1", "opt", "results.bz2"), 
 656              format4 % ("prolate", "round_2", "m1", "results.bz2"), 
 657              format4 % ("prolate", "round_2", "m2", "results.bz2"), 
 658              format4 % ("prolate", "round_2", "aic", "results.bz2"), 
 659              format4 % ("prolate", "round_2", "opt", "results.bz2"), 
 660              format3 % ("oblate", "init", "results.bz2"), 
 661              format4 % ("oblate", "round_1", "m1", "results.bz2"), 
 662              format4 % ("oblate", "round_1", "m2", "results.bz2"), 
 663              format4 % ("oblate", "round_1", "aic", "results.bz2"), 
 664              format4 % ("oblate", "round_1", "opt", "results.bz2"), 
 665              format4 % ("oblate", "round_2", "m1", "results.bz2"), 
 666              format4 % ("oblate", "round_2", "m2", "results.bz2"), 
 667              format4 % ("oblate", "round_2", "aic", "results.bz2"), 
 668              format4 % ("oblate", "round_2", "opt", "results.bz2"), 
 669              format3 % ("ellipsoid", "init", "results.bz2"), 
 670              format4 % ("ellipsoid", "round_1", "m1", "results.bz2"), 
 671              format4 % ("ellipsoid", "round_1", "m2", "results.bz2"), 
 672              format4 % ("ellipsoid", "round_1", "aic", "results.bz2"), 
 673              format4 % ("ellipsoid", "round_1", "opt", "results.bz2"), 
 674              format4 % ("ellipsoid", "round_2", "m1", "results.bz2"), 
 675              format4 % ("ellipsoid", "round_2", "m2", "results.bz2"), 
 676              format4 % ("ellipsoid", "round_2", "aic", "results.bz2"), 
 677              format4 % ("ellipsoid", "round_2", "opt", "results.bz2"), 
 678              format2 % ("final", "results.bz2"), 
 679              format2 % ("final", "s2.txt"), 
 680              format2 % ("final", "s2f.txt"), 
 681              format2 % ("final", "s2s.txt"), 
 682              format2 % ("final", "local_tm.txt"), 
 683              format2 % ("final", "te.txt"), 
 684              format2 % ("final", "tf.txt"), 
 685              format2 % ("final", "ts.txt"), 
 686              format2 % ("final", "rex.txt"), 
 687              format2 % ("final", "rex_500.txt"), 
 688              format2 % ("final", "rex_900.txt"), 
 689              format2 % ("final", "tensor.pdb"), 
 690              format3 % ("final", "grace", "s2.agr"), 
 691              format3 % ("final", "grace", "s2f.agr"), 
 692              format3 % ("final", "grace", "s2s.agr"), 
 693              format3 % ("final", "grace", "te.agr"), 
 694              format3 % ("final", "grace", "tf.agr"), 
 695              format3 % ("final", "grace", "ts.agr"), 
 696              format3 % ("final", "grace", "rex.agr"), 
 697              format3 % ("final", "grace", "s2_vs_rex.agr"), 
 698              format3 % ("final", "grace", "s2_vs_te.agr"), 
 699              format3 % ("final", "grace", "te_vs_rex.agr"), 
 700              format3 % ("final", "pymol", "s2.pml"), 
 701              format3 % ("final", "pymol", "s2f.pml"), 
 702              format3 % ("final", "pymol", "s2s.pml"), 
 703              format3 % ("final", "pymol", "amp_fast.pml"), 
 704              format3 % ("final", "pymol", "amp_slow.pml"), 
 705              format3 % ("final", "pymol", "te.pml"), 
 706              format3 % ("final", "pymol", "tf.pml"), 
 707              format3 % ("final", "pymol", "ts.pml"), 
 708              format3 % ("final", "pymol", "time_fast.pml"), 
 709              format3 % ("final", "pymol", "time_slow.pml"), 
 710              format3 % ("final", "pymol", "rex.pml"), 
 711              format3 % ("final", "molmol", "s2.mac"), 
 712              format3 % ("final", "molmol", "s2f.mac"), 
 713              format3 % ("final", "molmol", "s2s.mac"), 
 714              format3 % ("final", "molmol", "amp_fast.mac"), 
 715              format3 % ("final", "molmol", "amp_slow.mac"), 
 716              format3 % ("final", "molmol", "te.mac"), 
 717              format3 % ("final", "molmol", "tf.mac"), 
 718              format3 % ("final", "molmol", "ts.mac"), 
 719              format3 % ("final", "molmol", "time_fast.mac"), 
 720              format3 % ("final", "molmol", "time_slow.mac"), 
 721              format3 % ("final", "molmol", "rex.mac"), 
 722          ] 
 723          for root, dirs, files in walk(ds.tmpdir): 
 724              for file in files: 
 725                  file_path = "%s%s%s" % (root, sep, file) 
 726                  print("Checking for the file '%s'." % file_path) 
 727                  self.assert_(path.isfile(file_path)) 
  728   
 729   
 731          """Back-calculate relaxation data.""" 
 732   
 733           
 734          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'generate_ri.py') 
  735   
 736   
 738          """Test the creation of a LaTeX table of model-free results, mimicking the latex_mf_table.py sample script.""" 
 739   
 740           
 741          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'latex_mf_table.py') 
  742   
 743   
 745          """Test the optimisation of the test set {tm=10, S2=0.8, te=40}.""" 
 746   
 747           
 748          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') 
 749   
 750           
 751          frq = ['400', '500', '600', '700', '800', '900', '1000'] 
 752   
 753           
 754          for i in range(len(frq)): 
 755              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') 
 756              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') 
 757              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') 
 758   
 759           
 760          self.interpreter.value.set([15.0e-9, 1.0, 0.0], ['local_tm', 's2', 'te']) 
 761   
 762           
 763          self.interpreter.minimise('newton', 'gmw', 'back') 
 764   
 765           
 766          spin = cdp.mol[0].res[0].spin[0] 
 767   
 768           
 769          self.value_test(spin, local_tm=10, s2=0.8, te=40, chi2=0.0) 
  770   
 771   
 773          """Test the optimisation of the test set {tm=10, S2=0.8, te=40}.""" 
 774   
 775           
 776          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') 
 777   
 778           
 779          frq = ['400', '500', '600', '700', '800', '900', '1000'] 
 780   
 781           
 782          for i in range(len(frq)): 
 783              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') 
 784              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') 
 785              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') 
 786   
 787           
 788          self.interpreter.value.set([15.0e-9, 1.0, 0.0], ['local_tm', 's2', 'te']) 
 789   
 790           
 791          self.interpreter.minimise('newton', 'gmw', 'back') 
 792   
 793           
 794          spin = cdp.mol[0].res[0].spin[0] 
 795   
 796           
 797          self.value_test(spin, local_tm=10, s2=0.8, te=40, chi2=0.0) 
  798   
 799   
 801          """Test the optimisation of the test set {tm=10, S2=0.8, te=40}.""" 
 802   
 803           
 804          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') 
 805   
 806           
 807          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') 
 808          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') 
 809          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') 
 810          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') 
 811          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') 
 812          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') 
 813          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') 
 814          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') 
 815          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') 
 816   
 817           
 818          self.interpreter.value.set([15.0e-9, 1.0, 0.0], ['local_tm', 's2', 'te']) 
 819   
 820           
 821          self.interpreter.minimise('newton', 'gmw', 'back') 
 822   
 823           
 824          spin = cdp.mol[0].res[0].spin[0] 
 825   
 826           
 827          self.value_test(spin, local_tm=10, s2=0.8, te=40, chi2=0.0) 
  828   
 829   
 831          """Test the optimisation of the m0 model-free model against the tm0 parameter grid.""" 
 832   
 833           
 834          cdp._model = 'm0' 
 835          cdp._value_test = self.value_test 
 836   
 837           
 838          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm0_grid.py') 
  839   
 840   
 842          """Test the optimisation of the m1 model-free model against the tm0 parameter grid.""" 
 843   
 844           
 845          cdp._model = 'm1' 
 846          cdp._value_test = self.value_test 
 847   
 848           
 849          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm0_grid.py') 
  850   
 851   
 853          """Test the optimisation of the m2 model-free model against the tm0 parameter grid.""" 
 854   
 855           
 856          cdp._model = 'm2' 
 857          cdp._value_test = self.value_test 
 858   
 859           
 860          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm0_grid.py') 
  861   
 862   
 864          """Test the optimisation of the m3 model-free model against the tm0 parameter grid.""" 
 865   
 866           
 867          cdp._model = 'm3' 
 868          cdp._value_test = self.value_test 
 869   
 870           
 871          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm0_grid.py') 
  872   
 873   
 875          """Test the optimisation of the m4 model-free model against the tm0 parameter grid.""" 
 876   
 877           
 878          cdp._model = 'm4' 
 879          cdp._value_test = self.value_test 
 880   
 881           
 882          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm0_grid.py') 
  883   
 884   
 886          """Test the optimisation of the m1 model-free model against the tm1 parameter grid.""" 
 887   
 888           
 889          cdp._model = 'm1' 
 890          cdp._value_test = self.value_test 
 891   
 892           
 893          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm1_grid.py') 
  894   
 895   
 897          """Test the optimisation of the m2 model-free model against the tm2 parameter grid.""" 
 898   
 899           
 900          cdp._model = 'm2' 
 901          cdp._value_test = self.value_test 
 902   
 903           
 904          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm2_grid.py') 
  905   
 906   
 908          """Test the optimisation of the m4 model-free model against the tm2 parameter grid.""" 
 909   
 910           
 911          cdp._model = 'm4' 
 912          cdp._value_test = self.value_test 
 913   
 914           
 915          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm2_grid.py') 
  916   
 917   
 919          """Test the optimisation of the m3 model-free model against the tm3 parameter grid.""" 
 920   
 921           
 922          cdp._model = 'm3' 
 923          cdp._value_test = self.value_test 
 924   
 925           
 926          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm3_grid.py') 
  927   
 928   
 930          """Test the optimisation of the m4 model-free model against the tm4 parameter grid.""" 
 931   
 932           
 933          cdp._model = 'm4' 
 934          cdp._value_test = self.value_test 
 935   
 936           
 937          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm4_grid.py') 
  938   
 939   
 941          """Test the optimisation of the m5 model-free model against the tm5 parameter grid.""" 
 942   
 943           
 944          cdp._model = 'm5' 
 945          cdp._value_test = self.value_test 
 946   
 947           
 948          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm5_grid.py') 
  949   
 950   
 952          """Test the optimisation of the m6 model-free model against the tm6 parameter grid.""" 
 953   
 954           
 955          cdp._model = 'm6' 
 956          cdp._value_test = self.value_test 
 957   
 958           
 959          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm6_grid.py') 
  960   
 961   
 963          """Test the optimisation of the m7 model-free model against the tm7 parameter grid.""" 
 964   
 965           
 966          cdp._model = 'm7' 
 967          cdp._value_test = self.value_test 
 968   
 969           
 970          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm7_grid.py') 
  971   
 972   
 974          """Test the optimisation of the m8 model-free model against the tm8 parameter grid.""" 
 975   
 976           
 977          cdp._model = 'm8' 
 978          cdp._value_test = self.value_test 
 979   
 980           
 981          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm8_grid.py') 
  982   
 983   
 985          """Test the optimisation of the m9 model-free model against the tm9 parameter grid.""" 
 986   
 987           
 988          cdp._model = 'm9' 
 989          cdp._value_test = self.value_test 
 990   
 991           
 992          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm9_grid.py') 
  993   
 994   
 996          """Try a very minimal model-free analysis on the OMP relaxation data.""" 
 997   
 998           
 999          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'omp_model_free.py') 
1000   
1001           
1002          dp = pipes.get_pipe('final') 
1003   
1004           
1005          self.assertEqual(dp.mol[0].res[0].spin[0].select_sim, [True, False, True]) 
1006          self.assertEqual(dp.mol[0].res[1].spin[0].select_sim, [True, True, False]) 
1007          self.assertEqual(dp.mol[0].res[2].spin[0].select_sim, [True, True, True]) 
1008          self.assert_(not hasattr(dp.mol[0].res[3].spin[0], 'select_sim')) 
 1009   
1010   
1012          """Mapping the {S2, te, Rex} chi2 space through the OpenDX user function dx.map().""" 
1013   
1014           
1015          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opendx_s2_te_rex.py') 
 1016   
1017   
1019          """Mapping the {theta, phi, Da} chi2 space through the OpenDX user function dx.map().""" 
1020   
1021           
1022          path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'model_free'+sep+'S2_0.970_te_2048_Rex_0.149' 
1023   
1024           
1025          self.interpreter.structure.read_pdb(file='pdb', dir=path, read_model=1) 
1026   
1027           
1028          self.interpreter.structure.load_spins('@N') 
1029   
1030           
1031          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) 
1032          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) 
1033          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) 
1034          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) 
1035          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) 
1036          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) 
1037   
1038           
1039          self.interpreter.diffusion_tensor.init((1.601 * 1e7, 1.34, 72.4, 90-77.9), param_types=4) 
1040   
1041           
1042          self.interpreter.structure.load_spins('@H') 
1043          self.interpreter.dipole_pair.define(spin_id1='@N', spin_id2='@H', direct_bond=True) 
1044          self.interpreter.dipole_pair.set_dist(spin_id1='@N', spin_id2='@H', ave_dist=1.02 * 1e-10) 
1045          self.interpreter.dipole_pair.unit_vectors() 
1046   
1047           
1048          self.interpreter.value.set(N15_CSA, 'csa') 
1049          self.interpreter.value.set([0.8, 50 * 1e-12, 0.0], ['s2', 'te', 'rex']) 
1050   
1051           
1052          self.interpreter.spin.isotope('15N', spin_id='@N') 
1053          self.interpreter.spin.isotope('1H', spin_id='@H') 
1054   
1055           
1056          self.interpreter.model_free.select_model(model='m4') 
1057   
1058           
1059          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') 
 1060   
1061   
1063          """Mapping the {local_tm, S2, te} chi2 space through the OpenDX user function dx.map().""" 
1064   
1065           
1066          path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'model_free'+sep+'S2_0.970_te_2048_Rex_0.149' 
1067   
1068           
1069          self.interpreter.sequence.read(file='noe.500.out', dir=path, res_num_col=1, res_name_col=2) 
1070   
1071           
1072          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) 
1073          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) 
1074          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) 
1075          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) 
1076          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) 
1077          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) 
1078   
1079           
1080          self.interpreter.spin.name('N') 
1081          self.interpreter.spin.element('N') 
1082   
1083           
1084          self.interpreter.sequence.attach_protons() 
1085   
1086           
1087          self.interpreter.dipole_pair.define(spin_id1='@N', spin_id2='@H', direct_bond=True) 
1088          self.interpreter.dipole_pair.set_dist(spin_id1='@N', spin_id2='@H', ave_dist=1.02 * 1e-10) 
1089   
1090           
1091          self.interpreter.value.set(N15_CSA, 'csa') 
1092   
1093           
1094          self.interpreter.spin.isotope('15N', spin_id='@N') 
1095          self.interpreter.spin.isotope('1H', spin_id='@H') 
1096   
1097           
1098          self.interpreter.model_free.select_model(model='tm2') 
1099   
1100           
1101          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') 
 1102   
1103   
1105          """Constrained BFGS opt, backtracking line search {S2=0.970, te=2048, Rex=0.149} 
1106   
1107          The optimisation options are: 
1108              - BFGS optimisation. 
1109              - Backtracking line search. 
1110              - Constrained. 
1111   
1112          The true data set is: 
1113              - S2  = 0.970 
1114              - te  = 2048 ps 
1115              - Rex = 0.149 s^-1 
1116   
1117          Relevant links for this test are: 
1118              - U{http://www.nmr-relax.com/mail.gna.org/public/relax-devel/2009-05/msg00003.html} 
1119              - U{http://www.nmr-relax.com/mail.gna.org/public/relax-users/2011-01/msg00029.html} 
1120              - U{https://web.archive.org/web/https://gna.org/bugs/?12573} 
1121              - U{http://www.nmr-relax.com/mail.gna.org/public/relax-users/2008-10/msg00089.html} 
1122              - U{https://web.archive.org/web/https://gna.org/bugs/?14173} 
1123          """ 
1124   
1125           
1126          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') 
1127   
1128           
1129          self.interpreter.value.set([1.0, 0.0, 0.0], ['s2', 'te', 'rex']) 
1130   
1131           
1132          self.interpreter.minimise('bfgs', 'back') 
1133   
1134           
1135          spin = cdp.mol[0].res[1].spin[0] 
1136   
1137           
1138           
1139   
1140           
1141           
1142           
1143           
1144   
1145           
1146           
1147           
1148           
1149           
1150           
1151           
1152           
1153           
1154           
1155           
1156           
1157           
1158           
1159           
1160           
1161           
1162           
1163           
1164           
1165           
1166   
1167           
1168           
1169           
1170           
1171           
1172           
1173           
1174           
1175           
1176           
1177           
1178           
1179           
1180           
1181           
1182           
1183           
1184           
1185           
1186           
1187           
1188           
1189   
1190           
1191           
1192           
1193           
1194           
1195           
1196           
1197           
1198           
1199           
1200           
1201           
1202           
1203           
1204           
1205           
1206           
1207           
1208           
1209           
1210           
1211           
1212   
1213           
1214           
1215           
1216           
1217           
1218           
1219           
1220           
1221           
1222           
1223           
1224           
1225           
1226           
1227           
1228           
1229           
1230           
1231           
1232           
1233           
1234           
1235   
1236           
1237           
1238           
1239           
1240           
1241           
1242           
1243           
1244           
1245           
1246           
1247           
1248           
1249           
1250           
1251           
1252           
1253           
1254           
1255           
1256           
1257           
1258   
1259           
1260           
1261           
1262           
1263   
1264           
1265           
1266           
1267           
1268           
1269           
1270           
1271           
1272           
1273           
1274           
1275           
1276           
1277           
1278           
1279           
1280           
1281           
1282           
1283           
1284           
1285   
1286           
1287           
1288           
1289           
1290           
1291           
1292           
1293           
1294           
1295           
1296           
1297           
1298           
1299           
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          select = True 
1332          s2 = 0.9699999999999995 
1333          te = 2048.000000000022283 
1334          rex = 0.14900000000000566 / (2.0 * pi * cdp.frq[cdp.ri_ids[0]])**2 
1335          chi2 = 3.1024517431117421e-27 
1336          iter = [154, 156, 157, 158, 162, 175, 203] 
1337          f_count = [598, 695, 701, 722, 735, 744, 758, 955] 
1338          g_count = [161, 162, 163, 164, 165, 169, 182, 209] 
1339          h_count = 0 
1340          warning = None 
1341   
1342           
1343          self.assertEqual(cdp.mol[0].res[0].spin[0].select, False) 
1344          self.value_test(spin, select=select, s2=s2, te=te, rex=rex, chi2=chi2) 
 1345   
1346   
1348          """Constrained BFGS opt, More and Thuente line search {S2=0.970, te=2048, Rex=0.149} 
1349   
1350          The optimisation options are: 
1351              - BFGS optimisation. 
1352              - More and Thuente line search. 
1353              - Constrained. 
1354   
1355          The true data set is: 
1356              - S2  = 0.970 
1357              - te  = 2048 ps 
1358              - Rex = 0.149 s^-1 
1359   
1360          Relevant links for this test are: 
1361              - U{http://www.nmr-relax.com/mail.gna.org/public/relax-devel/2009-05/msg00003.html} 
1362              - U{http://www.nmr-relax.com/mail.gna.org/public/relax-users/2011-01/msg00029.html} 
1363              - U{https://web.archive.org/web/https://gna.org/bugs/?12573} 
1364              - U{http://www.nmr-relax.com/mail.gna.org/public/relax-users/2008-10/msg00089.html} 
1365              - U{https://web.archive.org/web/https://gna.org/bugs/?14174} 
1366          """ 
1367   
1368           
1369          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') 
1370   
1371           
1372          self.interpreter.value.set([1.0, 0.0, 0.0], ['s2', 'te', 'rex']) 
1373   
1374           
1375          self.interpreter.minimise('bfgs', 'mt') 
1376   
1377           
1378          spin = cdp.mol[0].res[1].spin[0] 
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           
1496           
1497           
1498           
1499   
1500           
1501           
1502           
1503           
1504           
1505           
1506           
1507           
1508           
1509           
1510           
1511           
1512           
1513           
1514           
1515           
1516           
1517           
1518           
1519           
1520           
1521   
1522           
1523          select = True 
1524          s2 = 0.9700000000000580 
1525          te = 2048.000000011044449 
1526          rex = 0.148999999998904 / (2.0 * pi * cdp.frq[cdp.ri_ids[0]])**2 
1527          chi2 = 4.3978813282102374e-23 
1528          iter = 120 
1529          f_count = [377, 381, 384, 386, 388] 
1530          g_count = [377, 381, 384, 386, 388] 
1531          h_count = 0 
1532          warning = None 
1533   
1534           
1535          self.assertEqual(cdp.mol[0].res[0].spin[0].select, False) 
1536          self.value_test(spin, select=select, s2=s2, te=te, rex=rex, chi2=chi2) 
 1537   
1538   
1540          """Constrained coordinate descent opt, backtracking line search {S2=0.970, te=2048, Rex=0.149} 
1541   
1542          The optimisation options are: 
1543              - Coordinate descent optimisation. 
1544              - Backtracking line search. 
1545              - Constrained. 
1546   
1547          The true data set is: 
1548              - S2  = 0.970 
1549              - te  = 2048 ps 
1550              - Rex = 0.149 s^-1 
1551          """ 
1552   
1553           
1554          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') 
1555   
1556           
1557          self.interpreter.value.set([1.0, 0.0, 0.0], ['s2', 'te', 'rex']) 
1558   
1559           
1560          self.interpreter.minimise('cd', 'back', max_iter=50) 
1561   
1562           
1563          spin = cdp.mol[0].res[1].spin[0] 
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          select = True 
1593          s2 = 0.9097900390625 
1594          te = 25.00000000000000 
1595          rex = 1.24017333984375 / (2.0 * pi * cdp.frq[cdp.ri_ids[0]])**2 
1596          chi2 = 53.476155463267176 
1597          iter = 50 
1598          f_count = 131 
1599          g_count = 51 
1600          h_count = 0 
1601          warning = 'Maximum number of iterations reached' 
1602   
1603           
1604          self.assertEqual(cdp.mol[0].res[0].spin[0].select, False) 
1605          self.value_test(spin, select=select, s2=s2, te=te, rex=rex, chi2=chi2) 
 1606   
1607   
1609          """Constrained coordinate descent opt, More and Thuente line search {S2=0.970, te=2048, Rex=0.149} 
1610   
1611          The optimisation options are: 
1612              - Coordinate descent optimisation. 
1613              - More and Thuente line search. 
1614              - Constrained. 
1615   
1616          The true data set is: 
1617              - S2  = 0.970 
1618              - te  = 2048 ps 
1619              - Rex = 0.149 s^-1 
1620   
1621          Relevant links for this test are: 
1622              - U{https://web.archive.org/web/https://gna.org/bugs/?12573} 
1623              - U{http://www.nmr-relax.com/mail.gna.org/public/relax-users/2008-10/msg00089.html} 
1624              - U{https://web.archive.org/web/https://gna.org/bugs/?14175} 
1625          """ 
1626   
1627           
1628          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') 
1629   
1630           
1631          self.interpreter.value.set([1.0, 0.0, 0.0], ['s2', 'te', 'rex']) 
1632   
1633           
1634          self.interpreter.minimise('cd', 'mt') 
1635   
1636           
1637          spin = cdp.mol[0].res[1].spin[0] 
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           
1688           
1689           
1690           
1691   
1692           
1693           
1694           
1695           
1696           
1697           
1698           
1699           
1700           
1701           
1702           
1703           
1704           
1705           
1706           
1707           
1708           
1709           
1710           
1711           
1712           
1713           
1714   
1715           
1716           
1717           
1718           
1719           
1720           
1721           
1722           
1723           
1724           
1725           
1726           
1727           
1728           
1729           
1730           
1731           
1732           
1733           
1734           
1735           
1736   
1737           
1738          select = True 
1739          s2 = 0.9700000000219674 
1740          te = 2048.000001534187049 
1741          rex = 0.14899999946977982 / (2.0 * pi * cdp.frq[cdp.ri_ids[0]])**2 
1742          chi2 = 2.3477234248531005e-18 
1743          iter = [198, 200] 
1744          f_count = [738, 757, 874] 
1745          g_count = [738, 757, 874] 
1746          h_count = 0 
1747          warning = None 
1748   
1749           
1750          self.assertEqual(cdp.mol[0].res[0].spin[0].select, False) 
1751          self.value_test(spin, select=select, s2=s2, te=te, rex=rex, chi2=chi2) 
 1752   
1753   
1755          """Constrained Newton opt, GMW Hessian mod, backtracking line search {S2=0.970, te=2048, Rex=0.149} 
1756   
1757          The optimisation options are: 
1758              - Newton optimisation. 
1759              - GMW Hessian modification. 
1760              - Backtracking line search. 
1761              - Constrained. 
1762   
1763          The true data set is: 
1764              - S2  = 0.970 
1765              - te  = 2048 ps 
1766              - Rex = 0.149 s^-1 
1767   
1768          Relevant links for this test are: 
1769              - U{https://web.archive.org/web/https://gna.org/bugs/?12573} 
1770              - U{http://www.nmr-relax.com/mail.gna.org/public/relax-users/2008-10/msg00089.html} 
1771              - U{https://web.archive.org/web/https://gna.org/bugs/?14177} 
1772          """ 
1773   
1774           
1775          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') 
1776   
1777           
1778          self.interpreter.value.set([1.0, 0.0, 0.0], ['s2', 'te', 'rex']) 
1779   
1780           
1781          self.interpreter.minimise('newton', 'gmw', 'back') 
1782   
1783           
1784          spin = cdp.mol[0].res[1].spin[0] 
1785   
1786           
1787           
1788   
1789           
1790           
1791           
1792   
1793           
1794           
1795           
1796           
1797           
1798           
1799           
1800           
1801           
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          select = True 
1886          s2 = 0.9699999999999994 
1887          te = 2048.000000000045020 
1888          rex = 0.14900000000001817 / (2.0 * pi * cdp.frq[cdp.ri_ids[0]])**2 
1889          chi2 = 7.3040158179665562e-28 
1890          iter = 18 
1891          f_count = [55, 57, 94] 
1892          g_count = [23] 
1893          h_count = 18 
1894          warning = None 
1895   
1896           
1897          self.assertEqual(cdp.mol[0].res[0].spin[0].select, False) 
1898          self.value_test(spin, select=select, s2=s2, te=te, rex=rex, chi2=chi2) 
 1899   
1900   
1902          """Constrained Newton opt, GMW Hessian mod, More and Thuente line search {S2=0.970, te=2048, Rex=0.149} 
1903   
1904          The optimisation options are: 
1905              - Newton optimisation. 
1906              - GMW Hessian modification. 
1907              - More and Thuente line search. 
1908              - Constrained. 
1909   
1910          The true data set is: 
1911              - S2  = 0.970 
1912              - te  = 2048 ps 
1913              - Rex = 0.149 s^-1 
1914   
1915          Relevant links for this test are: 
1916              - U{https://web.archive.org/web/https://gna.org/bugs/?12573} 
1917              - U{http://www.nmr-relax.com/mail.gna.org/public/relax-users/2008-10/msg00089.html} 
1918              - U{https://web.archive.org/web/https://gna.org/bugs/?14176} 
1919          """ 
1920   
1921           
1922          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') 
1923   
1924           
1925          self.interpreter.value.set([1.0, 0.0, 0.0], ['s2', 'te', 'rex']) 
1926   
1927           
1928          self.interpreter.minimise('newton', 'gmw', 'mt') 
1929   
1930           
1931          self.monte_carlo() 
1932   
1933           
1934          spin = cdp.mol[0].res[1].spin[0] 
1935   
1936           
1937           
1938   
1939           
1940           
1941           
1942   
1943           
1944           
1945           
1946           
1947           
1948           
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           
2050           
2051           
2052           
2053           
2054           
2055           
2056           
2057           
2058           
2059           
2060           
2061           
2062           
2063   
2064           
2065          select = True 
2066          s2 = 0.9699999999999993 
2067          te = 2048.000000000041837 
2068          rex = 0.14900000000002225 / (2.0 * pi * cdp.frq[cdp.ri_ids[0]])**2 
2069          chi2 = 6.8756889983348349e-28 
2070          iter = 22 
2071          f_count = [91, 95, 153, 159, 160, 165] 
2072          g_count = [91, 95, 153, 159, 160, 165] 
2073          h_count = 22 
2074          warning = None 
2075   
2076           
2077          self.assertEqual(cdp.mol[0].res[0].spin[0].select, False) 
2078          self.value_test(spin, select=select, s2=s2, te=te, rex=rex, chi2=chi2) 
 2079   
2080   
2082          """Constrained steepest descent opt, backtracking line search {S2=0.970, te=2048, Rex=0.149} 
2083   
2084          The optimisation options are: 
2085              - Steepest descent optimisation. 
2086              - Backtracking line search. 
2087              - Constrained. 
2088   
2089          The true data set is: 
2090              - S2  = 0.970 
2091              - te  = 2048 ps 
2092              - Rex = 0.149 s^-1 
2093          """ 
2094   
2095           
2096          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') 
2097   
2098           
2099          self.interpreter.value.set([1.0, 0.0, 0.0], ['s2', 'te', 'rex']) 
2100   
2101           
2102          self.interpreter.minimise('sd', 'back', max_iter=50) 
2103   
2104           
2105          spin = cdp.mol[0].res[1].spin[0] 
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          select = True 
2135          s2 = 0.91579220834688024 
2136          te = 0.30568658722531733 
2137          rex = 0.34008409798366124 / (2.0 * pi * cdp.frq[cdp.ri_ids[0]])**2 
2138          chi2 = 68.321956795264342 
2139          iter = 50 
2140          f_count = 134 
2141          g_count = 51 
2142          h_count = 0 
2143          warning = 'Maximum number of iterations reached' 
2144   
2145           
2146          self.assertEqual(cdp.mol[0].res[0].spin[0].select, False) 
2147          self.value_test(spin, select=select, s2=s2, te=te, rex=rex, chi2=chi2) 
 2148   
2149   
2151          """Constrained steepest descent opt, More and Thuente line search {S2=0.970, te=2048, Rex=0.149} 
2152   
2153          The optimisation options are: 
2154              - Steepest descent optimisation. 
2155              - More and Thuente line search. 
2156              - Constrained. 
2157   
2158          The true data set is: 
2159              - S2  = 0.970 
2160              - te  = 2048 ps 
2161              - Rex = 0.149 s^-1 
2162          """ 
2163   
2164           
2165          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') 
2166   
2167           
2168          self.interpreter.value.set([1.0, 0.0, 0.0], ['s2', 'te', 'rex']) 
2169   
2170           
2171          self.interpreter.minimise('sd', 'mt', max_iter=50) 
2172   
2173           
2174          spin = cdp.mol[0].res[1].spin[0] 
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          select = True 
2204          s2 = 0.91619994957822126 
2205          te = 0.12319687570987945 
2206          rex = 0.16249110942961512 / (2.0 * pi * cdp.frq[cdp.ri_ids[0]])**2 
2207          chi2 = 73.843613546506191 
2208          iter = 50 
2209          f_count = 108 
2210          g_count = 108 
2211          h_count = 0 
2212          warning = 'Maximum number of iterations reached' 
2213   
2214           
2215          self.assertEqual(cdp.mol[0].res[0].spin[0].select, False) 
2216          self.value_test(spin, select=select, s2=s2, te=te, rex=rex, chi2=chi2) 
 2217   
2218   
2220          """Constrained grid search {S2=0.970, te=2048, Rex=0.149}. 
2221   
2222          The optimisation options are: 
2223              - Constrained grid search. 
2224   
2225          The true data set is: 
2226              - S2  = 0.970 
2227              - te  = 2048 ps 
2228              - Rex = 0.149 s^-1 
2229          """ 
2230   
2231           
2232          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') 
2233   
2234           
2235          self.interpreter.grid_search(inc=11) 
2236   
2237           
2238          spin = cdp.mol[0].res[1].spin[0] 
2239   
2240           
2241           
2242   
2243           
2244           
2245           
2246           
2247           
2248           
2249           
2250           
2251           
2252           
2253           
2254           
2255           
2256           
2257           
2258           
2259           
2260           
2261           
2262           
2263           
2264           
2265   
2266           
2267          select = True 
2268          s2 = 1.0 
2269          te = 0.0 
2270          rex = 0.0 
2271          chi2 = 3.9844117908982288 
2272          iter = 1331 
2273          f_count = 1331 
2274          g_count = 0 
2275          h_count = 0 
2276          warning = None 
2277   
2278           
2279          self.assertEqual(cdp.mol[0].res[0].spin[0].select, False) 
2280          self.value_test(spin, select=select, s2=s2, te=te, rex=rex, chi2=chi2) 
 2281   
2282   
2284          """Reading of relaxation data using the user function relax_data.read().""" 
2285   
2286           
2287          path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'model_free'+sep+'S2_0.970_te_2048_Rex_0.149' 
2288   
2289           
2290          self.interpreter.sequence.read(file='noe.500.out', dir=path, res_num_col=1, res_name_col=2) 
2291   
2292           
2293          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) 
2294   
2295           
2296          self.assertEqual(cdp.mol[0].res[1].spin[0].ri_data['R1_600'], 1.3874977659397683) 
2297          self.assertEqual(cdp.mol[0].res[1].spin[0].ri_data_err['R1_600'], 0.027749955318795365) 
 2298   
2299   
2301          """Read a relax 1.2 model-free results file using the user function results.read().""" 
2302   
2303           
2304          self.interpreter.results.read(file='results_1.2', dir=status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'model_free') 
2305   
2306           
2307          print(cdp) 
2308   
2309           
2310          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] 
2311          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] 
2312          model = ['m6', 'm8', 'm6', 'm6', 'm5', 'm5', 'm6', 'm5', 'm5', 'm5', 'm5', 'm5', 'm5', 'm5', 'm5', 'm5', 'm5', 'm5', 'm5', 'm5', 'm5', 'm8'] 
2313          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']] 
2314          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] 
2315          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] 
2316          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] 
2317          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] 
2318          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] 
2319          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] 
2320   
2321           
2322          ri_ids = ['R1_500', 'R2_500', 'NOE_500', 'R1_600', 'R2_600', 'NOE_600', 'R1_750', 'R2_750', 'NOE_750'] 
2323          types_list = ['R1', 'R2', 'NOE', 'R1', 'R2', 'NOE', 'R1', 'R2', 'NOE'] 
2324          frqs_list = [500000000.0] * 3 + [600000000.0] * 3 + [750000000.0] * 3 
2325          ri_type = {} 
2326          frqs = {} 
2327          for i in range(len(ri_ids)): 
2328              ri_type[ri_ids[i]] = types_list[i] 
2329              frqs[ri_ids[i]] = frqs_list[i] 
2330   
2331          ri_data = {} 
2332          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] 
2333          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] 
2334          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] 
2335          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] 
2336          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] 
2337          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] 
2338          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] 
2339          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] 
2340          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] 
2341   
2342          ri_data_err = {} 
2343          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] 
2344          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] 
2345          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] 
2346          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] 
2347          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] 
2348          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] 
2349          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] 
2350          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] 
2351          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] 
2352   
2353           
2354          self.assertEqual(cdp.pipe_type, 'mf') 
2355          self.assertEqual(cdp.hybrid_pipes, []) 
2356   
2357           
2358          self.assertEqual(cdp.diff_tensor.type, 'sphere') 
2359          self.assertEqual(cdp.diff_tensor.tm, 6.2029050826362826e-09) 
2360   
2361           
2362          self.assertEqual(cdp.chi2, 88.0888600975) 
2363          self.assertEqual(cdp.iter, 1) 
2364          self.assertEqual(cdp.f_count, 20) 
2365          self.assertEqual(cdp.g_count, 2) 
2366          self.assertEqual(cdp.h_count, 1) 
2367          self.assertEqual(cdp.warning, None) 
2368   
2369           
2370          self.assertEqual(cdp.ri_ids, ri_ids) 
2371          for ri_id in ri_ids: 
2372              self.assertEqual(cdp.ri_type[ri_id], ri_type[ri_id]) 
2373              self.assertEqual(cdp.frq[ri_id], frqs[ri_id]) 
2374   
2375           
2376          j = 0 
2377          for i in range(len(cdp.mol[0].res)): 
2378               
2379              res = cdp.mol[0].res[i] 
2380              spin = cdp.mol[0].res[i].spin[0] 
2381              h_spin = None 
2382              if len(cdp.mol[0].res[i].spin) > 1: 
2383                  h_spin = cdp.mol[0].res[i].spin[1] 
2384   
2385               
2386              print(res) 
2387              print(spin) 
2388   
2389               
2390              self.assertEqual(res.num, num[i]) 
2391              self.assertEqual(res.name, 'XXX') 
2392              self.assertEqual(spin.num, None) 
2393              if select[i]: 
2394                  self.assertEqual(spin.name, 'N') 
2395                  self.assertEqual(spin.fixed, False) 
2396              else: 
2397                  self.assertEqual(spin.name, None) 
2398              self.assertEqual(spin.select, select[i]) 
2399              if h_spin: 
2400                  self.assertEqual(h_spin.num, None) 
2401                  self.assertEqual(h_spin.name, 'H') 
2402                  self.assertEqual(h_spin.select, False) 
2403   
2404               
2405              if not select[i]: 
2406                  continue 
2407   
2408               
2409              self.assertEqual(spin.isotope, '15N') 
2410              self.assertEqual(h_spin.isotope, '1H') 
2411   
2412               
2413              self.assertEqual(spin.model, model[j]) 
2414              self.assertEqual(spin.equation, 'mf_ext') 
2415              self.assertEqual(spin.params, params[j]) 
2416              self.assertEqual(spin.s2, s2[j]) 
2417              self.assertEqual(spin.s2f, s2f[j]) 
2418              self.assertEqual(spin.s2s, s2s[j]) 
2419              self.assertEqual(spin.local_tm, None) 
2420              self.assertEqual(spin.te, None) 
2421              if tf[j] != None: 
2422                  tf[j] = tf[j]*1e-12 
2423              self.assertEqual(spin.tf, tf[j]) 
2424              self.assertEqual(spin.ts, ts[j]*1e-12) 
2425              if rex[j] != None: 
2426                  rex[j] = rex[j]/(2.0*pi*500000000.0)**2 
2427              self.assertEqual(spin.rex, rex[j]) 
2428              self.assertEqual(spin.csa, -0.00016999999999999999) 
2429   
2430               
2431              self.assertEqual(spin.chi2, None) 
2432              self.assertEqual(spin.iter, None) 
2433              self.assertEqual(spin.f_count, None) 
2434              self.assertEqual(spin.g_count, None) 
2435              self.assertEqual(spin.h_count, None) 
2436              self.assertEqual(spin.warning, None) 
2437   
2438               
2439              for ri_id in cdp.ri_ids: 
2440                  print(ri_id) 
2441                  self.assertEqual(spin.ri_data[ri_id], ri_data[ri_id][j]) 
2442                  self.assertEqual(spin.ri_data_err[ri_id], ri_data_err[ri_id][j]) 
2443   
2444               
2445              j = j + 1 
2446   
2447           
2448          for i in range(len(cdp.interatomic)): 
2449              self.assertEqual(cdp.interatomic[i].r, 1.0200000000000001e-10) 
 2450   
2451   
2453          """Read the truncated relax 1.2 model-free results file for PSE-4.""" 
2454   
2455           
2456          self.interpreter.results.read(file='pse4_trunc', dir=status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'model_free') 
2457   
2458           
2459          print(cdp) 
2460   
2461           
2462          num = [24, 27] 
2463          name = ['ser', 'gln'] 
2464          eqi = [None, 'mf_ext'] 
2465          select = [False, True] 
2466          model = [None, 'm5'] 
2467          params = [[], ['s2f', 's2', 'ts']] 
2468          s2 = [None, 0.86578779694713515] 
2469          s2f = [None, 0.88618694421409949] 
2470          s2s = [None, 0.97698098871784322] 
2471          s2s_sim = [[None, None, None], 
2472                  [0.95852080081635382, 0.97574415413309512, 0.97293450506144197]] 
2473          tf = [None, None] 
2474          ts = [None, 598.8142249659868e-12] 
2475          rex = [None, None] 
2476          csa = [None, -0.00017199999999999998] 
2477          ri_ids = ['R1_800', 'NOE_800', 'R1_600', 'R2_600', 'NOE_600', 'R1_500', 'R2_500', 'NOE_500'] 
2478          ri_type_list = ['R1', 'NOE', 'R1', 'R2', 'NOE', 'R1', 'R2', 'NOE'] 
2479          frq_list = [799744000.0]*2 + [599737000.0]*3 + [499719000.0]*3 
2480          ri_data_list = [[], 
2481                  [0.6835, 0.81850000000000001, 0.98409999999999997, 16.5107, 0.79796699999999998, 1.3174999999999999, 15.381500000000001, 0.73046900000000003]] 
2482          ri_data_err_list = [[], 
2483                  [0.026957200000000001, 0.025881000000000001, 0.0243073, 0.497137, 0.028663000000000001, 0.038550000000000001, 0.40883999999999998, 0.022016299999999999]] 
2484          ri_type = {} 
2485          frq = {} 
2486          ri_data = [{}, {}] 
2487          ri_data_err = [{}, {}] 
2488          for i in range(len(ri_ids)): 
2489              ri_type[ri_ids[i]] = ri_type_list[i] 
2490              frq[ri_ids[i]] = frq_list[i] 
2491              ri_data[1][ri_ids[i]] = ri_data_list[1][i] 
2492              ri_data_err[1][ri_ids[i]] = ri_data_err_list[1][i] 
2493   
2494           
2495          r = [None, 1.0200000000000001e-10] 
2496   
2497           
2498          self.assertEqual(cdp.pipe_type, 'mf') 
2499          self.assertEqual(cdp.hybrid_pipes, []) 
2500   
2501           
2502          self.assertEqual(cdp.diff_tensor.type, 'ellipsoid') 
2503          self.assertEqual(cdp.diff_tensor.tm, 1.2682770910095516e-08) 
2504          self.assertEqual(cdp.diff_tensor.tm_err, 2.4053909822304126e-11) 
2505          self.assertEqual(cdp.diff_tensor.tm_sim[0], 1.2666656725867738e-08) 
2506          self.assertEqual(cdp.diff_tensor.tm_sim[1], 1.2689812011679408e-08) 
2507          self.assertEqual(cdp.diff_tensor.tm_sim[2], 1.2698266641804573e-08) 
2508   
2509           
2510          self.assertEqual(cdp.chi2, 935.13348627485448) 
2511          self.assertEqual(cdp.chi2_sim[0], 898.0981500197106) 
2512          self.assertEqual(cdp.chi2_sim[1], 904.11113814725172) 
2513          self.assertEqual(cdp.chi2_sim[2], 902.03890817023728) 
2514          self.assertEqual(cdp.iter, 1) 
2515          self.assertEqual(cdp.iter_sim[0], 23) 
2516          self.assertEqual(cdp.iter_sim[1], 30) 
2517          self.assertEqual(cdp.iter_sim[2], 16) 
2518          self.assertEqual(cdp.f_count, 21) 
2519          self.assertEqual(cdp.f_count_sim[0], 61) 
2520          self.assertEqual(cdp.f_count_sim[1], 501) 
2521          self.assertEqual(cdp.f_count_sim[2], 59) 
2522          self.assertEqual(cdp.g_count, 2) 
2523          self.assertEqual(cdp.g_count_sim[0], 27) 
2524          self.assertEqual(cdp.g_count_sim[1], 34) 
2525          self.assertEqual(cdp.g_count_sim[2], 20) 
2526          self.assertEqual(cdp.h_count, 1) 
2527          self.assertEqual(cdp.h_count_sim[0], 23) 
2528          self.assertEqual(cdp.h_count_sim[1], 30) 
2529          self.assertEqual(cdp.h_count_sim[2], 16) 
2530          self.assertEqual(cdp.warning, None) 
2531          self.assertEqual(cdp.warning_sim[0], None) 
2532          self.assertEqual(cdp.warning_sim[1], None) 
2533          self.assertEqual(cdp.warning_sim[2], None) 
2534   
2535           
2536          self.assertEqual(cdp.ri_ids, ri_ids) 
2537          for ri_id in ri_ids: 
2538              self.assertEqual(cdp.ri_type[ri_id], ri_type[ri_id]) 
2539              self.assertEqual(cdp.frq[ri_id], frq[ri_id]) 
2540   
2541           
2542          for i in range(len(cdp.mol[0].res)): 
2543               
2544              res = cdp.mol[0].res[i] 
2545              spin = cdp.mol[0].res[i].spin[0] 
2546              h_spin = cdp.mol[0].res[i].spin[1] 
2547   
2548               
2549              print(res) 
2550              print(spin) 
2551   
2552               
2553              self.assertEqual(res.num, num[i]) 
2554              self.assertEqual(res.name, name[i]) 
2555              self.assertEqual(spin.num, None) 
2556              self.assertEqual(spin.name, 'N') 
2557              self.assertEqual(spin.select, select[i]) 
2558              self.assertEqual(spin.fixed, False) 
2559              self.assertEqual(h_spin.num, None) 
2560              self.assertEqual(h_spin.name, 'H') 
2561              self.assertEqual(h_spin.select, False) 
2562   
2563               
2564              self.assertEqual(spin.isotope, '15N') 
2565              self.assertEqual(h_spin.isotope, '1H') 
2566   
2567               
2568              self.assertEqual(spin.model, model[i]) 
2569              self.assertEqual(spin.equation, eqi[i]) 
2570              self.assertEqual(spin.params, params[i]) 
2571              self.assertEqual(spin.s2, s2[i]) 
2572              self.assertEqual(spin.s2f, s2f[i]) 
2573              self.assertEqual(spin.s2s, s2s[i]) 
2574              self.assertEqual(spin.local_tm, None) 
2575              self.assertEqual(spin.te, None) 
2576              self.assertEqual(spin.tf, tf[i]) 
2577              self.assertEqual(spin.ts, ts[i]) 
2578              self.assertEqual(spin.rex, rex[i]) 
2579              self.assertEqual(spin.csa, csa[i]) 
2580              for j in range(3): 
2581                  self.assertEqual(spin.s2s_sim[j], s2s_sim[i][j]) 
2582   
2583               
2584              self.assertEqual(spin.chi2, None) 
2585              self.assertEqual(spin.iter, None) 
2586              self.assertEqual(spin.f_count, None) 
2587              self.assertEqual(spin.g_count, None) 
2588              self.assertEqual(spin.h_count, None) 
2589              self.assertEqual(spin.warning, None) 
2590   
2591               
2592              if i == 0: 
2593                  self.assertEqual(spin.ri_data, {}) 
2594                  self.assertEqual(spin.ri_data_err, {}) 
2595              else: 
2596                  for ri_id in ri_ids: 
2597                      self.assertEqual(spin.ri_data[ri_id], ri_data[i][ri_id]) 
2598                      self.assertEqual(spin.ri_data_err[ri_id], ri_data_err[i][ri_id]) 
2599   
2600           
2601          for i in range(len(cdp.interatomic)): 
2602              self.assertEqual(cdp.interatomic[i].r, r[i]) 
 2603   
2604   
2606          """Read the truncated relax 1.2 model-free results file for TEM-1.""" 
2607   
2608           
2609          self.interpreter.results.read(file='tem1_trunc', dir=status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'model_free') 
2610   
2611           
2612          print(cdp) 
2613   
2614           
2615          num = [26, 27, 29, 30, 31, 32, 33, 34] 
2616          name = ['His', 'Pro', 'Thr', 'Leu', 'Val', 'Lys', 'Val', 'Lys'] 
2617          eqi = [None, None, None, 'mf_ext', 'mf_orig', 'mf_orig', None, 'mf_orig'] 
2618          select = [False, False, False, True, True, True, False, True] 
2619          model = [None, None, None, 'm5', 'm2', 'm1', None, 'm1'] 
2620          params = [None, None, None, ['s2f', 's2', 'ts'], ['s2', 'te'], ['s2'], None, ['s2']] 
2621          s2 = [None, None, None, 0.85674161305142216, 0.89462664243726608, 0.90201790111143165, None, 0.92099297347361675] 
2622          s2f = [None, None, None, 0.88220054271390302, None, None, None, None] 
2623          s2s = [None, None, None, 0.97114156200339452, None, None, None, None] 
2624          te = [None, None, None, None, 43.262426916926735*1e-12, None, None, None] 
2625          tf = [None, None, None, None, None, None, None, None] 
2626          ts = [None, None, None, 2385.912514843546*1e-12, None, None, None, None] 
2627          rex = [None, None, None, None, None, None, None, None] 
2628          csa = [None, None, None, -0.00017199999999999998, -0.00017199999999999998, -0.00017199999999999998, None, -0.00017199999999999998] 
2629          ri_ids = ['R1_800', 'R2_800', 'R1_600', 'R2_600', 'NOE_600', 'R1_500', 'R2_500', 'NOE_500'] 
2630          ri_type_list = ['R1', 'R2', 'R1', 'R2', 'NOE', 'R1', 'R2', 'NOE'] 
2631          frq_list = [799812000.0]*2 + [599739000.0]*3 + [499827000.0]*3 
2632          ri_data_list = [[], 
2633                          [], 
2634                          [], 
2635                          [0.75680000000000003, 18.797999999999998, 1.0747, 16.477, 0.86873100000000003, 1.2625999999999999, 15.3367, 0.77803197999999996], 
2636                          [0.75019999999999998, 19.201599999999999, 1.0617000000000001, 17.652899999999999, 0.73757200000000001, 1.3165, 15.949, 0.72442474000000001], 
2637                          [0.75860000000000005, 19.303799999999999, 1.0605, 16.593699999999998, 0.79137500000000005, 1.3425, 15.327199999999999, 0.83449132000000004], 
2638                          [], 
2639                          [0.71919999999999995, 20.165400000000002, 1.0729, 17.291899999999998, 0.80444599999999999, 1.2971999999999999, 15.9963, 0.73164684999999996]] 
2640          ri_data_err_list = [[], 
2641                              [], 
2642                              [], 
2643                              [0.028001600000000001, 0.21729999999999999, 0.031166300000000001, 0.44487900000000002, 0.043210699999999998, 0.054291800000000001, 0.69015199999999999, 0.038901600000000001], 
2644                              [0.028899999999999999, 0.25640000000000002, 0.030789299999999999, 0.476628, 0.036686799999999999, 0.0566095, 0.71770500000000004, 0.036221200000000002], 
2645                              [0.033399999999999999, 0.2233, 0.030754500000000001, 0.44802999999999998, 0.039363000000000002, 0.057727500000000001, 0.689724, 0.041724600000000001], 
2646                              [], 
2647                              [0.027699999999999999, 0.52810000000000001, 0.031399999999999997, 0.46688099999999999, 0.040013100000000003, 0.055779599999999999, 0.71983399999999997, 0.036582299999999998]] 
2648          ri_type = {} 
2649          frq = {} 
2650          ri_data = [] 
2651          ri_data_err = [] 
2652          for i in range(len(ri_data_list)): 
2653              ri_data.append({}) 
2654              ri_data_err.append({}) 
2655   
2656          for i in range(len(ri_ids)): 
2657              ri_type[ri_ids[i]] = ri_type_list[i] 
2658              frq[ri_ids[i]] = frq_list[i] 
2659              for j in range(len(ri_data_list)): 
2660                  if len(ri_data_list[j]): 
2661                      ri_data[j][ri_ids[i]] = ri_data_list[j][i] 
2662                      ri_data_err[j][ri_ids[i]] = ri_data_err_list[j][i] 
2663   
2664          chi2 = [None, None, None, 7.9383923597292441, 10.93852890925343, 3.1931459495488084, None, 8.3598891989018611] 
2665          iter = [None, None, None, 55, 10, 3, None, 3] 
2666          f_count = [None, None, None, 170, 148, 10, None, 10] 
2667          g_count = [None, None, None, 60, 14, 6, None, 6] 
2668          h_count = [None, None, None, 55, 10, 3, None, 3] 
2669   
2670           
2671          r = [None, None, None, 1.0200000000000001e-10, 1.0200000000000001e-10, 1.0200000000000001e-10, None, 1.0200000000000001e-10] 
2672   
2673           
2674          self.assertEqual(cdp.pipe_type, 'mf') 
2675          self.assertEqual(cdp.hybrid_pipes, []) 
2676   
2677           
2678          self.assertEqual(cdp.diff_tensor.type, 'ellipsoid') 
2679          self.assertEqual(cdp.diff_tensor.tm, 1.2526607261882971e-08) 
2680          self.assertEqual(cdp.diff_tensor.Da, 2784606.8835473624) 
2681          self.assertEqual(cdp.diff_tensor.Dr, 0.097243698709517518) 
2682          self.assertEqual(cdp.diff_tensor.alpha, 48.852555276419558 / 360.0 * 2.0 * pi) 
2683          self.assertEqual(cdp.diff_tensor.beta, 9.7876096346750447 / 360.0 * 2.0 * pi) 
2684          self.assertEqual(cdp.diff_tensor.gamma, 42.15815798778408 / 360.0 * 2.0 * pi) 
2685   
2686           
2687          self.assertEqual(cdp.ri_ids, ri_ids) 
2688          for ri_id in ri_ids: 
2689              self.assertEqual(cdp.ri_type[ri_id], ri_type[ri_id]) 
2690              self.assertEqual(cdp.frq[ri_id], frq[ri_id]) 
2691   
2692           
2693          for i in range(len(cdp.mol[0].res)): 
2694               
2695              res = cdp.mol[0].res[i] 
2696              spin = cdp.mol[0].res[i].spin[0] 
2697              h_spin = cdp.mol[0].res[i].spin[1] 
2698   
2699               
2700              print(res) 
2701              print(spin) 
2702   
2703               
2704              self.assertEqual(res.num, num[i]) 
2705              self.assertEqual(res.name, name[i]) 
2706              self.assertEqual(spin.num, None) 
2707              self.assertEqual(spin.name, 'N') 
2708              self.assertEqual(spin.select, select[i]) 
2709              self.assertEqual(spin.fixed, False) 
2710              self.assertEqual(h_spin.num, None) 
2711              self.assertEqual(h_spin.name, 'H') 
2712              self.assertEqual(h_spin.select, False) 
2713   
2714               
2715              self.assertEqual(spin.isotope, '15N') 
2716              self.assertEqual(h_spin.isotope, '1H') 
2717   
2718               
2719              self.assertEqual(spin.model, model[i]) 
2720              self.assertEqual(spin.equation, eqi[i]) 
2721              self.assertEqual(spin.params, params[i]) 
2722              self.assertEqual(spin.s2, s2[i]) 
2723              self.assertEqual(spin.s2f, s2f[i]) 
2724              self.assertEqual(spin.s2s, s2s[i]) 
2725              self.assertEqual(spin.local_tm, None) 
2726              self.assertEqual(spin.te, te[i]) 
2727              self.assertEqual(spin.tf, tf[i]) 
2728              self.assertEqual(spin.ts, ts[i]) 
2729              self.assertEqual(spin.rex, rex[i]) 
2730              self.assertEqual(spin.csa, csa[i]) 
2731   
2732               
2733              self.assertEqual(spin.chi2, chi2[i]) 
2734              self.assertEqual(spin.iter, iter[i]) 
2735              self.assertEqual(spin.f_count, f_count[i]) 
2736              self.assertEqual(spin.g_count, g_count[i]) 
2737              self.assertEqual(spin.h_count, h_count[i]) 
2738              self.assertEqual(spin.warning, None) 
2739   
2740               
2741              if not ri_data[i].keys(): 
2742                  self.assertEqual(spin.ri_data, {}) 
2743                  self.assertEqual(spin.ri_data_err, {}) 
2744              else: 
2745                  for ri_id in ri_ids: 
2746                      self.assertEqual(spin.ri_data[ri_id], ri_data[i][ri_id]) 
2747                      self.assertEqual(spin.ri_data_err[ri_id], ri_data_err[i][ri_id]) 
2748   
2749           
2750          for i in range(len(cdp.interatomic)): 
2751              self.assertEqual(cdp.interatomic[i].r, r[i]) 
 2752   
2753   
2766   
2767   
2780   
2781   
2794   
2795   
2797          """Read a 1.3 model-free results file (relax XML version 2) with corrupted floats. 
2798   
2799          The floats are deliberately mangled to test the IEEE-754 reading. 
2800          """ 
2801   
2802           
2803          path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'model_free'+sep+'OMP' 
2804   
2805           
2806          self.interpreter.pipe.create('1.3', 'mf') 
2807          self.interpreter.results.read(file='final_results_trunc_1.3_v2_broken', dir=path) 
2808   
2809           
2810          self.check_read_results_1_3() 
 2811   
2812   
2825   
2826   
2828          """Selecting model m4 with parameters {S2, te, Rex} using model_free.select_model().""" 
2829   
2830           
2831          path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'model_free'+sep+'S2_0.970_te_2048_Rex_0.149' 
2832   
2833           
2834          self.interpreter.sequence.read(file='noe.500.out', dir=path, res_num_col=1, res_name_col=2) 
2835   
2836           
2837          self.interpreter.model_free.select_model(model='m4') 
2838   
2839           
2840          self.assertEqual(cdp.mol[0].res[1].spin[0].model, 'm4') 
2841          self.assertEqual(cdp.mol[0].res[1].spin[0].params, ['s2', 'te', 'rex']) 
 2842   
2843   
2845          """Setting the CSA value through the user function value.set().""" 
2846   
2847           
2848          path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'model_free'+sep+'S2_0.970_te_2048_Rex_0.149' 
2849   
2850           
2851          self.interpreter.sequence.read(file='noe.500.out', dir=path, res_num_col=1, res_name_col=2) 
2852   
2853           
2854          self.interpreter.value.set(N15_CSA, 'csa') 
2855   
2856           
2857          self.assertEqual(cdp.mol[0].res[1].spin[0].csa, N15_CSA) 
 2858   
2859   
2861          """Test the optimisation of the tm0 model-free parameter grid.""" 
2862   
2863           
2864          cdp._model = 'tm0' 
2865          cdp._value_test = self.value_test 
2866   
2867           
2868          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm0_grid.py') 
 2869   
2870   
2872          """Test the optimisation of the tm1 model-free parameter grid.""" 
2873   
2874           
2875          cdp._model = 'tm1' 
2876          cdp._value_test = self.value_test 
2877   
2878           
2879          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm1_grid.py') 
 2880   
2881   
2883          """Test the optimisation of the tm2 model-free parameter grid.""" 
2884   
2885           
2886          cdp._model = 'tm2' 
2887          cdp._value_test = self.value_test 
2888   
2889           
2890          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm2_grid.py') 
 2891   
2892   
2894          """Test the optimisation of the tm3 model-free parameter grid.""" 
2895   
2896           
2897          cdp._model = 'tm3' 
2898          cdp._value_test = self.value_test 
2899   
2900           
2901          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm3_grid.py') 
 2902   
2903   
2905          """Test the optimisation of the tm4 model-free parameter grid.""" 
2906   
2907           
2908          cdp._model = 'tm4' 
2909          cdp._value_test = self.value_test 
2910   
2911           
2912          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm4_grid.py') 
 2913   
2914   
2916          """Test the optimisation of the tm5 model-free parameter grid.""" 
2917   
2918           
2919          cdp._model = 'tm5' 
2920          cdp._value_test = self.value_test 
2921   
2922           
2923          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm5_grid.py') 
 2924   
2925   
2927          """Test the optimisation of the tm6 model-free parameter grid.""" 
2928   
2929           
2930          cdp._model = 'tm6' 
2931          cdp._value_test = self.value_test 
2932   
2933           
2934          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm6_grid.py') 
 2935   
2936   
2938          """Test the optimisation of the tm7 model-free parameter grid.""" 
2939   
2940           
2941          cdp._model = 'tm7' 
2942          cdp._value_test = self.value_test 
2943   
2944           
2945          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm7_grid.py') 
 2946   
2947   
2949          """Test the optimisation of the tm8 model-free parameter grid.""" 
2950   
2951           
2952          cdp._model = 'tm8' 
2953          cdp._value_test = self.value_test 
2954   
2955           
2956          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm8_grid.py') 
 2957   
2958   
2960          """Test the optimisation of the tm9 model-free parameter grid.""" 
2961   
2962           
2963          cdp._model = 'tm9' 
2964          cdp._value_test = self.value_test 
2965   
2966           
2967          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'opt_tm9_grid.py') 
 2968   
2969   
2971          """Try a component of model-free analysis on Tyler Reddy's peptide data (truncated).""" 
2972   
2973           
2974          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'tylers_peptide.py') 
 2975   
2976   
2978          """Writing of model-free results using the user function results.write().""" 
2979   
2980           
2981          path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'model_free'+sep+'OMP' 
2982   
2983           
2984          self.interpreter.results.read(file='final_results_trunc_1.2', dir=path) 
2985   
2986           
2987          file = DummyFileObject() 
2988   
2989           
2990          self.interpreter.results.write(file=file, dir=path) 
2991   
2992           
2993          test_lines = file.readlines() 
2994          file.close() 
2995   
2996           
2997          if sys.version_info[0] >= 3 and sys.version_info[1] >= 2: 
2998              file = open_read_file(file_name='final_results_trunc_2.1_py3', dir=path) 
2999   
3000           
3001          elif sys.version_info[0] >= 3 and sys.version_info[1] == 1: 
3002              file = open_read_file(file_name='final_results_trunc_1.3_pre_py2.7.3_v2', dir=path) 
3003   
3004           
3005          elif dep_check.xml_type == 'internal' and sys.version_info[0] >= 2 and sys.version_info[1] >= 7 and sys.version_info[2] >= 3: 
3006              file = open_read_file(file_name='final_results_trunc_1.3_v2', dir=path) 
3007   
3008           
3009          else: 
3010              file = open_read_file(file_name='final_results_trunc_1.3_pre_py2.7.3_v2', dir=path) 
3011   
3012           
3013          true_lines = file.readlines() 
3014          file.close() 
3015   
3016           
3017          for i in range(len(test_lines)): 
3018               
3019               
3020              if i == 1 or i == 2: 
3021                  continue 
3022   
3023               
3024              test = test_lines[i] 
3025              true = true_lines[i] 
3026   
3027               
3028              try: 
3029                   
3030                  if search('<value>', test): 
3031                      test = test.lstrip() 
3032                      test = test.replace('<value>', '') 
3033                      test = test.replace('</value>', '') 
3034                  if search('<ieee_754_byte_array>', test): 
3035                      test = test.lstrip() 
3036                      test = test.replace('<ieee_754_byte_array>', '') 
3037                      test = test.replace('</ieee_754_byte_array>', '') 
3038   
3039                  test = eval(test) 
3040              except: 
3041                  pass 
3042   
3043               
3044              try: 
3045                   
3046                  if search('<value>', true): 
3047                      true = true.lstrip() 
3048                      true = true.replace('<value>', '') 
3049                      true = true.replace('</value>', '') 
3050                  if search('<ieee_754_byte_array>', true): 
3051                      true = true.lstrip() 
3052                      true = true.replace('<ieee_754_byte_array>', '') 
3053                      true = true.replace('</ieee_754_byte_array>', '') 
3054   
3055                  true = eval(true) 
3056              except: 
3057                  pass 
3058   
3059               
3060              self.assertEqual(test, true) 
 3061   
3062   
3063 -    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): 
 3064          """Test the optimisation values.""" 
3065   
3066           
3067          mesg = self.mesg_opt_debug(spin) 
3068   
3069           
3070          if iter != None and not isinstance(iter, list): 
3071              iter = [iter] 
3072          if f_count != None and not isinstance(f_count, list): 
3073              f_count = [f_count] 
3074          if g_count != None and not isinstance(g_count, list): 
3075              g_count = [g_count] 
3076          if h_count != None and not isinstance(h_count, list): 
3077              h_count = [h_count] 
3078   
3079           
3080           
3081   
3082           
3083          self.assertEqual(spin.select, select, msg=mesg) 
3084   
3085           
3086          if local_tm != None: 
3087              self.assertAlmostEqual(spin.local_tm / 1e-9, local_tm, msg=mesg) 
3088          else: 
3089              self.assertEqual(spin.local_tm, None, msg=mesg) 
3090   
3091           
3092          if s2 != None: 
3093              self.assertAlmostEqual(spin.s2, s2, msg=mesg) 
3094          else: 
3095              self.assertEqual(spin.s2, None, msg=mesg) 
3096   
3097           
3098          if s2f != None: 
3099              self.assertAlmostEqual(spin.s2f, s2f, 5, msg=mesg) 
3100          else: 
3101              self.assertEqual(spin.s2f, None, msg=mesg) 
3102   
3103           
3104          if s2s != None: 
3105              self.assertAlmostEqual(spin.s2s, s2s, 5, msg=mesg) 
3106          else: 
3107              self.assertEqual(spin.s2s, None, msg=mesg) 
3108   
3109           
3110          if isinstance(te, float): 
3111              self.assertAlmostEqual(spin.te / 1e-12, te, 5, msg=mesg) 
3112          elif te == None: 
3113              self.assertEqual(spin.te, None, msg=mesg) 
3114   
3115           
3116          if isinstance(tf, float): 
3117              self.assertAlmostEqual(spin.tf / 1e-12, tf, 4, msg=mesg) 
3118          elif tf == None: 
3119              self.assertEqual(spin.tf, None, msg=mesg) 
3120   
3121           
3122          if isinstance(ts, float): 
3123              self.assertAlmostEqual(spin.ts / 1e-12, ts, 4, msg=mesg) 
3124          elif ts == None: 
3125              self.assertEqual(spin.ts, None, msg=mesg) 
3126   
3127           
3128          if isinstance(rex, float): 
3129              self.assertAlmostEqual(spin.rex * (2.0 * pi * cdp.frq[cdp.ri_ids[0]])**2, rex * (2.0 * pi * cdp.frq[cdp.ri_ids[0]])**2, msg=mesg) 
3130          elif rex == None: 
3131              self.assertEqual(spin.rex, None, msg=mesg) 
3132   
3133           
3134          if chi2 != None: 
3135              self.assertAlmostEqual(spin.chi2, chi2, msg=mesg) 
3136          if iter != None: 
3137              self.assert_(spin.iter in iter, msg=mesg) 
3138          if f_count != None: 
3139              self.assert_(spin.f_count in f_count, msg=mesg) 
3140          if g_count != None: 
3141              self.assert_(spin.g_count in g_count, msg=mesg) 
3142          if h_count != None: 
3143              self.assert_(spin.h_count in h_count, msg=mesg) 
3144          if warning != None: 
3145              self.assertEqual(spin.warning, warning, msg=mesg) 
  3146