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,199 +1,59 @@
1
- <?xml version="1.0" encoding="UTF-8" standalone="no"?>
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
2
  <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
-
4
- <svg
5
- width="48"
6
- height="48"
7
- viewBox="0 0 12.7 12.7"
8
- version="1.1"
9
- id="svg470"
10
- inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
11
- sodipodi:docname="reduced_darkflat_selector.svg"
12
- inkscape:export-filename="reduced_darkflat_selector.png"
13
- inkscape:export-xdpi="96"
14
- inkscape:export-ydpi="96"
15
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
16
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
17
- xmlns:xlink="http://www.w3.org/1999/xlink"
18
- xmlns="http://www.w3.org/2000/svg"
19
- xmlns:svg="http://www.w3.org/2000/svg">
20
- <sodipodi:namedview
21
- id="namedview472"
22
- pagecolor="#ffffff"
23
- bordercolor="#000000"
24
- borderopacity="0.25"
25
- inkscape:showpageshadow="2"
26
- inkscape:pageopacity="0.0"
27
- inkscape:pagecheckerboard="0"
28
- inkscape:deskcolor="#d1d1d1"
29
- inkscape:document-units="mm"
30
- showgrid="false"
31
- inkscape:zoom="6.7277216"
32
- inkscape:cx="9.1412819"
33
- inkscape:cy="53.064027"
34
- inkscape:window-width="1920"
35
- inkscape:window-height="1131"
36
- inkscape:window-x="0"
37
- inkscape:window-y="32"
38
- inkscape:window-maximized="1"
39
- inkscape:current-layer="g2378" />
40
- <defs
41
- id="defs467">
42
- <radialGradient
43
- id="radialGradient3883"
44
- cx="60"
45
- cy="50.5"
46
- r="60"
47
- gradientTransform="matrix(1,0,0,0.84167,0,7.9958)"
48
- gradientUnits="userSpaceOnUse">
49
- <stop
50
- id="stop3879"
51
- offset="0" />
52
- <stop
53
- id="stop3881"
54
- stop-opacity="0"
55
- offset="1" />
56
- </radialGradient>
57
- <radialGradient
58
- id="radialGradient3883-3"
59
- cx="60"
60
- cy="50.5"
61
- r="60"
62
- gradientTransform="matrix(1,0,0,0.84167,0,7.9958)"
63
- gradientUnits="userSpaceOnUse">
64
- <stop
65
- id="stop3879-6"
66
- offset="0" />
67
- <stop
68
- id="stop3881-7"
69
- stop-opacity="0"
70
- offset="1" />
71
- </radialGradient>
72
- <radialGradient
73
- id="radialGradient3883-5"
74
- cx="60"
75
- cy="50.5"
76
- r="60"
77
- gradientTransform="matrix(1,0,0,0.84167,0,7.9958)"
78
- gradientUnits="userSpaceOnUse">
79
- <stop
80
- id="stop3879-9"
81
- offset="0" />
82
- <stop
83
- id="stop3881-2"
84
- stop-opacity="0"
85
- offset="1" />
86
- </radialGradient>
87
- </defs>
88
- <g
89
- inkscape:label="Layer 1"
90
- inkscape:groupmode="layer"
91
- id="layer1">
92
- <g
93
- id="g709"
94
- transform="translate(-1.2784396,2.1511541)">
95
- <g
96
- id="rect1008-2">
97
- <path
98
- style="color:#000000;fill:#ffffff;stroke-width:0.4;stroke-linejoin:round;-inkscape-stroke:none"
99
- d="M 1.8295133,-1.3827156 H 11.240773 V 6.4072858 H 1.8295133 Z"
100
- id="path360" />
101
- <path
102
- style="color:#000000;fill:#000000;stroke-linejoin:round;-inkscape-stroke:none"
103
- d="m 1.8300781,-1.5820312 a 0.20002,0.20002 0 0 0 -0.2011719,0.1992187 v 7.7910156 a 0.20002,0.20002 0 0 0 0.2011719,0.1992188 h 9.4101559 a 0.20002,0.20002 0 0 0 0.201172,-0.1992188 v -7.7910156 a 0.20002,0.20002 0 0 0 -0.201172,-0.1992187 z m 0.1992188,0.3984375 H 11.041016 V 6.2070312 H 2.0292969 Z"
104
- id="path362" />
105
- </g>
106
- <g
107
- id="rect1008">
108
- <path
109
- style="color:#000000;fill:#ffffff;stroke-width:0.4;stroke-linejoin:round;-inkscape-stroke:none"
110
- d="M 3.1035864,-0.08375844 H 12.514846 V 7.7062429 H 3.1035864 Z"
111
- id="path366" />
112
- <path
113
- style="color:#000000;fill:#000000;stroke-linejoin:round;-inkscape-stroke:none"
114
- d="M 3.1035156,-0.28320313 A 0.20002,0.20002 0 0 0 2.9042969,-0.08398437 V 7.7070312 A 0.20002,0.20002 0 0 0 3.1035156,7.90625 H 12.515625 A 0.20002,0.20002 0 0 0 12.714844,7.7070312 V -0.08398437 A 0.20002,0.20002 0 0 0 12.515625,-0.28320313 Z M 3.3027344,0.1171875 H 12.314453 V 7.5058594 H 3.3027344 Z"
115
- id="path368" />
116
- </g>
117
- <g
118
- id="g954"
119
- transform="matrix(1.309714,0,0,1.3800806,1.226782,-2.5361387)">
120
- <g
121
- id="g2375">
122
- <g
123
- id="g2378">
124
- <image
125
- id="image3051"
126
- width="8.4571648"
127
- height="6.260344"
128
- fill="url(#radialGradient3883)"
129
- opacity="0.76887"
130
- xlink:href="data:image/png;base64,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 8Y9/rCwM2LRpE59++ind3d3odDrKyspYt24dBw4cIDw8nH/84x9cuHCBO++8Ex8fHzw9PZU1VM7O zoyNjTE/P8/U1BTl5eU89dRT9PT0EBUVpbyQ1tHRofzLILGWS1SNjEYjOp2OpUuXUlNTw9tvv83U 1BQHDx7kD3/4A2lpaZw6dYq4uDimp6cpLy9n9erV+Pv709rayuDgIJ6enoSHh1NUVERgYCD33HMP Tk5OmM1mgoODqa6uZteuXbS2tiruoLm5GXd3d/r7+wH4+uuvGRsbIz09ndnZWb788ku8vb0JDQ0l LS2Nvr4+LBYLa9eu5aOPPmLlypXKnHRTUxPe3t6sXLmS4eFh3n77bfbv3/9dLCWCrJ6eHubn53n9 9dd56aWXWLFiBS0tLcB379AK+mtsbOTatWsKHbS1tVFXV0dFRQWlpaWsW7cOi8WiWJXBYKC0tFR5 uWz58uV88cUXBAUFMTw8zOeff86qVauIiIiguLiY3bt3Mzw8THV1NVNTU0RFRVFaWkp6ejqDg4OY TCY2b97M+Pg4ZrMZDw8P2traGB4eJi0tjcuXLzM4OMjAwABDQ0OEh4ej0+l49tlnKS0tZe3atTz2 2GN0dHTQ0dGBi4sLaWlprFmzhkWLFtHb28vx48c5e/Yss7OzREdHc++99zIyMkJbWxvJyckkJiZi MpmUZUypqalcvHiRu+++m6KiIuUlt6effpq8vDxCQ0MxGAysXr2agoICJUVbtmwZFouFiooK9u/f r7xVqNFoGB0dZXR0FLPZrMymiUAsLCyMyspKXFxc6OjoIDk5GbPZTEREBM3NzcTHx2M0Gm8u2REv SU9OTt7yRt8LL7xAXV0dOp2OjIwMCgoKeOihh7h8+TJ79uzhyy+/pLu7m7S0NPz9/dm6dSvDw8ME BARw7tw5BgcH0Wg05ObmcuLECYaHh5WfKaypqWH37t3s2bOHd999V3lmS0uLEiS0tbVRWVmJ2WxW VjROTEywbNkybty4wZUrV3jllVcoKyvDbDYrwE1MTDAyMkJubi6tra2sX7+e06dPs2fPHtzc3Cgp KcHHx4fDhw+zY8cOIiIiaGtrIygoiL///e+4ublhNptJS0ujrKyMAwcOMDk5SX19PY2NjSQnJ9PY 2IizszObNm1S3vALDQ2lu7ubjIwMVq5cyXvvvaekPOPj40xPT/PLX/6SEydOkJubS3l5OfX19Sxb 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 9CmJiYnMz89jsVgYGBjgo48+wmw2k5WVRWdnp8gkT01NCdrEof4dPHiQyclJzGYzk5OTSCQS8vPz BX1qsVi4fPkydrtdbAC5XE5TU5M4cuVyOVFRUfz617/m008/JScnRxSeff7552RmZrJhwwaqq6uZ mprC29ubR48efTcHp6en09/fj9Vqpa2tjY6ODtLS0vD396e3t5eqqiqCgoLIysoSWqlOpyMqKoqh oSERC7Farbz00kv09fWJUJRjiD927Bi3b9/GarVy9uxZvLy8CA8P5/HjxwwODhIXFyfcEp1Ox6FD hzCbzURHR+Pl5YXJZOLkyZMiIpKamkp/fz/Hjh1jZGQEf39/+vr68Pb2Znh4mPr6eiwWi5BHCwsL GR0dJTw8nKKiIn71q18RExPDzZs3iYyMpLKykry8PObm5gRi4+gA6enpobOzU5j0CwsLIjLj4+ND Wloa169fZ82aNYL4CA0NJTY2ltraWoqLi0WwXCaTkZaWRmVlJbOzsyLY7ubmhkKhENpBXl6euFC6 urpitVrp7+9nYGAAf39/Ojs7USgU7Nixg4WFBdauXYu/v79YNA4efAlwSq/Xs7CwwNGjR+ns7MTT 05OFhQWCgoKor69HqVQSGhrKxYsXUalU4trv5OREREQEZWVlbNiwgZGREd599102bdqExWLhnXfe 4dq1a+Tk5HDt2jXMZjPnz5+nrKwMi8WCo1nAUeKydu1aZDIZ+/fv52c/+xk2mw2pVCr6pj7++GOa m5vJyclhcHCQkJAQysrKePz4MQUFBcTFxTE1NYWXlxeZmZkEBARgMBjYu3cver2eVatWodVqkUgk 3Lp1ixUrVnDo0CFsNhvp6elcu3YNm80mqpDKy8u5d+8eq1atoru7G19fXxISEtDr9YKfzsvL49Kl S3h4eKDRaIRY895773HlyhXRfuOQbwMDAzl8+DDffPONWPx/+ctf+M1vfkNYWBibN28mJSUFjUbD vXv32LFjB6Wlpcjlcqanp+no6BDxHoPBQE5ODpcvX8bX15dr167h7+8vcs4im5Sfn09ycjJDQ0OM jIzQ19eHSqUSlQ4OE2D58uUYjUZ27doldqmXlxfnz59Hp9Ph6+vLzZs3uXnzJjabDbvdzr59+wQn 5O3tzZ///GdGRkaIjo5Gr9eTmJhITU2NQFXlcjk3btzg7bffFpTi8PAwmzZtorKyUiw+R2dIb28v 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 Ct+MAAAAAElFTkSuQmCC "
131
- style="opacity:1;fill:url(#radialGradient3883-5)"
132
- x="1.5624958"
133
- y="2.781471" />
134
- </g>
135
- </g>
136
- <g
137
- aria-label="DARK"
138
- transform="scale(1.039698,0.96181775)"
139
- id="text3724"
140
- style="font-size:2.57776px;line-height:1.25;letter-spacing:0px;word-spacing:0px;stroke-width:0.0644441">
141
- <path
142
- d="m 2.3750616,3.7180967 v 1.4613181 h 0.3071159 q 0.3889296,0 0.5689197,-0.1762141 0.1812487,-0.1762141 0.1812487,-0.556333 0,-0.3776015 -0.1812487,-0.5525569 Q 3.0711071,3.7180967 2.6821775,3.7180967 Z M 2.1208099,3.5091572 h 0.5223488 q 0.5462636,0 0.801774,0.2278196 0.2555103,0.2265609 0.2555103,0.7098909 0,0.4858474 -0.256769,0.713667 Q 3.1869049,5.3883543 2.6431587,5.3883543 H 2.1208099 Z"
143
- id="path337" />
144
- <path
145
- d="M 4.6885005,3.7596329 4.3436244,4.6948261 H 5.0346352 Z M 4.5450119,3.5091572 H 4.8332477 L 5.549432,5.3883543 H 5.2851109 L 5.1139315,4.906283 H 4.2668454 L 4.095666,5.3883543 H 3.8275689 Z"
146
- id="path339" />
147
- <path
148
- d="m 6.714962,4.507284 q 0.081814,0.027691 0.1585927,0.1183152 0.078038,0.090624 0.1560753,0.249217 L 7.2876577,5.3883543 H 7.0145259 L 6.7741196,4.906283 Q 6.6809779,4.7174822 6.5928708,4.6558073 6.5060225,4.5941324 6.3549818,4.5941324 H 6.078074 V 5.3883543 H 5.8238223 V 3.5091572 h 0.5739544 q 0.32222,0 0.4808126,0.1346779 0.1585927,0.1346779 0.1585927,0.406551 0,0.1774727 -0.083072,0.2945292 Q 6.872296,4.4619718 6.714962,4.507284 Z M 6.078074,3.7180967 v 0.6670961 h 0.3197027 q 0.1837661,0 0.2769078,-0.084331 0.0944,-0.08559 0.0944,-0.2504757 0,-0.164886 -0.0944,-0.2479583 -0.093142,-0.084331 -0.2769078,-0.084331 z"
149
- id="path341" />
150
- <path
151
- d="M 7.6149123,3.5091572 H 7.869164 v 0.794222 L 8.7124742,3.5091572 H 9.0397289 L 8.107053,4.3851928 9.1064385,5.3883543 H 8.7716318 L 7.869164,4.4833692 V 5.3883543 H 7.6149123 Z"
152
- id="path343" />
153
- </g>
154
- <g
155
- aria-label="FLAT"
156
- transform="scale(1.1364834,0.87990727)"
157
- id="text3746"
158
- style="font-size:2.44554px;line-height:1.25;letter-spacing:0px;word-spacing:0px;fill:#e6e6e6;stroke-width:0.0611388">
159
- <path
160
- d="m 2.3348602,7.819975 h 1.0245475 v 0.2029989 h -0.783337 v 0.525409 H 3.2829846 V 8.7513818 H 2.5760707 V 9.6027832 H 2.3348602 Z"
161
- id="path346" />
162
- <path
163
- d="M 3.7415233,7.819975 H 3.9827338 V 9.3997843 H 4.8508527 V 9.6027832 H 3.7415233 Z"
164
- id="path348" />
165
- <path
166
- d="M 5.7559891,8.0576032 5.4288026,8.9448279 H 6.0843697 Z M 5.6198604,7.819975 H 5.8933119 L 6.5727612,9.6027832 H 6.3219979 L 6.1595987,9.1454386 H 5.3559618 L 5.1935627,9.6027832 H 4.939217 Z"
167
- id="path350" />
168
- <path
169
- d="M 6.3960326,7.819975 H 7.9041952 V 8.0229739 H 7.2713162 V 9.6027832 H 7.0289116 V 8.0229739 h -0.632879 z"
170
- id="path352" />
171
- </g>
172
- <g
173
- aria-label="&amp;"
174
- transform="scale(1.1512718,0.86860462)"
175
- id="text2995"
176
- style="font-size:2.66719px;line-height:125%;font-family:IPAPMincho;letter-spacing:0px;word-spacing:0px;fill:#917c6f;stroke-width:0.0660948">
177
- <path
178
- d="m 4.80023,6.9753419 q -0.1185129,0.1054895 -0.1745134,0.2109789 -0.054698,0.1041871 -0.054698,0.218793 0,0.1901414 0.138048,0.3164683 0.1380479,0.1263269 0.3464221,0.1263269 0.1237222,0 0.2318163,-0.040372 Q 5.3953989,7.7658616 5.4904696,7.682512 Z M 4.9838598,6.82948 5.6454479,7.5066962 Q 5.7222859,7.390788 5.7652631,7.2592518 5.8082403,7.1264132 5.8160543,6.9779466 H 6.0582894 Q 6.0426613,7.1498553 5.9749397,7.3178571 5.9072181,7.4858588 5.7861005,7.6499535 L 6.1494531,8.0211201 H 5.8212637 L 5.6350292,7.8296763 q -0.1354432,0.1159081 -0.2839099,0.173211 -0.1484666,0.056001 -0.319073,0.056001 -0.3138637,0 -0.5131215,-0.1784204 -0.1992579,-0.1797228 -0.1992579,-0.4597257 0,-0.1666993 0.087257,-0.3125613 0.087257,-0.1471643 0.2617702,-0.2760958 -0.062512,-0.082047 -0.095071,-0.1627924 -0.032559,-0.082047 -0.032559,-0.1601877 0,-0.2109789 0.1445597,-0.3386081 0.1445596,-0.1289316 0.3841899,-0.1289316 0.1080942,0 0.214886,0.023442 0.1080941,0.023442 0.2187929,0.070326 V 6.372359 Q 5.3901895,6.3111491 5.2873047,6.279893 5.18442,6.2473345 5.0958609,6.2473345 q -0.1367456,0 -0.2226999,0.072931 -0.084652,0.071629 -0.084652,0.1862344 0,0.066419 0.037768,0.1341409 0.03907,0.066419 0.157583,0.1888392 z"
179
- id="path355" />
180
- </g>
181
- </g>
182
- <g
183
- id="g3836"
184
- transform="matrix(0.26458333,0,0,0.26458333,0.99640635,2.5442373)">
185
- <path
186
- id="path3017"
187
- d="M 9.0312,16.281 1,24.9372 1.875,25.7497 9.9062,17.0935 Z"
188
- color="#000000"
189
- style="text-indent:0;text-transform:none" />
190
- <path
191
- id="path3842"
192
- d="m 3.0641,19.321 7.4638,-3.8136 -3.215,7.7405 C 6.91169,21.1658 5.1908,19.5851 3.0641,19.321 Z"
193
- fill-rule="evenodd"
194
- stroke-linejoin="round"
195
- stroke-width="0.625" />
196
- </g>
3
+ <svg id="svg470" width="48" height="48" version="1.1" viewBox="0 0 12.7 12.7" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
4
+ <defs id="defs467">
5
+ <filter id="filter47" x="0" y="0" width="1" height="1" color-interpolation-filters="sRGB">
6
+ <feComposite id="feComposite46" in2="SourceGraphic" k2="1" operator="arithmetic" result="composite1"/>
7
+ <feColorMatrix id="feColorMatrix46" in="composite1" result="colormatrix1" type="saturate" values="1"/>
8
+ <feFlood id="feFlood46" flood-color="rgb(228,255,7)" result="flood1"/>
9
+ <feBlend id="feBlend46" in="flood1" in2="colormatrix1" mode="multiply" result="blend1"/>
10
+ <feBlend id="feBlend47" in2="blend1" result="blend2"/>
11
+ <feColorMatrix id="feColorMatrix47" in="blend2" result="colormatrix2" type="saturate" values="1"/>
12
+ <feComposite id="feComposite47" in="colormatrix2" in2="SourceGraphic" k2="1" operator="in" result="composite2"/>
13
+ </filter>
14
+ <filter id="filter69" x="0" y="0" width="1" height="1" color-interpolation-filters="sRGB">
15
+ <feComposite id="feComposite68" in2="SourceGraphic" k2="1" operator="arithmetic" result="composite1"/>
16
+ <feColorMatrix id="feColorMatrix68" in="composite1" result="colormatrix1" type="saturate" values="1"/>
17
+ <feFlood id="feFlood68" flood-color="rgb(228,255,7)" result="flood1"/>
18
+ <feBlend id="feBlend68" in="flood1" in2="colormatrix1" mode="multiply" result="blend1"/>
19
+ <feBlend id="feBlend69" in2="blend1" mode="screen" result="blend2"/>
20
+ <feColorMatrix id="feColorMatrix69" in="blend2" result="colormatrix2" type="saturate" values="1"/>
21
+ <feComposite id="feComposite69" in="colormatrix2" in2="SourceGraphic" k2="1" operator="in" result="composite2"/>
22
+ </filter>
23
+ <filter id="filter3784-3-5" x="-.014563" y="-.019624" width="1.0291" height="1.0392" color-interpolation-filters="sRGB">
24
+ <feGaussianBlur id="feGaussianBlur3786-6-3" stdDeviation="0.10012024"/>
25
+ </filter>
26
+ </defs>
27
+ <g id="layer1">
28
+ <g id="g709" transform="translate(-1.2784 2.1512)">
29
+ <path id="path70" transform="matrix(.40023 0 0 .40023 -.53485 -4.2388)" d="m25.571 6.4446 0.968 1.7107h-11.836l0.839-1.7107zm3.394 2.1159v14.944h-22.988l-2e-4 -14.944 22.988 2e-4z" fill="#e4ff07" filter="url(#filter3784-3-5)" stroke="#000" stroke-width=".18898"/>
30
+ <path id="rect1363-59" transform="matrix(.40023 0 0 .40023 .83879 -2.596)" d="m25.571 6.4446 0.968 1.7107h-11.836l0.839-1.7107zm3.394 2.1159v14.944h-22.988l-2e-4 -14.944 22.988 2e-4z" fill="#e4ff07" filter="url(#filter3784-3-5)" stroke="#000" stroke-width=".18898"/>
31
+ <g id="g954" transform="matrix(1.2028 0 0 1.2669 2.0579 -1.6311)" filter="url(#filter69)">
32
+ <g id="g2375">
33
+ <g id="g2378">
34
+ <image id="image3051" transform="matrix(.89649 0 0 .99459 .59708 .13422)" x="1.5625" y="2.7815" width="8.4572" height="6.2603" fill="#e4ff07" filter="url(#filter47)" image-rendering="auto" preserveAspectRatio="none" xlink:href="data:image/png;base64,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 8Y9/rCwM2LRpE59++ind3d3odDrKyspYt24dBw4cIDw8nH/84x9cuHCBO++8Ex8fHzw9PZU1VM7O zoyNjTE/P8/U1BTl5eU89dRT9PT0EBUVpbyQ1tHRofzLILGWS1SNjEYjOp2OpUuXUlNTw9tvv83U 1BQHDx7kD3/4A2lpaZw6dYq4uDimp6cpLy9n9erV+Pv709rayuDgIJ6enoSHh1NUVERgYCD33HMP Tk5OmM1mgoODqa6uZteuXbS2tiruoLm5GXd3d/r7+wH4+uuvGRsbIz09ndnZWb788ku8vb0JDQ0l LS2Nvr4+LBYLa9eu5aOPPmLlypXKnHRTUxPe3t6sXLmS4eFh3n77bfbv3/9dLCWCrJ6eHubn53n9 9dd56aWXWLFiBS0tLcB379AK+mtsbOTatWsKHbS1tVFXV0dFRQWlpaWsW7cOi8WiWJXBYKC0tFR5 uWz58uV88cUXBAUFMTw8zOeff86qVauIiIiguLiY3bt3Mzw8THV1NVNTU0RFRVFaWkp6ejqDg4OY TCY2b97M+Pg4ZrMZDw8P2traGB4eJi0tjcuXLzM4OMjAwABDQ0OEh4ej0+l49tlnKS0tZe3atTz2 2GN0dHTQ0dGBi4sLaWlprFmzhkWLFtHb28vx48c5e/Yss7OzREdHc++99zIyMkJbWxvJyckkJiZi MpmUZUypqalcvHiRu+++m6KiIuUlt6effpq8vDxCQ0MxGAysXr2agoICJUVbtmwZFouFiooK9u/f r7xVqNFoGB0dZXR0FLPZrMymiUAsLCyMyspKXFxc6OjoIDk5GbPZTEREBM3NzcTHx2M0Gm8u2REv SU9OTt7yRt8LL7xAXV0dOp2OjIwMCgoKeOihh7h8+TJ79uzhyy+/pLu7m7S0NPz9/dm6dSvDw8ME BARw7tw5BgcH0Wg05ObmcuLECYaHh5WfKaypqWH37t3s2bOHd999V3lmS0uLEiS0tbVRWVmJ2WxW VjROTEywbNkybty4wZUrV3jllVcoKyvDbDYrwE1MTDAyMkJubi6tra2sX7+e06dPs2fPHtzc3Cgp KcHHx4fDhw+zY8cOIiIiaGtrIygoiL///e+4ublhNptJS0ujrKyMAwcOMDk5SX19PY2NjSQnJ9PY 2IizszObNm1S3vALDQ2lu7ubjIwMVq5cyXvvvaekPOPj40xPT/PLX/6SEydOkJubS3l5OfX19Sxb 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 9CmJiYnMz89jsVgYGBjgo48+wmw2k5WVRWdnp8gkT01NCdrEof4dPHiQyclJzGYzk5OTSCQS8vPz BX1qsVi4fPkydrtdbAC5XE5TU5M4cuVyOVFRUfz617/m008/JScnRxSeff7552RmZrJhwwaqq6uZ mprC29ubR48efTcHp6en09/fj9Vqpa2tjY6ODtLS0vD396e3t5eqqiqCgoLIysoSWqlOpyMqKoqh oSERC7Farbz00kv09fWJUJRjiD927Bi3b9/GarVy9uxZvLy8CA8P5/HjxwwODhIXFyfcEp1Ox6FD hzCbzURHR+Pl5YXJZOLkyZMiIpKamkp/fz/Hjh1jZGQEf39/+vr68Pb2Znh4mPr6eiwWi5BHCwsL GR0dJTw8nKKiIn71q18RExPDzZs3iYyMpLKykry8PObm5gRi4+gA6enpobOzU5j0CwsLIjLj4+ND Wloa169fZ82aNYL4CA0NJTY2ltraWoqLi0WwXCaTkZaWRmVlJbOzsyLY7ubmhkKhENpBXl6euFC6 urpitVrp7+9nYGAAf39/Ojs7USgU7Nixg4WFBdauXYu/v79YNA4efAlwSq/Xs7CwwNGjR+ns7MTT 05OFhQWCgoKor69HqVQSGhrKxYsXUalU4trv5OREREQEZWVlbNiwgZGREd599102bdqExWLhnXfe 4dq1a+Tk5HDt2jXMZjPnz5+nrKwMi8WCo1nAUeKydu1aZDIZ+/fv52c/+xk2mw2pVCr6pj7++GOa m5vJyclhcHCQkJAQysrKePz4MQUFBcTFxTE1NYWXlxeZmZkEBARgMBjYu3cver2eVatWodVqkUgk 3Lp1ixUrVnDo0CFsNhvp6elcu3YNm80mqpDKy8u5d+8eq1atoru7G19fXxISEtDr9YKfzsvL49Kl S3h4eKDRaIRY895773HlyhXRfuOQbwMDAzl8+DDffPONWPx/+ctf+M1vfkNYWBibN28mJSUFjUbD vXv32LFjB6Wlpcjlcqanp+no6BDxHoPBQE5ODpcvX8bX15dr167h7+8vcs4im5Sfn09ycjJDQ0OM jIzQ19eHSqUSlQ4OE2D58uUYjUZ27doldqmXlxfnz59Hp9Ph6+vLzZs3uXnzJjabDbvdzr59+wQn 5O3tzZ///GdGRkaIjo5Gr9eTmJhITU2NQFXlcjk3btzg7bffFpTi8PAwmzZtorKyUiw+R2dIb28v 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 Ct+MAAAAAElFTkSuQmCC "/>
35
+ </g>
197
36
  </g>
37
+ <g id="text3724" transform="scale(1.0397 .96182)" stroke-width=".064444" aria-label="DARK">
38
+ <path id="path337" d="m2.3751 3.7181v1.4613h0.30712q0.38893 0 0.56892-0.17621 0.18125-0.17621 0.18125-0.55633 0-0.3776-0.18125-0.55256-0.17999-0.17621-0.56892-0.17621zm-0.25425-0.20894h0.52235q0.54626 0 0.80177 0.22782 0.25551 0.22656 0.25551 0.70989 0 0.48585-0.25677 0.71367-0.25677 0.22782-0.80052 0.22782h-0.52235z"/>
39
+ <path id="path339" d="m4.6885 3.7596-0.34488 0.93519h0.69101zm-0.14349-0.25048h0.28824l0.71618 1.8792h-0.26432l-0.17118-0.48207h-0.84709l-0.17118 0.48207h-0.2681z"/>
40
+ <path id="path341" d="m6.715 4.5073q0.081814 0.027691 0.15859 0.11832 0.078038 0.090624 0.15608 0.24922l0.25803 0.51354h-0.27313l-0.24041-0.48207q-0.093142-0.1888-0.18125-0.25048-0.086848-0.061675-0.23789-0.061675h-0.27691v0.79422h-0.25425v-1.8792h0.57395q0.32222 0 0.48081 0.13468 0.15859 0.13468 0.15859 0.40655 0 0.17747-0.083072 0.29453-0.081814 0.11706-0.23915 0.16237zm-0.63689-0.78919v0.6671h0.3197q0.18377 0 0.27691-0.084331 0.0944-0.08559 0.0944-0.25048 0-0.16489-0.0944-0.24796-0.093142-0.084331-0.27691-0.084331z"/>
41
+ <path id="path343" d="m7.6149 3.5092h0.25425v0.79422l0.84331-0.79422h0.32725l-0.93268 0.87604 0.99939 1.0032h-0.33481l-0.90247-0.90499v0.90499h-0.25425z"/>
42
+ </g>
43
+ <g id="text3746" transform="scale(1.1365 .87991)" fill="#e6e6e6" stroke-width=".061139" aria-label="FLAT">
44
+ <path id="path346" d="m2.3349 7.82h1.0245v0.203h-0.78334v0.52541h0.70691v0.203h-0.70691v0.8514h-0.24121z"/>
45
+ <path id="path348" d="m3.7415 7.82h0.24121v1.5798h0.86812v0.203h-1.1093z"/>
46
+ <path id="path350" d="m5.756 8.0576-0.32719 0.88722h0.65557zm-0.13613-0.23763h0.27345l0.67945 1.7828h-0.25076l-0.1624-0.45734h-0.80364l-0.1624 0.45734h-0.25435z"/>
47
+ <path id="path352" d="m6.396 7.82h1.5082v0.203h-0.63288v1.5798h-0.2424v-1.5798h-0.63288z"/>
48
+ </g>
49
+ <g id="text2995" transform="scale(1.1513 .8686)" fill="#917c6f" stroke-width=".066095" aria-label="&amp;">
50
+ <path id="path355" d="m4.8002 6.9753q-0.11851 0.10549-0.17451 0.21098-0.054698 0.10419-0.054698 0.21879 0 0.19014 0.13805 0.31647 0.13805 0.12633 0.34642 0.12633 0.12372 0 0.23182-0.040372 0.10809-0.041675 0.20316-0.12502zm0.18363-0.14586 0.66159 0.67722q0.076838-0.11591 0.11982-0.24744 0.042977-0.13284 0.050791-0.28131h0.24224q-0.015628 0.17191-0.08335 0.33991-0.067722 0.168-0.18884 0.3321l0.36335 0.37117h-0.32819l-0.18623-0.19144q-0.13544 0.11591-0.28391 0.17321-0.14847 0.056001-0.31907 0.056001-0.31386 0-0.51312-0.17842-0.19926-0.17972-0.19926-0.45973 0-0.1667 0.087257-0.31256 0.087257-0.14716 0.26177-0.2761-0.062512-0.082047-0.095071-0.16279-0.032559-0.082047-0.032559-0.16019 0-0.21098 0.14456-0.33861 0.14456-0.12893 0.38419-0.12893 0.10809 0 0.21489 0.023442 0.10809 0.023442 0.21879 0.070326v0.23703q-0.1133-0.06121-0.21619-0.092466-0.10288-0.032558-0.19144-0.032558-0.13675 0-0.2227 0.072931-0.084652 0.071629-0.084652 0.18623 0 0.066419 0.037768 0.13414 0.03907 0.066419 0.15758 0.18884z"/>
51
+ </g>
52
+ </g>
53
+ <g id="g3836" transform="matrix(.26458 0 0 .26458 1.4333 3.1584)">
54
+ <path id="path3017" d="m9.0312 16.281-8.0312 8.6562 0.875 0.8125 8.0312-8.6562z" color="#000000" style="text-indent:0;text-transform:none"/>
55
+ <path id="path3842" d="m3.0641 19.321 7.4638-3.8136-3.215 7.7405c-0.40121-2.0821-2.1221-3.6628-4.2488-3.9269z" fill-rule="evenodd" stroke-linejoin="round" stroke-width=".625"/>
56
+ </g>
198
57
  </g>
58
+ </g>
199
59
  </svg>
@@ -15,8 +15,8 @@
15
15
  version="1.1"
16
16
  id="svg8"
17
17
  inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
18
- sodipodi:docname="tomoobjserie.svg"
19
- inkscape:export-filename="/home/payno/dev/tomo/tomwer/orangecontrib/tomwer/widgets/control/icons/tomoobjserie.png"
18
+ sodipodi:docname="tomoobjseries.svg"
19
+ inkscape:export-filename="/home/payno/dev/tomo/tomwer/orangecontrib/tomwer/widgets/control/icons/tomoobjseries.png"
20
20
  inkscape:export-xdpi="134.50999"
21
21
  inkscape:export-ydpi="134.50999">
22
22
  <defs
@@ -0,0 +1,172 @@
1
+ from __future__ import annotations
2
+
3
+ import weakref
4
+ from silx.gui import qt
5
+ from ewoksorange.bindings.owwidgets import OWEwoksWidgetOneThreadPerRun
6
+ from ewoksorange.gui.orange_imports import Input
7
+ from orangewidget import gui
8
+ from orangewidget.settings import Setting
9
+ from orangecontrib.tomwer.widgets.utils import WidgetLongProcessing
10
+
11
+ from tomwer.core.settings import TOMO_BEAMLINES
12
+ import tomwer.core.process.drac.publish
13
+ from tomwer.core.scan.scanbase import TomwerScanBase
14
+ from tomwer.gui.dataportal.publish import PublishProcessedDataWindow, has_ewoksnotify
15
+
16
+ from processview.core.superviseprocess import SuperviseProcess
17
+
18
+
19
+ class PublishProcessedDataOW(
20
+ OWEwoksWidgetOneThreadPerRun,
21
+ SuperviseProcess,
22
+ WidgetLongProcessing,
23
+ ewokstaskclass=tomwer.core.process.drac.publish.PublishICatDatasetTask,
24
+ ):
25
+ """
26
+ This widget can receive 'data' (scan) and but some screenshot to be pushed on GALLERY.
27
+ """
28
+
29
+ name = "Data Portal Publishing"
30
+ id = "orangecontrib.widgets.tomwer.dataportal.PublishProcessedDataOW.PublishProcessedDataOW"
31
+ description = "Publish processed data to the (ESRF) data portal. \n To execute this you need to be inside the ESRF network"
32
+ icon = "icons/publish_processed_data.svg"
33
+ priority = 64
34
+ keywords = [
35
+ "tomography",
36
+ "tomwer",
37
+ "tomo_obj",
38
+ "processed data",
39
+ "PROCESSED_DATA",
40
+ "publish",
41
+ "icat",
42
+ "icatplus",
43
+ "pyicatplus",
44
+ "pyicat-plus",
45
+ "drac",
46
+ "data portal",
47
+ "dataportal",
48
+ "portal",
49
+ ]
50
+
51
+ want_main_area = True
52
+ want_control_area = False
53
+ resizing_enabled = True
54
+
55
+ _ewoks_default_inputs = Setting({})
56
+
57
+ _ewoks_inputs_to_hide_from_orange = (
58
+ "__process__",
59
+ "beamline",
60
+ "proposal",
61
+ "dataset",
62
+ "dry_run",
63
+ "path",
64
+ )
65
+
66
+ class Inputs:
67
+ # redefine the input to allow multiple and default
68
+ data_portal_processed_datasets = Input(
69
+ name="data_portal_processed_datasets",
70
+ type=tuple,
71
+ doc="data portal processed data to be saved",
72
+ multiple=True,
73
+ default=True,
74
+ )
75
+
76
+ def __init__(self, parent=None):
77
+ super().__init__(parent)
78
+ SuperviseProcess.__init__(self)
79
+ WidgetLongProcessing.__init__(self)
80
+ if not has_ewoksnotify:
81
+ raise RuntimeError(
82
+ "ewoksnotify not installed. Cannot define the PublishProcessedDataOW"
83
+ )
84
+ self.__on_going_task: int = 0
85
+ """used to know how many tasks are on-going (as they are processed in parallel). Used to display processing wheel and processing"""
86
+
87
+ self._window = PublishProcessedDataWindow(
88
+ parent=self,
89
+ beamlines=TOMO_BEAMLINES,
90
+ )
91
+ layout = gui.vBox(self.mainArea, self.name).layout()
92
+ layout.addWidget(self._window)
93
+ self._scan = None
94
+
95
+ # load settings
96
+ self._window.setConfiguration(self._ewoks_default_inputs)
97
+
98
+ # connect signal / slot
99
+ self._window.centralWidget().sigConfigChanged.connect(self._updateSettings)
100
+
101
+ def _updateSettings(self):
102
+ self._ewoks_default_inputs = self._window.getConfiguration()
103
+
104
+ def setScan(self, scan: TomwerScanBase):
105
+ self._scan = weakref.ref(scan)
106
+ self._window.setScan(scan=scan)
107
+
108
+ def getScan(self) -> TomwerScanBase | None:
109
+ if self._scan is None:
110
+ return None
111
+ else:
112
+ return self._scan()
113
+
114
+ def _getScanFromIcatProcessedData(self) -> TomwerScanBase:
115
+ """Return the associated scan to the latest set 'data_portal_processed_datasets'"""
116
+ data_portal_processed_datasets = self.get_task_input_value(
117
+ "data_portal_processed_datasets", None
118
+ )
119
+ if (
120
+ data_portal_processed_datasets is None
121
+ or len(data_portal_processed_datasets) == 0
122
+ ):
123
+ return None
124
+ else:
125
+ return data_portal_processed_datasets[0].source_scan
126
+
127
+ def handleNewSignals(self) -> None:
128
+ """Invoked by the workflow signal propagation manager after all
129
+ signals handlers have been called.
130
+ """
131
+ # update the widget when receive the scan (proposal, dataset...)
132
+ scan = self._getScanFromIcatProcessedData()
133
+ # update processing wheel if necessary
134
+ if self.__on_going_task == 0:
135
+ self._startProcessing()
136
+ self.__on_going_task += 1
137
+
138
+ if scan is None:
139
+ return
140
+
141
+ if scan != self.getScan():
142
+ self._window.setScan(scan)
143
+ super().handleNewSignals()
144
+
145
+ @Inputs.data_portal_processed_datasets
146
+ def add(self, data_portal_processed_datasets, signal_id=None):
147
+ # required because today ewoksorange is not handling multiple inputs
148
+ self.set_dynamic_input(
149
+ "data_portal_processed_datasets", data_portal_processed_datasets
150
+ )
151
+
152
+ def task_output_changed(self):
153
+ # update processing wheel if necessary
154
+ # task_output_changed is called when the ewoks task is finished from __ewoks_task_finished
155
+ # call once even if there is 0..n outputs
156
+ self.__on_going_task -= 1
157
+ if self.__on_going_task == 0:
158
+ self._endProcessing()
159
+ return super().task_output_changed()
160
+
161
+ def get_task_inputs(self):
162
+ task_inputs = super().get_task_inputs()
163
+ configuration = self._window.getConfiguration()
164
+
165
+ task_inputs["beamline"] = configuration["beamline"]
166
+ task_inputs["proposal"] = configuration["proposal"]
167
+ task_inputs["__process__"] = weakref.ref(self)
168
+
169
+ return task_inputs
170
+
171
+ def sizeHint(self):
172
+ return qt.QSize(500, 200)
@@ -1,8 +1,8 @@
1
1
  NAME = "data portal"
2
2
 
3
- ID = "orangecontrib.tomwer.widgets.icat"
3
+ ID = "orangecontrib.tomwer.widgets.dataportal"
4
4
 
5
- DESCRIPTION = "widgets for icat"
5
+ DESCRIPTION = "widgets for data portal publication"
6
6
 
7
7
  LONG_DESCRIPTION = "Contains widget to publish data to the esrf data portal"
8
8
 
@@ -1,33 +1,6 @@
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__ = [
27
- "H. Payno",
28
- ]
29
- __license__ = "MIT"
30
- __date__ = "28/09/2020"
2
+ from __future__ import annotations
3
+
31
4
 
32
5
  import os
33
6
  import threading