File: test_render_3d.py

package info (click to toggle)
dials 3.25.0%2Bdfsg3-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 20,112 kB
  • sloc: python: 134,740; cpp: 34,526; makefile: 160; sh: 142
file content (136 lines) | stat: -rw-r--r-- 4,885 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
from __future__ import annotations

import random

import pytest

from dxtbx.serialize import load

from dials.array_family import flex
from dials.util.reciprocal_lattice import Render3d


@pytest.fixture
def multi_sequence_data(dials_data):
    data_dir = dials_data("indexing_test_data", pathlib=True)
    experiments = load.experiment_list(
        data_dir / "multi_sweep-experiments.json",
        check_format=False,
    )
    reflections = flex.reflection_table.from_file(
        data_dir / "multi_sweep-indexed.pickle",
    )
    return {"reflections": reflections, "experiments": experiments}


@pytest.fixture
def centroid_test_data(dials_data):
    experiments = load.experiment_list(
        dials_data("centroid_test_data", pathlib=True) / "experiments.json",
        check_format=False,
    )
    reflections = flex.reflection_table.from_file(
        dials_data("centroid_test_data", pathlib=True) / "integrated.pickle"
    )
    return {"reflections": reflections, "experiments": experiments}


def test_Render3d(mocker, multi_sequence_data):
    experiments = multi_sequence_data["experiments"]
    reflections = multi_sequence_data["reflections"]
    render = Render3d()
    render.viewer = mocker.Mock()
    mocker.spy(render, "set_beam_centre")
    mocker.spy(render, "map_points_to_reciprocal_space")
    mocker.spy(render, "set_points")
    render.load_models(experiments, reflections)
    assert render.set_beam_centre.call_count == 0
    assert render.map_points_to_reciprocal_space.call_count == 1
    assert render.set_points.call_count == 1
    assert render.viewer.set_points.call_count == 1
    assert render.viewer.set_points.call_args[0][0].size() == 1255
    assert render.viewer.set_colors.call_count == 1
    assert render.viewer.set_palette.call_count == 1
    assert render.viewer.set_reciprocal_lattice_vectors.call_count == 1
    assert list(render.viewer.set_palette.call_args[0][0][:2]) == [
        (1.0, 1.0, 1.0),
        (0.9019607843137255, 0.6235294117647059, 0.0),
    ]

    render.settings.beam_centre = (211, 205)
    render.settings.beam_centre = (41, 97)
    render.load_models(experiments, reflections)
    assert render.set_beam_centre.call_count == 1

    for outlier_display, expected_count in (("outliers", 0), ("inliers", 1255)):
        render.settings.outlier_display = outlier_display
        render.load_models(experiments, reflections)
        assert render.viewer.set_points.call_args[0][0].size() == expected_count

    for display, expected_count in (
        ("indexed", 1255),
        ("unindexed", 0),
        ("integrated", 0),
    ):
        render.settings.display = display
        render.load_models(experiments, reflections)
        assert render.viewer.set_points.call_args[0][0].size() == expected_count

    render.settings.display = "all"
    render.settings.experiment_ids = [0, 2, 3]
    render.load_models(experiments, reflections)
    assert render.viewer.set_points.call_args[0][0].size() == 957

    render.settings.black_background = False
    render.load_models(experiments, reflections)
    assert list(render.viewer.set_palette.call_args[0][0][:2]) == [
        (0.0, 0.0, 0.0),
        (0.0980392156862745, 0.3764705882352941, 1.0),
    ]

    render.settings.reverse_phi = True
    mocker.spy(flex.reflection_table, "map_centroids_to_reciprocal_space")
    render.load_models(experiments, reflections)
    assert flex.reflection_table.map_centroids_to_reciprocal_space.call_count == 1


def test_Render3d_integrated(mocker, centroid_test_data):
    experiments = centroid_test_data["experiments"]
    reflections = centroid_test_data["reflections"]

    render = Render3d()
    render.viewer = mocker.Mock()
    render.load_models(experiments, reflections)
    assert render.viewer.set_points.call_args[0][0].size() == 2269

    render.settings.partiality_min = 0.2
    render.settings.partiality_max = 0.9
    render.load_models(experiments, reflections)
    assert render.viewer.set_points.call_args[0][0].size() == 923

    render = Render3d()
    render.viewer = mocker.Mock()
    render.settings.z_min = 2
    render.settings.z_max = 7
    render.load_models(experiments, reflections)
    assert render.viewer.set_points.call_args[0][0].size() == 1885

    random.seed(42)
    reflections["n_signal"] = flex.size_t(
        random.randint(1, 100) for i in range(len(reflections))
    )

    render = Render3d()
    render.viewer = mocker.Mock()
    render.settings.n_min = None
    render.settings.n_max = None
    render.load_models(experiments, reflections)
    assert render.viewer.set_points.call_args[0][0].size() == 2269

    render = Render3d()
    render.viewer = mocker.Mock()
    render.settings.n_min = 20
    render.settings.n_max = 80
    render.load_models(experiments, reflections)
    expected = 1368
    assert render.viewer.set_points.call_args[0][0].size() == expected