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,3 +1,5 @@
1
+ from __future__ import annotations
2
+
1
3
  import argparse
2
4
  import logging
3
5
  import os
@@ -5,10 +7,8 @@ import shutil
5
7
  import signal
6
8
  import sys
7
9
  import silx
8
- from typing import List
9
10
  from contextlib import closing
10
11
  from logging.handlers import RotatingFileHandler
11
- from urllib.request import urlopen
12
12
  from xml.sax.saxutils import escape
13
13
 
14
14
  import pyqtgraph
@@ -28,14 +28,23 @@ from processview.gui.processmanager import ProcessManagerWindow
28
28
  from silx.gui import qt
29
29
 
30
30
  import tomwer.version
31
- from tomwer.core.log.logger import TomwerLogger
32
31
  from orangecanvas.preview import previewdialog, previewmodel
33
32
  from orangecanvas.application import examples as orange_examples
34
- import ewoks
33
+ import ewokscore
34
+ import ewoksorange
35
35
  import tomoscan.version
36
36
 
37
37
  from .config import TomwerConfig, TomwerSplashScreen
38
38
 
39
+ from tomwer.core.log.processlog import (
40
+ PROCESS_ENDED_NAME,
41
+ PROCESS_FAILED_NAME,
42
+ PROCESS_INFORM_NAME,
43
+ PROCESS_SKIPPED_NAME,
44
+ PROCESS_STARTED_NAME,
45
+ PROCESS_SUCCEED_NAME,
46
+ )
47
+
39
48
  try:
40
49
  import nabu
41
50
  except ImportError:
@@ -71,9 +80,38 @@ LOG_FILE_NAME = "tomwer.log"
71
80
  LOG_FOLDER = "/var/log/tomwer"
72
81
 
73
82
 
83
+ # These are the sequences need to get colored ouput
84
+ _RESET_SEQ = "\033[0m"
85
+
86
+ _BLACK = "\033[30m"
87
+ _RED = "\033[31m"
88
+ _GREEN = "\033[32m"
89
+ _YELLOW = "\033[33m"
90
+ _BLUE = "\033[34m"
91
+ _MAGENTA = "\033[35m"
92
+
93
+
94
+ LOG_COLORS = {
95
+ "WARNING": _MAGENTA,
96
+ "INFO": _BLACK,
97
+ "DEBUG": _BLUE,
98
+ "CRITICAL": _YELLOW,
99
+ "ERROR": _RED,
100
+ PROCESS_SKIPPED_NAME: _MAGENTA,
101
+ PROCESS_ENDED_NAME: _BLACK,
102
+ PROCESS_INFORM_NAME: _BLACK,
103
+ PROCESS_STARTED_NAME: _BLACK,
104
+ PROCESS_FAILED_NAME: _RED,
105
+ PROCESS_SUCCEED_NAME: _GREEN,
106
+ }
107
+
108
+
74
109
  class MainWindow(_MainWindow):
75
110
  HELPDESK_URL = "https://requests.esrf.fr/plugins/servlet/desk/portal/41"
76
111
 
112
+ FORCE_OBJECT_SUPERVISOR_DISPLAY = True
113
+ """If true will always display the processed supervisor at start up. Restore state will be ignored."""
114
+
77
115
  def __init__(self, *args, **kwargs):
78
116
  super().__init__(*args, **kwargs)
79
117
  self.process_supervisor_dock = DockWidget(
@@ -90,6 +128,15 @@ class MainWindow(_MainWindow):
90
128
  )
91
129
  self.addDockWidget(qt.Qt.BottomDockWidgetArea, self.process_supervisor_dock)
92
130
 
131
+ def restoreState(self, state, version=0):
132
+ # for now we always want to display the process supervisor
133
+ restored = super().restoreState(state=state, version=version)
134
+ if self.FORCE_OBJECT_SUPERVISOR_DISPLAY:
135
+ self.show_processes_manager_action.setChecked(True)
136
+ self.process_supervisor_dock.setVisible(True)
137
+
138
+ return restored
139
+
93
140
  def setup_actions(self):
94
141
  super().setup_actions()
95
142
  # create the action to connect with it
@@ -146,6 +193,14 @@ class MainWindow(_MainWindow):
146
193
  triggered=self.open_python_script_example,
147
194
  menuRole=qt.QAction.AboutRole,
148
195
  )
196
+ self.python_script_example_action = qt.QAction(
197
+ self.tr("ID16b examples"),
198
+ self,
199
+ objectName="id16b-example",
200
+ toolTip=self.tr("ID16b use case."),
201
+ triggered=self.open_id16b_example,
202
+ menuRole=qt.QAction.AboutRole,
203
+ )
149
204
  # Predefined workflows menu.
150
205
  self.predefined_workflows_menu = qt.QMenu(
151
206
  self.tr("&Examples"),
@@ -243,6 +298,11 @@ class MainWindow(_MainWindow):
243
298
  orange_examples.workflows(), filter_names=("_script",)
244
299
  )
245
300
 
301
+ def open_id16b_example(self):
302
+ return self.__open_examples(
303
+ orange_examples.workflows(), filter_names=("ID16b",)
304
+ )
305
+
246
306
  def open_cor_search_example(self):
247
307
  return self.__open_examples(
248
308
  orange_examples.workflows(), filter_names=("find_cor", "cor_search")
@@ -293,7 +353,7 @@ class _OMain(ocMain):
293
353
  )
294
354
  return parser
295
355
 
296
- def parse_arguments(self, argv: List[str]):
356
+ def parse_arguments(self, argv: list[str]):
297
357
  super().parse_arguments(argv)
298
358
  # define silx plot backend. For now the si;pler is to
299
359
  # define an environment variable.
@@ -310,7 +370,40 @@ class _OMain(ocMain):
310
370
  silx.config.DEFAULT_PLOT_BACKEND = "matplotlib"
311
371
 
312
372
  def setup_logging(self):
313
- super().setup_logging()
373
+ level = self.options.log_level
374
+ logformat = "%(asctime)s:%(levelname)s:%(name)s: %(message)s"
375
+
376
+ # File handler should always be at least INFO level so we need
377
+ # the application root level to be at least at INFO.
378
+ root_level = min(level, logging.INFO)
379
+ rootlogger = logging.getLogger()
380
+ rootlogger.setLevel(root_level)
381
+
382
+ # Standard output stream handler at the requested level
383
+ if sys.platform in ("linux", "linux2", "darwin"):
384
+ stream_hander = make_linux_stream_colored_handler(
385
+ level, fileobj=self.__stderr__
386
+ )
387
+ else:
388
+ stream_hander = make_stream_handler(
389
+ level, fileobj=self.__stderr__, fmt=logformat
390
+ )
391
+ rootlogger.addHandler(stream_hander)
392
+ # Setup log capture for MainWindow/Log
393
+ log_stream = TextStream(objectName="-log-stream")
394
+ self.output.connectStream(log_stream)
395
+ self.stack.push(closing(log_stream)) # close on exit
396
+ log_handler = make_stream_handler(level, fileobj=log_stream, fmt=logformat)
397
+ rootlogger.addHandler(log_handler)
398
+
399
+ # Also log to file
400
+ file_handler = make_file_handler(
401
+ root_level,
402
+ os.path.join(config.log_dir(), "canvas.log"),
403
+ mode="w",
404
+ )
405
+ rootlogger.addHandler(file_handler)
406
+
314
407
  make_sql_logger(self.options.log_level)
315
408
 
316
409
  def setup_application(self):
@@ -381,11 +474,12 @@ ABOUT_TEMPLATE = """\
381
474
  <h4>{name}</h4>
382
475
  <p>tomwer version: {tomwer_version}</p>
383
476
  <p>nabu version: {nabu_version}</p>
384
- <p>nxtomomill version: {nxtomomill_version}</p>
385
477
  <p>nxtomo version: {nxtomo_version}</p>
478
+ <p>nxtomomill version: {nxtomomill_version}</p>
386
479
  <p>tomoscan version: {tomoscan_version}</p>
480
+ <p>ewokscore version: {ewokscore_version}</p>
481
+ <p>ewoksorange version: {ewoksorange_version}</p>
387
482
  <p>sluurp version: {sluurp_version}</p>
388
- <p>ewoks version: {ewoks_version}</p>
389
483
  """
390
484
 
391
485
 
@@ -416,8 +510,13 @@ class AboutDialog(qt.QDialog):
416
510
  sluurp_version=escape(
417
511
  sluurp.__version__ if has_sluurp else "not installed"
418
512
  ),
419
- ewoks_version=escape(
420
- ewoks.__version__ if hasattr(ewoks, "__version__") else "???"
513
+ ewokscore_version=escape(
514
+ ewokscore.__version__ if hasattr(ewokscore, "__version__") else "???"
515
+ ),
516
+ ewoksorange_version=escape(
517
+ ewoksorange.__version__
518
+ if hasattr(ewoksorange, "__version__")
519
+ else "???"
421
520
  ),
422
521
  )
423
522
  text_label = qt.QLabel(text)
@@ -446,45 +545,45 @@ class OMain(_OMain):
446
545
 
447
546
  def setup_logging(self):
448
547
  super().setup_logging()
449
- rootlogger = logging.getLogger()
450
- rootlogger = TomwerLogger(rootlogger)
451
- logging.setLoggerClass(TomwerLogger)
548
+ # rootlogger = logging.getLogger()
549
+ # rootlogger = TomwerLogger(rootlogger)
550
+ # logging.setLoggerClass(TomwerLogger)
452
551
 
453
552
  def setup_sys_redirections(self):
454
- self._tomwLogger = TomwerLogger("tomwer")
455
- try:
456
- self.output = doc = TerminalTextDocument()
553
+ self.output = doc = TerminalTextDocument()
457
554
 
458
- stdout = TextStream(objectName="-stdout")
459
- stderr = TextStream(objectName="-stderr")
460
- doc.connectStream(stdout)
461
- doc.connectStream(stderr, color=qt.Qt.red)
555
+ stdout = TextStream(objectName="-stdout")
556
+ stderr = TextStream(objectName="-stderr")
557
+ doc.connectStream(stdout)
558
+ doc.connectStream(stderr, color=qt.Qt.red)
462
559
 
463
- if sys.stdout is not None:
464
- stdout.stream.connect(sys.stdout.write, qt.Qt.DirectConnection)
560
+ if sys.stdout is not None:
561
+ stdout.stream.connect(sys.stdout.write, qt.Qt.DirectConnection)
465
562
 
466
- self.__stdout__ = sys.stdout
467
- sys.stdout = stdout
563
+ self.__stdout__ = sys.stdout
564
+ sys.stdout = stdout
468
565
 
469
- if sys.stderr is not None:
470
- stderr.stream.connect(sys.stderr.write, qt.Qt.DirectConnection)
566
+ if sys.stderr is not None:
567
+ stderr.stream.connect(sys.stderr.write, qt.Qt.DirectConnection)
471
568
 
472
- self.__stderr__ = sys.stderr
473
- sys.stderr = stderr
474
- self.__excepthook__ = sys.excepthook
475
- sys.excepthook = ExceptHook(stream=stderr)
569
+ self.__stderr__ = sys.stderr
570
+ sys.stderr = stderr
571
+ self.__excepthook__ = sys.excepthook
572
+ sys.excepthook = ExceptHook(stream=stderr)
476
573
 
477
- self.stack.push(closing(stdout))
478
- self.stack.push(closing(stderr))
479
- except Exception:
480
- super().setup_sys_redirections()
574
+ self.stack.push(closing(stdout))
575
+ self.stack.push(closing(stderr))
481
576
 
482
577
  def argument_parser(self) -> argparse.ArgumentParser:
483
578
  parser = super().argument_parser()
484
579
  for action in parser._actions:
580
+ # avoid clearing settings because this make people confused
485
581
  if action.dest == "clear_widget_settings":
486
582
  parser._remove_action(action)
487
583
  break
584
+ # by default log are only displaying errors. But we want to get warning as well (for deprecation for example).
585
+ if action.dest == "log_level":
586
+ action.default = logging.WARNING
488
587
 
489
588
  parser.add_argument(
490
589
  "--no-color-stdout-logs",
@@ -534,38 +633,45 @@ def dealWithLogFile():
534
633
  )
535
634
 
536
635
 
537
- def check_is_latest_release() -> bool:
538
- """Check if the current version is the latest release."""
539
- url = "https://gitlab.esrf.fr/tomotools/tomwer/-/raw/master/tomwer/version.py"
540
- current_version = tomwer.version.version
541
- try:
542
- version_file_html = urlopen(url, data=None, timeout=10)
543
- except Exception as e:
544
- _logger.warning(f"Fail to load version of the latest release. Reason is {e}")
545
- return True
546
- else:
547
- latest_release_version = None
548
- for line in version_file_html.readlines():
549
- t_line = line.decode("utf-8")
550
- t_line = t_line.replace(" ", "")
551
- if t_line.startswith("latest_release_version_info="):
552
- latest_release_version = t_line.replace(
553
- "latest_release_version_info=", ""
554
- )
555
- break
556
- if latest_release_version is None:
557
- _logger.warning("Unable to find the version of the latest " "release.")
558
-
559
- elif current_version < latest_release_version:
560
- msg = qt.QMessageBox()
561
- msg.setIcon(qt.QMessageBox.Question)
562
- types = qt.QMessageBox.Ok | qt.QMessageBox.Cancel
563
- message = (
564
- "The version you want to use ({}) is not the latest "
565
- "version ({}). Do you want to continue ?"
566
- )
567
- msg.setStandardButtons(types)
568
- msg.setWindowTitle("No the latest version")
569
- msg.setText(message)
570
- return msg.exec_() == qt.QMessageBox.Ok
571
- return True
636
+ class _ColoredFormatter(logging.Formatter):
637
+ """Dedicated colors to highlight level name by coloring logs (only for linux terminals)"""
638
+
639
+ @staticmethod
640
+ def color_formatting(message: str, levelname: str, ascii_time):
641
+ """colors message using ascii"""
642
+ return (
643
+ f"{ascii_time} {LOG_COLORS[levelname]}[{levelname}]{_RESET_SEQ} {message}"
644
+ )
645
+
646
+ def format(self, record):
647
+ record.asctime = self.formatTime(record, "%Y-%m-%d %H:%M:%S")
648
+ record.message = record.getMessage()
649
+ return self.color_formatting(
650
+ message=record.message,
651
+ levelname=record.levelname,
652
+ ascii_time=record.asctime,
653
+ )
654
+
655
+
656
+ def make_linux_stream_colored_handler(level, fileobj=None):
657
+ handler = logging.StreamHandler(fileobj)
658
+ handler.setLevel(level)
659
+ formatter = _ColoredFormatter()
660
+ handler.setFormatter(formatter)
661
+ return handler
662
+
663
+
664
+ def make_stream_handler(level, fileobj=None, fmt=None):
665
+ handler = logging.StreamHandler(fileobj)
666
+ handler.setLevel(level)
667
+ if fmt:
668
+ handler.setFormatter(logging.Formatter(fmt))
669
+ return handler
670
+
671
+
672
+ def make_file_handler(level, filename, mode="w", fmt=None):
673
+ handler = logging.FileHandler(filename, mode=mode, encoding="utf-8")
674
+ handler.setLevel(level)
675
+ if fmt:
676
+ handler.setFormatter(logging.Formatter(fmt))
677
+ return handler
@@ -7,9 +7,8 @@ def splash_screen():
7
7
  """
8
8
 
9
9
  :return: splash screen for orange-canvas
10
- :rtype: tuple(QPixmap, QRect),
11
10
 
12
- note: QRect is used by orange to define a mask to display the message.
11
+ :note: QRect is used by orange to define a mask to display the message.
13
12
  In our case we overwrite the QSplashScreen so we don't need this.
14
13
  """
15
14
  pixmap = icons.getQPixmap("tomwer")
@@ -20,7 +19,6 @@ def getIcon():
20
19
  """
21
20
 
22
21
  :return: application icon
23
- :rtype: QIcon
24
22
  """
25
23
  pixmap = icons.getQPixmap("tomwer")
26
24
  return qt.QIcon(pixmap)
@@ -0,0 +1,47 @@
1
+ from __future__ import annotations
2
+
3
+ import tomoscan.version
4
+
5
+ import ewokscore
6
+ import ewoksorange
7
+ import tomwer.version
8
+ import sluurp
9
+
10
+ try:
11
+ import nxtomomill.version
12
+ except ImportError:
13
+ has_nxtomomill = False
14
+ else:
15
+ has_nxtomomill = True
16
+ try:
17
+ import nabu
18
+ except ImportError:
19
+ has_nabu = False
20
+ else:
21
+ has_nabu = True
22
+ try:
23
+ import nxtomo.version
24
+ except ImportError:
25
+ has_nxtomo = False
26
+ else:
27
+ has_nxtomo = True
28
+
29
+
30
+ def get_tomotools_stack_versions() -> dict[str, str]:
31
+ """Return the version of the main libraries used by tomwer"""
32
+ stack = {
33
+ "tomwer": tomwer.version.version,
34
+ }
35
+
36
+ if has_nabu:
37
+ stack["nabu"] = nabu.version
38
+ if has_nxtomo:
39
+ stack["nxtomo"] = nxtomo.version.version
40
+ if has_nxtomomill:
41
+ stack["nxtomomill"] = nxtomomill.version.version
42
+ stack["tomoscan"] = tomoscan.version.version
43
+ stack["ewokscore"] = ewokscore.__version__
44
+ stack["ewoksorange"] = ewoksorange.__version__
45
+ stack["sluurp"] = sluurp.__version__
46
+
47
+ return stack
@@ -52,13 +52,10 @@ class WidgetsScheme(Scheme):
52
52
  def show_report_view(self):
53
53
  return
54
54
 
55
- def has_report(self):
55
+ def has_report(self) -> bool:
56
56
  """
57
57
  Does this workflow have an associated report
58
58
 
59
- Returns
60
- -------
61
- has_report: bool
62
59
  """
63
60
  return self.__report_view is not None
64
61
 
@@ -66,9 +63,7 @@ class WidgetsScheme(Scheme):
66
63
  """
67
64
  Return a OWReport instance used by the workflow.
68
65
 
69
- Returns
70
- -------
71
- report : OWReport
66
+ :return: report
72
67
  """
73
68
  return None
74
69
 
@@ -76,9 +71,7 @@ class WidgetsScheme(Scheme):
76
71
  """
77
72
  Set the designated OWReport view for this workflow.
78
73
 
79
- Parameters
80
- ----------
81
- view :
74
+ :param view:
82
75
  """
83
76
  self.__report_view = None
84
77
 
tomwer/app/diffframe.py CHANGED
@@ -1,5 +1,7 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding: utf-8 -*-
3
+ """Application to display the difference between two frames.
4
+ """
3
5
 
4
6
  import argparse
5
7
  import logging
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding: utf-8 -*-
3
-
3
+ """Application to edit (key by key) the 'imagekey' value of a NXtomo ('imagekey' defines if a frame is a 'dark', 'flat' or a 'projection')
4
+ """
4
5
  import argparse
5
6
  import logging
6
7
  import signal
@@ -1,5 +1,7 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding: utf-8 -*-
3
+ """Application to edit (group by group) the 'imagekey' value of a NXtomo ('imagekey' defines if a frame is a 'dark', 'flat' or a 'projection')
4
+ """
3
5
 
4
6
  import argparse
5
7
  import logging
tomwer/app/multicor.py CHANGED
@@ -1,12 +1,15 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding: utf-8 -*-
3
+ """Application to reconstruct a slice for a set of center of rotation value. Interface to nabu multicor
4
+ """
5
+
6
+ from __future__ import annotations
3
7
 
4
8
  import argparse
5
9
  import logging
6
10
  import signal
7
11
  import sys
8
12
  import time
9
- from typing import Union
10
13
 
11
14
  import silx
12
15
  from silx.gui import qt
@@ -122,7 +125,7 @@ class SAAxisWindow(_SAAxisWindow):
122
125
  def stop(self):
123
126
  self._stopProcessingThread()
124
127
 
125
- def _computeEstimatedCor(self) -> Union[float, None]:
128
+ def _computeEstimatedCor(self) -> float | None:
126
129
  scan = self.getScan()
127
130
  if scan is None:
128
131
  return
tomwer/app/multipag.py CHANGED
@@ -1,12 +1,15 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding: utf-8 -*-
3
+ """Application to reconstruct a slice with Paganin for a set of delta/beta values.
4
+ """
5
+
6
+ from __future__ import annotations
3
7
 
4
8
  import argparse
5
9
  import logging
6
10
  import signal
7
11
  import sys
8
12
  import time
9
- from typing import Union
10
13
 
11
14
  import silx
12
15
  from silx.gui import qt
@@ -20,6 +23,10 @@ from tomwer.core.process.reconstruction.darkref.darkrefs import (
20
23
  from tomwer.core.process.reconstruction.sadeltabeta.sadeltabeta import (
21
24
  SADeltaBetaTask,
22
25
  )
26
+ from tomwer.core.process.reconstruction.utils.cor import (
27
+ relative_pos_to_absolute,
28
+ absolute_pos_to_relative,
29
+ )
23
30
  from tomwer.core.process.task import Task
24
31
  from tomwer.core.scan.scanfactory import ScanFactory
25
32
  from tomwer.core.utils.resource import increase_max_number_file
@@ -133,13 +140,17 @@ class SADeltaBetaWindow(_SADeltaBetaWindow):
133
140
 
134
141
  def _relativeValueEdited(self):
135
142
  old = self._absoluteCORValueQLE.blockSignals(True)
136
- value = self._relativeCORValueQLE.value() + self._imageWidth / 2.0
143
+ value = relative_pos_to_absolute(
144
+ relative_pos=self._relativeCORValueQLE.value(), det_width=self._imageWidth
145
+ )
137
146
  self._absoluteCORValueQLE.setValue(value)
138
147
  self._absoluteCORValueQLE.blockSignals(old)
139
148
 
140
- def _absolueValueEdited(self):
149
+ def _absoluteValueEdited(self):
141
150
  old = self._relativeCORValueQLE.blockSignals(True)
142
- value = self._absoluteCORValueQLE.value() - self._imageWidth / 2.0
151
+ value = absolute_pos_to_relative(
152
+ absolute_pos=self._absoluteCORValueQLE.value(), det_width=self._imageWidth
153
+ )
143
154
  self._relativeCORValueQLE.setValue(value)
144
155
  self._relativeCORValueQLE.blockSignals(old)
145
156
 
@@ -200,7 +211,7 @@ class SADeltaBetaWindow(_SADeltaBetaWindow):
200
211
  def stop(self):
201
212
  self._stopProcessingThread()
202
213
 
203
- def _computeEstimatedCor(self) -> Union[float, None]:
214
+ def _computeEstimatedCor(self) -> float | None:
204
215
  scan = self.getScan()
205
216
  if scan is None:
206
217
  return
tomwer/app/nabuapp.py CHANGED
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding: utf-8 -*-
3
-
3
+ """Application to reconstruct a slice with nabu
4
+ """
4
5
  import argparse
5
6
  import logging
6
7
  import signal
@@ -1,5 +1,7 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding: utf-8 -*-
3
+ """Application to edit several entries of a NXtomo
4
+ """
3
5
 
4
6
  import argparse
5
7
  import logging
@@ -9,6 +11,7 @@ import sys
9
11
  from silx.gui import qt
10
12
 
11
13
  from tomwer.core.scan.scanfactory import ScanFactory
14
+ from tomwer.core.process.edit.nxtomoeditor import NXtomoEditorTask
12
15
  from tomwer.gui.edit.nxtomoeditor import NXtomoEditorDialog as _NXtomoEditorDialog
13
16
  from tomwer.gui.utils.splashscreen import getMainSplashScreen
14
17
 
@@ -21,18 +24,20 @@ class NXtomoEditorDialog(_NXtomoEditorDialog):
21
24
  super().__init__()
22
25
 
23
26
  # connect signal / slot
24
- self._buttons.button(qt.QDialogButtonBox.Ok).released.connect(
25
- self._overwriteNXtomo
26
- )
27
+ self._buttons.button(qt.QDialogButtonBox.Ok).released.connect(self._triggerTask)
28
+
29
+ def getScan(self):
30
+ return self.mainWidget.getScan()
27
31
 
28
- def _overwriteNXtomo(self, *args, **kwargs):
29
- print("start overwrite")
30
- try:
31
- self.overwriteNXtomo()
32
- except Exception as e:
33
- print(f"write failed with error {e}")
34
- else:
35
- print("overwrite succeded")
32
+ def _triggerTask(self, *args, **kwargs):
33
+ task = NXtomoEditorTask(
34
+ inputs={
35
+ "data": self.getScan(),
36
+ "configuration": self.getConfigurationForTask(),
37
+ }
38
+ )
39
+ task.run()
40
+ print("edition finished")
36
41
 
37
42
 
38
43
  def main(argv):
@@ -78,7 +83,7 @@ def main(argv):
78
83
  )
79
84
  except Exception as e:
80
85
  _logger.error(
81
- f"Fail to find an NXtomo from {options.scan_path} at {options.entry}. Error is {e}"
86
+ f"Fail to find a NXtomo from {options.scan_path} at {options.entry}. Error is {e}"
82
87
  )
83
88
  return
84
89
 
@@ -1,5 +1,7 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding: utf-8 -*-
3
+ """Application to append dark of flat frames to an existing NXtomo
4
+ """
3
5
 
4
6
  import argparse
5
7
  import logging
tomwer/app/radiostack.py CHANGED
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding: utf-8 -*-
3
-
3
+ """Application to display scan radios as a stack
4
+ """
4
5
  import argparse
5
6
  import logging
6
7
  import os
@@ -21,7 +22,7 @@ _logger = logging.getLogger(__name__)
21
22
 
22
23
 
23
24
  def getinputinfo():
24
- return "tomwer radiostack [scanDir]"
25
+ return "tomwer radio-stack [scanName]"
25
26
 
26
27
 
27
28
  def addFolderAndSubFolder(stack, path):
@@ -1,5 +1,7 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding: utf-8 -*-
3
+ """Application to compute reduced darks and flats for a given scan
4
+ """
3
5
 
4
6
  import argparse
5
7
  import logging
@@ -60,6 +62,7 @@ def _exec_with_interaction(scan, dark_method, flat_method, overwrite):
60
62
 
61
63
  class _DarkRefWidgetRunnable(DarkRefWidget):
62
64
  sigScanReady = qt.Signal(str)
65
+ """emit when scan ready"""
63
66
 
64
67
  def __init__(self, scan, parent=None):
65
68
  self.__scan = scan