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