Example #1
0
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
Example #2
0
    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]))
Example #3
0
    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]))
Example #4
0
    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
Example #5
0
    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]))