Package lib :: Package diffusion :: Module direction_cosine
[hide private]
[frames] | no frames]

Source Code for Module lib.diffusion.direction_cosine

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