1 from Numeric import Float64, zeros
2 from re import match
3
6 "Function for the calculation of the trasformed relaxation hessians."
7
8
10 """Function for the calculation of the trasformed relaxation hessians.
11
12 The trasformed relaxation hessians
13 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
14
15 Data structure: self.data.d2ri_prime
16 Dimension: 3D, (parameters, parameters, relaxation data)
17 Type: Numeric 3D matrix, Float64
18 Dependencies: self.data.jw, self.data.djw, self.data.d2jw
19 Required by: self.data.d2ri
20
21
22 Formulae (a hessian matrix is symmetric)
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 21 / mu0 \ 2 (gH.gN.h_bar)**2
41 d" = -- . | ---- | . ----------------
42 2 \ 4.pi / <r**8>
43
44
45 CSA
46 ~~~
47 (wN.csa)**2
48 c = -----------
49 3
50
51 2.wN**2.csa
52 c' = -----------
53 3
54
55 2.wN**2
56 c" = -------
57 3
58
59
60 R1()
61 ~~~~
62 J_R1_d = J(wH-wN) + 3J(wN) + 6J(wH+wN)
63
64 dJ(wH-wN) dJ(wN) dJ(wH+wN)
65 J_R1_d_prime = --------- + 3 . ------ + 6 . ---------
66 dJj dJj dJj
67
68 d2J(wH-wN) d2J(wN) d2J(wH+wN)
69 J_R1_d_2prime = ---------- + 3 . ------- + 6 . ----------
70 dJj.dJk dJj.dJk dJj.dJk
71
72
73 J_R1_c = J(wN)
74
75 dJ(wN)
76 J_R1_c_prime = ------
77 dJj
78
79 d2J(wN)
80 J_R1_c_2prime = -------
81 dJj.dJk
82
83
84 R2()
85 ~~~~
86 J_R2_d = 4J(0) + J(wH-wN) + 3J(wN) + 6J(wH) + 6J(wH+wN)
87
88 dJ(0) dJ(wH-wN) dJ(wN) dJ(wH) dJ(wH+wN)
89 J_R2_d_prime = 4 . ----- + --------- + 3 . ------ + 6 . ------ + 6 . ---------
90 dJj dJj dJj dJj dJj
91
92 d2J(0) d2J(wH-wN) d2J(wN) d2J(wH) d2J(wH+wN)
93 J_R2_d_2prime = 4 . ------- + ---------- + 3 . ------- + 6 . ------- + 6 . ----------
94 dJj.dJk dJj.dJk dJj.dJk dJj.dJk dJj.dJk
95
96
97 J_R2_c = 4J(0) + 3J(wN)
98
99 dJ(0) dJ(wN)
100 J_R2_c_prime = 4 . ----- + 3 . ------
101 dJj dJj
102
103 d2J(0) d2J(wN)
104 J_R2_c_2prime = 4 . ------- + 3 . -------
105 dJj.dJk dJj.dJk
106
107
108 sigma_noe()
109 ~~~~~~~~~~~
110 J_sigma_noe = 6J(wH+wN) - J(wH-wN)
111
112 dJ(wH+wN) dJ(wH-wN)
113 J_sigma_noe_prime = 6 . --------- - ---------
114 dJj dJj
115
116 d2J(wH+wN) d2J(wH-wN)
117 J_sigma_noe_2prime = 6 . ---------- - ----------
118 dJj.dJk dJj.dJk
119
120
121 Spectral density parameter - Spectral density parameter
122 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
123
124 d2R1()
125 ------- = d . J_R1_d_2prime + c . J_R1_c_2prime
126 dJj.dJk
127
128
129 d2R2() d c
130 ------- = - . J_R2_d_2prime + - . J_R2_c_2prime
131 dJj.dJk 2 6
132
133
134 d2sigma_noe()
135 ------------- = d . J_sigma_noe_2prime
136 dJj.dJk
137
138
139 Spectral density parameter - Chemical exchange
140 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
141
142 d2R1() d2R2() d2sigma_noe()
143 -------- = 0 , -------- = 0 , ------------- = 0
144 dJj.dRex dJj.dRex dJj.dRex
145
146
147 Spectral density parameter - CSA
148 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
149
150 d2R1()
151 -------- = c'. J_R1_c_prime
152 dJj.dcsa
153
154
155 d2R2() c'
156 -------- = - . J_R2_c_prime
157 dJj.dcsa 6
158
159
160 d2sigma_noe()
161 ------------- = 0
162 dJj.dcsa
163
164
165 Spectral density parameter - Bond length
166 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
167
168 d2R1()
169 ------ = d'. J_R1_d_prime
170 dJj.dr
171
172
173 d2R2() d'
174 ------ = - . J_R2_d_prime
175 dJj.dr 2
176
177
178 d2sigma_noe()
179 ------------- = d' . J_sigma_noe_prime
180 dJj.dr
181
182
183 Chemical exchange - Chemical exchange
184 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
185
186 d2R1() d2R2() d2sigma_noe()
187 ------- = 0 , ------- = 0 , ------------- = 0
188 dRex**2 dRex**2 dRex**2
189
190
191 Chemical exchange - CSA
192 ~~~~~~~~~~~~~~~~~~~~~~~
193
194 d2R1() d2R2() d2sigma_noe()
195 --------- = 0 , --------- = 0 , ------------- = 0
196 dRex.dcsa dRex.dcsa dRex.dcsa
197
198
199 Chemical exchange - Bond length
200 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
201
202 d2R1() d2R2() d2sigma_noe()
203 ------- = 0 , ------- = 0 , ------------- = 0
204 dRex.dr dRex.dr dRex.dr
205
206
207 CSA - CSA
208 ~~~~~~~~~
209
210 d2R1()
211 ------- = c" . J_R1_c
212 dcsa**2
213
214
215 d2R2() c"
216 ------- = - . J_R2_c
217 dcsa**2 6
218
219
220 d2sigma_noe()
221 ------------- = 0
222 dcsa**2
223
224
225 CSA - Bond length
226 ~~~~~~~~~~~~~~~~~
227
228 d2R1() d2R2() d2sigma_noe()
229 ------- = 0 , ------- = 0 , ------------- = 0
230 dcsa.dr dcsa.dr dcsa.dr
231
232
233 Bond length - Bond length
234 ~~~~~~~~~~~~~~~~~~~~~~~~~
235
236 d2R1()
237 ------ = d" . J_R1_d
238 dr**2
239
240
241 d2R2() d"
242 ------ = - . J_R2_d
243 dr**2 2
244
245
246 d2sigma_noe()
247 ------------- = d" . J_sigma_noe
248 dr**2
249
250 """
251
252
253 self.d2Jw()
254
255
256 self.data.j_dip_comps_2prime = zeros((len(self.data.params), len(self.data.params), self.mf.data.num_ri), Float64)
257 self.data.j_csa_comps_2prime = zeros((len(self.data.params), len(self.data.params), self.mf.data.num_ri), Float64)
258 if match('m6', self.data.model):
259 self.data.dip_comps_2prime = zeros((len(self.data.params), len(self.data.params), self.mf.data.num_ri), Float64)
260 self.data.csa_comps_2prime = zeros((len(self.data.params), len(self.data.params), self.mf.data.num_ri), Float64)
261
262
263 for i in range(self.mf.data.num_ri):
264 frq_num = self.mf.data.remap_table[i]
265
266
267 if self.mf.data.data_types[i] == 'R1':
268 self.data.j_dip_comps_2prime[:, :, i] = self.data.d2jw[frq_num, 2] + 3.0*self.data.d2jw[frq_num, 1] + 6.0*self.data.d2jw[frq_num, 4]
269 self.data.j_csa_comps_2prime[:, :, i] = self.data.d2jw[frq_num, 1]
270 if match('m6', self.data.model):
271 self.data.dip_comps_2prime[:, :, i] = self.mf.data.dipole_prime
272 self.data.csa_comps_2prime[:, :, i] = self.mf.data.csa_prime[frq_num]
273
274
275 elif self.mf.data.data_types[i] == 'R2':
276 self.data.j_dip_comps_2prime[:, :, i] = 4.0*self.data.d2jw[frq_num, 0] + self.data.d2jw[frq_num, 2] + 3.0*self.data.d2jw[frq_num, 1] + 6.0*self.data.d2jw[frq_num, 3] + 6.0*self.data.d2jw[frq_num, 4]
277 self.data.j_csa_comps_2prime[:, :, i] = 4.0*self.data.d2jw[frq_num, 0] + 3.0*self.data.d2jw[frq_num, 1]
278 if match('m6', self.data.model):
279 self.data.dip_comps_2prime[:, :, i] = self.mf.data.dipole_2prime / 2.0
280 self.data.csa_comps_2prime[:, :, i] = self.mf.data.csa_2prime[frq_num] / 6.0
281
282
283 elif self.mf.data.data_types[i] == 'NOE':
284 self.data.j_dip_comps_2prime[:, :, i] = 6.0*self.data.d2jw[frq_num, 4] - self.data.d2jw[frq_num, 2]
285 if match('m6', self.data.model):
286 self.data.dip_comps_2prime[:, :, i] = self.mf.data.dipole_2prime
287
288
289 self.data.d2ri_prime = zeros((len(self.data.params), len(self.data.params), self.mf.data.num_ri), Float64)
290
291
292 for param1 in range(len(self.data.ri_param_types)):
293 for param2 in range(param1 + 1):
294
295 if self.data.ri_param_types[param1] == 'Jj' and self.data.ri_param_types[param2] == 'Jj':
296 self.data.d2ri_prime[param1, param2] = self.data.dip_comps * self.data.j_dip_comps_2prime[param1, param2] + self.data.csa_comps * self.data.j_csa_comps_2prime[param1, param2]
297
298
299 elif (self.data.ri_param_types[param1] == 'Jj' and self.data.ri_param_types[param2] == 'CSA') \
300 or (self.data.ri_param_types[param1] == 'CSA' and self.data.ri_param_types[param2] == 'Jj'):
301
302 self.data.d2ri_prime[param1, param2] = self.data.csa_comps_prime * self.data.j_csa_comps_prime
303
304
305 elif (self.data.ri_param_types[param1] == 'Jj' and self.data.ri_param_types[param2] == 'r') \
306 or (self.data.ri_param_types[param1] == 'r' and self.data.ri_param_types[param2] == 'Jj'):
307
308 self.data.d2ri_prime[param1, param2] = self.data.dip_comps_prime * self.data.j_dip_comps_prime
309
310
311 elif self.data.ri_param_types[param1] == 'CSA' and self.data.ri_param_types[param2] == 'CSA':
312 self.data.d2ri_prime[param1, param2] = self.data.csa_comps_2prime * self.data.j_csa_comps
313
314
315 elif self.data.ri_param_types[param1] == 'r' and self.data.ri_param_types[param2] == 'r':
316 self.data.d2ri_prime[param1, param2] = self.data.csa_comps_2prime * self.data.j_csa_comps
317
318
319 else:
320 continue
321
322
323 if param1 != param2:
324 self.data.d2ri_prime[param2, param1] = self.data.d2ri_prime[param1, param2]
325