nxtomomill 2.1.0.dev4__tar.gz → 2.1.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {nxtomomill-2.1.0.dev4/nxtomomill.egg-info → nxtomomill-2.1.2}/PKG-INFO +1 -1
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/doc/conf.py +3 -13
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/app/fluo2nx.py +3 -2
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/app/z_concatenate_scans.py +5 -3
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/edf/tests/test_edf2nx.py +3 -1
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/fluo/fluoconverter.py +3 -3
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/fluo/fluoscan.py +13 -6
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/fscan/fscanconverter.py +1 -1
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/acquisition/standardacquisition.py +13 -8
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/acquisition/tests/test_back_and_forth.py +1 -1
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/acquisition/tests/test_holotomo.py +2 -2
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/acquisition/tests/test_legacy.py +2 -2
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/acquisition/utils/_context.py +40 -22
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/acquisitionConstructor.py +1 -2
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/tests/test_h52nx_utils.py +18 -5
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/tests/test_hdf5converter.py +2 -2
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/utils/utils.py +2 -2
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/version.py +3 -3
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2/nxtomomill.egg-info}/PKG-INFO +1 -1
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/LICENSE +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/README.md +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/__init__.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/__main__.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/app/__init__.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/app/blissfluo2nx.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/app/blissfluoconfig.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/app/dxfile2nx.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/app/edf2nx.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/app/edf2nx_check.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/app/edfconfig.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/app/fluoconfig.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/app/fscan2nx.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/app/h52nx.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/app/h5config.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/app/nxcopy.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/app/patch_nx.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/app/split_nxfile.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/app/tests/test_bliss_fluo2nx_app.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/app/tests/test_dxfile2nx_app.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/app/tests/test_edf2nx_app.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/app/tests/test_edf_config_app.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/app/tests/test_fluo2nx_app.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/app/tests/test_h52nx_app.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/app/tests/test_h5_config_app.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/app/tests/test_nx_copy.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/app/tests/test_patch_nx_app.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/app/tests/test_split_nxfile_app.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/app/zstages2nxs.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/__init__.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/baseconverter.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/dxfile/__init__.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/dxfile/dxfileconverter.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/dxfile/tests/test_dxfile.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/edf/__init__.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/edf/checks.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/edf/edfconverter.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/edf/tests/test_checks.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/edf/tests/test_edf2nx_check.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/fluo/__init__.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/fluo/blissfluoscan.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/fluo/tests/__init__.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/fluo/tests/test_fluoscan2D.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/fluo/tests/test_fluoscan3D.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/fscan/__init__.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/__init__.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/acquisition/__init__.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/acquisition/_bliss_activeconfig.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/acquisition/backandforth.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/acquisition/baseacquisition.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/acquisition/blisstomoconfig.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/acquisition/multitomo.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/acquisition/pcotomoacquisition.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/acquisition/tests/bliss_tomo_datasets.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/acquisition/tests/test_acquisition.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/acquisition/tests/test_acquisition_utils.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/acquisition/tests/test_bliss_tomo_config.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/acquisition/tests/test_multitomo_zseries.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/acquisition/tests/test_multitomoacquisition.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/acquisition/utils/__init__.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/acquisition/utils/_keys.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/acquisition/utils/_scan_type_finder.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/acquisition/utils/bliss_scan_type.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/acquisition/utils/detector.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/acquisition/utils/machine_current.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/acquisition/utils/series.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/acquisition/utils/timestamps.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/acquisition/zseriesacquisition.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/hdf5converter.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/post_processing/__init__.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/post_processing/dark_flat_copy.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/tests/test_frame_flip.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/utils.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/version.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/io/__init__.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/io/config/__init__.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/io/config/configbase.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/io/config/confighandler.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/io/config/dxconfig.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/io/config/edfconfig.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/io/config/fluoconfig.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/io/config/hdf5config.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/io/config/tests/__init__.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/io/config/tests/test_confighandler.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/io/tests/test_frame_group.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/io/tests/utils.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/models/__init__.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/models/base/ConfigBase.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/models/base/FrmFlatToNestedBase.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/models/base/NestedModelBase.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/models/base/__init__.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/models/base/general_section.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/models/base/instrument_section.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/models/base/source_section.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/models/blissfluo2nx/__init__.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/models/blissfluo2nx/blissfluo2nx.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/models/blissfluo2nx/general_section.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/models/dx2nx.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/models/edf2nx/__init__.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/models/edf2nx/dark_and_flat_section.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/models/edf2nx/detector_section.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/models/edf2nx/edf2nx.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/models/edf2nx/general_section.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/models/edf2nx/keys_section.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/models/edf2nx/sample_section.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/models/edf2nx/unit_section.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/models/fluo2nx/__init__.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/models/fluo2nx/fluo2nx.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/models/fluo2nx/general_section.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/models/h52nx/FrameGroup.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/models/h52nx/__init__.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/models/h52nx/_acquisitionstep.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/models/h52nx/_context.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/models/h52nx/entries_and_title_section.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/models/h52nx/extra_params_section.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/models/h52nx/frame_type_section.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/models/h52nx/general_section.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/models/h52nx/h52nx.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/models/h52nx/keys_section.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/models/h52nx/multitomo_section.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/models/tests/test_context.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/models/tests/test_edf2nx_model.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/models/tests/test_fluo2nx_model.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/models/tests/test_h52nx_model.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/models/tests/test_io_utils.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/models/utils.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/settings.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/test.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/tests/__init__.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/tests/datasets.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/tests/resources/__init__.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/tests/resources/edf2nx_config_files/__init__.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/tests/resources/fluo2nx_config_files/__init__.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/tests/resources/h52nx_config_files/__init__.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/tests/test_version.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/tests/utils/__init__.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/tests/utils/bliss.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/tests/utils/dxfile.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/utils/__init__.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/utils/_os.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/utils/flat_reducer.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/utils/h5pyutils.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/utils/hdf5.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/utils/io.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/utils/nexus.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/utils/pintutils.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/utils/tests/test_flat_reducer.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/utils/tests/test_h5pyutils.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/utils/tests/test_nexus_utils.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/utils/tests/test_utils.py +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill.egg-info/SOURCES.txt +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill.egg-info/dependency_links.txt +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill.egg-info/entry_points.txt +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill.egg-info/requires.txt +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill.egg-info/top_level.txt +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/pyproject.toml +0 -0
- {nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: nxtomomill
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.2
|
|
4
4
|
Summary: applications and library to convert raw format to NXtomo format
|
|
5
5
|
Author-email: Henri Payno <henri.payno@esrf.fr>, Pierre Paleo <pierre.paleo@esrf.fr>, Pierre-Olivier Autran <pierre-olivier.autran@esrf.fr>, Jérôme Lesaint <jerome.lesaint@esrf.fr>, Alessandro Mirone <mirone@esrf.fr>
|
|
6
6
|
License:
|
|
@@ -4,26 +4,16 @@
|
|
|
4
4
|
# list see the documentation:
|
|
5
5
|
# https://www.sphinx-doc.org/en/master/usage/configuration.html
|
|
6
6
|
|
|
7
|
-
# -- Path setup --------------------------------------------------------------
|
|
8
|
-
|
|
9
|
-
# If extensions (or modules to document with autodoc) are in another directory,
|
|
10
|
-
# add these directories to sys.path here. If the directory is relative to the
|
|
11
|
-
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
|
12
|
-
#
|
|
13
|
-
# import os
|
|
14
|
-
# import sys
|
|
15
|
-
# sys.path.insert(0, os.path.abspath('.'))
|
|
16
|
-
|
|
17
7
|
|
|
18
8
|
# -- Project information -----------------------------------------------------
|
|
9
|
+
from importlib.metadata import version as get_version
|
|
19
10
|
|
|
20
11
|
project = "nxtomomill"
|
|
21
12
|
copyright = "2020-2025, ESRF"
|
|
22
13
|
author = "P.-O. Autran, J. Lesaint, A. Mirone, C. Nemoz, P. Paleo, H. Payno, A. Sole, N. Vigano"
|
|
23
14
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
version = release
|
|
15
|
+
release = get_version("nxtomomill")
|
|
16
|
+
version = ".".join(release.split(".")[:2])
|
|
27
17
|
|
|
28
18
|
|
|
29
19
|
# -- General configuration ---------------------------------------------------
|
|
@@ -13,7 +13,7 @@ import os
|
|
|
13
13
|
|
|
14
14
|
from nxtomomill import utils
|
|
15
15
|
from nxtomomill import converter
|
|
16
|
-
from nxtomomill.
|
|
16
|
+
from nxtomomill.models.fluo2nx import Fluo2nxModel
|
|
17
17
|
|
|
18
18
|
from tqdm import tqdm
|
|
19
19
|
|
|
@@ -75,7 +75,8 @@ def main(argv):
|
|
|
75
75
|
)
|
|
76
76
|
|
|
77
77
|
options = parser.parse_args(argv[1:])
|
|
78
|
-
config =
|
|
78
|
+
config = Fluo2nxModel()
|
|
79
|
+
|
|
79
80
|
if options.config is not None:
|
|
80
81
|
config = config.from_cfg_file(options.config)
|
|
81
82
|
|
|
@@ -230,11 +230,13 @@ def main(argv):
|
|
|
230
230
|
# step 2: insert single 'empty' frame between the two stages (aka dummy frame)
|
|
231
231
|
invalid_nxt = NXtomo(args.entry_name)
|
|
232
232
|
invalid_nxt.instrument.detector.image_key_control = [ImageKey.INVALID]
|
|
233
|
-
invalid_nxt.
|
|
233
|
+
invalid_nxt.instrument.beam.incident_energy = (
|
|
234
|
+
nxt.instrument.beam.incident_energy.value
|
|
235
|
+
)
|
|
234
236
|
invalid_nxt.control.data = np.ones(1, "f")
|
|
235
237
|
invalid_nxt.sample.rotation_angle = [0.0] * _ureg.degree
|
|
236
|
-
invalid_nxt.instrument.detector.
|
|
237
|
-
nxt.instrument.detector.
|
|
238
|
+
invalid_nxt.instrument.detector.half_acquisition = (
|
|
239
|
+
nxt.instrument.detector.half_acquisition
|
|
238
240
|
)
|
|
239
241
|
invalid_nxt.instrument.detector.x_pixel_size = (
|
|
240
242
|
nxt.instrument.detector.x_pixel_size.value
|
|
@@ -14,10 +14,12 @@ from tomoscan import version
|
|
|
14
14
|
from tomoscan.esrf.mock import MockEDF
|
|
15
15
|
from tomoscan.esrf.scan.edfscan import EDFTomoScan
|
|
16
16
|
from tomoscan.esrf.scan.nxtomoscan import NXtomoScan
|
|
17
|
-
from tomoscan.esrf.scan.utils import
|
|
17
|
+
from tomoscan.esrf.scan.utils import dump_info_file
|
|
18
18
|
from tomoscan.validator import is_valid_for_reconstruction
|
|
19
19
|
from tomoscan.io import HDF5File, get_swmr_mode
|
|
20
20
|
|
|
21
|
+
from nxtomo.io import cwd_context
|
|
22
|
+
|
|
21
23
|
from nxtomomill import converter
|
|
22
24
|
from nxtomomill.converter.edf.checks import OUPUT_CHECK
|
|
23
25
|
from nxtomomill.models.edf2nx import EDF2nxModel
|
|
@@ -101,7 +101,7 @@ def from_fluo_to_nx(configuration: Fluo2nxModel, progress: tqdm | None = None) -
|
|
|
101
101
|
my_nxtomo.instrument.detector.image_key_control = [
|
|
102
102
|
ImageKey.PROJECTION
|
|
103
103
|
] * elmt_line_data.shape[0]
|
|
104
|
-
my_nxtomo.sample.rotation_angle = scan.rot_angles_deg
|
|
104
|
+
my_nxtomo.sample.rotation_angle = scan.rot_angles_deg
|
|
105
105
|
my_nxtomo.instrument.detector.x_pixel_size = scan.pixel_size * _ureg(
|
|
106
106
|
"m"
|
|
107
107
|
)
|
|
@@ -112,7 +112,7 @@ def from_fluo_to_nx(configuration: Fluo2nxModel, progress: tqdm | None = None) -
|
|
|
112
112
|
# define a value to sample-detector and source-sample distance. To be set to the real value in the future
|
|
113
113
|
my_nxtomo.instrument.detector.distance = 1.0 * _ureg.meter
|
|
114
114
|
my_nxtomo.instrument.source.distance = 1.0 * _ureg.meter
|
|
115
|
-
my_nxtomo.
|
|
115
|
+
my_nxtomo.instrument.beam.incident_energy = scan.energy * _ureg.keV
|
|
116
116
|
|
|
117
117
|
data_path = f"{det}_{element}_{line}"
|
|
118
118
|
my_nxtomo.save(
|
|
@@ -202,7 +202,7 @@ def from_blissfluo_to_nx(
|
|
|
202
202
|
)
|
|
203
203
|
|
|
204
204
|
my_nxtomo.instrument.name = configuration.instrument_section.instrument_name
|
|
205
|
-
my_nxtomo.
|
|
205
|
+
my_nxtomo.instrument.beam.incident_energy = scan.energy
|
|
206
206
|
|
|
207
207
|
data_path = f"{det}_{line}"
|
|
208
208
|
my_nxtomo.save(
|
|
@@ -63,6 +63,10 @@ class FluoTomoScanBase:
|
|
|
63
63
|
def __post_init__(self):
|
|
64
64
|
self.detected_folders = self.detect_folders()
|
|
65
65
|
self.detected_detectors = tuple(self.detect_detectors())
|
|
66
|
+
|
|
67
|
+
# Ensure given detectors is a tuple
|
|
68
|
+
if not isinstance(self.detectors, tuple):
|
|
69
|
+
self.detectors = (self.detectors,)
|
|
66
70
|
self.get_metadata_from_h5_file()
|
|
67
71
|
_logger.info(f"Detectors: {self.detected_detectors}")
|
|
68
72
|
if len(self.detectors) == 0:
|
|
@@ -113,7 +117,7 @@ class FluoTomoScanBase:
|
|
|
113
117
|
if len(self.detected_folders) == 0:
|
|
114
118
|
raise ValueError("No folder found, unable to load metadata")
|
|
115
119
|
h5_path = os.path.join(self.scan, self.detected_folders[0])
|
|
116
|
-
h5_files = glob.
|
|
120
|
+
h5_files = glob.glob("*.h5", root_dir=h5_path)
|
|
117
121
|
if len(h5_files) > 1:
|
|
118
122
|
raise ValueError(
|
|
119
123
|
"More than one hdf5 file in scan directory. Expect only ONE to pick pixel size."
|
|
@@ -150,7 +154,7 @@ class FluoTomoScanBase:
|
|
|
150
154
|
raise ValueError("No folder found, unable to detect detectors")
|
|
151
155
|
proj_1_dir = os.path.join(self.scan, "fluofit", self.detected_folders[0])
|
|
152
156
|
detected_detectors = []
|
|
153
|
-
file_names = glob.
|
|
157
|
+
file_names = glob.glob("IMG_*area_density_ngmm2.tif", root_dir=proj_1_dir)
|
|
154
158
|
for file in file_names:
|
|
155
159
|
det = file.split("_")[1]
|
|
156
160
|
if det not in detected_detectors:
|
|
@@ -167,7 +171,9 @@ class FluoTomoScanBase:
|
|
|
167
171
|
raise ValueError("No folder found, unable to detect elements")
|
|
168
172
|
proj_1_dir = os.path.join(self.scan, "fluofit", self.detected_folders[0])
|
|
169
173
|
detector = self.detectors[0]
|
|
170
|
-
file_names = glob.
|
|
174
|
+
file_names = glob.glob(
|
|
175
|
+
f"IMG_{detector}*area_density_ngmm2.tif", root_dir=proj_1_dir
|
|
176
|
+
)
|
|
171
177
|
for file in file_names:
|
|
172
178
|
el_str = file.split("_")[2]
|
|
173
179
|
element, line = el_str.split("-")
|
|
@@ -197,8 +203,9 @@ class FluoTomoScan3D(FluoTomoScanBase):
|
|
|
197
203
|
"""Dataset manipulation class."""
|
|
198
204
|
|
|
199
205
|
def detect_folders(self):
|
|
200
|
-
fit_folders = glob.
|
|
201
|
-
|
|
206
|
+
fit_folders = glob.glob(
|
|
207
|
+
rf"{self.dataset_basename}_projection*",
|
|
208
|
+
root_dir=os.path.join(self.scan, "fluofit"),
|
|
202
209
|
)
|
|
203
210
|
fit_folders.sort()
|
|
204
211
|
proj_indices = [int(f[-3:]) for f in fit_folders]
|
|
@@ -284,7 +291,7 @@ class FluoTomoScan2D(FluoTomoScanBase):
|
|
|
284
291
|
def get_metadata_from_h5_file(self):
|
|
285
292
|
super().get_metadata_from_h5_file()
|
|
286
293
|
h5_path = os.path.join(self.scan, self.detected_folders[0])
|
|
287
|
-
h5_files = glob.
|
|
294
|
+
h5_files = glob.glob("*.h5", root_dir=h5_path)
|
|
288
295
|
if len(h5_files) > 1:
|
|
289
296
|
raise ValueError(
|
|
290
297
|
"More than one hdf5 file in scan directory. Expect only ONE to pick pixel size."
|
|
@@ -136,7 +136,7 @@ def from_fscan_to_nx(
|
|
|
136
136
|
)
|
|
137
137
|
|
|
138
138
|
if energy is not None:
|
|
139
|
-
my_nxtomo.
|
|
139
|
+
my_nxtomo.instrument.beam.incident_energy = energy # in keV by default
|
|
140
140
|
if distance is not None:
|
|
141
141
|
my_nxtomo.instrument.detector.distance = distance # in meter
|
|
142
142
|
|
|
@@ -19,6 +19,7 @@ from nxtomo.nxobject.nxdetector import ImageKey
|
|
|
19
19
|
from nxtomo.nxobject.utils.concatenate import (
|
|
20
20
|
concatenate_pint_quantities as _concatenate_pint_quantities,
|
|
21
21
|
)
|
|
22
|
+
from nxtomo.io import cwd_context
|
|
22
23
|
|
|
23
24
|
from .utils._context import (
|
|
24
25
|
update_config_keys_from_tomo_config_context,
|
|
@@ -520,9 +521,13 @@ class StandardAcquisition(BaseAcquisition):
|
|
|
520
521
|
return False
|
|
521
522
|
|
|
522
523
|
def _preprocess_registered_entry(self, entry_url, type_):
|
|
523
|
-
with
|
|
524
|
-
entry_url,
|
|
525
|
-
|
|
524
|
+
with (
|
|
525
|
+
cwd_context(entry_url.file_path()),
|
|
526
|
+
EntryReader(
|
|
527
|
+
entry_url,
|
|
528
|
+
open_mode_for_reading=self.configuration.open_mode_for_reading,
|
|
529
|
+
) as entry,
|
|
530
|
+
):
|
|
526
531
|
entry_path = self._entries_o_path[entry_url.path()]
|
|
527
532
|
input_file_path = entry_url.file_path()
|
|
528
533
|
input_file_path = abspath(os.path.relpath(input_file_path, os.getcwd()))
|
|
@@ -1293,8 +1298,7 @@ class StandardAcquisition(BaseAcquisition):
|
|
|
1293
1298
|
energy = None
|
|
1294
1299
|
|
|
1295
1300
|
if energy is not None:
|
|
1296
|
-
|
|
1297
|
-
nx_tomo.energy = energy
|
|
1301
|
+
nx_tomo.instrument.beam.incident_energy = energy
|
|
1298
1302
|
|
|
1299
1303
|
# 3. define instrument
|
|
1300
1304
|
nx_tomo.instrument.name = self._get_instrument_name()
|
|
@@ -1389,9 +1393,10 @@ class StandardAcquisition(BaseAcquisition):
|
|
|
1389
1393
|
# Note: default value is False and not None. So if the half_acquisition is not found in the metadata we will set it to False
|
|
1390
1394
|
nx_tomo.instrument.detector.half_acquisition = half_acquisition
|
|
1391
1395
|
# fov (deprecated. half-acquisition is preferred)
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1396
|
+
if half_acquisition is None:
|
|
1397
|
+
fov = self._get_field_of_view()
|
|
1398
|
+
if fov is not None:
|
|
1399
|
+
nx_tomo.instrument.detector.field_of_view = fov
|
|
1395
1400
|
|
|
1396
1401
|
# x_rotation_axis_pixel_position
|
|
1397
1402
|
# TODO Missing calibration mechanism from Bliss
|
|
@@ -102,7 +102,7 @@ def test_back_and_forth_conversion(tmp_path):
|
|
|
102
102
|
|
|
103
103
|
assert nx_tomo.instrument.detector.distance == 3500 * _ureg.millimeter
|
|
104
104
|
# check energy
|
|
105
|
-
assert nx_tomo.
|
|
105
|
+
assert nx_tomo.instrument.beam.incident_energy == 10.0 * _ureg.keV
|
|
106
106
|
# check sample
|
|
107
107
|
assert nx_tomo.sample.x_pixel_size == 2.4 * _ureg.micrometer
|
|
108
108
|
assert nx_tomo.sample.y_pixel_size == 2.4 * _ureg.micrometer
|
|
@@ -109,7 +109,7 @@ def test_holotomo_conversion_id16a(tmp_path):
|
|
|
109
109
|
nx_tomo.instrument.detector.distance, 1206.69 * _ureg.millimeter
|
|
110
110
|
)
|
|
111
111
|
# check energy
|
|
112
|
-
assert nx_tomo.
|
|
112
|
+
assert nx_tomo.instrument.beam.incident_energy == 17.1 * _ureg.keV
|
|
113
113
|
# check sample
|
|
114
114
|
numpy.testing.assert_almost_equal(
|
|
115
115
|
nx_tomo.sample.x_pixel_size.magnitude,
|
|
@@ -230,7 +230,7 @@ def test_holotomo_conversion_id16b(tmp_path):
|
|
|
230
230
|
nx_tomo.instrument.detector.distance, 723.908 * _ureg.millimeter
|
|
231
231
|
)
|
|
232
232
|
# check energy
|
|
233
|
-
assert nx_tomo.
|
|
233
|
+
assert nx_tomo.instrument.beam.incident_energy == 29.6 * _ureg.keV
|
|
234
234
|
# check sample
|
|
235
235
|
numpy.testing.assert_almost_equal(
|
|
236
236
|
nx_tomo.sample.x_pixel_size.magnitude,
|
|
@@ -51,7 +51,7 @@ def test_S59_68p41b_16mm_6p5mm_F8_0001_dataset(
|
|
|
51
51
|
|
|
52
52
|
nxtomo = NXtomo().load(*result[0])
|
|
53
53
|
|
|
54
|
-
nxtomo.
|
|
54
|
+
nxtomo.instrument.beam.incident_energy = 70.0 * _ureg.keV
|
|
55
55
|
n_frames = 10252
|
|
56
56
|
|
|
57
57
|
assert len(nxtomo.sample.x_translation) == n_frames
|
|
@@ -119,7 +119,7 @@ def test_WGN_01_0000_P_110_8128_D_129(WGN_01_0000_P_110_8128_D_129_Dataset, tmp_
|
|
|
119
119
|
|
|
120
120
|
nxtomo = NXtomo().load(*result[0])
|
|
121
121
|
|
|
122
|
-
nxtomo.
|
|
122
|
+
nxtomo.instrument.beam.incident_energy = 80.0 * _ureg.keV
|
|
123
123
|
n_frames = 4602
|
|
124
124
|
|
|
125
125
|
assert len(nxtomo.sample.x_translation) == n_frames
|
{nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/acquisition/utils/_context.py
RENAMED
|
@@ -34,10 +34,11 @@ def update_config_keys_from_tomo_config_context(
|
|
|
34
34
|
):
|
|
35
35
|
"""Replace the tomo_config:xxx config by the dataset name contained in 'tomo_config'"""
|
|
36
36
|
|
|
37
|
-
def map_dataset(dataset_name: str) -> str:
|
|
38
|
-
"""map a dataset from tomoconfig to
|
|
37
|
+
def map_dataset(dataset_name: str, index: int) -> str:
|
|
38
|
+
"""map a dataset from tomoconfig to one of its names.
|
|
39
39
|
|
|
40
|
-
..warning:: tomoconfig dataset can store several dataset (
|
|
40
|
+
..warning:: tomoconfig dataset can store several dataset names: (real motor name, bliss alias).
|
|
41
|
+
`index` selects which one to use (0: real motor name, -1: bliss alias).
|
|
41
42
|
"""
|
|
42
43
|
datasets = getattr(tomo_config, dataset_name)
|
|
43
44
|
if datasets is None:
|
|
@@ -45,40 +46,57 @@ def update_config_keys_from_tomo_config_context(
|
|
|
45
46
|
assert isinstance(
|
|
46
47
|
datasets, (tuple, list)
|
|
47
48
|
), f"dataset is expected to be a tuple. Got {type(datasets)}"
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
49
|
+
try:
|
|
50
|
+
return datasets[index]
|
|
51
|
+
except IndexError:
|
|
52
|
+
raise KeyError(
|
|
53
|
+
f"tomo_config key `{dataset_name}` has no dataset at index {index} ({datasets})"
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
def apply_tomo_config_mapping(key: _Key, index: int) -> str:
|
|
51
57
|
"""
|
|
52
58
|
Apply proxy / mapping from based on values contained in tomo_config.
|
|
53
59
|
Example: 'sample_y+translation_y' becomes 'sy+ty' if tomo_config.sample_y == sy and tomo_config.translation_y == ty
|
|
54
60
|
"""
|
|
55
61
|
split_dataset_and_operations = _Key.resolve_dataset_operations(key.dataset)
|
|
56
62
|
mapping = [
|
|
57
|
-
map_dataset(split_dataset_and_operations[0]),
|
|
63
|
+
map_dataset(split_dataset_and_operations[0], index=index),
|
|
58
64
|
]
|
|
59
65
|
if len(split_dataset_and_operations) > 1:
|
|
60
66
|
operators = split_dataset_and_operations[1::2]
|
|
61
67
|
datasets = split_dataset_and_operations[2::2]
|
|
62
68
|
for operation, dataset in zip(operators, datasets):
|
|
63
|
-
mapping.extend(
|
|
69
|
+
mapping.extend(
|
|
70
|
+
(operation, map_dataset(dataset_name=dataset, index=index))
|
|
71
|
+
)
|
|
64
72
|
return "".join(mapping)
|
|
65
73
|
|
|
66
74
|
def update_key(key: _Key) -> tuple[_Key, ...]:
|
|
67
|
-
"""One key return the original keys or two keys from tomoconfig:
|
|
75
|
+
"""One key return the original keys or two keys from tomoconfig: real motor name and alias.
|
|
76
|
+
|
|
77
|
+
The real motor name is tried first as it is the one recording a value per frame when the
|
|
78
|
+
motor moves during the scan. The alias is kept as a fallback since it is the one recording
|
|
79
|
+
a (scalar) value when the motor is static during the scan (see `TomoConfig.from_technique_group`).
|
|
80
|
+
"""
|
|
68
81
|
if Proxy.TOMO_CONFIG in key.contexts:
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
+
candidates = []
|
|
83
|
+
seen_dataset_names = set()
|
|
84
|
+
for index in (0, -1):
|
|
85
|
+
try:
|
|
86
|
+
real_dataset_name = apply_tomo_config_mapping(key=key, index=index)
|
|
87
|
+
except KeyError as e:
|
|
88
|
+
_logger.error(e)
|
|
89
|
+
# if the mapping cannot done with tomo_config log an error and skip this candidate
|
|
90
|
+
continue
|
|
91
|
+
if real_dataset_name not in seen_dataset_names:
|
|
92
|
+
seen_dataset_names.add(real_dataset_name)
|
|
93
|
+
candidates.append(
|
|
94
|
+
_Key(
|
|
95
|
+
dataset=real_dataset_name,
|
|
96
|
+
contexts=key.contexts - {Proxy.TOMO_CONFIG},
|
|
97
|
+
)
|
|
98
|
+
)
|
|
99
|
+
return tuple(candidates)
|
|
82
100
|
return (key,)
|
|
83
101
|
|
|
84
102
|
update_configuration_keys(configuration, update_key)
|
{nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/acquisitionConstructor.py
RENAMED
|
@@ -2,7 +2,6 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import os
|
|
4
4
|
import h5py
|
|
5
|
-
import numpy
|
|
6
5
|
import logging
|
|
7
6
|
from tqdm import tqdm
|
|
8
7
|
|
|
@@ -381,7 +380,7 @@ class _AcquisitionConstructorFromTitles(_AcquisitionConstructorBase):
|
|
|
381
380
|
return self.sort_fct(name, h5d=h5d)
|
|
382
381
|
|
|
383
382
|
groups.sort(key=sort)
|
|
384
|
-
except
|
|
383
|
+
except TypeError:
|
|
385
384
|
raise ValueError(
|
|
386
385
|
"Fail to order according to 'start_time'. Probably not all scans have a 'start_time' dataset"
|
|
387
386
|
)
|
{nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/tests/test_h52nx_utils.py
RENAMED
|
@@ -79,19 +79,32 @@ def test_get_default_output_file():
|
|
|
79
79
|
def test_update_config_keys_from_tomo_config_context():
|
|
80
80
|
tomo_config = TomoConfig()
|
|
81
81
|
# tomoconfig register motors as (real_motor_name, bliss_alias)
|
|
82
|
-
tomo_config.sample_x = ("
|
|
83
|
-
tomo_config.sample_y = ("
|
|
84
|
-
tomo_config.translation_y = ("
|
|
82
|
+
tomo_config.sample_x = ("real_sx", "alias_sx")
|
|
83
|
+
tomo_config.sample_y = ("real_sy", "alias_sy")
|
|
84
|
+
tomo_config.translation_y = ("real_ty", "alias_ty")
|
|
85
|
+
# when the motor doesn't move during the scan a single name can be registered (no alias)
|
|
86
|
+
tomo_config.sample_u = ("single_su",)
|
|
85
87
|
|
|
86
88
|
model = H52nxModel()
|
|
87
89
|
model.sample_x_keys = (_Key(dataset="sample_x", contexts={Proxy.TOMO_CONFIG}),)
|
|
88
90
|
model.sample_y_keys = (
|
|
89
91
|
_Key(dataset="sample_y+translation_y", contexts={Proxy.TOMO_CONFIG}),
|
|
90
92
|
)
|
|
93
|
+
model.valid_camera_names = (_Key(dataset="sample_u", contexts={Proxy.TOMO_CONFIG}),)
|
|
91
94
|
|
|
92
95
|
update_config_keys_from_tomo_config_context(model, tomo_config=tomo_config)
|
|
93
|
-
|
|
94
|
-
|
|
96
|
+
# the real (per-frame) motor name is tried first, the bliss alias (static / scalar value) is
|
|
97
|
+
# kept as a fallback in case the real motor name doesn't exist in a given (sub-)scan.
|
|
98
|
+
assert model.sample_x_keys == (
|
|
99
|
+
_Key(dataset="real_sx", contexts=set()),
|
|
100
|
+
_Key(dataset="alias_sx", contexts=set()),
|
|
101
|
+
)
|
|
102
|
+
assert model.sample_y_keys == (
|
|
103
|
+
_Key(dataset="real_sy+real_ty", contexts=set()),
|
|
104
|
+
_Key(dataset="alias_sy+alias_ty", contexts=set()),
|
|
105
|
+
)
|
|
106
|
+
# when tomo_config only registered a single name there is nothing to fall back to: no duplicate
|
|
107
|
+
assert model.valid_camera_names == (_Key(dataset="single_su", contexts=set()),)
|
|
95
108
|
|
|
96
109
|
|
|
97
110
|
def test_update_config_keys_from_beamline_context():
|
{nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/tests/test_hdf5converter.py
RENAMED
|
@@ -9,7 +9,7 @@ import numpy
|
|
|
9
9
|
import pint
|
|
10
10
|
import shutil
|
|
11
11
|
|
|
12
|
-
from
|
|
12
|
+
from nxtomo.io import cwd_context
|
|
13
13
|
|
|
14
14
|
from nxtomomill import converter
|
|
15
15
|
from nxtomomill.tests.datasets import GitlabDataset
|
|
@@ -760,7 +760,7 @@ def test_dataset_2(tmp_path):
|
|
|
760
760
|
config.y_sample_pixel_size_m = 2.7 * 10e-6
|
|
761
761
|
|
|
762
762
|
config.overwrite = True
|
|
763
|
-
config.
|
|
763
|
+
config.half_acquisition = True
|
|
764
764
|
|
|
765
765
|
init_url_1 = DataUrl(file_path=file_1, data_path="/1.1", scheme="silx")
|
|
766
766
|
|
|
@@ -13,10 +13,10 @@ from silx.io.url import DataUrl
|
|
|
13
13
|
from silx.io.utils import get_data
|
|
14
14
|
from silx.utils.deprecation import deprecated
|
|
15
15
|
from silx.utils.enum import Enum as _Enum
|
|
16
|
-
from tomoscan.esrf.scan.utils import cwd_context
|
|
17
16
|
from tomoscan.io import HDF5File
|
|
18
17
|
from nxtomomill.utils.hdf5 import open_hdf5_readonly
|
|
19
18
|
|
|
19
|
+
from nxtomo.io import cwd_context
|
|
20
20
|
from nxtomo.nxobject.nxdetector import ImageKey
|
|
21
21
|
from nxtomo.utils.frameappender import FrameAppender
|
|
22
22
|
from nxtomo.application.nxtomo import NXtomo
|
|
@@ -445,7 +445,7 @@ def str_datetime_to_numpy_datetime64(my_datetime: str | datetime) -> numpy.datet
|
|
|
445
445
|
)
|
|
446
446
|
|
|
447
447
|
datetime_as_utc_datetime = datetime_as_datetime.astimezone(timezone.utc)
|
|
448
|
-
tz_free_datetime_as_datetime = datetime_as_utc_datetime.replace(tzinfo=
|
|
448
|
+
tz_free_datetime_as_datetime = datetime_as_utc_datetime.replace(tzinfo=None)
|
|
449
449
|
return numpy.datetime64(tz_free_datetime_as_datetime).astype("<M8[ms]")
|
|
450
450
|
|
|
451
451
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: nxtomomill
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.2
|
|
4
4
|
Summary: applications and library to convert raw format to NXtomo format
|
|
5
5
|
Author-email: Henri Payno <henri.payno@esrf.fr>, Pierre Paleo <pierre.paleo@esrf.fr>, Pierre-Olivier Autran <pierre-olivier.autran@esrf.fr>, Jérôme Lesaint <jerome.lesaint@esrf.fr>, Alessandro Mirone <mirone@esrf.fr>
|
|
6
6
|
License:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/edf/tests/test_edf2nx_check.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/fluo/tests/test_fluoscan2D.py
RENAMED
|
File without changes
|
{nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/fluo/tests/test_fluoscan3D.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/acquisition/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/acquisition/backandforth.py
RENAMED
|
File without changes
|
{nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/acquisition/baseacquisition.py
RENAMED
|
File without changes
|
{nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/acquisition/blisstomoconfig.py
RENAMED
|
File without changes
|
{nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/acquisition/multitomo.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/acquisition/utils/__init__.py
RENAMED
|
File without changes
|
{nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/acquisition/utils/_keys.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/acquisition/utils/detector.py
RENAMED
|
File without changes
|
|
File without changes
|
{nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/acquisition/utils/series.py
RENAMED
|
File without changes
|
{nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/acquisition/utils/timestamps.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/post_processing/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/converter/hdf5/tests/test_frame_flip.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/models/blissfluo2nx/general_section.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/models/edf2nx/dark_and_flat_section.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/models/h52nx/entries_and_title_section.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nxtomomill-2.1.0.dev4 → nxtomomill-2.1.2}/nxtomomill/tests/resources/h52nx_config_files/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|