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

Source Code for Module maths_fns.geometry

  1  ############################################################################### 
  2  #                                                                             # 
  3  # Copyright (C) 2004 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  # Axially symmetric delta equation. 
 28  ################################### 
 29   
30 -def calc_axial_geom(data, diff_data):
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 # The unit Dpar vector. 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 # Delta. 51 data.delta = dot(data.xh_unit_vector, diff_data.dpar)
52 53 54 55 # Axially symmetric delta gradient. 56 ################################### 57
58 -def calc_axial_dgeom(data, diff_data):
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 # The theta partial derivative of the unit Dpar vector. 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 # The phi partial derivative of the unit Dpar vector. 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 # Delta gradient. 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 # Axially symmetric delta Hessian. 93 ################################## 94
95 -def calc_axial_d2geom(data, diff_data):
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 # The theta-theta second partial derivative of the unit Dpar vector. 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 # The theta-phi second partial derivative of the unit Dpar vector. 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 # The phi-phi second partial derivative of the unit Dpar vector. 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 # delta Hessian. 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 # Anisotropic delta equations. 142 ############################## 143
144 -def calc_aniso_geom(data, diff_data):
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 # Trig. 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 # The unit Dx vector. 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 # The unit Dy vector. 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 # The unit Dz vector. 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 # Deltas 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 # Anisotropic delta gradient. 221 ############################# 222
223 -def calc_aniso_dgeom(data, diff_data):
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 # Dx gradient 293 ############# 294 295 # The alpha partial derivative of the unit Dx vector. 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 # The beta partial derivative of the unit Dx vector. 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 # The gamma partial derivative of the unit Dx vector. 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 # Dy gradient 311 ############# 312 313 # The alpha partial derivative of the unit Dy vector. 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 # The beta partial derivative of the unit Dy vector. 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 # The gamma partial derivative of the unit Dy vector. 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 # Dz gradient 329 ############# 330 331 # The beta partial derivative of the unit Dz vector. 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 # The gamma partial derivative of the unit Dz vector. 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 # Delta gradients 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 # Anisotropic delta Hessian. 358 ############################ 359
360 -def calc_aniso_d2geom(data, diff_data):
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 # Dx Hessian 484 ############ 485 486 # The alpha-alpha second partial derivative of the unit Dx vector. 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 # The alpha-beta second partial derivative of the unit Dx vector. 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 # The alpha-gamma second partial derivative of the unit Dx vector. 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 # The beta-beta second partial derivative of the unit Dx vector. 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 # The beta-gamma second partial derivative of the unit Dx vector. 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 # The gamma-gamma second partial derivative of the unit Dx vector. 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 # Dy Hessian 516 ############ 517 518 # The alpha-alpha second partial derivative of the unit Dy vector. 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 # The alpha-beta second partial derivative of the unit Dy vector. 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 # The alpha-gamma second partial derivative of the unit Dy vector. 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 # The beta-beta second partial derivative of the unit Dy vector. 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 # The beta-gamma second partial derivative of the unit Dy vector. 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 # The gamma-gamma second partial derivative of the unit Dy vector. 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 # Dz Hessian 547 ############ 548 549 # The beta-beta second partial derivative of the unit Dz vector. 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 # The beta-gamma second partial derivative of the unit Dz vector. 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 # The gamma partial derivative of the unit Dz vector. 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 # Delta Hessians 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