def exercise_labelit_indexer(): if not have_dials_regression: print "Skipping exercise_labelit_indexer(): dials_regression not configured" return xia2_demo_data = os.path.join(dials_regression, "xia2_demo_data") template = os.path.join(xia2_demo_data, "insulin_1_###.img") cwd = os.path.abspath(os.curdir) tmp_dir = os.path.abspath(open_tmp_directory()) os.chdir(tmp_dir) from xia2.Modules.Indexer.LabelitIndexer import LabelitIndexer from xia2.DriverExceptions.NotAvailableError import NotAvailableError try: ls = LabelitIndexer(indxr_print=True) except NotAvailableError: print "Skipping exercise_labelit_indexer(): labelit not found" return ls.set_working_directory(tmp_dir) from dxtbx.datablock import DataBlockTemplateImporter importer = DataBlockTemplateImporter([template]) datablocks = importer.datablocks imageset = datablocks[0].extract_imagesets()[0] ls.add_indexer_imageset(imageset) ls.index() assert approx_equal(ls.get_indexer_cell(), (78.58, 78.58, 78.58, 90, 90, 90)) solution = ls.get_solution() assert approx_equal(solution['rmsd'], 0.076) assert approx_equal(solution['metric'], 0.1566, eps=1e-3) assert solution['number'] == 22 assert solution['lattice'] == 'cI' assert solution['mosaic'] == 0.025 assert abs(solution['nspots'] - 860) <= 1 beam_centre = ls.get_indexer_beam_centre() assert approx_equal(beam_centre, (94.3416, 94.4994), eps=1e-2) assert ls.get_indexer_images() == [(1, 1), (22, 22), (45, 45)] print ls.get_indexer_experiment_list()[0].crystal print ls.get_indexer_experiment_list()[0].detector json_str = ls.as_json() #print ls.to_dict() print json_str ls1 = LabelitIndexer.from_json(string=json_str) ls1.index() print ls.get_indexer_experiment_list()[0].crystal assert ls.get_indexer_beam_centre() == ls1.get_indexer_beam_centre() assert approx_equal(ls.get_indexer_images(), ls1.get_indexer_images()) assert ls.get_distance() == ls1.get_distance() ls.eliminate() ls1.eliminate() print ls1.get_indexer_experiment_list()[0].crystal assert ls.get_indexer_beam_centre() == ls1.get_indexer_beam_centre() assert approx_equal(ls.get_indexer_images(), ls1.get_indexer_images()) assert ls.get_distance() == ls1.get_distance() print ls1.get_indexer_cell() print ls1.get_solution() assert approx_equal(ls.get_indexer_cell(), (111.11, 111.11, 68.08, 90.0, 90.0, 120.0), 1e-1) solution = ls1.get_solution() assert solution['rmsd'] >= 0.07, solution['rmsd'] assert approx_equal(solution['metric'], 0.1291, eps=1e-3) #assert solution['number'] == 8 assert solution['lattice'] == 'hR', solution['lattice'] assert solution['mosaic'] == 0.025, solution['mosaic'] assert abs(solution['nspots'] - 856) <= 3
def test_labelit_indexer(ccp4, xia2_regression_build, tmpdir): template = os.path.join(xia2_regression_build, "test_data", "insulin", "insulin_1_###.img") tmpdir.chdir() from xia2.Modules.Indexer.LabelitIndexer import LabelitIndexer from xia2.DriverExceptions.NotAvailableError import NotAvailableError try: ls = LabelitIndexer(indxr_print=True) except NotAvailableError: pytest.skip("labelit not found") ls.set_working_directory(tmpdir.strpath) from dxtbx.datablock import DataBlockTemplateImporter importer = DataBlockTemplateImporter([template]) datablocks = importer.datablocks imageset = datablocks[0].extract_imagesets()[0] ls.add_indexer_imageset(imageset) ls.index() assert ls.get_indexer_cell() == pytest.approx( (78.58, 78.58, 78.58, 90, 90, 90), abs=0.5) solution = ls.get_solution() assert solution['rmsd'] <= 0.2 assert solution['metric'] <= 0.16 assert solution['number'] == 22 assert solution['lattice'] == 'cI' assert solution['mosaic'] <= 0.25 assert solution['nspots'] == pytest.approx(860, abs=30) beam_centre = ls.get_indexer_beam_centre() assert beam_centre == pytest.approx((94.3416, 94.4994), abs=2e-1) assert ls.get_indexer_images() == [(1, 1), (22, 22), (45, 45)] print(ls.get_indexer_experiment_list()[0].crystal) print(ls.get_indexer_experiment_list()[0].detector) json_str = ls.as_json() # print(json_str) ls1 = LabelitIndexer.from_json(string=json_str) ls1.index() print(ls.get_indexer_experiment_list()[0].crystal) assert ls.get_indexer_beam_centre() == ls1.get_indexer_beam_centre() assert ls1.get_indexer_images() == [[1, 1], [22, 22], [45, 45]] # in JSON tuples become lists assert ls.get_distance() == ls1.get_distance() ls.eliminate() ls1.eliminate() print(ls1.get_indexer_experiment_list()[0].crystal) assert ls.get_indexer_beam_centre() == ls1.get_indexer_beam_centre() assert ls.get_indexer_images() == [(1, 1), (22, 22), (45, 45)] assert ls1.get_indexer_images() == [[1, 1], [22, 22], [45, 45]] # in JSON tuples become lists assert ls.get_distance() == ls1.get_distance() print(ls1.get_indexer_cell()) print(ls1.get_solution()) assert ls.get_indexer_cell() == pytest.approx( (111.11, 111.11, 68.08, 90.0, 90.0, 120.0), abs=5e-1) solution = ls1.get_solution() assert solution['rmsd'] >= 0.07, solution['rmsd'] assert solution['metric'] == pytest.approx(0.1291, abs=1e-1) assert solution['lattice'] == 'hR', solution['lattice'] assert solution['mosaic'] <= 0.3, solution['mosaic'] assert solution['nspots'] == pytest.approx(856, abs=30)
def test_labelit_indexer(regression_test, ccp4, dials_data, run_in_tmpdir): template = dials_data("insulin").join("insulin_1_###.img").strpath from xia2.Modules.Indexer.LabelitIndexer import LabelitIndexer from xia2.DriverExceptions.NotAvailableError import NotAvailableError try: ls = LabelitIndexer(indxr_print=True) except NotAvailableError: pytest.skip("labelit not found") ls.set_working_directory(run_in_tmpdir.strpath) from dxtbx.model.experiment_list import ExperimentListTemplateImporter importer = ExperimentListTemplateImporter([template]) experiments = importer.experiments imageset = experiments.imagesets()[0] ls.add_indexer_imageset(imageset) ls.index() assert ls.get_indexer_cell() == pytest.approx( (78.58, 78.58, 78.58, 90, 90, 90), abs=0.5) solution = ls.get_solution() assert solution["rmsd"] <= 0.2 assert solution["metric"] <= 0.16 assert solution["number"] == 22 assert solution["lattice"] == "cI" assert solution["mosaic"] <= 0.25 assert solution["nspots"] == pytest.approx(860, abs=30) beam_centre = ls.get_indexer_beam_centre() assert beam_centre == pytest.approx((94.3416, 94.4994), abs=2e-1) assert ls.get_indexer_images() == [(1, 1), (22, 22), (45, 45)] print(ls.get_indexer_experiment_list()[0].crystal) print(ls.get_indexer_experiment_list()[0].detector) json_str = ls.as_json() # print(json_str) ls1 = LabelitIndexer.from_json(string=json_str) ls1.index() print(ls.get_indexer_experiment_list()[0].crystal) assert ls.get_indexer_beam_centre() == ls1.get_indexer_beam_centre() assert ls1.get_indexer_images() == [ [1, 1], [22, 22], [45, 45], ] # in JSON tuples become lists assert ls.get_distance() == ls1.get_distance() ls.eliminate() ls1.eliminate() print(ls1.get_indexer_experiment_list()[0].crystal) assert ls.get_indexer_beam_centre() == ls1.get_indexer_beam_centre() assert ls.get_indexer_images() == [(1, 1), (22, 22), (45, 45)] assert ls1.get_indexer_images() == [ [1, 1], [22, 22], [45, 45], ] # in JSON tuples become lists assert ls.get_distance() == ls1.get_distance() print(ls1.get_indexer_cell()) print(ls1.get_solution()) assert ls.get_indexer_cell() == pytest.approx( (111.11, 111.11, 68.08, 90.0, 90.0, 120.0), abs=5e-1) solution = ls1.get_solution() assert solution["rmsd"] >= 0.07, solution["rmsd"] assert solution["metric"] == pytest.approx(0.1291, abs=1e-1) assert solution["lattice"] == "hR", solution["lattice"] assert solution["mosaic"] <= 0.3, solution["mosaic"] assert solution["nspots"] == pytest.approx(856, abs=30)