Package lib :: Package auto_relaxation :: Module ri_comps
[hide private]
[frames] | no frames]

Source Code for Module lib.auto_relaxation.ri_comps

   1  ############################################################################### 
   2  #                                                                             # 
   3  # Copyright (C) 2003-2012 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   
  23  # Constant formulae 
  24  # ================= 
  25  # 
  26  #    Dipolar constants 
  27  #    ================= 
  28  #                           1   / mu0  \ 2  (gH.gN.h_bar)**2 
  29  #        dip_const_func  =  - . | ---- |  . ---------------- 
  30  #                           4   \ 4.pi /         <r**6> 
  31  # 
  32  # 
  33  #                             3   / mu0  \ 2  (gH.gN.h_bar)**2 
  34  #        dip_const_grad  =  - - . | ---- |  . ---------------- 
  35  #                             2   \ 4.pi /         <r**7> 
  36  # 
  37  # 
  38  #                           21   / mu0  \ 2  (gH.gN.h_bar)**2 
  39  #        dip_const_hess  =  -- . | ---- |  . ---------------- 
  40  #                           2    \ 4.pi /         <r**8> 
  41  # 
  42  # 
  43  #    CSA constants 
  44  #    ============= 
  45  #                           (wN.csa)**2 
  46  #        csa_const_func  =  ----------- 
  47  #                                3 
  48  # 
  49  #                           2.wN**2.csa 
  50  #        csa_const_grad  =  ----------- 
  51  #                                3 
  52  # 
  53  #                           2.wN**2 
  54  #        csa_const_hess  =  ------- 
  55  #                              3 
  56  # 
  57  #    Rex constants 
  58  #    ============= 
  59  #        rex_const_func  =  rhoex * (2.pi.wH)**2 
  60  # 
  61  #        rex_const_grad  =  (2.pi.wH)**2 
  62  # 
  63  #        rex_const_hess  =  0 
  64  # 
  65  # 
  66  # Component formulae 
  67  # ================== 
  68  # 
  69  #    R1 components 
  70  #    ============= 
  71  # 
  72  #        Dipolar components 
  73  #        ================== 
  74  # 
  75  #            dip_R1_func     =  dip_const_func 
  76  # 
  77  #            dip_R1_grad     =  dip_const_grad 
  78  # 
  79  #            dip_R1_hess     =  dip_const_hess 
  80  # 
  81  # 
  82  #        Dipolar spectral density components 
  83  #        =================================== 
  84  # 
  85  #            dip_Jw_R1_func  =  J(wH-wN) + 3J(wN) + 6J(wH+wN) 
  86  # 
  87  #                               dJ(wH-wN)         dJ(wN)         dJ(wH+wN) 
  88  #            dip_Jw_R1_grad  =  ---------  +  3 . ------  +  6 . --------- 
  89  #                                  dJw             dJw              dJw 
  90  # 
  91  #                               d2J(wH-wN)          d2J(wN)          d2J(wH+wN) 
  92  #            dip_Jw_R1_hess  =  ----------  +  3 . ---------  +  6 . ---------- 
  93  #                               dJwi.dJwj          dJwi.dJwj         dJwi.dJwj 
  94  # 
  95  # 
  96  #        CSA components 
  97  #        ============== 
  98  # 
  99  #            csa_R1_func     =  csa_const_func 
 100  # 
 101  #            csa_R1_grad     =  csa_const_grad 
 102  # 
 103  #            csa_R1_hess     =  csa_const_hess 
 104  # 
 105  # 
 106  #        CSA spectral density components 
 107  #        =============================== 
 108  # 
 109  #            csa_Jw_R1_func  =  J(wN) 
 110  # 
 111  #                               dJ(wN) 
 112  #            csa_Jw_R1_grad  =  ------ 
 113  #                                dJw 
 114  # 
 115  #                                d2J(wN) 
 116  #            csa_Jw_R1_hess  =  --------- 
 117  #                               dJwi.dJwj 
 118  # 
 119  # 
 120  #        Rex components 
 121  #        ============== 
 122  # 
 123  #            rex_R1_func     =  0 
 124  # 
 125  #            rex_R1_grad     =  0 
 126  # 
 127  #            rex_R1_hess     =  0 
 128  # 
 129  # 
 130  #    R2 components 
 131  #    ============= 
 132  # 
 133  #        Dipolar components 
 134  #        ================== 
 135  # 
 136  #            dip_R2_func     =  dip_const_func / 2 
 137  # 
 138  #            dip_R2_grad     =  dip_const_grad / 2 
 139  # 
 140  #            dip_R2_hess     =  dip_const_hess / 2 
 141  # 
 142  # 
 143  #        Dipolar spectral density components 
 144  #        =================================== 
 145  # 
 146  #            dip_Jw_R2_func  =  4J(0) + J(wH-wN) + 3J(wN) + 6J(wH) + 6J(wH+wN) 
 147  # 
 148  #                                   dJ(0)     dJ(wH-wN)         dJ(wN)         dJ(wH)         dJ(wH+wN) 
 149  #            dip_Jw_R2_grad  =  4 . -----  +  ---------  +  3 . ------  +  6 . ------  +  6 . --------- 
 150  #                                    dJw         dJw             dJw            dJw              dJw 
 151  # 
 152  #                                     d2J(0)      d2J(wH-wN)          d2J(wN)           d2J(wH)          d2J(wH+wN) 
 153  #            dip_Jw_R2_hess  =  4 . ---------  +  ----------  +  3 . ---------  +  6 . ---------  +  6 . ---------- 
 154  #                                   dJwi.dJwj     dJwi.dJwj          dJwi.dJwj         dJwi.dJwj         dJwi.dJwj 
 155  # 
 156  # 
 157  #        CSA components 
 158  #        ============== 
 159  # 
 160  #            csa_R2_func     =  csa_const_func / 6 
 161  # 
 162  #            csa_R2_grad     =  csa_const_grad / 6 
 163  # 
 164  #            csa_R2_hess     =  csa_const_hess / 6 
 165  # 
 166  # 
 167  #        CSA spectral density components 
 168  #        =============================== 
 169  # 
 170  #            csa_Jw_R2_func  =  4J(0) + 3J(wN) 
 171  # 
 172  #                                   dJ(0)         dJ(wN) 
 173  #            csa_Jw_R2_grad  =  4 . -----  +  3 . ------ 
 174  #                                    dJw           dJw 
 175  # 
 176  #                                     d2J(0)           d2J(wN) 
 177  #            csa_Jw_R2_hess  =  4 . ---------  +  3 . --------- 
 178  #                                   dJwi.dJwj         dJwi.dJwj 
 179  # 
 180  # 
 181  #        Rex components 
 182  #        ============== 
 183  # 
 184  #            rex_R2_func     =  rex_const_func 
 185  # 
 186  #            rex_R2_grad     =  rex_const_grad 
 187  # 
 188  #            rex_R2_hess     =  0 
 189  # 
 190  # 
 191  #    sigma_noe components 
 192  #    ==================== 
 193  # 
 194  #        Dipolar components 
 195  #        ================== 
 196  # 
 197  #            dip_sigma_noe_func      =  dip_const_func 
 198  # 
 199  #            dip_sigma_noe_grad      =  dip_const_grad 
 200  # 
 201  #            dip_sigma_noe_hess      =  dip_const_hess 
 202  # 
 203  # 
 204  #        Dipolar spectral density components 
 205  #        =================================== 
 206  # 
 207  #            dip_Jw_sigma_noe_func  =  6J(wH+wN) - J(wH-wN) 
 208  # 
 209  #                                          dJ(wH+wN)     dJ(wH-wN) 
 210  #            dip_Jw_sigma_noe_grad  =  6 . ---------  -  --------- 
 211  #                                             dJw           dJw 
 212  # 
 213  #                                          d2J(wH+wN)     d2J(wH-wN) 
 214  #            dip_Jw_sigma_noe_hess  =  6 . ----------  -  ---------- 
 215  #                                          dJwi.dJwj      dJwi.dJwj 
 216  # 
 217  # 
 218  #        CSA components 
 219  #        ============== 
 220  # 
 221  #            csa_sigma_noe_func      =  0 
 222  # 
 223  #            csa_sigma_noe_grad      =  0 
 224  # 
 225  #            csa_sigma_noe_hess      =  0 
 226  # 
 227  # 
 228  #        CSA spectral density components 
 229  #        =============================== 
 230  # 
 231  #            csa_Jw_sigma_noe_func   =  0 
 232  # 
 233  #            csa_Jw_sigma_noe_grad   =  0 
 234  # 
 235  #            csa_Jw_sigma_noe_hess   =  0 
 236  # 
 237  # 
 238  #        Rex components 
 239  #        ============== 
 240  # 
 241  #            rex_sigma_noe_func      =  0 
 242  # 
 243  #            rex_sigma_noe_grad      =  0 
 244  # 
 245  #            rex_sigma_noe_hess      =  0 
 246  # 
 247   
 248  # Python module imports. 
 249  from math import pi 
 250   
 251   
 252  # The main functions for the calculation of the Ri components. 
 253  ############################################################## 
 254   
 255  # These functions are duplicated many times for all combinations of Rex, bond length, and CSA as model parameters 
 256  # to make the code more efficient. 
 257   
 258  # Ri. 
259 -def ri_comps(data, params):
260 """Calculate the ri function components. 261 262 Calculated: 263 - Dipolar J(w) components. 264 - CSA J(w) components. 265 Pre-calculated: 266 - Rex constant components. 267 - Dipolar constant components. 268 - CSA constant components. 269 """ 270 271 # Loop over the relaxation values. 272 for i in range(data.num_ri): 273 # Dipolar J(w) components 274 data.dip_jw_comps_func[i] = data.create_dip_jw_func[i](data.jw, data.remap_table[i]) 275 276 # CSA J(w) components. 277 if data.create_csa_jw_func[i]: 278 data.csa_jw_comps_func[i] = data.create_csa_jw_func[i](data.jw, data.remap_table[i])
279 280 281 # Ri (Rex).
282 -def ri_comps_rex(data, params):
283 """Calculate the ri function components. 284 285 Calculated: 286 - Dipolar J(w) components. 287 - CSA J(w) components. 288 - Rex constant components. 289 Pre-calculated: 290 - Dipolar constant components. 291 - CSA constant components. 292 """ 293 294 # Loop over the relaxation values. 295 for i in range(data.num_ri): 296 # Dipolar J(w) components 297 data.dip_jw_comps_func[i] = data.create_dip_jw_func[i](data.jw, data.remap_table[i]) 298 299 # CSA J(w) components. 300 if data.create_csa_jw_func[i]: 301 data.csa_jw_comps_func[i] = data.create_csa_jw_func[i](data.jw, data.remap_table[i]) 302 303 # Rex components 304 if data.create_rex_func[i]: 305 data.rex_comps_func[i] = data.create_rex_func[i](params[data.rex_i], data.frq[data.remap_table[i]])
306 307 308 # Ri (Bond length).
309 -def ri_comps_r(data, params):
310 """Calculate the ri function components. 311 312 Calculated: 313 - Dipolar constant components. 314 - Dipolar J(w) components. 315 - CSA J(w) components. 316 Pre-calculated: 317 - Rex constant components. 318 - CSA constant components. 319 """ 320 321 # Dipolar constant function value. 322 comp_dip_const_func(data, params[data.r_i]) 323 324 # Loop over the relaxation values. 325 for i in range(data.num_ri): 326 # Dipolar constant components. 327 data.dip_comps_func[i] = data.dip_const_func 328 if data.create_dip_func[i]: 329 data.dip_comps_func[i] = data.create_dip_func[i](data.dip_const_func) 330 331 # Dipolar J(w) components 332 data.dip_jw_comps_func[i] = data.create_dip_jw_func[i](data.jw, data.remap_table[i]) 333 334 # CSA J(w) components. 335 if data.create_csa_jw_func[i]: 336 data.csa_jw_comps_func[i] = data.create_csa_jw_func[i](data.jw, data.remap_table[i])
337 338 339 # Ri (CSA).
340 -def ri_comps_csa(data, params):
341 """Calculate the ri function components. 342 343 Calculated: 344 - Dipolar J(w) components. 345 - CSA constant components. 346 - CSA J(w) components. 347 Pre-calculated: 348 - Rex constant components. 349 - Dipolar constant components. 350 """ 351 352 # CSA constant function value. 353 comp_csa_const_func(data, params[data.csa_i]) 354 355 # Loop over the relaxation values. 356 for i in range(data.num_ri): 357 # Dipolar J(w) components 358 data.dip_jw_comps_func[i] = data.create_dip_jw_func[i](data.jw, data.remap_table[i]) 359 360 # CSA constant components. 361 if data.create_csa_func[i]: 362 data.csa_comps_func[i] = data.create_csa_func[i](data.csa_const_func[data.remap_table[i]]) 363 364 # CSA J(w) components. 365 if data.create_csa_jw_func[i]: 366 data.csa_jw_comps_func[i] = data.create_csa_jw_func[i](data.jw, data.remap_table[i])
367 368 369 # Ri (Bond length, CSA).
370 -def ri_comps_r_csa(data, params):
371 """Calculate the ri function components. 372 373 Calculated: 374 - Dipolar constant components. 375 - Dipolar J(w) components. 376 - CSA constant components. 377 - CSA J(w) components. 378 Pre-calculated: 379 - Rex constant components. 380 """ 381 382 # Dipolar constant function value. 383 comp_dip_const_func(data, params[data.r_i]) 384 385 # CSA constant function value. 386 comp_csa_const_func(data, params[data.csa_i]) 387 388 # Loop over the relaxation values. 389 for i in range(data.num_ri): 390 # Dipolar constant components. 391 data.dip_comps_func[i] = data.dip_const_func 392 if data.create_dip_func[i]: 393 data.dip_comps_func[i] = data.create_dip_func[i](data.dip_const_func) 394 395 # Dipolar J(w) components 396 data.dip_jw_comps_func[i] = data.create_dip_jw_func[i](data.jw, data.remap_table[i]) 397 398 # CSA constant components. 399 if data.create_csa_func[i]: 400 data.csa_comps_func[i] = data.create_csa_func[i](data.csa_const_func[data.remap_table[i]]) 401 402 # CSA J(w) components. 403 if data.create_csa_jw_func[i]: 404 data.csa_jw_comps_func[i] = data.create_csa_jw_func[i](data.jw, data.remap_table[i])
405 406 407 # Ri (Bond length, Rex).
408 -def ri_comps_r_rex(data, params):
409 """Calculate the ri function components. 410 411 Calculated: 412 - Dipolar constant components. 413 - Dipolar J(w) components. 414 - CSA J(w) components. 415 - Rex constant components. 416 Pre-calculated: 417 - CSA constant components. 418 """ 419 420 # Dipolar constant function value. 421 comp_dip_const_func(data, params[data.r_i]) 422 423 # Loop over the relaxation values. 424 for i in range(data.num_ri): 425 # Dipolar constant components. 426 data.dip_comps_func[i] = data.dip_const_func 427 if data.create_dip_func[i]: 428 data.dip_comps_func[i] = data.create_dip_func[i](data.dip_const_func) 429 430 # Dipolar J(w) components 431 data.dip_jw_comps_func[i] = data.create_dip_jw_func[i](data.jw, data.remap_table[i]) 432 433 # CSA J(w) components. 434 if data.create_csa_jw_func[i]: 435 data.csa_jw_comps_func[i] = data.create_csa_jw_func[i](data.jw, data.remap_table[i]) 436 437 # Rex components 438 if data.create_rex_func[i]: 439 data.rex_comps_func[i] = data.create_rex_func[i](params[data.rex_i], data.frq[data.remap_table[i]])
440 441 442 # Ri (CSA, Rex).
443 -def ri_comps_csa_rex(data, params):
444 """Calculate the ri function components. 445 446 Calculated: 447 - Dipolar J(w) components. 448 - CSA constant components. 449 - CSA J(w) components. 450 - Rex constant components. 451 Pre-calculated: 452 - Dipolar constant components. 453 """ 454 455 # CSA constant function value. 456 comp_csa_const_func(data, params[data.csa_i]) 457 458 # Loop over the relaxation values. 459 for i in range(data.num_ri): 460 # Dipolar J(w) components 461 data.dip_jw_comps_func[i] = data.create_dip_jw_func[i](data.jw, data.remap_table[i]) 462 463 # CSA constant components. 464 if data.create_csa_func[i]: 465 data.csa_comps_func[i] = data.create_csa_func[i](data.csa_const_func[data.remap_table[i]]) 466 467 # CSA J(w) components. 468 if data.create_csa_jw_func[i]: 469 data.csa_jw_comps_func[i] = data.create_csa_jw_func[i](data.jw, data.remap_table[i]) 470 471 # Rex components 472 if data.create_rex_func[i]: 473 data.rex_comps_func[i] = data.create_rex_func[i](params[data.rex_i], data.frq[data.remap_table[i]])
474 475 476 # Ri (Bond length, CSA, Rex).
477 -def ri_comps_r_csa_rex(data, params):
478 """Calculate the ri function components. 479 480 Calculated: 481 - Dipolar constant components. 482 - Dipolar J(w) components. 483 - CSA constant components. 484 - CSA J(w) components. 485 - Rex constant components. 486 Pre-calculated: 487 - None. 488 """ 489 490 # Dipolar constant function value. 491 comp_dip_const_func(data, params[data.r_i]) 492 493 # CSA constant function value. 494 comp_csa_const_func(data, params[data.csa_i]) 495 496 # Loop over the relaxation values. 497 for i in range(data.num_ri): 498 # Dipolar constant components. 499 data.dip_comps_func[i] = data.dip_const_func 500 if data.create_dip_func[i]: 501 data.dip_comps_func[i] = data.create_dip_func[i](data.dip_const_func) 502 503 # Dipolar J(w) components 504 data.dip_jw_comps_func[i] = data.create_dip_jw_func[i](data.jw, data.remap_table[i]) 505 506 # CSA constant components. 507 if data.create_csa_func[i]: 508 data.csa_comps_func[i] = data.create_csa_func[i](data.csa_const_func[data.remap_table[i]]) 509 510 # CSA J(w) components. 511 if data.create_csa_jw_func[i]: 512 data.csa_jw_comps_func[i] = data.create_csa_jw_func[i](data.jw, data.remap_table[i]) 513 514 # Rex components 515 if data.create_rex_func[i]: 516 data.rex_comps_func[i] = data.create_rex_func[i](params[data.rex_i], data.frq[data.remap_table[i]])
517 518 519 # R1 comps.
520 -def r1_comps(data, i, params):
521 """Calculate the r1 function components.""" 522 523 # Dipolar constant function value. 524 if data.r_i: 525 comp_dip_const_func(data, params[data.r_i]) 526 527 # CSA constant function value. 528 if data.csa_i: 529 comp_csa_const_func(data, params[data.csa_i]) 530 531 # Dipolar constant components. 532 data.dip_comps_func[i] = data.dip_const_func 533 534 # Dipolar J(w) components 535 data.dip_jw_comps_func[i] = comp_r1_dip_jw(data.jw, data.remap_table[i]) 536 537 # CSA constant components. 538 data.csa_comps_func[i] = data.csa_const_func[data.remap_table[i]] 539 540 # CSA J(w) components. 541 data.csa_jw_comps_func[i] = comp_r1_csa_jw(data.jw, data.remap_table[i])
542 543 544 545 # The main functions for the calculation of the dRi components. 546 ############################################################### 547 548 # These functions are duplicated many times for all combinations of Rex, bond length, and CSA as model parameters 549 # to make the code more efficient. 550 551 552 # dRi.
553 -def dri_comps(data, params):
554 """Calculate the dri gradient components. 555 556 Calculated: 557 - Dipolar J(w) components. 558 - CSA J(w) components. 559 Pre-calculated: 560 - Rex constant components. 561 - Dipolar constant components. 562 - CSA constant components. 563 """ 564 565 # Loop over the relaxation values. 566 for i in range(data.num_ri): 567 # Dipolar J(w) components 568 data.dip_jw_comps_grad[i] = data.create_dip_jw_grad[i](data.djw, data.remap_table[i]) 569 570 # CSA J(w) components. 571 if data.create_csa_jw_grad[i]: 572 data.csa_jw_comps_grad[i] = data.create_csa_jw_grad[i](data.djw, data.remap_table[i])
573 574 575 # dRi (Rex).
576 -def dri_comps_rex(data, params):
577 """Calculate the dri gradient components. 578 579 Calculated: 580 - Dipolar J(w) components. 581 - CSA J(w) components. 582 - Rex constant components. 583 Pre-calculated: 584 - Dipolar constant components. 585 - CSA constant components. 586 """ 587 588 # Loop over the relaxation values. 589 for i in range(data.num_ri): 590 # Dipolar J(w) components 591 data.dip_jw_comps_grad[i] = data.create_dip_jw_grad[i](data.djw, data.remap_table[i]) 592 593 # CSA J(w) components. 594 if data.create_csa_jw_grad[i]: 595 data.csa_jw_comps_grad[i] = data.create_csa_jw_grad[i](data.djw, data.remap_table[i]) 596 597 # Rex components 598 if data.create_rex_grad[i]: 599 data.rex_comps_grad[i] = data.create_rex_grad[i](data.frq[data.remap_table[i]])
600 601 602 # dRi (Bond length).
603 -def dri_comps_r(data, params):
604 """Calculate the dri gradient components. 605 606 Calculated: 607 - Dipolar constant components. 608 - Dipolar J(w) components. 609 - CSA J(w) components. 610 Pre-calculated: 611 - Rex constant components. 612 - CSA constant components. 613 """ 614 615 # Dipolar constant gradient value. 616 comp_dip_const_grad(data, params[data.r_i]) 617 618 # Loop over the relaxation values. 619 for i in range(data.num_ri): 620 # Dipolar constant components. 621 data.dip_comps_grad[i] = data.dip_const_grad 622 if data.create_dip_grad[i]: 623 data.dip_comps_grad[i] = data.create_dip_grad[i](data.dip_const_grad) 624 625 # Dipolar J(w) components 626 data.dip_jw_comps_grad[i] = data.create_dip_jw_grad[i](data.djw, data.remap_table[i]) 627 628 # CSA J(w) components. 629 if data.create_csa_jw_grad[i]: 630 data.csa_jw_comps_grad[i] = data.create_csa_jw_grad[i](data.djw, data.remap_table[i])
631 632 633 # dRi (CSA).
634 -def dri_comps_csa(data, params):
635 """Calculate the dri gradient components. 636 637 Calculated: 638 - Dipolar J(w) components. 639 - CSA constant components. 640 - CSA J(w) components. 641 Pre-calculated: 642 - Rex constant components. 643 - Dipolar constant components. 644 """ 645 646 # CSA constant gradient value. 647 comp_csa_const_grad(data, params[data.csa_i]) 648 649 # Loop over the relaxation values. 650 for i in range(data.num_ri): 651 # Dipolar J(w) components 652 data.dip_jw_comps_grad[i] = data.create_dip_jw_grad[i](data.djw, data.remap_table[i]) 653 654 # CSA constant components. 655 if data.create_csa_grad[i]: 656 data.csa_comps_grad[i] = data.create_csa_grad[i](data.csa_const_grad[data.remap_table[i]]) 657 658 # CSA J(w) components. 659 if data.create_csa_jw_grad[i]: 660 data.csa_jw_comps_grad[i] = data.create_csa_jw_grad[i](data.djw, data.remap_table[i])
661 662 663 # dRi (Bond length, CSA).
664 -def dri_comps_r_csa(data, params):
665 """Calculate the dri gradient components. 666 667 Calculated: 668 - Dipolar constant components. 669 - Dipolar J(w) components. 670 - CSA constant components. 671 - CSA J(w) components. 672 Pre-calculated: 673 - Rex constant components. 674 """ 675 676 # Dipolar constant gradient value. 677 comp_dip_const_grad(data, params[data.r_i]) 678 679 # CSA constant gradient value. 680 comp_csa_const_grad(data, params[data.csa_i]) 681 682 # Loop over the relaxation values. 683 for i in range(data.num_ri): 684 # Dipolar constant components. 685 data.dip_comps_grad[i] = data.dip_const_grad 686 if data.create_dip_grad[i]: 687 data.dip_comps_grad[i] = data.create_dip_grad[i](data.dip_const_grad) 688 689 # Dipolar J(w) components 690 data.dip_jw_comps_grad[i] = data.create_dip_jw_grad[i](data.djw, data.remap_table[i]) 691 692 # CSA constant components. 693 if data.create_csa_grad[i]: 694 data.csa_comps_grad[i] = data.create_csa_grad[i](data.csa_const_grad[data.remap_table[i]]) 695 696 # CSA J(w) components. 697 if data.create_csa_jw_grad[i]: 698 data.csa_jw_comps_grad[i] = data.create_csa_jw_grad[i](data.djw, data.remap_table[i])
699 700 701 # dRi (Bond length, Rex).
702 -def dri_comps_r_rex(data, params):
703 """Calculate the dri gradient components. 704 705 Calculated: 706 - Dipolar constant components. 707 - Dipolar J(w) components. 708 - CSA J(w) components. 709 - Rex constant components. 710 Pre-calculated: 711 - CSA constant components. 712 """ 713 714 # Dipolar constant gradient value. 715 comp_dip_const_grad(data, params[data.r_i]) 716 717 # Loop over the relaxation values. 718 for i in range(data.num_ri): 719 # Dipolar constant components. 720 data.dip_comps_grad[i] = data.dip_const_grad 721 if data.create_dip_grad[i]: 722 data.dip_comps_grad[i] = data.create_dip_grad[i](data.dip_const_grad) 723 724 # Dipolar J(w) components 725 data.dip_jw_comps_grad[i] = data.create_dip_jw_grad[i](data.djw, data.remap_table[i]) 726 727 # CSA J(w) components. 728 if data.create_csa_jw_grad[i]: 729 data.csa_jw_comps_grad[i] = data.create_csa_jw_grad[i](data.djw, data.remap_table[i]) 730 731 # Rex components 732 if data.create_rex_grad[i]: 733 data.rex_comps_grad[i] = data.create_rex_grad[i](data.frq[data.remap_table[i]])
734 735 736 # dRi (CSA, Rex).
737 -def dri_comps_csa_rex(data, params):
738 """Calculate the dri gradient components. 739 740 Calculated: 741 - Dipolar J(w) components. 742 - CSA constant components. 743 - CSA J(w) components. 744 - Rex constant components. 745 Pre-calculated: 746 - Dipolar constant components. 747 """ 748 749 # CSA constant gradient value. 750 comp_csa_const_grad(data, params[data.csa_i]) 751 752 # Loop over the relaxation values. 753 for i in range(data.num_ri): 754 # Dipolar J(w) components 755 data.dip_jw_comps_grad[i] = data.create_dip_jw_grad[i](data.djw, data.remap_table[i]) 756 757 # CSA constant components. 758 if data.create_csa_grad[i]: 759 data.csa_comps_grad[i] = data.create_csa_grad[i](data.csa_const_grad[data.remap_table[i]]) 760 761 # CSA J(w) components. 762 if data.create_csa_jw_grad[i]: 763 data.csa_jw_comps_grad[i] = data.create_csa_jw_grad[i](data.djw, data.remap_table[i]) 764 765 # Rex components 766 if data.create_rex_grad[i]: 767 data.rex_comps_grad[i] = data.create_rex_grad[i](data.frq[data.remap_table[i]])
768 769 770 # dRi (Bond length, CSA, Rex).
771 -def dri_comps_r_csa_rex(data, params):
772 """Calculate the dri gradient components. 773 774 Calculated: 775 - Dipolar constant components. 776 - Dipolar J(w) components. 777 - CSA constant components. 778 - CSA J(w) components. 779 - Rex constant components. 780 Pre-calculated: 781 - None. 782 """ 783 784 # Dipolar constant gradient value. 785 comp_dip_const_grad(data, params[data.r_i]) 786 787 # CSA constant gradient value. 788 comp_csa_const_grad(data, params[data.csa_i]) 789 790 # Loop over the relaxation values. 791 for i in range(data.num_ri): 792 # Dipolar constant components. 793 data.dip_comps_grad[i] = data.dip_const_grad 794 if data.create_dip_grad[i]: 795 data.dip_comps_grad[i] = data.create_dip_grad[i](data.dip_const_grad) 796 797 # Dipolar J(w) components 798 data.dip_jw_comps_grad[i] = data.create_dip_jw_grad[i](data.djw, data.remap_table[i]) 799 800 # CSA constant components. 801 if data.create_csa_grad[i]: 802 data.csa_comps_grad[i] = data.create_csa_grad[i](data.csa_const_grad[data.remap_table[i]]) 803 804 # CSA J(w) components. 805 if data.create_csa_jw_grad[i]: 806 data.csa_jw_comps_grad[i] = data.create_csa_jw_grad[i](data.djw, data.remap_table[i]) 807 808 # Rex components 809 if data.create_rex_grad[i]: 810 data.rex_comps_grad[i] = data.create_rex_grad[i](data.frq[data.remap_table[i]])
811 812 813 # dR1 comps.
814 -def dr1_comps(data, i, params):
815 """Calculate the dr1 gradient components.""" 816 817 # Dipolar constant gradient value. 818 if data.r_i: 819 comp_dip_const_grad(data, params[data.r_i]) 820 821 # CSA constant gradient value. 822 if data.csa_i: 823 comp_csa_const_grad(data, params[data.csa_i]) 824 825 # Dipolar constant components. 826 data.dip_comps_grad[i] = data.dip_const_grad 827 828 # Dipolar J(w) components 829 data.dip_jw_comps_grad[i] = comp_r1_dip_jw(data.djw, data.remap_table[i]) 830 831 # CSA constant components. 832 data.csa_comps_grad[i] = data.csa_const_grad[data.remap_table[i]] 833 834 # CSA J(w) components. 835 data.csa_jw_comps_grad[i] = comp_r1_csa_jw(data.djw, data.remap_table[i])
836 837 838 # The main functions for the calculation of the d2Ri components. 839 ################################################################ 840 841 # These functions are duplicated many times for all combinations of Rex, bond length, and CSA as model parameters 842 # to make the code more efficient. 843 844 845 # d2Ri.
846 -def d2ri_comps(data, params):
847 """Calculate the d2ri Hessian components. 848 849 Calculated: 850 - Dipolar J(w) components. 851 - CSA J(w) components. 852 Pre-calculated: 853 - Rex constant components. 854 - Dipolar constant components. 855 - CSA constant components. 856 """ 857 858 # Loop over the relaxation values. 859 for i in range(data.num_ri): 860 # Dipolar J(w) components 861 data.dip_jw_comps_hess[i] = data.create_dip_jw_hess[i](data.d2jw, data.remap_table[i]) 862 863 # CSA J(w) components. 864 if data.create_csa_jw_hess[i]: 865 data.csa_jw_comps_hess[i] = data.create_csa_jw_hess[i](data.d2jw, data.remap_table[i])
866 867 868 # d2Ri (Bond length).
869 -def d2ri_comps_r(data, params):
870 """Calculate the d2ri Hessian components. 871 872 Calculated: 873 - Dipolar constant components. 874 - Dipolar J(w) components. 875 - CSA J(w) components. 876 Pre-calculated: 877 - Rex constant components. 878 - CSA constant components. 879 """ 880 881 # Dipolar constant Hessian value. 882 comp_dip_const_hess(data, params[data.r_i]) 883 884 # Loop over the relaxation values. 885 for i in range(data.num_ri): 886 # Dipolar constant components. 887 data.dip_comps_hess[i] = data.dip_const_hess 888 if data.create_dip_hess[i]: 889 data.dip_comps_hess[i] = data.create_dip_hess[i](data.dip_const_hess) 890 891 # Dipolar J(w) components 892 data.dip_jw_comps_hess[i] = data.create_dip_jw_hess[i](data.d2jw, data.remap_table[i]) 893 894 # CSA J(w) components. 895 if data.create_csa_jw_hess[i]: 896 data.csa_jw_comps_hess[i] = data.create_csa_jw_hess[i](data.d2jw, data.remap_table[i])
897 898 899 # d2Ri (CSA).
900 -def d2ri_comps_csa(data, params):
901 """Calculate the d2ri Hessian components. 902 903 Calculated: 904 - Dipolar J(w) components. 905 - CSA constant components. 906 - CSA J(w) components. 907 Pre-calculated: 908 - Rex constant components. 909 - Dipolar constant components. 910 """ 911 912 # CSA constant Hessian value. 913 comp_csa_const_hess(data, params) 914 915 # Loop over the relaxation values. 916 for i in range(data.num_ri): 917 # Dipolar J(w) components 918 data.dip_jw_comps_hess[i] = data.create_dip_jw_hess[i](data.d2jw, data.remap_table[i]) 919 920 # CSA constant components. 921 if data.create_csa_hess[i]: 922 data.csa_comps_hess[i] = data.create_csa_hess[i](data.csa_const_hess[data.remap_table[i]]) 923 924 # CSA J(w) components. 925 if data.create_csa_jw_hess[i]: 926 data.csa_jw_comps_hess[i] = data.create_csa_jw_hess[i](data.d2jw, data.remap_table[i])
927 928 929 # d2Ri (Bond length, CSA).
930 -def d2ri_comps_r_csa(data, params):
931 """Calculate the d2ri Hessian components. 932 933 Calculated: 934 - Dipolar constant components. 935 - Dipolar J(w) components. 936 - CSA constant components. 937 - CSA J(w) components. 938 Pre-calculated: 939 - Rex constant components. 940 """ 941 942 # Dipolar constant Hessian value. 943 comp_dip_const_hess(data, params[data.r_i]) 944 945 # CSA constant Hessian value. 946 comp_csa_const_hess(data, params) 947 948 # Loop over the relaxation values. 949 for i in range(data.num_ri): 950 # Dipolar constant components. 951 data.dip_comps_hess[i] = data.dip_const_hess 952 if data.create_dip_hess[i]: 953 data.dip_comps_hess[i] = data.create_dip_hess[i](data.dip_const_hess) 954 955 # Dipolar J(w) components 956 data.dip_jw_comps_hess[i] = data.create_dip_jw_hess[i](data.d2jw, data.remap_table[i]) 957 958 # CSA constant components. 959 if data.create_csa_hess[i]: 960 data.csa_comps_hess[i] = data.create_csa_hess[i](data.csa_const_hess[data.remap_table[i]]) 961 962 # CSA J(w) components. 963 if data.create_csa_jw_hess[i]: 964 data.csa_jw_comps_hess[i] = data.create_csa_jw_hess[i](data.d2jw, data.remap_table[i])
965 966 967 # d2R1 comps.
968 -def d2r1_comps(data, i, params):
969 """Calculate the d2ri Hessian components.""" 970 971 # Dipolar constant gradient value. 972 if data.r_i: 973 comp_dip_const_hess(data, params[data.r_i]) 974 975 # CSA constant gradient value. 976 if data.csa_i: 977 comp_csa_const_hess(data, params) 978 979 # Dipolar constant components. 980 data.dip_comps_hess[i] = data.dip_const_hess 981 982 # Dipolar J(w) components 983 data.dip_jw_comps_hess[i] = comp_r1_dip_jw(data.d2jw, data.remap_table[i]) 984 985 # CSA constant components. 986 data.csa_comps_hess[i] = data.csa_const_hess[data.remap_table[i]] 987 988 # CSA J(w) components. 989 data.csa_jw_comps_hess[i] = comp_r1_csa_jw(data.d2jw, data.remap_table[i])
990 991 992 993 # Functions to calculate the invariant part of the dipolar and CSA constants. 994 ############################################################################# 995 996 997 # Dipolar.
998 -def calc_fixed_dip(data):
999 """Calculate the fixed component of the dipolar constant. 1000 1001 The equation is:: 1002 1003 / mu0 \ 2 1004 dip_const_fixed = | ---- | . (gH.gN.h_bar)**2 1005 \ 4.pi / 1006 """ 1007 1008 data.dip_const_fixed = ((data.mu0 / (4.0*pi)) * data.h_bar * data.gh * data.gx) ** 2
1009 1010 1011 # CSA.
1012 -def calc_fixed_csa(data):
1013 """Calculate the fixed component of the CSA constants. 1014 1015 The equation is:: 1016 1017 wN**2 1018 csa_const_fixed = ----- 1019 3 1020 """ 1021 1022 for j in range(data.num_frq): 1023 data.csa_const_fixed[j] = data.frq_sqrd_list[j, 1] / 3.0
1024 1025 1026 1027 # Functions to calculate the dipolar constant values, gradients, and Hessians. 1028 ############################################################################## 1029 1030 1031 # Function.
1032 -def comp_dip_const_func(data, bond_length):
1033 """Calculate the dipolar constant. 1034 1035 Dipolar constant 1036 ================ 1037 1038 The equation is:: 1039 1040 1 / mu0 \ 2 (gH.gN.h_bar)**2 1041 dip_const_func = - . | ---- | . ---------------- 1042 4 \ 4.pi / <r**6> 1043 """ 1044 1045 if bond_length == 0.0: 1046 data.dip_const_func = 1e99 1047 else: 1048 data.dip_const_func = 0.25 * data.dip_const_fixed * bond_length**-6
1049 1050 1051 # Gradient.
1052 -def comp_dip_const_grad(data, bond_length):
1053 """Calculate the derivative of the dipolar constant. 1054 1055 Dipolar constant gradient 1056 ========================= 1057 1058 The equation is:: 1059 1060 3 / mu0 \ 2 (gH.gN.h_bar)**2 1061 dip_const_grad = - - . | ---- | . ---------------- 1062 2 \ 4.pi / <r**7> 1063 """ 1064 1065 if bond_length == 0.0: 1066 data.dip_const_grad = 1e99 1067 else: 1068 data.dip_const_grad = -1.5 * data.dip_const_fixed * bond_length**-7
1069 1070 1071 # Hessian.
1072 -def comp_dip_const_hess(data, bond_length):
1073 """Calculate the second derivative of the dipolar constant. 1074 1075 Dipolar constant Hessian 1076 ======================== 1077 1078 The equation is:: 1079 1080 21 / mu0 \ 2 (gH.gN.h_bar)**2 1081 dip_const_hess = -- . | ---- | . ---------------- 1082 2 \ 4.pi / <r**8> 1083 """ 1084 1085 if bond_length == 0.0: 1086 data.dip_const_hess = 1e99 1087 else: 1088 data.dip_const_hess = 10.5 * data.dip_const_fixed * bond_length**-8
1089 1090 1091 1092 # Functions to calculate the CSA constant values, gradients, and Hessians. 1093 ########################################################################## 1094 1095 1096 # Function.
1097 -def comp_csa_const_func(data, csa):
1098 """Calculate the CSA constant. 1099 1100 CSA constant 1101 ============ 1102 1103 The equation is:: 1104 1105 (wN.csa)**2 1106 csa_const_func = ----------- 1107 3 1108 """ 1109 1110 for i in range(data.num_frq): 1111 data.csa_const_func[i] = data.csa_const_fixed[i] * csa**2
1112 1113 1114 # Gradient.
1115 -def comp_csa_const_grad(data, csa):
1116 """Calculate the derivative of the CSA constant. 1117 1118 CSA constant gradient 1119 ===================== 1120 1121 The equation is:: 1122 1123 2.wN**2.csa 1124 csa_const_grad = ----------- 1125 3 1126 """ 1127 1128 for i in range(data.num_frq): 1129 data.csa_const_grad[i] = 2.0 * data.csa_const_fixed[i] * csa
1130 1131 1132 # Hessian.
1133 -def comp_csa_const_hess(data, params):
1134 """Calculate the second derivative of the CSA constant. 1135 1136 CSA constant Hessian 1137 ==================== 1138 1139 The equation is:: 1140 1141 2.wN**2 1142 csa_const_hess = ------- 1143 3 1144 """ 1145 1146 for i in range(data.num_frq): 1147 data.csa_const_hess[i] = 2.0 * data.csa_const_fixed[i]
1148 1149 1150 1151 # Functions to calculate the Rex constant values and gradients. 1152 ############################################################### 1153 1154 1155 # Function.
1156 -def comp_rex_const_func(rhoex, frq):
1157 """Calculate the Rex value. 1158 1159 Rex constant 1160 ============ 1161 1162 The equation is:: 1163 1164 rex_const_func = rhoex * wH**2 1165 """ 1166 1167 return rhoex * (2.0 * pi * frq) ** 2
1168 1169 1170 # Gradient.
1171 -def comp_rex_const_grad(frq):
1172 """Calculate the Rex gradient. 1173 1174 Rex gradient 1175 ============ 1176 1177 The equation is:: 1178 1179 rex_const_grad = wH**2 1180 """ 1181 1182 return (2.0 * pi * frq) ** 2
1183 1184 1185 1186 # Functions to calculate the dipolar constant components. 1187 ######################################################### 1188 1189
1190 -def comp_r2_dip_const(dip_const_data):
1191 """Calculate the R1 dipolar constant components. 1192 1193 The equations are:: 1194 1195 dip_const_func / 2 1196 1197 dip_const_grad / 2 1198 1199 dip_const_hess / 2 1200 """ 1201 1202 return dip_const_data / 2.0
1203 1204 1205 1206 # Functions to calculate the CSA constant components. 1207 ##################################################### 1208 1209 # sigma_noe has no CSA components! 1210
1211 -def comp_r1_csa_const(csa_const_data):
1212 """Calculate the R1 CSA constant components. 1213 1214 The equations are:: 1215 1216 csa_const_func 1217 1218 csa_const_grad 1219 1220 csa_const_hess 1221 """ 1222 1223 return csa_const_data
1224 1225
1226 -def comp_r2_csa_const(csa_const_data):
1227 """Calculate the R2 CSA constant. components 1228 1229 The equations are:: 1230 1231 csa_const_func / 6 1232 1233 csa_const_grad / 6 1234 1235 csa_const_hess / 6 1236 """ 1237 1238 return csa_const_data / 6.0
1239 1240 1241 1242 # Functions to calculate the dipolar J(w) components. 1243 ##################################################### 1244 1245 1246 # R1.
1247 -def comp_r1_dip_jw(jw_data, frq_num):
1248 """Calculate the R1 dipolar J(w) components. 1249 1250 The equations are:: 1251 1252 dip_Jw_R1_func = J(wH-wN) + 3J(wN) + 6J(wH+wN) 1253 1254 dJ(wH-wN) dJ(wN) dJ(wH+wN) 1255 dip_Jw_R1_grad = --------- + 3 . ------ + 6 . --------- 1256 dJw dJw dJw 1257 1258 d2J(wH-wN) d2J(wN) d2J(wH+wN) 1259 dip_Jw_R1_hess = ---------- + 3 . --------- + 6 . ---------- 1260 dJwi.dJwj dJwi.dJwj dJwi.dJwj 1261 """ 1262 1263 return jw_data[frq_num, 2] + 3.0*jw_data[frq_num, 1] + 6.0*jw_data[frq_num, 4]
1264 1265 1266 # R2.
1267 -def comp_r2_dip_jw(jw_data, frq_num):
1268 """Calculate the R2 dipolar J(w) components. 1269 1270 The equations are:: 1271 1272 dip_Jw_R2_func = 4J(0) + J(wH-wN) + 3J(wN) + 6J(wH) + 6J(wH+wN) 1273 1274 dJ(0) dJ(wH-wN) dJ(wN) dJ(wH) dJ(wH+wN) 1275 dip_Jw_R2_grad = 4 . ----- + --------- + 3 . ------ + 6 . ------ + 6 . --------- 1276 dJw dJw dJw dJw dJw 1277 1278 d2J(0) d2J(wH-wN) d2J(wN) d2J(wH) d2J(wH+wN) 1279 dip_Jw_R2_hess = 4 . --------- + ---------- + 3 . --------- + 6 . --------- + 6 . ---------- 1280 dJwi.dJwj dJwi.dJwj dJwi.dJwj dJwi.dJwj dJwi.dJwj 1281 """ 1282 1283 return 4.0*jw_data[frq_num, 0] + jw_data[frq_num, 2] + 3.0*jw_data[frq_num, 1] + 6.0*jw_data[frq_num, 3] + 6.0*jw_data[frq_num, 4]
1284 1285 1286 # sigma_noe.
1287 -def comp_sigma_noe_dip_jw(jw_data, frq_num):
1288 """Calculate the sigma_noe dipolar J(w) components. 1289 1290 The equations are:: 1291 1292 dip_Jw_sigma_noe_func = 6J(wH+wN) - J(wH-wN) 1293 1294 dJ(wH+wN) dJ(wH-wN) 1295 dip_Jw_sigma_noe_grad = 6 . --------- - --------- 1296 dJw dJw 1297 1298 d2J(wH+wN) d2J(wH-wN) 1299 dip_Jw_sigma_noe_hess = 6 . ---------- - ---------- 1300 dJwi.dJwj dJwi.dJwj 1301 """ 1302 1303 return 6.0*jw_data[frq_num, 4] - jw_data[frq_num, 2]
1304 1305 1306 1307 # Functions to calculate the CSA J(w) components. 1308 ################################################# 1309 1310 # sigma_noe has no CSA J(w) components! 1311 1312 # R1.
1313 -def comp_r1_csa_jw(jw_data, frq_num):
1314 """Calculate the R1 CSA J(w) components. 1315 1316 The equations are:: 1317 1318 csa_Jw_R1_func = J(wN) 1319 1320 dJ(wN) 1321 csa_Jw_R1_grad = ------ 1322 dJw 1323 1324 d2J(wN) 1325 csa_Jw_R1_hess = --------- 1326 dJwi.dJwj 1327 """ 1328 1329 return jw_data[frq_num, 1]
1330 1331 1332 # R2.
1333 -def comp_r2_csa_jw(jw_data, frq_num):
1334 """Calculate the R1 CSA J(w) components. 1335 1336 The equations are:: 1337 1338 csa_Jw_R2_func = 4J(0) + 3J(wN) 1339 1340 dJ(0) dJ(wN) 1341 csa_Jw_R2_grad = 4 . ----- + 3 . ------ 1342 dJw dJw 1343 1344 d2J(0) d2J(wN) 1345 csa_Jw_R2_hess = 4 . --------- + 3 . --------- 1346 dJwi.dJwj dJwi.dJwj 1347 """ 1348 1349 return 4.0*jw_data[frq_num, 0] + 3.0*jw_data[frq_num, 1]
1350