1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 """The Meiboom (1961) 2-site fast exchange R1rho U{M61<http://wiki.nmr-relax.com/M61>} model.
25
26 Description
27 ===========
28
29 This module is for the function, gradient and Hessian of the U{M61<http://wiki.nmr-relax.com/M61>} model.
30
31
32 References
33 ==========
34
35 The model is named after the reference:
36
37 - Meiboom S. (1961). Nuclear magnetic resonance study of the proton transfer in water. I{J. Chem. Phys.}, B{34}, 375-388. (U{DOI: 10.1063/1.1700960<http://dx.doi.org/10.1063/1.1700960>}).
38
39
40 Equations
41 =========
42
43 The equation used is::
44
45 phi_ex * kex
46 R1rho = R1rho' + ----------------- ,
47 kex^2 + omega_1^2
48
49 where::
50
51 phi_ex = pA * pB * delta_omega^2 ,
52
53 R1rho' is the R1rho value in the absence of exchange, kex is the chemical exchange rate constant, pA and pB are the populations of states A and B, delta_omega is the chemical shift difference between the two states, and omega_1 is the spin-lock field strength.
54
55
56 Links
57 =====
58
59 More information on the M61 model can be found in the:
60
61 - U{relax wiki<http://wiki.nmr-relax.com/M61>},
62 - U{relax manual<http://www.nmr-relax.com/manual/M61_2_site_fast_exchange_R1_model.html>},
63 - U{relaxation dispersion page of the relax website<http://www.nmr-relax.com/analyses/relaxation_dispersion.html#M61>}.
64 """
65
66
67 from numpy import abs, array, isfinite, min, sum
68
69
70 -def r1rho_M61(r1rho_prime=None, phi_ex=None, kex=None, spin_lock_fields2=None, back_calc=None, num_points=None):
71 """Calculate the R2eff values for the M61 model.
72
73 See the module docstring for details.
74
75
76 @keyword r1rho_prime: The R1rho_prime parameter value (R1rho with no exchange).
77 @type r1rho_prime: float
78 @keyword phi_ex: The phi_ex parameter value (pA * pB * delta_omega^2).
79 @type phi_ex: float
80 @keyword kex: The kex parameter value (the exchange rate in rad/s).
81 @type kex: float
82 @keyword spin_lock_fields2: The R1rho spin-lock field strengths squared (in rad^2.s^-2).
83 @type spin_lock_fields2: numpy rank-1 float array
84 @keyword back_calc: The array for holding the back calculated R1rho values. Each element corresponds to the combination of spin lock field.
85 @type back_calc: numpy rank-1 float array
86 @keyword num_points: The number of points on the dispersion curve, equal to the length of the spin_lock_fields and back_calc arguments.
87 @type num_points: int
88 """
89
90
91 kex2 = kex**2
92
93
94 numer = phi_ex * kex
95
96
97
98 if numer == 0.0:
99 back_calc[:] = array([r1rho_prime]*num_points)
100 return
101
102
103 denom = kex2 + spin_lock_fields2
104
105
106
107 if min(abs(denom)) == 0:
108 back_calc[:] = array([1e100]*num_points)
109 return
110
111
112 R1rho = r1rho_prime + numer / denom
113
114
115
116 if not isfinite(sum(R1rho)):
117 R1rho = array([1e100]*num_points)
118
119 back_calc[:] = R1rho
120