1 from Numeric import Float64, zeros
2 from re import match
3
6 "Function for back calculating the transformed relaxation values R1, R2, and sigma_noe."
7
8
10 """Function for back calculation of the transformed relaxation values R1, R2, and sigma_noe.
11
12 The transformed relaxation equations
13 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
14
15 Data structure: self.data.ri_prime
16 Dimension: 1D, (transformed relaxation data)
17 Type: Numeric array, Float64
18 Dependencies: self.data.jw
19 Required by: self.data.ri, self.data.dri, self.data.d2ri
20
21
22 Formulae
23 ~~~~~~~~
24
25 Components
26 ~~~~~~~~~~
27 1 / mu0 \ 2 (gH.gN.h_bar)**2
28 d = - . | ---- | . ----------------
29 4 \ 4.pi / <r**6>
30
31 (wN.csa)**2
32 c = -----------
33 3
34
35 J_R1_d = J(wH-wN) + 3J(wN) + 6J(wH+wN)
36
37 J_R1_c = J(wN)
38
39 J_R2_d = 4J(0) + J(wH-wN) + 3J(wN) + 6J(wH) + 6J(wH+wN)
40
41 J_R2_c = 4J(0) + 3J(wN)
42
43 J_sigma_noe = 6J(wH+wN) - J(wH-wN)
44
45
46 Relaxation equations
47 ~~~~~~~~~~~~~~~~~~~~
48
49 R1() = d . J_R1_d + c . J_R1_c
50
51
52 d c
53 R2() = - . J_R2_d + - . J_R2_c + Rex
54 2 6
55
56
57 sigma_noe() = d . J_sigma_noe
58
59 """
60
61
62 self.Jw()
63
64
65 self.data.dip_comps = zeros((self.mf.data.num_ri), Float64)
66 self.data.j_dip_comps = zeros((self.mf.data.num_ri), Float64)
67 self.data.csa_comps = zeros((self.mf.data.num_ri), Float64)
68 self.data.j_csa_comps = zeros((self.mf.data.num_ri), Float64)
69 if match('m[34]', self.data.model):
70 self.data.rex_comps = zeros((self.mf.data.num_ri), Float64)
71
72
73 for i in range(self.mf.data.num_ri):
74 frq_num = self.mf.data.remap_table[i]
75
76
77 if self.mf.data.data_types[i] == 'R1':
78 self.data.dip_comps[i] = self.mf.data.dipole_const
79 self.data.j_dip_comps[i] = self.data.jw[frq_num, 2] + 3.0*self.data.jw[frq_num, 1] + 6.0*self.data.jw[frq_num, 4]
80 self.data.csa_comps[i] = self.mf.data.csa_const[frq_num]
81 self.data.j_csa_comps[i] = self.data.jw[frq_num, 1]
82
83
84 elif self.mf.data.data_types[i] == 'R2':
85 self.data.dip_comps[i] = self.mf.data.dipole_const / 2.0
86 self.data.j_dip_comps[i] = 4.0*self.data.jw[frq_num, 0] + self.data.jw[frq_num, 2] + 3.0*self.data.jw[frq_num, 1] + 6.0*self.data.jw[frq_num, 3] + 6.0*self.data.jw[frq_num, 4]
87 self.data.csa_comps[i] = self.mf.data.csa_const[frq_num] / 6.0
88 self.data.j_csa_comps[i] = 4.0*self.data.jw[frq_num, 0] + 3.0*self.data.jw[frq_num, 1]
89 if self.data.model == 'm3':
90 self.data.rex_comps[i] = self.data.params[1] * (1e-8 * self.mf.data.frq[frq_num])**2
91 elif self.data.model == 'm4':
92 self.data.rex_comps[i] = self.data.params[2] * (1e-8 * self.mf.data.frq[frq_num])**2
93
94
95 elif self.mf.data.data_types[i] == 'NOE':
96 self.data.dip_comps[i] = self.mf.data.dipole_const
97 self.data.j_dip_comps[i] = 6.0*self.data.jw[frq_num, 4] - self.data.jw[frq_num, 2]
98
99
100 self.data.ri_prime = zeros((self.mf.data.num_ri), Float64)
101
102
103 if match('m[34]', self.data.model):
104 self.data.ri_prime = self.data.dip_comps * self.data.j_dip_comps + self.data.csa_comps * self.data.j_csa_comps + self.data.rex_comps
105 else:
106 self.data.ri_prime = self.data.dip_comps * self.data.j_dip_comps + self.data.csa_comps * self.data.j_csa_comps
107