Source code for est.tests.test_input_information

import numpy
from silx.io import h5py_utils
from silx.io.url import DataUrl

from ..core.io._utils.ascii import split_ascii_url
from ..core.io.information import InputInformation
from ..core.io.read_xas import build_ascii_data_url
from ..core.io.read_xas import read_from_input_information


[docs] def test_input_information(filename_cu_from_pymca): """Test providing urls to spec files""" input_information = InputInformation( channel_url=build_ascii_data_url( file_path=filename_cu_from_pymca, col_name="Column 1" ), spectra_url=build_ascii_data_url( file_path=filename_cu_from_pymca, col_name="Column 2" ), ) xas_obj = read_from_input_information(input_information) assert xas_obj.energy is not None assert xas_obj.spectra.data.flat[0] is not None
[docs] def test_input_information_monitor(filename_cu_from_pymca): """Test monitor division""" input_information = InputInformation( channel_url=build_ascii_data_url( file_path=filename_cu_from_pymca, col_name="Column 1" ), spectra_url=build_ascii_data_url( file_path=filename_cu_from_pymca, col_name="Column 2" ), mu_ref_url=build_ascii_data_url( file_path=filename_cu_from_pymca, col_name="Column 2" ), ) xas_obj = read_from_input_information(input_information) numpy.testing.assert_allclose(xas_obj.spectra.data[0, 0].mu, 1)
[docs] def test_input_information_minlog(filename_cu_from_larch): """Test minus logarithm""" # Note: in the data we are using, the mu column is already divided byt i0 # but it does not matter for this test, we just need three columns. # Read -log(mu/i0) input_information = InputInformation( channel_url=build_ascii_data_url( file_path=filename_cu_from_larch, col_name="energy" ), spectra_url=build_ascii_data_url( file_path=filename_cu_from_larch, col_name="mu" ), mu_ref_url=build_ascii_data_url( file_path=filename_cu_from_larch, col_name="i0" ), min_log=True, ) xas_obj = read_from_input_information(input_information) corr_mu = xas_obj.spectra.data[0, 0].mu # Read mu input_information = InputInformation( channel_url=build_ascii_data_url( file_path=filename_cu_from_larch, col_name="energy" ), spectra_url=build_ascii_data_url( file_path=filename_cu_from_larch, col_name="mu" ), ) xas_obj = read_from_input_information(input_information) mu = xas_obj.spectra.data[0, 0].mu # Read i0 input_information = InputInformation( channel_url=build_ascii_data_url( file_path=filename_cu_from_larch, col_name="energy" ), spectra_url=build_ascii_data_url( file_path=filename_cu_from_larch, col_name="i0" ), ) xas_obj = read_from_input_information(input_information) i0 = xas_obj.spectra.data[0, 0].mu # Check that corr_mu is indeed -log(mu/i0) with numpy.errstate(divide="ignore", invalid="ignore"): expected = -numpy.log(mu / i0) expected[~numpy.isfinite(expected)] = 0 numpy.testing.assert_allclose(corr_mu, expected, 1)
[docs] def test_spec_url(): """simple test of the spec url function class""" file_path = "test.dat" scan_title = "1.1" col_name = "energy" data_slice = None url = build_ascii_data_url( file_path=file_path, scan_title=scan_title, col_name=col_name, data_slice=data_slice, ) assert isinstance(url, DataUrl) expected = ("ascii", file_path, scan_title, col_name, data_slice) assert split_ascii_url(url) == expected
[docs] def test_input_information_from_h5(hdf5_filename_cu_from_pymca): energy_url = DataUrl( f"silx://{hdf5_filename_cu_from_pymca}::/1.1/measurement/energy" ) with h5py_utils.open_item(energy_url.file_path(), energy_url.data_path()) as dset: energy = dset[()] mu_url = DataUrl(f"silx://{hdf5_filename_cu_from_pymca}::/1.1/measurement/mu") with h5py_utils.open_item(mu_url.file_path(), mu_url.data_path()) as dset: mu = dset[()] input_information = InputInformation(channel_url=energy_url, spectra_url=mu_url) xas_obj = read_from_input_information(input_information) sp = xas_obj.get_spectrum(0, 0) numpy.testing.assert_allclose(sp.energy, energy) numpy.testing.assert_allclose(sp.mu, mu)
[docs] def test_input_information_from_h5_ref_url(hdf5_filename_cu_from_pymca): energy_url = DataUrl( f"silx://{hdf5_filename_cu_from_pymca}::/1.1/measurement/energy" ) with h5py_utils.open_item(energy_url.file_path(), energy_url.data_path()) as dset: energy = dset[()] it_url = DataUrl(f"silx://{hdf5_filename_cu_from_pymca}::/1.1/measurement/it") with h5py_utils.open_item(it_url.file_path(), it_url.data_path()) as dset: it = dset[()] i0_url = DataUrl(f"silx://{hdf5_filename_cu_from_pymca}::/1.1/measurement/i0") with h5py_utils.open_item(i0_url.file_path(), i0_url.data_path()) as dset: i0 = dset[()] input_information = InputInformation( channel_url=energy_url, spectra_url=it_url, mu_ref_url=i0_url ) xas_obj = read_from_input_information(input_information) sp = xas_obj.get_spectrum(0, 0) numpy.testing.assert_allclose(sp.energy, energy) numpy.testing.assert_allclose(sp.mu, it / i0)