From cc1fac5df0a8d10015cdaa5a5345f7b5da409a43 Mon Sep 17 00:00:00 2001 From: payno Date: Sun, 4 Sep 2022 16:47:23 +0200 Subject: [PATCH 1/2] edfconverter: fix: hzndle x, y and z translation unit --- nxtomomill/converter/edf/edfconverter.py | 43 +++++++++++++------- nxtomomill/converter/edf/test/test_edf2nx.py | 28 ++++++++++++- 2 files changed, 55 insertions(+), 16 deletions(-) diff --git a/nxtomomill/converter/edf/edfconverter.py b/nxtomomill/converter/edf/edfconverter.py index bd31f79..6aea47e 100644 --- a/nxtomomill/converter/edf/edfconverter.py +++ b/nxtomomill/converter/edf/edfconverter.py @@ -50,12 +50,7 @@ from tomoscan.nexus.paths.nxtomo import get_paths as get_nexus_paths from silx.utils.deprecation import deprecated from tomoscan.esrf.scan.utils import get_parameters_frm_par_or_info from tomoscan.unitsystem.energysystem import EnergySI - -try: - from tomoscan.esrf.scan.edfscan import EDFTomoScan -except ImportError: - from tomoscan.esrf.edfscan import EDFTomoScan -from tomoscan.unitsystem import metricsystem +from tomoscan.esrf.scan.edfscan import EDFTomoScan from tomoscan.io import HDF5File import fabio from fabio.edfimage import EdfImage @@ -495,21 +490,21 @@ def from_edf_to_nx(configuration: TomoEDFConfig, progress=None) -> tuple: else: x_dataset[nf] = ( float(str_mot_val[x_trans_index]) - * metricsystem.millimeter.value + * configuration.x_trans_unit.value ) if y_trans_index == -1: y_dataset[nf] = 0.0 else: y_dataset[nf] = ( float(str_mot_val[y_trans_index]) - * metricsystem.millimeter.value + * configuration.y_trans_unit.value ) if z_trans_index == -1: z_dataset[nf] = 0.0 else: z_dataset[nf] = ( float(str_mot_val[z_trans_index]) - * metricsystem.millimeter.value + * configuration.z_trans_unit.value ) if srcur_index == -1: @@ -592,15 +587,24 @@ def from_edf_to_nx(configuration: TomoEDFConfig, progress=None) -> tuple: if xtix == -1: xDataset[nfr] = 0.0 else: - xDataset[nfr] = float(str_mot_val[xtix]) + xDataset[nfr] = ( + float(str_mot_val[xtix]) + * configuration.x_trans_unit.value + ) if ytix == -1: yDataset[nfr] = 0.0 else: - yDataset[nfr] = float(str_mot_val[ytix]) + yDataset[nfr] = ( + float(str_mot_val[ytix]) + * configuration.y_trans_unit.value + ) if ztix == -1: zDataset[nfr] = 0.0 else: - zDataset[nfr] = float(str_mot_val[ztix]) + zDataset[nfr] = ( + float(str_mot_val[ztix]) + * configuration.z_trans_unit.value + ) if srcur_index == -1: electric_current_dataset[nfr] = default_current else: @@ -702,15 +706,24 @@ def from_edf_to_nx(configuration: TomoEDFConfig, progress=None) -> tuple: if x_trans_index == -1: x_dataset[nf] = 0.0 else: - x_dataset[nf] = float(str_mot_val[x_trans_index]) + x_dataset[nf] = ( + float(str_mot_val[x_trans_index]) + * configuration.x_trans_unit.value + ) if y_trans_index == -1: y_dataset[nf] = 0.0 else: - y_dataset[nf] = float(str_mot_val[y_trans_index]) + y_dataset[nf] = ( + float(str_mot_val[y_trans_index]) + * configuration.y_trans_unit.value + ) if z_trans_index == -1: z_dataset[nf] = 0.0 else: - z_dataset[nf] = float(str_mot_val[z_trans_index]) + z_dataset[nf] = ( + float(str_mot_val[z_trans_index]) + * configuration.z_trans_unit.value + ) if srcur_index == -1: electric_current_dataset[nf] = default_current else: diff --git a/nxtomomill/converter/edf/test/test_edf2nx.py b/nxtomomill/converter/edf/test/test_edf2nx.py index 7234a9e..f9f6aee 100644 --- a/nxtomomill/converter/edf/test/test_edf2nx.py +++ b/nxtomomill/converter/edf/test/test_edf2nx.py @@ -73,7 +73,8 @@ def test_edf_to_nx_converter(progress, duplicate_data, external_path_type): n_extra_radio=n_alignment_proj, dim=dim, dark_n=1, - ref_n=1, + flat_n=1, + distance=2.3, ) scan = EDFTomoScan(scan_path) assert scan.dark_n == 1 @@ -84,10 +85,15 @@ def test_edf_to_nx_converter(progress, duplicate_data, external_path_type): config.output_file = output_file config.duplicate_data = duplicate_data config.external_path_type = external_path_type + config.x_trans_unit = "mm" + config.y_trans_unit = "cm" + config.z_trans_unit = "m" + config.distance_unit = "cm" nx_file, nx_entry = converter.from_edf_to_nx( configuration=config, progress=progress, ) + hdf5_scan = HDF5TomoScan(scan=nx_file, entry=nx_entry) assert len(hdf5_scan.projections) == n_proj assert len(hdf5_scan.alignment_projections) == n_alignment_proj @@ -110,6 +116,26 @@ def test_edf_to_nx_converter(progress, duplicate_data, external_path_type): h5f[detector_data_path][()].min() != h5f[detector_data_path][()].max() ) + numpy.testing.assert_almost_equal( + h5f[f"/{nx_entry}/sample/x_translation"][0], 0.0 + ) + numpy.testing.assert_almost_equal( + h5f[f"/{nx_entry}/sample/y_translation"][0], 1.0 / 100.0 + ) + numpy.testing.assert_almost_equal( + h5f[f"/{nx_entry}/sample/z_translation"][0], 2.0 + ) + + # x, z and y are set manually on MockEDF. Respectively to 0, 1 and 2 + n_frames = 120 + 5 + 1 + 1 + numpy.testing.assert_array_almost_equal( + hdf5_scan.y_translation, + numpy.array([1.0 / 100.0] * n_frames), + ) + numpy.testing.assert_array_almost_equal( + hdf5_scan.z_translation, numpy.array([2.0] * n_frames) + ) + numpy.testing.assert_almost_equal(hdf5_scan.distance, 2.3 / 100.0) @pytest.mark.parametrize("scan_range", (-180, 180, 360)) -- GitLab From e59ea6f1ccf8a955e6eaed5ab43deb5fdf8a0e0c Mon Sep 17 00:00:00 2001 From: payno Date: Sun, 4 Sep 2022 17:27:16 +0200 Subject: [PATCH 2/2] add message at the end of a conversion if progress provided --- nxtomomill/converter/edf/edfconverter.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/nxtomomill/converter/edf/edfconverter.py b/nxtomomill/converter/edf/edfconverter.py index 6aea47e..942e6e1 100644 --- a/nxtomomill/converter/edf/edfconverter.py +++ b/nxtomomill/converter/edf/edfconverter.py @@ -46,6 +46,7 @@ from nxtomomill.nexus.utils import create_nx_data_group from nxtomomill.nexus.utils import link_nxbeam_to_root from nxtomomill.nexus.nxdetector import FieldOfView from nxtomomill.settings import Tomo +from nxtomomill.utils.progress import Progress from tomoscan.nexus.paths.nxtomo import get_paths as get_nexus_paths from silx.utils.deprecation import deprecated from tomoscan.esrf.scan.utils import get_parameters_frm_par_or_info @@ -842,7 +843,8 @@ def from_edf_to_nx(configuration: TomoEDFConfig, progress=None) -> tuple: link_nxbeam_to_root(file_path=fileout_h5, entry_path=output_data_path) except Exception: pass - + if progress is not None and isinstance(progress, Progress): + print("\nconversion finished\n") return fileout_h5, output_data_path -- GitLab