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 arctan2, array, cos, float64, ones, pi, sin, zeros
25 from unittest import TestCase
26
27
28 from lib.dispersion.tp02 import r1rho_TP02
29
30
32 """Unit tests for the lib.dispersion.tp02 relax module."""
33
35 """Set up for all unit tests."""
36
37
38
39
40
41 self.r1rho_prime = 5.0
42
43 self.omega = -35670.44192
44
45 self.offset = -35040.3526693
46
47
48 self.pA = 0.95
49
50 self.dw = 0.5
51 self.kex = 1000.0
52
53 self.r1 = 1.0
54
55 self.spin_lock_nu1 = array([ 1000., 1500., 2000., 2500., 3000., 3500., 4000., 4500., 5000., 5500., 6000.])
56
57
58 self.sfrq = 599.8908617*1E6
59
60
61 self.num_points = 11
62 self.R1rho = zeros(self.num_points, float64)
63
64
66 """Calculate and check the R1rho values."""
67
68
69 pB, dw_frq, spin_lock_omega1, spin_lock_omega1_squared = self.param_conversion(pA=self.pA, dw=self.dw, sfrq=self.sfrq, spin_lock_nu1=self.spin_lock_nu1)
70
71
72 a = ones([self.num_points])
73
74
75 r1rho_TP02(r1rho_prime=self.r1rho_prime, omega=self.omega, offset=self.offset, pA=self.pA, dw=dw_frq*a, kex=self.kex, R1=self.r1, spin_lock_fields=spin_lock_omega1, spin_lock_fields2=spin_lock_omega1_squared, back_calc=self.R1rho)
76
77
78
79 Wa = self.omega
80
81
82 Wb = self.omega + dw_frq
83
84
85 W = self.pA * Wa + pB * Wb
86
87
88 d = W - self.offset
89
90
91 theta = arctan2(spin_lock_omega1, d)
92 r1rho_no_rex = self.r1 * cos(theta)**2 + self.r1rho_prime * sin(theta)**2
93
94
95 for i in range(self.num_points):
96 self.assertAlmostEqual(self.R1rho[i], r1rho_no_rex[i])
97
98
100 """Convert the parameters.
101
102 @keyword pA: The population of state A.
103 @type pA: float
104 @keyword dw: The chemical exchange difference between states A and B in ppm.
105 @type dw: float
106 @keyword sfrq: The spin Larmor frequencies in Hz.
107 @type sfrq: float
108 @keyword spin_lock_nu1: The spin-lock field strengths in Hertz.
109 @type spin_lock_nu1: float
110 @return: The parameters {pB, dw_frq, spin_lock_omega1, spin_lock_omega1_squared}.
111 @rtype: tuple of float
112 """
113
114
115 pB = 1.0 - pA
116
117
118 frqs = sfrq * 2 * pi
119
120
121 dw_frq = dw * frqs / 1.e6
122
123
124 spin_lock_omega1 = (2. * pi * spin_lock_nu1)
125
126
127 spin_lock_omega1_squared = spin_lock_omega1**2
128
129
130 return pB, dw_frq, spin_lock_omega1, spin_lock_omega1_squared
131
132
134 """Test the r1rho_tp02() function for no exchange when dw = 0.0."""
135
136
137 self.dw = 0.0
138
139
140 self.calc_r1rho()
141
142
144 """Test the r1rho_tp02() function for no exchange when pA = 1.0."""
145
146
147 self.pA = 1.0
148
149
150 self.calc_r1rho()
151
152
154 """Test the r1rho_tp02() function for no exchange when kex = 0.0."""
155
156
157 self.kex = 0.0
158
159
160 self.calc_r1rho()
161
162
164 """Test the r1rho_tp02() function for no exchange when dw = 0.0 and pA = 1.0."""
165
166
167 self.pA = 1.0
168 self.dw = 0.0
169
170
171 self.calc_r1rho()
172
173
175 """Test the r1rho_tp02() function for no exchange when dw = 0.0 and kex = 0.0."""
176
177
178 self.dw = 0.0
179 self.kex = 0.0
180
181
182 self.calc_r1rho()
183
184
186 """Test the r1rho_tp02() function for no exchange when pA = 1.0 and kex = 0.0."""
187
188
189 self.pA = 1.0
190 self.kex = 0.0
191
192
193 self.calc_r1rho()
194
195
197 """Test the r1rho_tp02() function for no exchange when dw = 0.0, pA = 1.0, and kex = 0.0."""
198
199
200 self.dw = 0.0
201 self.kex = 0.0
202
203
204 self.calc_r1rho()
205
206
208 """Test the r1rho_tp02() function for no exchange when kex = 1e20."""
209
210
211 self.kex = 1e20
212
213
214 self.calc_r1rho()
215