def test_symmetry_basis_changes_for_C2(tmpdir): """Test the correctness of change of basis operations in dials.symmetry Supply the unit cell of beta-lactamase, which triggers a change of basis from input to minimum during symmetry analysis.""" os.chdir(tmpdir.strpath) unit_cell = (53.173, 61.245, 69.292, 90.0, 93.04675, 90.0) space_group = sgtbx.space_group_info("C 2").group() experiments, reflections, _ = generate_experiments_reflections( space_group=space_group, unit_cell=unit_cell, sample_size=1, map_to_minimum=False, ) experiments.as_json("tmp.expt") expt_file = tmpdir.join("tmp.expt").strpath joint_table = flex.reflection_table() for r in reflections: joint_table.extend(r) joint_table.as_pickle("tmp.refl") refl_file = tmpdir.join("tmp.refl").strpath command = ["dials.symmetry", expt_file, refl_file] result = procrunner.run(command, working_directory=tmpdir.strpath) assert not result.returncode and not result.stderr assert tmpdir.join("symmetrized.refl").check(file=1) assert tmpdir.join("symmetrized.expt").check(file=1) expts = load.experiment_list(tmpdir.join("symmetrized.expt").strpath, check_format=False) for v, expected in zip(expts[0].crystal.get_unit_cell().parameters(), unit_cell): assert v == pytest.approx(expected)
def test_synthetic( space_group, unit_cell, dimensions, sample_size, use_known_space_group, use_known_lattice_group, tmpdir, ): os.chdir(tmpdir.strpath) space_group = sgtbx.space_group_info(space_group).group() if unit_cell is not None: unit_cell = uctbx.unit_cell(unit_cell) experiments, reflections, reindexing_ops = generate_experiments_reflections( space_group=space_group, unit_cell=unit_cell, unit_cell_volume=10000, sample_size=sample_size, map_to_p1=True, d_min=1.5, ) params = phil_scope.extract() if use_known_space_group: params.space_group = space_group.info() if use_known_lattice_group: params.lattice_group = space_group.info() if dimensions is not None: params.dimensions = dimensions experiments, reflections = assign_unique_identifiers( experiments, reflections) cosym_instance = cosym(experiments, reflections, params=params) register_default_cosym_observers(cosym_instance) cosym_instance.run() cosym_instance.export() assert os.path.exists(params.output.experiments) assert os.path.exists(params.output.reflections) assert os.path.exists(params.output.html) assert os.path.exists(params.output.json) cosym_expts = load.experiment_list(params.output.experiments, check_format=False) assert len(cosym_expts) == len(experiments) for expt in cosym_expts: if unit_cell is not None: assert expt.crystal.get_unit_cell().parameters() == pytest.approx( unit_cell.parameters()) assert str(expt.crystal.get_space_group().info()) == str( space_group.info()) assert expt.crystal.get_space_group() == space_group
def test_symmetry_basis_changes_for_C2(tmpdir): """Test the correctness of change of basis operations in dials.symmetry Supply the unit cell of beta-lactamase, which triggers a change of basis from input to minimum during symmetry analysis.""" os.chdir(tmpdir.strpath) unit_cell = (53.173, 61.245, 69.292, 90.0, 93.04675, 90.0) space_group = sgtbx.space_group_info("C 2").group() experiments, reflections, _ = generate_experiments_reflections( space_group=space_group, unit_cell=unit_cell, sample_size=1, map_to_minimum=False, ) experiments.as_json("tmp.expt") expt_file = tmpdir.join("tmp.expt").strpath joint_table = flex.reflection_table() for r in reflections: joint_table.extend(r) joint_table.as_file("tmp.refl") refl_file = tmpdir.join("tmp.refl").strpath command = ["dials.symmetry", expt_file, refl_file, "json=symmetry.json"] result = procrunner.run(command, working_directory=tmpdir.strpath) assert not result.returncode and not result.stderr assert tmpdir.join("symmetrized.refl").check(file=1) assert tmpdir.join("symmetrized.expt").check(file=1) expts = load.experiment_list(tmpdir.join("symmetrized.expt").strpath, check_format=False) for v, expected in zip(expts[0].crystal.get_unit_cell().parameters(), unit_cell): assert v == pytest.approx(expected) # Using the change of basis ops from the json output we should be able to # reindex the input experiments to match the output experiments with tmpdir.join("symmetry.json").open() as f: d = json.load(f) cs = experiments[0].crystal.get_crystal_symmetry() cb_op_inp_min = sgtbx.change_of_basis_op(str(d["cb_op_inp_min"][0])) cb_op_min_best = sgtbx.change_of_basis_op( str(d["subgroup_scores"][0]["cb_op"])) assert cs.change_basis(cb_op_min_best * cb_op_inp_min).is_similar_symmetry( expts[0].crystal.get_crystal_symmetry())
def test_synthetic( space_group, unit_cell, dimensions, sample_size, use_known_space_group, use_known_lattice_group, tmpdir, ): os.chdir(tmpdir.strpath) space_group = sgtbx.space_group_info(space_group).group() if unit_cell is not None: unit_cell = uctbx.unit_cell(unit_cell) experiments, reflections, _ = generate_experiments_reflections( space_group=space_group, unit_cell=unit_cell, unit_cell_volume=10000, sample_size=sample_size, map_to_p1=True, d_min=1.5, ) experiments.as_json("tmp.expt") expt_file = tmpdir.join("tmp.expt").strpath joint_table = flex.reflection_table() for r in reflections: joint_table.extend(r) joint_table.as_file("tmp.refl") refl_file = tmpdir.join("tmp.refl").strpath command = [ "dials.cosym", expt_file, refl_file, "output.experiments=symmetrized.expt", "output.reflections=symmetrized.refl", "output.html=cosym.html", "output.json=cosym.json", ] if use_known_space_group: command.append("space_group=%s" % space_group.info()) if use_known_lattice_group: command.append("lattice_group=%s" % space_group.info()) if dimensions is not None: command.append("dimensions=%s" % dimensions) result = procrunner.run(command, working_directory=tmpdir.strpath) assert not result.returncode and not result.stderr assert tmpdir.join("symmetrized.refl").check(file=1) assert tmpdir.join("symmetrized.expt").check(file=1) assert tmpdir.join("cosym.html").check(file=1) assert tmpdir.join("cosym.json").check(file=1) """experiments, reflections = assign_unique_identifiers(experiments, reflections) cosym_instance = cosym(experiments, reflections, params=params) register_default_cosym_observers(cosym_instance) cosym_instance.run() cosym_instance.export() assert os.path.exists(params.output.experiments) assert os.path.exists(params.output.reflections) assert os.path.exists(params.output.html) assert os.path.exists(params.output.json)""" cosym_expts = load.experiment_list(tmpdir.join("symmetrized.expt").strpath, check_format=False) assert len(cosym_expts) == len(experiments) for expt in cosym_expts: if unit_cell is not None: assert expt.crystal.get_unit_cell().parameters() == pytest.approx( unit_cell.parameters()) if (str(expt.crystal.get_space_group().info()) == "P 6 2 2" and str(space_group.info()) == "P 3 2 1"): # This is fine continue assert str(expt.crystal.get_space_group().info()) == str( space_group.info()) assert expt.crystal.get_space_group() == space_group
def test_synthetic( space_group, unit_cell, dimensions, sample_size, use_known_space_group, use_known_lattice_group, run_in_tmpdir, ): space_group = sgtbx.space_group_info(space_group).group() if unit_cell is not None: unit_cell = uctbx.unit_cell(unit_cell) experiments, reflections, _ = generate_experiments_reflections( space_group=space_group, unit_cell=unit_cell, unit_cell_volume=10000, sample_size=sample_size, map_to_p1=True, d_min=1.5, ) experiments.as_json("tmp.expt") expt_file = "tmp.expt" joint_table = flex.reflection_table() for r in reflections: joint_table.extend(r) joint_table.as_file("tmp.refl") refl_file = "tmp.refl" args = [ expt_file, refl_file, "output.experiments=symmetrized.expt", "output.reflections=symmetrized.refl", "output.html=cosym.html", "output.json=cosym.json", ] if use_known_space_group: args.append(f"space_group={space_group.info()}") if use_known_lattice_group: args.append(f"lattice_group={space_group.info()}") if dimensions is not None: args.append(f"dimensions={dimensions}") dials_cosym.run(args=args) assert os.path.isfile("symmetrized.refl") assert os.path.isfile("symmetrized.expt") assert os.path.isfile("cosym.html") assert os.path.isfile("cosym.json") cosym_expts = load.experiment_list("symmetrized.expt", check_format=False) assert len(cosym_expts) == len(experiments) for expt in cosym_expts: if unit_cell is not None: assert expt.crystal.get_unit_cell().parameters() == pytest.approx( unit_cell.parameters() ) if ( str(expt.crystal.get_space_group().info()) == "P 6 2 2" and str(space_group.info()) == "P 3 2 1" ): # This is fine continue assert str(expt.crystal.get_space_group().info()) == str(space_group.info()) assert expt.crystal.get_space_group() == space_group