nxtomomill 2.1.0.dev1__tar.gz → 2.1.0.dev2__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.
Files changed (183) hide show
  1. {nxtomomill-2.1.0.dev1/nxtomomill.egg-info → nxtomomill-2.1.0.dev2}/PKG-INFO +1 -1
  2. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/app/h52nx.py +11 -5
  3. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/hdf5/acquisition/baseacquisition.py +35 -3
  4. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/hdf5/acquisition/tests/test_acquisition_utils.py +2 -1
  5. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/hdf5/acquisition/tests/test_holotomo.py +7 -0
  6. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/hdf5/hdf5converter.py +7 -10
  7. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/io/config/confighandler.py +1 -0
  8. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/io/config/tests/test_confighandler.py +1 -0
  9. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/models/h52nx/general_section.py +34 -1
  10. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/models/h52nx/h52nx.py +1 -0
  11. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/utils/hdf5.py +10 -9
  12. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/version.py +1 -1
  13. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2/nxtomomill.egg-info}/PKG-INFO +1 -1
  14. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill.egg-info/top_level.txt +0 -1
  15. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/LICENSE +0 -0
  16. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/README.md +0 -0
  17. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/doc/conf.py +0 -0
  18. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/__init__.py +0 -0
  19. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/__main__.py +0 -0
  20. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/app/__init__.py +0 -0
  21. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/app/blissfluo2nx.py +0 -0
  22. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/app/blissfluoconfig.py +0 -0
  23. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/app/dxfile2nx.py +0 -0
  24. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/app/edf2nx.py +0 -0
  25. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/app/edf2nx_check.py +0 -0
  26. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/app/edfconfig.py +0 -0
  27. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/app/fluo2nx.py +0 -0
  28. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/app/fluoconfig.py +0 -0
  29. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/app/fscan2nx.py +0 -0
  30. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/app/h5config.py +0 -0
  31. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/app/nxcopy.py +0 -0
  32. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/app/patch_nx.py +0 -0
  33. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/app/split_nxfile.py +0 -0
  34. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/app/tests/test_bliss_fluo2nx_app.py +0 -0
  35. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/app/tests/test_dxfile2nx_app.py +0 -0
  36. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/app/tests/test_edf2nx_app.py +0 -0
  37. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/app/tests/test_edf_config_app.py +0 -0
  38. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/app/tests/test_fluo2nx_app.py +0 -0
  39. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/app/tests/test_h52nx_app.py +0 -0
  40. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/app/tests/test_h5_config_app.py +0 -0
  41. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/app/tests/test_nx_copy.py +0 -0
  42. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/app/tests/test_patch_nx_app.py +0 -0
  43. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/app/tests/test_split_nxfile_app.py +0 -0
  44. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/app/z_concatenate_scans.py +0 -0
  45. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/app/zstages2nxs.py +0 -0
  46. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/__init__.py +0 -0
  47. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/baseconverter.py +0 -0
  48. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/dxfile/__init__.py +0 -0
  49. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/dxfile/dxfileconverter.py +0 -0
  50. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/dxfile/tests/test_dxfile.py +0 -0
  51. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/edf/__init__.py +0 -0
  52. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/edf/checks.py +0 -0
  53. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/edf/edfconverter.py +0 -0
  54. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/edf/tests/test_checks.py +0 -0
  55. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/edf/tests/test_edf2nx.py +0 -0
  56. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/edf/tests/test_edf2nx_check.py +0 -0
  57. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/fluo/__init__.py +0 -0
  58. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/fluo/blissfluoscan.py +0 -0
  59. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/fluo/fluoconverter.py +0 -0
  60. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/fluo/fluoscan.py +0 -0
  61. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/fluo/tests/__init__.py +0 -0
  62. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/fluo/tests/test_fluoscan2D.py +0 -0
  63. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/fluo/tests/test_fluoscan3D.py +0 -0
  64. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/fscan/__init__.py +0 -0
  65. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/fscan/fscanconverter.py +0 -0
  66. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/hdf5/__init__.py +0 -0
  67. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/hdf5/acquisition/__init__.py +0 -0
  68. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/hdf5/acquisition/backandforth.py +0 -0
  69. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/hdf5/acquisition/blisstomoconfig.py +0 -0
  70. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/hdf5/acquisition/multitomo.py +0 -0
  71. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/hdf5/acquisition/pcotomoacquisition.py +0 -0
  72. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/hdf5/acquisition/standardacquisition.py +0 -0
  73. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/hdf5/acquisition/tests/bliss_tomo_datasets.py +0 -0
  74. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/hdf5/acquisition/tests/test_acquisition.py +0 -0
  75. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/hdf5/acquisition/tests/test_back_and_forth.py +0 -0
  76. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/hdf5/acquisition/tests/test_bliss_tomo_config.py +0 -0
  77. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/hdf5/acquisition/tests/test_legacy.py +0 -0
  78. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/hdf5/acquisition/tests/test_multitomoacquisition.py +0 -0
  79. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/hdf5/acquisition/utils/__init__.py +0 -0
  80. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/hdf5/acquisition/utils/_context.py +0 -0
  81. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/hdf5/acquisition/utils/_keys.py +0 -0
  82. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/hdf5/acquisition/utils/_scan_type_finder.py +0 -0
  83. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/hdf5/acquisition/utils/bliss_scan_type.py +0 -0
  84. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/hdf5/acquisition/utils/detector.py +0 -0
  85. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/hdf5/acquisition/utils/machine_current.py +0 -0
  86. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/hdf5/acquisition/utils/series.py +0 -0
  87. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/hdf5/acquisition/utils/timestamps.py +0 -0
  88. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/hdf5/acquisition/zseriesacquisition.py +0 -0
  89. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/hdf5/acquisitionConstructor.py +0 -0
  90. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/hdf5/post_processing/__init__.py +0 -0
  91. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/hdf5/post_processing/dark_flat_copy.py +0 -0
  92. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/hdf5/tests/test_frame_flip.py +0 -0
  93. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/hdf5/tests/test_h52nx_utils.py +0 -0
  94. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/hdf5/tests/test_hdf5converter.py +0 -0
  95. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/hdf5/utils.py +0 -0
  96. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/converter/version.py +0 -0
  97. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/io/__init__.py +0 -0
  98. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/io/config/__init__.py +0 -0
  99. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/io/config/configbase.py +0 -0
  100. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/io/config/dxconfig.py +0 -0
  101. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/io/config/edfconfig.py +0 -0
  102. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/io/config/fluoconfig.py +0 -0
  103. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/io/config/hdf5config.py +0 -0
  104. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/io/config/tests/__init__.py +0 -0
  105. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/io/tests/test_frame_group.py +0 -0
  106. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/io/tests/utils.py +0 -0
  107. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/models/__init__.py +0 -0
  108. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/models/base/ConfigBase.py +0 -0
  109. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/models/base/FrmFlatToNestedBase.py +0 -0
  110. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/models/base/NestedModelBase.py +0 -0
  111. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/models/base/__init__.py +0 -0
  112. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/models/base/general_section.py +0 -0
  113. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/models/base/instrument_section.py +0 -0
  114. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/models/base/source_section.py +0 -0
  115. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/models/blissfluo2nx/__init__.py +0 -0
  116. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/models/blissfluo2nx/blissfluo2nx.py +0 -0
  117. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/models/blissfluo2nx/general_section.py +0 -0
  118. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/models/dx2nx.py +0 -0
  119. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/models/edf2nx/__init__.py +0 -0
  120. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/models/edf2nx/dark_and_flat_section.py +0 -0
  121. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/models/edf2nx/detector_section.py +0 -0
  122. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/models/edf2nx/edf2nx.py +0 -0
  123. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/models/edf2nx/general_section.py +0 -0
  124. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/models/edf2nx/keys_section.py +0 -0
  125. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/models/edf2nx/sample_section.py +0 -0
  126. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/models/edf2nx/unit_section.py +0 -0
  127. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/models/fluo2nx/__init__.py +0 -0
  128. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/models/fluo2nx/fluo2nx.py +0 -0
  129. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/models/fluo2nx/general_section.py +0 -0
  130. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/models/h52nx/FrameGroup.py +0 -0
  131. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/models/h52nx/__init__.py +0 -0
  132. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/models/h52nx/_acquisitionstep.py +0 -0
  133. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/models/h52nx/_context.py +0 -0
  134. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/models/h52nx/entries_and_title_section.py +0 -0
  135. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/models/h52nx/extra_params_section.py +0 -0
  136. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/models/h52nx/frame_type_section.py +0 -0
  137. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/models/h52nx/keys_section.py +0 -0
  138. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/models/h52nx/multitomo_section.py +0 -0
  139. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/models/tests/test_context.py +0 -0
  140. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/models/tests/test_edf2nx_model.py +0 -0
  141. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/models/tests/test_fluo2nx_model.py +0 -0
  142. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/models/tests/test_h52nx_model.py +0 -0
  143. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/models/tests/test_io_utils.py +0 -0
  144. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/models/utils.py +0 -0
  145. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/nexus/__init__.py +0 -0
  146. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/nexus/nxdetector.py +0 -0
  147. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/nexus/nxinstrument.py +0 -0
  148. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/nexus/nxmonitor.py +0 -0
  149. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/nexus/nxobject.py +0 -0
  150. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/nexus/nxsample.py +0 -0
  151. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/nexus/nxsource.py +0 -0
  152. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/nexus/nxtomo.py +0 -0
  153. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/nexus/nxtransformations.py +0 -0
  154. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/nexus/utils.py +0 -0
  155. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/settings.py +0 -0
  156. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/test.py +0 -0
  157. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/tests/__init__.py +0 -0
  158. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/tests/datasets.py +0 -0
  159. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/tests/resources/__init__.py +0 -0
  160. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/tests/resources/edf2nx_config_files/__init__.py +0 -0
  161. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/tests/resources/fluo2nx_config_files/__init__.py +0 -0
  162. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/tests/resources/h52nx_config_files/__init__.py +0 -0
  163. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/tests/test_version.py +0 -0
  164. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/tests/utils/__init__.py +0 -0
  165. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/tests/utils/bliss.py +0 -0
  166. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/tests/utils/dxfile.py +0 -0
  167. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/utils/__init__.py +0 -0
  168. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/utils/_os.py +0 -0
  169. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/utils/flat_reducer.py +0 -0
  170. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/utils/h5pyutils.py +0 -0
  171. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/utils/io.py +0 -0
  172. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/utils/nexus.py +0 -0
  173. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/utils/pintutils.py +0 -0
  174. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/utils/tests/test_flat_reducer.py +0 -0
  175. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/utils/tests/test_nexus_utils.py +0 -0
  176. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/utils/tests/test_utils.py +0 -0
  177. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill/utils/utils.py +0 -0
  178. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill.egg-info/SOURCES.txt +0 -0
  179. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill.egg-info/dependency_links.txt +0 -0
  180. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill.egg-info/entry_points.txt +0 -0
  181. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/nxtomomill.egg-info/requires.txt +0 -0
  182. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/pyproject.toml +0 -0
  183. {nxtomomill-2.1.0.dev1 → nxtomomill-2.1.0.dev2}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nxtomomill
3
- Version: 2.1.0.dev1
3
+ Version: 2.1.0.dev2
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:
@@ -207,8 +207,8 @@ def main(argv):
207
207
  )
208
208
  parser.add_argument(
209
209
  "--read-mode",
210
- default="locking",
211
- help="Options when reading bliss file. Valid values are 'locking', 'swmr' and 'locking_free'. 'locking' is the default h5py read mode.",
210
+ default="robust",
211
+ help="Options when reading bliss file. Valid values are 'locking', 'swmr' and 'safe'. 'robust' is the default h5py read mode.",
212
212
  )
213
213
  # scan titles
214
214
  parser.add_argument(
@@ -284,6 +284,12 @@ def main(argv):
284
284
  f"are: {_getPossibleInputParams()}. Should be added at the end of the command line because "
285
285
  "will try to cover all text set after this option.",
286
286
  )
287
+ # output entries
288
+ parser.add_argument(
289
+ "--output-entries",
290
+ default=None,
291
+ help="Provide names of the output entries (HDF5 group path).",
292
+ )
287
293
 
288
294
  # config file
289
295
  parser.add_argument(
@@ -303,10 +309,10 @@ def main(argv):
303
309
  callback_det_sel = None
304
310
 
305
311
  # define reading mode
306
- read_mode = os.getenv("NXTOMOMILL_HDF5_READ_MODE", "locking")
307
- if options.read_mode not in ("locking", "locking_free", "swmr"):
312
+ read_mode = os.getenv("NXTOMOMILL_HDF5_READ_MODE", "robust")
313
+ if options.read_mode not in ("robust", "safe", "swmr"):
308
314
  raise ValueError(
309
- f"Invalid read mode: {read_mode}. Valid values are 'locking', 'locking_free' and 'swmr'"
315
+ f"Invalid read mode: {read_mode}. Valid values are 'robust', 'safe' and 'swmr'"
310
316
  )
311
317
  os.environ["NXTOMOMILL_HDF5_READ_MODE"] = options.read_mode
312
318
 
@@ -134,6 +134,7 @@ class BaseAcquisition:
134
134
  The idea is to avoid asking him if """
135
135
  self._configuration = copy.deepcopy(configuration)
136
136
  """configuration to the conversion to be done. As we are modifying some values (keys...) and those depends on the acquisition context we need to copy it"""
137
+ self._configuration.output_entries = configuration.output_entries
137
138
  self._start_index = start_index
138
139
 
139
140
  # set of properties when an acquisition needs to copy dark / flat (used in the case of z-series version 3)
@@ -182,8 +183,22 @@ class BaseAcquisition:
182
183
  output_file_basename.rstrip(possible_extension)
183
184
  file_extension_ = possible_extension
184
185
 
185
- def get_file_name_and_entry(index, divide_sub_files):
186
- entry = "entry" + str(index).zfill(4)
186
+ def get_file_name_and_entry(
187
+ index: int, divide_sub_files: bool, entry: str | None
188
+ ) -> tuple[str, str]:
189
+ """
190
+ Docstring for get_file_name_and_entry
191
+
192
+ :param index: index of the entry in the input file
193
+ :param divide_sub_files: If True this mean the NXtomo will be split into several NXtomo. Case of multi-tomo.
194
+ :param entry: entry path if defined directly by the user.
195
+ """
196
+ if entry is None:
197
+ entry = "entry" + str(index).zfill(4)
198
+ elif not isinstance(entry, str):
199
+ raise TypeError(
200
+ f"entry should be an instance of {str}. Got {type(entry)}"
201
+ )
187
202
 
188
203
  if self.configuration.single_file or not divide_sub_files:
189
204
  en_output_file = self.configuration.output_file
@@ -212,8 +227,20 @@ class BaseAcquisition:
212
227
 
213
228
  result = []
214
229
  for i_nx_tomo, nx_tomo in enumerate(nx_tomos):
230
+ if self.configuration.output_entries is not None:
231
+ try:
232
+ output_entry = self.configuration.output_entries.pop()
233
+ except IndexError:
234
+ raise ValueError(
235
+ "Not enough 'output_entries' provided for the number of nxtomo generated."
236
+ )
237
+ else:
238
+ output_entry = None
239
+
215
240
  output_file, data_path = get_file_name_and_entry(
216
- (shift_entry + i_nx_tomo), divide_sub_files=divide_into_sub_files
241
+ (shift_entry + i_nx_tomo),
242
+ divide_sub_files=divide_into_sub_files,
243
+ entry=output_entry,
217
244
  )
218
245
  output_file = abspath(os.path.relpath(output_file, os.getcwd()))
219
246
  output_file = abspath(output_file)
@@ -227,6 +254,11 @@ class BaseAcquisition:
227
254
  _logger.warning(
228
255
  f"No frame found for NXtomo number {i_nx_tomo}. Won't write any output for it"
229
256
  )
257
+ if self.configuration.output_entries is not None:
258
+ # append back output_entry. Will be the next one to (re)pop.
259
+ # Because of sequence of sequence we might consume one entry name for nothing...
260
+ self.configuration.output_entries.append(output_entry)
261
+
230
262
  continue
231
263
  vs_0 = nx_tomo.instrument.detector.data[0]
232
264
  if nx_tomo.detector_data_is_defined_by_url():
@@ -30,6 +30,7 @@ from nxtomomill.converter.hdf5.acquisition.tests.bliss_tomo_datasets import ( #
30
30
  holotomo2_simu_dataset,
31
31
  )
32
32
  from nxtomomill.converter.hdf5.acquisition.utils._scan_type_finder import ScanTypeFinder
33
+ from nxtomomill.models.h52nx.h52nx import H52nxModel
33
34
 
34
35
 
35
36
  def test_deduce_machine_current():
@@ -210,7 +211,7 @@ def test_group_z_series(tmp_path):
210
211
  data_path=f"{i_scan}.1",
211
212
  scheme="silx",
212
213
  ),
213
- configuration={},
214
+ configuration=H52nxModel(),
214
215
  detector_sel_callback=None,
215
216
  start_index=i_scan,
216
217
  )
@@ -54,12 +54,19 @@ def test_holotomo_conversion_id16a(tmp_path):
54
54
  configuration.no_master_file = False
55
55
  configuration.translation_y_keys = _cast_keys_section_to_tuple(("sy+spy",))
56
56
  configuration.translation_z_keys = _cast_keys_section_to_tuple(("sz+spz",))
57
+ configuration.output_entries = (
58
+ "my_entry_0000",
59
+ "my_entry_0001",
60
+ )
57
61
 
58
62
  result = converter.from_h5_to_nx(configuration=configuration)
63
+
59
64
  assert os.path.exists(output_file)
60
65
 
61
66
  # check we have our 2 NXtomo are converted with (two distances).
62
67
  assert len(result) == 2
68
+ assert result[0][1] == "my_entry_0000"
69
+ assert result[1][1] == "my_entry_0001"
63
70
  # expected:
64
71
  nx_tomos = [NXtomo().load(file_path, entry) for (file_path, entry) in result]
65
72
  n_proj_per_nx_tomo = 1000
@@ -19,7 +19,6 @@ from tomoscan.utils.io import filter_esrf_mounting_points
19
19
 
20
20
  from nxtomomill.converter.hdf5.acquisition.utils import group_series
21
21
  from nxtomomill.converter.baseconverter import BaseConverter
22
- from nxtomomill.converter.hdf5.acquisition.baseacquisition import _ask_for_file_removal
23
22
  from nxtomomill.converter.hdf5.acquisition.multitomo import MultiTomoAcquisition
24
23
  from nxtomomill.models.h52nx._acquisitionstep import AcquisitionStep
25
24
  from nxtomomill.models.h52nx import H52nxModel
@@ -329,6 +328,13 @@ class _H5ToNxConverter(BaseConverter):
329
328
  _logger.info(f"create link in {self.configuration.output_file}")
330
329
  for en_output_file, entry in res:
331
330
  with HDF5File(self.configuration.output_file, "a") as master_file:
331
+ if entry in master_file:
332
+ if self.configuration.overwrite:
333
+ del master_file[entry]
334
+ else:
335
+ raise OSError(
336
+ f"Data path {entry} already exists. Define overwrite option to overwrite existing file and entries."
337
+ )
332
338
  link_file = os.path.relpath(
333
339
  filter_esrf_mounting_points(en_output_file),
334
340
  filter_esrf_mounting_points(
@@ -358,15 +364,6 @@ class _H5ToNxConverter(BaseConverter):
358
364
  dir_name = os.path.dirname(abspath(output_file))
359
365
  if not os.path.exists(dir_name):
360
366
  os.makedirs(os.path.dirname(abspath(output_file)))
361
- elif os.path.exists(output_file):
362
- if self.configuration.overwrite is True:
363
- _logger.warning(f"{output_file} will be removed")
364
- _logger.info(f"remove {output_file}")
365
- os.remove(output_file)
366
- elif not _ask_for_file_removal(output_file):
367
- raise OSError(f"unable to overwrite {output_file}, exit")
368
- else:
369
- os.remove(output_file)
370
367
  if not os.access(dir_name, os.W_OK):
371
368
  raise OSError(f"You don't have rights to write on {dir_name}")
372
369
 
@@ -149,6 +149,7 @@ class TomoHDF5ConfigHandler:
149
149
  "flat_titles",
150
150
  "projection_titles",
151
151
  "alignment_titles",
152
+ "output_entries",
152
153
  ):
153
154
  opt_value = getattr(options, opt_name)
154
155
  if opt_value is not None:
@@ -42,6 +42,7 @@ class _ARParseMock(object):
42
42
  self.file_extension = None
43
43
  self.field_of_view = None
44
44
  self.sample_detector_distance_keys = None
45
+ self.output_entries = None
45
46
 
46
47
 
47
48
  def test_creation_from_config_file(tmp_path):
@@ -1,10 +1,15 @@
1
1
  from __future__ import annotations
2
2
 
3
+ from collections import deque
3
4
  from pydantic import Field, field_serializer, field_validator, ConfigDict
4
5
 
5
6
  from nxtomo.nxobject.nxdetector import FieldOfView
6
7
 
7
- from nxtomomill.models.utils import filter_str_def, convert_str_to_bool
8
+ from nxtomomill.models.utils import (
9
+ filter_str_def,
10
+ convert_str_to_bool,
11
+ convert_str_to_tuple,
12
+ )
8
13
  from ..base.general_section import GeneralSection as _GeneralSectionBase
9
14
 
10
15
 
@@ -12,6 +17,9 @@ class GeneralSection(_GeneralSectionBase):
12
17
  model_config = ConfigDict(validate_assignment=True, validate_by_name=True)
13
18
 
14
19
  input_file: str | None = Field(default=None, description="Input file path.")
20
+ output_entries: deque[str] | None = Field(
21
+ default=None, description="Output of the conversion"
22
+ )
15
23
  raises_error: bool = Field(
16
24
  default=False, description="Raise an error when encountered."
17
25
  )
@@ -130,3 +138,28 @@ class GeneralSection(_GeneralSectionBase):
130
138
  @classmethod
131
139
  def cast_general_section_to_bool(cls, value: str | bool | None) -> bool:
132
140
  return convert_str_to_bool(value)
141
+
142
+ @field_validator(
143
+ "output_entries",
144
+ mode="plain",
145
+ )
146
+ @classmethod
147
+ def cast_output_entries(
148
+ cls, value: str | tuple[str] | deque[str]
149
+ ) -> deque[str] | None:
150
+ if value is None:
151
+ return None
152
+ if isinstance(value, str):
153
+ value = filter_str_def(value)
154
+ elif isinstance(value, deque):
155
+ return value
156
+ values = convert_str_to_tuple(value)
157
+ if values is None or len(values) == 0:
158
+ return None
159
+ if len(values) != len(set(values)):
160
+ raise ValueError("several values are identical.")
161
+ res = deque()
162
+ # move it to a 'deque' to simplify usage
163
+ # last element added will be the first one pop. This is why we need to invert it.
164
+ [res.append(v) for v in values[::-1]]
165
+ return res
@@ -54,6 +54,7 @@ class H52nxModel(
54
54
  check_tomo_n=self.check_tomo_n,
55
55
  mechanical_lr_flip=self.mechanical_lr_flip,
56
56
  mechanical_ud_flip=self.mechanical_ud_flip,
57
+ output_entries=self.output_entries,
57
58
  ),
58
59
  keys_section=KeysSection(
59
60
  valid_camera_names=self.valid_camera_names,
@@ -8,6 +8,7 @@ import pint
8
8
  import logging
9
9
  from .pintutils import get_unit
10
10
  from silx.io.utils import open as open_hdf5
11
+ from silx.io.h5py_utils import File
11
12
 
12
13
  try:
13
14
  import hdf5plugin # noqa F401
@@ -97,13 +98,13 @@ def get_dataset_unit(
97
98
  return get_unit(unit=unit, default=default, from_dataset=from_dataset)
98
99
 
99
100
 
100
- def _locking_free_read(filename: str):
101
+ def _robust_read(filename: str):
101
102
  if not h5py.is_hdf5(filename):
102
103
  raise OSError(f"{filename} doesn't is not a valid hdf5 file")
103
104
  try:
104
- return h5py.File(filename, "r", locking=False)
105
+ return File(filename, "r", locking=False)
105
106
  except OSError:
106
- return h5py.File(filename, "r", libver="latest", swmr=True)
107
+ return File(filename, "r", libver="latest", swmr=True)
107
108
 
108
109
 
109
110
  def _swmr_read(filename: str):
@@ -113,14 +114,14 @@ def _swmr_read(filename: str):
113
114
 
114
115
 
115
116
  def read_hdf5(filename: str):
116
- read_mode = os.getenv("NXTOMOMILL_HDF5_READ_MODE", "locking")
117
- if read_mode not in ("locking", "locking_free", "swmr"):
117
+ read_mode = os.getenv("NXTOMOMILL_HDF5_READ_MODE", "robust")
118
+ if read_mode not in ("robust", "safe", "swmr"):
118
119
  raise ValueError(
119
- f"Invalid read mode: {read_mode}. Valid values are 'locking', 'locking_free' and 'swmr'"
120
+ f"Invalid read mode: {read_mode}. Valid values are 'locking', 'safe' and 'swmr'"
120
121
  )
121
- if read_mode == "locking":
122
+ if read_mode == "safe":
122
123
  return open_hdf5(filename)
123
- elif read_mode == "locking_free":
124
- return _locking_free_read(filename)
124
+ elif read_mode == "robust":
125
+ return _robust_read(filename)
125
126
  elif read_mode == "swmr":
126
127
  return _swmr_read(filename)
@@ -57,7 +57,7 @@ MAJOR = 2
57
57
  MINOR = 1
58
58
  MICRO = 0
59
59
  RELEV = "dev" # <16
60
- SERIAL = 1 # <16
60
+ SERIAL = 2 # <16
61
61
 
62
62
  date = __date__
63
63
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nxtomomill
3
- Version: 2.1.0.dev1
3
+ Version: 2.1.0.dev2
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