Author: tlinnet
Date: Thu May 22 18:27:42 2014
New Revision: 23349
URL: http://svn.gna.org/viewcvs/relax?rev=23349&view=rev
Log:
Added 7 unit tests demonstrating edge case 'no Rex' failures of the model
'LM63'.
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.
Modified:
branches/disp_speed/test_suite/unit_tests/_lib/_dispersion/__init__.py
branches/disp_speed/test_suite/unit_tests/_lib/_dispersion/test_lm63.py
Modified:
branches/disp_speed/test_suite/unit_tests/_lib/_dispersion/__init__.py
URL:
http://svn.gna.org/viewcvs/relax/branches/disp_speed/test_suite/unit_tests/_lib/_dispersion/__init__.py?rev=23349&r1=23348&r2=23349&view=diff
==============================================================================
---
branches/disp_speed/test_suite/unit_tests/_lib/_dispersion/__init__.py
(original)
+++
branches/disp_speed/test_suite/unit_tests/_lib/_dispersion/__init__.py
Thu May 22 18:27:42 2014
@@ -1,6 +1,7 @@
###############################################################################
#
#
# Copyright (C) 2013-2014 Edward d'Auvergne
#
+# Copyright (C) 2013-2014 Troels E. Linnet
#
#
#
# This file is part of the program relax (http://www.nmr-relax.com).
#
#
#
@@ -23,5 +24,6 @@
__all__ = [
'test___init__',
'test_dpl94',
+ 'test_lm63',
'test_ns_cpmg_2site_expanded'
]
Modified:
branches/disp_speed/test_suite/unit_tests/_lib/_dispersion/test_lm63.py
URL:
http://svn.gna.org/viewcvs/relax/branches/disp_speed/test_suite/unit_tests/_lib/_dispersion/test_lm63.py?rev=23349&r1=23348&r2=23349&view=diff
==============================================================================
---
branches/disp_speed/test_suite/unit_tests/_lib/_dispersion/test_lm63.py
(original)
+++
branches/disp_speed/test_suite/unit_tests/_lib/_dispersion/test_lm63.py
Thu May 22 18:27:42 2014
@@ -1,6 +1,7 @@
###############################################################################
#
#
# Copyright (C) 2014 Edward d'Auvergne
#
+# Copyright (C) 2014 Troels E. Linnet
#
#
#
# This file is part of the program relax (http://www.nmr-relax.com).
#
#
#
@@ -20,15 +21,15 @@
###############################################################################
# Python module imports.
-from numpy import array, float64, int16, zeros
+from numpy import array, float64, int16, pi, zeros
from unittest import TestCase
# relax module imports.
-from lib.dispersion.ns_cpmg_2site_expanded import
r2eff_ns_cpmg_2site_expanded
+from lib.dispersion.lm63 import r2eff_LM63
-class Test_ns_cpmg_2site_expanded(TestCase):
- """Unit tests for the lib.dispersion.ns_cpmg_2site_expanded relax
module."""
+class Test_lm63(TestCase):
+ """Unit tests for the lib.dispersion.lm63 relax module."""
def setUp(self):
"""Set up for all unit tests."""
@@ -39,51 +40,59 @@
self.dw = 0.5
self.kex = 100.0
+ # The spin Larmor frequencies.
+ self.sfrq = 599.8908617*1E6
+
# Required data structures.
self.num_points = 3
- self.tcp = array([0.1, 0.2, 0.3], float64)
+ self.cpmg_frqs = array([[2.5, 1.25, 0.83]], float64)
self.R2eff = zeros(3, float64)
- self.num_cpmg = array([1, 2, 3], int16)
def calc_r2eff(self):
"""Calculate and check the R2eff values."""
# Parameter conversions.
- k_AB, k_BA = self.param_conversion(pA=self.pA, kex=self.kex)
+ phi_ex_scaled = self.param_conversion(pA=self.pA, dw=self.dw,
sfrq=self.sfrq)
# Calculate the R2eff values.
- R2eff = r2eff_ns_cpmg_2site_expanded(r20=self.r20, pA=self.pA,
dw=self.dw, k_AB=k_AB, k_BA=k_BA, relax_time=0.3, inv_relax_time=1/0.3,
tcp=self.tcp, num_points=self.num_points, num_cpmg=self.num_cpmg)
-
+ R2eff = r2eff_LM63(r20=self.r20, phi_ex=phi_ex_scaled,
kex=self.kex, cpmg_frqs=self.cpmg_frqs, num_points=self.num_points)
# Check all R2eff values.
for i in range(self.num_points):
self.assertAlmostEqual(R2eff[i], self.r20)
- def param_conversion(self, pA=None, kex=None):
+ def param_conversion(self, pA=None, dw=None, sfrq=None):
"""Convert the parameters.
@keyword pA: The population of state A.
@type pA: float
- @keyword kex: The rate of exchange.
- @type kex: float
- @return: The parameters {k_AB, k_BA}.
- @rtype: tuple of float
+ @keyword dw: The chemical exchange difference between states
A and B in ppm.
+ @type dw: float
+ @keyword sfrq: The spin Larmor frequencies in Hz.
+ @type sfrq: float
+ @return: The parameters phi_ex_scaled
+ @rtype: float
"""
# Calculate pB.
pB = 1.0 - pA
- # Exchange rates.
- k_BA = pA * kex
- k_AB = pB * kex
+ # Calculate spin Larmor frequencies in 2pi.
+ frqs = sfrq * 2 * pi
+
+ # The phi_ex parameter value (pA * pB * delta_omega^2).
+ phi_ex = pA * pB * dw**2
+
+ # Convert phi_ex from ppm^2 to (rad/s)^2.
+ phi_ex_scaled = phi_ex * frqs**2
# Return all values.
- return k_AB, k_BA
+ return phi_ex_scaled
- def test_ns_cpmg_2site_expanded_no_rex1(self):
- """Test the r2eff_ns_cpmg_2site_expanded() function for no
exchange when dw = 0.0."""
+ def test_lm63_no_rex1(self):
+ """Test the r2eff_lm63() function for no exchange when dw =
0.0."""
# Parameter reset.
self.dw = 0.0
@@ -92,8 +101,8 @@
self.calc_r2eff()
- def test_ns_cpmg_2site_expanded_no_rex2(self):
- """Test the r2eff_ns_cpmg_2site_expanded() function for no
exchange when pA = 1.0."""
+ def test_lm63_no_rex2(self):
+ """Test the r2eff_lm63() function for no exchange when pA =
1.0."""
# Parameter reset.
self.pA = 1.0
@@ -102,8 +111,8 @@
self.calc_r2eff()
- def test_ns_cpmg_2site_expanded_no_rex3(self):
- """Test the r2eff_ns_cpmg_2site_expanded() function for no
exchange when kex = 0.0."""
+ def test_lm63_no_rex3(self):
+ """Test the r2eff_lm63() function for no exchange when kex =
0.0."""
# Parameter reset.
self.kex = 0.0
@@ -112,8 +121,8 @@
self.calc_r2eff()
- def test_ns_cpmg_2site_expanded_no_rex4(self):
- """Test the r2eff_ns_cpmg_2site_expanded() function for no
exchange when dw = 0.0 and pA = 1.0."""
+ def test_lm63_no_rex4(self):
+ """Test the r2eff_lm63() function for no exchange when dw = 0.0
and pA = 1.0."""
# Parameter reset.
self.pA = 1.0
@@ -123,8 +132,8 @@
self.calc_r2eff()
- def test_ns_cpmg_2site_expanded_no_rex5(self):
- """Test the r2eff_ns_cpmg_2site_expanded() function for no
exchange when dw = 0.0 and kex = 0.0."""
+ def test_lm63_no_rex5(self):
+ """Test the r2eff_lm63() function for no exchange when dw = 0.0
and kex = 0.0."""
# Parameter reset.
self.dw = 0.0
@@ -134,8 +143,8 @@
self.calc_r2eff()
- def test_ns_cpmg_2site_expanded_no_rex6(self):
- """Test the r2eff_ns_cpmg_2site_expanded() function for no
exchange when pA = 1.0 and kex = 0.0."""
+ def test_lm63_no_rex6(self):
+ """Test the r2eff_lm63() function for no exchange when pA = 1.0
and kex = 0.0."""
# Parameter reset.
self.pA = 1.0
@@ -145,8 +154,8 @@
self.calc_r2eff()
- def test_ns_cpmg_2site_expanded_no_rex7(self):
- """Test the r2eff_ns_cpmg_2site_expanded() function for no
exchange when dw = 0.0, pA = 1.0, and kex = 0.0."""
+ def test_lm63_no_rex7(self):
+ """Test the r2eff_lm63() function for no exchange when dw = 0.0,
pA = 1.0, and kex = 0.0."""
# Parameter reset.
self.dw = 0.0
_______________________________________________
relax (http://www.nmr-relax.com)
This is the relax-commits mailing list
relax-commits@xxxxxxx
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