Module star
[hide private]
[frames] | no frames]

Source Code for Module star

  1  from re import match 
  2  from string import split 
  3   
4 -class star:
5 - def __init__(self, mf):
6 "Class to extract model-free data from the STAR formatted mfout file." 7 8 self.mf = mf
9 10
11 - def extract(self, mfout, num_res, chi2_lim=0.90, ftest_lim=0.80, ftest='n'):
12 "Extract the data from the mfout file and Return it as a 2D data structure." 13 14 self.mfout = mfout 15 self.num_res = num_res 16 self.chi2_lim = chi2_lim 17 self.ftest_lim = ftest_lim 18 self.ftest = ftest 19 20 self.data = [] 21 for i in range(self.num_res): 22 self.data.append({}) 23 self.line_num = 0 24 25 if match('n', self.ftest): 26 self.get_relax_values() 27 self.get_s2() 28 self.get_s2f() 29 self.get_s2s() 30 self.get_te() 31 self.get_rex() 32 self.get_chi2() 33 elif match('y', self.ftest): 34 self.get_ftest() 35 36 return self.data
37 38
39 - def get_chi2(self):
40 # Jump to Chi2 data. 41 for line in range(len(self.mfout)): 42 self.row = split(self.mfout[line]) 43 try: 44 self.row[0] 45 except IndexError: 46 continue 47 48 if match('data_sse', self.row[0]): 49 self.line_num = line + 3 50 break 51 if match('y', self.mf.data.mfin.sims): 52 self.line_num = self.line_num + 2 53 for i in range(self.num_res): 54 self.row = [[]] 55 self.row[0] = split(self.mfout[self.line_num]) 56 percentile = int(self.chi2_lim * 100.0 / 5.0) 57 self.line_num = self.line_num + percentile 58 self.row.append(split(self.mfout[self.line_num])) 59 lines_next_res = 2 + ( 20 - int(percentile) ) 60 self.line_num = self.line_num + lines_next_res 61 self.data[i]['chi2'] = float(self.row[0][1]) 62 self.data[i]['chi2_lim'] = float(self.row[1][1]) 63 else: 64 self.split_rows(self.line_num, self.num_res) 65 for i in range(self.num_res): 66 self.data[i]['chi2'] = float(self.row[i][1])
67 68
69 - def get_ftest(self):
70 # Jump to first line of data. 71 for line in range(len(self.mfout)): 72 self.row = [[]] 73 self.row[0] = split(self.mfout[line]) 74 try: 75 self.row[0][0] 76 except IndexError: 77 continue 78 if match('data_F_dist', self.row[0][0]): 79 self.line_num = line + 5 80 break 81 for i in range(self.num_res): 82 self.row = [[]] 83 self.row[0] = split(self.mfout[self.line_num]) 84 percentile = int(self.ftest_lim * 100.0 / 5.0) 85 self.line_num = self.line_num + percentile 86 self.row.append(split(self.mfout[self.line_num])) 87 lines_next_res = 2 + ( 20 - int(percentile) ) 88 self.line_num = self.line_num + lines_next_res 89 self.data[i]['res_num'] = self.row[0][0] 90 self.data[i]['fstat'] = float(self.row[0][1]) 91 self.data[i]['fstat_lim'] = float(self.row[1][1])
92 93
94 - def get_relax_values(self):
95 # Jump to first line of data. 96 for line in range(len(self.mfout)): 97 self.row = split(self.mfout[line]) 98 try: 99 self.row[0] 100 except IndexError: 101 continue 102 103 if match('data_relaxation', self.row[0]): 104 self.line_num = line + 7 105 break 106 for i in range(self.mf.data.num_ri): 107 self.split_rows(self.line_num, self.num_res) 108 109 label = self.mf.data.frq_label[self.mf.data.remap_table[i]] + "_" + self.mf.data.data_types[i] 110 label_err = self.mf.data.frq_label[self.mf.data.remap_table[i]] + "_" + self.mf.data.data_types[i] + "_err" 111 label_fit = self.mf.data.frq_label[self.mf.data.remap_table[i]] + "_" + self.mf.data.data_types[i] + "_fit" 112 113 for i in range(self.num_res): 114 self.data[i][label] = float(self.row[i][1]) 115 self.data[i][label_err] = float(self.row[i][2]) 116 self.data[i][label_fit] = float(self.row[i][4]) 117 118 self.line_num = self.line_num + self.num_res + 3
119 120
121 - def get_rex(self):
122 # Jump to Rex data. 123 for line in range(len(self.mfout)): 124 self.row = split(self.mfout[line]) 125 try: 126 self.row[0] 127 except IndexError: 128 continue 129 130 if match('Rex', self.row[0]): 131 self.line_num = line + 1 132 break 133 self.split_rows(self.line_num, self.num_res) 134 for i in range(self.num_res): 135 self.data[i]['rex'] = float(self.row[i][1]) 136 self.data[i]['rex_err'] = float(self.row[i][5])
137 138
139 - def get_s2(self):
140 # Jump to S2 data. 141 for line in range(len(self.mfout)): 142 self.row = split(self.mfout[line]) 143 try: 144 self.row[0] 145 except IndexError: 146 continue 147 148 if match('S2', self.row[0]): 149 self.line_num = line + 1 150 break 151 self.split_rows(self.line_num, self.num_res) 152 for i in range(self.num_res): 153 self.data[i]['res_num'] = self.row[i][0] 154 self.data[i]['s2'] = float(self.row[i][1]) 155 self.data[i]['s2_err'] = float(self.row[i][5])
156 157
158 - def get_s2f(self):
159 # Jump to S2f data. 160 for line in range(len(self.mfout)): 161 self.row = split(self.mfout[line]) 162 try: 163 self.row[0] 164 except IndexError: 165 continue 166 167 if match('S2f', self.row[0]): 168 self.line_num = line + 1 169 break 170 self.split_rows(self.line_num, self.num_res) 171 for i in range(self.num_res): 172 self.data[i]['s2f'] = float(self.row[i][1]) 173 self.data[i]['s2f_err'] = float(self.row[i][5])
174 175
176 - def get_s2s(self):
177 # Jump to S2s data. 178 for line in range(len(self.mfout)): 179 self.row = split(self.mfout[line]) 180 try: 181 self.row[0] 182 except IndexError: 183 continue 184 185 if match('S2s', self.row[0]): 186 self.line_num = line + 1 187 break 188 self.split_rows(self.line_num, self.num_res) 189 for i in range(self.num_res): 190 self.data[i]['s2s'] = float(self.row[i][1]) 191 self.data[i]['s2s_err'] = float(self.row[i][5])
192 193
194 - def get_te(self):
195 # Jump to te data. 196 for line in range(len(self.mfout)): 197 self.row = split(self.mfout[line]) 198 try: 199 self.row[0] 200 except IndexError: 201 continue 202 203 if match('te', self.row[0]): 204 self.line_num = line + 1 205 break 206 self.split_rows(self.line_num, self.num_res) 207 for i in range(self.num_res): 208 self.data[i]['te'] = float(self.row[i][1]) 209 self.data[i]['te_err'] = float(self.row[i][5])
210 211
212 - def split_rows(self, line_num, num_lines):
213 "Get the next 'num_res' lines after a match." 214 215 for i in range(num_lines): 216 if i == 0: 217 self.row = [[]] 218 self.row[0] = split(self.mfout[line_num]) 219 else: 220 self.row.append(split(self.mfout[line_num + i]))
221