tomwer 1.3.26__py3-none-any.whl → 1.4.0__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 (638) hide show
  1. orangecontrib/tomwer/orange/managedprocess.py +1 -29
  2. orangecontrib/tomwer/orange/settings.py +2 -28
  3. orangecontrib/tomwer/tests/TestAcquisition.py +220 -0
  4. orangecontrib/tomwer/tutorials/append_raw_darks_and_flats_frames_to_NXtomos.ows +2 -2
  5. orangecontrib/tomwer/tutorials/copy_reduced_darks_and_flats_meth1.ows +1 -1
  6. orangecontrib/tomwer/tutorials/{icat_publication.ows → drac_publication.ows} +7 -21
  7. orangecontrib/tomwer/tutorials/id16b/ID16b_full_volume.ows +22 -0
  8. orangecontrib/tomwer/tutorials/id16b/ID16b_insitu.ows +302 -0
  9. orangecontrib/tomwer/tutorials/id16b/ID16b_normalization.ows +218 -0
  10. orangecontrib/tomwer/tutorials/simple_volume_to_slurm_reconstruction.ows +29 -24
  11. orangecontrib/tomwer/tutorials/test_cor.ows +19 -0
  12. orangecontrib/tomwer/tutorials/volume_casting_on_slurm.ows +54 -0
  13. orangecontrib/tomwer/widgets/__init__.py +3 -5
  14. orangecontrib/tomwer/widgets/cluster/FutureSupervisorOW.py +35 -54
  15. orangecontrib/tomwer/widgets/cluster/SlurmClusterOW.py +1 -31
  16. orangecontrib/tomwer/widgets/control/AdvancementOW.py +1 -29
  17. orangecontrib/tomwer/widgets/control/DataDiscoveryOW.py +5 -4
  18. orangecontrib/tomwer/widgets/control/DataListenerOW.py +1 -29
  19. orangecontrib/tomwer/widgets/control/DataSelectorOW.py +11 -30
  20. orangecontrib/tomwer/widgets/control/DataTransfertOW.py +2 -28
  21. orangecontrib/tomwer/widgets/control/DataValidatorOW.py +1 -28
  22. orangecontrib/tomwer/widgets/control/DataWatcherOW.py +1 -28
  23. orangecontrib/tomwer/widgets/control/EDF2NXTomomillOW.py +48 -51
  24. orangecontrib/tomwer/widgets/control/EmailOW.py +12 -2
  25. orangecontrib/tomwer/widgets/control/FilterOW.py +1 -28
  26. orangecontrib/tomwer/widgets/control/NXTomomillOW.py +37 -53
  27. orangecontrib/tomwer/widgets/control/NXtomoConcatenate.py +21 -20
  28. orangecontrib/tomwer/widgets/control/NotifierOW.py +9 -28
  29. orangecontrib/tomwer/widgets/control/ReduceDarkFlatSelectorOW.py +3 -2
  30. orangecontrib/tomwer/widgets/control/SingleTomoObjOW.py +1 -27
  31. orangecontrib/tomwer/widgets/control/TimerOW.py +9 -28
  32. orangecontrib/tomwer/widgets/control/TomoObjSeriesOW.py +58 -0
  33. orangecontrib/tomwer/widgets/control/VolumeSelector.py +8 -30
  34. orangecontrib/tomwer/widgets/control/icons/nxtomomill.svg +173 -119
  35. orangecontrib/tomwer/widgets/control/icons/reduced_darkflat_selector.png +0 -0
  36. orangecontrib/tomwer/widgets/control/icons/reduced_darkflat_selector.svg +55 -195
  37. orangecontrib/tomwer/widgets/control/icons/{tomoobjserie.svg → tomoobjseries.svg} +2 -2
  38. orangecontrib/tomwer/widgets/dataportal/PublishProcessedDataOW.py +172 -0
  39. orangecontrib/tomwer/widgets/{icat → dataportal}/__init__.py +2 -2
  40. orangecontrib/tomwer/widgets/debugtools/DatasetGeneratorOW.py +2 -29
  41. orangecontrib/tomwer/widgets/debugtools/ObjectInspectorOW.py +1 -29
  42. orangecontrib/tomwer/widgets/edit/DarkFlatPatchOW.py +48 -73
  43. orangecontrib/tomwer/widgets/edit/ImageKeyEditorOW.py +48 -75
  44. orangecontrib/tomwer/widgets/edit/ImageKeyUpgraderOW.py +5 -30
  45. orangecontrib/tomwer/widgets/edit/NXtomoEditorOW.py +51 -52
  46. orangecontrib/tomwer/widgets/other/PythonScriptOW.py +22 -10
  47. orangecontrib/tomwer/widgets/reconstruction/AxisOW.py +51 -60
  48. orangecontrib/tomwer/widgets/reconstruction/CastNabuVolumeOW.py +22 -68
  49. orangecontrib/tomwer/widgets/reconstruction/DarkRefAndCopyOW.py +3 -30
  50. orangecontrib/tomwer/widgets/reconstruction/NabuHelicalPrepareWeightsDoubleOW.py +21 -19
  51. orangecontrib/tomwer/widgets/reconstruction/NabuOW.py +7 -70
  52. orangecontrib/tomwer/widgets/reconstruction/NabuVolumeOW.py +41 -84
  53. orangecontrib/tomwer/widgets/reconstruction/SAAxisOW.py +15 -40
  54. orangecontrib/tomwer/widgets/reconstruction/SADeltaBetaOW.py +13 -35
  55. orangecontrib/tomwer/widgets/reconstruction/SinoNormOW.py +2 -30
  56. orangecontrib/tomwer/widgets/stitching/ZStitchingConfigOW.py +11 -11
  57. orangecontrib/tomwer/widgets/utils.py +2 -29
  58. orangecontrib/tomwer/widgets/visualization/DataViewerOW.py +1 -27
  59. orangecontrib/tomwer/widgets/visualization/DiffViewerOW.py +1 -27
  60. orangecontrib/tomwer/widgets/visualization/NXtomoMetadataViewerOW.py +1 -1
  61. orangecontrib/tomwer/widgets/visualization/RadioStackOW.py +2 -28
  62. orangecontrib/tomwer/widgets/visualization/SampleMovedOW.py +1 -27
  63. orangecontrib/tomwer/widgets/visualization/SinogramViewerOW.py +1 -27
  64. orangecontrib/tomwer/widgets/visualization/SliceStackOW.py +2 -28
  65. tomwer/__init__.py +3 -28
  66. tomwer/__main__.py +8 -4
  67. tomwer/app/__init__.py +2 -0
  68. tomwer/app/axis.py +8 -10
  69. tomwer/app/canvas.py +23 -29
  70. tomwer/app/canvas_launcher/config.py +14 -102
  71. tomwer/app/canvas_launcher/environ.py +5 -8
  72. tomwer/app/canvas_launcher/mainwindow.py +175 -69
  73. tomwer/app/canvas_launcher/splash.py +1 -3
  74. tomwer/app/canvas_launcher/utils.py +47 -0
  75. tomwer/app/canvas_launcher/widgetsscheme.py +3 -10
  76. tomwer/app/diffframe.py +2 -0
  77. tomwer/app/imagekeyeditor.py +2 -1
  78. tomwer/app/imagekeyupgrader.py +2 -0
  79. tomwer/app/multicor.py +5 -2
  80. tomwer/app/multipag.py +16 -5
  81. tomwer/app/nabuapp.py +2 -1
  82. tomwer/app/nxtomoeditor.py +17 -12
  83. tomwer/app/patchrawdarkflat.py +2 -0
  84. tomwer/app/radiostack.py +3 -2
  85. tomwer/app/reducedarkflat.py +3 -0
  86. tomwer/app/samplemoved.py +2 -0
  87. tomwer/app/scanviewer.py +2 -0
  88. tomwer/app/sinogramviewer.py +2 -0
  89. tomwer/app/slicestack.py +11 -13
  90. tomwer/app/stitching/common.py +431 -0
  91. tomwer/app/stopdatalistener.py +3 -0
  92. tomwer/app/ystitching.py +26 -0
  93. tomwer/app/zstitching.py +8 -363
  94. tomwer/core/__init__.py +2 -28
  95. tomwer/core/cluster/__init__.py +3 -0
  96. tomwer/core/cluster/cluster.py +10 -26
  97. tomwer/core/futureobject.py +17 -43
  98. tomwer/core/log/__init__.py +2 -0
  99. tomwer/core/log/processlog.py +0 -28
  100. tomwer/core/process/cluster/supervisor.py +52 -34
  101. tomwer/core/process/conditions/filters.py +3 -28
  102. tomwer/core/process/control/datalistener/datalistener.py +7 -75
  103. tomwer/core/process/control/datalistener/rpcserver.py +8 -38
  104. tomwer/core/process/control/datawatcher/datawatcher.py +11 -40
  105. tomwer/core/process/control/datawatcher/datawatcherobserver.py +30 -64
  106. tomwer/core/process/control/datawatcher/datawatcherprocess.py +11 -32
  107. tomwer/core/process/control/datawatcher/edfdwprocess.py +2 -27
  108. tomwer/core/process/control/datawatcher/hdf5dwprocess.py +1 -26
  109. tomwer/core/process/control/datawatcher/status.py +1 -26
  110. tomwer/core/process/control/emailnotifier.py +11 -23
  111. tomwer/core/process/control/nxtomoconcatenate.py +20 -18
  112. tomwer/core/process/control/nxtomomill.py +9 -44
  113. tomwer/core/process/control/scanlist.py +0 -27
  114. tomwer/core/process/control/scantransfer.py +15 -13
  115. tomwer/core/process/control/scanvalidator.py +4 -30
  116. tomwer/core/process/control/{test → tests}/test_concatenate_nxtomos.py +5 -5
  117. tomwer/core/process/control/timer.py +1 -27
  118. tomwer/core/process/control/tomoobjseries.py +12 -0
  119. tomwer/core/process/drac/binning.py +37 -0
  120. tomwer/core/process/drac/dracbase.py +170 -0
  121. tomwer/core/process/drac/gallery.py +109 -0
  122. tomwer/core/process/drac/output.py +12 -0
  123. tomwer/core/process/drac/processeddataset.py +147 -0
  124. tomwer/core/process/drac/publish.py +118 -0
  125. tomwer/core/process/drac/rawdataset.py +142 -0
  126. tomwer/core/process/drac/tests/test_gallery.py +71 -0
  127. tomwer/core/process/drac/tests/test_icat_processed_dataset.py +80 -0
  128. tomwer/core/process/drac/tests/test_icat_raw_dataset.py +90 -0
  129. tomwer/core/process/edit/darkflatpatch.py +1 -28
  130. tomwer/core/process/edit/imagekeyeditor.py +4 -32
  131. tomwer/core/process/edit/nxtomoeditor.py +307 -0
  132. tomwer/core/process/edit/tests/test_darkflatpatch.py +243 -0
  133. tomwer/core/process/edit/tests/test_imagekey_editor.py +99 -0
  134. tomwer/core/process/output.py +9 -2
  135. tomwer/core/process/reconstruction/__init__.py +0 -26
  136. tomwer/core/process/reconstruction/axis/anglemode.py +1 -29
  137. tomwer/core/process/reconstruction/axis/axis.py +47 -804
  138. tomwer/core/process/reconstruction/axis/mode.py +89 -25
  139. tomwer/core/process/reconstruction/axis/params.py +131 -283
  140. tomwer/core/process/reconstruction/axis/projectiontype.py +0 -28
  141. tomwer/core/process/reconstruction/axis/side.py +8 -0
  142. tomwer/core/process/reconstruction/darkref/darkrefs.py +14 -39
  143. tomwer/core/process/reconstruction/darkref/darkrefscopy.py +7 -39
  144. tomwer/core/process/reconstruction/darkref/params.py +1 -28
  145. tomwer/core/process/reconstruction/nabu/castvolume.py +19 -34
  146. tomwer/core/process/reconstruction/nabu/nabucommon.py +18 -43
  147. tomwer/core/process/reconstruction/nabu/nabuscores.py +64 -68
  148. tomwer/core/process/reconstruction/nabu/nabuslices.py +63 -105
  149. tomwer/core/process/reconstruction/nabu/nabuvolume.py +44 -70
  150. tomwer/core/process/reconstruction/nabu/plane.py +10 -0
  151. tomwer/core/process/reconstruction/nabu/settings.py +1 -28
  152. tomwer/core/process/reconstruction/nabu/target.py +0 -28
  153. tomwer/core/process/reconstruction/nabu/test/test_castvolume.py +116 -0
  154. tomwer/core/process/reconstruction/nabu/test/test_nabu_utils.py +277 -0
  155. tomwer/core/process/reconstruction/nabu/test/test_nabunormalization.py +199 -0
  156. tomwer/core/process/reconstruction/nabu/utils.py +11 -60
  157. tomwer/core/process/reconstruction/normalization/normalization.py +2 -32
  158. tomwer/core/process/reconstruction/normalization/params.py +3 -35
  159. tomwer/core/process/reconstruction/output.py +14 -19
  160. tomwer/core/process/reconstruction/paramsbase.py +4 -33
  161. tomwer/core/process/reconstruction/saaxis/params.py +5 -33
  162. tomwer/core/process/reconstruction/saaxis/saaxis.py +22 -51
  163. tomwer/core/process/reconstruction/sadeltabeta/params.py +2 -31
  164. tomwer/core/process/reconstruction/sadeltabeta/sadeltabeta.py +18 -46
  165. tomwer/core/process/reconstruction/scores/params.py +9 -39
  166. tomwer/core/process/reconstruction/scores/scores.py +10 -42
  167. tomwer/core/process/reconstruction/tests/__init__.py +0 -0
  168. tomwer/core/process/reconstruction/tests/test_axis.py +46 -0
  169. tomwer/core/process/reconstruction/tests/test_darkref.py +33 -0
  170. tomwer/core/process/reconstruction/{test → tests}/test_saaxis.py +1 -27
  171. tomwer/core/process/reconstruction/tests/test_sadeltabeta.py +48 -0
  172. tomwer/core/process/reconstruction/{test → tests}/test_utils.py +4 -4
  173. tomwer/core/process/reconstruction/utils/cor.py +8 -4
  174. tomwer/core/process/script/python.py +1 -27
  175. tomwer/core/process/script/tests/test_script.py +41 -0
  176. tomwer/core/process/stitching/metadataholder.py +5 -4
  177. tomwer/core/process/stitching/nabustitcher.py +35 -5
  178. tomwer/core/process/stitching/tests/test_metadataholder.py +17 -0
  179. tomwer/core/process/task.py +20 -63
  180. tomwer/core/process/tests/__init__.py +0 -0
  181. tomwer/core/process/{test → tests}/test_conditions.py +1 -28
  182. tomwer/core/process/{test → tests}/test_dark_and_flat.py +1 -27
  183. tomwer/core/process/{test → tests}/test_data_listener.py +1 -27
  184. tomwer/core/process/{test → tests}/test_data_transfer.py +2 -28
  185. tomwer/core/process/{test → tests}/test_data_watcher.py +1 -27
  186. tomwer/core/process/{test → tests}/test_nabu.py +2 -33
  187. tomwer/core/process/{test → tests}/test_normalization.py +1 -26
  188. tomwer/core/process/{test → tests}/test_timer.py +1 -27
  189. tomwer/core/process/utils.py +2 -31
  190. tomwer/core/process/visualization/dataviewer.py +1 -26
  191. tomwer/core/process/visualization/diffviewer.py +1 -26
  192. tomwer/core/process/visualization/imagestackviewer.py +0 -26
  193. tomwer/core/process/visualization/radiostack.py +0 -26
  194. tomwer/core/process/visualization/samplemoved.py +0 -28
  195. tomwer/core/process/visualization/sinogramviewer.py +0 -27
  196. tomwer/core/process/visualization/slicestack.py +0 -28
  197. tomwer/core/process/visualization/tests/test_data_viewer.py +12 -0
  198. tomwer/core/process/visualization/tests/test_diff_viewer.py +12 -0
  199. tomwer/core/process/visualization/tests/test_image_stack_viewer.py +14 -0
  200. tomwer/core/process/visualization/tests/test_radio_stack.py +12 -0
  201. tomwer/core/process/visualization/tests/test_sample_moved.py +14 -0
  202. tomwer/core/process/visualization/tests/test_sinogram_viewer.py +13 -0
  203. tomwer/core/process/visualization/tests/test_slice_stack.py +13 -0
  204. tomwer/core/process/visualization/tests/test_volume_viewer.py +12 -0
  205. tomwer/core/process/visualization/volumeviewer.py +0 -29
  206. tomwer/core/scan/__init__.py +3 -27
  207. tomwer/core/scan/blissscan.py +5 -34
  208. tomwer/core/scan/edfscan.py +19 -53
  209. tomwer/core/scan/hdf5scan.py +2 -2
  210. tomwer/core/scan/nxtomoscan.py +48 -54
  211. tomwer/core/scan/scanbase.py +107 -203
  212. tomwer/core/scan/scanfactory.py +11 -41
  213. tomwer/core/scan/tests/__init__.py +0 -0
  214. tomwer/core/scan/tests/test_edf.py +25 -0
  215. tomwer/core/scan/tests/test_future_scan.py +35 -0
  216. tomwer/core/scan/tests/test_nxtomoscan.py +143 -0
  217. tomwer/core/scan/tests/test_process_registration.py +64 -0
  218. tomwer/core/settings.py +18 -40
  219. tomwer/core/tests/__init__.py +0 -0
  220. tomwer/core/tests/test_scanutils.py +26 -0
  221. tomwer/core/{test → tests}/test_utils.py +1 -28
  222. tomwer/core/tomwer_object.py +4 -0
  223. tomwer/core/utils/__init__.py +2 -0
  224. tomwer/core/utils/char.py +0 -28
  225. tomwer/core/utils/deprecation.py +12 -38
  226. tomwer/core/utils/dictutils.py +1 -3
  227. tomwer/core/utils/ftseriesutils.py +1 -27
  228. tomwer/core/utils/gpu.py +0 -28
  229. tomwer/core/utils/image.py +8 -39
  230. tomwer/core/utils/locker.py +1 -28
  231. tomwer/core/utils/logconfig.py +0 -27
  232. tomwer/core/utils/normalization.py +4 -31
  233. tomwer/core/utils/nxtomoutils.py +8 -38
  234. tomwer/core/utils/resource.py +0 -26
  235. tomwer/core/utils/scanutils.py +23 -52
  236. tomwer/core/utils/slurm.py +7 -30
  237. tomwer/core/utils/spec.py +6 -6
  238. tomwer/core/utils/tests/__init__.py +0 -0
  239. tomwer/core/utils/tests/test_image.py +30 -0
  240. tomwer/core/utils/tests/test_nxtomo.py +38 -0
  241. tomwer/core/utils/tests/test_scan_utils.py +46 -0
  242. tomwer/core/utils/tests/test_time.py +6 -0
  243. tomwer/core/utils/threads.py +0 -26
  244. tomwer/core/utils/time.py +0 -27
  245. tomwer/core/volume/__init__.py +4 -0
  246. tomwer/core/volume/edfvolume.py +1 -28
  247. tomwer/core/volume/hdf5volume.py +1 -28
  248. tomwer/core/volume/jp2kvolume.py +1 -27
  249. tomwer/core/volume/rawvolume.py +1 -28
  250. tomwer/core/volume/tests/test_volumes.py +21 -0
  251. tomwer/core/volume/tiffvolume.py +1 -28
  252. tomwer/core/volume/volumebase.py +5 -0
  253. tomwer/core/volume/volumefactory.py +7 -33
  254. tomwer/gui/__init__.py +0 -28
  255. tomwer/gui/cluster/__init__.py +2 -0
  256. tomwer/gui/cluster/slurm.py +297 -95
  257. tomwer/gui/cluster/supervisor.py +1 -27
  258. tomwer/gui/cluster/tests/__init__.py +0 -0
  259. tomwer/gui/cluster/{test → tests}/test_cluster.py +21 -26
  260. tomwer/gui/cluster/{test → tests}/test_supervisor.py +1 -27
  261. tomwer/gui/conditions/__init__.py +2 -0
  262. tomwer/gui/conditions/filter.py +1 -26
  263. tomwer/gui/configuration/__init__.py +2 -0
  264. tomwer/gui/control/__init__.py +2 -0
  265. tomwer/gui/control/actions.py +2 -28
  266. tomwer/gui/control/datadiscovery.py +4 -3
  267. tomwer/gui/control/datalist.py +64 -69
  268. tomwer/gui/control/datalistener.py +1 -39
  269. tomwer/gui/control/datareacheractions.py +1 -28
  270. tomwer/gui/control/datatransfert.py +2 -29
  271. tomwer/gui/control/datavalidator.py +3 -37
  272. tomwer/gui/control/datawatcher/__init__.py +0 -28
  273. tomwer/gui/control/datawatcher/configuration.py +1 -28
  274. tomwer/gui/control/datawatcher/datawatcher.py +3 -32
  275. tomwer/gui/control/datawatcher/datawatcherobserver.py +2 -28
  276. tomwer/gui/control/history.py +5 -35
  277. tomwer/gui/control/nxtomomill.py +3 -30
  278. tomwer/gui/control/observations.py +61 -55
  279. tomwer/gui/control/reducedarkflatselector.py +24 -20
  280. tomwer/gui/control/scanselectorwidget.py +2 -28
  281. tomwer/gui/control/selectorwidgetbase.py +17 -17
  282. tomwer/gui/control/series/__init__.py +0 -0
  283. tomwer/gui/control/{serie/seriecreator.py → series/seriescreator.py} +214 -235
  284. tomwer/gui/control/series/serieswaiter.py +0 -0
  285. tomwer/gui/control/series/test/test_creator.py +424 -0
  286. tomwer/gui/control/series/test/test_nxtomo_concatenate.py +21 -0
  287. tomwer/gui/control/singletomoobj.py +1 -1
  288. tomwer/gui/control/tests/__init__.py +0 -0
  289. tomwer/gui/control/tests/test_datalist.py +47 -0
  290. tomwer/gui/control/{test → tests}/test_datalistener.py +1 -28
  291. tomwer/gui/control/tests/test_datavalidator.py +27 -0
  292. tomwer/gui/control/{test → tests}/test_inputwidget.py +1 -27
  293. tomwer/gui/control/tests/test_process_manager.py +38 -0
  294. tomwer/gui/control/tests/test_scan_observations.py +23 -0
  295. tomwer/gui/control/tests/test_scanselector.py +42 -0
  296. tomwer/gui/control/{test → tests}/test_scanvalidator.py +1 -27
  297. tomwer/gui/control/{test → tests}/test_volume_dialog.py +2 -30
  298. tomwer/gui/control/{test → tests}/test_volumeselector.py +1 -27
  299. tomwer/gui/control/volumeselectorwidget.py +2 -30
  300. tomwer/gui/dataportal/__init__.py +2 -0
  301. tomwer/gui/{icat → dataportal}/createscreenshots.py +3 -2
  302. tomwer/gui/dataportal/gallery.py +133 -0
  303. tomwer/gui/dataportal/outputformat.py +0 -0
  304. tomwer/gui/dataportal/publish.py +96 -0
  305. tomwer/gui/dataportal/tests/test_create_screenshots_gui.py +23 -0
  306. tomwer/gui/dataportal/tests/test_gallery_gui.py +21 -0
  307. tomwer/gui/debugtools/__init__.py +2 -0
  308. tomwer/gui/debugtools/datasetgenerator.py +1 -30
  309. tomwer/gui/debugtools/objectinspector.py +1 -29
  310. tomwer/gui/dialog/QDataDialog.py +89 -0
  311. tomwer/gui/{qfolderdialog.py → dialog/QVolumeDialog.py} +8 -107
  312. tomwer/gui/dialog/__init__.py +1 -0
  313. tomwer/gui/edit/__init__.py +2 -0
  314. tomwer/gui/edit/dkrfpatch.py +52 -87
  315. tomwer/gui/edit/imagekeyeditor.py +18 -54
  316. tomwer/gui/edit/nxtomoeditor.py +113 -300
  317. tomwer/gui/edit/nxtomowarmer.py +3 -2
  318. tomwer/gui/edit/tests/__init__.py +0 -0
  319. tomwer/gui/edit/{test → tests}/test_dkrf_patch.py +3 -29
  320. tomwer/gui/edit/{test → tests}/test_image_key_editor.py +1 -27
  321. tomwer/gui/edit/{test → tests}/test_nx_editor.py +45 -23
  322. tomwer/gui/fonts.py +5 -0
  323. tomwer/gui/icons.py +28 -66
  324. tomwer/gui/illustrations.py +4 -34
  325. tomwer/gui/imagefromfile.py +5 -30
  326. tomwer/gui/metadataloader.py +36 -0
  327. tomwer/gui/qconfigfile.py +3 -0
  328. tomwer/gui/qlefilesystem.py +3 -0
  329. tomwer/gui/reconstruction/__init__.py +2 -0
  330. tomwer/gui/reconstruction/axis/AxisMainWindow.py +275 -0
  331. tomwer/gui/reconstruction/axis/AxisOptionsWidget.py +313 -0
  332. tomwer/gui/reconstruction/axis/AxisSettingsWidget.py +797 -0
  333. tomwer/gui/reconstruction/axis/AxisWidget.py +534 -0
  334. tomwer/gui/reconstruction/axis/CalculationWidget.py +218 -0
  335. tomwer/gui/reconstruction/axis/CompareImages.py +11 -44
  336. tomwer/gui/reconstruction/axis/ControlWidget.py +285 -0
  337. tomwer/gui/reconstruction/axis/EstimatedCORWidget.py +394 -0
  338. tomwer/gui/reconstruction/axis/EstimatedCorComboBox.py +118 -0
  339. tomwer/gui/reconstruction/axis/InputWidget.py +347 -0
  340. tomwer/gui/reconstruction/axis/ManualFramesSelection.py +168 -0
  341. tomwer/gui/reconstruction/axis/__init__.py +2 -2
  342. tomwer/gui/reconstruction/darkref/__init__.py +0 -27
  343. tomwer/gui/reconstruction/darkref/darkrefcopywidget.py +5 -34
  344. tomwer/gui/reconstruction/darkref/darkrefwidget.py +1 -27
  345. tomwer/gui/reconstruction/nabu/castvolume.py +40 -59
  346. tomwer/gui/reconstruction/nabu/check.py +7 -33
  347. tomwer/gui/reconstruction/nabu/nabuconfig/base.py +7 -34
  348. tomwer/gui/reconstruction/nabu/nabuconfig/ctf.py +6 -5
  349. tomwer/gui/reconstruction/nabu/nabuconfig/nabuconfig.py +10 -69
  350. tomwer/gui/reconstruction/nabu/nabuconfig/output.py +3 -47
  351. tomwer/gui/reconstruction/nabu/nabuconfig/phase.py +54 -36
  352. tomwer/gui/reconstruction/nabu/nabuconfig/preprocessing.py +103 -54
  353. tomwer/gui/reconstruction/nabu/nabuconfig/reconstruction.py +116 -65
  354. tomwer/gui/reconstruction/nabu/nabuflow.py +31 -61
  355. tomwer/gui/reconstruction/nabu/platform.py +94 -0
  356. tomwer/gui/reconstruction/nabu/slices.py +81 -45
  357. tomwer/gui/reconstruction/nabu/slurm.py +1 -27
  358. tomwer/gui/reconstruction/nabu/test/test_cast_volume.py +82 -0
  359. tomwer/gui/reconstruction/nabu/test/test_check.py +66 -0
  360. tomwer/gui/reconstruction/nabu/test/test_ctf.py +46 -0
  361. tomwer/gui/reconstruction/nabu/test/test_helical.py +21 -0
  362. tomwer/gui/reconstruction/nabu/test/test_nabu_preprocessing.py +81 -0
  363. tomwer/gui/reconstruction/nabu/volume.py +62 -90
  364. tomwer/gui/reconstruction/normalization/intensity.py +5 -32
  365. tomwer/gui/reconstruction/normalization/test/test_intensity.py +89 -0
  366. tomwer/gui/reconstruction/saaxis/corrangeselector.py +32 -56
  367. tomwer/gui/reconstruction/saaxis/dimensionwidget.py +56 -96
  368. tomwer/gui/reconstruction/saaxis/saaxis.py +17 -38
  369. tomwer/gui/reconstruction/saaxis/sliceselector.py +8 -39
  370. tomwer/gui/reconstruction/sadeltabeta/saadeltabeta.py +19 -37
  371. tomwer/gui/reconstruction/scores/control.py +2 -30
  372. tomwer/gui/reconstruction/scores/scoreplot.py +23 -49
  373. tomwer/gui/reconstruction/tests/__init__.py +0 -0
  374. tomwer/gui/reconstruction/{test → tests}/test_axis.py +23 -49
  375. tomwer/gui/reconstruction/{test → tests}/test_nabu.py +16 -31
  376. tomwer/gui/reconstruction/{test → tests}/test_saaxis.py +10 -37
  377. tomwer/gui/reconstruction/{test → tests}/test_sadeltabeta.py +1 -26
  378. tomwer/gui/samplemoved/__init__.py +2 -30
  379. tomwer/gui/samplemoved/selectiontable.py +3 -33
  380. tomwer/gui/settings.py +7 -0
  381. tomwer/gui/stackplot.py +33 -661
  382. tomwer/gui/stacks.py +261 -135
  383. tomwer/gui/stitching/SingleAxisStitchingWidget.py +326 -0
  384. tomwer/gui/stitching/StitchingOptionsWidget.py +438 -0
  385. tomwer/gui/stitching/StitchingWindow.py +586 -0
  386. tomwer/gui/stitching/__init__.py +2 -0
  387. tomwer/gui/stitching/alignment.py +90 -0
  388. tomwer/gui/stitching/axisorderedlist.py +44 -34
  389. tomwer/gui/stitching/config/axisparams.py +25 -11
  390. tomwer/gui/stitching/config/output.py +6 -5
  391. tomwer/gui/stitching/config/positionoveraxis.py +313 -51
  392. tomwer/gui/stitching/config/stitchingstrategies.py +22 -16
  393. tomwer/gui/stitching/config/tests/test_axisparams.py +25 -0
  394. tomwer/gui/stitching/config/tomoobjdetails.py +3 -5
  395. tomwer/gui/stitching/normalization.py +1 -0
  396. tomwer/gui/stitching/preview.py +59 -0
  397. tomwer/gui/stitching/singleaxis.py +57 -0
  398. tomwer/gui/stitching/stitchandbackground.py +3 -2
  399. tomwer/gui/stitching/stitching_preview.py +44 -36
  400. tomwer/gui/stitching/stitching_raw.py +5 -3
  401. tomwer/gui/stitching/tests/test_ZStitchingWindow.py +88 -0
  402. tomwer/gui/stitching/tests/test_axis_ordered_list.py +21 -0
  403. tomwer/gui/stitching/tests/test_normalization.py +27 -0
  404. tomwer/gui/stitching/tests/test_preview.py +68 -0
  405. tomwer/gui/stitching/tests/test_stitching_raw.py +110 -0
  406. tomwer/gui/stitching/tests/utils.py +92 -0
  407. tomwer/gui/stitching/utils.py +14 -0
  408. tomwer/gui/stitching/z_stitching/fineestimation.py +5 -33
  409. tomwer/gui/stitching/z_stitching/tests/test_fine_estimation.py +35 -0
  410. tomwer/gui/stitching/z_stitching/tests/test_raw_estimation.py +215 -0
  411. tomwer/gui/stitching/z_stitching/tests/test_stitching_window.py +51 -0
  412. tomwer/gui/tests/__init__.py +0 -0
  413. tomwer/gui/tests/test_axis_gui.py +43 -0
  414. tomwer/gui/{test → tests}/test_qfolder_dialog.py +1 -1
  415. tomwer/gui/utils/RangeWidget.py +44 -0
  416. tomwer/gui/utils/buttons.py +4 -3
  417. tomwer/gui/utils/completer.py +2 -33
  418. tomwer/gui/utils/flow.py +11 -40
  419. tomwer/gui/utils/gpu.py +60 -0
  420. tomwer/gui/utils/illustrations.py +1 -26
  421. tomwer/gui/utils/inputwidget.py +35 -73
  422. tomwer/gui/utils/lineselector/lineselector.py +9 -46
  423. tomwer/gui/utils/loadingmode.py +81 -0
  424. tomwer/gui/utils/qt_utils.py +9 -0
  425. tomwer/gui/utils/sandboxes.py +1 -26
  426. tomwer/gui/utils/scandescription.py +2 -31
  427. tomwer/gui/utils/scrollarea.py +6 -55
  428. tomwer/gui/utils/slider.py +4 -28
  429. tomwer/gui/utils/splashscreen.py +0 -28
  430. tomwer/gui/utils/step.py +14 -13
  431. tomwer/gui/utils/tests/test_completer.py +41 -0
  432. tomwer/gui/utils/tests/test_line_selector.py +21 -0
  433. tomwer/gui/utils/tests/test_splashscreen.py +8 -0
  434. tomwer/gui/utils/tests/test_vignettes.py +68 -0
  435. tomwer/gui/utils/unitsystem.py +15 -69
  436. tomwer/gui/utils/utils.py +4 -5
  437. tomwer/gui/utils/vignettes.py +10 -41
  438. tomwer/gui/utils/waiterthread.py +0 -26
  439. tomwer/gui/visualization/__init__.py +2 -0
  440. tomwer/gui/visualization/dataviewer.py +68 -421
  441. tomwer/gui/visualization/diffviewer/diffviewer.py +2 -30
  442. tomwer/gui/visualization/diffviewer/shiftwidget.py +4 -29
  443. tomwer/gui/visualization/fullscreenplot.py +5 -5
  444. tomwer/gui/visualization/imagestack.py +403 -0
  445. tomwer/gui/visualization/nxtomometadata.py +0 -4
  446. tomwer/gui/visualization/reconstructionparameters.py +14 -32
  447. tomwer/gui/visualization/scanoverview.py +33 -66
  448. tomwer/gui/visualization/sinogramviewer.py +2 -28
  449. tomwer/gui/visualization/test/__init__.py +0 -28
  450. tomwer/gui/visualization/test/test_dataviewer.py +1 -28
  451. tomwer/gui/visualization/test/test_diffviewer.py +1 -28
  452. tomwer/gui/visualization/test/test_nx_tomo_metadata_viewer.py +0 -5
  453. tomwer/gui/visualization/test/test_reconstruction_parameters.py +1 -27
  454. tomwer/gui/visualization/test/test_sinogramviewer.py +1 -28
  455. tomwer/gui/visualization/test/test_stacks.py +184 -115
  456. tomwer/gui/visualization/test/test_volumeviewer.py +3 -2
  457. tomwer/gui/visualization/tomoobjoverview.py +2 -2
  458. tomwer/gui/visualization/volumeoverview.py +3 -2
  459. tomwer/gui/visualization/volumeviewer.py +47 -43
  460. tomwer/io/__init__.py +2 -0
  461. tomwer/io/utils/h5pyutils.py +1 -27
  462. tomwer/io/utils/test/test_raw_and_processed_data.py +10 -0
  463. tomwer/io/utils/test/test_utils.py +67 -0
  464. tomwer/io/utils/utils.py +2 -31
  465. tomwer/resources/__init__.py +13 -33
  466. tomwer/resources/gui/icons/edit_downstream.svg +114 -0
  467. tomwer/resources/gui/icons/edit_upstream.svg +112 -0
  468. tomwer/resources/gui/icons/free_edition.svg +23 -0
  469. tomwer/resources/gui/icons/icat_gallery_opts.png +0 -0
  470. tomwer/resources/gui/icons/icat_gallery_opts.svg +80 -0
  471. tomwer/resources/gui/icons/search.png +0 -0
  472. tomwer/resources/gui/icons/search.svg +23 -0
  473. tomwer/resources/gui/icons/warning.png +0 -0
  474. tomwer/synctools/__init__.py +2 -0
  475. tomwer/synctools/axis.py +1 -27
  476. tomwer/synctools/darkref.py +1 -26
  477. tomwer/synctools/datalistener.py +1 -27
  478. tomwer/synctools/datatransfert.py +2 -27
  479. tomwer/synctools/imageloaderthread.py +1 -28
  480. tomwer/synctools/rsyncmanager.py +1 -25
  481. tomwer/synctools/saaxis.py +1 -26
  482. tomwer/synctools/sadeltabeta.py +1 -26
  483. tomwer/synctools/stacks/control/datalistener.py +1 -26
  484. tomwer/synctools/stacks/processingstack.py +4 -33
  485. tomwer/synctools/stacks/reconstruction/axis.py +6 -53
  486. tomwer/synctools/stacks/reconstruction/castvolume.py +12 -43
  487. tomwer/synctools/stacks/reconstruction/dkrefcopy.py +4 -27
  488. tomwer/synctools/stacks/reconstruction/nabu.py +3 -28
  489. tomwer/synctools/stacks/reconstruction/normalization.py +2 -27
  490. tomwer/synctools/stacks/reconstruction/saaxis.py +2 -27
  491. tomwer/synctools/stacks/reconstruction/sadeltabeta.py +2 -27
  492. tomwer/synctools/tests/__init__.py +0 -0
  493. tomwer/synctools/{test → tests}/test_darkRefs.py +16 -40
  494. tomwer/synctools/{test → tests}/test_foldertransfer.py +2 -33
  495. tomwer/synctools/utils/scanstages.py +2 -31
  496. tomwer/tests/__init__.py +1 -0
  497. tomwer/tests/app/test_stitching.py +95 -0
  498. tomwer/tests/datasets.py +1 -5
  499. tomwer/tests/orangecontrib/tomwer/widgets/cluster/tests/test_future_supervisorow.py +48 -0
  500. tomwer/tests/orangecontrib/tomwer/widgets/cluster/tests/test_slurm_clusterow.py +40 -0
  501. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_advancement.py +8 -0
  502. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_data_validator.py +55 -0
  503. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_datadiscovery.py +129 -0
  504. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_datalistener.py +111 -0
  505. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_dataselector.py +69 -0
  506. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_datawatcher.py +411 -0
  507. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_emailow.py +29 -0
  508. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_notifier.py +24 -0
  509. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_nxtomo_concatenate_ow.py +64 -0
  510. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_nxtomomill.py +133 -0
  511. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_reduce_dark_flat_selector.py +40 -0
  512. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_singletomoobj.py +40 -0
  513. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_timerow.py +25 -0
  514. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_tomoobj_series.py +96 -0
  515. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_volume_selector.py +69 -0
  516. orangecontrib/tomwer/widgets/edit/test/test_image_key_editor.py → tomwer/tests/orangecontrib/tomwer/widgets/debugtools/tests/test_dataset_generator.py +17 -16
  517. tomwer/tests/orangecontrib/tomwer/widgets/debugtools/tests/test_object_inspector.py +36 -0
  518. {orangecontrib/tomwer/widgets/edit/test → tomwer/tests/orangecontrib/tomwer/widgets/edit/tests}/test_dark_flat_patch.py +1 -27
  519. tomwer/tests/orangecontrib/tomwer/widgets/edit/tests/test_image_key_editor.py +30 -0
  520. tomwer/tests/orangecontrib/tomwer/widgets/edit/tests/test_nxtomo_editor.py +138 -0
  521. tomwer/tests/orangecontrib/tomwer/widgets/other/tests/test_pythonscript.py +31 -0
  522. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_axis.py +199 -0
  523. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_cast_volumeow.py +58 -0
  524. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_dark_refs_widget.py +136 -0
  525. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_delta_beta_selector.py +15 -0
  526. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_i_norm.py +200 -0
  527. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_nabu_helical_prepare_weights_double.py +20 -0
  528. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_nabu_volume.py +74 -0
  529. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_nabu_widget.py +107 -0
  530. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_sa_delta_beta.py +194 -0
  531. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_saaxis.py +194 -0
  532. tomwer/tests/orangecontrib/tomwer/widgets/stitching/tests/test_zstitching.py +313 -0
  533. tomwer/tests/orangecontrib/tomwer/widgets/tests/test_conditions.py +85 -0
  534. tomwer/tests/orangecontrib/tomwer/widgets/tests/test_darkref.py +225 -0
  535. tomwer/tests/orangecontrib/tomwer/widgets/tests/test_foldertransfert.py +105 -0
  536. tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_dataviewerow.py +57 -0
  537. tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_diffviewerow.py +39 -0
  538. tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_nxtomo_metadata_viewer.py +29 -0
  539. tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_radio_stackow.py +31 -0
  540. tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_sample_movedow.py +46 -0
  541. tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_sinogram_viewerow.py +31 -0
  542. tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_slice_stackow.py +31 -0
  543. tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_volume_viewerow.py +32 -0
  544. tomwer/tests/test_ewoks/test_conversion.py +104 -0
  545. tomwer/tests/test_ewoks/test_single_node_execution.py +87 -0
  546. tomwer/tests/test_ewoks/test_workflows.py +138 -0
  547. tomwer/utils.py +11 -39
  548. tomwer/version.py +2 -2
  549. {tomwer-1.3.26.dist-info → tomwer-1.4.0.dist-info}/LICENSE +3 -3
  550. tomwer-1.4.0.dist-info/METADATA +337 -0
  551. tomwer-1.4.0.dist-info/RECORD +912 -0
  552. {tomwer-1.3.26.dist-info → tomwer-1.4.0.dist-info}/WHEEL +1 -1
  553. {tomwer-1.3.26.dist-info → tomwer-1.4.0.dist-info}/entry_points.txt +1 -0
  554. orangecontrib/tomwer/widgets/control/DataListOW.py +0 -129
  555. orangecontrib/tomwer/widgets/control/TomoObjSerieOW.py +0 -86
  556. orangecontrib/tomwer/widgets/control/VolumeSymLinkOW.py +0 -182
  557. orangecontrib/tomwer/widgets/edit/test/test_nxtomo_editor.py +0 -141
  558. orangecontrib/tomwer/widgets/icat/PublishProcessedDataOW.py +0 -115
  559. orangecontrib/tomwer/widgets/icat/RawDataScreenshotCreatorOW.py +0 -98
  560. orangecontrib/tomwer/widgets/icat/SaveToGalleryAndPublishOW.py +0 -129
  561. orangecontrib/tomwer/widgets/icat/icons/add_gallery.png +0 -0
  562. orangecontrib/tomwer/widgets/icat/icons/add_gallery.svg +0 -82
  563. orangecontrib/tomwer/widgets/icat/icons/raw_screenshots.png +0 -0
  564. orangecontrib/tomwer/widgets/icat/icons/raw_screenshots.svg +0 -143
  565. orangecontrib/tomwer/widgets/visualization/LivesliceOW.py +0 -87
  566. orangecontrib/tomwer/widgets/visualization/icons/liveslice.png +0 -0
  567. orangecontrib/tomwer/widgets/visualization/icons/liveslice.svg +0 -110
  568. tomwer/core/log/logger.py +0 -130
  569. tomwer/core/process/control/test/test_volume_link.py +0 -74
  570. tomwer/core/process/control/tomoobjserie.py +0 -12
  571. tomwer/core/process/control/volumesymlink.py +0 -200
  572. tomwer/core/process/icat/createscreenshots.py +0 -100
  573. tomwer/core/process/icat/gallery.py +0 -377
  574. tomwer/core/process/icat/icatbase.py +0 -36
  575. tomwer/core/process/icat/publish.py +0 -228
  576. tomwer/core/process/icat/screenshots.py +0 -27
  577. tomwer/core/process/reconstruction/test/test_darkref.py +0 -60
  578. tomwer/core/process/reconstruction/test/test_sadeltabeta.py +0 -74
  579. tomwer/core/process/test/test_axis.py +0 -309
  580. tomwer/core/process/visualization/liveslice.py +0 -6
  581. tomwer/core/progress.py +0 -100
  582. tomwer/core/scan/test/test_edf.py +0 -53
  583. tomwer/core/scan/test/test_future_scan.py +0 -61
  584. tomwer/core/scan/test/test_h5.py +0 -96
  585. tomwer/core/scan/test/test_process_registration.py +0 -109
  586. tomwer/core/test/test_scanutils.py +0 -53
  587. tomwer/gui/control/emailnotifier.py +0 -174
  588. tomwer/gui/control/serie/seriewaiter.py +0 -28
  589. tomwer/gui/control/test/__init__.py +0 -28
  590. tomwer/gui/control/test/test_datalist.py +0 -96
  591. tomwer/gui/control/test/test_datavalidator.py +0 -54
  592. tomwer/gui/control/test/test_email.py +0 -35
  593. tomwer/gui/control/test/test_process_manager.py +0 -65
  594. tomwer/gui/control/test/test_scanselector.py +0 -67
  595. tomwer/gui/edit/test/__init__.py +0 -28
  596. tomwer/gui/icat/gallery.py +0 -214
  597. tomwer/gui/icat/publish.py +0 -187
  598. tomwer/gui/reconstruction/axis/axis.py +0 -733
  599. tomwer/gui/reconstruction/axis/radioaxis.py +0 -2467
  600. tomwer/gui/stitching/stitching.py +0 -1392
  601. tomwer/gui/test/__init__.py +0 -28
  602. tomwer/gui/test/test_axis_gui.py +0 -34
  603. tomwer/synctools/stacks/edit/darkflatpatch.py +0 -169
  604. tomwer/synctools/stacks/edit/imagekeyeditor.py +0 -135
  605. tomwer/third_part/WaitingOverlay.py +0 -110
  606. tomwer-1.3.26-py3.11-nspkg.pth +0 -1
  607. tomwer-1.3.26.dist-info/METADATA +0 -292
  608. tomwer-1.3.26.dist-info/RECORD +0 -785
  609. tomwer-1.3.26.dist-info/namespace_packages.txt +0 -1
  610. /orangecontrib/tomwer/{widgets/edit/test → tests}/__init__.py +0 -0
  611. {tomwer/core/process/control/test → orangecontrib/tomwer/tutorials/id16b}/__init__.py +0 -0
  612. {tomwer/core/process/icat → orangecontrib/tomwer/widgets/cluster/tests}/__init__.py +0 -0
  613. /orangecontrib/tomwer/widgets/control/icons/{tomoobjserie.png → tomoobjseries.png} +0 -0
  614. {tomwer/core/process/reconstruction/test → orangecontrib/tomwer/widgets/control/tests}/__init__.py +0 -0
  615. /orangecontrib/tomwer/widgets/{icat → dataportal}/icons/publish_processed_data.png +0 -0
  616. /orangecontrib/tomwer/widgets/{icat → dataportal}/icons/publish_processed_data.svg +0 -0
  617. {tomwer/core/process/test → orangecontrib/tomwer/widgets/debugtools/tests}/__init__.py +0 -0
  618. {tomwer/core/scan/test → orangecontrib/tomwer/widgets/edit/tests}/__init__.py +0 -0
  619. {tomwer/core/test → orangecontrib/tomwer/widgets/other/tests}/__init__.py +0 -0
  620. {tomwer/gui/cluster/test → orangecontrib/tomwer/widgets/reconstruction/tests}/__init__.py +0 -0
  621. {tomwer/gui/control/serie → orangecontrib/tomwer/widgets/stitching/tests}/__init__.py +0 -0
  622. {tomwer/gui/icat → orangecontrib/tomwer/widgets/tests}/__init__.py +0 -0
  623. {tomwer/gui/reconstruction/test → orangecontrib/tomwer/widgets/visualization/tests}/__init__.py +0 -0
  624. /tomwer/{synctools/stacks/edit → app/stitching}/__init__.py +0 -0
  625. /tomwer/{synctools/test → core/process/control/tests}/__init__.py +0 -0
  626. /tomwer/core/process/control/{test → tests}/test_email.py +0 -0
  627. /tomwer/core/process/control/{test → tests}/test_h52nx_process.py +0 -0
  628. /tomwer/{third_part → core/process/drac}/__init__.py +0 -0
  629. /tomwer/core/process/reconstruction/{test → tests}/test_axis_params.py +0 -0
  630. /tomwer/core/process/reconstruction/{test → tests}/test_darkref_copy.py +0 -0
  631. /tomwer/core/process/reconstruction/{test → tests}/test_paramsbase.py +0 -0
  632. /tomwer/core/scan/{test → tests}/test_scan.py +0 -0
  633. /tomwer/gui/control/{serie → series}/nxtomoconcatenate.py +0 -0
  634. /tomwer/gui/control/{test → tests}/test_datadiscovery.py +0 -0
  635. /tomwer/gui/control/{test → tests}/test_reducedarkflat_selector.py +0 -0
  636. /tomwer/gui/control/{test → tests}/test_single_tomo_obj.py +0 -0
  637. {orangecontrib/tomwer/widgets/edit/test → tomwer/tests/orangecontrib/tomwer/widgets/edit/tests}/test_image_key_upgrader.py +0 -0
  638. {tomwer-1.3.26.dist-info → tomwer-1.4.0.dist-info}/top_level.txt +0 -0
@@ -1,3 +1,5 @@
1
+ from __future__ import annotations
2
+
1
3
  try:
2
4
  from nabu.pipeline.fullfield.reconstruction import ( # noqa F401
3
5
  FullFieldReconstructor,
@@ -19,8 +21,9 @@ import os
19
21
  import sys
20
22
  from copy import deepcopy
21
23
  import subprocess
22
- from typing import Iterable, Optional, Union
24
+ from typing import Iterable
23
25
  import numpy
26
+ from tqdm import tqdm
24
27
 
25
28
  from nabu.pipeline.fullfield.nabu_config import (
26
29
  nabu_config as nabu_fullfield_default_config,
@@ -39,8 +42,11 @@ from tomwer.core.process.reconstruction.nabu.utils import (
39
42
  slice_index_to_int,
40
43
  get_nabu_multicor_file_prefix,
41
44
  )
45
+ from tomwer.core.process.reconstruction.utils.cor import (
46
+ relative_pos_to_absolute,
47
+ absolute_pos_to_relative,
48
+ )
42
49
  from tomwer.core.process.reconstruction.nabu.target import Target
43
- from tomwer.core.progress import Progress
44
50
  from tomwer.core.scan.scanbase import TomwerScanBase
45
51
  from tomwer.core.utils.slurm import get_slurm_script_name, is_slurm_available
46
52
  from tomwer.utils import docstring
@@ -56,30 +62,29 @@ _logger = logging.getLogger(__name__)
56
62
 
57
63
  def run_nabu_one_slice_several_config(
58
64
  scan: TomwerScanBase,
59
- nabu_configs: Union[list, tuple],
60
- cluster_config: Optional[dict],
65
+ nabu_configs: list | tuple,
66
+ cluster_config: dict | None,
61
67
  dry_run: bool,
62
- slice_index: Union[int, str],
68
+ slice_index: int | str,
63
69
  file_format: str,
64
70
  axis: NabuPlane,
65
- advancement: Optional[Progress] = None,
66
- process_id: Optional[int] = None,
67
- instanciate_classes_only: bool = False,
71
+ advancement: tqdm | None = None,
72
+ process_id: int | None = None,
73
+ instantiate_classes_only: bool = False,
68
74
  output_file_prefix_pattern=None,
69
75
  ) -> tuple:
70
76
  """
71
77
  Run several reconstruction of a specific slice.
72
78
 
73
79
  :param scan: dataset
74
- :param Iterable nabu_configs: set of nabu configurations to be run
75
- :param bool dry_run:
76
- :param int slice_index: slice index to reconstruct or "middle"
77
- :param Progress advancement: optional class to display advancement
78
- :param Optional[int] process_id: id of the process requesting this computation
79
- :param Optional[dict] cluster_config: cluster configuration if
80
+ :param nabu_configs: set of nabu configurations to be run
81
+ :param dry_run:
82
+ :param slice_index: slice index to reconstruct or "middle"
83
+ :param advancement: optional class to display advancement
84
+ :param process_id: id of the process requesting this computation
85
+ :param cluster_config: cluster configuration if
80
86
  :return: success, recons_urls (list of output urls), tuple of outs, tuples of errs, dict future_scans (key is cor, value is future_scan)
81
- if `instanciate_classes_only` set to True then return a list of :class:`_Reconstructor`
82
- :rtype: tuple
87
+ if `instantiate_classes_only` set to True then return a list of :class:`_Reconstructor`
83
88
  """
84
89
  if cluster_config in (None, {}):
85
90
  target = Target.LOCAL
@@ -113,7 +118,7 @@ def run_nabu_one_slice_several_config(
113
118
  output_file_prefix_pattern=output_file_prefix_pattern,
114
119
  axis=axis,
115
120
  )
116
- if instanciate_classes_only:
121
+ if instantiate_classes_only:
117
122
  return (reconstructor,)
118
123
 
119
124
  try:
@@ -151,12 +156,12 @@ def run_nabu_multicor(
151
156
  scan: TomwerScanBase,
152
157
  nabu_config: dict,
153
158
  cors: tuple,
154
- cluster_config: Optional[dict],
159
+ cluster_config: dict | None,
155
160
  dry_run: bool,
156
- slice_index: Union[int, str],
161
+ slice_index: int | str,
157
162
  file_format: str,
158
- process_id: Optional[int] = None,
159
- instanciate_classes_only: bool = False,
163
+ process_id: int | None = None,
164
+ instantiate_classes_only: bool = False,
160
165
  output_file_prefix_pattern=None,
161
166
  ):
162
167
  if cluster_config in (None, {}):
@@ -199,7 +204,7 @@ def run_nabu_multicor(
199
204
  axis=axis,
200
205
  output_file_prefix_pattern=output_file_prefix_pattern,
201
206
  )
202
- if instanciate_classes_only:
207
+ if instantiate_classes_only:
203
208
  return reconstructor
204
209
 
205
210
  try:
@@ -233,13 +238,13 @@ class _Reconstructor(_NabuBaseReconstructor):
233
238
  self,
234
239
  scan: TomwerScanBase,
235
240
  nabu_configs: Iterable,
236
- advancement: Optional[Progress],
237
- slice_index: Union[int, str],
238
- axis: Union[str, NabuPlane],
241
+ advancement: tqdm | None,
242
+ slice_index: int | str,
243
+ axis: str | NabuPlane,
239
244
  target: Target,
240
245
  dry_run: bool,
241
246
  file_format: str,
242
- cluster_config: Optional[dict],
247
+ cluster_config: dict | None,
243
248
  process_name: str,
244
249
  output_file_prefix_pattern=None,
245
250
  ) -> None:
@@ -252,7 +257,7 @@ class _Reconstructor(_NabuBaseReconstructor):
252
257
  :param target: is the reconstruction is to made locally or remotly
253
258
  :param file_format: reconstructed volume file format
254
259
  :param cluster_config: cluster configuration in the case of a remote execution
255
- :param str extra_output_file_pattern: possible extra file name pattern like for cor we want to add 'cor_' as prefix and cor value as suffix.
260
+ :param extra_output_file_pattern: possible extra file name pattern like for cor we want to add 'cor_' as prefix and cor value as suffix.
256
261
  To make the file name unique. For delta/beta it is already forseen to be unique. For now keywords are:
257
262
  * file_name: default file name according to db values and dataset name
258
263
  * value: value of the nabu_configs keys
@@ -282,8 +287,8 @@ class _Reconstructor(_NabuBaseReconstructor):
282
287
  )
283
288
 
284
289
  results = {}
285
- if self.advancement:
286
- self.advancement.setMaxAdvancement(len(self.nabu_configs))
290
+ if self.advancement is not None:
291
+ self.advancement.total = len(self.nabu_configs)
287
292
  for var_value, config in self.nabu_configs.items():
288
293
  if self._cancelled:
289
294
  break
@@ -307,8 +312,8 @@ class _Reconstructor(_NabuBaseReconstructor):
307
312
  process_name=self.process_name,
308
313
  )
309
314
  # specific treatment for cor: rename output files
310
- if self.advancement:
311
- self.advancement.increaseAdvancement(1)
315
+ if self.advancement is not None:
316
+ self.advancement.update()
312
317
  return results
313
318
 
314
319
  def _format_file_prefix(self, file_prefix, value):
@@ -395,9 +400,9 @@ class _Reconstructor(_NabuBaseReconstructor):
395
400
  dataset_params.update(config["dataset"])
396
401
  config["dataset"] = dataset_params
397
402
 
398
- config["resources"] = utils.get_nabu_resources_desc(
399
- scan=self.scan, workers=1, method="local"
400
- )
403
+ config["resources"] = config.get("resources", {})
404
+ config["resources"]["method"] = "local"
405
+
401
406
  # force overwrite results
402
407
  if "output" not in config:
403
408
  config["output"] = {}
@@ -423,10 +428,10 @@ class _ReconstructorMultiCor(_NabuBaseReconstructor):
423
428
  def __init__(
424
429
  self,
425
430
  nabu_config: dict,
426
- axis: Union[str, NabuPlane],
431
+ axis: str | NabuPlane,
427
432
  cors: tuple,
428
433
  file_format,
429
- slice_index: Union[int, str] = "middle",
434
+ slice_index: int | str = "middle",
430
435
  output_file_prefix_pattern=None,
431
436
  *args,
432
437
  **kwargs,
@@ -448,7 +453,7 @@ class _ReconstructorMultiCor(_NabuBaseReconstructor):
448
453
  return self.__cors
449
454
 
450
455
  @property
451
- def slice_index(self) -> Union[int, str]:
456
+ def slice_index(self) -> int | str:
452
457
  return self.__slice_index
453
458
 
454
459
  @property
@@ -460,13 +465,13 @@ class _ReconstructorMultiCor(_NabuBaseReconstructor):
460
465
  config_to_dump: dict,
461
466
  config_file: str,
462
467
  file_format: str,
463
- info: Optional[str],
468
+ info: str | None,
464
469
  process_name: str,
465
470
  ):
466
471
  """
467
472
  process provided configuration
468
473
 
469
- :param str info:
474
+ :param info:
470
475
  """
471
476
  if self.dry_run is True or self.only_create_config_file():
472
477
  return ResultsRun(
@@ -494,22 +499,6 @@ class _ReconstructorMultiCor(_NabuBaseReconstructor):
494
499
  else:
495
500
  raise ValueError(f"{self.target} is not recognized as a valid target")
496
501
 
497
- @staticmethod
498
- def convert_cor_from_rel_to_abs(scan, cor):
499
- if scan.dim_1 is not None:
500
- return cor + scan.dim_1 / 2.0
501
- else:
502
- _logger.warning("enable to get image half width. Set it to 1024")
503
- return cor + 1024
504
-
505
- @staticmethod
506
- def convert_cor_from_abs_to_rel(scan, cor):
507
- if scan.dim_1 is not None:
508
- return cor - scan.dim_1 / 2.0
509
- else:
510
- _logger.warning("enable to get image half width. Set it to 1024")
511
- return cor - 1024
512
-
513
502
  def _run_nabu_multicor_locally(
514
503
  self,
515
504
  conf_file: str,
@@ -519,18 +508,20 @@ class _ReconstructorMultiCor(_NabuBaseReconstructor):
519
508
  """
520
509
  run locally nabu for a single configuration file.
521
510
 
522
- :param str conf_file: path to the nabu .cfg file
523
- :param str file_format: format of the generated file
524
- :param dict config_to_dump: configuration saved in the .cfg as a dictionary
511
+ :param conf_file: path to the nabu .cfg file
512
+ :param file_format: format of the generated file
513
+ :param config_to_dump: configuration saved in the .cfg as a dictionary
525
514
  :return: results of the local run
526
- :rtype: ResultsLocalRun
527
515
  """
528
516
  if not has_nabu:
529
517
  raise ImportError("Fail to import nabu")
530
518
  slice_index = slice_index_to_int(self.slice_index, scan=self.scan)
531
519
 
532
520
  cor_in_nabu_ref = tuple(
533
- [self.convert_cor_from_rel_to_abs(self.scan, cor) for cor in self.cors]
521
+ [
522
+ relative_pos_to_absolute(relative_pos=cor, det_width=self.scan.dim_1)
523
+ for cor in self.cors
524
+ ]
534
525
  )
535
526
  cor_in_nabu_ref = ",".join([str(cor) for cor in cor_in_nabu_ref])
536
527
  command = " ".join(
@@ -538,7 +529,7 @@ class _ReconstructorMultiCor(_NabuBaseReconstructor):
538
529
  sys.executable,
539
530
  "-m",
540
531
  settings.NABU_MULTICOR_PATH,
541
- conf_file, # input file
532
+ f"'{conf_file}'", # input file
542
533
  f"{slice_index}", # slice
543
534
  f"{cor_in_nabu_ref}", # cor
544
535
  )
@@ -567,12 +558,15 @@ class _ReconstructorMultiCor(_NabuBaseReconstructor):
567
558
  scan=self.scan,
568
559
  file_format=file_format,
569
560
  cors=[
570
- self.convert_cor_from_rel_to_abs(self.scan, cor) for cor in self.cors
561
+ relative_pos_to_absolute(relative_pos=cor, det_width=self.scan.dim_1)
562
+ for cor in self.cors
571
563
  ],
572
564
  )
573
565
  # convert back from abs ref to rel ref
574
566
  recons_vol_identifiers = {
575
- self.convert_cor_from_abs_to_rel(self.scan, cor): identifiers
567
+ absolute_pos_to_relative(
568
+ absolute_pos=cor, det_width=self.scan.dim_1
569
+ ): identifiers
576
570
  for cor, identifiers in recons_vol_identifiers.items()
577
571
  }
578
572
  return ResultsLocalRun(
@@ -595,7 +589,6 @@ class _ReconstructorMultiCor(_NabuBaseReconstructor):
595
589
  Run a nabu reconstruction on slurm of a single configuration
596
590
 
597
591
  :return: results of the slurm run
598
- :rtype: ResultSlurmRun
599
592
  """
600
593
  if not isinstance(conf_file, str):
601
594
  raise TypeError(f"conf_file is expected to be a strg not {type(conf_file)}")
@@ -623,7 +616,10 @@ class _ReconstructorMultiCor(_NabuBaseReconstructor):
623
616
 
624
617
  slice_index = slice_index_to_int(self.slice_index, scan=self.scan)
625
618
  cor_in_nabu_ref = tuple(
626
- [self.convert_cor_from_rel_to_abs(self.scan, cor) for cor in self.cors]
619
+ [
620
+ relative_pos_to_absolute(relative_pos=cor, det_width=self.scan.dim_1)
621
+ for cor in self.cors
622
+ ]
627
623
  )
628
624
  cor_in_nabu_ref = ",".join([str(cor) for cor in cor_in_nabu_ref])
629
625
 
@@ -664,9 +660,9 @@ class _ReconstructorMultiCor(_NabuBaseReconstructor):
664
660
  dataset_params.update(config["dataset"])
665
661
  config["dataset"] = dataset_params
666
662
 
667
- config["resources"] = utils.get_nabu_resources_desc(
668
- scan=self.scan, workers=1, method="local"
669
- )
663
+ config["resources"] = config.get("resources", {})
664
+ config["resources"]["method"] = "local"
665
+
670
666
  # force overwrite results
671
667
  if "output" not in config:
672
668
  config["output"] = {}
@@ -1,32 +1,4 @@
1
- # coding: utf-8
2
- # /*##########################################################################
3
- #
4
- # Copyright (c) 2016-2020 European Synchrotron Radiation Facility
5
- #
6
- # Permission is hereby granted, free of charge, to any person obtaining a copy
7
- # of this software and associated documentation files (the "Software"), to deal
8
- # in the Software without restriction, including without limitation the rights
9
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
- # copies of the Software, and to permit persons to whom the Software is
11
- # furnished to do so, subject to the following conditions:
12
- #
13
- # The above copyright notice and this permission notice shall be included in
14
- # all copies or substantial portions of the Software.
15
- #
16
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
- # THE SOFTWARE.
23
- #
24
- # ###########################################################################*/
25
-
26
- __authors__ = ["H. Payno"]
27
- __license__ = "MIT"
28
- __date__ = "26/10/2021"
29
-
1
+ from __future__ import annotations
30
2
 
31
3
  import copy
32
4
  import functools
@@ -44,11 +16,11 @@ from tomwer.core.utils.scanutils import data_identifier_to_scan
44
16
  from tomwer.core.utils.slurm import is_slurm_available
45
17
  from tomwer.core.process.reconstruction.nabu.plane import NabuPlane
46
18
  from tomwer.core.process.reconstruction.nabu.utils import slice_index_to_int
47
- from tomwer.core.process.icat.gallery import (
48
- IcatScreenshots,
49
- deduce_dataset_gallery_location,
50
- )
19
+ from tomwer.core.process.reconstruction.utils.cor import relative_pos_to_absolute
51
20
  from tomwer.core.volume.volumefactory import VolumeFactory
21
+ from tomwer.core.process.reconstruction.output import (
22
+ PROCESS_FOLDER_RECONSTRUCTED_SLICES,
23
+ )
52
24
 
53
25
  try:
54
26
  from nabu.pipeline.fullfield.reconstruction import ( # noqa F401
@@ -70,7 +42,7 @@ else:
70
42
  has_nabu = True
71
43
  _err_import_nabu = None
72
44
 
73
- from typing import Iterable, Optional, Union
45
+ from typing import Iterable
74
46
 
75
47
  from nabu import version as nabu_version
76
48
  from nabu.pipeline.config import (
@@ -114,32 +86,30 @@ def run_slices_reconstruction(
114
86
  config: dict,
115
87
  dry_run: bool = False,
116
88
  advancement=None,
117
- process_id=None,
118
- instanciate_classes_only: bool = False,
89
+ process_id: int | None = None,
90
+ instantiate_classes_only: bool = False,
119
91
  ) -> tuple:
120
92
  """
121
93
  call nabu for a reconstruction on scan with the given configuration
122
94
 
123
- :param TomwerScanBase scan: scan to reconstruct
124
- :param dict config: configuration to run the reconstruction.
95
+ :param scan: scan to reconstruct
96
+ :param config: configuration to run the reconstruction.
125
97
  Contains nabu reconstruction parameters and slurm cluster
126
- configruation if requested (key: `slurm-cluster`).
127
- :param bool dry_run: do we want to run dry
128
- :param bool local: do we want to run a local reconstruction
98
+ configuration if requested (key: `slurm-cluster`).
99
+ :param dry_run: do we want to run dry
100
+ :param local: do we want to run a local reconstruction
129
101
  :param stderr: file to redirect stderr
130
102
  :param stdout: file to redirect stdout
131
103
  :param advancement: optional Progress class to display advancement
132
- :param int process_id: optional process id
133
- :param bool instanciate_class_only: if we don't want to run the SingleSliceRunner but only return them. Use case: we want to keep a hand on processing and it can be cancelled
104
+ :param process_id: optional process id
105
+ :param instantiate_class_only: if we don't want to run the SingleSliceRunner but only return them. Use case: we want to keep a hand on processing and it can be cancelled
134
106
 
135
107
  :return: (all_succeed, stdouts, stderrs, final_configs, future_scan)
136
- * all_succeed: bool, True if all the reconstruction succeed or if all job request succeed.
137
- * stdouts: list of stdout of job reconstruction or job requests
138
- * stderrs: list of stderr of job reconstruction or job requests
139
- * final_configs: list of configurations submits to nabu
140
- * future_scan: Optional[FutureTomwerScan] future scan containing futures pointing to job submited to the cluster.
141
- None if local reconstruction
142
- :rtype: tuple
108
+ * all_succeed: bool, True if all the reconstruction succeed or if all job request succeed.
109
+ * stdouts: list of stdout of job reconstruction or job requests
110
+ * stderrs: list of stderr of job reconstruction or job requests
111
+ * final_configs: list of configurations submits to nabu
112
+ * future_scan: FutureTomwerScan | None future scan containing futures pointing to job submited to the cluster. None if local reconstruction
143
113
 
144
114
  Behavior: will clear the last slices reconstructed
145
115
  """
@@ -162,7 +132,10 @@ def run_slices_reconstruction(
162
132
  if scan.axis_params is not None and scan.axis_params.relative_cor_value is not None:
163
133
  if "reconstruction" in config:
164
134
  # move the cor value to the nabu reference
165
- cor_nabu_ref = scan.axis_params.relative_cor_value + scan.dim_1 / 2.0
135
+ cor_nabu_ref = relative_pos_to_absolute(
136
+ relative_pos=scan.axis_params.relative_cor_value,
137
+ det_width=scan.dim_1,
138
+ )
166
139
  config["reconstruction"]["rotation_axis_position"] = str(cor_nabu_ref)
167
140
  _logger.info(f"set nabu reconstruction parameters to {scan}")
168
141
 
@@ -178,10 +151,10 @@ def run_slices_reconstruction(
178
151
  stdouts = []
179
152
  final_configs = []
180
153
  futures = []
181
- instanciated_classes = []
154
+ instantiated_classes = []
182
155
  all_succeed = True
183
156
  if advancement is not None:
184
- advancement.setMaxAdvancement(len(nabu_configurations))
157
+ advancement.total = len(nabu_configurations)
185
158
  scan.clear_latest_reconstructions()
186
159
  for nabu_configuration in nabu_configurations:
187
160
  l_config, slice_index = nabu_configuration
@@ -191,7 +164,7 @@ def run_slices_reconstruction(
191
164
  scan=scan,
192
165
  slice_index=slice_index,
193
166
  dry_run=dry_run,
194
- instanciate_class_only=instanciate_classes_only,
167
+ instantiate_class_only=instantiate_classes_only,
195
168
  axis=config.get("reconstruction", {}).get("slice_plane", "XY"),
196
169
  )
197
170
 
@@ -199,8 +172,8 @@ def run_slices_reconstruction(
199
172
  if result is None:
200
173
  # in case of timeout or another issue. Log should already have been provided
201
174
  pass
202
- elif instanciate_classes_only:
203
- instanciated_classes.append(result)
175
+ elif instantiate_classes_only:
176
+ instantiated_classes.append(result)
204
177
  continue
205
178
  if slice_index is None:
206
179
  continue
@@ -229,10 +202,10 @@ def run_slices_reconstruction(
229
202
  all_succeed = all_succeed and result.success
230
203
 
231
204
  if advancement is not None:
232
- advancement.increaseAdvancement(1)
205
+ advancement.update()
233
206
 
234
- if instanciate_classes_only:
235
- return instanciated_classes
207
+ if instantiate_classes_only:
208
+ return instantiated_classes
236
209
  if is_cluster_job:
237
210
  future_tomo_obj = FutureTomwerObject(
238
211
  tomo_obj=scan,
@@ -258,7 +231,7 @@ class NabuSlicesTask(
258
231
  "dry_run",
259
232
  "serialize_output_data",
260
233
  ),
261
- output_names=("data", "nabu_params", "future_tomo_obj", "screenshots"),
234
+ output_names=("data", "nabu_params", "future_tomo_obj"),
262
235
  ):
263
236
  """
264
237
  Definition of the nabu reconstruction volume reconstruction process
@@ -321,10 +294,10 @@ class NabuSlicesTask(
321
294
  scan=scan,
322
295
  dry_run=self._dry_run,
323
296
  process_id=self.process_id,
324
- instanciate_classes_only=True,
297
+ instantiate_classes_only=True,
325
298
  )
326
299
  except Exception as e:
327
- mess = f"Fail to instanciate slice reconstructor for {str(scan)}. Reason is {e}."
300
+ mess = f"Fail to instantiate slice reconstructor for {str(scan)}. Reason is {e}."
328
301
  _logger.processFailed(mess)
329
302
  ProcessManager().notify_dataset_state(
330
303
  dataset=scan,
@@ -389,15 +362,6 @@ class NabuSlicesTask(
389
362
  VolumeFactory.from_identifier_to_vol_urls(rec_identifier)
390
363
  )
391
364
 
392
- self.outputs.screenshots = IcatScreenshots(
393
- data_dir=deduce_dataset_gallery_location(scan),
394
- screenshots={
395
- os.path.splitext(os.path.basename(url.file_path()))[0]: url
396
- for url in volume_urls
397
- },
398
- scan=scan,
399
- )
400
-
401
365
  process_index = scan.pop_process_index()
402
366
  # update processes information / registration
403
367
  gc.collect()
@@ -470,15 +434,11 @@ class NabuSlicesTask(
470
434
  return self._dry_run
471
435
 
472
436
  @staticmethod
473
- def get_process_frm_process_file(process_file, entry):
437
+ def get_process_frm_process_file(process_file: str, entry: str) -> dict:
474
438
  """
475
- Read informations regarding the nabu process save in the
476
- tomwer_process.h5 file
439
+ Read informations regarding the nabu process save in the tomwer_process.h5 file
477
440
 
478
- :param process_file:
479
- :param entry:
480
441
  :return: dictionary with the contain of the nabu process
481
- :rtype:dict
482
442
  """
483
443
  if entry is None:
484
444
  with open_hdf5(process_file) as h5f:
@@ -553,15 +513,13 @@ class NabuSlicesTask(
553
513
  return h5py_read_dataset(latest_nabu_node[path])
554
514
 
555
515
 
556
- def interpret_tomwer_configuration(
557
- config: dict, scan: Union[TomwerScanBase, None]
558
- ) -> tuple:
516
+ def interpret_tomwer_configuration(config: dict, scan: TomwerScanBase | None) -> tuple:
559
517
  """
560
518
  tomwer can 'mock' the nabu reconstruction to request more feature.
561
519
  Typical use case is that we can ask for reconstruction of several
562
520
  slices and not only the volume
563
521
 
564
- :param dict config: tomwer configuration for nabu
522
+ :param config: tomwer configuration for nabu
565
523
  :param scan: requested if we want to get slices
566
524
  :return: tuple of tuples (nabu configuration, is slice)
567
525
  """
@@ -624,10 +582,10 @@ class SingleSliceRunner(_NabuBaseReconstructor):
624
582
  scan: TomwerScanBase,
625
583
  config: dict,
626
584
  dry_run: bool,
627
- slice_index: Union[int, str, None],
585
+ slice_index: int | str | None,
628
586
  axis: NabuPlane,
629
587
  target: Target,
630
- cluster_config: Optional[dict],
588
+ cluster_config: dict | None,
631
589
  process_name: str,
632
590
  add_to_latest_reconstructions: bool = True,
633
591
  ) -> None:
@@ -657,6 +615,11 @@ class SingleSliceRunner(_NabuBaseReconstructor):
657
615
  def add_to_latest_reconstructions(self):
658
616
  return self._add_to_latest_reconstructions
659
617
 
618
+ @property
619
+ def processed_data_folder_name(self):
620
+ """return the specific processed folder name associated to this type of reconstruction."""
621
+ return PROCESS_FOLDER_RECONSTRUCTED_SLICES
622
+
660
623
  @docstring(_NabuBaseReconstructor)
661
624
  def only_create_config_file(self):
662
625
  return self.slice_index is None
@@ -690,9 +653,9 @@ class SingleSliceRunner(_NabuBaseReconstructor):
690
653
  config_complete[key].update(self.config[key])
691
654
  config = config_complete
692
655
 
693
- config["resources"] = utils.get_nabu_resources_desc(
694
- scan=self.scan, workers=1, method="local"
695
- )
656
+ config["resources"] = config.get("resources", {})
657
+ config["resources"]["method"] = "local"
658
+
696
659
  # force overwrite results
697
660
  if "output" not in config:
698
661
  config["output"] = {}
@@ -789,7 +752,7 @@ class SingleSliceRunner(_NabuBaseReconstructor):
789
752
  pag,
790
753
  ctf,
791
754
  db,
792
- slice_index: Union[str, int],
755
+ slice_index: str | int,
793
756
  axis: NabuPlane,
794
757
  ):
795
758
  axis = NabuPlane.from_value(axis)
@@ -853,12 +816,8 @@ class SingleSliceRunner(_NabuBaseReconstructor):
853
816
  def _get_file_basename_reconstruction(self, pag, db, ctf, axis):
854
817
  """
855
818
 
856
- :param TomwerScanBase scan: scan reconstructed
857
- :param Union[None, int] slice_index: index of the slice reconstructed.
858
- if None, we want to reconstruct the
859
- entire volume
860
- :param bool pag: is it a paganin reconstruction
861
- :param int db: delta / beta parameter
819
+ :param pag: is it a paganin reconstruction
820
+ :param db: delta / beta parameter
862
821
  :return: basename of the file reconstructed (without any extension)
863
822
  """
864
823
  return self.get_file_basename_reconstruction(
@@ -875,30 +834,29 @@ def run_single_slice_reconstruction(
875
834
  scan,
876
835
  nabu_config,
877
836
  dry_run,
878
- slice_index: Union[int, str, None],
879
- process_id: Optional[int] = None,
880
- cluster_config: Optional[dict] = None,
837
+ slice_index: int | str | None,
838
+ process_id: int | None = None,
839
+ cluster_config: dict | None = None,
881
840
  add_to_latest_reconstructions=True,
882
- instanciate_class_only=False,
841
+ instantiate_class_only=False,
883
842
  axis: NabuPlane = NabuPlane.XY,
884
- ) -> Optional[ResultsRun]:
843
+ ) -> ResultsRun | None:
885
844
  """
886
845
  # TODO: might need something like a context or an option "keep" slice in memory
887
846
 
888
847
  :param scan:
889
- :param nabu_config: configruation of nabu process
890
- :param cluster_config: configruation of cluster (slurm-cluster only for now)
848
+ :param nabu_config: configuration of nabu process
849
+ :param cluster_config: configuration of cluster (slurm-cluster only for now)
891
850
  :param dry_run:
892
- :param Union[None,int, str] slice_index: slice index to reconstruct.
851
+ :param slice_index: slice index to reconstruct.
893
852
  If str should be "middle"
894
853
  :param local:
895
854
  :param stdout: file to redirect stdout
896
855
  :param stderr: file to redirect stderr
897
- :param bool add_to_latest_reconstructions: if true add reconstructed slice to the latest reconstruction.
856
+ :param add_to_latest_reconstructions: if true add reconstructed slice to the latest reconstruction.
898
857
  We wan't to avoid this treatment for saaxis and sadeltebeta for example
899
- :param bool instanciate_class_only: if we don't want to run the SingleSliceRunner but only return them. Use case: we want to keep a hand on processing and it can be cancelled
858
+ :param instantiate_class_only: if we don't want to run the SingleSliceRunner but only return them. Use case: we want to keep a hand on processing and it can be cancelled
900
859
  :return: result of the slice reconstruction if succeed to launch it.
901
- :rtype: Optional[ResultsRun]
902
860
  """
903
861
  # TODO: remove local from the function signature
904
862
  target = Target.SLURM if cluster_config not in ({}, None) else Target.LOCAL
@@ -928,7 +886,7 @@ def run_single_slice_reconstruction(
928
886
  add_to_latest_reconstructions=add_to_latest_reconstructions,
929
887
  process_name=process_name,
930
888
  )
931
- if instanciate_class_only:
889
+ if instantiate_class_only:
932
890
  return slice_reconstructor
933
891
 
934
892
  try: