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 Ishima and Torchia (1999) 2-site all time scale exchange (with pA >> pB) U{IT99<http://wiki.nmr-relax.com/IT99>} model.
25
26 Description
27 ===========
28
29 This module is for the function, gradient and Hessian of the U{IT99<http://wiki.nmr-relax.com/IT99>} model.
30
31
32 References
33 ==========
34
35 The model is named after the reference:
36
37 - Ishima R. and Torchia D.A. (1999). Estimating the time scale of chemical exchange of proteins from measurements of transverse relaxation rates in solution. I{J. Biomol. NMR}, B{14}, 369-372. (U{DOI: 10.1023/A:1008324025406<http://dx.doi.org/10.1023/A:1008324025406>}).
38
39
40 Equations
41 =========
42
43 The equation used is::
44
45 phi_ex * tex
46 Rex ~= ------------------- ,
47 1 + omega_a^2*tex^2
48
49 phi_ex = pA * pB * delta_omega^2 ,
50
51 omega_a^2 = sqrt(omega_1eff^4 + pA^2*delta_omega^4) ,
52
53 R2eff = R20 + Rex ,
54
55 where tex = 1/(2kex), kex is the chemical exchange rate constant, pA and pB are the populations of states A and B, and delta_omega is the chemical shift difference between the two states. The effective rotating frame field for a CPMG-type experiment is given by::
56
57 omega_1eff = 4*sqrt(3) * nu_cpmg
58
59 and therefore::
60
61 omega_1eff^4 = 2304 * nu_cpmg^4
62
63
64 Links
65 =====
66
67 More information on the IT99 model can be found in the:
68
69 - U{relax wiki<http://wiki.nmr-relax.com/IT99>},
70 - U{relax manual<http://www.nmr-relax.com/manual/IT99_2_site_CPMG_model.html>},
71 - U{relaxation dispersion page of the relax website<http://www.nmr-relax.com/analyses/relaxation_dispersion.html#IT99>}.
72
73 """
74
75
76 from math import pi, sqrt
77
78
79 -def r2eff_IT99(r20=None, pA=None, pB=None, dw=None, tex=None, cpmg_frqs=None, back_calc=None, num_points=None):
80 """Calculate the R2eff values for the IT99 model.
81
82 See the module docstring for details.
83
84
85 @keyword r20: The R20 parameter value (R2 with no exchange).
86 @type r20: float
87 @keyword pA: The population of state A.
88 @type pA: float
89 @keyword pB: The population of state B.
90 @type pB: float
91 @keyword dw: The chemical exchange difference between states A and B in rad/s.
92 @type dw: float
93 @keyword tex: The tex parameter value (the time of exchange in s/rad).
94 @type tex: float
95 @keyword cpmg_frqs: The CPMG nu1 frequencies.
96 @type cpmg_frqs: numpy rank-1 float array
97 @keyword back_calc: The array for holding the back calculated R2eff values. Each element corresponds to one of the CPMG nu1 frequencies.
98 @type back_calc: numpy rank-1 float array
99 @keyword num_points: The number of points on the dispersion curve, equal to the length of the cpmg_frqs and back_calc arguments.
100 @type num_points: int
101 """
102
103
104 dw2 = dw**2
105 tex2 = tex**2
106 padw2 = pA * dw2
107 pa2dw4 = padw2**2
108
109
110 numer = padw2 * pB * tex
111
112
113 for i in range(num_points):
114
115 if numer == 0.0:
116 back_calc[i] = r20
117 continue
118
119
120 omega_1eff4 = 2304.0 * cpmg_frqs[i]**4
121
122
123 omega_a2 = sqrt(omega_1eff4 + pa2dw4)
124 denom = 1.0 + omega_a2 * tex2
125
126
127 if denom == 0.0:
128 back_calc[i] = 1e100
129 continue
130
131
132 back_calc[i] = r20 + numer / denom
133