Exemplo n.º 1
0
def refine_subgroup(args):
    assert len(args) == 5
    from dials.command_line.check_indexing_symmetry \
         import get_symop_correlation_coefficients, normalise_intensities

    params, subgroup, used_reflections, experiments, refiner_verbosity = args

    used_reflections = copy.deepcopy(used_reflections)
    triclinic_miller = used_reflections['miller_index']
    cb_op = subgroup['cb_op_inp_best']
    higher_symmetry_miller = cb_op.apply(triclinic_miller)
    used_reflections['miller_index'] = higher_symmetry_miller
    unrefined_crystal = copy.deepcopy(subgroup.unrefined_crystal)
    for expt in experiments:
        expt.crystal = unrefined_crystal

    from dials.algorithms.indexing.refinement import refine
    subgroup.max_cc = None
    subgroup.min_cc = None
    subgroup.correlation_coefficients = []
    subgroup.cc_nrefs = []
    try:
        logger = logging.getLogger()
        disabled = logger.disabled
        logger.disabled = True
        iqr_multiplier = params.refinement.reflections.outlier.tukey.iqr_multiplier
        params.refinement.reflections.outlier.tukey.iqr_multiplier = 2 * iqr_multiplier
        refinery, refined, outliers = refine(params,
                                             used_reflections,
                                             experiments,
                                             verbosity=refiner_verbosity)
        params.refinement.reflections.outlier.tukey.iqr_multiplier = iqr_multiplier
        refinery, refined, outliers = refine(params,
                                             used_reflections,
                                             refinery.get_experiments(),
                                             verbosity=refiner_verbosity)
    except RuntimeError as e:
        if (str(e) == "scitbx Error: g0 - astry*astry -astrz*astrz <= 0."
                or str(e) == "scitbx Error: g1-bstrz*bstrz <= 0."):
            subgroup.refined_experiments = None
            subgroup.rmsd = None
            subgroup.Nmatches = None
        else:
            raise
    else:
        dall = refinery.rmsds()
        dx = dall[0]
        dy = dall[1]
        subgroup.rmsd = math.sqrt(dx * dx + dy * dy)
        subgroup.Nmatches = len(refinery.get_matches())
        subgroup.refined_experiments = refinery.get_experiments()
        assert len(subgroup.refined_experiments.crystals()) == 1
        subgroup.refined_crystal = subgroup.refined_experiments.crystals()[0]
        cs = crystal.symmetry(
            unit_cell=subgroup.refined_crystal.get_unit_cell(),
            space_group=subgroup.refined_crystal.get_space_group())
        if 'intensity.sum.value' in used_reflections:
            # remove refl with -ve variance
            sel = used_reflections['intensity.sum.variance'] > 0
            good_reflections = used_reflections.select(sel)
            from cctbx import miller
            ms = miller.set(cs, good_reflections['miller_index'])
            ms = ms.array(
                good_reflections['intensity.sum.value'] /
                flex.sqrt(good_reflections['intensity.sum.variance']))
            if params.normalise:
                if params.normalise_bins:
                    ms = normalise_intensities(ms,
                                               n_bins=params.normalise_bins)
                else:
                    ms = normalise_intensities(ms)
            if params.cc_n_bins is not None:
                ms.setup_binner(n_bins=params.cc_n_bins)
            ccs, nrefs = get_symop_correlation_coefficients(
                ms, use_binning=(params.cc_n_bins is not None))
            subgroup.correlation_coefficients = ccs
            subgroup.cc_nrefs = nrefs
            ccs = ccs.select(nrefs > 10)
            if len(ccs) > 1:
                subgroup.max_cc = flex.max(ccs[1:])
                subgroup.min_cc = flex.min(ccs[1:])
    finally:
        logger.disabled = disabled
    return subgroup
Exemplo n.º 2
0
    cs = crystal.symmetry(
      unit_cell=subgroup.refined_crystal.get_unit_cell(),
      space_group=subgroup.refined_crystal.get_space_group())
    if 'intensity.sum.value' in used_reflections:
      from cctbx import miller
      ms = miller.set(cs, used_reflections['miller_index'])
      ms = ms.array(used_reflections['intensity.sum.value'] /
                    flex.sqrt(used_reflections['intensity.sum.variance']))
      if params.normalise:
        if params.normalise_bins:
          ms = normalise_intensities(ms, n_bins=params.normalise_bins)
        else:
          ms = normalise_intensities(ms)
      if params.cc_n_bins is not None:
        ms.setup_binner(n_bins=params.cc_n_bins)
      ccs, nrefs = get_symop_correlation_coefficients(
        ms, use_binning=(params.cc_n_bins is not None))
      subgroup.correlation_coefficients = ccs
      subgroup.cc_nrefs = nrefs
      ccs = ccs.select(nrefs > 10)
      if len(ccs) > 1:
        subgroup.max_cc = flex.max(ccs[1:])
        subgroup.min_cc = flex.min(ccs[1:])
  finally:
    logger.disabled = disabled
  return subgroup

from cctbx.sgtbx import subgroups
from cctbx.sgtbx import bravais_types
from cctbx.sgtbx import change_of_basis_op
find_max_delta = sgtbx.lattice_symmetry_find_max_delta
Exemplo n.º 3
0
def refine_subgroup(args):
    assert len(args) == 4
    from dials.command_line.check_indexing_symmetry import (
        get_symop_correlation_coefficients,
        normalise_intensities,
    )

    params, subgroup, used_reflections, experiments = args

    used_reflections = copy.deepcopy(used_reflections)
    triclinic_miller = used_reflections["miller_index"]
    cb_op = subgroup["cb_op_inp_best"]
    higher_symmetry_miller = cb_op.apply(triclinic_miller)
    used_reflections["miller_index"] = higher_symmetry_miller
    unrefined_crystal = copy.deepcopy(subgroup.unrefined_crystal)
    for expt in experiments:
        expt.crystal = unrefined_crystal

    from dials.algorithms.indexing.refinement import refine

    subgroup.max_cc = None
    subgroup.min_cc = None
    subgroup.correlation_coefficients = []
    subgroup.cc_nrefs = []

    with LoggingContext("dials.algorithms.refinement", level=logging.ERROR):
        try:
            outlier_algorithm = params.refinement.reflections.outlier.algorithm
            sel = used_reflections.get_flags(
                used_reflections.flags.used_in_refinement)
            if sel.all_eq(False):
                # Soft outlier rejection if no used_in_refinement flag is set
                params.refinement.reflections.outlier.algorithm = "tukey"
                iqr_multiplier = (
                    params.refinement.reflections.outlier.tukey.iqr_multiplier)
                params.refinement.reflections.outlier.tukey.iqr_multiplier = (
                    2 * iqr_multiplier)
                sel = ~sel
            else:
                # Remove reflections not previously used in refinement
                params.refinement.reflections.outlier.algorithm = "null"
            refinery, refined, outliers = refine(params,
                                                 used_reflections.select(sel),
                                                 experiments)
            params.refinement.reflections.outlier.algorithm = outlier_algorithm
            refinery, refined, outliers = refine(params, used_reflections,
                                                 refinery.get_experiments())
        except RuntimeError as e:
            if (str(e) == "scitbx Error: g0 - astry*astry -astrz*astrz <= 0."
                    or str(e) == "scitbx Error: g1-bstrz*bstrz <= 0."):
                subgroup.refined_experiments = None
                subgroup.rmsd = None
                subgroup.Nmatches = None
            else:
                raise
        else:
            dall = refinery.rmsds()
            dx = dall[0]
            dy = dall[1]
            subgroup.rmsd = math.sqrt(dx * dx + dy * dy)
            subgroup.Nmatches = len(refinery.get_matches())
            subgroup.refined_experiments = refinery.get_experiments()
            assert len(subgroup.refined_experiments.crystals()) == 1
            subgroup.refined_crystal = subgroup.refined_experiments.crystals(
            )[0]
            cs = crystal.symmetry(
                unit_cell=subgroup.refined_crystal.get_unit_cell(),
                space_group=subgroup.refined_crystal.get_space_group(),
            )
            if "intensity.sum.value" in used_reflections:
                # remove refl with -ve variance
                sel = used_reflections["intensity.sum.variance"] > 0
                good_reflections = used_reflections.select(sel)
                from cctbx import miller

                ms = miller.set(cs, good_reflections["miller_index"])
                ms = ms.array(
                    good_reflections["intensity.sum.value"] /
                    flex.sqrt(good_reflections["intensity.sum.variance"]))
                if params.normalise:
                    if params.normalise_bins:
                        ms = normalise_intensities(
                            ms, n_bins=params.normalise_bins)
                    else:
                        ms = normalise_intensities(ms)
                if params.cc_n_bins is not None:
                    ms.setup_binner(n_bins=params.cc_n_bins)
                ccs, nrefs = get_symop_correlation_coefficients(
                    ms, use_binning=(params.cc_n_bins is not None))
                subgroup.correlation_coefficients = ccs
                subgroup.cc_nrefs = nrefs
                ccs = ccs.select(nrefs > 10)
                if len(ccs) > 1:
                    subgroup.max_cc = flex.max(ccs[1:])
                    subgroup.min_cc = flex.min(ccs[1:])
    return subgroup
Exemplo n.º 4
0
            sel = used_reflections['intensity.sum.variance'] > 0
            good_reflections = used_reflections.select(sel)
            from cctbx import miller
            ms = miller.set(cs, good_reflections['miller_index'])
            ms = ms.array(
                good_reflections['intensity.sum.value'] /
                flex.sqrt(good_reflections['intensity.sum.variance']))
            if params.normalise:
                if params.normalise_bins:
                    ms = normalise_intensities(ms,
                                               n_bins=params.normalise_bins)
                else:
                    ms = normalise_intensities(ms)
            if params.cc_n_bins is not None:
                ms.setup_binner(n_bins=params.cc_n_bins)
            ccs, nrefs = get_symop_correlation_coefficients(
                ms, use_binning=(params.cc_n_bins is not None))
            subgroup.correlation_coefficients = ccs
            subgroup.cc_nrefs = nrefs
            ccs = ccs.select(nrefs > 10)
            if len(ccs) > 1:
                subgroup.max_cc = flex.max(ccs[1:])
                subgroup.min_cc = flex.min(ccs[1:])
    finally:
        logger.disabled = disabled
    return subgroup


from cctbx.sgtbx import subgroups
from cctbx.sgtbx import bravais_types
from cctbx.sgtbx import change_of_basis_op
find_max_delta = sgtbx.lattice_symmetry_find_max_delta