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

Source Code for Module maths_fns.ri_comps

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