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 acos, pi 
 24  import platform 
 25  import numpy 
 26  from numpy import array, dot, float64, zeros 
 27  from numpy.linalg import norm 
 28  from re import search 
 29  from os import sep 
 30  import sys 
 31   
 32   
 33  from data import Relax_data_store; ds = Relax_data_store() 
 34  import dep_check 
 35  from maths_fns.coord_transform import spherical_to_cartesian 
 36  from maths_fns.rotation_matrix import euler_to_R_zyz 
 37  from physical_constants import N15_CSA, NH_BOND_LENGTH 
 38  from relax_io import DummyFileObject, open_read_file 
 39  from status import Status; status = Status() 
 40  from test_suite.system_tests.base_classes import SystemTestCase 
 41   
 42   
 43   
 44  SYSTEM = platform.system() 
 45  RELEASE = platform.release() 
 46  VERSION = platform.version() 
 47  WIN32_VER = platform.win32_ver() 
 48  DIST = platform.dist() 
 49  ARCH = platform.architecture() 
 50  MACH = platform.machine() 
 51  PROC = platform.processor() 
 52  PY_VER = platform.python_version() 
 53  NUMPY_VER = numpy.__version__ 
 54  LIBC_VER = platform.libc_ver() 
 55   
 56   
 57  if SYSTEM == 'Windows' or SYSTEM == 'Microsoft': 
 58       
 59      SYSTEM = 'Windows' 
 60   
 61   
 62   
 64      """TestCase class for the functional tests of the frame order theories.""" 
 65   
 66 -    def __init__(self, methodName='runTest'): 
  67          """Skip the tests if scipy is not installed. 
 68   
 69          @keyword methodName:    The name of the test. 
 70          @type methodName:       str 
 71          """ 
 72   
 73           
 74          super(Frame_order, self).__init__(methodName) 
 75   
 76           
 77          if not dep_check.scipy_module: 
 78               
 79              status.skipped_tests.append([methodName, 'Scipy', self._skip_type]) 
  80   
 81   
 83          """Set up for all the functional tests.""" 
 84   
 85           
 86          self.interpreter.pipe.create('test', 'frame order') 
  87   
 88   
 90          """Method for returning a string to help debug the minimisation. 
 91   
 92          @return:        The debugging string. 
 93          @rtype:         str 
 94          """ 
 95   
 96           
 97          string = 'Optimisation failure.\n\n' 
 98   
 99           
100          string = string + "%-18s%-25s\n" % ("System: ", SYSTEM) 
101          string = string + "%-18s%-25s\n" % ("Release: ", RELEASE) 
102          string = string + "%-18s%-25s\n" % ("Version: ", VERSION) 
103          string = string + "%-18s%-25s\n" % ("Win32 version: ", (WIN32_VER[0] + " " + WIN32_VER[1] + " " + WIN32_VER[2] + " " + WIN32_VER[3])) 
104          string = string + "%-18s%-25s\n" % ("Distribution: ", (DIST[0] + " " + DIST[1] + " " + DIST[2])) 
105          string = string + "%-18s%-25s\n" % ("Architecture: ", (ARCH[0] + " " + ARCH[1])) 
106          string = string + "%-18s%-25s\n" % ("Machine: ", MACH) 
107          string = string + "%-18s%-25s\n" % ("Processor: ", PROC) 
108          string = string + "%-18s%-25s\n" % ("Python version: ", PY_VER) 
109          string = string + "%-18s%-25s\n" % ("Numpy version: ", NUMPY_VER) 
110          string = string + "%-18s%-25s\n" % ("Libc version: ", (LIBC_VER[0] + " " + LIBC_VER[1])) 
111   
112   
113           
114          string = string + "\n%-15s %30.17g\n" % ('ave_pos_alpha:',   cdp.ave_pos_alpha) 
115          string = string +   "%-15s %30.17g\n" % ('ave_pos_beta:',    cdp.ave_pos_beta) 
116          string = string +   "%-15s %30.17g\n" % ('ave_pos_gamma:',   cdp.ave_pos_gamma) 
117          string = string +   "%-15s %30.17g\n" % ('chi2:',    cdp.chi2) 
118          string = string +   "%-15s %30i\n" % ('iter:',    cdp.iter) 
119          string = string +   "%-15s %30i\n" % ('f_count:', cdp.f_count) 
120          string = string +   "%-15s %30i\n" % ('g_count:', cdp.g_count) 
121          string = string +   "%-15s %30i\n" % ('h_count:', cdp.h_count) 
122          string = string +   "%-15s %30s\n" % ('warning:', cdp.warning) 
123   
124           
125          return string 
 126   
127   
128 -    def space_probe(self, ref_chi2=None, params=None, delta=3.0 / 360.0 * 2.0 * pi): 
 129          """Probe the space around the supposed minimum.""" 
130   
131           
132          self.interpreter.intro_off() 
133   
134           
135          self.interpreter.calc() 
136          print("%-20s %10.5f" % ("chi2 minimum", cdp.chi2)) 
137          self.assertAlmostEqual(cdp.chi2, ref_chi2) 
138   
139           
140          for param in params: 
141              print("\n\nParam: %s" % param) 
142              print("%-20s %10.5f" % ("chi2 orig", ref_chi2)) 
143   
144               
145              curr = getattr(cdp, param) 
146   
147               
148              setattr(cdp, param, curr+delta) 
149              self.interpreter.calc() 
150              print("%-20s %10.5f" % ("chi2 up", cdp.chi2)) 
151              self.assert_(cdp.chi2 > ref_chi2) 
152   
153               
154              setattr(cdp, param, curr-delta) 
155              self.interpreter.calc() 
156              print("%-20s %10.5f" % ("chi2 down", cdp.chi2)) 
157              self.assert_(cdp.chi2 > ref_chi2) 
158   
159               
160              setattr(cdp, param, curr) 
 161   
162   
164          """Test the free rotor frame order model of CaM.""" 
165   
166           
167          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'frame_order'+sep+'cam'+sep+'free_rotor.py') 
168   
169           
170          for i in range(3): 
171              self.assertAlmostEqual(ds['ave pos'].CoM[i], ds['orig pos'].CoM[i], 0) 
172   
173           
174          self.interpreter.pipe.switch('frame order') 
175          spherical_vect = zeros(3, float64) 
176          spherical_vect[0] = 1.0 
177          spherical_vect[1] = cdp.axis_theta 
178          spherical_vect[2] = cdp.axis_phi 
179          cart_vect = zeros(3, float64) 
180          spherical_to_cartesian(spherical_vect, cart_vect) 
181   
182           
183          pivot = array([ 37.254, 0.5, 16.7465]) 
184          com = array([ 26.83678091, -12.37906417,  28.34154128]) 
185          axis = pivot - com 
186          axis = axis / norm(axis) 
187   
188           
189          angle = acos(dot(cart_vect, axis)) 
190   
191           
192          if angle > 3 and angle < 4: 
193              self.assertAlmostEqual(angle, pi, 1) 
194          else: 
195              self.assertAlmostEqual(angle, 0.0, 1) 
 196   
197   
199          """Test the second free rotor frame order model of CaM.""" 
200   
201           
202          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'frame_order'+sep+'cam'+sep+'free_rotor2.py') 
203   
204           
205          pivot = array([ 37.254, 0.5, 16.7465]) 
206          com = array([ 26.83678091, -12.37906417,  28.34154128]) 
207          pivot_com_axis = com - pivot 
208          rot_axis = array([ 0.62649633,  0.77455282, -0.08700742]) 
209   
210           
211          ave_pivot_com_axis = ds['ave pos'].CoM - pivot 
212   
213           
214          orig_proj = dot(pivot_com_axis, rot_axis) 
215          ave_proj = dot(ave_pivot_com_axis, rot_axis) 
216   
217           
218          self.assertAlmostEqual(orig_proj, ave_proj, 0) 
219   
220           
221          self.interpreter.pipe.switch('frame order') 
222          spherical_vect = zeros(3, float64) 
223          spherical_vect[0] = 1.0 
224          spherical_vect[1] = cdp.axis_theta 
225          spherical_vect[2] = cdp.axis_phi 
226          cart_vect = zeros(3, float64) 
227          spherical_to_cartesian(spherical_vect, cart_vect) 
228          print("\nReal rotation axis:   %s" % repr(rot_axis)) 
229          print("Fitted rotation axis: %s" % repr(cart_vect)) 
230   
231           
232          angle = acos(dot(cart_vect, rot_axis)) 
233          if angle > pi/2: 
234              angle = acos(dot(cart_vect, -rot_axis)) 
235   
236           
237          self.assertAlmostEqual(angle, 0.0, 2) 
 238   
239   
241          """Test the isotropic cone, free rotor frame order model of CaM.""" 
242   
243           
244          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'frame_order'+sep+'cam'+sep+'iso_cone_free_rotor.py') 
245   
246           
247          for i in range(3): 
248              self.assertAlmostEqual(ds['ave pos'].CoM[i], ds['orig pos'].CoM[i], 0) 
249   
250           
251          self.interpreter.pipe.switch('frame order') 
252   
253           
254          pivot = array([ 37.254, 0.5, 16.7465]) 
255          com = array([ 26.83678091, -12.37906417,  28.34154128]) 
256          pivot_com_axis = com - pivot 
257          rot_axis = pivot_com_axis / norm(pivot_com_axis) 
258   
259           
260          ave_pivot_com_axis = ds['ave pos'].CoM - pivot 
261   
262           
263          orig_proj = dot(pivot_com_axis, rot_axis) 
264          ave_proj = dot(ave_pivot_com_axis, rot_axis) 
265          print("\nReal projection of the central axis to the pivot-CoM:   %s" % repr(orig_proj)) 
266          print("Fitted projection of the central axis to the pivot-CoM: %s" % repr(ave_proj)) 
267   
268           
269          self.assertAlmostEqual(orig_proj, ave_proj, 1) 
270   
271           
272          self.interpreter.pipe.switch('frame order') 
273          spherical_vect = zeros(3, float64) 
274          spherical_vect[0] = 1.0 
275          spherical_vect[1] = cdp.axis_theta 
276          spherical_vect[2] = cdp.axis_phi 
277          axis = zeros(3, float64) 
278          spherical_to_cartesian(spherical_vect, axis) 
279          print("\nReal rotation axis:   %s" % repr(rot_axis)) 
280          print("Fitted rotation axis: %s" % repr(axis)) 
281   
282           
283          angle = acos(dot(axis, rot_axis)) 
284          if angle > pi/2: 
285              angle = acos(dot(axis, -rot_axis)) 
286          self.assertAlmostEqual(angle, 0.0, 2) 
287   
288           
289          self.assertAlmostEqual(cdp.cone_theta * 2.0, 40.0 / 360.0 * 2.0 * pi, 1) 
 290   
291   
293          """Test the second isotropic cone, free rotor frame order model of CaM.""" 
294   
295           
296          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'frame_order'+sep+'cam'+sep+'iso_cone_free_rotor2.py') 
297   
298           
299          self.interpreter.pipe.switch('frame order') 
300   
301           
302          pivot = array([ 37.254, 0.5, 16.7465]) 
303          com = array([ 26.83678091, -12.37906417,  28.34154128]) 
304          pivot_com_axis = com - pivot 
305          rot_axis = array([-0.4043088, -0.49985692,  0.76594873]) 
306   
307           
308          self.interpreter.pipe.switch('frame order') 
309          spherical_vect = zeros(3, float64) 
310          spherical_vect[0] = 1.0 
311          spherical_vect[1] = cdp.axis_theta 
312          spherical_vect[2] = cdp.axis_phi 
313          axis = zeros(3, float64) 
314          spherical_to_cartesian(spherical_vect, axis) 
315          print("\nReal rotation axis:   %s" % repr(rot_axis)) 
316          print("Fitted rotation axis: %s" % repr(axis)) 
317   
318           
319          angle = acos(dot(axis, rot_axis)) 
320          if angle > pi/2: 
321              angle = acos(dot(axis, -rot_axis)) 
322          self.assertAlmostEqual(angle, 0.0, 2) 
323   
324           
325          self.assertAlmostEqual(cdp.cone_theta * 2.0, 40.0 / 360.0 * 2.0 * pi, 2) 
 326   
327   
329          """Test the rigid frame order model of CaM.""" 
330   
331           
332          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'frame_order'+sep+'cam'+sep+'rigid.py') 
333   
334           
335          ave_pos = ds['ave pos'].structure.structural_data[0].mol[0] 
336          orig_pos = ds['orig pos'].structure.structural_data[0].mol[0] 
337          for i in range(len(ave_pos.atom_name)): 
338              self.assertAlmostEqual(ave_pos.x[i], orig_pos.x[i], 1) 
339              self.assertAlmostEqual(ave_pos.y[i], orig_pos.y[i], 1) 
340              self.assertAlmostEqual(ave_pos.z[i], orig_pos.z[i], 1) 
 341   
342   
344          """Test the rotor frame order model of CaM.""" 
345   
346           
347          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'frame_order'+sep+'cam'+sep+'rotor.py') 
348   
349           
350          self.interpreter.pipe.switch('frame order') 
351   
352           
353          pivot = array([ 37.254, 0.5, 16.7465]) 
354          com = array([ 26.83678091, -12.37906417,  28.34154128]) 
355          pivot_com_axis = com - pivot 
356          rot_axis = pivot_com_axis / norm(pivot_com_axis) 
357   
358           
359          real_pos = array([[-0.31334613, -0.88922808, -0.33329811], 
360                            [ 0.93737972, -0.23341205, -0.2585306 ], 
361                            [ 0.15209688, -0.39343645,  0.90668313]], float64) 
362          ave_pos = zeros((3, 3), float64) 
363          euler_to_R_zyz(cdp.ave_pos_alpha, cdp.ave_pos_beta, cdp.ave_pos_gamma, ave_pos) 
364          print("\nReal domain position:\n%s" % repr(real_pos)) 
365          print("Fitted domain position:\n%s" % repr(ave_pos)) 
366          for i in range(3): 
367              for j in range(3): 
368                  self.assertAlmostEqual(ave_pos[i, j], real_pos[i, j], 3) 
369   
370           
371          axis = zeros(3, float64) 
372          spherical_to_cartesian(array([1, cdp.axis_theta, cdp.axis_phi]), axis) 
373          print("\nReal rotation axis:   %s" % repr(rot_axis)) 
374          print("Fitted rotation axis: %s" % repr(axis)) 
375   
376           
377          angle = acos(dot(axis, rot_axis)) 
378          if angle > pi/2: 
379              angle = acos(dot(axis, -rot_axis)) 
380          self.assertAlmostEqual(angle, 0.0, 2) 
381   
382           
383          self.assertAlmostEqual(cdp.cone_sigma_max * 2.0, 60.0 / 360.0 * 2.0 * pi, 1) 
 384   
385   
387          """Test the second rotor frame order model of CaM.""" 
388   
389           
390          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'frame_order'+sep+'cam'+sep+'rotor2.py') 
391   
392           
393          self.interpreter.pipe.switch('frame order') 
394   
395           
396          pivot = array([ 37.254, 0.5, 16.7465]) 
397          com = array([ 26.83678091, -12.37906417,  28.34154128]) 
398          pivot_com_axis = com - pivot 
399          rot_axis = array([ 0.40416535,  0.49967956,  0.76614014]) 
400   
401           
402          real_pos = array([[-0.31334613, -0.88922808, -0.33329811], 
403                            [ 0.93737972, -0.23341205, -0.2585306 ], 
404                            [ 0.15209688, -0.39343645,  0.90668313]], float64) 
405          ave_pos = zeros((3, 3), float64) 
406          euler_to_R_zyz(cdp.ave_pos_alpha, cdp.ave_pos_beta, cdp.ave_pos_gamma, ave_pos) 
407          print("\nReal domain position:\n%s" % repr(real_pos)) 
408          print("Fitted domain position:\n%s" % repr(ave_pos)) 
409          for i in range(3): 
410              for j in range(3): 
411                  self.assertAlmostEqual(ave_pos[i, j], real_pos[i, j], 1) 
412   
413           
414          axis = zeros(3, float64) 
415          spherical_to_cartesian(array([1, cdp.axis_theta, cdp.axis_phi]), axis) 
416          print("\nReal rotation axis:   %s" % repr(rot_axis)) 
417          print("Fitted rotation axis: %s" % repr(axis)) 
418   
419           
420          angle = acos(dot(axis, rot_axis)) 
421          if angle > pi/2: 
422              angle = acos(dot(axis, -rot_axis)) 
423          self.assertAlmostEqual(angle, 0.0, 2) 
424   
425           
426          self.assertAlmostEqual(cdp.cone_sigma_max * 2.0, 60.0 / 360.0 * 2.0 * pi, 1) 
 427   
428   
430          """Test the free rotor frame order model.""" 
431   
432           
433          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'frame_order'+sep+'model_calcs'+sep+'free_rotor.py') 
434   
435           
436          self.assertAlmostEqual(ds.chi2, 0.0216067401326) 
 437   
438   
440          """Test the free rotor frame order model in the eigenframe.""" 
441   
442           
443          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'frame_order'+sep+'model_calcs'+sep+'free_rotor_eigenframe.py') 
444   
445           
446          self.assertAlmostEqual(ds.chi2, 0.00673210578744) 
 447   
448   
450          """Test the isotropic cone frame order model.""" 
451   
452           
453          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'frame_order'+sep+'model_calcs'+sep+'iso_cone.py') 
454   
455           
456          chi2_ref = [] 
457          chi2_ref.append(0.131890484593) 
458          chi2_ref.append(0.0539383731611) 
459          chi2_ref.append(0.0135056297016) 
460          chi2_ref.append(0.0163432453475) 
461          chi2_ref.append(0.0775570503917) 
462          chi2_ref.append(0.0535055367493) 
463          chi2_ref.append(0.0994746492483) 
464          chi2_ref.append(0.174830826376) 
465          chi2_ref.append(0.193036744906) 
466          chi2_ref.append(0.181480810794) 
467          chi2_ref.append(0.215863920824) 
468          chi2_ref.append(0.170088692559) 
469          chi2_ref.append(0.152634493383) 
470          chi2_ref.append(0.168711907446) 
471          chi2_ref.append(0.168405354086) 
472          chi2_ref.append(0.247439860108) 
473          chi2_ref.append(0.143487410228) 
474          chi2_ref.append(0.148318989268) 
475   
476           
477          for i in range(18): 
478              self.assertAlmostEqual(ds.chi2[i], chi2_ref[i]) 
 479   
480   
482          """Test the free rotor isotropic cone frame order model.""" 
483   
484           
485          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'frame_order'+sep+'model_calcs'+sep+'iso_cone_free_rotor.py') 
486   
487           
488          chi2_ref = [] 
489          chi2_ref.append(0.0177292447567 ) 
490          chi2_ref.append(0.0187585146766 ) 
491          chi2_ref.append(0.0440519894909 ) 
492          chi2_ref.append(0.0225223798489 ) 
493          chi2_ref.append(0.0239979046491 ) 
494          chi2_ref.append(0.0161048633259 ) 
495          chi2_ref.append(0.0267310958091 ) 
496          chi2_ref.append(0.0219820914478 ) 
497          chi2_ref.append(0.0194880630576 ) 
498          chi2_ref.append(0.0348242343833 ) 
499          chi2_ref.append(0.0401631858563 ) 
500          chi2_ref.append(0.0327461783858 ) 
501          chi2_ref.append(0.0391082177884 ) 
502          chi2_ref.append(0.0467056691507 ) 
503          chi2_ref.append(0.0407175857557 ) 
504          chi2_ref.append(0.0441514158832 ) 
505          chi2_ref.append(0.042078718831  ) 
506          chi2_ref.append(0.0403856796359 ) 
507   
508           
509          for i in range(18): 
510              self.assertAlmostEqual(ds.chi2[i], chi2_ref[i]) 
 511   
512   
514          """Test the free rotor isotropic cone frame order model in the eigenframe.""" 
515   
516           
517          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'frame_order'+sep+'model_calcs'+sep+'iso_cone_free_rotor_eigenframe.py') 
518   
519           
520          chi2_ref = [] 
521          chi2_ref.append(0.115175446978 ) 
522          chi2_ref.append(0.156911214374 ) 
523          chi2_ref.append(0.209198723492 ) 
524          chi2_ref.append(0.155297079942 ) 
525          chi2_ref.append(0.0684780584219) 
526          chi2_ref.append(0.0781922435531) 
527          chi2_ref.append(0.103777394815 ) 
528          chi2_ref.append(0.173740596864 ) 
529          chi2_ref.append(0.199867814969 ) 
530          chi2_ref.append(0.297587241555 ) 
531          chi2_ref.append(0.308539214325 ) 
532          chi2_ref.append(0.2543934866   ) 
533          chi2_ref.append(0.168985365277 ) 
534          chi2_ref.append(0.190780393086 ) 
535          chi2_ref.append(0.186482798104 ) 
536          chi2_ref.append(0.153839910288 ) 
537          chi2_ref.append(0.160863854198 ) 
538          chi2_ref.append(0.157029368992 ) 
539   
540           
541          for i in range(18): 
542              self.assertAlmostEqual(ds.chi2[i], chi2_ref[i]) 
 543   
544   
546          """Test the pseudo-ellipse frame order model.""" 
547   
548           
549          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'frame_order'+sep+'model_calcs'+sep+'pseudo_ellipse.py') 
550   
551           
552          chi2_ref = [] 
553          chi2_ref.append(0.0208490007203) 
554          chi2_ref.append(0.00958146486076) 
555          chi2_ref.append(0.0405488536626) 
556          chi2_ref.append(0.0370142845551) 
557          chi2_ref.append(0.0204537537661) 
558          chi2_ref.append(0.0186122056988) 
559          chi2_ref.append(0.0177783016875) 
560          chi2_ref.append(0.0311747995923) 
561          chi2_ref.append(0.0225532898175) 
562          chi2_ref.append(0.0212562065194) 
563          chi2_ref.append(0.018939663528) 
564          chi2_ref.append(0.0224686987165) 
565          chi2_ref.append(0.0201247095045) 
566          chi2_ref.append(0.0215343817478) 
567          chi2_ref.append(0.016509302331) 
568          chi2_ref.append(0.0101988814638) 
569          chi2_ref.append(0.00989431182393) 
570          chi2_ref.append(0.0123400971524) 
571   
572           
573          for i in range(18): 
574              self.assertAlmostEqual(ds.chi2[i], chi2_ref[i]) 
 575   
576   
578          """Test the free rotor pseudo-elliptic cone frame order model.""" 
579   
580           
581          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'frame_order'+sep+'model_calcs'+sep+'pseudo_ellipse_free_rotor.py') 
582   
583           
584          chi2_ref = [[], []] 
585          chi2_ref[0].append(0.0493245760341) 
586          chi2_ref[0].append(0.0322727678945) 
587          chi2_ref[0].append(0.0399505883966) 
588          chi2_ref[0].append(0.0122539315721) 
589          chi2_ref[0].append(0.0263840505182) 
590          chi2_ref[0].append(0.0324871952484) 
591          chi2_ref[0].append(0.0247369735031) 
592          chi2_ref[0].append(0.0231896861006) 
593          chi2_ref[0].append(0.0285947802273) 
594          chi2_ref[0].append(0.0345542627808) 
595          chi2_ref[0].append(0.0289869422491) 
596          chi2_ref[0].append(0.0243038470127) 
597          chi2_ref[0].append(0.0226686034191) 
598          chi2_ref[0].append(0.0215714556045) 
599          chi2_ref[0].append(0.0173836730495) 
600          chi2_ref[0].append(0.0182530810025) 
601          chi2_ref[0].append(0.0212669211551) 
602          chi2_ref[0].append(0.0194359136977) 
603   
604          chi2_ref[1].append(0.0205287391277) 
605          chi2_ref[1].append(0.0246463829816) 
606          chi2_ref[1].append(0.0590186061204) 
607          chi2_ref[1].append(0.0441193978727) 
608          chi2_ref[1].append(0.0424299319779) 
609          chi2_ref[1].append(0.032589994611) 
610          chi2_ref[1].append(0.0523532207508) 
611          chi2_ref[1].append(0.0488535879384) 
612          chi2_ref[1].append(0.0424063218455) 
613          chi2_ref[1].append(0.0553525984677) 
614          chi2_ref[1].append(0.0495587286781) 
615          chi2_ref[1].append(0.0446625345909) 
616          chi2_ref[1].append(0.0470718361239) 
617          chi2_ref[1].append(0.0493615476721) 
618          chi2_ref[1].append(0.0492208206006) 
619          chi2_ref[1].append(0.0429966323771) 
620          chi2_ref[1].append(0.0442849187057) 
621          chi2_ref[1].append(0.0436756306414) 
622               
623           
624          for j in range(2): 
625              for i in range(18): 
626                  self.assertAlmostEqual(ds.chi2[j][i], chi2_ref[j][i]) 
 627   
628   
630          """Test the pseudo-ellipse frame order model.""" 
631   
632           
633          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'frame_order'+sep+'model_calcs'+sep+'pseudo_ellipse_torsionless.py') 
634   
635           
636          chi2_ref = [] 
637          chi2_ref.append(0.340228489225) 
638          chi2_ref.append(0.260847963487) 
639          chi2_ref.append(0.250610744982) 
640          chi2_ref.append(0.228947619476) 
641          chi2_ref.append(0.251996758815) 
642          chi2_ref.append(0.238724080817) 
643          chi2_ref.append(0.182383602599) 
644          chi2_ref.append(0.172830852017) 
645          chi2_ref.append(0.159757813028) 
646          chi2_ref.append(0.173833227524) 
647          chi2_ref.append(0.156168102428) 
648          chi2_ref.append(0.171406869781) 
649          chi2_ref.append(0.202653838515) 
650          chi2_ref.append(0.198919351788) 
651          chi2_ref.append(0.169463187543) 
652          chi2_ref.append(0.156867571611) 
653          chi2_ref.append(0.146139931983) 
654          chi2_ref.append(0.13307108095 ) 
655   
656           
657          for i in range(18): 
658              self.assertAlmostEqual(ds.chi2[i], chi2_ref[i]) 
 659   
660   
662          """Test the rotor frame order model.""" 
663   
664           
665          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'frame_order'+sep+'model_calcs'+sep+'rotor.py') 
666   
667           
668          chi2_ref = [] 
669          chi2_ref.append(0.00410277546707 ) 
670          chi2_ref.append(0.00112443204411 ) 
671          chi2_ref.append(0.00759196190331 ) 
672          chi2_ref.append(0.0956596925692  ) 
673          chi2_ref.append(0.223717470059   ) 
674          chi2_ref.append(0.136723330704   ) 
675          chi2_ref.append(0.0588253217034  ) 
676          chi2_ref.append(0.0774693384156  ) 
677          chi2_ref.append(0.0855477856492  ) 
678          chi2_ref.append(0.198089516589   ) 
679          chi2_ref.append(0.227537351664   ) 
680          chi2_ref.append(0.202005777915   ) 
681          chi2_ref.append(0.192550395736   ) 
682          chi2_ref.append(0.126007906472   ) 
683          chi2_ref.append(0.124053264662   ) 
684          chi2_ref.append(0.18203965973    ) 
685          chi2_ref.append(0.191062017006   ) 
686          chi2_ref.append(0.13580013153    ) 
687   
688           
689          for i in range(18): 
690              self.assertAlmostEqual(ds.chi2[i], chi2_ref[i]) 
 691   
692   
694          """Test the rotor frame order model in the eigenframe.""" 
695   
696           
697          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'frame_order'+sep+'model_calcs'+sep+'rotor_eigenframe.py') 
698   
699           
700          chi2_ref = [] 
701          chi2_ref.append(0.00308229284128) 
702          chi2_ref.append(0.0117874014708 ) 
703          chi2_ref.append(0.0016108171487 ) 
704          chi2_ref.append(0.00532862954549) 
705          chi2_ref.append(0.097784753109  ) 
706          chi2_ref.append(0.157147901966  ) 
707          chi2_ref.append(0.182397051711  ) 
708          chi2_ref.append(0.338977916543  ) 
709          chi2_ref.append(0.208516866654  ) 
710          chi2_ref.append(0.137660115226  ) 
711          chi2_ref.append(0.0580816149373 ) 
712          chi2_ref.append(0.0476543367845 ) 
713          chi2_ref.append(0.0360689584006 ) 
714          chi2_ref.append(0.0118024492136 ) 
715          chi2_ref.append(0.0824307041139 ) 
716          chi2_ref.append(0.0920614159956 ) 
717          chi2_ref.append(0.0936464288916 ) 
718          chi2_ref.append(0.0823025718101 ) 
719   
720           
721          for i in range(18): 
722              self.assertAlmostEqual(ds.chi2[i], chi2_ref[i]) 
 723   
724   
726          """Test the mapping of the Euler angle parameters for OpenDx viewing.""" 
727   
728           
729          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'frame_order'+sep+'opendx_euler_angle_map.py') 
 730   
731   
733          """Test the 'rigid' model for unrotated tensors with no motion.""" 
734   
735           
736          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'frame_order'+sep+'opt_rigid_no_rot.py') 
737   
738           
739          self.mesg = self.mesg_opt_debug() 
740   
741           
742          self.assertEqual(cdp.iter, 92, msg=self.mesg) 
743          self.assertEqual(cdp.chi2, 0.0, msg=self.mesg) 
744          self.assertEqual(cdp.ave_pos_alpha, 0.0, msg=self.mesg) 
745          self.assertEqual(cdp.ave_pos_beta, 0.0, msg=self.mesg) 
746          self.assertEqual(cdp.ave_pos_gamma, 0.0, msg=self.mesg) 
 747   
748   
750          """Test the 'rigid' model for randomly rotated tensors with no motion.""" 
751   
752           
753          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'frame_order'+sep+'opt_rigid_rand_rot.py') 
754   
755           
756          self.mesg = self.mesg_opt_debug() 
757   
758           
759          self.assertAlmostEqual(cdp.chi2, 3.085356555118994e-26, msg=self.mesg) 
760          self.assertAlmostEqual(cdp.ave_pos_alpha, 5.0700283197712777, msg=self.mesg) 
761          self.assertAlmostEqual(cdp.ave_pos_beta, 2.5615753919522359, msg=self.mesg) 
762          self.assertAlmostEqual(cdp.ave_pos_gamma, 0.64895449611163691, msg=self.mesg) 
 763   
764   
766          """Parametric restriction of the isotropic cone to the free rotor isotropic cone frame order model.""" 
767   
768           
769          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'frame_order'+sep+'parametric_restriction'+sep+'iso_cone_to_iso_cone_free_rotor.py') 
770   
771           
772          chi2_ref = [] 
773          chi2_ref.append(0.0177292447567 ) 
774          chi2_ref.append(0.0187585146766 ) 
775          chi2_ref.append(0.0440519894909 ) 
776          chi2_ref.append(0.0225223798489 ) 
777          chi2_ref.append(0.0239979046491 ) 
778          chi2_ref.append(0.0161048633259 ) 
779          chi2_ref.append(0.0267310958091 ) 
780          chi2_ref.append(0.0219820914478 ) 
781          chi2_ref.append(0.0194880630576 ) 
782          chi2_ref.append(0.0348242343833 ) 
783          chi2_ref.append(0.0401631858563 ) 
784          chi2_ref.append(0.0327461783858 ) 
785          chi2_ref.append(0.0391082177884 ) 
786          chi2_ref.append(0.0467056691507 ) 
787          chi2_ref.append(0.0407175857557 ) 
788          chi2_ref.append(0.0441514158832 ) 
789          chi2_ref.append(0.042078718831  ) 
790          chi2_ref.append(0.0403856796359 ) 
791   
792           
793          for i in range(18): 
794              self.assertAlmostEqual(ds.chi2[i], chi2_ref[i]) 
 795   
796   
798          """Parametric restriction of the pseudo-ellipse to the isotropic cone frame order model.""" 
799   
800           
801          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'frame_order'+sep+'parametric_restriction'+sep+'pseudo_ellipse_to_iso_cone.py') 
802   
803           
804          chi2_ref = [] 
805          chi2_ref.append(0.131890484593) 
806          chi2_ref.append(0.0539383731611) 
807          chi2_ref.append(0.0135056297016) 
808          chi2_ref.append(0.0163432453475) 
809          chi2_ref.append(0.0775570503917) 
810          chi2_ref.append(0.0535055367493) 
811          chi2_ref.append(0.0994746492483) 
812          chi2_ref.append(0.174830826376) 
813          chi2_ref.append(0.193036744906) 
814          chi2_ref.append(0.181480810794) 
815          chi2_ref.append(0.215863920824) 
816          chi2_ref.append(0.170088692559) 
817          chi2_ref.append(0.152634493383) 
818          chi2_ref.append(0.168711907446) 
819          chi2_ref.append(0.168405354086) 
820          chi2_ref.append(0.247439860108) 
821          chi2_ref.append(0.143487410228) 
822          chi2_ref.append(0.148318989268) 
823   
824           
825          for i in range(18): 
826              self.assertAlmostEqual(ds.chi2[i], chi2_ref[i]) 
 827   
828   
830          """Parametric restriction of the pseudo-ellipse to the free rotor isotropic cone frame order model.""" 
831   
832           
833          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'frame_order'+sep+'parametric_restriction'+sep+'pseudo_ellipse_to_iso_cone_free_rotor.py') 
834   
835           
836          chi2_ref = [] 
837          chi2_ref.append(0.0177292447567 ) 
838          chi2_ref.append(0.0187585146766 ) 
839          chi2_ref.append(0.0440519894909 ) 
840          chi2_ref.append(0.0225223798489 ) 
841          chi2_ref.append(0.0239979046491 ) 
842          chi2_ref.append(0.0161048633259 ) 
843          chi2_ref.append(0.0267310958091 ) 
844          chi2_ref.append(0.0219820914478 ) 
845          chi2_ref.append(0.0194880630576 ) 
846          chi2_ref.append(0.0348242343833 ) 
847          chi2_ref.append(0.0401631858563 ) 
848          chi2_ref.append(0.0327461783858 ) 
849          chi2_ref.append(0.0391082177884 ) 
850          chi2_ref.append(0.0467056691507 ) 
851          chi2_ref.append(0.0407175857557 ) 
852          chi2_ref.append(0.0441514158832 ) 
853          chi2_ref.append(0.042078718831  ) 
854          chi2_ref.append(0.0403856796359 ) 
855   
856           
857          for i in range(18): 
858              self.assertAlmostEqual(ds.chi2[i], chi2_ref[i]) 
 859   
860   
862          """Parametric restriction of the pseudo-ellipse to the isotropic cone frame order model.""" 
863   
864           
865          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'frame_order'+sep+'parametric_restriction'+sep+'pseudo_ellipse_free_rotor_to_iso_cone.py') 
866   
867           
868          chi2_ref = [] 
869          chi2_ref.append(16957.4964577) 
870          chi2_ref.append(15727.13869) 
871          chi2_ref.append(13903.0982799) 
872          chi2_ref.append(11719.9390681) 
873          chi2_ref.append(9488.44060873) 
874          chi2_ref.append(7425.57820642) 
875          chi2_ref.append(5713.6467735) 
876          chi2_ref.append(4393.3273949) 
877          chi2_ref.append(3452.97770868) 
878          chi2_ref.append(2771.90973598) 
879          chi2_ref.append(2247.44444894) 
880          chi2_ref.append(1788.58977266) 
881          chi2_ref.append(1348.38250916) 
882          chi2_ref.append(921.060703519) 
883          chi2_ref.append(539.03217075) 
884          chi2_ref.append(244.341444558) 
885          chi2_ref.append(58.4566671195) 
886          chi2_ref.append(0.148318989268) 
887   
888           
889          for i in range(18): 
890              self.assertAlmostEqual(ds.chi2[i], chi2_ref[i]) 
 891   
892   
894          """Parametric restriction of the free rotor pseudo-ellipse to the free rotor isotropic cone frame order model.""" 
895   
896           
897          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'frame_order'+sep+'parametric_restriction'+sep+'pseudo_ellipse_free_rotor_to_iso_cone_free_rotor.py') 
898   
899           
900          chi2_ref = [] 
901          chi2_ref.append(0.0177292447567 ) 
902          chi2_ref.append(0.0187585146766 ) 
903          chi2_ref.append(0.0440519894909 ) 
904          chi2_ref.append(0.0225223798489 ) 
905          chi2_ref.append(0.0239979046491 ) 
906          chi2_ref.append(0.0161048633259 ) 
907          chi2_ref.append(0.0267310958091 ) 
908          chi2_ref.append(0.0219820914478 ) 
909          chi2_ref.append(0.0194880630576 ) 
910          chi2_ref.append(0.0348242343833 ) 
911          chi2_ref.append(0.0401631858563 ) 
912          chi2_ref.append(0.0327461783858 ) 
913          chi2_ref.append(0.0391082177884 ) 
914          chi2_ref.append(0.0467056691507 ) 
915          chi2_ref.append(0.0407175857557 ) 
916          chi2_ref.append(0.0441514158832 ) 
917          chi2_ref.append(0.042078718831  ) 
918          chi2_ref.append(0.0403856796359 ) 
919   
920           
921          for i in range(18): 
922              self.assertAlmostEqual(ds.chi2[i], chi2_ref[i]) 
 923   
924   
926          """Test the pseudo-ellipse target function.""" 
927   
928           
929          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'frame_order'+sep+'pseudo_ellipse.py') 
930   
931           
932          chi2 = 0.015865464136741975 
933   
934           
935          self.space_probe(ref_chi2=chi2, params=['ave_pos_alpha', 'ave_pos_beta', 'ave_pos_gamma', 'eigen_alpha', 'eigen_beta', 'eigen_gamma', 'cone_theta_x', 'cone_theta_y', 'cone_sigma_max']) 
 936   
937   
939          """Test the torsionless pseudo-ellipse target function.""" 
940   
941           
942          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'frame_order'+sep+'pseudo_ellipse_torsionless.py') 
943   
944           
945          chi2 = 2.8393866813588198 
946   
947           
948          self.space_probe(ref_chi2=chi2, params=['ave_pos_alpha', 'ave_pos_beta', 'ave_pos_gamma', 'eigen_alpha', 'eigen_beta', 'eigen_gamma', 'cone_theta_x', 'cone_theta_y']) 
  949