Author: bugman Date: Wed Aug 14 19:52:39 2013 New Revision: 20594 URL: http://svn.gna.org/viewcvs/relax?rev=20594&view=rev Log: Added support for the Mac OS X Modelfree4 binary results to the Palmer.* system tests. The Mac OS X Modelfree 4.20 binary produces different results than the Linux binaries, mainly due to a compilation problem. In the Linux binaries, the results are written out to 4 decimal places. In the Mac binaries, the results are instead written out to 4 significant figures. Therefore the number of decimal places are much less than the Linux results. Modified: trunk/test_suite/system_tests/palmer.py Modified: trunk/test_suite/system_tests/palmer.py URL: http://svn.gna.org/viewcvs/relax/trunk/test_suite/system_tests/palmer.py?rev=20594&r1=20593&r2=20594&view=diff ============================================================================== --- trunk/test_suite/system_tests/palmer.py (original) +++ trunk/test_suite/system_tests/palmer.py Wed Aug 14 19:52:39 2013 @@ -77,23 +77,29 @@ # Determine if the Gnu gcc or Portland C compiler version is being used. spin = return_spin(':0@N', pipe='m2') if spin.te == 1.951*1e-12: - compiler = 'gcc' # Gnu gcc modelfree4 version. + binary = 'linux-i386-gcc' # Linux Gnu gcc modelfree4 version. else: - compiler = 'pgf' # Portland C compiler modelfree4 version. + binary = 'linux-i386-pgf' # Linux Portland C compiler modelfree4 version. + spin = return_spin(':-2@N', pipe='m1') + if spin.chi2 == 36.62: + binary = 'mac-i386' # Mac OS X intel binary. + if not binary: + raise RelaxError("The Modelfree4 binary cannot be identified, therefore the parameters cannot be meaningfully checked.") + print("\nDetected the '%s' Modelfree4 binary." % binary) # Checks for model m1, m2, and m3 mfout file reading. models = ['m1', 'm2', 'm3'] params = [['s2'], ['s2', 'te'], ['s2', 'rex']] spin_names = [':-2@N', ':-1@N', ':0@N'] - if compiler == 'gcc': - s2 = [[0.869, 0.732, None], [0.869, 0.730, None], [0.715, 0.643, None]] - te = [[None, None, None], [0.0, 1.951, None], [None, None, None]] # Gnu gcc modelfree4 version. - rex = [[None, None, None], [None, None, None], [4.308, 4.278, None]] + s2 = [[0.869, 0.732, None], [0.869, 0.730, None], [0.715, 0.643, None]] + if binary == 'linux-i386-gcc': + te = [[None, None, None], [0.0, 1.951, None], [None, None, None]] else: - s2 = [[0.869, 0.732, None], [0.869, 0.730, None], [0.715, 0.643, None]] - te = [[None, None, None], [0.0, 1.952, None], [None, None, None]] # Portland C compiler modelfree4 version. - rex = [[None, None, None], [None, None, None], [4.308, 4.278, None]] + te = [[None, None, None], [0.0, 1.952, None], [None, None, None]] + rex = [[None, None, None], [None, None, None], [4.308, 4.278, None]] chi2 = [[36.6223, 20.3954, None], [36.6223, 20.3299, None], [1.9763, 0.6307, None]] + if binary == 'mac-i386': + chi2 = [[36.62, 20.40, None], [36.62, 20.33, None], [1.976, 0.6307, None]] for model_index in range(3): print("Model " + repr(models[model_index])) for spin_index in range(3): @@ -130,6 +136,8 @@ te = [None, None] rex = [0.005, 0.404] chi2 = [1.7966, 0.7389] + if binary == 'mac-i386': + chi2 = [1.796, 0.7392] for spin_index in range(3): # Get the spin. spin = return_spin(spin_names[spin_index], pipe='aic') @@ -147,19 +155,23 @@ # Checks. self.assertEqual(spin.model, models[spin_index]) self.assertEqual(spin.params, params[spin_index]) - self.assertEqual(spin.s2, s2[spin_index]) + self.assertAlmostEqual(spin.s2, s2[spin_index]) self.assertEqual(spin.s2f, None) self.assertEqual(spin.s2s, None) - self.assertEqual(spin.te, te[spin_index]) + self.assertAlmostEqual(spin.te, te[spin_index]) self.assertEqual(spin.tf, None) self.assertEqual(spin.ts, None) - self.assertEqual(spin.rex, rex[spin_index]) + self.assertAlmostEqual(spin.rex, rex[spin_index]) self.assertEqual(spin.chi2, chi2[spin_index]) # Final global values. final_pipe = pipes.get_pipe('aic') - self.assertEqual(final_pipe.chi2, 2.5356) - self.assertEqual(final_pipe.diff_tensor.tm, 12.045) + if binary == 'mac-i386': + self.assertAlmostEqual(final_pipe.chi2, 2.5355) + self.assertAlmostEqual(final_pipe.diff_tensor.tm, 12.051) + else: + self.assertAlmostEqual(final_pipe.chi2, 2.5356) + self.assertAlmostEqual(final_pipe.diff_tensor.tm, 12.045) def test_palmer_omp(self): @@ -179,15 +191,19 @@ if spin.s2 == 0.855: raise RelaxError("You are using an old, buggy Modelfree4 version! You must upgrade to version 4.20 or later.") - # Determine if the Gnu gcc or Portland C compiler version is being used. + # Determine the Modelfree4 binary type used. spin = return_spin(':9@N', pipe='aic') + binary = None if spin.te * 1e12 == 52.195: - compiler = 'gcc' # Gnu gcc modelfree4 version. + binary = 'linux-i386-gcc' # Linux Gnu gcc modelfree4 version. elif spin.te * 1e12 == 52.197: - compiler = 'pgf' # Portland C compiler modelfree4 version. - else: + binary = 'linux-i386-pgf' # Linux Portland C compiler modelfree4 version. + spin = return_spin(':9@N', pipe='m1') + if spin.chi2 == 143.7: + binary = 'mac-i386' # Mac OS X intel binary. + if not binary: raise RelaxError("The Modelfree4 binary cannot be identified, therefore the parameters cannot be meaningfully checked.") - print("\nDetected the '%s' compiled binary." % compiler) + print("\nDetected the '%s' Modelfree4 binary." % binary) # Model m1, m2, and m3 mfout file data. models = ['m1', 'm2', 'm3'] @@ -195,8 +211,12 @@ spin_names = [':9@N', ':10@N', ':11@N'] s2 = [[0.822, 0.799, 0.823], [0.788, 0.777, 0.812], [0.822, 0.799, 0.823]] te = [[None, None, None], [61.506, 36.087, 20.039], [None, None, None]] + if binary == 'mac-i386': + te = [[None, None, None], [61.504, 36.087, 20.039], [None, None, None]] rex = [[None, None, None], [None, None, None], [0.0, 0.0, 0.0]] chi2 = [[143.6773, 105.1767, 61.6684], [40.9055, 57.1562, 48.4927], [143.6773, 105.1767, 61.6684]] + if binary == 'mac-i386': + chi2 = [[143.7, 105.2, 61.67], [40.91, 57.16, 48.49], [143.7, 105.2, 61.67]] # Checks for model m1, m2, and m3 mfout file reading. for model_index in range(3): @@ -206,20 +226,20 @@ # Get the spin. spin = return_spin(spin_names[spin_index], pipe=models[model_index]) + print spin # Conversions. - if te[model_index][spin_index]: - te[model_index][spin_index] = te[model_index][spin_index] * 1e-12 if rex[model_index][spin_index]: rex[model_index][spin_index] = rex[model_index][spin_index] / (2.0 * pi * cdp.spectrometer_frq[cdp.ri_ids[0]])**2 # Checks. self.assertEqual(spin.model, models[model_index]) self.assertEqual(spin.params, params[model_index]) - self.assertEqual(spin.s2, s2[model_index][spin_index]) + self.assertAlmostEqual(spin.s2, s2[model_index][spin_index]) self.assertEqual(spin.s2f, None) self.assertEqual(spin.s2s, None) - self.assertEqual(spin.te, te[model_index][spin_index]) + if te[model_index][spin_index]: + self.assertAlmostEqual(spin.te * 1e12, te[model_index][spin_index]) self.assertEqual(spin.tf, None) self.assertEqual(spin.ts, None) self.assertEqual(spin.rex, rex[model_index][spin_index]) @@ -229,11 +249,15 @@ models = ['m2', 'm2', 'm2'] params = [['s2', 'te'], ['s2', 'te'], ['s2', 'te']] s2 = [0.755, 0.761, 0.787] - if compiler == 'gcc': + if binary == 'linux-i386-gcc': te = [52.195, 29.356, 12.678] - else: + elif binary == 'linux-i386-pgf': te = [52.197, 29.361, 12.677] + elif binary == 'mac-i386': + te = [52.197, 29.357, 12.676] chi2 = [7.254, 8.0437, 0.5327] + if binary == 'mac-i386': + chi2 = [7.254, 8.044, 0.5327] # Checks for the final mfout file reading. for spin_index in range(3): @@ -243,7 +267,7 @@ # Checks. self.assertEqual(spin.model, models[spin_index]) self.assertEqual(spin.params, params[spin_index]) - self.assertEqual(spin.s2, s2[spin_index]) + self.assertAlmostEqual(spin.s2, s2[spin_index]) self.assertEqual(spin.s2f, None) self.assertEqual(spin.s2s, None) if te[spin_index]: @@ -251,19 +275,23 @@ self.assertEqual(spin.tf, None) self.assertEqual(spin.ts, None) self.assertEqual(spin.rex, None) - self.assertEqual(spin.chi2, chi2[spin_index]) + self.assertAlmostEqual(spin.chi2, chi2[spin_index]) # Final global values. final_pipe = pipes.get_pipe('aic') - if compiler == 'gcc': - self.assertEqual(final_pipe.chi2, 15.8304) - self.assertEqual(final_pipe.diff_tensor.tm, 8.443) - self.assertEqual(final_pipe.diff_tensor.Dratio, 1.053) - self.assertEqual(final_pipe.diff_tensor.theta * 360 / 2.0 / pi, 68.592) - self.assertEqual(final_pipe.diff_tensor.phi * 360 / 2.0 / pi, 73.756) - else: - self.assertEqual(final_pipe.chi2, 15.8304) - self.assertEqual(final_pipe.diff_tensor.tm, 8.443) - self.assertEqual(final_pipe.diff_tensor.Dratio, 1.053) - self.assertEqual(final_pipe.diff_tensor.theta * 360 / 2.0 / pi, 68.864) - self.assertEqual(final_pipe.diff_tensor.phi * 360 / 2.0 / pi, 73.913) + self.assertEqual(final_pipe.chi2, 15.8304) + if binary == 'linux-i386-gcc': + self.assertAlmostEqual(final_pipe.diff_tensor.tm, 8.443) + self.assertAlmostEqual(final_pipe.diff_tensor.Dratio, 1.053) + self.assertAlmostEqual(final_pipe.diff_tensor.theta * 360 / 2.0 / pi, 68.592) + self.assertAlmostEqual(final_pipe.diff_tensor.phi * 360 / 2.0 / pi, 73.756) + elif binary == 'linux-i386-pgf': + self.assertAlmostEqual(final_pipe.diff_tensor.tm, 8.443) + self.assertAlmostEqual(final_pipe.diff_tensor.Dratio, 1.053) + self.assertAlmostEqual(final_pipe.diff_tensor.theta * 360 / 2.0 / pi, 68.864) + self.assertAlmostEqual(final_pipe.diff_tensor.phi * 360 / 2.0 / pi, 73.913) + elif binary == 'mac-i386': + self.assertAlmostEqual(final_pipe.diff_tensor.tm, 8.459) + self.assertAlmostEqual(final_pipe.diff_tensor.Dratio, 1.049) + self.assertAlmostEqual(final_pipe.diff_tensor.theta * 360 / 2.0 / pi, 64.611) + self.assertAlmostEqual(final_pipe.diff_tensor.phi * 360 / 2.0 / pi, 79.281)