def test_split_chunk_sizes(tmpdir, option, with_identifiers):

    ids = list(range(0, 5))
    experiments = ExperimentList()
    reflections = flex.reflection_table()
    reflections["id"] = flex.int(ids)
    reflections["intensity"] = flex.double([(i + 1) * 100.0 for i in ids])

    for i in ids:
        exp = generate_exp()
        if with_identifiers:
            exp.identifier = str(i)
            reflections.experiment_identifiers()[i] = str(i)
        experiments.append(exp)

    experiments.as_json(tmpdir.join("tmp.expt").strpath)
    reflections.as_file(tmpdir.join("tmp.refl").strpath)

    result = procrunner.run(
        [
            "dials.split_experiments",
            tmpdir.join("tmp.expt").strpath,
            tmpdir.join("tmp.refl").strpath,
            option,
        ],
        working_directory=tmpdir,
    )
    assert not result.returncode and not result.stderr

    for j, n, intensities in zip(
        [0, 1, 2], [2, 2, 1], [[100.0, 200.0], [300.0, 400.0], [500.0]]
    ):
        assert tmpdir.join("split_%s.refl" % j).check()
        assert tmpdir.join("split_%s.expt" % j).check()
        expts = load.experiment_list(
            tmpdir.join("split_%s.expt" % j), check_format=False
        )
        assert len(expts) == n
        refls = flex.reflection_table.from_file(tmpdir.join("split_%s.refl" % j))
        assert list(set(refls["id"])) == list(range(0, n))
        assert list(refls["intensity"]) == intensities
        refls.assert_experiment_identifiers_are_consistent(expts)
def test_split_by_wavelength(tmpdir):
    """Test the split_by_wavelength option of dials.split_experiments"""
    experiments = ExperimentList()
    exp = generate_exp(wavelength=1.0)
    exp.identifier = "0"
    experiments.append(exp)
    exp = generate_exp(wavelength=0.5)
    exp.identifier = "1"
    experiments.append(exp)

    reflections = flex.reflection_table()
    reflections["id"] = flex.int([0, 1])
    reflections["intensity"] = flex.double([100.0, 200.0])
    reflections.experiment_identifiers()[0] = "0"
    reflections.experiment_identifiers()[1] = "1"

    experiments.as_json(tmpdir.join("tmp.expt").strpath)
    reflections.as_file(tmpdir.join("tmp.refl").strpath)

    result = procrunner.run(
        [
            "dials.split_experiments", "tmp.expt", "tmp.refl",
            "by_wavelength=True"
        ],
        working_directory=tmpdir,
    )
    assert not result.returncode and not result.stderr

    for i, (wl, ids,
            intensity) in enumerate(zip([0.5, 1.0], ["1", "0"],
                                        [200.0, 100.0])):
        assert tmpdir.join("split_%d.expt" % i).check()
        assert tmpdir.join("split_%d.refl" % i).check()
        exp_single = load.experiment_list(tmpdir.join("split_%d.expt" %
                                                      i).strpath,
                                          check_format=False)
        ref_single = flex.reflection_table.from_file(
            tmpdir.join("split_%d.refl" % i).strpath)
        assert exp_single[0].beam.get_wavelength() == wl
        assert exp_single[0].identifier == ids
        id_ = ref_single["id"][0]
        assert ref_single.experiment_identifiers()[id_] == ids
        assert list(ref_single["intensity"]) == [intensity]

    # Now test for successful error handling if no identifiers set.
    experiments[0].identifier = ""
    experiments[1].identifier = ""
    experiments.as_json(tmpdir.join("tmp.expt").strpath)
    result = procrunner.run(
        [
            "dials.split_experiments", "tmp.expt", "tmp.refl",
            "by_wavelength=True"
        ],
        working_directory=tmpdir,
    )
    assert result.returncode == 1
    assert result.stderr.startswith(b"Sorry")

    experiments[0].identifier = "0"
    experiments[1].identifier = "1"
    del reflections.experiment_identifiers()[0]
    del reflections.experiment_identifiers()[1]
    experiments.as_json(tmpdir.join("tmp.expt").strpath)
    reflections.as_file(tmpdir.join("tmp.refl").strpath)
    result = procrunner.run(
        [
            "dials.split_experiments", "tmp.expt", "tmp.refl",
            "by_wavelength=True"
        ],
        working_directory=tmpdir,
    )
    assert result.returncode == 1
    assert result.stderr.startswith(b"Sorry")
Beispiel #3
0
            r["xyzcal.px"][i_ref] = x, y, 0 
            x,y = cents_mm[ii]
            r["xyzcal.mm"][i_ref] = x, y, 0 
        r = r.select(sel)
        r["id"] = flex.int(len(r), new_exper_id)
        
        r_orig = r_orig.select(sel)
        r_orig["id"] = flex.int(len(r_orig), new_exper_id)
        Rmaster_out.extend(r)
        Rmaster_orig.extend(r_orig)
        El_out.append(El[exper_id])
    Rmaster_out.as_file("%s.refl" % args.tag)
    Rmaster_orig.as_file("%s_orig.refl" % args.tag)
    El_fname = "%s.expt" % args.tag
    El_fname_orig = "%s_orig.expt" % args.tag
    El_out.as_json(El_fname)
    El_out.as_json(El_fname_orig)

    #nref = len(exper_refls_strong)
    #sel = flex.bool([i in i_refs for i in range(nref)]
    #r = exper_refls_strong.select(sel)
    #Rmaster_out.extend(r)
    #El_out.append(Exper)

    ## make the spot integration foreground mask from the predictions
    #panel_integration_masks = {}
    #for pid in range(n_panels):
    #    panel_integration_masks[pid] = None
    #
    ## group predictions bty panel name
    #refls_predict_bypanel = prediction_utils.refls_by_panelname(refls_predict)