Hi Troels, Due to the problem I mentioned of either dw or dwH being zero but still seeing exchange (http://article.gmane.org/gmane.science.nmr.relax.devel/5940), I would recommend that you modify these tests as follows. I would modify all the tests where dw = 0.0 to be where both dw and dwH are zero at the same time. Then the test_mmq_cr72_no_rex9() test is not needed.
Cheers, Edward On 26 May 2014 23:09, <[email protected]> wrote: > Author: tlinnet > Date: Mon May 26 23:09:40 2014 > New Revision: 23438 > > URL: http://svn.gna.org/viewcvs/relax?rev=23438&view=rev > Log: > Added 9 unit tests demonstrating edge case 'no Rex' failures of the model > 'MMQ CR72'. > > This follows from the ideas in the post > http://article.gmane.org/gmane.science.nmr.relax.devel/5858. > This is related to: task #7793: (https://gna.org/task/?7793) Speed-up of > dispersion models. > > This is to implement catching of math domain errors, before they occur. > > These tests cover all parameter value combinations which result in no > exchange: > > - dw = 0.0, > - pA = 1.0, > - kex = 0.0, > - dw = 0.0 and pA = 1.0, > - dw = 0.0 and kex = 0.0, > - pA = 1.0 and kex = 0.0, > - dw = 0.0, pA = 1.0, and kex = 0.0. > - kex = 1e5, > - dwH = 0.0, > > Modified: > > branches/disp_speed/test_suite/unit_tests/_lib/_dispersion/test_mmq_cr72.py > > Modified: > branches/disp_speed/test_suite/unit_tests/_lib/_dispersion/test_mmq_cr72.py > URL: > http://svn.gna.org/viewcvs/relax/branches/disp_speed/test_suite/unit_tests/_lib/_dispersion/test_mmq_cr72.py?rev=23438&r1=23437&r2=23438&view=diff > ============================================================================== > --- > branches/disp_speed/test_suite/unit_tests/_lib/_dispersion/test_mmq_cr72.py > (original) > +++ > branches/disp_speed/test_suite/unit_tests/_lib/_dispersion/test_mmq_cr72.py > Mon May 26 23:09:40 2014 > @@ -24,48 +24,49 @@ > from unittest import TestCase > > # relax module imports. > -from lib.dispersion.b14 import r2eff_B14 > +from lib.dispersion.mmq_cr72 import r2eff_mmq_cr72 > > > -class Test_b14(TestCase): > - """Unit tests for the lib.dispersion.b14 relax module.""" > +class Test_mmq_cr72(TestCase): > + """Unit tests for the lib.dispersion.mmq_cr72 relax module.""" > > def setUp(self): > """Set up for all unit tests.""" > > # Default parameter values. > - self.r20a = 2.0 > - self.r20b = 2.0 > + self.r20 = 2.0 > self.pA = 0.99 > self.dw = 2.0 > + self.dwH = 0.5 > self.kex = 1000.0 > > # Required data structures. > self.num_points = 7 > - self.ncyc = array([2, 4, 8, 10, 20, 40, 500]) > + self.ncyc = array([2, 4, 8, 10, 20, 40]) > relax_times = 0.04 > - cpmg_frqs = self.ncyc / relax_times > + self.cpmg_frqs = self.ncyc / relax_times > self.inv_relax_times = 1.0 / relax_times > - self.tau_cpmg = 0.25 / cpmg_frqs > + self.tau_cpmg = 0.25 / self.cpmg_frqs > > # The spin Larmor frequencies. > self.sfrq = 200. * 1E6 > + > > def calc_r2eff(self): > """Calculate and check the R2eff values.""" > > # Parameter conversions. > - k_AB, k_BA, pB, dw_frq = self.param_conversion(pA=self.pA, > kex=self.kex, dw=self.dw, sfrq=self.sfrq) > + k_AB, k_BA, pB, dw_frq, dwH_frq = self.param_conversion(pA=self.pA, > kex=self.kex, dw=self.dw, dwH=self.dwH, sfrq=self.sfrq) > > # Calculate the R2eff values. > - R2eff = r2eff_B14(r20a=self.r20a, r20b=self.r20b, pA=self.pA, pB=pB, > dw=dw_frq, kex=self.kex, k_AB=k_AB, k_BA=k_BA, ncyc=self.ncyc, > inv_tcpmg=self.inv_relax_times, tcp=self.tau_cpmg, num_points=self.num_points) > + R2eff = r2eff_mmq_cr72(r20=self.r20, pA=self.pA, pB=pB, dw=dw_frq, > dwH=dwH_frq, kex=self.kex, k_AB=k_AB, k_BA=k_BA, cpmg_frqs=self.cpmg_frqs, > inv_tcpmg=self.inv_relax_times, tcp=self.tau_cpmg, > num_points=self.num_points, power=self.ncyc) > > # Check all R2eff values. > for i in range(self.num_points): > - self.assertAlmostEqual(R2eff[i], self.r20a) > + self.assertAlmostEqual(R2eff[i], self.r20) > > > - def param_conversion(self, pA=None, kex=None, dw=None, sfrq=None): > + def param_conversion(self, pA=None, kex=None, dw=None, dwH=None, > sfrq=None): > """Convert the parameters. > > @keyword pA: The population of state A. > @@ -74,6 +75,8 @@ > @type kex: float > @keyword dw: The chemical exchange difference between states A > and B in ppm. > @type dw: float > + @keyword dwH: The proton chemical exchange difference between > states A and B in ppm. > + @type dwH: float > @keyword sfrq: The spin Larmor frequencies in Hz. > @type sfrq: float > @return: The parameters {k_AB, k_BA, pB, dw_frq}. > @@ -93,12 +96,15 @@ > # Convert dw from ppm to rad/s. > dw_frq = dw * frqs > > + # Convert dwH from ppm to rad/s. > + dwH_frq = dwH * frqs > + > # Return all values. > - return k_AB, k_BA, pB, dw_frq > + return k_AB, k_BA, pB, dw_frq, dwH_frq > > > - def test_b14_no_rex1(self): > - """Test the r2eff_b14() function for no exchange when dw = 0.0.""" > + def test_mmq_cr72_no_rex1(self): > + """Test the r2eff_mmq_cr72() function for no exchange when dw = > 0.0.""" > > # Parameter reset. > self.dw = 0.0 > @@ -107,8 +113,8 @@ > self.calc_r2eff() > > > - def test_b14_no_rex2(self): > - """Test the r2eff_b14() function for no exchange when pA = 1.0.""" > + def test_mmq_cr72_no_rex2(self): > + """Test the r2eff_mmq_cr72() function for no exchange when pA = > 1.0.""" > > # Parameter reset. > self.pA = 1.0 > @@ -117,8 +123,8 @@ > self.calc_r2eff() > > > - def test_b14_no_rex3(self): > - """Test the r2eff_b14() function for no exchange when kex = 0.0.""" > + def test_mmq_cr72_no_rex3(self): > + """Test the r2eff_mmq_cr72() function for no exchange when kex = > 0.0.""" > > # Parameter reset. > self.kex = 0.0 > @@ -127,8 +133,8 @@ > self.calc_r2eff() > > > - def test_b14_no_rex4(self): > - """Test the r2eff_b14() function for no exchange when dw = 0.0 and > pA = 1.0.""" > + def test_mmq_cr72_no_rex4(self): > + """Test the r2eff_mmq_cr72() function for no exchange when dw = 0.0 > and pA = 1.0.""" > > # Parameter reset. > self.pA = 1.0 > @@ -138,8 +144,8 @@ > self.calc_r2eff() > > > - def test_b14_no_rex5(self): > - """Test the r2eff_b14() function for no exchange when dw = 0.0 and > kex = 0.0.""" > + def test_mmq_cr72_no_rex5(self): > + """Test the r2eff_mmq_cr72() function for no exchange when dw = 0.0 > and kex = 0.0.""" > > # Parameter reset. > self.dw = 0.0 > @@ -149,8 +155,8 @@ > self.calc_r2eff() > > > - def test_b14_no_rex6(self): > - """Test the r2eff_b14() function for no exchange when pA = 1.0 and > kex = 0.0.""" > + def test_mmq_cr72_no_rex6(self): > + """Test the r2eff_mmq_cr72() function for no exchange when pA = 1.0 > and kex = 0.0.""" > > # Parameter reset. > self.pA = 1.0 > @@ -160,8 +166,8 @@ > self.calc_r2eff() > > > - def test_b14_no_rex7(self): > - """Test the r2eff_b14() function for no exchange when dw = 0.0, pA = > 1.0, and kex = 0.0.""" > + def test_mmq_cr72_no_rex7(self): > + """Test the r2eff_mmq_cr72() function for no exchange when dw = 0.0, > pA = 1.0, and kex = 0.0.""" > > # Parameter reset. > self.dw = 0.0 > @@ -169,3 +175,23 @@ > > # Calculate and check the R2eff values. > self.calc_r2eff() > + > + > + def test_mmq_cr72_no_rex8(self): > + """Test the r2eff_mmq_cr72() function for no exchange when kex = > 1e5.""" > + > + # Parameter reset. > + self.kex = 1e5 > + > + # Calculate and check the R2eff values. > + self.calc_r2eff() > + > + > + def test_mmq_cr72_no_rex9(self): > + """Test the r2eff_mmq_cr72() function for no exchange when dwH = > 0.0.""" > + > + # Parameter reset. > + self.dwH = 0.0 > + > + # Calculate and check the R2eff values. > + self.calc_r2eff() > > > _______________________________________________ > relax (http://www.nmr-relax.com) > > This is the relax-commits mailing list > [email protected] > > To unsubscribe from this list, get a password > reminder, or change your subscription options, > visit the list information page at > https://mail.gna.org/listinfo/relax-commits _______________________________________________ relax (http://www.nmr-relax.com) This is the relax-devel mailing list [email protected] To unsubscribe from this list, get a password reminder, or change your subscription options, visit the list information page at https://mail.gna.org/listinfo/relax-devel

