コード例 #1
0
ファイル: __init__.py プロジェクト: kmdalton/dials
    def find_candidate_orientation_matrices(self, candidate_basis_vectors):

        candidate_crystal_models = combinations.candidate_orientation_matrices(
            candidate_basis_vectors,
            max_combinations=self.params.basis_vector_combinations.max_combinations,
        )
        if self._symmetry_handler.target_symmetry_reference_setting is not None:
            target_symmetry = self._symmetry_handler.target_symmetry_reference_setting
        elif self._symmetry_handler.target_symmetry_primitive is not None:
            target_symmetry = self._symmetry_handler.target_symmetry_primitive
        else:
            target_symmetry = None
        if target_symmetry is not None:
            candidate_crystal_models = combinations.filter_known_symmetry(
                candidate_crystal_models,
                target_symmetry,
                relative_length_tolerance=self.params.known_symmetry.relative_length_tolerance,
                absolute_angle_tolerance=self.params.known_symmetry.absolute_angle_tolerance,
                max_delta=self.params.known_symmetry.max_delta,
            )

        if self.refined_experiments is not None and len(self.refined_experiments) > 0:
            candidate_crystal_models = combinations.filter_similar_orientations(
                candidate_crystal_models,
                self.refined_experiments.crystals(),
                minimum_angular_separation=self.params.multiple_lattice_search.minimum_angular_separation,
            )

        return candidate_crystal_models
コード例 #2
0
ファイル: test_combinations.py プロジェクト: kmdalton/dials
def test_combinations(setup_rlp):
    max_cell = 1.3 * max(
        setup_rlp["crystal_symmetry"].unit_cell().parameters()[:3])
    strategy = FFT1D(max_cell)
    basis_vectors, used = strategy.find_basis_vectors(setup_rlp["rlp"])

    target_symmetry_primitive = (
        setup_rlp["crystal_symmetry"].primitive_setting().customized_copy(
            space_group_info=sgtbx.space_group().info()))
    target_symmetry_sg_only = (
        setup_rlp["crystal_symmetry"].primitive_setting().customized_copy(
            unit_cell=None))
    target_symmetry_ref = setup_rlp["crystal_symmetry"].as_reference_setting()

    for target_symmetry in (
            setup_rlp["crystal_symmetry"],
            target_symmetry_primitive,
            target_symmetry_sg_only,
            target_symmetry_ref,
    ):

        crystal_models = combinations.candidate_orientation_matrices(
            basis_vectors, max_combinations=50)
        crystal_models = list(crystal_models)
        filtered_crystal_models = combinations.filter_known_symmetry(
            crystal_models, target_symmetry=target_symmetry)
        filtered_crystal_models = list(filtered_crystal_models)

        assert filtered_crystal_models
        for model in filtered_crystal_models:
            best_subgroup = find_matching_symmetry(
                model.get_unit_cell(), target_symmetry.space_group())
            if target_symmetry.unit_cell() is not None:
                assert best_subgroup["best_subsym"].unit_cell().is_similar_to(
                    setup_rlp["crystal_symmetry"].as_reference_setting().
                    best_cell().unit_cell(),
                    relative_length_tolerance=0.1,
                    absolute_angle_tolerance=5,
                ) or best_subgroup["best_subsym"].minimum_cell().unit_cell(
                ).is_similar_to(
                    setup_rlp["crystal_symmetry"].as_reference_setting().
                    best_cell().minimum_cell().unit_cell(),
                    relative_length_tolerance=0.1,
                    absolute_angle_tolerance=5,
                )
            else:
                target_sg = (target_symmetry.space_group_info().
                             reference_setting().group())

                subgroups = metric_subgroups(model.get_crystal_symmetry(),
                                             max_delta=5,
                                             bravais_types_only=False)
                assert target_sg.build_derived_patterson_group() in [
                    g["ref_subsym"].space_group()
                    for g in subgroups.result_groups
                ]
コード例 #3
0
ファイル: test_combinations.py プロジェクト: kmdalton/dials
def test_filter_known_symmetry_no_matches(caplog):
    caplog.set_level(logging.DEBUG)
    unit_cell = uctbx.unit_cell((10, 10, 10, 90, 90, 90))
    crystal_models = []
    # the reciprocal matrix
    B = scitbx.matrix.sqr(unit_cell.fractionalization_matrix()).transpose()
    for _ in range(10):
        crystal_models.append(
            Crystal(B, space_group=sgtbx.space_group(), reciprocal=True))

    target_symmetry = crystal.symmetry(unit_cell=(15, 15, 15, 85, 85, 85),
                                       space_group=sgtbx.space_group())
    list(
        combinations.filter_known_symmetry(crystal_models,
                                           target_symmetry=target_symmetry))
    assert "Rejecting crystal model inconsistent with input symmetry" in caplog.text
    assert ("No crystal models remaining after comparing with known symmetry"
            in caplog.text)