1 from Numeric import Float64, zeros
2 from re import match
3
6 "Function for creating the model-free spectral density values."
7
8
10 """Function to create the model-free spectral density values."
11
12 The spectral density equation
13 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
14
15 Data structure: self.data.jw
16 Dimension: 2D, (number of NMR frequencies, 5 spectral density frequencies)
17 Type: Numeric matrix, Float64
18 Dependencies: None
19 Required by: self.data.ri, self.data.dri, self.data.d2ri
20
21
22 Formulae
23 ~~~~~~~~
24
25 Original
26 ~~~~~~~~
27
28 2 / S2 . tm (1 - S2) . te' \
29 J(w) = - | ------------- + -------------- |
30 5 \ 1 + (w.tm)**2 1 + (w.te')**2 /
31
32
33 Extended
34 ~~~~~~~~
35
36 2 / S2 . tm (1 - Sf2) . tf' (S2f - S2) . ts' \
37 J(w) = - | ------------- + --------------- + ---------------- |
38 5 \ 1 + (w.tm)**2 1 + (w.tf')**2 1 + (w.ts')**2 /
39
40 """
41
42
43 self.initialise_jw_values()
44
45
46 self.data.jw = zeros((self.mf.data.num_frq, 5), Float64)
47
48
49 if match(self.data.diff_type, 'iso'):
50 if match('m[13]', self.data.model):
51 for i in range(self.mf.data.num_frq):
52 self.data.jw[i, 0] = self.calc_jw_iso_m13(i, 0)
53 self.data.jw[i, 1] = self.calc_jw_iso_m13(i, 1)
54 self.data.jw[i, 2] = self.calc_jw_iso_m13(i, 2)
55 self.data.jw[i, 3] = self.calc_jw_iso_m13(i, 3)
56 self.data.jw[i, 4] = self.calc_jw_iso_m13(i, 4)
57 elif match('m[24]', self.data.model):
58 for i in range(self.mf.data.num_frq):
59 self.data.jw[i, 0] = self.calc_jw_iso_m24(i, 0)
60 self.data.jw[i, 1] = self.calc_jw_iso_m24(i, 1)
61 self.data.jw[i, 2] = self.calc_jw_iso_m24(i, 2)
62 self.data.jw[i, 3] = self.calc_jw_iso_m24(i, 3)
63 self.data.jw[i, 4] = self.calc_jw_iso_m24(i, 4)
64 elif match('m5', self.data.model):
65 for i in range(self.mf.data.num_frq):
66 self.data.jw[i, 0] = self.calc_jw_iso_m5(i, 0)
67 self.data.jw[i, 1] = self.calc_jw_iso_m5(i, 1)
68 self.data.jw[i, 2] = self.calc_jw_iso_m5(i, 2)
69 self.data.jw[i, 3] = self.calc_jw_iso_m5(i, 3)
70 self.data.jw[i, 4] = self.calc_jw_iso_m5(i, 4)
71
72
73 elif match(self.data.diff_type, 'axail'):
74 raise NameError, "Axially symetric diffusion not implemented yet, quitting program."
75
76
77 elif match(self.data.diff_type, 'aniso'):
78 raise NameError, "Anisotropic diffusion not implemented yet, quitting program."
79
80 else:
81 raise NameError, "Diffusion type set incorrectly, quitting program."
82
83
85 "Calculate the model 1 and 3 spectral density values for isotropic rotational diffusion."
86
87 temp = 0.4 * (self.data.s2_tm / (1.0 + self.data.omega_tm_sqrd[i, frq_index]))
88 return temp
89
90
92 "Calculate the model 2 and 4 spectral density values for isotropic rotational diffusion."
93
94 temp = 0.4 * (self.data.s2_tm / (1.0 + self.data.omega_tm_sqrd[i, frq_index]) + (1.0 - self.data.s2) * self.data.te_prime / (1.0 + self.data.omega_te_prime_sqrd[i, frq_index]))
95 return temp
96
97
99 "Calculate the model 5 spectral density values for isotropic rotational diffusion."
100
101 temp = 0.4 * self.data.s2f * (self.data.s2s_tm / (1.0 + self.data.omega_tm_sqrd[i, frq_index]) + (1.0 - self.data.s2s) * self.data.ts_prime / (1.0 + self.data.omega_ts_prime_sqrd[i, frq_index]))
102 return temp
103
104
106 "Remap the parameters in self.data.params"
107
108
109 if match(self.data.diff_type, 'iso'):
110 self.data.tm = self.data.diff_params
111 self.data.tm_sqrd = self.data.tm ** 2
112 self.data.omega_tm_sqrd = zeros((self.mf.data.num_frq, 5), Float64)
113
114
115 if match('m[13]', self.data.model):
116 self.data.s2 = self.data.params[0]
117 self.data.s2_tm = self.data.s2 * self.data.tm
118
119 elif match('m[24]', self.data.model):
120 self.data.s2 = self.data.params[0]
121 self.data.te = self.data.params[1]
122 self.data.fact_a = self.data.tm / (self.data.te + self.data.tm)
123 self.data.te_prime = self.data.te * self.data.fact_a
124 self.data.te_prime_sqrd = self.data.te_prime ** 2
125 self.data.s2_tm = self.data.s2 * self.data.tm
126 self.data.omega_te_prime_sqrd = zeros((self.mf.data.num_frq, 5), Float64)
127
128 elif match('m5', self.data.model):
129 self.data.s2f = self.data.params[0]
130 self.data.s2s = self.data.params[1]
131 self.data.s2 = self.data.s2f * self.data.s2s
132 self.data.ts = self.data.params[2]
133 self.data.fact_a = self.data.tm / (self.data.ts + self.data.tm)
134 self.data.ts_prime = self.data.ts * self.data.fact_a
135 self.data.ts_prime_sqrd = self.data.ts_prime ** 2
136 self.data.s2s_tm = self.data.s2s * self.data.tm
137 self.data.omega_ts_prime_sqrd = zeros((self.mf.data.num_frq, 5), Float64)
138
139 for i in range(self.mf.data.num_frq):
140 for frq_index in range(5):
141 self.data.omega_tm_sqrd[i, frq_index] = self.mf.data.frq_sqrd_list[i][frq_index] * self.data.tm_sqrd
142 if match('m[24]', self.data.model):
143 self.data.omega_te_prime_sqrd[i, frq_index] = self.mf.data.frq_sqrd_list[i][frq_index] * self.data.te_prime_sqrd
144 elif match('m5', self.data.model):
145 self.data.omega_ts_prime_sqrd[i, frq_index] = self.mf.data.frq_sqrd_list[i][frq_index] * self.data.ts_prime_sqrd
146