tomwer 1.3.27__py3-none-any.whl → 1.4.0rc0__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 (632) 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 +48 -49
  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 +40 -85
  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 -7
  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 +7 -4
  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 +63 -111
  138. tomwer/core/process/reconstruction/axis/mode.py +5 -3
  139. tomwer/core/process/reconstruction/axis/params.py +5 -146
  140. tomwer/core/process/reconstruction/axis/projectiontype.py +0 -28
  141. tomwer/core/process/reconstruction/darkref/darkrefs.py +14 -39
  142. tomwer/core/process/reconstruction/darkref/darkrefscopy.py +7 -39
  143. tomwer/core/process/reconstruction/darkref/params.py +1 -28
  144. tomwer/core/process/reconstruction/nabu/castvolume.py +19 -34
  145. tomwer/core/process/reconstruction/nabu/nabucommon.py +18 -43
  146. tomwer/core/process/reconstruction/nabu/nabuscores.py +47 -48
  147. tomwer/core/process/reconstruction/nabu/nabuslices.py +59 -105
  148. tomwer/core/process/reconstruction/nabu/nabuvolume.py +44 -70
  149. tomwer/core/process/reconstruction/nabu/plane.py +10 -0
  150. tomwer/core/process/reconstruction/nabu/settings.py +1 -28
  151. tomwer/core/process/reconstruction/nabu/target.py +0 -28
  152. tomwer/core/process/reconstruction/nabu/test/test_castvolume.py +116 -0
  153. tomwer/core/process/reconstruction/nabu/test/test_nabu_utils.py +277 -0
  154. tomwer/core/process/reconstruction/nabu/test/test_nabunormalization.py +199 -0
  155. tomwer/core/process/reconstruction/nabu/utils.py +11 -60
  156. tomwer/core/process/reconstruction/normalization/normalization.py +2 -32
  157. tomwer/core/process/reconstruction/normalization/params.py +3 -35
  158. tomwer/core/process/reconstruction/output.py +14 -19
  159. tomwer/core/process/reconstruction/paramsbase.py +4 -33
  160. tomwer/core/process/reconstruction/saaxis/params.py +5 -33
  161. tomwer/core/process/reconstruction/saaxis/saaxis.py +18 -47
  162. tomwer/core/process/reconstruction/sadeltabeta/params.py +2 -31
  163. tomwer/core/process/reconstruction/sadeltabeta/sadeltabeta.py +16 -44
  164. tomwer/core/process/reconstruction/scores/params.py +9 -39
  165. tomwer/core/process/reconstruction/scores/scores.py +10 -42
  166. tomwer/core/process/reconstruction/tests/__init__.py +0 -0
  167. tomwer/core/process/reconstruction/tests/test_axis.py +46 -0
  168. tomwer/core/process/reconstruction/tests/test_darkref.py +33 -0
  169. tomwer/core/process/reconstruction/{test → tests}/test_saaxis.py +1 -27
  170. tomwer/core/process/reconstruction/tests/test_sadeltabeta.py +48 -0
  171. tomwer/core/process/script/python.py +1 -27
  172. tomwer/core/process/script/tests/test_script.py +41 -0
  173. tomwer/core/process/stitching/metadataholder.py +5 -4
  174. tomwer/core/process/stitching/nabustitcher.py +35 -5
  175. tomwer/core/process/stitching/tests/test_metadataholder.py +17 -0
  176. tomwer/core/process/task.py +20 -63
  177. tomwer/core/process/tests/__init__.py +0 -0
  178. tomwer/core/process/{test → tests}/test_axis.py +1 -79
  179. tomwer/core/process/{test → tests}/test_conditions.py +1 -28
  180. tomwer/core/process/{test → tests}/test_dark_and_flat.py +1 -27
  181. tomwer/core/process/{test → tests}/test_data_listener.py +1 -27
  182. tomwer/core/process/{test → tests}/test_data_transfer.py +2 -28
  183. tomwer/core/process/{test → tests}/test_data_watcher.py +1 -27
  184. tomwer/core/process/{test → tests}/test_nabu.py +4 -33
  185. tomwer/core/process/{test → tests}/test_normalization.py +1 -26
  186. tomwer/core/process/{test → tests}/test_timer.py +1 -27
  187. tomwer/core/process/utils.py +2 -31
  188. tomwer/core/process/visualization/dataviewer.py +1 -26
  189. tomwer/core/process/visualization/diffviewer.py +1 -26
  190. tomwer/core/process/visualization/imagestackviewer.py +0 -26
  191. tomwer/core/process/visualization/radiostack.py +0 -26
  192. tomwer/core/process/visualization/samplemoved.py +0 -28
  193. tomwer/core/process/visualization/sinogramviewer.py +0 -27
  194. tomwer/core/process/visualization/slicestack.py +0 -28
  195. tomwer/core/process/visualization/tests/test_data_viewer.py +12 -0
  196. tomwer/core/process/visualization/tests/test_diff_viewer.py +12 -0
  197. tomwer/core/process/visualization/tests/test_image_stack_viewer.py +14 -0
  198. tomwer/core/process/visualization/tests/test_radio_stack.py +12 -0
  199. tomwer/core/process/visualization/tests/test_sample_moved.py +14 -0
  200. tomwer/core/process/visualization/tests/test_sinogram_viewer.py +13 -0
  201. tomwer/core/process/visualization/tests/test_slice_stack.py +13 -0
  202. tomwer/core/process/visualization/tests/test_volume_viewer.py +12 -0
  203. tomwer/core/process/visualization/volumeviewer.py +0 -29
  204. tomwer/core/scan/__init__.py +3 -27
  205. tomwer/core/scan/blissscan.py +5 -34
  206. tomwer/core/scan/edfscan.py +19 -53
  207. tomwer/core/scan/hdf5scan.py +2 -2
  208. tomwer/core/scan/nxtomoscan.py +46 -54
  209. tomwer/core/scan/scanbase.py +104 -200
  210. tomwer/core/scan/scanfactory.py +11 -41
  211. tomwer/core/scan/tests/__init__.py +0 -0
  212. tomwer/core/scan/tests/test_edf.py +25 -0
  213. tomwer/core/scan/tests/test_future_scan.py +35 -0
  214. tomwer/core/scan/tests/test_nxtomoscan.py +143 -0
  215. tomwer/core/scan/{test → tests}/test_process_registration.py +1 -28
  216. tomwer/core/settings.py +18 -40
  217. tomwer/core/tests/__init__.py +0 -0
  218. tomwer/core/tests/test_scanutils.py +26 -0
  219. tomwer/core/{test → tests}/test_utils.py +1 -28
  220. tomwer/core/tomwer_object.py +4 -0
  221. tomwer/core/utils/__init__.py +2 -0
  222. tomwer/core/utils/char.py +0 -28
  223. tomwer/core/utils/deprecation.py +12 -38
  224. tomwer/core/utils/dictutils.py +1 -3
  225. tomwer/core/utils/ftseriesutils.py +1 -27
  226. tomwer/core/utils/gpu.py +0 -28
  227. tomwer/core/utils/image.py +8 -39
  228. tomwer/core/utils/locker.py +1 -28
  229. tomwer/core/utils/logconfig.py +0 -27
  230. tomwer/core/utils/normalization.py +4 -31
  231. tomwer/core/utils/nxtomoutils.py +8 -38
  232. tomwer/core/utils/resource.py +0 -26
  233. tomwer/core/utils/scanutils.py +23 -52
  234. tomwer/core/utils/slurm.py +7 -30
  235. tomwer/core/utils/spec.py +6 -6
  236. tomwer/core/utils/tests/__init__.py +0 -0
  237. tomwer/core/utils/tests/test_image.py +30 -0
  238. tomwer/core/utils/tests/test_nxtomo.py +38 -0
  239. tomwer/core/utils/tests/test_scan_utils.py +46 -0
  240. tomwer/core/utils/tests/test_time.py +6 -0
  241. tomwer/core/utils/threads.py +0 -26
  242. tomwer/core/utils/time.py +0 -27
  243. tomwer/core/volume/__init__.py +4 -0
  244. tomwer/core/volume/edfvolume.py +1 -28
  245. tomwer/core/volume/hdf5volume.py +1 -28
  246. tomwer/core/volume/jp2kvolume.py +1 -27
  247. tomwer/core/volume/rawvolume.py +1 -28
  248. tomwer/core/volume/tests/test_volumes.py +21 -0
  249. tomwer/core/volume/tiffvolume.py +1 -28
  250. tomwer/core/volume/volumebase.py +5 -0
  251. tomwer/core/volume/volumefactory.py +7 -33
  252. tomwer/gui/__init__.py +0 -28
  253. tomwer/gui/cluster/__init__.py +2 -0
  254. tomwer/gui/cluster/slurm.py +297 -95
  255. tomwer/gui/cluster/supervisor.py +1 -27
  256. tomwer/gui/cluster/tests/__init__.py +0 -0
  257. tomwer/gui/cluster/{test → tests}/test_cluster.py +21 -26
  258. tomwer/gui/cluster/{test → tests}/test_supervisor.py +1 -27
  259. tomwer/gui/conditions/__init__.py +2 -0
  260. tomwer/gui/conditions/filter.py +1 -26
  261. tomwer/gui/configuration/__init__.py +2 -0
  262. tomwer/gui/control/__init__.py +2 -0
  263. tomwer/gui/control/actions.py +2 -28
  264. tomwer/gui/control/datadiscovery.py +4 -3
  265. tomwer/gui/control/datalist.py +64 -69
  266. tomwer/gui/control/datalistener.py +1 -39
  267. tomwer/gui/control/datareacheractions.py +1 -28
  268. tomwer/gui/control/datatransfert.py +2 -29
  269. tomwer/gui/control/datavalidator.py +3 -37
  270. tomwer/gui/control/datawatcher/__init__.py +0 -28
  271. tomwer/gui/control/datawatcher/configuration.py +1 -28
  272. tomwer/gui/control/datawatcher/datawatcher.py +3 -32
  273. tomwer/gui/control/datawatcher/datawatcherobserver.py +2 -28
  274. tomwer/gui/control/history.py +5 -35
  275. tomwer/gui/control/nxtomomill.py +3 -30
  276. tomwer/gui/control/observations.py +61 -55
  277. tomwer/gui/control/reducedarkflatselector.py +24 -20
  278. tomwer/gui/control/scanselectorwidget.py +2 -28
  279. tomwer/gui/control/selectorwidgetbase.py +17 -17
  280. tomwer/gui/control/series/__init__.py +0 -0
  281. tomwer/gui/control/{serie/seriecreator.py → series/seriescreator.py} +214 -235
  282. tomwer/gui/control/series/serieswaiter.py +0 -0
  283. tomwer/gui/control/series/test/test_creator.py +424 -0
  284. tomwer/gui/control/series/test/test_nxtomo_concatenate.py +21 -0
  285. tomwer/gui/control/singletomoobj.py +1 -1
  286. tomwer/gui/control/tests/__init__.py +0 -0
  287. tomwer/gui/control/tests/test_datalist.py +47 -0
  288. tomwer/gui/control/{test → tests}/test_datalistener.py +1 -28
  289. tomwer/gui/control/tests/test_datavalidator.py +27 -0
  290. tomwer/gui/control/{test → tests}/test_inputwidget.py +1 -27
  291. tomwer/gui/control/tests/test_process_manager.py +38 -0
  292. tomwer/gui/control/tests/test_scan_observations.py +23 -0
  293. tomwer/gui/control/tests/test_scanselector.py +42 -0
  294. tomwer/gui/control/{test → tests}/test_scanvalidator.py +1 -27
  295. tomwer/gui/control/{test → tests}/test_volume_dialog.py +2 -30
  296. tomwer/gui/control/{test → tests}/test_volumeselector.py +1 -27
  297. tomwer/gui/control/volumeselectorwidget.py +2 -30
  298. tomwer/gui/dataportal/__init__.py +2 -0
  299. tomwer/gui/{icat → dataportal}/createscreenshots.py +3 -2
  300. tomwer/gui/dataportal/gallery.py +133 -0
  301. tomwer/gui/dataportal/outputformat.py +0 -0
  302. tomwer/gui/dataportal/publish.py +96 -0
  303. tomwer/gui/dataportal/tests/test_create_screenshots_gui.py +23 -0
  304. tomwer/gui/dataportal/tests/test_gallery_gui.py +21 -0
  305. tomwer/gui/debugtools/__init__.py +2 -0
  306. tomwer/gui/debugtools/datasetgenerator.py +1 -30
  307. tomwer/gui/debugtools/objectinspector.py +1 -29
  308. tomwer/gui/dialog/QDataDialog.py +89 -0
  309. tomwer/gui/{qfolderdialog.py → dialog/QVolumeDialog.py} +8 -107
  310. tomwer/gui/dialog/__init__.py +1 -0
  311. tomwer/gui/edit/__init__.py +2 -0
  312. tomwer/gui/edit/dkrfpatch.py +52 -87
  313. tomwer/gui/edit/imagekeyeditor.py +18 -54
  314. tomwer/gui/edit/nxtomoeditor.py +113 -300
  315. tomwer/gui/edit/nxtomowarmer.py +3 -2
  316. tomwer/gui/edit/tests/__init__.py +0 -0
  317. tomwer/gui/edit/{test → tests}/test_dkrf_patch.py +3 -29
  318. tomwer/gui/edit/{test → tests}/test_image_key_editor.py +1 -27
  319. tomwer/gui/edit/{test → tests}/test_nx_editor.py +45 -23
  320. tomwer/gui/icons.py +28 -66
  321. tomwer/gui/illustrations.py +4 -34
  322. tomwer/gui/imagefromfile.py +5 -30
  323. tomwer/gui/metadataloader.py +36 -0
  324. tomwer/gui/qconfigfile.py +3 -0
  325. tomwer/gui/qlefilesystem.py +3 -0
  326. tomwer/gui/reconstruction/__init__.py +2 -0
  327. tomwer/gui/reconstruction/axis/AxisMainWindow.py +264 -0
  328. tomwer/gui/reconstruction/axis/AxisOptionsWidget.py +153 -0
  329. tomwer/gui/reconstruction/axis/AxisSettingsWidget.py +776 -0
  330. tomwer/gui/reconstruction/axis/AxisWidget.py +526 -0
  331. tomwer/gui/reconstruction/axis/CalculationWidget.py +374 -0
  332. tomwer/gui/reconstruction/axis/CompareImages.py +11 -44
  333. tomwer/gui/reconstruction/axis/ControlWidget.py +277 -0
  334. tomwer/gui/reconstruction/axis/InputWidget.py +491 -0
  335. tomwer/gui/reconstruction/axis/ManualFramesSelection.py +168 -0
  336. tomwer/gui/reconstruction/axis/__init__.py +2 -2
  337. tomwer/gui/reconstruction/darkref/__init__.py +0 -27
  338. tomwer/gui/reconstruction/darkref/darkrefcopywidget.py +5 -34
  339. tomwer/gui/reconstruction/darkref/darkrefwidget.py +1 -27
  340. tomwer/gui/reconstruction/nabu/castvolume.py +40 -59
  341. tomwer/gui/reconstruction/nabu/check.py +7 -33
  342. tomwer/gui/reconstruction/nabu/nabuconfig/base.py +7 -34
  343. tomwer/gui/reconstruction/nabu/nabuconfig/ctf.py +6 -5
  344. tomwer/gui/reconstruction/nabu/nabuconfig/nabuconfig.py +10 -69
  345. tomwer/gui/reconstruction/nabu/nabuconfig/output.py +3 -47
  346. tomwer/gui/reconstruction/nabu/nabuconfig/phase.py +54 -36
  347. tomwer/gui/reconstruction/nabu/nabuconfig/preprocessing.py +103 -54
  348. tomwer/gui/reconstruction/nabu/nabuconfig/reconstruction.py +116 -65
  349. tomwer/gui/reconstruction/nabu/nabuflow.py +31 -61
  350. tomwer/gui/reconstruction/nabu/platform.py +94 -0
  351. tomwer/gui/reconstruction/nabu/slices.py +81 -45
  352. tomwer/gui/reconstruction/nabu/slurm.py +1 -27
  353. tomwer/gui/reconstruction/nabu/test/test_cast_volume.py +82 -0
  354. tomwer/gui/reconstruction/nabu/test/test_check.py +66 -0
  355. tomwer/gui/reconstruction/nabu/test/test_ctf.py +46 -0
  356. tomwer/gui/reconstruction/nabu/test/test_helical.py +21 -0
  357. tomwer/gui/reconstruction/nabu/test/test_nabu_preprocessing.py +81 -0
  358. tomwer/gui/reconstruction/nabu/volume.py +62 -90
  359. tomwer/gui/reconstruction/normalization/intensity.py +5 -32
  360. tomwer/gui/reconstruction/normalization/test/test_intensity.py +89 -0
  361. tomwer/gui/reconstruction/saaxis/corrangeselector.py +16 -49
  362. tomwer/gui/reconstruction/saaxis/dimensionwidget.py +56 -96
  363. tomwer/gui/reconstruction/saaxis/saaxis.py +17 -38
  364. tomwer/gui/reconstruction/saaxis/sliceselector.py +8 -39
  365. tomwer/gui/reconstruction/sadeltabeta/saadeltabeta.py +19 -37
  366. tomwer/gui/reconstruction/scores/control.py +2 -30
  367. tomwer/gui/reconstruction/scores/scoreplot.py +19 -48
  368. tomwer/gui/reconstruction/tests/__init__.py +0 -0
  369. tomwer/gui/reconstruction/{test → tests}/test_axis.py +23 -49
  370. tomwer/gui/reconstruction/{test → tests}/test_nabu.py +8 -31
  371. tomwer/gui/reconstruction/{test → tests}/test_saaxis.py +10 -37
  372. tomwer/gui/reconstruction/{test → tests}/test_sadeltabeta.py +1 -26
  373. tomwer/gui/samplemoved/__init__.py +2 -30
  374. tomwer/gui/samplemoved/selectiontable.py +3 -33
  375. tomwer/gui/settings.py +7 -0
  376. tomwer/gui/stackplot.py +33 -661
  377. tomwer/gui/stacks.py +261 -135
  378. tomwer/gui/stitching/SingleAxisStitchingWidget.py +326 -0
  379. tomwer/gui/stitching/StitchingOptionsWidget.py +438 -0
  380. tomwer/gui/stitching/StitchingWindow.py +586 -0
  381. tomwer/gui/stitching/__init__.py +2 -0
  382. tomwer/gui/stitching/alignment.py +90 -0
  383. tomwer/gui/stitching/axisorderedlist.py +44 -34
  384. tomwer/gui/stitching/config/axisparams.py +23 -11
  385. tomwer/gui/stitching/config/output.py +6 -5
  386. tomwer/gui/stitching/config/positionoveraxis.py +313 -51
  387. tomwer/gui/stitching/config/stitchingstrategies.py +22 -16
  388. tomwer/gui/stitching/config/tests/test_axisparams.py +25 -0
  389. tomwer/gui/stitching/config/tomoobjdetails.py +3 -5
  390. tomwer/gui/stitching/normalization.py +1 -0
  391. tomwer/gui/stitching/preview.py +59 -0
  392. tomwer/gui/stitching/singleaxis.py +57 -0
  393. tomwer/gui/stitching/stitchandbackground.py +3 -2
  394. tomwer/gui/stitching/stitching_preview.py +44 -36
  395. tomwer/gui/stitching/stitching_raw.py +5 -3
  396. tomwer/gui/stitching/tests/test_ZStitchingWindow.py +88 -0
  397. tomwer/gui/stitching/tests/test_axis_ordered_list.py +21 -0
  398. tomwer/gui/stitching/tests/test_normalization.py +27 -0
  399. tomwer/gui/stitching/tests/test_preview.py +68 -0
  400. tomwer/gui/stitching/tests/test_stitching_raw.py +110 -0
  401. tomwer/gui/stitching/tests/utils.py +92 -0
  402. tomwer/gui/stitching/utils.py +14 -0
  403. tomwer/gui/stitching/z_stitching/fineestimation.py +4 -32
  404. tomwer/gui/stitching/z_stitching/tests/test_fine_estimation.py +35 -0
  405. tomwer/gui/stitching/z_stitching/tests/test_raw_estimation.py +215 -0
  406. tomwer/gui/stitching/z_stitching/tests/test_stitching_window.py +51 -0
  407. tomwer/gui/tests/__init__.py +0 -0
  408. tomwer/gui/tests/test_axis_gui.py +27 -0
  409. tomwer/gui/{test → tests}/test_qfolder_dialog.py +1 -1
  410. tomwer/gui/utils/RangeWidget.py +44 -0
  411. tomwer/gui/utils/buttons.py +4 -3
  412. tomwer/gui/utils/completer.py +2 -33
  413. tomwer/gui/utils/flow.py +11 -40
  414. tomwer/gui/utils/gpu.py +60 -0
  415. tomwer/gui/utils/illustrations.py +1 -26
  416. tomwer/gui/utils/inputwidget.py +35 -73
  417. tomwer/gui/utils/lineselector/lineselector.py +9 -46
  418. tomwer/gui/utils/loadingmode.py +81 -0
  419. tomwer/gui/utils/qt_utils.py +9 -0
  420. tomwer/gui/utils/sandboxes.py +1 -26
  421. tomwer/gui/utils/scandescription.py +2 -31
  422. tomwer/gui/utils/scrollarea.py +6 -55
  423. tomwer/gui/utils/slider.py +4 -28
  424. tomwer/gui/utils/splashscreen.py +0 -28
  425. tomwer/gui/utils/step.py +14 -13
  426. tomwer/gui/utils/tests/test_completer.py +41 -0
  427. tomwer/gui/utils/tests/test_line_selector.py +21 -0
  428. tomwer/gui/utils/tests/test_splashscreen.py +8 -0
  429. tomwer/gui/utils/tests/test_vignettes.py +68 -0
  430. tomwer/gui/utils/unitsystem.py +15 -69
  431. tomwer/gui/utils/utils.py +4 -5
  432. tomwer/gui/utils/vignettes.py +10 -41
  433. tomwer/gui/utils/waiterthread.py +0 -26
  434. tomwer/gui/visualization/__init__.py +2 -0
  435. tomwer/gui/visualization/dataviewer.py +68 -421
  436. tomwer/gui/visualization/diffviewer/diffviewer.py +2 -30
  437. tomwer/gui/visualization/diffviewer/shiftwidget.py +4 -29
  438. tomwer/gui/visualization/fullscreenplot.py +5 -5
  439. tomwer/gui/visualization/imagestack.py +403 -0
  440. tomwer/gui/visualization/nxtomometadata.py +0 -4
  441. tomwer/gui/visualization/reconstructionparameters.py +14 -32
  442. tomwer/gui/visualization/scanoverview.py +33 -66
  443. tomwer/gui/visualization/sinogramviewer.py +2 -28
  444. tomwer/gui/visualization/test/__init__.py +0 -28
  445. tomwer/gui/visualization/test/test_dataviewer.py +1 -28
  446. tomwer/gui/visualization/test/test_diffviewer.py +1 -28
  447. tomwer/gui/visualization/test/test_nx_tomo_metadata_viewer.py +0 -5
  448. tomwer/gui/visualization/test/test_reconstruction_parameters.py +1 -27
  449. tomwer/gui/visualization/test/test_sinogramviewer.py +1 -28
  450. tomwer/gui/visualization/test/test_stacks.py +184 -115
  451. tomwer/gui/visualization/test/test_volumeviewer.py +3 -2
  452. tomwer/gui/visualization/tomoobjoverview.py +2 -2
  453. tomwer/gui/visualization/volumeoverview.py +3 -2
  454. tomwer/gui/visualization/volumeviewer.py +47 -43
  455. tomwer/io/__init__.py +2 -0
  456. tomwer/io/utils/h5pyutils.py +1 -27
  457. tomwer/io/utils/test/test_raw_and_processed_data.py +10 -0
  458. tomwer/io/utils/test/test_utils.py +67 -0
  459. tomwer/io/utils/utils.py +2 -31
  460. tomwer/resources/__init__.py +13 -33
  461. tomwer/resources/gui/icons/edit_downstream.svg +114 -0
  462. tomwer/resources/gui/icons/edit_upstream.svg +112 -0
  463. tomwer/resources/gui/icons/free_edition.svg +23 -0
  464. tomwer/resources/gui/icons/icat_gallery_opts.png +0 -0
  465. tomwer/resources/gui/icons/icat_gallery_opts.svg +80 -0
  466. tomwer/resources/gui/icons/search.png +0 -0
  467. tomwer/resources/gui/icons/search.svg +23 -0
  468. tomwer/resources/gui/icons/warning.png +0 -0
  469. tomwer/synctools/__init__.py +2 -0
  470. tomwer/synctools/axis.py +1 -27
  471. tomwer/synctools/darkref.py +1 -26
  472. tomwer/synctools/datalistener.py +1 -27
  473. tomwer/synctools/datatransfert.py +2 -27
  474. tomwer/synctools/imageloaderthread.py +1 -28
  475. tomwer/synctools/rsyncmanager.py +1 -25
  476. tomwer/synctools/saaxis.py +1 -26
  477. tomwer/synctools/sadeltabeta.py +1 -26
  478. tomwer/synctools/stacks/control/datalistener.py +1 -26
  479. tomwer/synctools/stacks/processingstack.py +4 -33
  480. tomwer/synctools/stacks/reconstruction/axis.py +2 -31
  481. tomwer/synctools/stacks/reconstruction/castvolume.py +12 -43
  482. tomwer/synctools/stacks/reconstruction/dkrefcopy.py +3 -26
  483. tomwer/synctools/stacks/reconstruction/nabu.py +1 -26
  484. tomwer/synctools/stacks/reconstruction/normalization.py +1 -26
  485. tomwer/synctools/stacks/reconstruction/saaxis.py +1 -26
  486. tomwer/synctools/stacks/reconstruction/sadeltabeta.py +1 -26
  487. tomwer/synctools/tests/__init__.py +0 -0
  488. tomwer/synctools/{test → tests}/test_darkRefs.py +16 -40
  489. tomwer/synctools/{test → tests}/test_foldertransfer.py +2 -33
  490. tomwer/synctools/utils/scanstages.py +2 -31
  491. tomwer/tests/__init__.py +1 -0
  492. tomwer/tests/app/test_stitching.py +95 -0
  493. tomwer/tests/datasets.py +1 -5
  494. tomwer/tests/orangecontrib/tomwer/widgets/cluster/tests/test_future_supervisorow.py +48 -0
  495. tomwer/tests/orangecontrib/tomwer/widgets/cluster/tests/test_slurm_clusterow.py +40 -0
  496. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_advancement.py +8 -0
  497. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_data_validator.py +55 -0
  498. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_datadiscovery.py +129 -0
  499. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_datalistener.py +111 -0
  500. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_dataselector.py +69 -0
  501. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_datawatcher.py +411 -0
  502. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_emailow.py +29 -0
  503. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_notifier.py +24 -0
  504. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_nxtomo_concatenate_ow.py +64 -0
  505. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_nxtomomill.py +133 -0
  506. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_reduce_dark_flat_selector.py +40 -0
  507. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_singletomoobj.py +40 -0
  508. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_timerow.py +25 -0
  509. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_tomoobj_series.py +96 -0
  510. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_volume_selector.py +69 -0
  511. orangecontrib/tomwer/widgets/edit/test/test_image_key_editor.py → tomwer/tests/orangecontrib/tomwer/widgets/debugtools/tests/test_dataset_generator.py +17 -16
  512. tomwer/tests/orangecontrib/tomwer/widgets/debugtools/tests/test_object_inspector.py +36 -0
  513. {orangecontrib/tomwer/widgets/edit/test → tomwer/tests/orangecontrib/tomwer/widgets/edit/tests}/test_dark_flat_patch.py +1 -27
  514. tomwer/tests/orangecontrib/tomwer/widgets/edit/tests/test_image_key_editor.py +30 -0
  515. tomwer/tests/orangecontrib/tomwer/widgets/edit/tests/test_nxtomo_editor.py +138 -0
  516. tomwer/tests/orangecontrib/tomwer/widgets/other/tests/test_pythonscript.py +31 -0
  517. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_axis.py +215 -0
  518. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_cast_volumeow.py +58 -0
  519. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_dark_refs_widget.py +136 -0
  520. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_delta_beta_selector.py +15 -0
  521. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_i_norm.py +200 -0
  522. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_nabu_helical_prepare_weights_double.py +20 -0
  523. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_nabu_volume.py +74 -0
  524. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_nabu_widget.py +107 -0
  525. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_sa_delta_beta.py +194 -0
  526. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_saaxis.py +194 -0
  527. tomwer/tests/orangecontrib/tomwer/widgets/stitching/tests/test_zstitching.py +313 -0
  528. tomwer/tests/orangecontrib/tomwer/widgets/tests/test_conditions.py +85 -0
  529. tomwer/tests/orangecontrib/tomwer/widgets/tests/test_darkref.py +225 -0
  530. tomwer/tests/orangecontrib/tomwer/widgets/tests/test_foldertransfert.py +105 -0
  531. tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_dataviewerow.py +57 -0
  532. tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_diffviewerow.py +39 -0
  533. tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_nxtomo_metadata_viewer.py +29 -0
  534. tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_radio_stackow.py +31 -0
  535. tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_sample_movedow.py +46 -0
  536. tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_sinogram_viewerow.py +31 -0
  537. tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_slice_stackow.py +31 -0
  538. tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_volume_viewerow.py +32 -0
  539. tomwer/tests/test_ewoks/test_conversion.py +104 -0
  540. tomwer/tests/test_ewoks/test_single_node_execution.py +87 -0
  541. tomwer/tests/test_ewoks/test_workflows.py +138 -0
  542. tomwer/utils.py +11 -39
  543. tomwer/version.py +3 -3
  544. {tomwer-1.3.27.dist-info → tomwer-1.4.0rc0.dist-info}/LICENSE +3 -3
  545. tomwer-1.4.0rc0.dist-info/METADATA +337 -0
  546. tomwer-1.4.0rc0.dist-info/RECORD +909 -0
  547. {tomwer-1.3.27.dist-info → tomwer-1.4.0rc0.dist-info}/WHEEL +1 -1
  548. {tomwer-1.3.27.dist-info → tomwer-1.4.0rc0.dist-info}/entry_points.txt +1 -0
  549. orangecontrib/tomwer/widgets/control/DataListOW.py +0 -129
  550. orangecontrib/tomwer/widgets/control/TomoObjSerieOW.py +0 -86
  551. orangecontrib/tomwer/widgets/control/VolumeSymLinkOW.py +0 -182
  552. orangecontrib/tomwer/widgets/edit/test/test_nxtomo_editor.py +0 -141
  553. orangecontrib/tomwer/widgets/icat/PublishProcessedDataOW.py +0 -115
  554. orangecontrib/tomwer/widgets/icat/RawDataScreenshotCreatorOW.py +0 -98
  555. orangecontrib/tomwer/widgets/icat/SaveToGalleryAndPublishOW.py +0 -129
  556. orangecontrib/tomwer/widgets/icat/icons/add_gallery.png +0 -0
  557. orangecontrib/tomwer/widgets/icat/icons/add_gallery.svg +0 -82
  558. orangecontrib/tomwer/widgets/icat/icons/raw_screenshots.png +0 -0
  559. orangecontrib/tomwer/widgets/icat/icons/raw_screenshots.svg +0 -143
  560. orangecontrib/tomwer/widgets/visualization/LivesliceOW.py +0 -87
  561. orangecontrib/tomwer/widgets/visualization/icons/liveslice.png +0 -0
  562. orangecontrib/tomwer/widgets/visualization/icons/liveslice.svg +0 -110
  563. tomwer/core/log/logger.py +0 -130
  564. tomwer/core/process/control/test/test_volume_link.py +0 -74
  565. tomwer/core/process/control/tomoobjserie.py +0 -12
  566. tomwer/core/process/control/volumesymlink.py +0 -200
  567. tomwer/core/process/icat/createscreenshots.py +0 -100
  568. tomwer/core/process/icat/gallery.py +0 -377
  569. tomwer/core/process/icat/icatbase.py +0 -36
  570. tomwer/core/process/icat/publish.py +0 -228
  571. tomwer/core/process/icat/screenshots.py +0 -27
  572. tomwer/core/process/reconstruction/test/test_darkref.py +0 -60
  573. tomwer/core/process/reconstruction/test/test_sadeltabeta.py +0 -74
  574. tomwer/core/process/visualization/liveslice.py +0 -6
  575. tomwer/core/progress.py +0 -100
  576. tomwer/core/scan/test/test_edf.py +0 -53
  577. tomwer/core/scan/test/test_future_scan.py +0 -61
  578. tomwer/core/scan/test/test_h5.py +0 -96
  579. tomwer/core/test/test_scanutils.py +0 -53
  580. tomwer/gui/control/emailnotifier.py +0 -174
  581. tomwer/gui/control/serie/seriewaiter.py +0 -28
  582. tomwer/gui/control/test/__init__.py +0 -28
  583. tomwer/gui/control/test/test_datalist.py +0 -96
  584. tomwer/gui/control/test/test_datavalidator.py +0 -54
  585. tomwer/gui/control/test/test_email.py +0 -35
  586. tomwer/gui/control/test/test_process_manager.py +0 -65
  587. tomwer/gui/control/test/test_scanselector.py +0 -67
  588. tomwer/gui/edit/test/__init__.py +0 -28
  589. tomwer/gui/icat/gallery.py +0 -214
  590. tomwer/gui/icat/publish.py +0 -187
  591. tomwer/gui/reconstruction/axis/axis.py +0 -733
  592. tomwer/gui/reconstruction/axis/radioaxis.py +0 -2467
  593. tomwer/gui/stitching/stitching.py +0 -1388
  594. tomwer/gui/test/__init__.py +0 -28
  595. tomwer/gui/test/test_axis_gui.py +0 -34
  596. tomwer/synctools/stacks/edit/darkflatpatch.py +0 -169
  597. tomwer/synctools/stacks/edit/imagekeyeditor.py +0 -135
  598. tomwer/third_part/WaitingOverlay.py +0 -110
  599. tomwer-1.3.27-py3.11-nspkg.pth +0 -1
  600. tomwer-1.3.27.dist-info/METADATA +0 -292
  601. tomwer-1.3.27.dist-info/RECORD +0 -785
  602. tomwer-1.3.27.dist-info/namespace_packages.txt +0 -1
  603. /orangecontrib/tomwer/{widgets/edit/test → tests}/__init__.py +0 -0
  604. {tomwer/core/process/control/test → orangecontrib/tomwer/tutorials/id16b}/__init__.py +0 -0
  605. {tomwer/core/process/icat → orangecontrib/tomwer/widgets/cluster/tests}/__init__.py +0 -0
  606. /orangecontrib/tomwer/widgets/control/icons/{tomoobjserie.png → tomoobjseries.png} +0 -0
  607. {tomwer/core/process/reconstruction/test → orangecontrib/tomwer/widgets/control/tests}/__init__.py +0 -0
  608. /orangecontrib/tomwer/widgets/{icat → dataportal}/icons/publish_processed_data.png +0 -0
  609. /orangecontrib/tomwer/widgets/{icat → dataportal}/icons/publish_processed_data.svg +0 -0
  610. {tomwer/core/process/test → orangecontrib/tomwer/widgets/debugtools/tests}/__init__.py +0 -0
  611. {tomwer/core/scan/test → orangecontrib/tomwer/widgets/edit/tests}/__init__.py +0 -0
  612. {tomwer/core/test → orangecontrib/tomwer/widgets/other/tests}/__init__.py +0 -0
  613. {tomwer/gui/cluster/test → orangecontrib/tomwer/widgets/reconstruction/tests}/__init__.py +0 -0
  614. {tomwer/gui/control/serie → orangecontrib/tomwer/widgets/stitching/tests}/__init__.py +0 -0
  615. {tomwer/gui/icat → orangecontrib/tomwer/widgets/tests}/__init__.py +0 -0
  616. {tomwer/gui/reconstruction/test → orangecontrib/tomwer/widgets/visualization/tests}/__init__.py +0 -0
  617. /tomwer/{synctools/stacks/edit → app/stitching}/__init__.py +0 -0
  618. /tomwer/{synctools/test → core/process/control/tests}/__init__.py +0 -0
  619. /tomwer/core/process/control/{test → tests}/test_email.py +0 -0
  620. /tomwer/core/process/control/{test → tests}/test_h52nx_process.py +0 -0
  621. /tomwer/{third_part → core/process/drac}/__init__.py +0 -0
  622. /tomwer/core/process/reconstruction/{test → tests}/test_axis_params.py +0 -0
  623. /tomwer/core/process/reconstruction/{test → tests}/test_darkref_copy.py +0 -0
  624. /tomwer/core/process/reconstruction/{test → tests}/test_paramsbase.py +0 -0
  625. /tomwer/core/process/reconstruction/{test → tests}/test_utils.py +0 -0
  626. /tomwer/core/scan/{test → tests}/test_scan.py +0 -0
  627. /tomwer/gui/control/{serie → series}/nxtomoconcatenate.py +0 -0
  628. /tomwer/gui/control/{test → tests}/test_datadiscovery.py +0 -0
  629. /tomwer/gui/control/{test → tests}/test_reducedarkflat_selector.py +0 -0
  630. /tomwer/gui/control/{test → tests}/test_single_tomo_obj.py +0 -0
  631. {orangecontrib/tomwer/widgets/edit/test → tomwer/tests/orangecontrib/tomwer/widgets/edit/tests}/test_image_key_upgrader.py +0 -0
  632. {tomwer-1.3.27.dist-info → tomwer-1.4.0rc0.dist-info}/top_level.txt +0 -0
@@ -1,31 +1,5 @@
1
1
  # coding: utf-8
2
- # /*##########################################################################
3
- #
4
- # Copyright (c) 2016-2017 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__ = "04/03/2019"
2
+ from __future__ import annotations
29
3
 
30
4
  import copy
31
5
  import functools
@@ -50,7 +24,7 @@ from tomwer.core.process.reconstruction.axis import AxisTask
50
24
  from tomwer.core.process.reconstruction.axis.mode import AxisMode
51
25
  from tomwer.core.scan.nxtomoscan import NXtomoScan
52
26
  from tomwer.core.scan.scanbase import TomwerScanBase, _TomwerBaseDock
53
- from tomwer.gui.reconstruction.axis import AxisWindow
27
+ from tomwer.gui.reconstruction.axis import AxisMainWindow
54
28
  from tomwer.synctools.axis import QAxisRP
55
29
  from tomwer.synctools.stacks.reconstruction.axis import AxisProcessStack
56
30
 
@@ -64,7 +38,7 @@ class AxisOW(SuperviseOW, WidgetLongProcessing):
64
38
  Widget used to defined the center of rotation axis to be used for a
65
39
  reconstruction.
66
40
 
67
- :param bool _connect_handler: True if we want to store the modifications
41
+ :param _connect_handler: True if we want to store the modifications
68
42
  on the setting. Need for unit test since
69
43
  keep alive qt widgets.
70
44
  """
@@ -112,12 +86,12 @@ class AxisOW(SuperviseOW, WidgetLongProcessing):
112
86
  class Outputs:
113
87
  data = Output(name="data", type=TomwerScanBase, doc="one scan to be process")
114
88
 
115
- def __init__(self, parent=None, axis_params=None):
89
+ def __init__(self, parent=None, axis_params: QAxisRP | None = None):
116
90
  """
117
91
 
118
92
  :param parent: QWidget parent or None
119
93
  :param _connect_handler: used for CI, because if connected fails CI
120
- :param QAxisRP axis_params: reconstruction parameters
94
+ :param axis_params: reconstruction parameters
121
95
  """
122
96
  if axis_params is not None:
123
97
  if not isinstance(axis_params, QAxisRP):
@@ -160,7 +134,7 @@ class AxisOW(SuperviseOW, WidgetLongProcessing):
160
134
  axis_params=self._axis_params, process_id=self.process_id
161
135
  )
162
136
 
163
- self._widget = AxisWindow(parent=self, axis_params=self._axis_params)
137
+ self._widget = AxisMainWindow(parent=self, axis_params=self._axis_params)
164
138
 
165
139
  self._layout = gui.vBox(self.mainArea, self.name).layout()
166
140
  self._layout.setContentsMargins(0, 0, 0, 0)
@@ -169,10 +143,10 @@ class AxisOW(SuperviseOW, WidgetLongProcessing):
169
143
 
170
144
  # expose API
171
145
  self.setMode = self._widget.setMode
172
- self.getRadioMode = self._widget.getRadioMode
146
+ self.getMode = self._widget.getMode
173
147
  self.getEstimatedCor = self._widget.getEstimatedCor
174
148
  self.setEstimatedCor = self._widget.setEstimatedCor
175
- self.getAxis = self._widget.getAxis
149
+ self.getAxisParams = self._widget.getAxisParams
176
150
  self.setValueLock = self._widget.setValueLock
177
151
  self._setModeLockFrmSettings = self._widget._setModeLockFrmSettings
178
152
  self._setValueLockFrmSettings = self._widget._setValueLockFrmSettings
@@ -184,7 +158,7 @@ class AxisOW(SuperviseOW, WidgetLongProcessing):
184
158
  # if the mode is manual or read ignore lock
185
159
  if not (
186
160
  mode_lock is True
187
- and self.getRadioMode() in (AxisMode.manual, AxisMode.read)
161
+ and self.getMode() in (AxisMode.manual, AxisMode.read)
188
162
  ):
189
163
  self._setModeLockFrmSettings(mode_lock)
190
164
 
@@ -201,7 +175,7 @@ class AxisOW(SuperviseOW, WidgetLongProcessing):
201
175
  logger.warning(f"Fail to load settings. Error is {str(e)}")
202
176
 
203
177
  # expose API
204
- self._applyBut = self._widget._axisWidget._controlWidget._applyBut
178
+ self._applyBut = self._widget._controlWidget._applyBut
205
179
  # connect Signal / Slot
206
180
  self._widget.sigComputationRequested.connect(self.__compute)
207
181
  self._widget.sigApply.connect(self.__validate)
@@ -211,15 +185,15 @@ class AxisOW(SuperviseOW, WidgetLongProcessing):
211
185
 
212
186
  self._axis_params.sigChanged.connect(self._updateSettingsVals)
213
187
  self._widget.sigAxisEditionLocked.connect(self._updateSettingsVals)
214
- self._widget.sigMethodChanged.connect(self._updateSettingsVals)
188
+ self._widget.sigModeChanged.connect(self._updateSettingsVals)
215
189
  self._widget.sigLockModeChanged.connect(self._updateSettingsVals)
216
190
 
217
- self._widget._axisWidget._radioAxis._controlWidget._mainWidget._calculationWidget._nearValueCB.toggled.connect(
191
+ self._widget._axisWidget._settingsWidget._mainWidget._calculationWidget._nearValueCB.toggled.connect(
218
192
  self._updateSettingsVals
219
193
  )
220
194
 
221
195
  # handle special case of the manual mode
222
- # force axis to manual because not handled by the widget setup dircetly
196
+ # force axis to manual because not handled by the widget setup directly
223
197
  if original_mode in (
224
198
  AxisMode.manual,
225
199
  AxisMode.read,
@@ -230,11 +204,11 @@ class AxisOW(SuperviseOW, WidgetLongProcessing):
230
204
 
231
205
  self.setMode(original_mode)
232
206
  # force gui update
233
- self._widget.sigMethodChanged.emit("manual")
207
+ self._widget.sigModeChanged.emit("manual")
234
208
  # hard fix, but this widget has to be redone and rework anyway
235
- self._widget._axisWidget._radioAxis._controlWidget._mainWidget._calculationWidget._modeChanged()
209
+ self._widget._axisWidget._settingsWidget._mainWidget._calculationWidget._modeChanged()
236
210
  if original_cor is not None:
237
- self._widget._axisWidget._controlWidget._positionInfo.setPosition(
211
+ self._widget._controlWidget._positionInfo.setPosition(
238
212
  relative_cor=original_cor, abs_cor=None
239
213
  )
240
214
 
@@ -316,7 +290,9 @@ class AxisOW(SuperviseOW, WidgetLongProcessing):
316
290
  The Axis will process the next scan in the stack.
317
291
  """
318
292
  if self.__scan:
319
- if self.getRadioMode() is AxisMode.manual:
293
+ if self.getMode() is AxisMode.manual:
294
+ # when value is set from manual mode we need to retrieve it from the GUI `_axis_param`. Else it has already been set
295
+ # to the scan `_axis_params`
320
296
  if (
321
297
  self.__scan._axis_params.frame_width is None
322
298
  and self.__scan.dim_1 is not None
@@ -376,7 +352,7 @@ class AxisOW(SuperviseOW, WidgetLongProcessing):
376
352
  "gui": {
377
353
  "mode_is_lock": self.isModeLocked(),
378
354
  "value_is_lock": self.isValueLock(),
379
- "auto_update_estimated_cor": self._widget._axisWidget.getAutoUpdateEstimatedCor(),
355
+ "auto_update_estimated_cor": self._widget.getAutoUpdateEstimatedCor(),
380
356
  },
381
357
  }
382
358
 
@@ -392,7 +368,7 @@ class AxisOW(SuperviseOW, WidgetLongProcessing):
392
368
  def _lock_axis_controls(self, lock):
393
369
  """
394
370
 
395
- :param bool lock: lock the axis controls to avoid modification of the
371
+ :param lock: lock the axis controls to avoid modification of the
396
372
  requested options, method... of the axis calculation
397
373
  when this value is under calculation.
398
374
  """
@@ -533,9 +509,7 @@ class AxisOW(SuperviseOW, WidgetLongProcessing):
533
509
 
534
510
  def _updatePosition(self, scan):
535
511
  if scan.axis_params is not None:
536
- self._widget.setPosition(
537
- frm=None, value=scan.axis_params.relative_cor_value
538
- )
512
+ self._widget.setPosition(relative_value=scan.axis_params.relative_cor_value)
539
513
 
540
514
  @Inputs.data_recompute_axis
541
515
  def reprocess(self, scan):
@@ -559,9 +533,34 @@ class AxisOW(SuperviseOW, WidgetLongProcessing):
559
533
 
560
534
  def keyPressEvent(self, event):
561
535
  """The event has to be filtered since we have some children
562
- that can be edited using the 'enter' key as defining the cor manually
536
+ that can be edited using the 'enter' key as defining the cor manually
563
537
  (see #481)). As we are in a dialog this automatically trigger
564
538
  'accepted'. See https://forum.qt.io/topic/5080/preventing-enter-key-from-triggering-ok-in-qbuttonbox-in-particular-qlineedit-qbuttonbox/5
565
539
  """
566
540
  if event.key() != qt.Qt.Key_Enter:
567
541
  super().keyPressEvent(event)
542
+
543
+ # expose API
544
+ def setMode(self, mode):
545
+ self._widget.setMode(mode=mode)
546
+
547
+ def getMode(self):
548
+ return self._widget.getMode()
549
+
550
+ def getEstimatedCor(self):
551
+ return self._widget.getEstimatedCor()
552
+
553
+ def setEstimatedCor(self, value):
554
+ self._widget.setEstimatedCor(value=value)
555
+
556
+ def getAxisParams(self):
557
+ return self._widget.getAxisParams()
558
+
559
+ def setValueLock(self, lock: bool):
560
+ self._widget.setValueLock(lock=lock)
561
+
562
+ def _setModeLockFrmSettings(self, lock: bool):
563
+ self._widget._setModeLockFrmSettings(lock=lock)
564
+
565
+ def _setValueLockFrmSettings(self, lock: bool):
566
+ self._widget._setValueLockFrmSettings(lock=lock)
@@ -1,50 +1,21 @@
1
- # coding: utf-8
2
- # /*##########################################################################
3
- #
4
- # Copyright (c) 2016-2017 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__ = "15/12/2021"
1
+ from __future__ import annotations
29
2
 
30
3
  import logging
31
- from typing import Optional
32
4
 
33
5
  from orangewidget import gui
34
6
  from orangewidget.settings import Setting
35
7
  from orangewidget.widget import Input, Output
36
- from processview.core.manager.manager import DatasetState, ProcessManager
37
8
  from silx.gui import qt
38
9
 
39
10
  import tomwer.core.process.reconstruction.nabu.castvolume
40
11
  from orangecontrib.tomwer.widgets.utils import WidgetLongProcessing
41
- from tomwer.core import settings
42
12
  from tomwer.core.cluster.cluster import SlurmClusterConfiguration
43
13
  from tomwer.core.futureobject import FutureTomwerObject
44
14
  from tomwer.core.scan.scanbase import TomwerScanBase
45
- from tomwer.core.utils.lbsram import is_low_on_memory
46
15
  from tomwer.core.volume.volumebase import TomwerVolumeBase
47
16
  from tomwer.gui.reconstruction.nabu.castvolume import CastVolumeWidget
17
+ from tomwer.gui.utils.qt_utils import block_signals
18
+
48
19
  from tomwer.synctools.stacks.reconstruction.castvolume import CastVolumeProcessStack
49
20
  from tomwer.utils import docstring
50
21
 
@@ -59,7 +30,7 @@ class CastNabuVolumeOW(WidgetLongProcessing, SuperviseOW):
59
30
 
60
31
  This is done in a separate process because:
61
32
 
62
- * this is done in cpu when nabu reconstruct on GPU and this should free sooner GPU ressources with the current architecture.
33
+ * this is done in cpu when nabu reconstruct on GPU and this should free sooner GPU resources with the current architecture.
63
34
  * this is not included in nabu but also done as post processing.
64
35
  * limitation is that not having computed the histogram during volume construction will slow down the cast
65
36
 
@@ -164,61 +135,43 @@ class CastNabuVolumeOW(WidgetLongProcessing, SuperviseOW):
164
135
  return super().__new__(cls, *args, **kwargs)
165
136
 
166
137
  @Inputs.data
167
- def process_data(self, scan: Optional[TomwerScanBase]):
168
- self._process_data(scan)
138
+ def process_data(self, scan: TomwerScanBase | None):
139
+ self._process(scan=scan, volume=None)
169
140
 
170
- def _process_data(self, scan: Optional[TomwerScanBase]):
171
- if scan is None:
141
+ def _process(self, scan: TomwerScanBase | None, volume: TomwerVolumeBase | None):
142
+ if scan is None and volume is None:
172
143
  return
173
- if not isinstance(scan, TomwerScanBase):
144
+ # check types
145
+ if scan is not None and not isinstance(scan, TomwerScanBase):
174
146
  raise TypeError(
175
147
  f"scan is expected to be an instance of {TomwerScanBase} not {type(scan)}"
176
148
  )
177
- if (
178
- settings.isOnLbsram(scan)
179
- and is_low_on_memory(settings.get_lbsram_path()) is True
180
- ):
181
- ProcessManager().notify_dataset_state(
182
- dataset=scan,
183
- process=self,
184
- state=DatasetState.SKIPPED,
185
- )
186
- _logger.processSkipped(
187
- f"skip volume cast for {str(scan)} because lbsram is almost full. Try to free it"
149
+ if volume is not None and not isinstance(volume, TomwerVolumeBase):
150
+ raise TypeError(
151
+ f"volume is expected to be an instance of {TomwerVolumeBase} not {type(volume)}"
188
152
  )
189
- self.Outputs.data.send(scan)
190
- else:
191
- self._processingStack.add(scan, configuration=self.getConfiguration())
153
+
154
+ self._processingStack.add(scan or volume, configuration=self.getConfiguration())
192
155
 
193
156
  @docstring
194
157
  def reprocess(self, dataset):
195
158
  if isinstance(dataset, TomwerScanBase):
196
- self._process_data(dataset)
159
+ self._process(scan=dataset, volume=None)
197
160
  elif isinstance(dataset, TomwerVolumeBase):
198
- self._process_volume(dataset)
161
+ self._process(scan=None, volume=dataset)
199
162
  else:
200
163
  raise TypeError("dataset is expected to be an instance of ''")
201
164
 
202
165
  @Inputs.cluster_in
203
- def setCluster(self, slurm_cluster: Optional[SlurmClusterConfiguration]):
166
+ def setCluster(self, slurm_cluster: SlurmClusterConfiguration | None):
204
167
  assert isinstance(
205
168
  slurm_cluster, (type(None), SlurmClusterConfiguration)
206
169
  ), f"Expect None of SlurmClusterConfiguration. Not {type(slurm_cluster)}"
207
170
  self._slurmCluster = slurm_cluster
208
171
 
209
172
  @Inputs.volume
210
- def process_volume(self, volume: Optional[TomwerVolumeBase]):
211
- self._process_volume(volume)
212
-
213
- def _process_volume(self, volume: Optional[TomwerVolumeBase]):
214
- if volume is None:
215
- return
216
- if not isinstance(volume, TomwerVolumeBase):
217
- raise TypeError(
218
- f"volume is expected to be an instance of {TomwerVolumeBase} not {type(volume)}"
219
- )
220
- else:
221
- self._processingStack.add(volume, configuration=self.getConfiguration())
173
+ def process_volume(self, volume: TomwerVolumeBase | None):
174
+ self._process(scan=None, volume=volume)
222
175
 
223
176
  def getConfiguration(self) -> dict:
224
177
  config = self._window.getConfiguration()
@@ -226,7 +179,8 @@ class CastNabuVolumeOW(WidgetLongProcessing, SuperviseOW):
226
179
  return config
227
180
 
228
181
  def setConfiguration(self, configuration: dict) -> None:
229
- self._window.setConfiguration(configuration)
182
+ with block_signals(self._window):
183
+ self._window.setConfiguration(configuration)
230
184
 
231
185
  def _updateConfig(self):
232
186
  self._ewoks_default_inputs = {
@@ -1,32 +1,5 @@
1
1
  # coding: utf-8
2
- # /*##########################################################################
3
- #
4
- # Copyright (c) 2016-2017 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__ = ["C. Nemoz", "H. Payno"]
27
- __license__ = "MIT"
28
- __date__ = "10/01/2018"
29
-
2
+ from __future__ import annotations
30
3
 
31
4
  import copy
32
5
  import logging
@@ -113,10 +86,10 @@ class DarkRefAndCopyOW(SuperviseOW, WidgetLongProcessing):
113
86
  doc="DataUrl of the reduced flat. Key is the relative position, value is the reduced flat",
114
87
  )
115
88
 
116
- def __init__(self, parent=None, reconsparams=None):
89
+ def __init__(self, parent=None, reconsparams: QDKRFRP | None = None):
117
90
  """
118
91
 
119
- :param QKRFRP reconsparams: reconstruction parameters
92
+ :param reconsparams: reconstruction parameters
120
93
  """
121
94
  SuperviseOW.__init__(self, parent)
122
95
  WidgetLongProcessing.__init__(self)
@@ -1,3 +1,5 @@
1
+ # from __future__ import annotations
2
+
1
3
  # import logging
2
4
 
3
5
  # from orangewidget import gui
@@ -159,26 +161,26 @@
159
161
  # except Exception:
160
162
  # pass
161
163
 
162
- # def _notify_state(self):
163
- # try:
164
- # task_executor = self.sender()
165
- # task_suceeded = task_executor.succeeded
166
- # scan = task_executor.current_task.outputs.data
167
- # if task_suceeded:
168
- # self.notify_succeed(scan=scan)
169
- # else:
170
- # self.notify_failed(scan=scan)
171
- # except Exception as e:
172
- # _logger.error(f"failed to handle task finished callback. Raiseon is {e}")
173
-
174
- # @Inputs.data
175
- # def process_data(self, scan: Optional[TomwerScanBase]):
176
- # if scan is None:
177
- # return
164
+ # def _notify_state(self):
165
+ # try:
166
+ # task_executor = self.sender()
167
+ # task_suceeded = task_executor.succeeded
168
+ # scan = task_executor.current_task.outputs.data
169
+ # if task_suceeded:
170
+ # self.notify_succeed(scan=scan)
178
171
  # else:
179
- # self.__scan = scan
180
- # self.notify_pending(scan=scan)
181
- # self.execute_ewoks_task()
172
+ # self.notify_failed(scan=scan)
173
+ # except Exception as e:
174
+ # _logger.error(f"failed to handle task finished callback. Reason is {e}")
175
+
176
+ # @Inputs.data
177
+ # def process_data(self, scan: TomwerScanBase | None):
178
+ # if scan is None:
179
+ # return
180
+ # else:
181
+ # self.__scan = scan
182
+ # self.notify_pending(scan=scan)
183
+ # self.execute_ewoks_task()
182
184
 
183
185
  # def sizeHint(self) -> qt.QSize:
184
186
  # return qt.QSize(650, 60)
@@ -1,38 +1,10 @@
1
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__ = ["C. Nemoz", "H. Payno"]
27
- __license__ = "MIT"
28
- __date__ = "14/02/2020"
29
-
30
-
31
- import os
2
+
3
+ from __future__ import annotations
4
+
32
5
  import copy
33
6
  import logging
34
7
  from contextlib import AbstractContextManager
35
- from typing import Optional
36
8
 
37
9
  from orangewidget import gui
38
10
  from orangewidget.settings import Setting
@@ -45,10 +17,7 @@ from tomwer.core.futureobject import FutureTomwerObject
45
17
  from tomwer.core.process.reconstruction.nabu.nabuslices import NabuSlicesTask
46
18
  from tomwer.core.scan.scanbase import TomwerScanBase, _TomwerBaseDock
47
19
  from tomwer.core.volume.volumefactory import VolumeFactory
48
- from tomwer.core.process.icat.gallery import (
49
- IcatScreenshots,
50
- deduce_dataset_gallery_location,
51
- )
20
+
52
21
  from tomwer.gui.reconstruction.nabu.slices import NabuWindow
53
22
  from tomwer.synctools.stacks.reconstruction.nabu import NabuSliceProcessStack
54
23
 
@@ -114,12 +83,6 @@ class NabuOW(WidgetLongProcessing, SuperviseOW):
114
83
 
115
84
  slice_urls = Output(name="slice urls", type=tuple, doc="tuple of urls created")
116
85
 
117
- screenshots = Output(
118
- name="screenshots",
119
- type=IcatScreenshots,
120
- doc="screenshots that can be saved",
121
- )
122
-
123
86
  class DialogCM(AbstractContextManager):
124
87
  """Simple context manager to hide / show button dialogs"""
125
88
 
@@ -133,17 +96,6 @@ class NabuOW(WidgetLongProcessing, SuperviseOW):
133
96
  self._dialogButtonsBox.hide()
134
97
 
135
98
  def __init__(self, parent=None):
136
- """
137
- Widget which read the .hdf5 generated by octave and modify it.
138
- Then run a subprocess to call octave and run ftseries
139
-
140
- :param bool _connect_handler: True if we want to store the modifications
141
- on the setting. Need for unit test since
142
- keep alive qt widgets.
143
- :param recons_params: reconsparameter to be used by the FTWidget.
144
- If None, some will be created.
145
- :type: :class:`QReconsParams`
146
- """
147
99
  SuperviseOW.__init__(self, parent)
148
100
  WidgetLongProcessing.__init__(self)
149
101
  self._slurmCluster = None
@@ -220,11 +172,7 @@ class NabuOW(WidgetLongProcessing, SuperviseOW):
220
172
  from tomwer.synctools.axis import QAxisRP
221
173
 
222
174
  scan.axis_params = QAxisRP()
223
- scan.axis_params.set_relative_value(float(r_cor) - scan.dim_1 / 2.0)
224
- try:
225
- scan.axis_params.set_relative_value(float(r_cor) - scan.dim_1 / 2.0)
226
- except Exception:
227
- pass
175
+ scan.axis_params.set_relative_value(float(r_cor))
228
176
 
229
177
  self.show()
230
178
  with NabuOW.DialogCM(self._buttons):
@@ -254,7 +202,7 @@ class NabuOW(WidgetLongProcessing, SuperviseOW):
254
202
  self._processingStack._process_next()
255
203
 
256
204
  @Inputs.cluster_in
257
- def setCluster(self, slurm_cluster: Optional[SlurmClusterConfiguration]):
205
+ def setCluster(self, slurm_cluster: SlurmClusterConfiguration | None):
258
206
  assert isinstance(
259
207
  slurm_cluster, (type(None), SlurmClusterConfiguration)
260
208
  ), f"Expect None of SlurmClusterConfiguration. Not {type(slurm_cluster)}"
@@ -275,17 +223,6 @@ class NabuOW(WidgetLongProcessing, SuperviseOW):
275
223
  slice_urls = tuple(slice_urls)
276
224
  # provide list of reconstructed slices
277
225
  self.Outputs.slice_urls.send(slice_urls)
278
- # provide list of screenshots
279
- self.Outputs.screenshots.send(
280
- IcatScreenshots(
281
- data_dir=deduce_dataset_gallery_location(scan),
282
- screenshots={
283
- os.path.splitext(os.path.basename(url.file_path()))[0]: url
284
- for url in slice_urls
285
- },
286
- scan=scan,
287
- )
288
- )
289
226
 
290
227
  self.sigScanReady.emit(scan)
291
228
  if future_tomo_obj is not None:
@@ -322,7 +259,7 @@ class NabuOW(WidgetLongProcessing, SuperviseOW):
322
259
 
323
260
  def keyPressEvent(self, event):
324
261
  """The event has to be filtered since we have some children
325
- that can be edited using the 'enter' key as defining the cor manually
262
+ that can be edited using the 'enter' key as defining the cor manually
326
263
  (see #481)). As we are in a dialog this automatically trigger
327
264
  'accepted'. See https://forum.qt.io/topic/5080/preventing-enter-key-from-triggering-ok-in-qbuttonbox-in-particular-qlineedit-qbuttonbox/5
328
265
  """