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