Author: bugman Date: Fri May 23 10:29:49 2014 New Revision: 23371 URL: http://svn.gna.org/viewcvs/relax?rev=23371&view=rev Log: Merged revisions 23368-23370 via svnmerge from svn+ssh://bugman@xxxxxxxxxxx/svn/relax/trunk ........ r23368 | bugman | 2014-05-23 10:06:32 +0200 (Fri, 23 May 2014) | 11 lines Changed most default dispersion parameter values to avoid edge cases where there is no exchange. The dw parameters were all 0.0 and kex 1e5, both of which result in no exchange. If this is ever used for an optimisation starting point - which it never should, apart from development, test suite, and debugging purposes - then the optimisation algorithm will have a very hard time recovering. The pA parameter has been changed to 0.90 to set it to a reasonable value while still staying far away from the no exchange condition of pA = 1.0. This follows from http://article.gmane.org/gmane.science.nmr.relax.devel/5917. ........ r23369 | bugman | 2014-05-23 10:10:46 +0200 (Fri, 23 May 2014) | 10 lines Fixes for 3 dispersion system tests for the change in default parameter values. The default values are used in the auto-analysis in the test suite to avoid the grid search. The changed values affected the optimisation of two spins from Flemming Hansen's data located at test_suite/shared_data/dispersion/Hansen/, residue 4 used as an example of no exchange and residue 70 used as an example where data is only available at one field. The system test Relax_disp.test_set_grid_r20_from_min_r2eff_cpmg was also modified as it was directly checking these default values. ........ r23370 | bugman | 2014-05-23 10:18:37 +0200 (Fri, 23 May 2014) | 7 lines Fix for the Relax_disp.test_cpmg_synthetic_dx_map_points system test. This uses the default parameter values to start the optimisation, therefore the recent change away from edge case 'no Rex' values allows the parameter values stored in ds.dx_clust_val to be correctly optimised. ........ Modified: branches/frame_order_cleanup/ (props changed) branches/frame_order_cleanup/specific_analyses/relax_disp/parameter_object.py branches/frame_order_cleanup/test_suite/system_tests/relax_disp.py Propchange: branches/frame_order_cleanup/ ------------------------------------------------------------------------------ --- svnmerge-integrated (original) +++ svnmerge-integrated Fri May 23 10:29:49 2014 @@ -1 +1 @@ -/trunk:1-23366 +/trunk:1-23370 Modified: branches/frame_order_cleanup/specific_analyses/relax_disp/parameter_object.py URL: http://svn.gna.org/viewcvs/relax/branches/frame_order_cleanup/specific_analyses/relax_disp/parameter_object.py?rev=23371&r1=23370&r2=23371&view=diff ============================================================================== --- branches/frame_order_cleanup/specific_analyses/relax_disp/parameter_object.py (original) +++ branches/frame_order_cleanup/specific_analyses/relax_disp/parameter_object.py Fri May 23 10:29:49 2014 @@ -61,32 +61,32 @@ self._add('r2', scope='spin', default=10.0, desc='The transversal relaxation rate', set='params', py_type=dict, grace_string='\\qR\\s2\\N\\Q (rad.s\\S-1\\N)', err=True, sim=True) self._add('r2a', scope='spin', default=10.0, desc='The transversal relaxation rate for state A in the absence of exchange', set='params', py_type=dict, grace_string='\\qR\\s2,A\\N\\Q (rad.s\\S-1\\N)', err=True, sim=True) self._add('r2b', scope='spin', default=10.0, desc='The transversal relaxation rate for state B in the absence of exchange', set='params', py_type=dict, grace_string='\\qR\\s2,B\\N\\Q (rad.s\\S-1\\N)', err=True, sim=True) - self._add('pA', scope='spin', default=0.5, desc='The population for state A', set='params', py_type=float, grace_string='\\qp\\sA\\N\\Q', err=True, sim=True) + self._add('pA', scope='spin', default=0.90, desc='The population for state A', set='params', py_type=float, grace_string='\\qp\\sA\\N\\Q', err=True, sim=True) self._add('pB', scope='spin', default=0.5, desc='The population for state B', set='params', py_type=float, grace_string='\\qp\\sB\\N\\Q', err=True, sim=True) self._add('pC', scope='spin', default=0.5, desc='The population for state C', set='params', py_type=float, grace_string='\\qp\\sC\\N\\Q', err=True, sim=True) self._add('phi_ex', scope='spin', default=5.0, desc='The phi_ex = pA.pB.dw**2 value (ppm^2)', set='params', py_type=float, grace_string='\\xF\\B\\sex\\N = \\q p\\sA\\N.p\\sB\\N.\\xDw\\B\\S2\\N\\Q (ppm\\S2\\N)', err=True, sim=True) self._add('phi_ex_B', scope='spin', default=5.0, desc='The fast exchange factor between sites A and B (ppm^2)', set='params', py_type=float, grace_string='\\xF\\B\\sex,B\\N (ppm\\S2\\N)', err=True, sim=True) self._add('phi_ex_C', scope='spin', default=5.0, desc='The fast exchange factor between sites A and C (ppm^2)', set='params', py_type=float, grace_string='\\xF\\B\\sex,C\\N (ppm\\S2\\N)', err=True, sim=True) self._add('padw2', scope='spin', default=1.0, desc='The pA.dw**2 value (ppm^2)', set='params', py_type=float, grace_string='\\qp\\sA\\N.\\xDw\\B\\S2\\N\\Q (ppm\\S2\\N)', err=True, sim=True) - self._add('dw', scope='spin', default=0.0, desc='The chemical shift difference between states A and B (in ppm)', set='params', py_type=float, grace_string='\\q\\xDw\\B\\Q (ppm)', err=True, sim=True) - self._add('dw_AB', scope='spin', default=0.0, desc='The chemical shift difference between states A and B for 3-site exchange (in ppm)', set='params', py_type=float, grace_string='\\q\\xDw\\B\\Q\\SAB\\N (ppm)', err=True, sim=True) - self._add('dw_AC', scope='spin', default=0.0, desc='The chemical shift difference between states A and C for 3-site exchange (in ppm)', set='params', py_type=float, grace_string='\\q\\xDw\\B\\Q\\SAC\\N (ppm)', err=True, sim=True) - self._add('dw_BC', scope='spin', default=0.0, desc='The chemical shift difference between states B and C for 3-site exchange (in ppm)', set='params', py_type=float, grace_string='\\q\\xDw\\B\\Q\\SBC\\N (ppm)', err=True, sim=True) - self._add('dwH', scope='spin', default=0.0, desc='The proton chemical shift difference between states A and B (in ppm)', set='params', py_type=float, grace_string='\\q\\xDw\\B\\sH\\N\\Q (ppm)', err=True, sim=True) - self._add('dwH_AB', scope='spin', default=0.0, desc='The proton chemical shift difference between states A and B for 3-site exchange (in ppm)', set='params', py_type=float, grace_string='\\q\\xDw\\B\\sH\\N\\Q\\SAB\\N (ppm)', err=True, sim=True) - self._add('dwH_AC', scope='spin', default=0.0, desc='The proton chemical shift difference between states A and C for 3-site exchange (in ppm)', set='params', py_type=float, grace_string='\\q\\xDw\\B\\sH\\N\\Q\\SAC\\N (ppm)', err=True, sim=True) - self._add('dwH_BC', scope='spin', default=0.0, desc='The proton chemical shift difference between states B and C for 3-site exchange (in ppm)', set='params', py_type=float, grace_string='\\q\\xDw\\B\\sH\\N\\Q\\SBC\\N (ppm)', err=True, sim=True) - self._add('kex', scope='spin', default=10000.0, desc='The exchange rate', set='params', py_type=float, grace_string='\\qk\\sex\\N\\Q (rad.s\\S-1\\N)', err=True, sim=True) - self._add('kex_AB', scope='spin', default=10000.0, desc='The exchange rate between sites A and B for 3-site exchange with kex_AB = k_AB + k_BA (rad.s^-1)', set='params', py_type=float, grace_string='\\qk\\sex\\N\\Q\\SAB\\N (rad.s\\S-1\\N)', err=True, sim=True) - self._add('kex_AC', scope='spin', default=10000.0, desc='The exchange rate between sites A and C for 3-site exchange with kex_AC = k_AC + k_CA (rad.s^-1)', set='params', py_type=float, grace_string='\\qk\\sex\\N\\Q\\SAC\\N (rad.s\\S-1\\N)', err=True, sim=True) - self._add('kex_BC', scope='spin', default=10000.0, desc='The exchange rate between sites B and C for 3-site exchange with kex_BC = k_BC + k_CB (rad.s^-1)', set='params', py_type=float, grace_string='\\qk\\sex\\N\\Q\\SBC\\N (rad.s\\S-1\\N)', err=True, sim=True) - self._add('kB', scope='spin', default=10000.0, desc='Approximate chemical exchange rate constant between sites A and B (rad.s^-1)', set='params', py_type=float, grace_string='\\qk\\sB\\N\\Q (rad.s\\S-1\\N)', err=True, sim=True) - self._add('kC', scope='spin', default=10000.0, desc='Approximate chemical exchange rate constant between sites A and C (rad.s^-1)', set='params', py_type=float, grace_string='\\qk\\sC\\N\\Q (rad.s\\S-1\\N)', err=True, sim=True) - self._add('tex', scope='spin', default=1.0/10000.0, desc='The time of exchange (tex = 1/kex)', set='params', py_type=float, grace_string='\\q\\xt\\B\\sex\\N\\Q (s.rad\\S-1\\N)', err=True, sim=True) + self._add('dw', scope='spin', default=1.0, desc='The chemical shift difference between states A and B (in ppm)', set='params', py_type=float, grace_string='\\q\\xDw\\B\\Q (ppm)', err=True, sim=True) + self._add('dw_AB', scope='spin', default=1.0, desc='The chemical shift difference between states A and B for 3-site exchange (in ppm)', set='params', py_type=float, grace_string='\\q\\xDw\\B\\Q\\SAB\\N (ppm)', err=True, sim=True) + self._add('dw_AC', scope='spin', default=1.0, desc='The chemical shift difference between states A and C for 3-site exchange (in ppm)', set='params', py_type=float, grace_string='\\q\\xDw\\B\\Q\\SAC\\N (ppm)', err=True, sim=True) + self._add('dw_BC', scope='spin', default=1.0, desc='The chemical shift difference between states B and C for 3-site exchange (in ppm)', set='params', py_type=float, grace_string='\\q\\xDw\\B\\Q\\SBC\\N (ppm)', err=True, sim=True) + self._add('dwH', scope='spin', default=1.0, desc='The proton chemical shift difference between states A and B (in ppm)', set='params', py_type=float, grace_string='\\q\\xDw\\B\\sH\\N\\Q (ppm)', err=True, sim=True) + self._add('dwH_AB', scope='spin', default=1.0, desc='The proton chemical shift difference between states A and B for 3-site exchange (in ppm)', set='params', py_type=float, grace_string='\\q\\xDw\\B\\sH\\N\\Q\\SAB\\N (ppm)', err=True, sim=True) + self._add('dwH_AC', scope='spin', default=1.0, desc='The proton chemical shift difference between states A and C for 3-site exchange (in ppm)', set='params', py_type=float, grace_string='\\q\\xDw\\B\\sH\\N\\Q\\SAC\\N (ppm)', err=True, sim=True) + self._add('dwH_BC', scope='spin', default=1.0, desc='The proton chemical shift difference between states B and C for 3-site exchange (in ppm)', set='params', py_type=float, grace_string='\\q\\xDw\\B\\sH\\N\\Q\\SBC\\N (ppm)', err=True, sim=True) + self._add('kex', scope='spin', default=1000.0, desc='The exchange rate', set='params', py_type=float, grace_string='\\qk\\sex\\N\\Q (rad.s\\S-1\\N)', err=True, sim=True) + self._add('kex_AB', scope='spin', default=1000.0, desc='The exchange rate between sites A and B for 3-site exchange with kex_AB = k_AB + k_BA (rad.s^-1)', set='params', py_type=float, grace_string='\\qk\\sex\\N\\Q\\SAB\\N (rad.s\\S-1\\N)', err=True, sim=True) + self._add('kex_AC', scope='spin', default=1000.0, desc='The exchange rate between sites A and C for 3-site exchange with kex_AC = k_AC + k_CA (rad.s^-1)', set='params', py_type=float, grace_string='\\qk\\sex\\N\\Q\\SAC\\N (rad.s\\S-1\\N)', err=True, sim=True) + self._add('kex_BC', scope='spin', default=1000.0, desc='The exchange rate between sites B and C for 3-site exchange with kex_BC = k_BC + k_CB (rad.s^-1)', set='params', py_type=float, grace_string='\\qk\\sex\\N\\Q\\SBC\\N (rad.s\\S-1\\N)', err=True, sim=True) + self._add('kB', scope='spin', default=1000.0, desc='Approximate chemical exchange rate constant between sites A and B (rad.s^-1)', set='params', py_type=float, grace_string='\\qk\\sB\\N\\Q (rad.s\\S-1\\N)', err=True, sim=True) + self._add('kC', scope='spin', default=1000.0, desc='Approximate chemical exchange rate constant between sites A and C (rad.s^-1)', set='params', py_type=float, grace_string='\\qk\\sC\\N\\Q (rad.s\\S-1\\N)', err=True, sim=True) + self._add('tex', scope='spin', default=1.0/1000.0, desc='The time of exchange (tex = 1/kex)', set='params', py_type=float, grace_string='\\q\\xt\\B\\sex\\N\\Q (s.rad\\S-1\\N)', err=True, sim=True) self._add('theta', scope='spin', desc='Rotating frame tilt angle : ( theta = arctan(w_1 / Omega) ) (rad)', grace_string='Rotating frame tilt angle (rad)', py_type=dict, set='all', err=False, sim=False) self._add('w_eff', scope='spin', desc='Effective field in rotating frame : ( w_eff = sqrt(Omega^2 + w_1^2) ) (rad.s^-1)', grace_string='Effective field in rotating frame (rad.s\\S-1\\N)', py_type=dict, set='all', err=False, sim=False) - self._add('k_AB', scope='spin', default=10000.0, desc='The exchange rate from state A to state B', set='params', py_type=float, grace_string='\\qk\\sAB\\N\\Q (rad.s\\S-1\\N)', err=True, sim=True) - self._add('k_BA', scope='spin', default=10000.0, desc='The exchange rate from state B to state A', set='params', py_type=float, grace_string='\\qk\\sBA\\N\\Q (rad.s\\S-1\\N)', err=True, sim=True) + self._add('k_AB', scope='spin', default=1000.0, desc='The exchange rate from state A to state B', set='params', py_type=float, grace_string='\\qk\\sAB\\N\\Q (rad.s\\S-1\\N)', err=True, sim=True) + self._add('k_BA', scope='spin', default=1000.0, desc='The exchange rate from state B to state A', set='params', py_type=float, grace_string='\\qk\\sBA\\N\\Q (rad.s\\S-1\\N)', err=True, sim=True) # Add the minimisation data. self._add_min_data(min_stats_global=False, min_stats_spin=True) Modified: branches/frame_order_cleanup/test_suite/system_tests/relax_disp.py URL: http://svn.gna.org/viewcvs/relax/branches/frame_order_cleanup/test_suite/system_tests/relax_disp.py?rev=23371&r1=23370&r2=23371&view=diff ============================================================================== --- branches/frame_order_cleanup/test_suite/system_tests/relax_disp.py (original) +++ branches/frame_order_cleanup/test_suite/system_tests/relax_disp.py Fri May 23 10:29:49 2014 @@ -1475,7 +1475,7 @@ print("\nChecking the dx point point file.") res_file = [ '0.8 3.92 0.39964 1'+"\n", - '4e-05 0.08 3.8 1'+"\n", + '0.76981 3.9169 0.41353 1'+"\n", ] file = open(point_point, 'r') lines = file.readlines() @@ -1887,18 +1887,18 @@ print("%-20s %20.15g %20.15g" % ("dw", spin70.dw, spin71.dw)) print("%-20s %20.15g %20.15g" % ("kex", spin70.kex, spin71.kex)) print("%-20s %20.15g %20.15g\n" % ("chi2", spin70.chi2, spin71.chi2)) - self.assertAlmostEqual(spin70.r2[r20_key1], 6.95820070286795, 3) - self.assertAlmostEqual(spin70.r2[r20_key2], 9.39657836325177, 3) - self.assertAlmostEqual(spin70.pA, 0.989701009272583, 3) - self.assertAlmostEqual(spin70.dw, 5.67326272877785, 3) - self.assertAlmostEqual(spin70.kex/10000, 1713.54848022381/10000, 3) - self.assertAlmostEqual(spin70.chi2, 52.5106852884892, 3) - self.assertAlmostEqual(spin71.r2[r20_key1], 4.99887619838854, 3) - self.assertAlmostEqual(spin71.r2[r20_key2], 6.89817579107423, 3) - self.assertAlmostEqual(spin71.pA, 0.986695947044873, 3) - self.assertAlmostEqual(spin71.dw, 2.09130944488215, 3) - self.assertAlmostEqual(spin71.kex/10000, 2438.42961328059/10000, 3) - self.assertAlmostEqual(spin71.chi2, 15.1644963157243, 3) + self.assertAlmostEqual(spin70.r2[r20_key1], 6.95815351460902, 3) + self.assertAlmostEqual(spin70.r2[r20_key2], 9.39649535771294, 3) + self.assertAlmostEqual(spin70.pA, 0.989701014493195, 3) + self.assertAlmostEqual(spin70.dw, 5.67314464776128, 3) + self.assertAlmostEqual(spin70.kex/10000, 1713.65380495429/10000, 3) + self.assertAlmostEqual(spin70.chi2, 52.5106880917473, 3) + self.assertAlmostEqual(spin71.r2[r20_key1], 4.99889337382435, 3) + self.assertAlmostEqual(spin71.r2[r20_key2], 6.89822887466673, 3) + self.assertAlmostEqual(spin71.pA, 0.986709050819695, 3) + self.assertAlmostEqual(spin71.dw, 2.09238266766502, 3) + self.assertAlmostEqual(spin71.kex/10000, 2438.27019901422/10000, 3) + self.assertAlmostEqual(spin71.chi2, 15.1644906963987, 3) # The final data pipe checks. self.interpreter.pipe.switch(pipe_name='final - relax_disp') @@ -2048,23 +2048,23 @@ print("%-20s %20.15g %20.15g %20.15g" % ("dw", spin4.dw, spin70.dw, spin71.dw)) print("%-20s %20.15g %20.15g %20.15g" % ("kex", spin4.kex, spin70.kex, spin71.kex)) print("%-20s %20.15g %20.15g %20.15g\n" % ("chi2", spin4.chi2, spin70.chi2, spin71.chi2)) - self.assertAlmostEqual(spin4.r2[r20_key1], 1.58622828626709, 2) - self.assertAlmostEqual(spin4.r2[r20_key2], 1.58592122315687, 3) - self.assertAlmostEqual(spin4.pA, 0.51276361588332, 3) - self.assertAlmostEqual(spin4.dw, 0.0677279657953332, 3) - self.assertAlmostEqual(spin4.kex/10000, 2448.82586714642/10000, 3) - self.assertAlmostEqual(spin4.chi2, 20.4855900585583, 3) - self.assertAlmostEqual(spin70.r2[r20_key1], 6.97252087724882, 3) - self.assertAlmostEqual(spin70.r2[r20_key2], 9.40960089079409, 3) - self.assertAlmostEqual(spin70.pA, 0.989857038532724, 3) - self.assertAlmostEqual(spin70.dw, 5.60897947735102, 3) - self.assertAlmostEqual(spin70.kex/10000, 1752.98845226051/10000, 3) - self.assertAlmostEqual(spin70.chi2, 53.8382162820491, 3) - self.assertAlmostEqual(spin71.r2[r20_key1], 4.98111206240747, 3) - self.assertAlmostEqual(spin71.pA, 0.996607989009612, 3) - self.assertAlmostEqual(spin71.dw, 4.34436483888832, 3) - self.assertAlmostEqual(spin71.kex/10000, 1936.74679136572/10000, 3) - self.assertAlmostEqual(spin71.chi2, 5.5170374277749, 3) + self.assertAlmostEqual(spin4.r2[r20_key1], 1.60462456409508, 2) + self.assertAlmostEqual(spin4.r2[r20_key2], 1.63221781206148, 3) + self.assertAlmostEqual(spin4.pA, 0.899911303159742, 3) + self.assertAlmostEqual(spin4.dw, 0.000048303116437, 3) + self.assertAlmostEqual(spin4.kex/10000, 0.0796851577904277/10000, 3) + self.assertAlmostEqual(spin4.chi2, 26.7356693257612, 3) + self.assertAlmostEqual(spin70.r2[r20_key1], 6.97235130701478, 3) + self.assertAlmostEqual(spin70.r2[r20_key2], 9.40988386796136, 3) + self.assertAlmostEqual(spin70.pA, 0.989856745034836, 3) + self.assertAlmostEqual(spin70.dw, 5.60878828496508, 3) + self.assertAlmostEqual(spin70.kex/10000, 1752.93345983946/10000, 3) + self.assertAlmostEqual(spin70.chi2, 53.8382172686916, 3) + self.assertAlmostEqual(spin71.r2[r20_key1], 4.98111647969012, 3) + self.assertAlmostEqual(spin71.pA, 0.996608013844177, 3) + self.assertAlmostEqual(spin71.dw, 4.34425685338434, 3) + self.assertAlmostEqual(spin71.kex/10000, 1937.21776309767/10000, 3) + self.assertAlmostEqual(spin71.chi2, 5.51703749012473, 3) def test_hansen_cpmg_data_to_cr72(self): @@ -4529,9 +4529,9 @@ # Testing the r2 values. self.assertEqual(spin.r2[r20_key_600], 10.00) self.assertEqual(spin.r2[r20_key_500], 10.00) - self.assertEqual(spin.pA, 0.5) - self.assertEqual(spin.dw, 0.0) - self.assertEqual(spin.kex, 10000.0) + self.assertEqual(spin.pA, 0.9) + self.assertEqual(spin.dw, 1.0) + self.assertEqual(spin.kex, 1000.0) print("###########################################") print("Trying GRID SEARCH for standard R2eff values")