tomwer 1.3.27__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.27.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.27.dist-info → tomwer-1.4.0.dist-info}/WHEEL +1 -1
  553. {tomwer-1.3.27.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 -1388
  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.27-py3.11-nspkg.pth +0 -1
  607. tomwer-1.3.27.dist-info/METADATA +0 -292
  608. tomwer-1.3.27.dist-info/RECORD +0 -785
  609. tomwer-1.3.27.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.27.dist-info → tomwer-1.4.0.dist-info}/top_level.txt +0 -0
@@ -1,35 +1,6 @@
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"
29
-
1
+ from __future__ import annotations
30
2
 
31
3
  import logging
32
- from typing import Optional
33
4
 
34
5
  from silx.gui import qt
35
6
  from silx.gui.utils import blockSignals
@@ -90,9 +61,9 @@ class CastVolumeWidget(qt.QWidget):
90
61
  )
91
62
  self.layout().addWidget(self._minMaxAuto, 2, 1, 1, 1)
92
63
 
93
- self._minPixValue = qt.QLineEdit("", self)
64
+ self._minPixValue = qt.QLineEdit("0.0", self)
94
65
  self._minPixValue.setPlaceholderText("min")
95
- self._maxPixValue = qt.QLineEdit("", self)
66
+ self._maxPixValue = qt.QLineEdit("0.0", self)
96
67
  self._maxPixValue.setPlaceholderText("max")
97
68
  validator = qt.QDoubleValidator(self)
98
69
  validator.setNotation(qt.QDoubleValidator.ScientificNotation)
@@ -181,6 +152,10 @@ class CastVolumeWidget(qt.QWidget):
181
152
  self._useDefaultSaveDirQCB.toggled.connect(self._updateOutputDirVis)
182
153
  self._minMaxAuto.toggled.connect(self._configChanged)
183
154
  self._minMaxAuto.toggled.connect(self._updatePixMinMaxVis)
155
+ self._minPixValue.textChanged.connect(self._configChanged)
156
+ self._maxPixValue.textChanged.connect(self._configChanged)
157
+ self._lowPercentileQSB.valueChanged.connect(self._configChanged)
158
+ self._highPercentileQSB.valueChanged.connect(self._configChanged)
184
159
 
185
160
  def _updateCRatiosVis(self, *args, **kwargs):
186
161
  self._cRatiosLabel.setVisible(
@@ -225,7 +200,7 @@ class CastVolumeWidget(qt.QWidget):
225
200
  def setOverwrite(self, remove) -> None:
226
201
  self._overwriteCB.setChecked(remove)
227
202
 
228
- def getDataMin(self) -> Optional[float]:
203
+ def getDataMin(self) -> float | None:
229
204
  if (
230
205
  self._minMaxAuto.isChecked()
231
206
  or self._minPixValue.text().replace(" ", "") == ""
@@ -234,14 +209,15 @@ class CastVolumeWidget(qt.QWidget):
234
209
  else:
235
210
  return float(self._minPixValue.text())
236
211
 
237
- def setDataMin(self, value: Optional[float]) -> None:
212
+ def setDataMin(self, value: float | None) -> None:
238
213
  with blockSignals(self._minMaxAuto):
239
214
  self._minMaxAuto.setChecked(value is None)
240
215
  if value is not None:
241
216
  with blockSignals(self._minPixValue):
242
217
  self._minPixValue.setText(str(value))
218
+ self._updatePixMinMaxVis()
243
219
 
244
- def getDataMax(self) -> Optional[float]:
220
+ def getDataMax(self) -> float | None:
245
221
  if (
246
222
  self._minMaxAuto.isChecked()
247
223
  or self._maxPixValue.text().replace(" ", "") == ""
@@ -250,14 +226,15 @@ class CastVolumeWidget(qt.QWidget):
250
226
  else:
251
227
  return float(self._maxPixValue.text())
252
228
 
253
- def setDataMax(self, value: Optional[float]) -> None:
229
+ def setDataMax(self, value: float | None) -> None:
254
230
  with blockSignals(self._minMaxAuto):
255
231
  self._minMaxAuto.setChecked(value is None)
256
232
  if value is not None:
257
233
  with blockSignals(self._maxPixValue):
258
234
  self._maxPixValue.setText(str(value))
235
+ self._updatePixMinMaxVis()
259
236
 
260
- def setCompressionRatios(self, c_ratios: Optional[list]):
237
+ def setCompressionRatios(self, c_ratios: list | None):
261
238
  if c_ratios in (None, tuple(), list()):
262
239
  c_ratios = ""
263
240
  self._cRatiosQLE.setText(str(c_ratios))
@@ -271,29 +248,41 @@ class CastVolumeWidget(qt.QWidget):
271
248
  else:
272
249
  return None
273
250
 
251
+ def getRescalePercentiles(self) -> tuple[int | None, int | None]:
252
+ if self._minMaxAuto.isChecked():
253
+ return self._lowPercentileQSB.value(), self._highPercentileQSB.value()
254
+ else:
255
+ return None, None
256
+
257
+ def setRescalePercentiles(self, low: int | None, high: int | None) -> tuple:
258
+ if low is not None:
259
+ with blockSignals(self._minMaxAuto):
260
+ self._minMaxAuto.setChecked(True)
261
+ self._lowPercentileQSB.setValue(low)
262
+ if high is not None:
263
+ with blockSignals(self._minMaxAuto):
264
+ self._minMaxAuto.setChecked(True)
265
+ self._highPercentileQSB.setValue(high)
266
+ self._updatePixMinMaxVis()
267
+
274
268
  def getConfiguration(self) -> dict:
275
269
  rescale_min_percentile, rescale_max_percentile = self.getRescalePercentiles()
270
+ if (rescale_min_percentile, rescale_max_percentile) == (None, None):
271
+ data_min, data_max = self.getDataMin(), self.getDataMax()
272
+ else:
273
+ data_min, data_max = None, None
276
274
  return {
277
275
  "output_data_type": self.getOutputDataType(),
278
- "output_type": self.getOutputFileFormat().value,
276
+ "output_file_format": self.getOutputFileFormat().value,
279
277
  "output_dir": self.getOutputDir(),
280
278
  "overwrite": self.getOverwrite(),
281
279
  "rescale_min_percentile": rescale_min_percentile,
282
280
  "rescale_max_percentile": rescale_max_percentile,
283
- "data_min": self.getDataMin(),
284
- "data_max": self.getDataMax(),
281
+ "data_min": data_min,
282
+ "data_max": data_max,
285
283
  "compression_ratios": self.getCompressionRatios(),
286
284
  }
287
285
 
288
- def getRescalePercentiles(self) -> tuple:
289
- return self._lowPercentileQSB.value(), self._highPercentileQSB.value()
290
-
291
- def setRescalePercentiles(self, low, high) -> tuple:
292
- if low is not None:
293
- self._lowPercentileQSB.setValue(low)
294
- if high is not None:
295
- self._highPercentileQSB.setValue(high)
296
-
297
286
  def setConfiguration(self, config: dict) -> None:
298
287
  output_data_type = config.get("output_data_type", None)
299
288
  if output_data_type is not None:
@@ -307,16 +296,8 @@ class CastVolumeWidget(qt.QWidget):
307
296
  overwrite = config.get("overwrite", None)
308
297
  if overwrite is not None:
309
298
  self.setOverwrite(overwrite)
310
- if "rescale_percentiles" in config:
311
- rescale_min_percentile, rescale_max_percentile = config[
312
- "rescale_percentiles"
313
- ]
314
- _logger.warning(
315
- "'rescale_percentiles' is deprecated. Please use 'rescale_min_percentile' and 'rescale_max_percentile' instead"
316
- )
317
- else:
318
- rescale_min_percentile = config.get("rescale_min_percentile", None)
319
- rescale_max_percentile = config.get("rescale_max_percentile", None)
299
+ rescale_min_percentile = config.get("rescale_min_percentile", None)
300
+ rescale_max_percentile = config.get("rescale_max_percentile", None)
320
301
 
321
302
  self.setRescalePercentiles(rescale_min_percentile, rescale_max_percentile)
322
303
  if "data_min" in config:
@@ -1,31 +1,5 @@
1
1
  # coding: utf-8
2
- # /*##########################################################################
3
- #
4
- # Copyright (c) 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__ = "02/12/2021"
2
+ from __future__ import annotations
29
3
 
30
4
 
31
5
  from silx.gui import qt
@@ -39,12 +13,12 @@ def check_dark_series(scan: NXtomoScan, logger=None, user_input: bool = True) ->
39
13
  """
40
14
  check:
41
15
  - if scan has computed_dark attached. If there is more than one then ask confirmation to the user to process the dataset
42
- - else if the NXTomo has more than one serie of dark. Otherwise ask confirmation to the user to process the dataset
16
+ - else if the NXTomo has more than one series of dark. Otherwise ask confirmation to the user to process the dataset
43
17
 
44
18
  ask confirmation for processing is done by a pop up dialog.
45
19
 
46
- :param NXtomoScan scan: scan to check
47
- :param bool user_input: if True and if n series of flat is invalid then ask the user to confirm the processing. Else print a warning and refuse processing
20
+ :param scan: scan to check
21
+ :param user_input: if True and if n series of flat is invalid then ask the user to confirm the processing. Else print a warning and refuse processing
48
22
 
49
23
  :return: True if processing can be done else False
50
24
  :note: user can 'force' the processing to be done
@@ -62,9 +36,9 @@ def check_dark_series(scan: NXtomoScan, logger=None, user_input: bool = True) ->
62
36
  image_key_values=image_keys, image_key_type=ImageKey.DARK_FIELD
63
37
  )
64
38
  if n_series != 1:
65
- text = f"{n_series} serie(s) of dark found when one expected. Nabu won't be able to run reconstruction (flat field will fail)."
39
+ text = f"{n_series} series of dark found when one expected. Nabu won't be able to run reconstruction (flat field will fail)."
66
40
  if n_series > 1:
67
- text += "\nYou can edit image_keys from the `image-key-editor` to ignore a serie (invalid all keys of series you want to ignore)."
41
+ text += "\nYou can edit image_keys from the `image-key-editor` to ignore a series (invalid all keys of series you want to ignore)."
68
42
  if user_input is False:
69
43
  text += "\n skip processing"
70
44
  if logger is not None:
@@ -84,7 +58,7 @@ def check_dark_series(scan: NXtomoScan, logger=None, user_input: bool = True) ->
84
58
 
85
59
  def check_flat_series(scan: NXtomoScan, logger, user_input: bool = True) -> bool:
86
60
  """
87
- Insure the scan contains at least one serie of flat. Otherwise warn the user nabu will not be able to process
61
+ Insure the scan contains at least one series of flat. Otherwise warn the user nabu will not be able to process
88
62
  """
89
63
  if not isinstance(scan, NXtomoScan):
90
64
  raise TypeError(
@@ -1,34 +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__ = "11/02/2020"
29
-
30
-
31
- from typing import Union
1
+ from __future__ import annotations
32
2
 
33
3
  from tomwer.core.process.reconstruction.nabu.utils import _NabuStages
34
4
  from tomwer.gui.configuration.level import ConfigurationLevel
@@ -64,8 +34,11 @@ class _NabuStageConfigBase:
64
34
  (or a part of the stage configuration)
65
35
  """
66
36
 
67
- def __init__(self, stage: Union[_NabuStages, str]):
68
- self.__stage = _NabuStages.from_value(stage)
37
+ def __init__(self, stage: _NabuStages | str | None):
38
+ if stage is None:
39
+ self.__stage = None
40
+ else:
41
+ self.__stage = _NabuStages.from_value(stage)
69
42
  self._registeredWidgets = {}
70
43
  # list required widgets. Key is widget, value is the configuration
71
44
  # level
@@ -87,7 +60,7 @@ class _NabuStageConfigBase:
87
60
  def setConfiguration(self, config) -> None:
88
61
  raise NotImplementedError("Base class")
89
62
 
90
- def getStage(self) -> _NabuStages:
63
+ def getStage(self) -> _NabuStages | None:
91
64
  return self.__stage
92
65
 
93
66
  def setConfigurationLevel(self, level):
@@ -1,4 +1,4 @@
1
- from typing import Optional, Union
1
+ from __future__ import annotations
2
2
 
3
3
  from silx.gui import qt
4
4
  from silx.gui.utils import blockSignals
@@ -7,6 +7,7 @@ from silx.utils.enum import Enum as _Enum
7
7
  from tomwer.core.process.reconstruction.nabu.utils import _NabuStages
8
8
  from tomwer.gui.reconstruction.nabu.nabuconfig import base
9
9
  from tomwer.gui.utils.illustrations import _IllustrationWidget
10
+ from tomwer.gui.utils.scrollarea import QComboBoxIgnoreWheel
10
11
 
11
12
  from .reconstruction import AnglesFileWidget as Filewidget
12
13
 
@@ -69,13 +70,13 @@ class OptionalDouble(qt.QWidget):
69
70
  def _changed(self, *args, **kwargs):
70
71
  self.sigChanged.emit()
71
72
 
72
- def value(self) -> Optional[float]:
73
+ def value(self) -> float | None:
73
74
  if self._cb.isChecked():
74
75
  return self._dsb.value()
75
76
  else:
76
77
  return None
77
78
 
78
- def setValue(self, value: Optional[float]):
79
+ def setValue(self, value: float | None):
79
80
  if value in (None, "None"):
80
81
  self._cb.setChecked(False)
81
82
  else:
@@ -157,7 +158,7 @@ class CTFGeometry(qt.QGroupBox):
157
158
  def __init__(self, parent=None, title="ctf-geometry") -> None:
158
159
  super().__init__(parent, title=title)
159
160
  self.setLayout(qt.QFormLayout())
160
- self._beamShapeCB = qt.QComboBox(self)
161
+ self._beamShapeCB = QComboBoxIgnoreWheel(self)
161
162
  for shape in _BeamShape.values():
162
163
  self._beamShapeCB.addItem(shape)
163
164
  self.layout().addRow("shape", self._beamShapeCB)
@@ -189,7 +190,7 @@ class CTFGeometry(qt.QGroupBox):
189
190
  def getBeamShape(self):
190
191
  return _BeamShape.from_value(self._beamShapeCB.currentText())
191
192
 
192
- def setBeamShape(self, shape: Union[str, _BeamShape]):
193
+ def setBeamShape(self, shape: str | _BeamShape):
193
194
  shape = _BeamShape.from_value(shape)
194
195
  self._beamShapeCB.setCurrentText(shape.value)
195
196
 
@@ -1,31 +1,5 @@
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__ = ["H. Payno"]
27
- __license__ = "MIT"
28
- __date__ = "11/02/2020"
2
+ from __future__ import annotations
29
3
 
30
4
 
31
5
  from silx.gui import qt
@@ -51,7 +25,7 @@ class NabuConfiguration(qt.QWidget):
51
25
  (stage, index option modified)
52
26
  """
53
27
 
54
- def __init__(self, parent, scrollArea):
28
+ def __init__(self, parent):
55
29
  qt.QWidget.__init__(self, parent=parent)
56
30
  self._stageHided = []
57
31
  # list of hided stage. Not taking into account the filter
@@ -62,9 +36,7 @@ class NabuConfiguration(qt.QWidget):
62
36
  self._preProcessingGB = qt.QGroupBox("pre processing", self)
63
37
  self._preProcessingGB.setLayout(qt.QVBoxLayout())
64
38
 
65
- self._preProcessingWidget = _NabuPreProcessingConfig(
66
- parent=self, scrollArea=scrollArea
67
- )
39
+ self._preProcessingWidget = _NabuPreProcessingConfig(parent=self)
68
40
  self._preProcessingGB.layout().addWidget(self._preProcessingWidget)
69
41
  self.layout().addWidget(self._preProcessingGB)
70
42
 
@@ -72,18 +44,15 @@ class NabuConfiguration(qt.QWidget):
72
44
  self._phaseGB = qt.QGroupBox("phase", self)
73
45
  self._phaseGB.setLayout(qt.QVBoxLayout())
74
46
 
75
- self._phaseWidget = _NabuPhaseConfig(parent=self, scrollArea=scrollArea)
47
+ self._phaseWidget = _NabuPhaseConfig(parent=self)
76
48
  self._phaseGB.layout().addWidget(self._phaseWidget)
77
- self._phaseGB.setCheckable(True)
78
49
  self.layout().addWidget(self._phaseGB)
79
50
 
80
51
  # reconstruction opts
81
52
  self._reconstructionGB = qt.QGroupBox("reconstruction", self)
82
53
  self._reconstructionGB.setLayout(qt.QVBoxLayout())
83
54
 
84
- self._reconstructionWidget = _NabuReconstructionConfig(
85
- parent=self, scrollArea=scrollArea
86
- )
55
+ self._reconstructionWidget = _NabuReconstructionConfig(parent=self)
87
56
  self._reconstructionGB.layout().addWidget(self._reconstructionWidget)
88
57
  self.layout().addWidget(self._reconstructionGB)
89
58
 
@@ -95,14 +64,10 @@ class NabuConfiguration(qt.QWidget):
95
64
  self._outputGB.layout().addWidget(self._outputWidget)
96
65
  self.layout().addWidget(self._outputGB)
97
66
 
98
- # set up
99
- self._phaseGB.setChecked(True)
100
-
101
67
  # connect signal / slot
102
68
  self._preProcessingWidget.sigConfChanged.connect(
103
69
  self._signalConfChangedPreProcessing
104
70
  )
105
- self._phaseGB.toggled.connect(self._signalPhaseActivationChanged)
106
71
  self._phaseWidget.sigConfChanged.connect(self._signalConfChangedPhase)
107
72
  self._reconstructionWidget.sigConfChanged.connect(
108
73
  self._signalConfChangedReconstruction
@@ -123,9 +88,6 @@ class NabuConfiguration(qt.QWidget):
123
88
  self._stageHided.append(self._phaseGB)
124
89
  self._phaseGB.hide()
125
90
 
126
- def _signalPhaseActivationChanged(self, *args, **kwargs):
127
- self.sigConfChanged.emit(self._phaseWidget.getStage().value, "method")
128
-
129
91
  def _signalConfChangedPhase(self, param):
130
92
  self.sigConfChanged.emit(self._phaseWidget.getStage().value, param)
131
93
 
@@ -147,8 +109,6 @@ class NabuConfiguration(qt.QWidget):
147
109
  "output": self._outputWidget.getConfiguration(),
148
110
  "phase": self._phaseWidget.getConfiguration(),
149
111
  }
150
- if not self._phaseGB.isChecked():
151
- config["phase"]["method"] = ""
152
112
  return config
153
113
 
154
114
  def setConfiguration(self, config):
@@ -156,13 +116,6 @@ class NabuConfiguration(qt.QWidget):
156
116
  self._preProcessingWidget.setConfiguration(config["preproc"])
157
117
  if "phase" in config:
158
118
  self._phaseWidget.setConfiguration(config["phase"])
159
- paganin = config["phase"].get("method", "")
160
- if paganin == "":
161
- self._phaseGB.setChecked(False)
162
- else:
163
- self._phaseGB.setChecked(True)
164
- else:
165
- self._phaseGB.setChecked(False)
166
119
  if "reconstruction" in config:
167
120
  self._reconstructionWidget.setConfiguration(config["reconstruction"])
168
121
  if "tomwer_slices" in config:
@@ -219,37 +172,29 @@ class NabuConfigurationTab(qt.QTabWidget):
219
172
  (stage, index option modified)
220
173
  """
221
174
 
222
- def __init__(self, parent, scrollArea):
175
+ def __init__(self, parent):
223
176
  qt.QTabWidget.__init__(self, parent=parent)
224
177
 
225
178
  # pre processing options
226
- self._preProcessingWidget = _NabuPreProcessingConfig(
227
- parent=self, scrollArea=scrollArea
228
- )
179
+ self._preProcessingWidget = _NabuPreProcessingConfig(parent=self)
229
180
  self.addTab(self._preProcessingWidget, "pre processing")
230
181
 
231
182
  # phase options
232
183
  self._phaseGB = qt.QGroupBox("apply phase", self)
233
184
  self._phaseGB.setLayout(qt.QVBoxLayout())
234
185
 
235
- self._phaseWidget = _NabuPhaseConfig(parent=self, scrollArea=scrollArea)
186
+ self._phaseWidget = _NabuPhaseConfig(parent=self)
236
187
  self._phaseGB.layout().addWidget(self._phaseWidget)
237
- self._phaseGB.setCheckable(True)
238
188
  self.addTab(self._phaseGB, "phase")
239
189
 
240
190
  # reconstruction opts
241
- self._reconstructionWidget = _NabuReconstructionConfig(
242
- parent=self, scrollArea=scrollArea
243
- )
191
+ self._reconstructionWidget = _NabuReconstructionConfig(parent=self)
244
192
  self.addTab(self._reconstructionWidget, "reconstruction")
245
193
 
246
194
  # output information
247
195
  self._outputWidget = _NabuOutputConfig(parent=self)
248
196
  self.addTab(self._outputWidget, "output")
249
197
 
250
- # set up
251
- self._phaseGB.setChecked(True)
252
-
253
198
  # connect signal / slot
254
199
  self._preProcessingWidget.sigConfChanged.connect(
255
200
  self._signalConfChangedPreProcessing
@@ -279,8 +224,7 @@ class NabuConfigurationTab(qt.QTabWidget):
279
224
  "tomwer_slices": self.getSlices(),
280
225
  "output": self._outputWidget.getConfiguration(),
281
226
  }
282
- if self._phaseGB.isChecked():
283
- config["phase"] = self._phaseWidget.getConfiguration()
227
+ config["phase"] = self._phaseWidget.getConfiguration()
284
228
  return config
285
229
 
286
230
  def setConfiguration(self, config):
@@ -288,9 +232,6 @@ class NabuConfigurationTab(qt.QTabWidget):
288
232
  self._preProcessingWidget.setConfiguration(config["preproc"])
289
233
  if "phase" in config:
290
234
  self._phaseWidget.setConfiguration(config["phase"])
291
- self._phaseGB.setChecked(True)
292
- else:
293
- self._phaseGB.setChecked(False)
294
235
  if "reconstruction" in config:
295
236
  self._reconstructionWidget.setConfiguration(config["reconstruction"])
296
237
  if "tomwer_slices" in config:
@@ -1,36 +1,9 @@
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__ = ["H. Payno"]
27
- __license__ = "MIT"
28
- __date__ = "11/02/2020"
2
+ from __future__ import annotations
29
3
 
30
4
 
31
5
  import logging
32
6
  import os
33
- import typing
34
7
 
35
8
  from silx.gui import qt
36
9
 
@@ -52,9 +25,7 @@ _logger = logging.getLogger(__name__)
52
25
 
53
26
 
54
27
  class QNabuFileFormatComboBox(qt.QComboBox):
55
- def __init__(
56
- self, parent: typing.Optional[qt.QWidget] = ..., filter_formats=tuple()
57
- ) -> None:
28
+ def __init__(self, parent: qt.QWidget | None = ..., filter_formats=tuple()) -> None:
58
29
  """
59
30
  :param filter_format: if provided the given file format won't have an item on the ComboBox
60
31
  """
@@ -122,14 +93,6 @@ class NabuOutputLocationWidget(qt.QGroupBox):
122
93
  "Reconstruction will be saved under the PROCESSED_DATA/dataset folder. if exists else under the scan folder."
123
94
  )
124
95
  self.layout().addWidget(self._processedDataDirRB, 2, 0, 1, 1)
125
- # raw data dir
126
- self._rawDataDirRB = qt.QRadioButton(
127
- ProcessDataOutputDirMode.RAW_DATA_FOLDER.value, self
128
- )
129
- self._rawDataDirRB.setToolTip(
130
- "Reconstruction will be saved under the RAW_DATA/dataset folder. if exists else under the scan folder."
131
- )
132
- self.layout().addWidget(self._rawDataDirRB, 3, 0, 1, 1)
133
96
  # other dir
134
97
  self._otherDirRB = qt.QRadioButton(ProcessDataOutputDirMode.OTHER.value, self)
135
98
  self._otherDirRB.setToolTip(
@@ -161,7 +124,6 @@ class NabuOutputLocationWidget(qt.QGroupBox):
161
124
  # connect signal / slot
162
125
  self._inScanFolderRB.toggled.connect(self._outputModeChanged)
163
126
  self._processedDataDirRB.toggled.connect(self._outputModeChanged)
164
- self._rawDataDirRB.toggled.connect(self._outputModeChanged)
165
127
  self._otherDirRB.toggled.connect(self._outputModeChanged)
166
128
  self._selectOutputPB.released.connect(self._selectOutput)
167
129
  self._inScanFolderRB.setChecked(True)
@@ -172,21 +134,15 @@ class NabuOutputLocationWidget(qt.QGroupBox):
172
134
  return ProcessDataOutputDirMode.IN_SCAN_FOLDER
173
135
  elif self._processedDataDirRB.isChecked():
174
136
  return ProcessDataOutputDirMode.PROCESSED_DATA_FOLDER
175
- elif self._rawDataDirRB.isChecked():
176
- return ProcessDataOutputDirMode.RAW_DATA_FOLDER
177
137
  elif self._otherDirRB.isChecked():
178
138
  return ProcessDataOutputDirMode.OTHER
179
139
 
180
- def setOutputDirMode(
181
- self, mode: typing.Union[ProcessDataOutputDirMode, str]
182
- ) -> None:
140
+ def setOutputDirMode(self, mode: ProcessDataOutputDirMode | str) -> None:
183
141
  mode = ProcessDataOutputDirMode.from_value(mode)
184
142
  if mode is ProcessDataOutputDirMode.IN_SCAN_FOLDER:
185
143
  self._inScanFolderRB.setChecked(True)
186
144
  elif mode is ProcessDataOutputDirMode.PROCESSED_DATA_FOLDER:
187
145
  self._processedDataDirRB.setChecked(True)
188
- elif mode is ProcessDataOutputDirMode.RAW_DATA_FOLDER:
189
- self._rawDataDirRB.setChecked(True)
190
146
  elif mode is ProcessDataOutputDirMode.OTHER:
191
147
  self._otherDirRB.setChecked(True)
192
148