1   
  2   
  3   
  4   
  5   
  6   
  7   
  8   
  9   
 10   
 11   
 12   
 13   
 14   
 15   
 16   
 17   
 18   
 19   
 20   
 21   
 22   
 23  from numpy import array, float64, int16, ones, pi, zeros 
 24  from unittest import TestCase 
 25   
 26   
 27  from lib.dispersion.ns_cpmg_2site_expanded import r2eff_ns_cpmg_2site_expanded 
 28   
 29   
 31      """Unit tests for the lib.dispersion.ns_cpmg_2site_expanded relax module.""" 
 32   
 34          """Set up for all unit tests.""" 
 35   
 36           
 37          self.r20 = 2.0 
 38          self.pA = 0.95 
 39          self.dw = 0.5 
 40          self.kex = 100.0 
 41   
 42           
 43          self.num_points = 3 
 44          self.tcp = array([0.1, 0.2, 0.3], float64) 
 45          self.num_cpmg = array([1, 2, 3], int16) 
 46          self.R2eff = zeros(self.num_points, float64) 
 47   
 48           
 49          self.sfrq = 200. * 1E6 
  50   
 51   
 53          """Calculate and check the R2eff values.""" 
 54   
 55           
 56          k_AB, k_BA, dw_frq = self.param_conversion(pA=self.pA, kex=self.kex, dw=self.dw, sfrq=self.sfrq) 
 57   
 58          a = ones([self.num_points]) 
 59   
 60           
 61          r2eff_ns_cpmg_2site_expanded(r20=self.r20*a, pA=self.pA, dw=dw_frq*a, dw_orig=dw_frq*a, kex=self.kex, relax_time=0.3, inv_relax_time=1/0.3, tcp=self.tcp, back_calc=self.R2eff, num_cpmg=self.num_cpmg) 
 62   
 63           
 64          if self.kex >= 1.e5: 
 65              for i in range(self.num_points): 
 66                  self.assertAlmostEqual(self.R2eff[i], self.r20, 5) 
 67          else: 
 68              for i in range(self.num_points): 
 69                  self.assertAlmostEqual(self.R2eff[i], self.r20) 
  70   
 71   
 73          """Convert the parameters. 
 74   
 75          @keyword pA:    The population of state A. 
 76          @type pA:       float 
 77          @keyword kex:   The rate of exchange. 
 78          @type kex:      float 
 79          @keyword dw:    The chemical exchange difference between states A and B in ppm. 
 80          @type dw:       float 
 81          @keyword sfrq:  The spin Larmor frequencies in Hz. 
 82          @type sfrq:     float 
 83          @return:        The parameters {k_AB, k_BA, dw_frq}. 
 84          @rtype:         tuple of float 
 85          """ 
 86   
 87           
 88          pB = 1.0 - pA 
 89   
 90           
 91          k_BA = pA * kex 
 92          k_AB = pB * kex 
 93   
 94           
 95          frqs = sfrq * 2 * pi 
 96   
 97           
 98          dw_frq = dw * frqs / 1.e6 
 99   
100           
101          return k_AB, k_BA, dw_frq 
 102   
103   
105          """Test the r2eff_ns_cpmg_2site_expanded() function for no exchange when dw = 0.0.""" 
106   
107           
108          self.dw = 0.0 
109   
110           
111          self.calc_r2eff() 
 112   
113   
115          """Test the r2eff_ns_cpmg_2site_expanded() function for no exchange when pA = 1.0.""" 
116   
117           
118          self.pA = 1.0 
119   
120           
121          self.calc_r2eff() 
 122   
123   
125          """Test the r2eff_ns_cpmg_2site_expanded() function for no exchange when kex = 0.0.""" 
126   
127           
128          self.kex = 0.0 
129   
130           
131          self.calc_r2eff() 
 132   
133   
135          """Test the r2eff_ns_cpmg_2site_expanded() function for no exchange when dw = 0.0 and pA = 1.0.""" 
136   
137           
138          self.pA = 1.0 
139          self.dw = 0.0 
140   
141           
142          self.calc_r2eff() 
 143   
144   
146          """Test the r2eff_ns_cpmg_2site_expanded() function for no exchange when dw = 0.0 and kex = 0.0.""" 
147   
148           
149          self.dw = 0.0 
150          self.kex = 0.0 
151   
152           
153          self.calc_r2eff() 
 154   
155   
157          """Test the r2eff_ns_cpmg_2site_expanded() function for no exchange when pA = 1.0 and kex = 0.0.""" 
158   
159           
160          self.pA = 1.0 
161          self.kex = 0.0 
162   
163           
164          self.calc_r2eff() 
 165   
166   
168          """Test the r2eff_ns_cpmg_2site_expanded() function for no exchange when dw = 0.0, pA = 1.0, and kex = 0.0.""" 
169   
170           
171          self.dw = 0.0 
172          self.kex = 0.0 
173   
174           
175          self.calc_r2eff() 
  176