Package functions :: Module jw_mf
[hide private]
[frames] | no frames]

Source Code for Module functions.jw_mf

  1  from Numeric import Float64, zeros 
  2  from re import match 
  3   
4 -class Jw:
5 - def __init__(self):
6 "Function for creating the model-free spectral density values."
7 8
9 - def Jw(self):
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 # Calculate frequency independent terms (to increase speed) 43 self.initialise_jw_values() 44 45 # Initialise the spectral density values. 46 self.data.jw = zeros((self.mf.data.num_frq, 5), Float64) 47 48 # Isotropic rotational diffusion. 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 # Axially symmetric rotational diffusion. 73 elif match(self.data.diff_type, 'axail'): 74 raise NameError, "Axially symetric diffusion not implemented yet, quitting program." 75 76 # Anisotropic rotational diffusion. 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
84 - def calc_jw_iso_m13(self, i, frq_index):
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
91 - def calc_jw_iso_m24(self, i, frq_index):
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
98 - def calc_jw_iso_m5(self, i, frq_index):
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
105 - def initialise_jw_values(self):
106 "Remap the parameters in self.data.params" 107 108 # Isotropic dependent values. 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 # Diffusion independent values. 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