def test_experimentlist_with_identifiers(): # Initialise a list of experiments experiments = ExperimentList() experiments.append( Experiment(beam=Beam(s0=(0, 0, -1)), detector=Detector(), identifier="bacon")) experiments.append( Experiment(beam=Beam(s0=(0, 0, -1)), detector=Detector(), identifier="sausage")) with pytest.raises(Exception): experiments.append( Experiment(beam=Beam(), detector=Detector(), identifier="bacon")) d = experiments.to_dict() e2 = ExperimentListDict(d).decode() assert experiments[0].identifier == e2[0].identifier assert experiments[1].identifier == e2[1].identifier assert tuple(experiments.identifiers()) == ("bacon", "sausage") experiments[0].identifier = "spam" assert tuple(experiments.identifiers()) == ("spam", "sausage") experiments.append(Experiment(identifier="bacon")) experiments.select_on_experiment_identifiers(["spam", "bacon"]) assert list(experiments.identifiers()) == ["spam", "bacon"] experiments.append(Experiment(identifier="ham")) experiments.append(Experiment(identifier="jam")) experiments.remove_on_experiment_identifiers(["spam", "jam"]) assert list(experiments.identifiers()) == ["bacon", "ham"]
def test_experimentlist_with_identifiers(): from dxtbx.model import Beam, Detector, Goniometer, Scan # Initialise a list of experiments experiments = ExperimentList() experiments.append( Experiment(beam=Beam(s0=(0, 0, -1)), detector=Detector(), identifier="bacon")) experiments.append( Experiment(beam=Beam(s0=(0, 0, -1)), detector=Detector(), identifier="sausage")) with pytest.raises(Exception): experiments.append( Experiment(beam=Beam(), detector=Detector(), identifier="bacon")) d = experiments.to_dict() e2 = ExperimentListDict(d).decode() assert experiments[0].identifier == e2[0].identifier assert experiments[1].identifier == e2[1].identifier assert tuple(experiments.identifiers()) == ("bacon", "sausage") experiments[0].identifier = "spam" assert tuple(experiments.identifiers()) == ("spam", "sausage")
def test_experimentlist_imagesequence_decode(mocker): # These models are shared between experiments beam = Beam(s0=(0, 0, -1)) detector = Detector() gonio = Goniometer() # Construct the experiment list experiments = ExperimentList() for i in range(3): experiments.append( Experiment( beam=beam, detector=detector, scan=ScanFactory.make_scan( image_range=(i + 1, i + 1), exposure_times=[1], oscillation=(0, 0), epochs=[0], ), goniometer=gonio, )) # Convert experiment list to dict and manually insert a shared imageset d = experiments.to_dict() d["imageset"].append({ "__id__": "ImageSequence", "template": "Puck3_10_1_####.cbf.gz" }) for e in d["experiment"]: e["imageset"] = 0 # Monkeypatch this function as we don't actually have an imageset make_sequence = mocker.patch.object(ExperimentListDict, "_make_sequence") # Ensure that if make_sequence is called more than once it returns a different # value each time make_sequence.side_effect = lambda *args, **kwargs: mocker.MagicMock() # Decode the dict to get a new experiment list experiments2 = ExperimentListDict(d).decode() # This function should only be called once per imageset make_sequence.assert_called_once() # Verify that this experiment is as we expect assert len(experiments2) == 3 assert len(experiments2.imagesets()) == 1 assert len(experiments2.goniometers()) == 1 assert len(experiments2.detectors()) == 1 assert len(experiments2.beams()) == 1 assert len(experiments2.scans()) == 3 for expt in experiments2: assert expt.imageset is experiments2.imagesets()[0]
def test_partial_missing_model_serialization(): goniometer = Goniometer() elist = ExperimentList([Experiment(), Experiment(goniometer=goniometer)]) elist_ = ExperimentListFactory.from_dict(elist.to_dict()) check(elist, elist_)