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  from Numeric import dot 
 24  from math import cos, sin 
 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