Package maths_fns :: Module direction_cosine
[hide private]
[frames] | no frames]

Source Code for Module maths_fns.direction_cosine

  1  ############################################################################### 
  2  #                                                                             # 
  3  # Copyright (C) 2004-2005 Edward d'Auvergne                                   # 
  4  #                                                                             # 
  5  # This file is part of the program relax.                                     # 
  6  #                                                                             # 
  7  # relax is free software; you can redistribute it and/or modify               # 
  8  # it under the terms of the GNU General Public License as published by        # 
  9  # the Free Software Foundation; either version 2 of the License, or           # 
 10  # (at your option) any later version.                                         # 
 11  #                                                                             # 
 12  # relax is distributed in the hope that it will be useful,                    # 
 13  # but WITHOUT ANY WARRANTY; without even the implied warranty of              # 
 14  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               # 
 15  # GNU General Public License for more details.                                # 
 16  #                                                                             # 
 17  # You should have received a copy of the GNU General Public License           # 
 18  # along with relax; if not, write to the Free Software                        # 
 19  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA   # 
 20  #                                                                             # 
 21  ############################################################################### 
 22   
 23  # Python module imports. 
 24  from math import cos, sin 
 25  from numpy import dot 
 26   
 27   
 28   
 29  ############ 
 30  # Spheroid # 
 31  ############ 
 32   
 33   
 34  # Spheroid direction cosine equation. 
 35  ##################################### 
 36   
37 -def calc_spheroid_di(data, diff_data):
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 # Components. 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 # The unit Dpar vector. 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 # Direction cosine. 64 data.dz = dot(data.xh_unit_vector, diff_data.dpar)
65 66 67 68 # Spheroid direction cosine gradient. 69 ##################################### 70
71 -def calc_spheroid_ddi(data, diff_data):
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 # The theta partial derivative of the unit Dpar vector. 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 # The phi partial derivative of the unit Dpar vector. 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 # Direction cosine gradient. 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 # Spheroid direction cosine Hessian. 106 #################################### 107
108 -def calc_spheroid_d2di(data, diff_data):
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 # The theta-theta second partial derivative of the unit Dpar vector. 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 # The theta-phi second partial derivative of the unit Dpar vector. 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 # The phi-phi second partial derivative of the unit Dpar vector. 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 # Direction cosine Hessian. 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 # Ellipsoid # 157 ############# 158 159 160 # Ellipsoid direction cosine equations. 161 ####################################### 162
163 -def calc_ellipsoid_di(data, diff_data):
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 # Trig. 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 # The unit Dx vector. 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 # The unit Dy vector. 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 # The unit Dz vector. 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 # Direction cosines. 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 # Ellipsoid direction cosine gradient. 240 ###################################### 241
242 -def calc_ellipsoid_ddi(data, diff_data):
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 # Dx gradient 312 ############# 313 314 # The alpha partial derivative of the unit Dx vector. 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 # The beta partial derivative of the unit Dx vector. 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 # The gamma partial derivative of the unit Dx vector. 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 # Dy gradient 330 ############# 331 332 # The alpha partial derivative of the unit Dy vector. 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 # The beta partial derivative of the unit Dy vector. 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 # The gamma partial derivative of the unit Dy vector. 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 # Dz gradient 348 ############# 349 350 # The beta partial derivative of the unit Dz vector. 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 # The gamma partial derivative of the unit Dz vector. 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 # Direction cosine gradients 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 # Ellipsoid direction cosine Hessian. 377 ##################################### 378
379 -def calc_ellipsoid_d2di(data, diff_data):
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 # Dx Hessian 503 ############ 504 505 # The alpha-alpha second partial derivative of the unit Dx vector. 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 # The alpha-beta second partial derivative of the unit Dx vector. 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 # The alpha-gamma second partial derivative of the unit Dx vector. 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 # The beta-beta second partial derivative of the unit Dx vector. 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 # The beta-gamma second partial derivative of the unit Dx vector. 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 # The gamma-gamma second partial derivative of the unit Dx vector. 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 # Dy Hessian 534 ############ 535 536 # The alpha-alpha second partial derivative of the unit Dy vector. 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 # The alpha-beta second partial derivative of the unit Dy vector. 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 # The alpha-gamma second partial derivative of the unit Dy vector. 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 # The beta-beta second partial derivative of the unit Dy vector. 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 # The beta-gamma second partial derivative of the unit Dy vector. 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 # The gamma-gamma second partial derivative of the unit Dy vector. 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 # Dz Hessian 565 ############ 566 567 # The beta-beta second partial derivative of the unit Dz vector. 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 # The beta-gamma second partial derivative of the unit Dz vector. 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 # The gamma partial derivative of the unit Dz vector. 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 # Direction cosine Hessians 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