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