def parse_pointless_output_for_symm(output): lines = output.splitlines() ret = {} best_symm, best_cell = None, None read_flag = False for l in lines: if l.startswith("Best Solution:"): group_type = l.split()[2] assert group_type in ("point", "space") # How can we support Laue? best_symm = l[l.index("group")+6:].strip() read_flag = True elif read_flag and "Reindex operator:" in l: tmp = l.split(":")[1] tmp = tmp[tmp.index("[")+1:tmp.index("]")] ret["reindex_op"] = sgtbx.change_of_basis_op(tmp) elif read_flag and "Laue group probability:" in l: ret["laue_prob"] = util.safe_float(l.split(":")[1]) elif read_flag and "Unit cell:" in l: r = re_cell.search(l) if r: best_cell = map(float, r.groups()) if None not in (best_symm, best_cell): ret["symm"] = crystal.symmetry(unit_cell=best_cell, space_group_symbol=best_symm, assert_is_compatible_unit_cell=False) return ret
def parse(self, lpin): self.by_frame = {} self.by_framediff = {} reading = "" for l in open(lpin): if "Frame #refs #misfits Iobs sigma Iobs/sigma Peak Corr Rmeas #rmeas #unique" in l: reading = "by_frame" elif reading == "by_frame": if "For inline graphs use a Java browser" in l: reading = "" continue if len(l) < 94: continue # frame, nrefs, nmisfits, iobs, sigma, ios, peak, corr, rmeas, nrmeas, nuniq, (dummy) sp = l[:6], l[6:13], l[13:18], l[18:28], l[28:38], l[38:48], l[ 48:58], l[58:68], l[68:78], l[78:85], l[85:92] self.by_frame.setdefault("frame", []).append(int(sp[0])) self.by_frame.setdefault("nrefs", []).append(int(sp[1])) self.by_frame.setdefault("nmisfits", []).append(int(sp[2])) self.by_frame.setdefault("iobs", []).append(safe_float(sp[3])) self.by_frame.setdefault("sigma", []).append(safe_float(sp[4])) self.by_frame.setdefault("ios", []).append(safe_float(sp[5])) self.by_frame.setdefault("peak", []).append(safe_float(sp[6])) self.by_frame.setdefault("corr", []).append(safe_float(sp[7])) self.by_frame.setdefault("rmeas", []).append(safe_float(sp[8])) self.by_frame.setdefault("nrmeas", []).append(int(sp[9])) self.by_frame.setdefault("nuniq", []).append(int(sp[10])) elif "Framediff #refs R_d n-notfriedel Rd-notfriedel n-friedel Rd-friedel" in l: reading = "by_framediff" elif reading == "by_framediff": if "For inline graphs use a Java browser" in l: reading = "" continue if len(l) < 71: continue # Framediff #refs R_d n-notfriedel Rd-notfriedel n-friedel Rd-friedel, (dummy) sp = l[:6], l[6:14], l[14:24], l[24:32], l[32:42], l[42:50], l[ 50:60] self.by_framediff.setdefault("framediff", []).append(int(sp[0])) self.by_framediff.setdefault("nrefs", []).append(int(sp[1])) self.by_framediff.setdefault("rd", []).append(float(sp[2]))
def parse(self, lpin): self.by_frame = {} self.by_framediff = {} reading = "" for l in open(lpin): if "Frame #refs #misfits Iobs sigma Iobs/sigma Peak Corr Rmeas #rmeas #unique" in l: reading = "by_frame" elif reading == "by_frame": if "For inline graphs use a Java browser" in l: reading = "" continue if len(l) < 94: continue # frame, nrefs, nmisfits, iobs, sigma, ios, peak, corr, rmeas, nrmeas, nuniq, (dummy) sp = l[:6], l[6:13], l[13:18], l[18:28], l[28:38], l[38:48], l[48:58], l[58:68], l[68:78], l[78:85], l[85:92] self.by_frame.setdefault("frame", []).append(int(sp[0])) self.by_frame.setdefault("nrefs", []).append(int(sp[1])) self.by_frame.setdefault("nmisfits", []).append(int(sp[2])) self.by_frame.setdefault("iobs", []).append(safe_float(sp[3])) self.by_frame.setdefault("sigma", []).append(safe_float(sp[4])) self.by_frame.setdefault("ios", []).append(safe_float(sp[5])) self.by_frame.setdefault("peak", []).append(safe_float(sp[6])) self.by_frame.setdefault("corr", []).append(safe_float(sp[7])) self.by_frame.setdefault("rmeas", []).append(safe_float(sp[8])) self.by_frame.setdefault("nrmeas", []).append(int(sp[9])) self.by_frame.setdefault("nuniq", []).append(int(sp[10])) elif "Framediff #refs R_d n-notfriedel Rd-notfriedel n-friedel Rd-friedel" in l: reading = "by_framediff" elif reading == "by_framediff": if "For inline graphs use a Java browser" in l: reading = "" continue if len(l) < 71: continue # Framediff #refs R_d n-notfriedel Rd-notfriedel n-friedel Rd-friedel, (dummy) sp = l[:6], l[6:14], l[14:24], l[24:32], l[32:42], l[42:50], l[50:60] self.by_framediff.setdefault("framediff", []).append(int(sp[0])) self.by_framediff.setdefault("nrefs", []).append(int(sp[1])) self.by_framediff.setdefault("rd", []).append(float(sp[2]))
def parse(self, lpin): reading = "" self.table = {} self.error_table = {} self.space_group = None self.unit_cell = map(lambda x: float("nan"), xrange(6)) self.unit_cell_esd = map(lambda x: float("nan"), xrange(6)) self.a_b_ISa = map(lambda x: float("nan"), xrange(3)) self.snippets = {} lines = open(lpin).readlines() for i, l in enumerate(lines): if l.startswith(" FRIEDEL'S_LAW="): self.anomalous_flag = "FALSE" in l # ************ SELECTED SPACE GROUP AND UNIT CELL FOR THIS DATA SET ************ elif "SELECTED SPACE GROUP AND UNIT CELL FOR THIS DATA SET" in l: reading = "selected_symmetry" elif reading == "selected_symmetry": # Info before refinement if "SPACE_GROUP_NUMBER=" in l: self.space_group = sgtbx.space_group_info(int(l[l.index("=")+1:])).group() elif "UNIT_CELL_CONSTANTS=" in l: # Will be overridden if refined tmp = l[l.index("=")+1:] self.unit_cell = map(float, (tmp[0:9],tmp[9:18],tmp[18:27],tmp[27:35],tmp[35:43],tmp[43:51])) if "********" in l: reading = "" # ****************************************************************************** # REFINEMENT OF DIFFRACTION PARAMETERS USING ALL IMAGES # ****************************************************************************** elif l.startswith(" UNIT CELL PARAMETERS"): cell_params = map(float, (l[21:32], l[32:42], l[42:52], l[52:60], l[60:68], l[68:76])) self.unit_cell = cell_params elif l.startswith(" E.S.D. OF CELL PARAMETERS"): esd_params = map(float, (l[26:35], l[35:43], l[43:51], l[51:59], l[59:67], l[67:75])) self.unit_cell_esd = esd_params elif l.startswith(" SPACE GROUP NUMBER"): self.space_group = sgtbx.space_group_info(int(l[20:])).group() # ****************************************************************************** # CORRECTION PARAMETERS FOR THE STANDARD ERROR OF REFLECTION INTENSITIES # ****************************************************************************** elif "a b ISa" in l: reading = "ISa" self.snippets["ISa"] = l elif reading == "ISa": a, b, ISa = map(float, l.split()) reading = "" self.a_b_ISa = a, b, ISa self.snippets["ISa"] += l # ****************************************************************************** # STANDARD ERROR OF REFLECTION INTENSITIES AS FUNCTION OF RESOLUTION # FOR DATA SET XDS_ASCII.HKL # ****************************************************************************** elif "RESOLUTION RANGE I/Sigma Chi^2 R-FACTOR R-FACTOR NUMBER ACCEPTED REJECTED" in l: reading = "error_table" elif reading == "error_table": if l.startswith(" ***"): reading = "" continue if len(l.split()) < 3: continue sp = errortable_split(l) # Note that the last line is about overall data self.error_table.setdefault("dmax", []).append(float(sp[0])) self.error_table.setdefault("dmin", []).append(float(sp[1])) self.error_table.setdefault("ios", []).append(safe_float(sp[2])) self.error_table.setdefault("chisq", []).append(safe_float(sp[3])) self.error_table.setdefault("r_merge", []).append(safe_float(sp[4])) self.error_table.setdefault("number", []).append(int(sp[6])) self.error_table.setdefault("nacc", []).append(int(sp[7])) self.error_table.setdefault("nrej", []).append(int(sp[8])) #if "SUMMARY OF DATA SET STATISTICS FOR IMAGE": # ****************************************************************************** # STATISTICS OF SAVED DATA SET "XDS_ASCII.HKL" (DATA_RANGE= x x) # FILE TYPE: XDS_ASCII MERGE=FALSE FRIEDEL'S_LAW=x # ****************************************************************************** elif 'STATISTICS OF SAVED DATA SET "XDS_ASCII.HKL"' in l: reading = "stats_all" continue elif "SUBSET OF INTENSITY DATA WITH SIGNAL/NOISE >= -3.0 AS FUNCTION OF RESOLUTION" in l: self.snippets["table1"] = l if reading == "stats_all": key = "all" self.table[key] = {} for ll in lines[i+1:i+4]: self.snippets["table1"] += ll for ll in lines[i+4:i+4+10]: self.snippets["table1"] += ll sp = table_split(ll) assert len(sp) == 14 self.table[key].setdefault("dmin", []).append(float(sp[0]) if sp[0]!="total" else None) self.table[key].setdefault("redundancy", []).append(float(sp[1])/float(sp[2]) if float(sp[2]) > 0 else 0) self.table[key].setdefault("cmpl", []).append(float(sp[4][:-1])) self.table[key].setdefault("r_merge", []).append(float(sp[5][:-1])) self.table[key].setdefault("i_over_sigma", []).append(float(sp[8])) self.table[key].setdefault("r_meas", []).append(safe_float(sp[9][:-1])) self.table[key].setdefault("cc_half", []).append(float(sp[10].replace("*",""))) self.table[key].setdefault("cc_ano", []).append(float(sp[11].replace("*",""))) self.table[key].setdefault("sig_ano", []).append(float(sp[12])) if sp[0]=="total": # in case less than 9 shells break
def parse(self, lpin): reading = "" self.table = {} self.error_table = {} self.space_group, self.unit_cell, self.unit_cell_esd = None, None, None self.a_b_ISa = [float("nan"), float("nan"),float("nan")] self.snippets = {} lines = open(lpin).readlines() for i, l in enumerate(lines): if l.startswith(" FRIEDEL'S_LAW="): self.anomalous_flag = "FALSE" in l # ************ SELECTED SPACE GROUP AND UNIT CELL FOR THIS DATA SET ************ elif "SELECTED SPACE GROUP AND UNIT CELL FOR THIS DATA SET" in l: reading = "selected_symmetry" elif reading == "selected_symmetry": # Info before refinement if "SPACE_GROUP_NUMBER=" in l: self.space_group = sgtbx.space_group_info(int(l[l.index("=")+1:])).group() elif "UNIT_CELL_CONSTANTS=" in l: # Will be overridden if refined tmp = l[l.index("=")+1:] self.unit_cell = map(float, (tmp[0:9],tmp[9:18],tmp[18:27],tmp[27:35],tmp[35:43],tmp[43:51])) if "********" in l: reading = "" # ****************************************************************************** # REFINEMENT OF DIFFRACTION PARAMETERS USING ALL IMAGES # ****************************************************************************** elif l.startswith(" UNIT CELL PARAMETERS"): cell_params = map(float, (l[21:32], l[32:42], l[42:52], l[52:60], l[60:68], l[68:76])) self.unit_cell = cell_params elif l.startswith(" E.S.D. OF CELL PARAMETERS"): esd_params = map(float, (l[26:35], l[35:43], l[43:51], l[51:59], l[59:67], l[67:75])) self.unit_cell_esd = esd_params elif l.startswith(" SPACE GROUP NUMBER"): self.space_group = sgtbx.space_group_info(int(l[20:])).group() # ****************************************************************************** # CORRECTION PARAMETERS FOR THE STANDARD ERROR OF REFLECTION INTENSITIES # ****************************************************************************** elif "a b ISa" in l: reading = "ISa" self.snippets["ISa"] = l elif reading == "ISa": a, b, ISa = map(float, l.split()) reading = "" self.a_b_ISa = a, b, ISa self.snippets["ISa"] += l # ****************************************************************************** # STANDARD ERROR OF REFLECTION INTENSITIES AS FUNCTION OF RESOLUTION # FOR DATA SET XDS_ASCII.HKL # ****************************************************************************** elif "RESOLUTION RANGE I/Sigma Chi^2 R-FACTOR R-FACTOR NUMBER ACCEPTED REJECTED" in l: reading = "error_table" elif reading == "error_table": if l.startswith(" ***"): reading = "" continue if len(l.split()) < 3: continue sp = errortable_split(l) # Note that the last line is about overall data self.error_table.setdefault("dmax", []).append(float(sp[0])) self.error_table.setdefault("dmin", []).append(float(sp[1])) self.error_table.setdefault("ios", []).append(safe_float(sp[2])) self.error_table.setdefault("chisq", []).append(safe_float(sp[3])) self.error_table.setdefault("r_merge", []).append(safe_float(sp[4])) self.error_table.setdefault("number", []).append(int(sp[6])) self.error_table.setdefault("nacc", []).append(int(sp[7])) self.error_table.setdefault("nrej", []).append(int(sp[8])) #if "SUMMARY OF DATA SET STATISTICS FOR IMAGE": # ****************************************************************************** # STATISTICS OF SAVED DATA SET "XDS_ASCII.HKL" (DATA_RANGE= x x) # FILE TYPE: XDS_ASCII MERGE=FALSE FRIEDEL'S_LAW=x # ****************************************************************************** elif 'STATISTICS OF SAVED DATA SET "XDS_ASCII.HKL"' in l: reading = "stats_all" continue elif "SUBSET OF INTENSITY DATA WITH SIGNAL/NOISE >= -3.0 AS FUNCTION OF RESOLUTION" in l: self.snippets["table1"] = l if reading == "stats_all": key = "all" self.table[key] = {} for ll in lines[i+1:i+4]: self.snippets["table1"] += ll for ll in lines[i+4:i+4+10]: self.snippets["table1"] += ll sp = table_split(ll) assert len(sp) == 14 self.table[key].setdefault("dmin", []).append(float(sp[0]) if sp[0]!="total" else None) self.table[key].setdefault("redundancy", []).append(float(sp[1])/float(sp[2]) if float(sp[2]) > 0 else 0) self.table[key].setdefault("cmpl", []).append(float(sp[4][:-1])) self.table[key].setdefault("r_merge", []).append(float(sp[5][:-1])) self.table[key].setdefault("i_over_sigma", []).append(float(sp[8])) self.table[key].setdefault("r_meas", []).append(safe_float(sp[9][:-1])) self.table[key].setdefault("cc_half", []).append(float(sp[10].replace("*",""))) self.table[key].setdefault("cc_ano", []).append(float(sp[11].replace("*",""))) self.table[key].setdefault("sig_ano", []).append(float(sp[12]))