import json
import h5py
import numpy
import pytest
from ewoksorange.tests.utils import execute_task
from silx.io.utils import h5py_read_dataset
from orangecontrib.ewoksxrpd.nexus_integrated import OWSaveNexusIntegrated
[docs]
def test_save_nexus_task(common_inputs):
assert_save_nexus_no_azimuth(common_inputs, None)
[docs]
def test_save_nexus_task_with_azimuth(common_inputs):
assert_save_nexus_with_azimuth(common_inputs, None)
[docs]
def assert_save_nexus_no_azimuth(common_inputs, qtapp):
inputs = {
"radial": numpy.linspace(1, 60, 60),
"intensity": numpy.random.random((10, 60)),
**common_inputs,
}
execute_task(
(
OWSaveNexusIntegrated.ewokstaskclass
if qtapp is None
else OWSaveNexusIntegrated
),
inputs=inputs,
)
with h5py.File(inputs["url"]) as root:
expected = {"instrument", "measurement", "integrate", "dummy"}
nxprocess = root["results/integrate"]
assert set(root["results"].keys()) == expected
assert "azimuthal" not in nxprocess
assert "intensity_errors" not in nxprocess
numpy.testing.assert_array_equal(nxprocess["integrated/2th"], inputs["radial"])
numpy.testing.assert_array_equal(
nxprocess["integrated/intensity"], inputs["intensity"]
)
numpy.testing.assert_array_equal(
root["results/measurement/integrated"], inputs["intensity"]
)
config = json.loads(nxprocess["configuration/data"][()])
numpy.testing.assert_array_equal(config["energy"], inputs["info"]["energy"])
assert h5py_read_dataset(root["results/dummy/test"]) == "test"
[docs]
def assert_save_nexus_with_azimuth(common_inputs, qtapp):
inputs = {
"radial": numpy.linspace(1, 60, 60),
"azimuthal": numpy.linspace(1, 100, 100),
"intensity": numpy.random.random((10, 100, 60)),
**common_inputs,
}
execute_task(
(
OWSaveNexusIntegrated.ewokstaskclass
if qtapp is None
else OWSaveNexusIntegrated
),
inputs=inputs,
)
with h5py.File(inputs["url"]) as root:
expected = {"instrument", "measurement", "integrate", "dummy"}
nxprocess = root["results/integrate"]
assert set(root["results"].keys()) == expected
assert "intensity_errors" not in nxprocess
numpy.testing.assert_array_equal(nxprocess["integrated/2th"], inputs["radial"])
numpy.testing.assert_array_equal(
nxprocess["integrated/chi"], inputs["azimuthal"]
)
numpy.testing.assert_array_equal(
nxprocess["integrated/intensity"], inputs["intensity"]
)
numpy.testing.assert_array_equal(
root["results/measurement/integrated"], inputs["intensity"]
)
config = json.loads(nxprocess["configuration/data"][()])
numpy.testing.assert_array_equal(config["energy"], inputs["info"]["energy"])
assert h5py_read_dataset(root["results/dummy/test"]) == "test"
[docs]
def test_save_nexus_without_info(common_inputs, qtapp):
inputs = {
"radial": numpy.linspace(1, 60, 60),
"azimuthal": numpy.linspace(1, 100, 100),
"intensity": numpy.random.random((10, 100, 60)),
**common_inputs,
}
inputs.pop("info")
execute_task(
(
OWSaveNexusIntegrated.ewokstaskclass
if qtapp is None
else OWSaveNexusIntegrated
),
inputs=inputs,
)
with h5py.File(inputs["url"]) as root:
expected = {"instrument", "measurement", "integrate", "dummy"}
nxprocess = root["results/integrate"]
assert set(root["results"].keys()) == expected
assert "intensity_errors" not in nxprocess
numpy.testing.assert_array_equal(nxprocess["integrated/2th"], inputs["radial"])
numpy.testing.assert_array_equal(
nxprocess["integrated/chi"], inputs["azimuthal"]
)
numpy.testing.assert_array_equal(
nxprocess["integrated/intensity"], inputs["intensity"]
)
numpy.testing.assert_array_equal(
root["results/measurement/integrated"], inputs["intensity"]
)
assert h5py_read_dataset(root["results/dummy/test"]) == "test"
config = json.loads(nxprocess["configuration/data"][()])
assert config == {}
assert h5py_read_dataset(nxprocess["program"]) == "pyFAI"