1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 from Numeric import Float64, zeros
25 from math import pi, cos
26
27 from ri_comps import calc_fixed_csa, calc_fixed_dip, comp_csa_const_func, comp_dip_const_func
28
29
31 - def __init__(self, frq=None, gx=None, gh=None, mu0=None, h_bar=None):
32 """Consistency tests for data acquired at different magnetic fields.
33
34 These three tests are used to assess the consistency of datasets aquired at different
35 magnetic fields. Inconsistency can affect extracted information from experimental data and
36 can be caused by variations in temperature, concentration, pH, water suppression, etc.
37
38 This code calculates three functions for each residue. When comparing datasets from
39 different magnetic field, the value should be the same for each function as these are field
40 independent. The J(0) function is the spectral density at the zero frequency and is obtained
41 using a reduced spectral density approach. The F_eta and F_R2 functions are the
42 consistency functions proposed by Fushman D. et al. (1998) JACS, 120: 10947-10952.
43
44 To assess the consistency of its datasets, one should first calculate those values (J(0),
45 F_eta and F_R2) for each field. Then, the user should compare values obtained for different
46 magnetic fields. Comparisons could proceed using correlation plots and histograms, and the
47 user could also calculate correlation, skewness and kurtosis coefficients.
48 """
49
50
51 self.data = Data()
52
53
54 self.data.gx = gx
55 self.data.gh = gh
56 self.data.mu0 = mu0
57 self.data.h_bar = h_bar
58
59
60 self.data.num_frq = 1
61
62
63 self.data.dip_const_fixed = 0.0
64 self.data.csa_const_fixed = [0.0]
65 self.data.dip_const_func = 0.0
66 self.data.csa_const_func = zeros(1, Float64)
67
68
69 frq = frq * 2 * pi
70 frqX = frq * self.data.gx / self.data.gh
71
72
73 self.data.frq_list = zeros((1, 5), Float64)
74 self.data.frq_list[0, 1] = frqX
75 self.data.frq_list[0, 2] = frq - frqX
76 self.data.frq_list[0, 3] = frq
77 self.data.frq_list[0, 4] = frq + frqX
78 self.data.frq_sqrd_list = self.data.frq_list ** 2
79
80
82 """Function for calculating the sigma NOE value."""
83
84 return (noe - 1.0) * r1 * self.data.gx / self.data.gh
85
86
87 - def func(self, orientation=None, tc=None, r=None, csa=None, r1=None, r2=None, noe=None):
88 """Function for calculating the three consistency testing values.
89
90 Three values are returned, J(0), F_eta and F_R2.
91 """
92
93
94 calc_fixed_dip(self.data)
95 calc_fixed_csa(self.data)
96
97
98 comp_dip_const_func(self.data, r)
99 comp_csa_const_func(self.data, csa)
100
101
102 d = self.data.dip_const_func
103 c = self.data.csa_const_func[0]
104
105
106 sigma_noe = self.calc_sigma_noe(noe, r1)
107
108
109 j0 = -1.5 / (3.0*d + c) * (0.5*r1 - r2 + 0.6*sigma_noe)
110
111
112 jwx = 1.0 / (3.0*d + c) * (r1 - 1.4*sigma_noe)
113
114
115
116
117
118
119
120 p_2 = 0.5 * ((3.0 * (cos(orientation * pi / 180)) ** 2) -1)
121
122
123
124
125 eta = ((d * c/3.0) ** 0.5) * (4.0 * j0 + 3.0 * jwx) * p_2
126
127
128
129 f_eta = eta * self.data.gh / (self.data.frq_list[0, 3] * (4.0 + 3.0 / (1 + (self.data.frq_list[0, 1] * tc) ** 2)))
130
131
132
133
134
135 p_hf = 1.3 * (self.data.gx / self.data.gh) * (1.0 - noe) * r1
136
137
138
139 f_r2 = (r2 - p_hf) / ((4.0 + 3.0 / (1 + (self.data.frq_list[0, 1] * tc) ** 2)) * (d + c/3.0))
140
141
142 return j0, f_eta, f_r2
143
144
147 """Empty container for storing data."""
148