1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 from Numeric import dot
24 from math import cos, sin
25
26
27
28
29
31 """Function for calculating the dot product XH . Dpar.
32
33 Delta is the dot product between the unit bond vector and the unit vector along Dpar. The
34 equation is:
35
36 delta = XH . Dpar
37
38 The unit Dpar vector is:
39
40 | sin(theta) * cos(phi) |
41 Dpar = | sin(theta) * sin(phi) |
42 | cos(theta) |
43 """
44
45
46 diff_data.dpar[0] = sin(diff_data.params[2]) * cos(diff_data.params[3])
47 diff_data.dpar[1] = sin(diff_data.params[2]) * sin(diff_data.params[3])
48 diff_data.dpar[2] = cos(diff_data.params[2])
49
50
51 data.delta = dot(data.xh_unit_vector, diff_data.dpar)
52
53
54
55
56
57
59 """Function for calculating the partial derivatives of the dot product XH . Dpar.
60
61 The theta partial derivative of the unit Dpar vector is:
62
63 dDpar | cos(theta) * cos(phi) |
64 ------ = | cos(theta) * sin(phi) |
65 dtheta | -sin(theta) |
66
67 The phi partial derivative of the unit Dpar vector is:
68
69 dDpar | -sin(theta) * sin(phi) |
70 ----- = | sin(theta) * cos(phi) |
71 dphi | 0 |
72
73 Psi is the diffusion parameter set {Dper, Dpar, theta, phi}
74 """
75
76
77 diff_data.dpar_dtheta[0] = cos(diff_data.params[2]) * cos(diff_data.params[3])
78 diff_data.dpar_dtheta[1] = cos(diff_data.params[2]) * sin(diff_data.params[3])
79 diff_data.dpar_dtheta[2] = -sin(diff_data.params[2])
80
81
82 diff_data.dpar_dphi[0] = -sin(diff_data.params[2]) * sin(diff_data.params[3])
83 diff_data.dpar_dphi[1] = sin(diff_data.params[2]) * cos(diff_data.params[3])
84 diff_data.dpar_dphi[2] = 0.0
85
86
87 data.ddelta_dpsi[0] = dot(data.xh_unit_vector, diff_data.dpar_dtheta)
88 data.ddelta_dpsi[1] = dot(data.xh_unit_vector, diff_data.dpar_dphi)
89
90
91
92
93
94
96 """Function for calculating the second partial derivatives of the dot product XH . Dpar.
97
98 The theta-theta second partial derivative of the unit Dpar vector is:
99
100 d2Dpar | -sin(theta) * cos(phi) |
101 ------- = | -sin(theta) * sin(phi) |
102 dtheta2 | -cos(theta) |
103
104 The theta-phi second partial derivative of the unit Dpar vector is:
105
106 d2Dpar | -cos(theta) * sin(phi) |
107 ----------- = | cos(theta) * cos(phi) |
108 dtheta.dphi | 0 |
109
110 The phi-phi second partial derivative of the unit Dpar vector is:
111
112 dDpar | -sin(theta) * cos(phi) |
113 ----- = | -sin(theta) * sin(phi) |
114 dphi2 | 0 |
115
116 Psi is the diffusion parameter set {Dper, Dpar, theta, phi}
117 """
118
119
120 diff_data.dpar_dtheta2[0] = -sin(diff_data.params[2]) * cos(diff_data.params[3])
121 diff_data.dpar_dtheta2[1] = -sin(diff_data.params[2]) * sin(diff_data.params[3])
122 diff_data.dpar_dtheta2[2] = -cos(diff_data.params[2])
123
124
125 diff_data.dpar_dthetadphi[0] = -cos(diff_data.params[2]) * sin(diff_data.params[3])
126 diff_data.dpar_dthetadphi[1] = cos(diff_data.params[2]) * cos(diff_data.params[3])
127 diff_data.dpar_dthetadphi[2] = 0.0
128
129
130 diff_data.dpar_dphi2[0] = -sin(diff_data.params[2]) * cos(diff_data.params[3])
131 diff_data.dpar_dphi2[1] = -sin(diff_data.params[2]) * sin(diff_data.params[3])
132 diff_data.dpar_dphi2[2] = 0.0
133
134
135 data.d2delta_dpsi2[0, 0] = dot(data.xh_unit_vector, diff_data.dpar_dtheta2)
136 data.d2delta_dpsi2[0, 1] = data.d2delta_dpsi2[1, 0] = dot(data.xh_unit_vector, diff_data.dpar_dthetadphi)
137 data.d2delta_dpsi2[1, 1] = dot(data.xh_unit_vector, diff_data.dpar_dphi2)
138
139
140
141
142
143
145 """Function for calculating delta_alpha, delta_beta, and delta_gamma.
146
147 Deltas
148 ~~~~~~
149
150 delta_alpha is the dot product between the unit bond vector and the unit vector along Dx. The
151 equation is:
152
153 delta_alpha = XH . Dx
154
155 delta_beta is the dot product between the unit bond vector and the unit vector along Dy. The
156 equation is:
157
158 delta_beta = XH . Dy
159
160 delta_gamma is the dot product between the unit bond vector and the unit vector along Dz. The
161 equation is:
162
163 delta_gamma = XH . Dz
164
165
166 Unit vectors
167 ~~~~~~~~~~~~
168
169 The unit Dx vector is:
170
171 | -sin(alpha) * sin(gamma) + cos(alpha) * cos(beta) * cos(gamma) |
172 Dx = | -sin(alpha) * cos(gamma) - cos(alpha) * cos(beta) * sin(gamma) |
173 | cos(alpha) * sin(beta) |
174
175 The unit Dy vector is:
176
177 | cos(alpha) * sin(gamma) + sin(alpha) * cos(beta) * cos(gamma) |
178 Dy = | cos(alpha) * cos(gamma) - sin(alpha) * cos(beta) * sin(gamma) |
179 | sin(alpha) * sin(beta) |
180
181 The unit Dz vector is:
182
183 | -sin(beta) * cos(gamma) |
184 Dz = | sin(beta) * sin(gamma) |
185 | cos(beta) |
186
187 """
188
189
190 data.sin_a = sin(diff_data.params[3])
191 data.sin_b = sin(diff_data.params[4])
192 data.sin_g = sin(diff_data.params[5])
193
194 data.cos_a = cos(diff_data.params[3])
195 data.cos_b = cos(diff_data.params[4])
196 data.cos_g = cos(diff_data.params[5])
197
198
199 diff_data.dx[0] = -data.sin_a * data.sin_g + data.cos_a * data.cos_b * data.cos_g
200 diff_data.dx[1] = -data.sin_a * data.cos_g - data.cos_a * data.cos_b * data.sin_g
201 diff_data.dx[2] = data.cos_a * data.sin_b
202
203
204 diff_data.dy[0] = data.cos_a * data.sin_g + data.sin_a * data.cos_b * data.cos_g
205 diff_data.dy[1] = data.cos_a * data.cos_g - data.sin_a * data.cos_b * data.sin_g
206 diff_data.dy[2] = data.sin_a * data.sin_b
207
208
209 diff_data.dz[0] = -data.sin_b * data.cos_g
210 diff_data.dz[1] = data.sin_b * data.sin_g
211 diff_data.dz[2] = data.cos_b
212
213
214 data.delta_alpha = dot(data.xh_unit_vector, diff_data.dx)
215 data.delta_beta = dot(data.xh_unit_vector, diff_data.dy)
216 data.delta_gamma = dot(data.xh_unit_vector, diff_data.dz)
217
218
219
220
221
222
224 """Function for calculating the partial derivative of delta_alpha, delta_beta, and delta_gamma.
225
226 Dx gradient
227 ~~~~~~~~~~~
228
229 The alpha partial derivative of the unit Dx vector is:
230
231 dDx | -cos(alpha) * sin(gamma) - sin(alpha) * cos(beta) * cos(gamma) |
232 ------ = | -cos(alpha) * cos(gamma) + sin(alpha) * cos(beta) * sin(gamma) |
233 dalpha | -sin(alpha) * sin(beta) |
234
235 The beta partial derivative of the unit Dx vector is:
236
237 dDx | -cos(alpha) * sin(beta) * cos(gamma) |
238 ----- = | cos(alpha) * sin(beta) * sin(gamma) |
239 dbeta | cos(alpha) * cos(beta) |
240
241 The gamma partial derivative of the unit Dx vector is:
242
243 dDx | -sin(alpha) * cos(gamma) - cos(alpha) * cos(beta) * sin(gamma) |
244 ------ = | sin(alpha) * sin(gamma) - cos(alpha) * cos(beta) * cos(gamma) |
245 dgamma | 0 |
246
247
248 Dy gradient
249 ~~~~~~~~~~~
250
251 The alpha partial derivative of the unit Dy vector is:
252
253 dDy | -sin(alpha) * sin(gamma) + cos(alpha) * cos(beta) * cos(gamma) |
254 ------ = | -sin(alpha) * cos(gamma) - cos(alpha) * cos(beta) * sin(gamma) |
255 dalpha | cos(alpha) * sin(beta) |
256
257 The beta partial derivative of the unit Dy vector is:
258
259 dDy | -sin(alpha) * sin(beta) * cos(gamma) |
260 ----- = | sin(alpha) * sin(beta) * sin(gamma) |
261 dbeta | sin(alpha) * cos(beta) |
262
263 The gamma partial derivative of the unit Dy vector is:
264
265 dDy | cos(alpha) * cos(gamma) - sin(alpha) * cos(beta) * sin(gamma) |
266 ------ = | -cos(alpha) * sin(gamma) - sin(alpha) * cos(beta) * cos(gamma) |
267 dgamma | 0 |
268
269
270 Dz gradient
271 ~~~~~~~~~~~
272
273 The alpha partial derivative of the unit Dz vector is:
274
275 dDz | 0 |
276 ------ = | 0 |
277 dalpha | 0 |
278
279 The beta partial derivative of the unit Dz vector is:
280
281 dDz | -cos(beta) * cos(gamma) |
282 ----- = | cos(beta) * sin(gamma) |
283 dbeta | -sin(beta) |
284
285 The gamma partial derivative of the unit Dz vector is:
286
287 dDz | sin(beta) * sin(gamma) |
288 ------ = | sin(beta) * cos(gamma) |
289 dgamma | 0 |
290 """
291
292
293
294
295
296 diff_data.ddx_dalpha[0] = -data.cos_a * data.sin_g - data.sin_a * data.cos_b * data.cos_g
297 diff_data.ddx_dalpha[1] = -data.cos_a * data.cos_g + data.sin_a * data.cos_b * data.sin_g
298 diff_data.ddx_dalpha[2] = -data.sin_a * data.sin_b
299
300
301 diff_data.ddx_dbeta[0] = -data.cos_a * data.sin_b * data.cos_g
302 diff_data.ddx_dbeta[1] = data.cos_a * data.sin_b * data.sin_g
303 diff_data.ddx_dbeta[2] = data.cos_a * data.cos_b
304
305
306 diff_data.ddx_dgamma[0] = -data.sin_a * data.cos_g - data.cos_a * data.cos_b * data.sin_g
307 diff_data.ddx_dgamma[1] = data.sin_a * data.sin_g - data.cos_a * data.cos_b * data.cos_g
308
309
310
311
312
313
314 diff_data.ddy_dalpha[0] = -data.sin_a * data.sin_g + data.cos_a * data.cos_b * data.cos_g
315 diff_data.ddy_dalpha[1] = -data.sin_a * data.cos_g - data.cos_a * data.cos_b * data.sin_g
316 diff_data.ddy_dalpha[2] = data.cos_a * data.sin_b
317
318
319 diff_data.ddy_dbeta[0] = -data.sin_a * data.sin_b * data.cos_g
320 diff_data.ddy_dbeta[1] = data.sin_a * data.sin_b * data.sin_g
321 diff_data.ddy_dbeta[2] = data.sin_a * data.cos_b
322
323
324 diff_data.ddy_dgamma[0] = data.cos_a * data.cos_g - data.sin_a * data.cos_b * data.sin_g
325 diff_data.ddy_dgamma[1] = -data.cos_a * data.sin_g - data.sin_a * data.cos_b * data.cos_g
326
327
328
329
330
331
332 diff_data.ddz_dbeta[0] = -data.cos_b * data.cos_g
333 diff_data.ddz_dbeta[1] = data.cos_b * data.sin_g
334 diff_data.ddz_dbeta[2] = -data.sin_b
335
336
337 diff_data.ddz_dgamma[0] = data.sin_b * data.sin_g
338 diff_data.ddz_dgamma[1] = data.sin_b * data.cos_g
339
340
341
342
343
344 data.ddelta_alpha_dpsi[0] = dot(data.xh_unit_vector, diff_data.ddx_dalpha)
345 data.ddelta_alpha_dpsi[1] = dot(data.xh_unit_vector, diff_data.ddx_dbeta)
346 data.ddelta_alpha_dpsi[2] = dot(data.xh_unit_vector, diff_data.ddx_dgamma)
347
348 data.ddelta_beta_dpsi[0] = dot(data.xh_unit_vector, diff_data.ddy_dalpha)
349 data.ddelta_beta_dpsi[1] = dot(data.xh_unit_vector, diff_data.ddy_dbeta)
350 data.ddelta_beta_dpsi[2] = dot(data.xh_unit_vector, diff_data.ddy_dgamma)
351
352 data.ddelta_gamma_dpsi[1] = dot(data.xh_unit_vector, diff_data.ddz_dbeta)
353 data.ddelta_gamma_dpsi[2] = dot(data.xh_unit_vector, diff_data.ddz_dgamma)
354
355
356
357
358
359
361 """Function calculating the second partial derivatives of delta_alpha, delta_beta, delta_gamma.
362
363 Dx Hessian
364 ~~~~~~~~~~
365
366 The alpha-alpha second partial derivative of the unit Dx vector is:
367
368 d2Dx | sin(alpha) * sin(gamma) - cos(alpha) * cos(beta) * cos(gamma) |
369 ------- = | sin(alpha) * cos(gamma) + cos(alpha) * cos(beta) * sin(gamma) |
370 dalpha2 | -cos(alpha) * sin(beta) |
371
372 The alpha-beta second partial derivative of the unit Dx vector is:
373
374 d2Dx | sin(alpha) * sin(beta) * cos(gamma) |
375 ------------ = | -sin(alpha) * sin(beta) * sin(gamma) |
376 dalpha.dbeta | -sin(alpha) * cos(beta) |
377
378 The alpha-gamma second partial derivative of the unit Dx vector is:
379
380 d2Dx | -cos(alpha) * cos(gamma) + sin(alpha) * cos(beta) * sin(gamma) |
381 ------------- = | cos(alpha) * sin(gamma) + sin(alpha) * cos(beta) * cos(gamma) |
382 dalpha.dgamma | 0 |
383
384 The beta-beta second partial derivative of the unit Dx vector is:
385
386 d2Dx | -cos(alpha) * cos(beta) * cos(gamma) |
387 ------ = | cos(alpha) * cos(beta) * sin(gamma) |
388 dbeta2 | -cos(alpha) * sin(beta) |
389
390 The beta-gamma second partial derivative of the unit Dx vector is:
391
392 d2Dx | cos(alpha) * sin(beta) * sin(gamma) |
393 ------------ = | cos(alpha) * sin(beta) * cos(gamma) |
394 dbeta.dgamma | 0 |
395
396 The gamma-gamma second partial derivative of the unit Dx vector is:
397
398 d2Dx | sin(alpha) * sin(gamma) - cos(alpha) * cos(beta) * cos(gamma) |
399 ------- = | sin(alpha) * cos(gamma) + cos(alpha) * cos(beta) * sin(gamma) |
400 dgamma2 | 0 |
401
402
403 Dy Hessian
404 ~~~~~~~~~~
405
406 The alpha-alpha second partial derivative of the unit Dy vector is:
407
408 d2Dy | -cos(alpha) * sin(gamma) - sin(alpha) * cos(beta) * cos(gamma) |
409 ------- = | -cos(alpha) * cos(gamma) + sin(alpha) * cos(beta) * sin(gamma) |
410 dalpha2 | -sin(alpha) * sin(beta) |
411
412 The alpha-beta second partial derivative of the unit Dy vector is:
413
414 d2Dy | -cos(alpha) * sin(beta) * cos(gamma) |
415 ------------ = | cos(alpha) * sin(beta) * sin(gamma) |
416 dalpha.dbeta | cos(alpha) * cos(beta) |
417
418 The alpha-gamma second partial derivative of the unit Dy vector is:
419
420 d2Dy | -sin(alpha) * cos(gamma) - cos(alpha) * cos(beta) * sin(gamma) |
421 ------------- = | sin(alpha) * sin(gamma) - cos(alpha) * cos(beta) * cos(gamma) |
422 dalpha.dgamma | 0 |
423
424 The beta-beta second partial derivative of the unit Dy vector is:
425
426 d2Dy | -sin(alpha) * cos(beta) * cos(gamma) |
427 ------ = | sin(alpha) * cos(beta) * sin(gamma) |
428 dbeta2 | -sin(alpha) * sin(beta) |
429
430 The beta-gamma second partial derivative of the unit Dy vector is:
431
432 d2Dy | sin(alpha) * sin(beta) * sin(gamma) |
433 ------------ = | sin(alpha) * sin(beta) * cos(gamma) |
434 dbeta.dgamma | 0 |
435
436 The gamma-gamma second partial derivative of the unit Dy vector is:
437
438 d2Dy | -cos(alpha) * sin(gamma) - sin(alpha) * cos(beta) * cos(gamma) |
439 ------- = | -cos(alpha) * cos(gamma) + sin(alpha) * cos(beta) * sin(gamma) |
440 dgamma2 | 0 |
441
442
443 Dz Hessian
444 ~~~~~~~~~~
445
446 The alpha-alpha second partial derivative of the unit Dz vector is:
447
448 d2Dz | 0 |
449 ------- = | 0 |
450 dalpha2 | 0 |
451
452 The alpha-beta second partial derivative of the unit Dz vector is:
453
454 d2Dz | 0 |
455 ------------ = | 0 |
456 dalpha.dbeta | 0 |
457
458 The alpha-gamma second partial derivative of the unit Dz vector is:
459
460 d2Dz | 0 |
461 ------------- = | 0 |
462 dalpha.dgamma | 0 |
463
464 The beta-beta second partial derivative of the unit Dz vector is:
465
466 d2Dz | sin(beta) * cos(gamma) |
467 ------ = | -sin(beta) * sin(gamma) |
468 dbeta2 | -cos(beta) |
469
470 The beta-gamma second partial derivative of the unit Dz vector is:
471
472 d2Dz | cos(beta) * sin(gamma) |
473 ------------ = | cos(beta) * cos(gamma) |
474 dbeta.dgamma | 0 |
475
476 The gamma-gamma second partial derivative of the unit Dz vector is:
477
478 d2Dz | sin(beta) * cos(gamma) |
479 ------- = | -sin(beta) * sin(gamma) |
480 dgamma2 | 0 |
481 """
482
483
484
485
486
487 diff_data.d2dx_dalpha2[0] = data.sin_a * data.sin_g - data.cos_a * data.cos_b * data.cos_g
488 diff_data.d2dx_dalpha2[1] = data.sin_a * data.cos_g + data.cos_a * data.cos_b * data.sin_g
489 diff_data.d2dx_dalpha2[2] = -data.cos_a * data.sin_b
490
491
492 diff_data.d2dx_dalpha_dbeta[0] = data.sin_a * data.sin_b * data.cos_g
493 diff_data.d2dx_dalpha_dbeta[1] = -data.sin_a * data.sin_b * data.sin_g
494 diff_data.d2dx_dalpha_dbeta[2] = -data.sin_a * data.cos_b
495
496
497 diff_data.d2dx_dalpha_dgamma[0] = -data.cos_a * data.cos_g + data.sin_a * data.cos_b * data.sin_g
498 diff_data.d2dx_dalpha_dgamma[1] = data.cos_a * data.sin_g + data.sin_a * data.cos_b * data.cos_g
499 diff_data.d2dx_dalpha_dgamma[2] = -data.sin_a * data.cos_b
500
501
502 diff_data.d2dx_dbeta2[0] = -data.cos_a * data.cos_b * data.cos_g
503 diff_data.d2dx_dbeta2[1] = data.cos_a * data.cos_b * data.sin_g
504 diff_data.d2dx_dbeta2[2] = -data.cos_a * data.sin_b
505
506
507 diff_data.d2dx_dbeta_dgamma[0] = data.cos_a * data.sin_b * data.sin_g
508 diff_data.d2dx_dbeta_dgamma[1] = data.cos_a * data.sin_b * data.cos_g
509
510
511 diff_data.d2dx_dgamma2[0] = data.sin_a * data.sin_g - data.cos_a * data.cos_b * data.cos_g
512 diff_data.d2dx_dgamma2[1] = data.sin_a * data.cos_g + data.cos_a * data.cos_b * data.sin_g
513
514
515
516
517
518
519 diff_data.d2dy_dalpha2[0] = -data.cos_a * data.sin_g - data.sin_a * data.cos_b * data.cos_g
520 diff_data.d2dy_dalpha2[1] = -data.cos_a * data.cos_g + data.sin_a * data.cos_b * data.sin_g
521 diff_data.d2dy_dalpha2[2] = -data.sin_a * data.sin_b
522
523
524 diff_data.d2dy_dalpha_dbeta[0] = -data.cos_a * data.sin_b * data.cos_g
525 diff_data.d2dy_dalpha_dbeta[1] = data.cos_a * data.sin_b * data.sin_g
526 diff_data.d2dy_dalpha_dbeta[2] = data.cos_a * data.cos_b
527
528
529 diff_data.d2dy_dalpha_dgamma[0] = -data.sin_a * data.cos_g - data.cos_a * data.cos_b * data.sin_g
530 diff_data.d2dy_dalpha_dgamma[1] = data.sin_a * data.sin_g - data.cos_a * data.cos_b * data.cos_g
531
532
533 diff_data.d2dy_dbeta2[0] = -data.sin_a * data.cos_b * data.cos_g
534 diff_data.d2dy_dbeta2[1] = data.sin_a * data.cos_b * data.sin_g
535 diff_data.d2dy_dbeta2[2] = -data.sin_a * data.sin_b
536
537
538 diff_data.d2dy_dbeta_dgamma[0] = data.sin_a * data.sin_b * data.sin_g
539 diff_data.d2dy_dbeta_dgamma[1] = data.sin_a * data.sin_b * data.cos_g
540
541
542 diff_data.d2dy_dgamma2[0] = -data.cos_a * data.sin_g - data.sin_a * data.cos_b * data.cos_g
543 diff_data.d2dy_dgamma2[1] = -data.cos_a * data.cos_g + data.sin_a * data.cos_b * data.sin_g
544
545
546
547
548
549
550 diff_data.d2dz_dbeta2[0] = data.sin_b * data.cos_g
551 diff_data.d2dz_dbeta2[1] = -data.sin_b * data.sin_g
552 diff_data.d2dz_dbeta2[2] = -data.cos_b
553
554
555 diff_data.d2dz_dbeta_dgamma[0] = data.cos_b * data.sin_g
556 diff_data.d2dz_dbeta_dgamma[1] = data.cos_b * data.cos_g
557
558
559 diff_data.d2dz_dgamma2[0] = data.sin_b * data.cos_g
560 diff_data.d2dz_dgamma2[1] = -data.sin_b * data.sin_g
561
562
563
564
565
566 data.d2delta_alpha_dpsi2[0, 0] = dot(data.xh_unit_vector, diff_data.d2dx_dalpha2)
567 data.d2delta_alpha_dpsi2[0, 1] = data.d2delta_alpha_dpsi2[1, 0] = dot(data.xh_unit_vector, diff_data.d2dx_dalpha_dbeta)
568 data.d2delta_alpha_dpsi2[0, 2] = data.d2delta_alpha_dpsi2[2, 0] = dot(data.xh_unit_vector, diff_data.d2dx_dalpha_dgamma)
569 data.d2delta_alpha_dpsi2[1, 1] = dot(data.xh_unit_vector, diff_data.d2dx_dbeta2)
570 data.d2delta_alpha_dpsi2[1, 2] = data.d2delta_alpha_dpsi2[2, 1] = dot(data.xh_unit_vector, diff_data.d2dx_dbeta_dgamma)
571 data.d2delta_alpha_dpsi2[2, 2] = dot(data.xh_unit_vector, diff_data.d2dx_dgamma2)
572
573 data.d2delta_beta_dpsi2[0, 0] = dot(data.xh_unit_vector, diff_data.d2dy_dalpha2)
574 data.d2delta_beta_dpsi2[0, 1] = data.d2delta_alpha_dpsi2[1, 0] = dot(data.xh_unit_vector, diff_data.d2dy_dalpha_dbeta)
575 data.d2delta_beta_dpsi2[0, 2] = data.d2delta_alpha_dpsi2[2, 0] = dot(data.xh_unit_vector, diff_data.d2dy_dalpha_dgamma)
576 data.d2delta_beta_dpsi2[1, 1] = dot(data.xh_unit_vector, diff_data.d2dy_dbeta2)
577 data.d2delta_beta_dpsi2[1, 2] = data.d2delta_alpha_dpsi2[2, 1] = dot(data.xh_unit_vector, diff_data.d2dy_dbeta_dgamma)
578 data.d2delta_beta_dpsi2[2, 2] = dot(data.xh_unit_vector, diff_data.d2dy_dgamma2)
579
580 data.d2delta_gamma_dpsi2[0, 0] = dot(data.xh_unit_vector, diff_data.d2dz_dalpha2)
581 data.d2delta_gamma_dpsi2[0, 1] = data.d2delta_alpha_dpsi2[1, 0] = dot(data.xh_unit_vector, diff_data.d2dz_dalpha_dbeta)
582 data.d2delta_gamma_dpsi2[0, 2] = data.d2delta_alpha_dpsi2[2, 0] = dot(data.xh_unit_vector, diff_data.d2dz_dalpha_dgamma)
583 data.d2delta_gamma_dpsi2[1, 1] = dot(data.xh_unit_vector, diff_data.d2dz_dbeta2)
584 data.d2delta_gamma_dpsi2[1, 2] = data.d2delta_alpha_dpsi2[2, 1] = dot(data.xh_unit_vector, diff_data.d2dz_dbeta_dgamma)
585 data.d2delta_gamma_dpsi2[2, 2] = dot(data.xh_unit_vector, diff_data.d2dz_dgamma2)
586