tomwer 1.2.1__py3-none-any.whl → 1.3.12__py3-none-any.whl

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 (334) hide show
  1. orangecontrib/tomwer/tutorials/icat_publication.ows +58 -0
  2. orangecontrib/tomwer/widgets/__init__.py +11 -11
  3. orangecontrib/tomwer/widgets/control/DataDiscoveryOW.py +2 -2
  4. orangecontrib/tomwer/widgets/control/DataListOW.py +9 -7
  5. orangecontrib/tomwer/widgets/control/DataListenerOW.py +6 -6
  6. orangecontrib/tomwer/widgets/control/DataSelectorOW.py +21 -10
  7. orangecontrib/tomwer/widgets/control/DataValidatorOW.py +6 -6
  8. orangecontrib/tomwer/widgets/control/EDF2NXTomomillOW.py +24 -7
  9. orangecontrib/tomwer/widgets/control/EmailOW.py +4 -4
  10. orangecontrib/tomwer/widgets/control/NXTomomillMixIn.py +3 -3
  11. orangecontrib/tomwer/widgets/control/NXTomomillOW.py +64 -23
  12. orangecontrib/tomwer/widgets/control/NXtomoConcatenate.py +20 -8
  13. orangecontrib/tomwer/widgets/control/NotifierOW.py +1 -0
  14. orangecontrib/tomwer/widgets/control/SingleTomoObjOW.py +6 -6
  15. orangecontrib/tomwer/widgets/control/VolumeSelector.py +7 -4
  16. orangecontrib/tomwer/widgets/control/VolumeSymLinkOW.py +182 -182
  17. orangecontrib/tomwer/widgets/debugtools/DatasetGeneratorOW.py +5 -5
  18. orangecontrib/tomwer/widgets/edit/DarkFlatPatchOW.py +4 -4
  19. orangecontrib/tomwer/widgets/edit/ImageKeyEditorOW.py +3 -3
  20. orangecontrib/tomwer/widgets/edit/ImageKeyUpgraderOW.py +8 -1
  21. orangecontrib/tomwer/widgets/edit/NXtomoEditorOW.py +3 -3
  22. orangecontrib/tomwer/widgets/edit/test/test_nxtomo_editor.py +3 -3
  23. orangecontrib/tomwer/widgets/icat/PublishProcessedDataOW.py +115 -0
  24. orangecontrib/tomwer/widgets/icat/RawDataScreenshotCreatorOW.py +98 -0
  25. orangecontrib/tomwer/widgets/icat/SaveToGalleryAndPublishOW.py +129 -0
  26. orangecontrib/tomwer/widgets/icat/__init__.py +13 -0
  27. orangecontrib/tomwer/widgets/icat/icons/add_gallery.png +0 -0
  28. orangecontrib/tomwer/widgets/icat/icons/add_gallery.svg +82 -0
  29. orangecontrib/tomwer/widgets/icat/icons/publish_processed_data.png +0 -0
  30. orangecontrib/tomwer/widgets/icat/icons/publish_processed_data.svg +95 -0
  31. orangecontrib/tomwer/widgets/icat/icons/raw_screenshots.png +0 -0
  32. orangecontrib/tomwer/widgets/icat/icons/raw_screenshots.svg +143 -0
  33. orangecontrib/tomwer/widgets/icons/tomwer_data_portal.png +0 -0
  34. orangecontrib/tomwer/widgets/icons/tomwer_data_portal.svg +76 -0
  35. orangecontrib/tomwer/widgets/reconstruction/AxisOW.py +22 -20
  36. orangecontrib/tomwer/widgets/reconstruction/CastNabuVolumeOW.py +19 -3
  37. orangecontrib/tomwer/widgets/reconstruction/NabuHelicalPrepareWeightsDoubleOW.py +184 -169
  38. orangecontrib/tomwer/widgets/reconstruction/NabuOW.py +23 -0
  39. orangecontrib/tomwer/widgets/reconstruction/NabuVolumeOW.py +39 -5
  40. orangecontrib/tomwer/widgets/reconstruction/SAAxisOW.py +18 -22
  41. orangecontrib/tomwer/widgets/reconstruction/SADeltaBetaOW.py +18 -26
  42. orangecontrib/tomwer/widgets/reconstruction/SinoNormOW.py +15 -19
  43. orangecontrib/tomwer/widgets/visualization/DataViewerOW.py +9 -9
  44. orangecontrib/tomwer/widgets/visualization/DiffViewerOW.py +1 -1
  45. orangecontrib/tomwer/widgets/visualization/LivesliceOW.py +1 -1
  46. orangecontrib/tomwer/widgets/visualization/NXtomoMetadataViewerOW.py +3 -3
  47. orangecontrib/tomwer/widgets/visualization/SinogramViewerOW.py +0 -1
  48. orangecontrib/tomwer/widgets/visualization/VolumeViewerOW.py +3 -29
  49. tomwer/__main__.py +7 -64
  50. tomwer/app/axis.py +3 -3
  51. tomwer/app/canvas.py +8 -0
  52. tomwer/app/canvas_launcher/config.py +16 -14
  53. tomwer/app/canvas_launcher/environ.py +1 -0
  54. tomwer/app/canvas_launcher/mainwindow.py +4 -1
  55. tomwer/app/darkref.py +1 -1
  56. tomwer/app/darkrefpatch.py +1 -1
  57. tomwer/app/diffframe.py +3 -3
  58. tomwer/app/imagekeyeditor.py +5 -5
  59. tomwer/app/imagekeyupgrader.py +5 -5
  60. tomwer/app/intensitynormalization.py +14 -13
  61. tomwer/app/{saaxis.py → multicor.py} +3 -3
  62. tomwer/app/{sadeltabeta.py → multipag.py} +3 -3
  63. tomwer/app/nabuapp.py +0 -11
  64. tomwer/app/radiostack.py +6 -4
  65. tomwer/app/samplemoved.py +3 -2
  66. tomwer/app/scanviewer.py +4 -2
  67. tomwer/app/sinogramviewer.py +3 -2
  68. tomwer/app/slicestack.py +3 -2
  69. tomwer/app/zstitching.py +88 -6
  70. tomwer/core/cluster/cluster.py +26 -0
  71. tomwer/core/log/logger.py +7 -5
  72. tomwer/core/process/conditions/filters.py +1 -1
  73. tomwer/core/process/control/datalistener/datalistener.py +19 -14
  74. tomwer/core/process/control/datawatcher/edfdwprocess.py +0 -9
  75. tomwer/core/process/control/nxtomoconcatenate.py +13 -13
  76. tomwer/core/process/control/nxtomomill.py +92 -34
  77. tomwer/core/process/control/scantransfer.py +20 -43
  78. tomwer/core/process/control/scanvalidator.py +3 -2
  79. tomwer/core/process/control/test/test_concatenate_nxtomos.py +9 -9
  80. tomwer/core/process/control/test/test_email.py +4 -4
  81. tomwer/core/process/control/test/test_h52nx_process.py +59 -7
  82. tomwer/core/process/control/test/test_volume_link.py +64 -64
  83. tomwer/core/process/control/timer.py +1 -1
  84. tomwer/core/process/control/volumesymlink.py +200 -200
  85. tomwer/core/process/edit/darkflatpatch.py +14 -15
  86. tomwer/core/process/edit/imagekeyeditor.py +41 -39
  87. tomwer/core/process/icat/__init__.py +0 -0
  88. tomwer/core/process/icat/createscreenshots.py +100 -0
  89. tomwer/core/process/icat/gallery.py +377 -0
  90. tomwer/core/process/icat/icatbase.py +36 -0
  91. tomwer/core/process/icat/publish.py +228 -0
  92. tomwer/core/process/icat/screenshots.py +27 -0
  93. tomwer/core/process/output.py +52 -0
  94. tomwer/core/process/reconstruction/axis/axis.py +280 -69
  95. tomwer/core/process/reconstruction/axis/mode.py +163 -48
  96. tomwer/core/process/reconstruction/axis/params.py +29 -21
  97. tomwer/core/process/reconstruction/darkref/darkrefs.py +41 -127
  98. tomwer/core/process/reconstruction/darkref/darkrefscopy.py +4 -3
  99. tomwer/core/process/reconstruction/darkref/params.py +1 -1
  100. tomwer/core/process/reconstruction/nabu/castvolume.py +4 -4
  101. tomwer/core/process/reconstruction/nabu/helical.py +9 -5
  102. tomwer/core/process/reconstruction/nabu/nabucommon.py +71 -78
  103. tomwer/core/process/reconstruction/nabu/nabuscores.py +425 -53
  104. tomwer/core/process/reconstruction/nabu/nabuslices.py +114 -93
  105. tomwer/core/process/reconstruction/nabu/nabuvolume.py +54 -27
  106. tomwer/core/process/reconstruction/nabu/plane.py +9 -0
  107. tomwer/core/process/reconstruction/nabu/settings.py +2 -2
  108. tomwer/core/process/reconstruction/nabu/utils.py +164 -26
  109. tomwer/core/process/reconstruction/output.py +108 -0
  110. tomwer/core/process/reconstruction/saaxis/saaxis.py +238 -264
  111. tomwer/core/process/reconstruction/sadeltabeta/sadeltabeta.py +151 -87
  112. tomwer/core/process/reconstruction/scores/params.py +7 -4
  113. tomwer/core/process/reconstruction/scores/scores.py +13 -0
  114. tomwer/core/process/reconstruction/test/test_axis_params.py +2 -2
  115. tomwer/core/process/reconstruction/test/test_darkref.py +3 -3
  116. tomwer/core/process/reconstruction/test/test_darkref_copy.py +7 -7
  117. tomwer/core/process/reconstruction/test/test_saaxis.py +3 -4
  118. tomwer/core/process/reconstruction/test/test_sadeltabeta.py +2 -2
  119. tomwer/core/process/stitching/nabustitcher.py +13 -12
  120. tomwer/core/process/task.py +34 -26
  121. tomwer/core/process/test/test_axis.py +13 -12
  122. tomwer/core/process/test/test_dark_and_flat.py +10 -7
  123. tomwer/core/process/test/test_data_transfer.py +10 -8
  124. tomwer/core/process/test/test_nabu.py +14 -6
  125. tomwer/core/process/test/test_normalization.py +4 -4
  126. tomwer/core/scan/blissscan.py +3 -3
  127. tomwer/core/scan/edfscan.py +13 -10
  128. tomwer/core/scan/hdf5scan.py +19 -530
  129. tomwer/core/scan/nxtomoscan.py +534 -0
  130. tomwer/core/scan/scanbase.py +72 -44
  131. tomwer/core/scan/scanfactory.py +13 -13
  132. tomwer/core/scan/test/test_edf.py +2 -2
  133. tomwer/core/scan/test/test_future_scan.py +3 -3
  134. tomwer/core/scan/test/test_h5.py +18 -16
  135. tomwer/core/scan/test/test_process_registration.py +4 -40
  136. tomwer/core/scan/test/test_scan.py +5 -78
  137. tomwer/core/settings.py +22 -2
  138. tomwer/core/test/test_scanutils.py +8 -7
  139. tomwer/core/test/test_utils.py +35 -28
  140. tomwer/core/tomwer_object.py +1 -1
  141. tomwer/core/utils/__init__.py +0 -466
  142. tomwer/core/utils/deprecation.py +1 -1
  143. tomwer/core/utils/dictutils.py +14 -0
  144. tomwer/core/utils/lbsram.py +35 -0
  145. tomwer/core/utils/nxtomoutils.py +1 -1
  146. tomwer/core/utils/scanutils.py +6 -6
  147. tomwer/core/utils/spec.py +263 -0
  148. tomwer/core/volume/edfvolume.py +6 -6
  149. tomwer/core/volume/hdf5volume.py +6 -6
  150. tomwer/core/volume/jp2kvolume.py +6 -6
  151. tomwer/core/volume/rawvolume.py +6 -6
  152. tomwer/core/volume/tiffvolume.py +12 -12
  153. tomwer/core/volume/volumefactory.py +2 -2
  154. tomwer/gui/cluster/slurm.py +274 -65
  155. tomwer/gui/cluster/supervisor.py +12 -0
  156. tomwer/gui/cluster/test/test_cluster.py +14 -2
  157. tomwer/gui/cluster/test/test_supervisor.py +3 -3
  158. tomwer/gui/configuration/__init__.py +0 -0
  159. tomwer/gui/{reconstruction/nabu → configuration}/action.py +1 -32
  160. tomwer/gui/configuration/level.py +22 -0
  161. tomwer/gui/control/actions.py +54 -0
  162. tomwer/gui/control/datalist.py +83 -16
  163. tomwer/gui/control/datalistener.py +4 -16
  164. tomwer/gui/control/datawatcher/controlwidget.py +2 -4
  165. tomwer/gui/control/datawatcher/datawatcher.py +1 -24
  166. tomwer/gui/control/{email.py → emailnotifier.py} +9 -18
  167. tomwer/gui/control/history.py +2 -2
  168. tomwer/gui/control/observations.py +2 -2
  169. tomwer/gui/control/reducedarkflatselector.py +9 -9
  170. tomwer/gui/control/selectorwidgetbase.py +36 -9
  171. tomwer/gui/control/serie/seriecreator.py +5 -22
  172. tomwer/gui/control/test/test_email.py +1 -1
  173. tomwer/gui/control/test/test_scanvalidator.py +6 -5
  174. tomwer/gui/control/test/test_single_tomo_obj.py +3 -3
  175. tomwer/gui/control/tomoobjdisplaymode.py +8 -0
  176. tomwer/gui/debugtools/datasetgenerator.py +3 -3
  177. tomwer/gui/edit/dkrfpatch.py +20 -26
  178. tomwer/gui/edit/imagekeyeditor.py +11 -12
  179. tomwer/gui/edit/nxtomoeditor.py +111 -44
  180. tomwer/gui/edit/nxtomowarmer.py +7 -6
  181. tomwer/gui/edit/test/test_dkrf_patch.py +13 -13
  182. tomwer/gui/edit/test/test_image_key_editor.py +3 -3
  183. tomwer/gui/edit/test/test_nx_editor.py +40 -16
  184. tomwer/gui/icat/__init__.py +0 -0
  185. tomwer/gui/icat/createscreenshots.py +80 -0
  186. tomwer/gui/icat/gallery.py +214 -0
  187. tomwer/gui/icat/publish.py +187 -0
  188. tomwer/gui/imagefromfile.py +2 -2
  189. tomwer/gui/qfolderdialog.py +24 -1
  190. tomwer/gui/reconstruction/axis/CompareImages.py +88 -168
  191. tomwer/gui/reconstruction/axis/axis.py +171 -57
  192. tomwer/gui/reconstruction/axis/radioaxis.py +122 -257
  193. tomwer/gui/reconstruction/darkref/darkrefcopywidget.py +3 -2
  194. tomwer/gui/reconstruction/darkref/darkrefwidget.py +2 -1
  195. tomwer/gui/reconstruction/nabu/castvolume.py +14 -3
  196. tomwer/gui/reconstruction/nabu/check.py +9 -9
  197. tomwer/gui/reconstruction/nabu/helical.py +29 -12
  198. tomwer/gui/reconstruction/nabu/nabuconfig/base.py +2 -4
  199. tomwer/gui/reconstruction/nabu/nabuconfig/nabuconfig.py +2 -1
  200. tomwer/gui/reconstruction/nabu/nabuconfig/output.py +126 -35
  201. tomwer/gui/reconstruction/nabu/nabuconfig/phase.py +39 -32
  202. tomwer/gui/reconstruction/nabu/nabuconfig/preprocessing.py +222 -31
  203. tomwer/gui/reconstruction/nabu/nabuconfig/reconstruction.py +57 -27
  204. tomwer/gui/reconstruction/nabu/nabuflow.py +12 -20
  205. tomwer/gui/reconstruction/nabu/slices.py +10 -11
  206. tomwer/gui/reconstruction/nabu/volume.py +22 -10
  207. tomwer/gui/reconstruction/normalization/intensity.py +18 -48
  208. tomwer/gui/reconstruction/saaxis/corrangeselector.py +8 -24
  209. tomwer/gui/reconstruction/saaxis/dimensionwidget.py +1 -1
  210. tomwer/gui/reconstruction/saaxis/saaxis.py +9 -21
  211. tomwer/gui/reconstruction/sadeltabeta/saadeltabeta.py +45 -12
  212. tomwer/gui/reconstruction/scores/control.py +2 -9
  213. tomwer/gui/reconstruction/scores/scoreplot.py +13 -11
  214. tomwer/gui/reconstruction/test/test_axis.py +41 -16
  215. tomwer/gui/reconstruction/test/test_nabu.py +31 -9
  216. tomwer/gui/reconstruction/test/test_saaxis.py +3 -3
  217. tomwer/gui/reconstruction/test/test_sadeltabeta.py +12 -2
  218. tomwer/gui/settings.py +5 -28
  219. tomwer/gui/stackplot.py +2 -5
  220. tomwer/gui/stitching/action.py +49 -0
  221. tomwer/gui/stitching/config/axisparams.py +7 -24
  222. tomwer/gui/stitching/config/output.py +10 -8
  223. tomwer/gui/stitching/config/positionoveraxis.py +22 -23
  224. tomwer/gui/stitching/normalization.py +117 -0
  225. tomwer/gui/stitching/stitchandbackground.py +4 -6
  226. tomwer/gui/stitching/stitching.py +267 -45
  227. tomwer/gui/stitching/stitching_preview.py +62 -55
  228. tomwer/gui/stitching/stitching_raw.py +13 -12
  229. tomwer/gui/stitching/z_stitching/fineestimation.py +0 -60
  230. tomwer/gui/utils/buttons.py +112 -29
  231. tomwer/gui/utils/inputwidget.py +43 -25
  232. tomwer/gui/utils/lineselector/lineselector.py +1 -1
  233. tomwer/gui/utils/scandescription.py +4 -0
  234. tomwer/gui/utils/step.py +144 -0
  235. tomwer/gui/utils/unitsystem.py +2 -5
  236. tomwer/gui/utils/vignettes.py +176 -15
  237. tomwer/gui/visualization/dataviewer.py +48 -35
  238. tomwer/gui/visualization/diffviewer/diffviewer.py +7 -16
  239. tomwer/gui/visualization/diffviewer/shiftwidget.py +2 -5
  240. tomwer/gui/visualization/scanoverview.py +1 -1
  241. tomwer/gui/visualization/sinogramviewer.py +20 -36
  242. tomwer/gui/visualization/test/test_diffviewer.py +3 -3
  243. tomwer/gui/visualization/test/test_nx_tomo_metadata_viewer.py +4 -4
  244. tomwer/gui/visualization/test/test_sinogramviewer.py +2 -2
  245. tomwer/gui/visualization/test/test_stacks.py +3 -3
  246. tomwer/gui/visualization/test/test_volumeviewer.py +65 -67
  247. tomwer/gui/visualization/volumeviewer.py +114 -113
  248. tomwer/io/utils/h5pyutils.py +3 -3
  249. tomwer/io/utils/raw_and_processed_data.py +84 -0
  250. tomwer/io/utils/tomoobj.py +4 -6
  251. tomwer/io/utils/utils.py +7 -7
  252. tomwer/resources/gui/icons/parameters.svg +1 -1
  253. tomwer/resources/gui/icons/ruler.png +0 -0
  254. tomwer/resources/gui/icons/ruler.svg +273 -0
  255. tomwer/resources/gui/icons/short_description.png +0 -0
  256. tomwer/resources/gui/icons/short_description.svg +58 -0
  257. tomwer/resources/gui/icons/url.png +0 -0
  258. tomwer/resources/gui/icons/url.svg +58 -0
  259. tomwer/resources/gui/illustrations/no_rot.svg +1 -1
  260. tomwer/synctools/stacks/edit/darkflatpatch.py +19 -14
  261. tomwer/synctools/stacks/edit/imagekeyeditor.py +2 -2
  262. tomwer/synctools/stacks/reconstruction/axis.py +4 -4
  263. tomwer/synctools/stacks/reconstruction/castvolume.py +22 -7
  264. tomwer/synctools/stacks/reconstruction/dkrefcopy.py +25 -20
  265. tomwer/synctools/stacks/reconstruction/nabu.py +2 -2
  266. tomwer/synctools/stacks/reconstruction/normalization.py +2 -2
  267. tomwer/synctools/stacks/reconstruction/saaxis.py +2 -2
  268. tomwer/synctools/stacks/reconstruction/sadeltabeta.py +2 -2
  269. tomwer/synctools/test/test_darkRefs.py +7 -58
  270. tomwer/synctools/test/test_foldertransfer.py +6 -6
  271. tomwer/synctools/utils/scanstages.py +6 -6
  272. tomwer/tests/conftest.py +34 -0
  273. tomwer/tests/datasets.py +13 -0
  274. tomwer/tests/test_scripts.py +91 -41
  275. tomwer/tests/utils.py +5 -0
  276. tomwer/third_part/WaitingOverlay.py +110 -0
  277. tomwer/third_part/__init__.py +0 -0
  278. tomwer/version.py +2 -2
  279. tomwer-1.3.12-py3.11-nspkg.pth +1 -0
  280. {tomwer-1.2.1.dist-info → tomwer-1.3.12.dist-info}/METADATA +73 -58
  281. {tomwer-1.2.1.dist-info → tomwer-1.3.12.dist-info}/RECORD +287 -286
  282. {tomwer-1.2.1.dist-info → tomwer-1.3.12.dist-info}/WHEEL +1 -1
  283. orangecontrib/tomwer/widgets/reconstruction/TofuOW.py +0 -197
  284. orangecontrib/tomwer/widgets/reconstruction/icons/XY_lamino.svg +0 -168
  285. orangecontrib/tomwer/widgets/reconstruction/icons/XZ_lamino.svg +0 -275
  286. orangecontrib/tomwer/widgets/reconstruction/icons/YZ_lamino.svg +0 -182
  287. tomwer/app/lamino.py +0 -143
  288. tomwer/core/process/reconstruction/lamino/__init__.py +0 -1
  289. tomwer/core/process/reconstruction/lamino/tofu.py +0 -1000
  290. tomwer/core/process/test/test_lamino.py +0 -76
  291. tomwer/core/test/test_lamino.py +0 -92
  292. tomwer/gui/reconstruction/lamino/__init__.py +0 -31
  293. tomwer/gui/reconstruction/lamino/tofu/TofuOptionLoader.py +0 -107
  294. tomwer/gui/reconstruction/lamino/tofu/__init__.py +0 -1
  295. tomwer/gui/reconstruction/lamino/tofu/misc.py +0 -148
  296. tomwer/gui/reconstruction/lamino/tofu/projections.py +0 -896
  297. tomwer/gui/reconstruction/lamino/tofu/settings.py +0 -75
  298. tomwer/gui/reconstruction/lamino/tofu/tofu.py +0 -432
  299. tomwer/gui/reconstruction/lamino/tofu/tofuexpert.py +0 -567
  300. tomwer/gui/reconstruction/lamino/tofu/tofuoutput.py +0 -760
  301. tomwer/gui/reconstruction/test/test_lamino.py +0 -189
  302. tomwer/resources/gui/icons/esrf_1.svg +0 -307
  303. tomwer/resources/gui/icons/lamino_parameters.svg +0 -70
  304. tomwer/resources/gui/icons/triangle.svg +0 -80
  305. tomwer/resources/gui/illustrations/lamino_angle.png +0 -0
  306. tomwer/resources/gui/illustrations/lamino_angle.svg +0 -509
  307. tomwer/resources/gui/illustrations/lamino_beta_angle.png +0 -0
  308. tomwer/resources/gui/illustrations/lamino_beta_angle.svg +0 -97
  309. tomwer/resources/gui/illustrations/lamino_theta_angle.png +0 -0
  310. tomwer/resources/gui/illustrations/lamino_theta_angle.svg +0 -368
  311. tomwer/resources/gui/illustrations/manual_slice.png +0 -0
  312. tomwer/resources/gui/illustrations/manual_slice.svg +0 -221
  313. tomwer/resources/gui/illustrations/psi_angle.png +0 -0
  314. tomwer/resources/gui/illustrations/psi_angle.svg +0 -479
  315. tomwer/resources/gui/illustrations/rotation_center.png +0 -0
  316. tomwer/resources/gui/illustrations/rotation_center.svg +0 -276
  317. tomwer/resources/gui/illustrations/slice_stack.png +0 -0
  318. tomwer/resources/gui/illustrations/slice_stack.svg +0 -266
  319. tomwer/resources/gui/illustrations/xy_slice.png +0 -0
  320. tomwer/resources/gui/illustrations/xy_slice.svg +0 -269
  321. tomwer/resources/gui/illustrations/xz_slice.png +0 -0
  322. tomwer/resources/gui/illustrations/xz_slice.svg +0 -270
  323. tomwer/resources/gui/illustrations/yz_slice.png +0 -0
  324. tomwer/resources/gui/illustrations/yz_slice.svg +0 -270
  325. tomwer/synctools/stacks/reconstruction/lamino.py +0 -233
  326. tomwer/synctools/test/test_scanstages.py +0 -162
  327. tomwer/tests/utils/__init__.py +0 -247
  328. tomwer/tests/utils/utilstest.py +0 -220
  329. tomwer-1.2.1-py3.11-nspkg.pth +0 -1
  330. /tomwer/core/process/control/{email.py → emailnotifier.py} +0 -0
  331. {tomwer-1.2.1.dist-info → tomwer-1.3.12.dist-info}/LICENSE +0 -0
  332. {tomwer-1.2.1.dist-info → tomwer-1.3.12.dist-info}/entry_points.txt +0 -0
  333. {tomwer-1.2.1.dist-info → tomwer-1.3.12.dist-info}/namespace_packages.txt +0 -0
  334. {tomwer-1.2.1.dist-info → tomwer-1.3.12.dist-info}/top_level.txt +0 -0
@@ -38,17 +38,18 @@ from nabu.estimation.cor import (
38
38
  CenterOfRotationAdaptiveSearch,
39
39
  CenterOfRotationGrowingWindow,
40
40
  CenterOfRotationSlidingWindow,
41
+ CenterOfRotationOctaveAccurate,
41
42
  )
42
- from nabu.pipeline.estimators import SinoCORFinder
43
+ from nabu.pipeline.estimators import SinoCORFinder, CORFinder
43
44
  from nabu.resources.nxflatfield import update_dataset_info_flats_darks
44
45
  from processview.core.manager import DatasetState, ProcessManager
45
46
  from processview.core.superviseprocess import SuperviseProcess
46
- from silx.utils.deprecation import deprecated_warning
47
+ from tomwer.core.utils.deprecation import deprecated_warning
47
48
 
48
49
  import tomwer.version
49
50
  from tomwer.core.process.reconstruction.utils.cor import absolute_pos_to_relative
50
51
  from tomwer.core.process.task import Task
51
- from tomwer.core.scan.hdf5scan import HDF5TomoScan
52
+ from tomwer.core.scan.nxtomoscan import NXtomoScan
52
53
  from tomwer.core.scan.scanbase import TomwerScanBase
53
54
  from tomwer.core.scan.scanfactory import ScanFactory
54
55
  from tomwer.core.utils import image, logconfig
@@ -75,7 +76,7 @@ else:
75
76
  has_composite_cor_finder = True
76
77
  from silx.io.url import DataUrl
77
78
  from silx.io.utils import h5py_read_dataset
78
- from tomoscan.io import HDF5File
79
+ from silx.io.utils import open as open_hdf5
79
80
 
80
81
  _logger = logging.getLogger(__name__)
81
82
  if not has_composite_cor_finder:
@@ -108,7 +109,7 @@ def adapt_tomwer_scan_to_nabu(scan: TomwerScanBase):
108
109
  updating infos regarding flat and dark if needed
109
110
  """
110
111
  dataset_infos = scan.to_nabu_dataset_analyser()
111
- if isinstance(scan, HDF5TomoScan):
112
+ if isinstance(scan, NXtomoScan):
112
113
  try:
113
114
  update_dataset_info_flats_darks(
114
115
  dataset_infos,
@@ -173,6 +174,50 @@ def compute_cor_nabu_growing_window(
173
174
  return res
174
175
 
175
176
 
177
+ def compute_cor_nabu_growing_window_radios(
178
+ scan: TomwerScanBase,
179
+ ):
180
+ """
181
+ Call nabu.preproc.alignement.CenterOfRotationGrowingWindow.find_shift
182
+
183
+ :param TomwerScanBase scan:
184
+
185
+ :return:
186
+ """
187
+ has_darks = scan.reduced_darks is not None and len(scan.reduced_darks) > 0
188
+ has_flats = scan.reduced_flats is not None and len(scan.reduced_flats) > 0
189
+
190
+ projection_angles = scan.get_proj_angle_url()
191
+ projection_angles_i = {
192
+ value.path(): key for key, value in projection_angles.items()
193
+ }
194
+ url_radio_1, url_radio_2 = AxisTask.get_inputs_urls(scan=scan)
195
+ angle_radio_1 = float(projection_angles_i[url_radio_1.url.path()])
196
+ angle_radio_2 = float(projection_angles_i[url_radio_2.url.path()])
197
+ radio_angles = tuple(numpy.radians((angle_radio_1, angle_radio_2)))
198
+
199
+ corfinder = CORFinder(
200
+ dataset_info=adapt_tomwer_scan_to_nabu(scan),
201
+ method="growing-window",
202
+ do_flatfield=has_darks and has_flats,
203
+ cor_options=scan.axis_params.get_nabu_cor_options_as_dict(),
204
+ radio_angles=radio_angles,
205
+ logger=_logger,
206
+ )
207
+ res = corfinder.find_cor() # Returns absolute cor
208
+ if isinstance(res, numpy.ndarray):
209
+ if len(res) == 1:
210
+ res = res[0]
211
+ else:
212
+ raise ValueError(
213
+ "nabu rsult is expected to be a scalar, numpy array found. Please upgrade nabu this issue is expected to be solved"
214
+ )
215
+
216
+ return _absolute_pos_to_relative_with_warning(
217
+ absolute_pos=res, det_width=scan.dim_1
218
+ )
219
+
220
+
176
221
  def compute_cor_nabu_growing_window_sinogram(
177
222
  scan: TomwerScanBase,
178
223
  ):
@@ -183,12 +228,15 @@ def compute_cor_nabu_growing_window_sinogram(
183
228
 
184
229
  :return:
185
230
  """
231
+ has_darks = scan.reduced_darks is not None and len(scan.reduced_darks) > 0
232
+ has_flats = scan.reduced_flats is not None and len(scan.reduced_flats) > 0
233
+
186
234
  corfinder = SinoCORFinder(
187
235
  dataset_info=adapt_tomwer_scan_to_nabu(scan),
188
- method="growing-window",
236
+ method="sino-growing-window",
189
237
  slice_idx=scan.axis_params.sinogram_line or "middle",
190
238
  subsampling=scan.axis_params.sinogram_subsampling,
191
- do_flatfield=True,
239
+ do_flatfield=has_darks and has_flats,
192
240
  cor_options=scan.axis_params.get_nabu_cor_options_as_dict(),
193
241
  logger=_logger,
194
242
  )
@@ -213,12 +261,15 @@ def compute_scan_sino_coarse_to_fine(scan):
213
261
  :param scan:
214
262
  :return:
215
263
  """
264
+ has_darks = scan.reduced_darks is not None and len(scan.reduced_darks) > 0
265
+ has_flats = scan.reduced_flats is not None and len(scan.reduced_flats) > 0
266
+
216
267
  corfinder = SinoCORFinder(
217
268
  dataset_info=adapt_tomwer_scan_to_nabu(scan),
218
269
  method=AxisMode.sino_coarse_to_fine.value,
219
270
  slice_idx=scan.axis_params.sinogram_line or "middle",
220
271
  subsampling=scan.axis_params.sinogram_subsampling,
221
- do_flatfield=True,
272
+ do_flatfield=has_darks and has_flats,
222
273
  cor_options=scan.axis_params.get_nabu_cor_options_as_dict(),
223
274
  logger=_logger,
224
275
  )
@@ -252,8 +303,6 @@ def compute_scan_composite_coarse_to_fine(scan: TomwerScanBase):
252
303
  # allow some tolerance for the "side" argument that is there only
253
304
  # in the new one
254
305
 
255
- extra_args = {}
256
-
257
306
  cor_options = scan.axis_params.get_nabu_cor_options_as_dict()
258
307
  for key in "low_pass", "high_pass":
259
308
  if key in cor_options:
@@ -266,7 +315,6 @@ def compute_scan_composite_coarse_to_fine(scan: TomwerScanBase):
266
315
  cor_options=cor_options,
267
316
  logger=_logger,
268
317
  take_log=take_log,
269
- **extra_args,
270
318
  )
271
319
  res = corfinder.find_cor()
272
320
  return _absolute_pos_to_relative_with_warning(
@@ -318,13 +366,7 @@ def compute_scan_cor_nabu_growing_window(scan):
318
366
  if scan.axis_params.use_sinogram:
319
367
  return compute_cor_nabu_growing_window_sinogram(scan=scan)
320
368
  else:
321
- return compute_cor_nabu_growing_window(
322
- radio_1=radio_1.copy(),
323
- radio_2=radio_2.copy(),
324
- side=scan.axis_params.side,
325
- padding_mode=scan.axis_params.padding_mode,
326
- flip_frame_2_lr=scan.axis_params.flip_lr,
327
- )
369
+ return compute_cor_nabu_growing_window_radios(scan=scan)
328
370
 
329
371
 
330
372
  def compute_cor_nabu_sliding_window(
@@ -360,17 +402,45 @@ def compute_cor_nabu_sliding_window(
360
402
  padding_mode=padding_mode,
361
403
  median_filt_shape=None,
362
404
  )
363
- # now fixed but on some version nabu could return a numpy array instead of float
364
- if isinstance(res, numpy.ndarray):
365
- if len(res) == 1:
366
- res = res[0]
367
- else:
368
- raise ValueError(
369
- "nabu result is expected to be a scalar, numpy array found. Please upgrade nabu this issue is expected to be solved"
370
- )
371
405
  return res
372
406
 
373
407
 
408
+ def compute_cor_nabu_sliding_window_radios(
409
+ scan,
410
+ ):
411
+ """
412
+ Call nabu.preproc.alignement.CenterOfRotationGrowingWindow.find_shift
413
+
414
+ :param TomwerScanBase scan:
415
+
416
+ :return:
417
+ """
418
+ has_darks = scan.reduced_darks is not None and len(scan.reduced_darks) > 0
419
+ has_flats = scan.reduced_flats is not None and len(scan.reduced_flats) > 0
420
+
421
+ projection_angles = scan.get_proj_angle_url()
422
+ projection_angles_i = {
423
+ value.path(): key for key, value in projection_angles.items()
424
+ }
425
+ url_radio_1, url_radio_2 = AxisTask.get_inputs_urls(scan=scan)
426
+ angle_radio_1 = float(projection_angles_i[url_radio_1.url.path()])
427
+ angle_radio_2 = float(projection_angles_i[url_radio_2.url.path()])
428
+ radio_angles = tuple(numpy.radians((angle_radio_1, angle_radio_2)))
429
+
430
+ corfinder = CORFinder(
431
+ dataset_info=adapt_tomwer_scan_to_nabu(scan),
432
+ method="sliding-window",
433
+ do_flatfield=has_darks and has_flats,
434
+ cor_options=scan.axis_params.get_nabu_cor_options_as_dict(),
435
+ radio_angles=radio_angles,
436
+ logger=_logger,
437
+ )
438
+ res = corfinder.find_cor() # Returns absolute cor.
439
+ return _absolute_pos_to_relative_with_warning(
440
+ absolute_pos=res, det_width=scan.dim_1
441
+ )
442
+
443
+
374
444
  def compute_cor_nabu_sliding_window_sinogram(
375
445
  scan,
376
446
  ):
@@ -381,24 +451,19 @@ def compute_cor_nabu_sliding_window_sinogram(
381
451
 
382
452
  :return:
383
453
  """
454
+ has_darks = scan.reduced_darks is not None and len(scan.reduced_darks) > 0
455
+ has_flats = scan.reduced_flats is not None and len(scan.reduced_flats) > 0
456
+
384
457
  corfinder = SinoCORFinder(
385
458
  dataset_info=adapt_tomwer_scan_to_nabu(scan),
386
- method="sliding-window",
459
+ method="sino-sliding-window",
387
460
  slice_idx=scan.axis_params.sinogram_line or "middle",
388
461
  subsampling=scan.axis_params.sinogram_subsampling,
389
- do_flatfield=True,
462
+ do_flatfield=has_darks and has_flats,
390
463
  cor_options=scan.axis_params.get_nabu_cor_options_as_dict(),
391
464
  logger=_logger,
392
465
  )
393
466
  res = corfinder.find_cor()
394
- # now fixed but on some version nabu could return a numpy array instead of float
395
- if isinstance(res, numpy.ndarray):
396
- if len(res) == 1:
397
- res = res[0]
398
- else:
399
- raise ValueError(
400
- "nabu result is expected to be a scalar, numpy array found. Please upgrade nabu this issue is expected to be solved"
401
- )
402
467
  return _absolute_pos_to_relative_with_warning(
403
468
  absolute_pos=res, det_width=scan.dim_1
404
469
  )
@@ -431,13 +496,129 @@ def compute_scan_cor_nabu_sliding_window(scan):
431
496
  if scan.axis_params.use_sinogram:
432
497
  return compute_cor_nabu_sliding_window_sinogram(scan=scan)
433
498
  else:
434
- return compute_cor_nabu_sliding_window(
435
- radio_1=radio_1.copy(),
436
- radio_2=radio_2.copy(),
437
- side=scan.axis_params.side,
438
- padding_mode=scan.axis_params.padding_mode,
439
- flip_frame_2_lr=scan.axis_params.flip_lr,
440
- )
499
+ return compute_cor_nabu_sliding_window_radios(scan=scan)
500
+
501
+
502
+ def compute_scan_fourier_angles(scan):
503
+ """
504
+ run 'scan_fourier_angles' algorithm for the requested scan
505
+ """
506
+ has_darks = scan.reduced_darks is not None and len(scan.reduced_darks) > 0
507
+ has_flats = scan.reduced_flats is not None and len(scan.reduced_flats) > 0
508
+
509
+ corfinder = SinoCORFinder(
510
+ dataset_info=adapt_tomwer_scan_to_nabu(scan),
511
+ method="fourier-angles",
512
+ slice_idx=scan.axis_params.sinogram_line or "middle",
513
+ subsampling=scan.axis_params.sinogram_subsampling,
514
+ do_flatfield=has_darks and has_flats,
515
+ cor_options=scan.axis_params.get_nabu_cor_options_as_dict(),
516
+ logger=_logger,
517
+ )
518
+ res = corfinder.find_cor()
519
+ return _absolute_pos_to_relative_with_warning(
520
+ absolute_pos=res, det_width=scan.dim_1
521
+ )
522
+
523
+
524
+ def compute_scan_octave_accurate_radios(
525
+ scan,
526
+ ):
527
+ """
528
+ Call nabu.preproc.alignement.CenterOfRotationGrowingWindow.find_shift
529
+
530
+ :param TomwerScanBase scan:
531
+
532
+ :return:
533
+ """
534
+ has_darks = scan.reduced_darks is not None and len(scan.reduced_darks) > 0
535
+ has_flats = scan.reduced_flats is not None and len(scan.reduced_flats) > 0
536
+
537
+ has_darks = scan.reduced_darks is not None and len(scan.reduced_darks) > 0
538
+ has_flats = scan.reduced_flats is not None and len(scan.reduced_flats) > 0
539
+
540
+ projection_angles = scan.get_proj_angle_url()
541
+ projection_angles_i = {
542
+ value.path(): key for key, value in projection_angles.items()
543
+ }
544
+ url_radio_1, url_radio_2 = AxisTask.get_inputs_urls(scan=scan)
545
+ angle_radio_1 = float(projection_angles_i[url_radio_1.url.path()])
546
+ angle_radio_2 = float(projection_angles_i[url_radio_2.url.path()])
547
+ radio_angles = tuple(numpy.radians((angle_radio_1, angle_radio_2)))
548
+
549
+ corfinder = CORFinder(
550
+ dataset_info=adapt_tomwer_scan_to_nabu(scan),
551
+ method="octave-accurate",
552
+ do_flatfield=has_darks and has_flats,
553
+ cor_options=scan.axis_params.get_nabu_cor_options_as_dict(),
554
+ radio_angles=radio_angles,
555
+ logger=_logger,
556
+ )
557
+ res = corfinder.find_cor()
558
+ return _absolute_pos_to_relative_with_warning(
559
+ absolute_pos=res, det_width=scan.dim_1
560
+ )
561
+
562
+
563
+ def compute_scan_octave_accurate(scan):
564
+ """
565
+ Compute center of rotation from `octave-accurate` algorithm
566
+ scan
567
+ :param scan:
568
+ :return:
569
+ """
570
+ cor_options = scan.axis_params.get_nabu_cor_options_as_dict()
571
+ radio_1, radio_2 = AxisTask.get_inputs(scan=scan)
572
+ extra_options = {}
573
+ for key in "low_pass", "high_pass":
574
+ if key in cor_options:
575
+ extra_options[key] = float(cor_options[key])
576
+
577
+ corfinder = CenterOfRotationOctaveAccurate(cor_options=cor_options)
578
+ res = corfinder.find_shift(
579
+ img_1=radio_1,
580
+ img_2=numpy.fliplr(radio_2) if scan.axis_params.flip_lr else radio_2,
581
+ side=scan.axis_params.side,
582
+ padding_mode=scan.axis_params.padding_mode,
583
+ **extra_options,
584
+ )
585
+ return res
586
+
587
+
588
+ def compute_cor_nabu_centered_radios(
589
+ scan,
590
+ ):
591
+ """
592
+ Call nabu.preproc.alignement.CenterOfRotationGrowingWindow.find_shift
593
+
594
+ :param TomwerScanBase scan:
595
+
596
+ :return:
597
+ """
598
+ has_darks = scan.reduced_darks is not None and len(scan.reduced_darks) > 0
599
+ has_flats = scan.reduced_flats is not None and len(scan.reduced_flats) > 0
600
+
601
+ projection_angles = scan.get_proj_angle_url()
602
+ projection_angles_i = {
603
+ value.path(): key for key, value in projection_angles.items()
604
+ }
605
+ url_radio_1, url_radio_2 = AxisTask.get_inputs_urls(scan=scan)
606
+ angle_radio_1 = float(projection_angles_i[url_radio_1.url.path()])
607
+ angle_radio_2 = float(projection_angles_i[url_radio_2.url.path()])
608
+ radio_angles = tuple(numpy.radians((angle_radio_1, angle_radio_2)))
609
+
610
+ corfinder = CORFinder(
611
+ dataset_info=adapt_tomwer_scan_to_nabu(scan),
612
+ method="centered",
613
+ do_flatfield=has_darks and has_flats,
614
+ cor_options=scan.axis_params.get_nabu_cor_options_as_dict(),
615
+ radio_angles=radio_angles,
616
+ logger=_logger,
617
+ )
618
+ res = corfinder.find_cor()
619
+ return _absolute_pos_to_relative_with_warning(
620
+ absolute_pos=res, det_width=scan.dim_1
621
+ )
441
622
 
442
623
 
443
624
  def compute_cor_nabu_centered(
@@ -446,6 +627,7 @@ def compute_cor_nabu_centered(
446
627
  padding_mode,
447
628
  flip_frame_2_lr=True,
448
629
  horz_fft_width=False,
630
+ vert_fft_width=False,
449
631
  ):
450
632
  """
451
633
  Call nabu.preproc.alignement.CenterOfRotation.find_shift
@@ -462,7 +644,9 @@ def compute_cor_nabu_centered(
462
644
 
463
645
  :return:
464
646
  """
465
- nabu_class = CenterOfRotation(horz_fft_width=horz_fft_width)
647
+ nabu_class = CenterOfRotation(
648
+ horz_fft_width=horz_fft_width, vert_fft_width=vert_fft_width
649
+ )
466
650
  return nabu_class.find_shift(
467
651
  img_1=radio_1,
468
652
  img_2=numpy.fliplr(radio_2) if flip_frame_2_lr else radio_2,
@@ -491,12 +675,7 @@ def compute_scan_cor_nabu_centered(scan):
491
675
  "mode %s" % scan.axis_params.padding_mode
492
676
  )
493
677
 
494
- return compute_cor_nabu_centered(
495
- radio_1=radio_1.copy(),
496
- radio_2=radio_2.copy(),
497
- padding_mode=scan.axis_params.padding_mode,
498
- flip_frame_2_lr=scan.axis_params.flip_lr,
499
- )
678
+ return compute_cor_nabu_centered_radios(scan)
500
679
 
501
680
 
502
681
  def compute_cor_nabu_global(
@@ -526,6 +705,42 @@ def compute_cor_nabu_global(
526
705
  )
527
706
 
528
707
 
708
+ def compute_cor_nabu_global_radios(
709
+ scan: TomwerScanBase,
710
+ ):
711
+ """
712
+ Call nabu.preproc.alignement.CenterOfRotationGrowingWindow.find_shift
713
+
714
+ :param TomwerScanBase scan:
715
+
716
+ :return:
717
+ """
718
+ has_darks = scan.reduced_darks is not None and len(scan.reduced_darks) > 0
719
+ has_flats = scan.reduced_flats is not None and len(scan.reduced_flats) > 0
720
+
721
+ projection_angles = scan.get_proj_angle_url()
722
+ projection_angles_i = {
723
+ value.path(): key for key, value in projection_angles.items()
724
+ }
725
+ url_radio_1, url_radio_2 = AxisTask.get_inputs_urls(scan=scan)
726
+ angle_radio_1 = float(projection_angles_i[url_radio_1.url.path()])
727
+ angle_radio_2 = float(projection_angles_i[url_radio_2.url.path()])
728
+ radio_angles = tuple(numpy.radians((angle_radio_1, angle_radio_2)))
729
+
730
+ corfinder = CORFinder(
731
+ dataset_info=adapt_tomwer_scan_to_nabu(scan),
732
+ method="global",
733
+ do_flatfield=has_darks and has_flats,
734
+ cor_options=scan.axis_params.get_nabu_cor_options_as_dict(),
735
+ radio_angles=radio_angles,
736
+ logger=_logger,
737
+ )
738
+ res = corfinder.find_cor()
739
+ return _absolute_pos_to_relative_with_warning(
740
+ absolute_pos=res, det_width=scan.dim_1
741
+ )
742
+
743
+
529
744
  def compute_scan_cor_nabu_global(scan):
530
745
  """
531
746
  Call to nabu.preproc.alignment.CenterOfRotation from the scan axis_params
@@ -544,13 +759,7 @@ def compute_scan_cor_nabu_global(scan):
544
759
  "compute scan axis from nabu CenterOfRotation with padding "
545
760
  "mode %s" % scan.axis_params.padding_mode
546
761
  )
547
-
548
- return compute_cor_nabu_global(
549
- radio_1=radio_1.copy(),
550
- radio_2=radio_2.copy(),
551
- padding_mode=scan.axis_params.padding_mode,
552
- flip_frame_2_lr=scan.axis_params.flip_lr,
553
- )
762
+ return compute_cor_nabu_global_radios(scan)
554
763
 
555
764
 
556
765
  def get_stdmax_column(x: numpy.ndarray) -> float:
@@ -597,6 +806,9 @@ class AxisTask(
597
806
  AxisMode.growing_window_radios: compute_scan_cor_nabu_growing_window,
598
807
  AxisMode.sino_coarse_to_fine: compute_scan_sino_coarse_to_fine,
599
808
  AxisMode.composite_coarse_to_fine: compute_scan_composite_coarse_to_fine,
809
+ AxisMode.near: compute_scan_composite_coarse_to_fine,
810
+ AxisMode.sino_fourier_angles: compute_scan_fourier_angles,
811
+ AxisMode.octave_accurate_radios: compute_scan_octave_accurate,
600
812
  }
601
813
 
602
814
  def __init__(
@@ -722,17 +934,16 @@ class AxisTask(
722
934
  assert isinstance(scan, TomwerScanBase)
723
935
  if scan.process_file is not None:
724
936
  entry = "entry"
725
- if isinstance(scan, HDF5TomoScan):
937
+ if isinstance(scan, NXtomoScan):
726
938
  entry = scan.entry
727
- with scan.acquire_process_file_lock():
728
- self.register_process(
729
- process_file=scan.process_file,
730
- entry=entry,
731
- results={"center_of_rotation": cor if cor is not None else "-"},
732
- configuration=self._axis_params.to_dict(),
733
- process_index=scan.pop_process_index(),
734
- overwrite=True,
735
- )
939
+ self.register_process(
940
+ process_file=scan.process_file,
941
+ entry=entry,
942
+ results={"center_of_rotation": cor if cor is not None else "-"},
943
+ configuration=self._axis_params.to_dict(),
944
+ process_index=scan.pop_process_index(),
945
+ overwrite=True,
946
+ )
736
947
 
737
948
  try:
738
949
  extra = {
@@ -953,7 +1164,7 @@ class AxisTask(
953
1164
  :return:
954
1165
  """
955
1166
  if entry is None:
956
- with HDF5File(process_file, "r", swmr=True) as h5f:
1167
+ with open_hdf5(process_file) as h5f:
957
1168
  entries = AxisTask._get_process_nodes(root_node=h5f, process=AxisTask)
958
1169
  if len(entries) == 0:
959
1170
  _logger.info("unable to find a Axis process in %s" % process_file)
@@ -964,7 +1175,7 @@ class AxisTask(
964
1175
  entry = list(entries.keys())[0]
965
1176
  _logger.info("take %s as default entry" % entry)
966
1177
 
967
- with HDF5File(process_file, "r", swmr=True) as h5f:
1178
+ with open_hdf5(process_file) as h5f:
968
1179
  axis_nodes = AxisTask._get_process_nodes(
969
1180
  root_node=h5f[entry], process=AxisTask
970
1181
  )