1 from Numeric import Float64, zeros
2 from re import match
3
6 "Function for the calculation of the transformed relaxation gradients."
7
8
10 """Function for the calculation of the transformed relaxation gradients.
11
12 The transformed relaxation gradients
13 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
14
15 Data structure: self.data.dri_prime
16 Dimension: 2D, (parameters, transformed relaxation data)
17 Type: Numeric matrix, Float64
18 Dependencies: self.data.jw, self.data.djw
19 Required by: self.data.dri, self.data.d2ri
20
21
22 Formulae
23 ~~~~~~~~
24
25 Components
26 ~~~~~~~~~~
27
28 Dipolar
29 ~~~~~~~
30 1 / mu0 \ 2 (gH.gN.h_bar)**2
31 d = - . | ---- | . ----------------
32 4 \ 4.pi / <r**6>
33
34
35 3 / mu0 \ 2 (gH.gN.h_bar)**2
36 d' = - - . | ---- | . ----------------
37 2 \ 4.pi / <r**7>
38
39
40 CSA
41 ~~~
42 (wN.csa)**2
43 c = -----------
44 3
45
46 2.wN**2.csa
47 c' = -----------
48 3
49
50
51 R1()
52 ~~~~
53 J_R1_d = J(wH-wN) + 3J(wN) + 6J(wH+wN)
54
55 dJ(wH-wN) dJ(wN) dJ(wH+wN)
56 J_R1_d_prime = --------- + 3 . ------ + 6 . ---------
57 dmf dmf dmf
58
59
60 J_R1_c = J(wN)
61
62 dJ(wN)
63 J_R1_c_prime = ------
64 dmf
65
66
67
68 R2()
69 ~~~~
70 J_R2_d = 4J(0) + J(wH-wN) + 3J(wN) + 6J(wH) + 6J(wH+wN)
71
72 dJ(0) dJ(wH-wN) dJ(wN) dJ(wH) dJ(wH+wN)
73 J_R2_d_prime = 4 . ----- + --------- + 3 . ------ + 6 . ------ + 6 . ---------
74 dmf dmf dmf dmf dmf
75
76
77 J_R2_c = 4J(0) + 3J(wN)
78
79 dJ(0) dJ(wN)
80 J_R2_c_prime = 4 . ----- + 3 . ------
81 dmf dmf
82
83
84 sigma_noe()
85 ~~~~~~~~~~~
86 J_sigma_noe = 6J(wH+wN) - J(wH-wN)
87
88 dJ(wH+wN) dJ(wH-wN)
89 J_sigma_noe_prime = 6 . --------- - ---------
90 dmf dmf
91
92
93 Spectral density parameter
94 ~~~~~~~~~~~~~~~~~~~~~~~~~~
95
96 dR1()
97 ----- = d . J_R1_d_prime + c . J_R1_c_prime
98 dJj
99
100
101 dR2() d c
102 ----- = - . J_R2_d_prime + - . J_R2_c_prime
103 dJj 2 6
104
105
106 dsigma_noe()
107 ------------ = d . J_sigma_noe_prime
108 dJj
109
110
111 Chemical exchange
112 ~~~~~~~~~~~~~~~~~
113
114 dR1()
115 ----- = 0
116 dRex
117
118
119 dR2()
120 ----- = 1
121 dRex
122
123
124 dR2()
125 ------ = (2.pi.wH)**2
126 drhoex
127
128
129 dsigma_noe()
130 ------------ = 0
131 dRex
132
133
134 CSA
135 ~~~
136
137 dR1()
138 ----- = c' . J_R1_c
139 dcsa
140
141
142 dR2() c'
143 ----- = - . J_R2_c
144 dcsa 6
145
146
147 dsigma_noe()
148 ------------ = 0
149 dcsa
150
151
152 Bond length
153 ~~~~~~~~~~~
154
155 dR1()
156 ----- = d' . J_R1_d
157 dr
158
159
160 dR2() d'
161 ----- = - . J_R2_d
162 dr 2
163
164
165 dsigma_noe()
166 ------------ = d' . J_sigma_noe
167 dr
168
169 """
170
171
172 self.dJw()
173
174
175 self.data.j_dip_comps_prime = zeros((len(self.data.params), self.mf.data.num_ri), Float64)
176 self.data.j_csa_comps_prime = zeros((len(self.data.params), self.mf.data.num_ri), Float64)
177 if match('m[34]', self.data.model):
178 self.data.rex_comps_prime = zeros((len(self.data.params), self.mf.data.num_ri), Float64)
179 if match('m6', self.data.model):
180 self.data.dip_comps_prime = zeros((len(self.data.params), self.mf.data.num_ri), Float64)
181 self.data.csa_comps_prime = zeros((len(self.data.params), self.mf.data.num_ri), Float64)
182
183
184 for i in range(self.mf.data.num_ri):
185 frq_num = self.mf.data.remap_table[i]
186
187
188 if self.mf.data.data_types[i] == 'R1':
189 self.data.j_dip_comps_prime[:, i] = self.data.djw[frq_num, 2] + 3.0*self.data.djw[frq_num, 1] + 6.0*self.data.djw[frq_num, 4]
190 self.data.j_csa_comps_prime[:, i] = self.data.djw[frq_num, 1]
191 if match('m6', self.data.model):
192 self.data.dip_comps_prime[:, i] = self.mf.data.dipole_prime
193 self.data.csa_comps_prime[:, i] = self.mf.data.csa_prime[frq_num]
194
195
196 elif self.mf.data.data_types[i] == 'R2':
197 self.data.j_dip_comps_prime[:, i] = 4.0*self.data.djw[frq_num, 0] + self.data.djw[frq_num, 2] + 3.0*self.data.djw[frq_num, 1] + 6.0*self.data.djw[frq_num, 3] + 6.0*self.data.djw[frq_num, 4]
198 self.data.j_csa_comps_prime[:, i] = 4.0*self.data.djw[frq_num, 0] + 3.0*self.data.djw[frq_num, 1]
199 if match('m[34]', self.data.model):
200 self.data.rex_comps_prime[:, i] = (1e-8 * self.mf.data.frq[frq_num])**2
201 if match('m6', self.data.model):
202 self.data.dip_comps_prime[:, i] = self.mf.data.dipole_prime / 2.0
203 self.data.csa_comps_prime[:, i] = self.mf.data.csa_prime[frq_num] / 6.0
204
205
206 elif self.mf.data.data_types[i] == 'NOE':
207 self.data.j_dip_comps_prime[:, i] = 6.0*self.data.djw[frq_num, 4] - self.data.djw[frq_num, 2]
208 if match('m6', self.data.model):
209 self.data.dip_comps_prime[:, i] = self.mf.data.dipole_prime
210
211
212 self.data.dri_prime = zeros((len(self.data.params), self.mf.data.num_ri), Float64)
213
214
215 for param in range(len(self.data.ri_param_types)):
216
217 if self.data.ri_param_types[param] == 'Jj':
218 self.data.dri_prime[param] = self.data.dip_comps * self.data.j_dip_comps_prime[param] + self.data.csa_comps * self.data.j_csa_comps_prime[param]
219
220
221 elif self.data.ri_param_types[param] == 'Rex':
222 self.data.dri_prime[param] = self.data.rex_comps_prime[param]
223
224
225 elif self.data.ri_param_types[param] == 'CSA':
226 self.data.dri_prime[param] = self.data.csa_comps_prime[param] * self.data.j_csa_comps
227
228
229 elif self.data.ri_param_types[param] == 'r':
230 self.data.dri_prime[param] = self.data.dip_comps_prime[param] * self.data.j_dip_comps
231