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
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
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
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