Author: bugman Date: Tue Oct 15 18:18:30 2013 New Revision: 21121 URL: http://svn.gna.org/viewcvs/relax?rev=21121&view=rev Log: Converted the Relax_disp.test_sprangers_cpmg_data_auto_analysis system test to not use the auto-analysis. The test has been renamed to Relax_disp.test_sprangers_data_to_mq_ns_cpmg_2site. The optimisation is now for the cluster and has been severely cut back. The 'MQ NS CPMG 2-site' model appears to be rubbish anyway - it looks to be indeterminate with multiple solutions, and possibly infinite lines of solutions. The test now passes, and quickly. Modified: branches/relax_disp/test_suite/system_tests/relax_disp.py Modified: branches/relax_disp/test_suite/system_tests/relax_disp.py URL: http://svn.gna.org/viewcvs/relax/branches/relax_disp/test_suite/system_tests/relax_disp.py?rev=21121&r1=21120&r2=21121&view=diff ============================================================================== --- branches/relax_disp/test_suite/system_tests/relax_disp.py (original) +++ branches/relax_disp/test_suite/system_tests/relax_disp.py Tue Oct 15 18:18:30 2013 @@ -1491,48 +1491,64 @@ self.assertEqual(cdp.mol[0].res[2].spin[0].ri_data['R2eff.600'], 7.2385) - def test_sprangers_cpmg_data_auto_analysis(self): - """Test of the dispersion auto-analysis using Remco Sprangers' MQ CPMG data. + def test_sprangers_data_to_mq_ns_cpmg_2site(self, model=None): + """Test the 'MQ NS CPMG 2-site' model fitting against Remco Sprangers' ClpP data. This uses the data from Remco Sprangers' paper at http://dx.doi.org/10.1073/pnas.0507370102. This is MQ CPMG data with a fixed relaxation time period. """ - # The models to optimise. - ds.models = ['R2eff', 'No Rex', 'MQ NS CPMG 2-site'] - - # Execute the script. - self.interpreter.run(script_file=status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'relax_disp'+sep+'sprangers_data.py') - - # The 'No Rex' model checks. - self.interpreter.pipe.switch(pipe_name='No Rex') + # Reset. + self.interpreter.reset() + + # Create the data pipe and load the base data. + data_path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'dispersion'+sep+'Sprangers_ClpP' + self.interpreter.state.load(data_path+sep+'r2eff_values') + + # The model data pipe. + model = 'MQ NS CPMG 2-site' + self.interpreter.pipe.copy(pipe_from='base pipe', pipe_to=model, bundle_to='relax_disp') + self.interpreter.pipe.switch(pipe_name=model) + + # Set the model. + self.interpreter.relax_disp.select_model(model=model) + + # Cluster everything. + self.interpreter.relax_disp.cluster(cluster_id='all', spin_id=":135-137") + + # Copy the data. + self.interpreter.value.copy(pipe_from='R2eff', pipe_to=model, param='r2eff') + + # Alias the spins. spin135S = cdp.mol[0].res[0].spin[0] spin135F = cdp.mol[0].res[0].spin[1] spin137S = cdp.mol[0].res[1].spin[0] spin137F = cdp.mol[0].res[1].spin[1] - print("\n\nOptimised parameters:\n") - print("%-20s %-20s %-20s %-20s %-20s" % ("Parameter", "Value (:135@S)", "Value (:135@F)", "Value (:137@S)", "Value (:137@F)")) - print("%-20s %20.15g %20.15g %20.15g %20.15g" % ("R2 (500 MHz)", spin135S.r2[0], spin135F.r2[0], spin137S.r2[0], spin137F.r2[0])) - print("%-20s %20.15g %20.15g %20.15g %20.15g" % ("R2 (800 MHz)", spin135S.r2[1], spin135F.r2[1], spin137S.r2[1], spin137F.r2[1])) - print("%-20s %20.15g %20.15g %20.15g %20.15g\n" % ("chi2", spin135S.chi2, spin135F.chi2, spin137S.chi2, spin137F.chi2)) - self.assertAlmostEqual(spin135S.r2[0], 33.9759609066454, 4) - self.assertAlmostEqual(spin135S.r2[1], 43.0969094834547, 4) - self.assertAlmostEqual(spin135S.chi2, 3969.76481864137, 4) - self.assertAlmostEqual(spin135F.r2[0], 47.552576922923, 4) - self.assertAlmostEqual(spin135F.r2[1], 65.0985264581959, 4) - self.assertAlmostEqual(spin135F.chi2, 3815.60336919813, 4) - self.assertAlmostEqual(spin137S.r2[0], 32.2534843780118, 4) - self.assertAlmostEqual(spin137S.r2[1], 42.3438098884568, 4) - self.assertAlmostEqual(spin137S.chi2, 5059.72438767579, 4) - self.assertAlmostEqual(spin137F.r2[0], 51.8197781054955, 4) - self.assertAlmostEqual(spin137F.r2[1], 66.2604887530423, 4) - self.assertAlmostEqual(spin137F.chi2, 1764.08570485219, 4) - - # The 'MQ NS 2-site' model checks. - self.interpreter.pipe.switch(pipe_name='MQ NS 2-site') - spin135S = cdp.mol[0].res[0].spin[0] - spin135F = cdp.mol[0].res[0].spin[1] - spin137S = cdp.mol[0].res[1].spin[0] - spin137F = cdp.mol[0].res[1].spin[1] + + # Set the cluster specific parameters (only for the first spin). + spin135S.pA = 0.500311298403094 + spin135S.kex = 59.5551680542025 + + # Set the initial parameter values. + spin135S.r2 = [ 2.89494989792968, 12.6694205621436] + spin135S.dw = 1.47777783753308 + spin135S.dwH = 1.0880818550171 + + spin135F.r2 = [ 41.907752972063, 58.1518607839796] + spin135F.dw = 0.419799242782033 + spin135F.dwH = 1.27742823131436 + + spin137S.r2 = [ 0.0736711146623223, 13.8168225329927] + spin137S.dw = 2.4030348485243 + spin137S.dwH = 0.00271978588774347 + + spin137F.r2 = [ 45.2885284912096, 57.8347181561312] + spin137F.dw = 1.5929498838754 + spin137F.dwH = 0.00605967407110987 + + # Low precision optimisation. + self.interpreter.minimise(min_algor='simplex', line_search=None, hessian_mod=None, hessian_type=None, func_tol=1e-05, grad_tol=None, max_iter=100, constraints=True, scaling=True, verbosity=1) + + # Printout. print("\n\nOptimised parameters:\n") print("%-20s %-20s %-20s %-20s %-20s" % ("Parameter", "Value (:135@S)", "Value (:135@F)", "Value (:137@S)", "Value (:137@F)")) print("%-20s %20.15g %20.15g %20.15g %20.15g" % ("R2 (500 MHz)", spin135S.r2[0], spin135F.r2[0], spin137S.r2[0], spin137F.r2[0])) @@ -1542,34 +1558,42 @@ print("%-20s %20.15g %20.15g %20.15g %20.15g" % ("dwH", spin135S.dwH, spin135F.dwH, spin137S.dwH, spin137F.dwH)) print("%-20s %20.15g %20.15g %20.15g %20.15g" % ("kex", spin135S.kex, spin135F.kex, spin137S.kex, spin137F.kex)) print("%-20s %20.15g %20.15g %20.15g %20.15g\n" % ("chi2", spin135S.chi2, spin135F.chi2, spin137S.chi2, spin137F.chi2)) - self.assertAlmostEqual(spin135S.r2[0], 0, 4) - self.assertAlmostEqual(spin135S.r2[1], 0, 4) - self.assertAlmostEqual(spin135S.pA, 0, 4) - self.assertAlmostEqual(spin135S.dw, 0, 4) - self.assertAlmostEqual(spin135S.dwH, 0, 4) - self.assertAlmostEqual(spin135S.kex/10000, 0, 4) - self.assertAlmostEqual(spin135S.chi2, 0, 4) - self.assertAlmostEqual(spin135F.r2[0], 0, 4) - self.assertAlmostEqual(spin135F.r2[1], 0, 4) - self.assertAlmostEqual(spin135F.pA, 0, 4) - self.assertAlmostEqual(spin135F.dw, 0, 4) - self.assertAlmostEqual(spin135F.dwH, 0, 4) - self.assertAlmostEqual(spin135F.kex/10000, 0, 4) - self.assertAlmostEqual(spin135F.chi2, 0, 4) - self.assertAlmostEqual(spin137S.r2[0], 0, 4) - self.assertAlmostEqual(spin137S.r2[1], 0, 4) - self.assertAlmostEqual(spin137S.pA, 0, 4) - self.assertAlmostEqual(spin137S.dw, 0, 4) - self.assertAlmostEqual(spin137S.dwH, 0, 4) - self.assertAlmostEqual(spin137S.kex/10000, 0, 4) - self.assertAlmostEqual(spin137S.chi2, 0, 4) - self.assertAlmostEqual(spin137F.r2[0], 0, 4) - self.assertAlmostEqual(spin137F.r2[1], 0, 4) - self.assertAlmostEqual(spin137F.pA, 0, 4) - self.assertAlmostEqual(spin137F.dw, 0, 4) - self.assertAlmostEqual(spin137F.dwH, 0, 4) - self.assertAlmostEqual(spin137F.kex/10000, 0, 4) - self.assertAlmostEqual(spin137F.chi2, 0, 4) + + # Checks for residue :135S. + self.assertAlmostEqual(spin135S.r2[0], 2.89494989792968, 4) + self.assertAlmostEqual(spin135S.r2[1], 12.6694205621436, 4) + self.assertAlmostEqual(spin135S.pA, 0.500311298403094, 4) + self.assertAlmostEqual(spin135S.dw, 1.47777783753308, 4) + self.assertAlmostEqual(spin135S.dwH, 1.0880818550171, 4) + self.assertAlmostEqual(spin135S.kex, 59.5551680542025, 4) + self.assertAlmostEqual(spin135S.chi2, 347.259150126813, 4) + + # Checks for residue :135F. + self.assertAlmostEqual(spin135F.r2[0], 41.907752972063, 4) + self.assertAlmostEqual(spin135F.r2[1], 58.1518607839796, 4) + self.assertAlmostEqual(spin135F.pA, 0.500311298403094, 4) + self.assertAlmostEqual(spin135F.dw, 0.419799242782033, 4) + self.assertAlmostEqual(spin135F.dwH, 1.27742823131436, 4) + self.assertAlmostEqual(spin135F.kex, 59.5551680542025, 4) + self.assertAlmostEqual(spin135F.chi2, 347.259150126813, 4) + + # Checks for residue :137S. + self.assertAlmostEqual(spin137S.r2[0], 0.0736711146623223, 4) + self.assertAlmostEqual(spin137S.r2[1], 13.8168225329927, 4) + self.assertAlmostEqual(spin137S.pA, 0.500311298403094, 4) + self.assertAlmostEqual(spin137S.dw, 2.4030348485243, 4) + self.assertAlmostEqual(spin137S.dwH, 0.00285577518213064, 4) + self.assertAlmostEqual(spin137S.kex, 59.5551680542025, 4) + self.assertAlmostEqual(spin137S.chi2, 347.259150126813, 4) + + # Checks for residue :137F. + self.assertAlmostEqual(spin137F.r2[0], 45.2885284912096, 4) + self.assertAlmostEqual(spin137F.r2[1], 57.8347181561312, 4) + self.assertAlmostEqual(spin137F.pA, 0.500311298403094, 4) + self.assertAlmostEqual(spin137F.dw, 1.5929498838754, 4) + self.assertAlmostEqual(spin137F.dwH, 0.00605967407110987, 4) + self.assertAlmostEqual(spin137F.kex, 59.5551680542025, 4) + self.assertAlmostEqual(spin137F.chi2, 347.259150126813, 4) def test_tp02_data_to_ns_r1rho_2site(self, model=None):