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