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