tomwer 1.3.26__py3-none-any.whl → 1.4.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (638) hide show
  1. orangecontrib/tomwer/orange/managedprocess.py +1 -29
  2. orangecontrib/tomwer/orange/settings.py +2 -28
  3. orangecontrib/tomwer/tests/TestAcquisition.py +220 -0
  4. orangecontrib/tomwer/tutorials/append_raw_darks_and_flats_frames_to_NXtomos.ows +2 -2
  5. orangecontrib/tomwer/tutorials/copy_reduced_darks_and_flats_meth1.ows +1 -1
  6. orangecontrib/tomwer/tutorials/{icat_publication.ows → drac_publication.ows} +7 -21
  7. orangecontrib/tomwer/tutorials/id16b/ID16b_full_volume.ows +22 -0
  8. orangecontrib/tomwer/tutorials/id16b/ID16b_insitu.ows +302 -0
  9. orangecontrib/tomwer/tutorials/id16b/ID16b_normalization.ows +218 -0
  10. orangecontrib/tomwer/tutorials/simple_volume_to_slurm_reconstruction.ows +29 -24
  11. orangecontrib/tomwer/tutorials/test_cor.ows +19 -0
  12. orangecontrib/tomwer/tutorials/volume_casting_on_slurm.ows +54 -0
  13. orangecontrib/tomwer/widgets/__init__.py +3 -5
  14. orangecontrib/tomwer/widgets/cluster/FutureSupervisorOW.py +35 -54
  15. orangecontrib/tomwer/widgets/cluster/SlurmClusterOW.py +1 -31
  16. orangecontrib/tomwer/widgets/control/AdvancementOW.py +1 -29
  17. orangecontrib/tomwer/widgets/control/DataDiscoveryOW.py +5 -4
  18. orangecontrib/tomwer/widgets/control/DataListenerOW.py +1 -29
  19. orangecontrib/tomwer/widgets/control/DataSelectorOW.py +11 -30
  20. orangecontrib/tomwer/widgets/control/DataTransfertOW.py +2 -28
  21. orangecontrib/tomwer/widgets/control/DataValidatorOW.py +1 -28
  22. orangecontrib/tomwer/widgets/control/DataWatcherOW.py +1 -28
  23. orangecontrib/tomwer/widgets/control/EDF2NXTomomillOW.py +48 -51
  24. orangecontrib/tomwer/widgets/control/EmailOW.py +12 -2
  25. orangecontrib/tomwer/widgets/control/FilterOW.py +1 -28
  26. orangecontrib/tomwer/widgets/control/NXTomomillOW.py +37 -53
  27. orangecontrib/tomwer/widgets/control/NXtomoConcatenate.py +21 -20
  28. orangecontrib/tomwer/widgets/control/NotifierOW.py +9 -28
  29. orangecontrib/tomwer/widgets/control/ReduceDarkFlatSelectorOW.py +3 -2
  30. orangecontrib/tomwer/widgets/control/SingleTomoObjOW.py +1 -27
  31. orangecontrib/tomwer/widgets/control/TimerOW.py +9 -28
  32. orangecontrib/tomwer/widgets/control/TomoObjSeriesOW.py +58 -0
  33. orangecontrib/tomwer/widgets/control/VolumeSelector.py +8 -30
  34. orangecontrib/tomwer/widgets/control/icons/nxtomomill.svg +173 -119
  35. orangecontrib/tomwer/widgets/control/icons/reduced_darkflat_selector.png +0 -0
  36. orangecontrib/tomwer/widgets/control/icons/reduced_darkflat_selector.svg +55 -195
  37. orangecontrib/tomwer/widgets/control/icons/{tomoobjserie.svg → tomoobjseries.svg} +2 -2
  38. orangecontrib/tomwer/widgets/dataportal/PublishProcessedDataOW.py +172 -0
  39. orangecontrib/tomwer/widgets/{icat → dataportal}/__init__.py +2 -2
  40. orangecontrib/tomwer/widgets/debugtools/DatasetGeneratorOW.py +2 -29
  41. orangecontrib/tomwer/widgets/debugtools/ObjectInspectorOW.py +1 -29
  42. orangecontrib/tomwer/widgets/edit/DarkFlatPatchOW.py +48 -73
  43. orangecontrib/tomwer/widgets/edit/ImageKeyEditorOW.py +48 -75
  44. orangecontrib/tomwer/widgets/edit/ImageKeyUpgraderOW.py +5 -30
  45. orangecontrib/tomwer/widgets/edit/NXtomoEditorOW.py +51 -52
  46. orangecontrib/tomwer/widgets/other/PythonScriptOW.py +22 -10
  47. orangecontrib/tomwer/widgets/reconstruction/AxisOW.py +51 -60
  48. orangecontrib/tomwer/widgets/reconstruction/CastNabuVolumeOW.py +22 -68
  49. orangecontrib/tomwer/widgets/reconstruction/DarkRefAndCopyOW.py +3 -30
  50. orangecontrib/tomwer/widgets/reconstruction/NabuHelicalPrepareWeightsDoubleOW.py +21 -19
  51. orangecontrib/tomwer/widgets/reconstruction/NabuOW.py +7 -70
  52. orangecontrib/tomwer/widgets/reconstruction/NabuVolumeOW.py +41 -84
  53. orangecontrib/tomwer/widgets/reconstruction/SAAxisOW.py +15 -40
  54. orangecontrib/tomwer/widgets/reconstruction/SADeltaBetaOW.py +13 -35
  55. orangecontrib/tomwer/widgets/reconstruction/SinoNormOW.py +2 -30
  56. orangecontrib/tomwer/widgets/stitching/ZStitchingConfigOW.py +11 -11
  57. orangecontrib/tomwer/widgets/utils.py +2 -29
  58. orangecontrib/tomwer/widgets/visualization/DataViewerOW.py +1 -27
  59. orangecontrib/tomwer/widgets/visualization/DiffViewerOW.py +1 -27
  60. orangecontrib/tomwer/widgets/visualization/NXtomoMetadataViewerOW.py +1 -1
  61. orangecontrib/tomwer/widgets/visualization/RadioStackOW.py +2 -28
  62. orangecontrib/tomwer/widgets/visualization/SampleMovedOW.py +1 -27
  63. orangecontrib/tomwer/widgets/visualization/SinogramViewerOW.py +1 -27
  64. orangecontrib/tomwer/widgets/visualization/SliceStackOW.py +2 -28
  65. tomwer/__init__.py +3 -28
  66. tomwer/__main__.py +8 -4
  67. tomwer/app/__init__.py +2 -0
  68. tomwer/app/axis.py +8 -10
  69. tomwer/app/canvas.py +23 -29
  70. tomwer/app/canvas_launcher/config.py +14 -102
  71. tomwer/app/canvas_launcher/environ.py +5 -8
  72. tomwer/app/canvas_launcher/mainwindow.py +175 -69
  73. tomwer/app/canvas_launcher/splash.py +1 -3
  74. tomwer/app/canvas_launcher/utils.py +47 -0
  75. tomwer/app/canvas_launcher/widgetsscheme.py +3 -10
  76. tomwer/app/diffframe.py +2 -0
  77. tomwer/app/imagekeyeditor.py +2 -1
  78. tomwer/app/imagekeyupgrader.py +2 -0
  79. tomwer/app/multicor.py +5 -2
  80. tomwer/app/multipag.py +16 -5
  81. tomwer/app/nabuapp.py +2 -1
  82. tomwer/app/nxtomoeditor.py +17 -12
  83. tomwer/app/patchrawdarkflat.py +2 -0
  84. tomwer/app/radiostack.py +3 -2
  85. tomwer/app/reducedarkflat.py +3 -0
  86. tomwer/app/samplemoved.py +2 -0
  87. tomwer/app/scanviewer.py +2 -0
  88. tomwer/app/sinogramviewer.py +2 -0
  89. tomwer/app/slicestack.py +11 -13
  90. tomwer/app/stitching/common.py +431 -0
  91. tomwer/app/stopdatalistener.py +3 -0
  92. tomwer/app/ystitching.py +26 -0
  93. tomwer/app/zstitching.py +8 -363
  94. tomwer/core/__init__.py +2 -28
  95. tomwer/core/cluster/__init__.py +3 -0
  96. tomwer/core/cluster/cluster.py +10 -26
  97. tomwer/core/futureobject.py +17 -43
  98. tomwer/core/log/__init__.py +2 -0
  99. tomwer/core/log/processlog.py +0 -28
  100. tomwer/core/process/cluster/supervisor.py +52 -34
  101. tomwer/core/process/conditions/filters.py +3 -28
  102. tomwer/core/process/control/datalistener/datalistener.py +7 -75
  103. tomwer/core/process/control/datalistener/rpcserver.py +8 -38
  104. tomwer/core/process/control/datawatcher/datawatcher.py +11 -40
  105. tomwer/core/process/control/datawatcher/datawatcherobserver.py +30 -64
  106. tomwer/core/process/control/datawatcher/datawatcherprocess.py +11 -32
  107. tomwer/core/process/control/datawatcher/edfdwprocess.py +2 -27
  108. tomwer/core/process/control/datawatcher/hdf5dwprocess.py +1 -26
  109. tomwer/core/process/control/datawatcher/status.py +1 -26
  110. tomwer/core/process/control/emailnotifier.py +11 -23
  111. tomwer/core/process/control/nxtomoconcatenate.py +20 -18
  112. tomwer/core/process/control/nxtomomill.py +9 -44
  113. tomwer/core/process/control/scanlist.py +0 -27
  114. tomwer/core/process/control/scantransfer.py +15 -13
  115. tomwer/core/process/control/scanvalidator.py +4 -30
  116. tomwer/core/process/control/{test → tests}/test_concatenate_nxtomos.py +5 -5
  117. tomwer/core/process/control/timer.py +1 -27
  118. tomwer/core/process/control/tomoobjseries.py +12 -0
  119. tomwer/core/process/drac/binning.py +37 -0
  120. tomwer/core/process/drac/dracbase.py +170 -0
  121. tomwer/core/process/drac/gallery.py +109 -0
  122. tomwer/core/process/drac/output.py +12 -0
  123. tomwer/core/process/drac/processeddataset.py +147 -0
  124. tomwer/core/process/drac/publish.py +118 -0
  125. tomwer/core/process/drac/rawdataset.py +142 -0
  126. tomwer/core/process/drac/tests/test_gallery.py +71 -0
  127. tomwer/core/process/drac/tests/test_icat_processed_dataset.py +80 -0
  128. tomwer/core/process/drac/tests/test_icat_raw_dataset.py +90 -0
  129. tomwer/core/process/edit/darkflatpatch.py +1 -28
  130. tomwer/core/process/edit/imagekeyeditor.py +4 -32
  131. tomwer/core/process/edit/nxtomoeditor.py +307 -0
  132. tomwer/core/process/edit/tests/test_darkflatpatch.py +243 -0
  133. tomwer/core/process/edit/tests/test_imagekey_editor.py +99 -0
  134. tomwer/core/process/output.py +9 -2
  135. tomwer/core/process/reconstruction/__init__.py +0 -26
  136. tomwer/core/process/reconstruction/axis/anglemode.py +1 -29
  137. tomwer/core/process/reconstruction/axis/axis.py +47 -804
  138. tomwer/core/process/reconstruction/axis/mode.py +89 -25
  139. tomwer/core/process/reconstruction/axis/params.py +131 -283
  140. tomwer/core/process/reconstruction/axis/projectiontype.py +0 -28
  141. tomwer/core/process/reconstruction/axis/side.py +8 -0
  142. tomwer/core/process/reconstruction/darkref/darkrefs.py +14 -39
  143. tomwer/core/process/reconstruction/darkref/darkrefscopy.py +7 -39
  144. tomwer/core/process/reconstruction/darkref/params.py +1 -28
  145. tomwer/core/process/reconstruction/nabu/castvolume.py +19 -34
  146. tomwer/core/process/reconstruction/nabu/nabucommon.py +18 -43
  147. tomwer/core/process/reconstruction/nabu/nabuscores.py +64 -68
  148. tomwer/core/process/reconstruction/nabu/nabuslices.py +63 -105
  149. tomwer/core/process/reconstruction/nabu/nabuvolume.py +44 -70
  150. tomwer/core/process/reconstruction/nabu/plane.py +10 -0
  151. tomwer/core/process/reconstruction/nabu/settings.py +1 -28
  152. tomwer/core/process/reconstruction/nabu/target.py +0 -28
  153. tomwer/core/process/reconstruction/nabu/test/test_castvolume.py +116 -0
  154. tomwer/core/process/reconstruction/nabu/test/test_nabu_utils.py +277 -0
  155. tomwer/core/process/reconstruction/nabu/test/test_nabunormalization.py +199 -0
  156. tomwer/core/process/reconstruction/nabu/utils.py +11 -60
  157. tomwer/core/process/reconstruction/normalization/normalization.py +2 -32
  158. tomwer/core/process/reconstruction/normalization/params.py +3 -35
  159. tomwer/core/process/reconstruction/output.py +14 -19
  160. tomwer/core/process/reconstruction/paramsbase.py +4 -33
  161. tomwer/core/process/reconstruction/saaxis/params.py +5 -33
  162. tomwer/core/process/reconstruction/saaxis/saaxis.py +22 -51
  163. tomwer/core/process/reconstruction/sadeltabeta/params.py +2 -31
  164. tomwer/core/process/reconstruction/sadeltabeta/sadeltabeta.py +18 -46
  165. tomwer/core/process/reconstruction/scores/params.py +9 -39
  166. tomwer/core/process/reconstruction/scores/scores.py +10 -42
  167. tomwer/core/process/reconstruction/tests/__init__.py +0 -0
  168. tomwer/core/process/reconstruction/tests/test_axis.py +46 -0
  169. tomwer/core/process/reconstruction/tests/test_darkref.py +33 -0
  170. tomwer/core/process/reconstruction/{test → tests}/test_saaxis.py +1 -27
  171. tomwer/core/process/reconstruction/tests/test_sadeltabeta.py +48 -0
  172. tomwer/core/process/reconstruction/{test → tests}/test_utils.py +4 -4
  173. tomwer/core/process/reconstruction/utils/cor.py +8 -4
  174. tomwer/core/process/script/python.py +1 -27
  175. tomwer/core/process/script/tests/test_script.py +41 -0
  176. tomwer/core/process/stitching/metadataholder.py +5 -4
  177. tomwer/core/process/stitching/nabustitcher.py +35 -5
  178. tomwer/core/process/stitching/tests/test_metadataholder.py +17 -0
  179. tomwer/core/process/task.py +20 -63
  180. tomwer/core/process/tests/__init__.py +0 -0
  181. tomwer/core/process/{test → tests}/test_conditions.py +1 -28
  182. tomwer/core/process/{test → tests}/test_dark_and_flat.py +1 -27
  183. tomwer/core/process/{test → tests}/test_data_listener.py +1 -27
  184. tomwer/core/process/{test → tests}/test_data_transfer.py +2 -28
  185. tomwer/core/process/{test → tests}/test_data_watcher.py +1 -27
  186. tomwer/core/process/{test → tests}/test_nabu.py +2 -33
  187. tomwer/core/process/{test → tests}/test_normalization.py +1 -26
  188. tomwer/core/process/{test → tests}/test_timer.py +1 -27
  189. tomwer/core/process/utils.py +2 -31
  190. tomwer/core/process/visualization/dataviewer.py +1 -26
  191. tomwer/core/process/visualization/diffviewer.py +1 -26
  192. tomwer/core/process/visualization/imagestackviewer.py +0 -26
  193. tomwer/core/process/visualization/radiostack.py +0 -26
  194. tomwer/core/process/visualization/samplemoved.py +0 -28
  195. tomwer/core/process/visualization/sinogramviewer.py +0 -27
  196. tomwer/core/process/visualization/slicestack.py +0 -28
  197. tomwer/core/process/visualization/tests/test_data_viewer.py +12 -0
  198. tomwer/core/process/visualization/tests/test_diff_viewer.py +12 -0
  199. tomwer/core/process/visualization/tests/test_image_stack_viewer.py +14 -0
  200. tomwer/core/process/visualization/tests/test_radio_stack.py +12 -0
  201. tomwer/core/process/visualization/tests/test_sample_moved.py +14 -0
  202. tomwer/core/process/visualization/tests/test_sinogram_viewer.py +13 -0
  203. tomwer/core/process/visualization/tests/test_slice_stack.py +13 -0
  204. tomwer/core/process/visualization/tests/test_volume_viewer.py +12 -0
  205. tomwer/core/process/visualization/volumeviewer.py +0 -29
  206. tomwer/core/scan/__init__.py +3 -27
  207. tomwer/core/scan/blissscan.py +5 -34
  208. tomwer/core/scan/edfscan.py +19 -53
  209. tomwer/core/scan/hdf5scan.py +2 -2
  210. tomwer/core/scan/nxtomoscan.py +48 -54
  211. tomwer/core/scan/scanbase.py +107 -203
  212. tomwer/core/scan/scanfactory.py +11 -41
  213. tomwer/core/scan/tests/__init__.py +0 -0
  214. tomwer/core/scan/tests/test_edf.py +25 -0
  215. tomwer/core/scan/tests/test_future_scan.py +35 -0
  216. tomwer/core/scan/tests/test_nxtomoscan.py +143 -0
  217. tomwer/core/scan/tests/test_process_registration.py +64 -0
  218. tomwer/core/settings.py +18 -40
  219. tomwer/core/tests/__init__.py +0 -0
  220. tomwer/core/tests/test_scanutils.py +26 -0
  221. tomwer/core/{test → tests}/test_utils.py +1 -28
  222. tomwer/core/tomwer_object.py +4 -0
  223. tomwer/core/utils/__init__.py +2 -0
  224. tomwer/core/utils/char.py +0 -28
  225. tomwer/core/utils/deprecation.py +12 -38
  226. tomwer/core/utils/dictutils.py +1 -3
  227. tomwer/core/utils/ftseriesutils.py +1 -27
  228. tomwer/core/utils/gpu.py +0 -28
  229. tomwer/core/utils/image.py +8 -39
  230. tomwer/core/utils/locker.py +1 -28
  231. tomwer/core/utils/logconfig.py +0 -27
  232. tomwer/core/utils/normalization.py +4 -31
  233. tomwer/core/utils/nxtomoutils.py +8 -38
  234. tomwer/core/utils/resource.py +0 -26
  235. tomwer/core/utils/scanutils.py +23 -52
  236. tomwer/core/utils/slurm.py +7 -30
  237. tomwer/core/utils/spec.py +6 -6
  238. tomwer/core/utils/tests/__init__.py +0 -0
  239. tomwer/core/utils/tests/test_image.py +30 -0
  240. tomwer/core/utils/tests/test_nxtomo.py +38 -0
  241. tomwer/core/utils/tests/test_scan_utils.py +46 -0
  242. tomwer/core/utils/tests/test_time.py +6 -0
  243. tomwer/core/utils/threads.py +0 -26
  244. tomwer/core/utils/time.py +0 -27
  245. tomwer/core/volume/__init__.py +4 -0
  246. tomwer/core/volume/edfvolume.py +1 -28
  247. tomwer/core/volume/hdf5volume.py +1 -28
  248. tomwer/core/volume/jp2kvolume.py +1 -27
  249. tomwer/core/volume/rawvolume.py +1 -28
  250. tomwer/core/volume/tests/test_volumes.py +21 -0
  251. tomwer/core/volume/tiffvolume.py +1 -28
  252. tomwer/core/volume/volumebase.py +5 -0
  253. tomwer/core/volume/volumefactory.py +7 -33
  254. tomwer/gui/__init__.py +0 -28
  255. tomwer/gui/cluster/__init__.py +2 -0
  256. tomwer/gui/cluster/slurm.py +297 -95
  257. tomwer/gui/cluster/supervisor.py +1 -27
  258. tomwer/gui/cluster/tests/__init__.py +0 -0
  259. tomwer/gui/cluster/{test → tests}/test_cluster.py +21 -26
  260. tomwer/gui/cluster/{test → tests}/test_supervisor.py +1 -27
  261. tomwer/gui/conditions/__init__.py +2 -0
  262. tomwer/gui/conditions/filter.py +1 -26
  263. tomwer/gui/configuration/__init__.py +2 -0
  264. tomwer/gui/control/__init__.py +2 -0
  265. tomwer/gui/control/actions.py +2 -28
  266. tomwer/gui/control/datadiscovery.py +4 -3
  267. tomwer/gui/control/datalist.py +64 -69
  268. tomwer/gui/control/datalistener.py +1 -39
  269. tomwer/gui/control/datareacheractions.py +1 -28
  270. tomwer/gui/control/datatransfert.py +2 -29
  271. tomwer/gui/control/datavalidator.py +3 -37
  272. tomwer/gui/control/datawatcher/__init__.py +0 -28
  273. tomwer/gui/control/datawatcher/configuration.py +1 -28
  274. tomwer/gui/control/datawatcher/datawatcher.py +3 -32
  275. tomwer/gui/control/datawatcher/datawatcherobserver.py +2 -28
  276. tomwer/gui/control/history.py +5 -35
  277. tomwer/gui/control/nxtomomill.py +3 -30
  278. tomwer/gui/control/observations.py +61 -55
  279. tomwer/gui/control/reducedarkflatselector.py +24 -20
  280. tomwer/gui/control/scanselectorwidget.py +2 -28
  281. tomwer/gui/control/selectorwidgetbase.py +17 -17
  282. tomwer/gui/control/series/__init__.py +0 -0
  283. tomwer/gui/control/{serie/seriecreator.py → series/seriescreator.py} +214 -235
  284. tomwer/gui/control/series/serieswaiter.py +0 -0
  285. tomwer/gui/control/series/test/test_creator.py +424 -0
  286. tomwer/gui/control/series/test/test_nxtomo_concatenate.py +21 -0
  287. tomwer/gui/control/singletomoobj.py +1 -1
  288. tomwer/gui/control/tests/__init__.py +0 -0
  289. tomwer/gui/control/tests/test_datalist.py +47 -0
  290. tomwer/gui/control/{test → tests}/test_datalistener.py +1 -28
  291. tomwer/gui/control/tests/test_datavalidator.py +27 -0
  292. tomwer/gui/control/{test → tests}/test_inputwidget.py +1 -27
  293. tomwer/gui/control/tests/test_process_manager.py +38 -0
  294. tomwer/gui/control/tests/test_scan_observations.py +23 -0
  295. tomwer/gui/control/tests/test_scanselector.py +42 -0
  296. tomwer/gui/control/{test → tests}/test_scanvalidator.py +1 -27
  297. tomwer/gui/control/{test → tests}/test_volume_dialog.py +2 -30
  298. tomwer/gui/control/{test → tests}/test_volumeselector.py +1 -27
  299. tomwer/gui/control/volumeselectorwidget.py +2 -30
  300. tomwer/gui/dataportal/__init__.py +2 -0
  301. tomwer/gui/{icat → dataportal}/createscreenshots.py +3 -2
  302. tomwer/gui/dataportal/gallery.py +133 -0
  303. tomwer/gui/dataportal/outputformat.py +0 -0
  304. tomwer/gui/dataportal/publish.py +96 -0
  305. tomwer/gui/dataportal/tests/test_create_screenshots_gui.py +23 -0
  306. tomwer/gui/dataportal/tests/test_gallery_gui.py +21 -0
  307. tomwer/gui/debugtools/__init__.py +2 -0
  308. tomwer/gui/debugtools/datasetgenerator.py +1 -30
  309. tomwer/gui/debugtools/objectinspector.py +1 -29
  310. tomwer/gui/dialog/QDataDialog.py +89 -0
  311. tomwer/gui/{qfolderdialog.py → dialog/QVolumeDialog.py} +8 -107
  312. tomwer/gui/dialog/__init__.py +1 -0
  313. tomwer/gui/edit/__init__.py +2 -0
  314. tomwer/gui/edit/dkrfpatch.py +52 -87
  315. tomwer/gui/edit/imagekeyeditor.py +18 -54
  316. tomwer/gui/edit/nxtomoeditor.py +113 -300
  317. tomwer/gui/edit/nxtomowarmer.py +3 -2
  318. tomwer/gui/edit/tests/__init__.py +0 -0
  319. tomwer/gui/edit/{test → tests}/test_dkrf_patch.py +3 -29
  320. tomwer/gui/edit/{test → tests}/test_image_key_editor.py +1 -27
  321. tomwer/gui/edit/{test → tests}/test_nx_editor.py +45 -23
  322. tomwer/gui/fonts.py +5 -0
  323. tomwer/gui/icons.py +28 -66
  324. tomwer/gui/illustrations.py +4 -34
  325. tomwer/gui/imagefromfile.py +5 -30
  326. tomwer/gui/metadataloader.py +36 -0
  327. tomwer/gui/qconfigfile.py +3 -0
  328. tomwer/gui/qlefilesystem.py +3 -0
  329. tomwer/gui/reconstruction/__init__.py +2 -0
  330. tomwer/gui/reconstruction/axis/AxisMainWindow.py +275 -0
  331. tomwer/gui/reconstruction/axis/AxisOptionsWidget.py +313 -0
  332. tomwer/gui/reconstruction/axis/AxisSettingsWidget.py +797 -0
  333. tomwer/gui/reconstruction/axis/AxisWidget.py +534 -0
  334. tomwer/gui/reconstruction/axis/CalculationWidget.py +218 -0
  335. tomwer/gui/reconstruction/axis/CompareImages.py +11 -44
  336. tomwer/gui/reconstruction/axis/ControlWidget.py +285 -0
  337. tomwer/gui/reconstruction/axis/EstimatedCORWidget.py +394 -0
  338. tomwer/gui/reconstruction/axis/EstimatedCorComboBox.py +118 -0
  339. tomwer/gui/reconstruction/axis/InputWidget.py +347 -0
  340. tomwer/gui/reconstruction/axis/ManualFramesSelection.py +168 -0
  341. tomwer/gui/reconstruction/axis/__init__.py +2 -2
  342. tomwer/gui/reconstruction/darkref/__init__.py +0 -27
  343. tomwer/gui/reconstruction/darkref/darkrefcopywidget.py +5 -34
  344. tomwer/gui/reconstruction/darkref/darkrefwidget.py +1 -27
  345. tomwer/gui/reconstruction/nabu/castvolume.py +40 -59
  346. tomwer/gui/reconstruction/nabu/check.py +7 -33
  347. tomwer/gui/reconstruction/nabu/nabuconfig/base.py +7 -34
  348. tomwer/gui/reconstruction/nabu/nabuconfig/ctf.py +6 -5
  349. tomwer/gui/reconstruction/nabu/nabuconfig/nabuconfig.py +10 -69
  350. tomwer/gui/reconstruction/nabu/nabuconfig/output.py +3 -47
  351. tomwer/gui/reconstruction/nabu/nabuconfig/phase.py +54 -36
  352. tomwer/gui/reconstruction/nabu/nabuconfig/preprocessing.py +103 -54
  353. tomwer/gui/reconstruction/nabu/nabuconfig/reconstruction.py +116 -65
  354. tomwer/gui/reconstruction/nabu/nabuflow.py +31 -61
  355. tomwer/gui/reconstruction/nabu/platform.py +94 -0
  356. tomwer/gui/reconstruction/nabu/slices.py +81 -45
  357. tomwer/gui/reconstruction/nabu/slurm.py +1 -27
  358. tomwer/gui/reconstruction/nabu/test/test_cast_volume.py +82 -0
  359. tomwer/gui/reconstruction/nabu/test/test_check.py +66 -0
  360. tomwer/gui/reconstruction/nabu/test/test_ctf.py +46 -0
  361. tomwer/gui/reconstruction/nabu/test/test_helical.py +21 -0
  362. tomwer/gui/reconstruction/nabu/test/test_nabu_preprocessing.py +81 -0
  363. tomwer/gui/reconstruction/nabu/volume.py +62 -90
  364. tomwer/gui/reconstruction/normalization/intensity.py +5 -32
  365. tomwer/gui/reconstruction/normalization/test/test_intensity.py +89 -0
  366. tomwer/gui/reconstruction/saaxis/corrangeselector.py +32 -56
  367. tomwer/gui/reconstruction/saaxis/dimensionwidget.py +56 -96
  368. tomwer/gui/reconstruction/saaxis/saaxis.py +17 -38
  369. tomwer/gui/reconstruction/saaxis/sliceselector.py +8 -39
  370. tomwer/gui/reconstruction/sadeltabeta/saadeltabeta.py +19 -37
  371. tomwer/gui/reconstruction/scores/control.py +2 -30
  372. tomwer/gui/reconstruction/scores/scoreplot.py +23 -49
  373. tomwer/gui/reconstruction/tests/__init__.py +0 -0
  374. tomwer/gui/reconstruction/{test → tests}/test_axis.py +23 -49
  375. tomwer/gui/reconstruction/{test → tests}/test_nabu.py +16 -31
  376. tomwer/gui/reconstruction/{test → tests}/test_saaxis.py +10 -37
  377. tomwer/gui/reconstruction/{test → tests}/test_sadeltabeta.py +1 -26
  378. tomwer/gui/samplemoved/__init__.py +2 -30
  379. tomwer/gui/samplemoved/selectiontable.py +3 -33
  380. tomwer/gui/settings.py +7 -0
  381. tomwer/gui/stackplot.py +33 -661
  382. tomwer/gui/stacks.py +261 -135
  383. tomwer/gui/stitching/SingleAxisStitchingWidget.py +326 -0
  384. tomwer/gui/stitching/StitchingOptionsWidget.py +438 -0
  385. tomwer/gui/stitching/StitchingWindow.py +586 -0
  386. tomwer/gui/stitching/__init__.py +2 -0
  387. tomwer/gui/stitching/alignment.py +90 -0
  388. tomwer/gui/stitching/axisorderedlist.py +44 -34
  389. tomwer/gui/stitching/config/axisparams.py +25 -11
  390. tomwer/gui/stitching/config/output.py +6 -5
  391. tomwer/gui/stitching/config/positionoveraxis.py +313 -51
  392. tomwer/gui/stitching/config/stitchingstrategies.py +22 -16
  393. tomwer/gui/stitching/config/tests/test_axisparams.py +25 -0
  394. tomwer/gui/stitching/config/tomoobjdetails.py +3 -5
  395. tomwer/gui/stitching/normalization.py +1 -0
  396. tomwer/gui/stitching/preview.py +59 -0
  397. tomwer/gui/stitching/singleaxis.py +57 -0
  398. tomwer/gui/stitching/stitchandbackground.py +3 -2
  399. tomwer/gui/stitching/stitching_preview.py +44 -36
  400. tomwer/gui/stitching/stitching_raw.py +5 -3
  401. tomwer/gui/stitching/tests/test_ZStitchingWindow.py +88 -0
  402. tomwer/gui/stitching/tests/test_axis_ordered_list.py +21 -0
  403. tomwer/gui/stitching/tests/test_normalization.py +27 -0
  404. tomwer/gui/stitching/tests/test_preview.py +68 -0
  405. tomwer/gui/stitching/tests/test_stitching_raw.py +110 -0
  406. tomwer/gui/stitching/tests/utils.py +92 -0
  407. tomwer/gui/stitching/utils.py +14 -0
  408. tomwer/gui/stitching/z_stitching/fineestimation.py +5 -33
  409. tomwer/gui/stitching/z_stitching/tests/test_fine_estimation.py +35 -0
  410. tomwer/gui/stitching/z_stitching/tests/test_raw_estimation.py +215 -0
  411. tomwer/gui/stitching/z_stitching/tests/test_stitching_window.py +51 -0
  412. tomwer/gui/tests/__init__.py +0 -0
  413. tomwer/gui/tests/test_axis_gui.py +43 -0
  414. tomwer/gui/{test → tests}/test_qfolder_dialog.py +1 -1
  415. tomwer/gui/utils/RangeWidget.py +44 -0
  416. tomwer/gui/utils/buttons.py +4 -3
  417. tomwer/gui/utils/completer.py +2 -33
  418. tomwer/gui/utils/flow.py +11 -40
  419. tomwer/gui/utils/gpu.py +60 -0
  420. tomwer/gui/utils/illustrations.py +1 -26
  421. tomwer/gui/utils/inputwidget.py +35 -73
  422. tomwer/gui/utils/lineselector/lineselector.py +9 -46
  423. tomwer/gui/utils/loadingmode.py +81 -0
  424. tomwer/gui/utils/qt_utils.py +9 -0
  425. tomwer/gui/utils/sandboxes.py +1 -26
  426. tomwer/gui/utils/scandescription.py +2 -31
  427. tomwer/gui/utils/scrollarea.py +6 -55
  428. tomwer/gui/utils/slider.py +4 -28
  429. tomwer/gui/utils/splashscreen.py +0 -28
  430. tomwer/gui/utils/step.py +14 -13
  431. tomwer/gui/utils/tests/test_completer.py +41 -0
  432. tomwer/gui/utils/tests/test_line_selector.py +21 -0
  433. tomwer/gui/utils/tests/test_splashscreen.py +8 -0
  434. tomwer/gui/utils/tests/test_vignettes.py +68 -0
  435. tomwer/gui/utils/unitsystem.py +15 -69
  436. tomwer/gui/utils/utils.py +4 -5
  437. tomwer/gui/utils/vignettes.py +10 -41
  438. tomwer/gui/utils/waiterthread.py +0 -26
  439. tomwer/gui/visualization/__init__.py +2 -0
  440. tomwer/gui/visualization/dataviewer.py +68 -421
  441. tomwer/gui/visualization/diffviewer/diffviewer.py +2 -30
  442. tomwer/gui/visualization/diffviewer/shiftwidget.py +4 -29
  443. tomwer/gui/visualization/fullscreenplot.py +5 -5
  444. tomwer/gui/visualization/imagestack.py +403 -0
  445. tomwer/gui/visualization/nxtomometadata.py +0 -4
  446. tomwer/gui/visualization/reconstructionparameters.py +14 -32
  447. tomwer/gui/visualization/scanoverview.py +33 -66
  448. tomwer/gui/visualization/sinogramviewer.py +2 -28
  449. tomwer/gui/visualization/test/__init__.py +0 -28
  450. tomwer/gui/visualization/test/test_dataviewer.py +1 -28
  451. tomwer/gui/visualization/test/test_diffviewer.py +1 -28
  452. tomwer/gui/visualization/test/test_nx_tomo_metadata_viewer.py +0 -5
  453. tomwer/gui/visualization/test/test_reconstruction_parameters.py +1 -27
  454. tomwer/gui/visualization/test/test_sinogramviewer.py +1 -28
  455. tomwer/gui/visualization/test/test_stacks.py +184 -115
  456. tomwer/gui/visualization/test/test_volumeviewer.py +3 -2
  457. tomwer/gui/visualization/tomoobjoverview.py +2 -2
  458. tomwer/gui/visualization/volumeoverview.py +3 -2
  459. tomwer/gui/visualization/volumeviewer.py +47 -43
  460. tomwer/io/__init__.py +2 -0
  461. tomwer/io/utils/h5pyutils.py +1 -27
  462. tomwer/io/utils/test/test_raw_and_processed_data.py +10 -0
  463. tomwer/io/utils/test/test_utils.py +67 -0
  464. tomwer/io/utils/utils.py +2 -31
  465. tomwer/resources/__init__.py +13 -33
  466. tomwer/resources/gui/icons/edit_downstream.svg +114 -0
  467. tomwer/resources/gui/icons/edit_upstream.svg +112 -0
  468. tomwer/resources/gui/icons/free_edition.svg +23 -0
  469. tomwer/resources/gui/icons/icat_gallery_opts.png +0 -0
  470. tomwer/resources/gui/icons/icat_gallery_opts.svg +80 -0
  471. tomwer/resources/gui/icons/search.png +0 -0
  472. tomwer/resources/gui/icons/search.svg +23 -0
  473. tomwer/resources/gui/icons/warning.png +0 -0
  474. tomwer/synctools/__init__.py +2 -0
  475. tomwer/synctools/axis.py +1 -27
  476. tomwer/synctools/darkref.py +1 -26
  477. tomwer/synctools/datalistener.py +1 -27
  478. tomwer/synctools/datatransfert.py +2 -27
  479. tomwer/synctools/imageloaderthread.py +1 -28
  480. tomwer/synctools/rsyncmanager.py +1 -25
  481. tomwer/synctools/saaxis.py +1 -26
  482. tomwer/synctools/sadeltabeta.py +1 -26
  483. tomwer/synctools/stacks/control/datalistener.py +1 -26
  484. tomwer/synctools/stacks/processingstack.py +4 -33
  485. tomwer/synctools/stacks/reconstruction/axis.py +6 -53
  486. tomwer/synctools/stacks/reconstruction/castvolume.py +12 -43
  487. tomwer/synctools/stacks/reconstruction/dkrefcopy.py +4 -27
  488. tomwer/synctools/stacks/reconstruction/nabu.py +3 -28
  489. tomwer/synctools/stacks/reconstruction/normalization.py +2 -27
  490. tomwer/synctools/stacks/reconstruction/saaxis.py +2 -27
  491. tomwer/synctools/stacks/reconstruction/sadeltabeta.py +2 -27
  492. tomwer/synctools/tests/__init__.py +0 -0
  493. tomwer/synctools/{test → tests}/test_darkRefs.py +16 -40
  494. tomwer/synctools/{test → tests}/test_foldertransfer.py +2 -33
  495. tomwer/synctools/utils/scanstages.py +2 -31
  496. tomwer/tests/__init__.py +1 -0
  497. tomwer/tests/app/test_stitching.py +95 -0
  498. tomwer/tests/datasets.py +1 -5
  499. tomwer/tests/orangecontrib/tomwer/widgets/cluster/tests/test_future_supervisorow.py +48 -0
  500. tomwer/tests/orangecontrib/tomwer/widgets/cluster/tests/test_slurm_clusterow.py +40 -0
  501. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_advancement.py +8 -0
  502. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_data_validator.py +55 -0
  503. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_datadiscovery.py +129 -0
  504. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_datalistener.py +111 -0
  505. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_dataselector.py +69 -0
  506. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_datawatcher.py +411 -0
  507. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_emailow.py +29 -0
  508. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_notifier.py +24 -0
  509. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_nxtomo_concatenate_ow.py +64 -0
  510. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_nxtomomill.py +133 -0
  511. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_reduce_dark_flat_selector.py +40 -0
  512. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_singletomoobj.py +40 -0
  513. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_timerow.py +25 -0
  514. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_tomoobj_series.py +96 -0
  515. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_volume_selector.py +69 -0
  516. orangecontrib/tomwer/widgets/edit/test/test_image_key_editor.py → tomwer/tests/orangecontrib/tomwer/widgets/debugtools/tests/test_dataset_generator.py +17 -16
  517. tomwer/tests/orangecontrib/tomwer/widgets/debugtools/tests/test_object_inspector.py +36 -0
  518. {orangecontrib/tomwer/widgets/edit/test → tomwer/tests/orangecontrib/tomwer/widgets/edit/tests}/test_dark_flat_patch.py +1 -27
  519. tomwer/tests/orangecontrib/tomwer/widgets/edit/tests/test_image_key_editor.py +30 -0
  520. tomwer/tests/orangecontrib/tomwer/widgets/edit/tests/test_nxtomo_editor.py +138 -0
  521. tomwer/tests/orangecontrib/tomwer/widgets/other/tests/test_pythonscript.py +31 -0
  522. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_axis.py +199 -0
  523. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_cast_volumeow.py +58 -0
  524. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_dark_refs_widget.py +136 -0
  525. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_delta_beta_selector.py +15 -0
  526. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_i_norm.py +200 -0
  527. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_nabu_helical_prepare_weights_double.py +20 -0
  528. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_nabu_volume.py +74 -0
  529. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_nabu_widget.py +107 -0
  530. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_sa_delta_beta.py +194 -0
  531. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_saaxis.py +194 -0
  532. tomwer/tests/orangecontrib/tomwer/widgets/stitching/tests/test_zstitching.py +313 -0
  533. tomwer/tests/orangecontrib/tomwer/widgets/tests/test_conditions.py +85 -0
  534. tomwer/tests/orangecontrib/tomwer/widgets/tests/test_darkref.py +225 -0
  535. tomwer/tests/orangecontrib/tomwer/widgets/tests/test_foldertransfert.py +105 -0
  536. tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_dataviewerow.py +57 -0
  537. tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_diffviewerow.py +39 -0
  538. tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_nxtomo_metadata_viewer.py +29 -0
  539. tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_radio_stackow.py +31 -0
  540. tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_sample_movedow.py +46 -0
  541. tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_sinogram_viewerow.py +31 -0
  542. tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_slice_stackow.py +31 -0
  543. tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_volume_viewerow.py +32 -0
  544. tomwer/tests/test_ewoks/test_conversion.py +104 -0
  545. tomwer/tests/test_ewoks/test_single_node_execution.py +87 -0
  546. tomwer/tests/test_ewoks/test_workflows.py +138 -0
  547. tomwer/utils.py +11 -39
  548. tomwer/version.py +2 -2
  549. {tomwer-1.3.26.dist-info → tomwer-1.4.0.dist-info}/LICENSE +3 -3
  550. tomwer-1.4.0.dist-info/METADATA +337 -0
  551. tomwer-1.4.0.dist-info/RECORD +912 -0
  552. {tomwer-1.3.26.dist-info → tomwer-1.4.0.dist-info}/WHEEL +1 -1
  553. {tomwer-1.3.26.dist-info → tomwer-1.4.0.dist-info}/entry_points.txt +1 -0
  554. orangecontrib/tomwer/widgets/control/DataListOW.py +0 -129
  555. orangecontrib/tomwer/widgets/control/TomoObjSerieOW.py +0 -86
  556. orangecontrib/tomwer/widgets/control/VolumeSymLinkOW.py +0 -182
  557. orangecontrib/tomwer/widgets/edit/test/test_nxtomo_editor.py +0 -141
  558. orangecontrib/tomwer/widgets/icat/PublishProcessedDataOW.py +0 -115
  559. orangecontrib/tomwer/widgets/icat/RawDataScreenshotCreatorOW.py +0 -98
  560. orangecontrib/tomwer/widgets/icat/SaveToGalleryAndPublishOW.py +0 -129
  561. orangecontrib/tomwer/widgets/icat/icons/add_gallery.png +0 -0
  562. orangecontrib/tomwer/widgets/icat/icons/add_gallery.svg +0 -82
  563. orangecontrib/tomwer/widgets/icat/icons/raw_screenshots.png +0 -0
  564. orangecontrib/tomwer/widgets/icat/icons/raw_screenshots.svg +0 -143
  565. orangecontrib/tomwer/widgets/visualization/LivesliceOW.py +0 -87
  566. orangecontrib/tomwer/widgets/visualization/icons/liveslice.png +0 -0
  567. orangecontrib/tomwer/widgets/visualization/icons/liveslice.svg +0 -110
  568. tomwer/core/log/logger.py +0 -130
  569. tomwer/core/process/control/test/test_volume_link.py +0 -74
  570. tomwer/core/process/control/tomoobjserie.py +0 -12
  571. tomwer/core/process/control/volumesymlink.py +0 -200
  572. tomwer/core/process/icat/createscreenshots.py +0 -100
  573. tomwer/core/process/icat/gallery.py +0 -377
  574. tomwer/core/process/icat/icatbase.py +0 -36
  575. tomwer/core/process/icat/publish.py +0 -228
  576. tomwer/core/process/icat/screenshots.py +0 -27
  577. tomwer/core/process/reconstruction/test/test_darkref.py +0 -60
  578. tomwer/core/process/reconstruction/test/test_sadeltabeta.py +0 -74
  579. tomwer/core/process/test/test_axis.py +0 -309
  580. tomwer/core/process/visualization/liveslice.py +0 -6
  581. tomwer/core/progress.py +0 -100
  582. tomwer/core/scan/test/test_edf.py +0 -53
  583. tomwer/core/scan/test/test_future_scan.py +0 -61
  584. tomwer/core/scan/test/test_h5.py +0 -96
  585. tomwer/core/scan/test/test_process_registration.py +0 -109
  586. tomwer/core/test/test_scanutils.py +0 -53
  587. tomwer/gui/control/emailnotifier.py +0 -174
  588. tomwer/gui/control/serie/seriewaiter.py +0 -28
  589. tomwer/gui/control/test/__init__.py +0 -28
  590. tomwer/gui/control/test/test_datalist.py +0 -96
  591. tomwer/gui/control/test/test_datavalidator.py +0 -54
  592. tomwer/gui/control/test/test_email.py +0 -35
  593. tomwer/gui/control/test/test_process_manager.py +0 -65
  594. tomwer/gui/control/test/test_scanselector.py +0 -67
  595. tomwer/gui/edit/test/__init__.py +0 -28
  596. tomwer/gui/icat/gallery.py +0 -214
  597. tomwer/gui/icat/publish.py +0 -187
  598. tomwer/gui/reconstruction/axis/axis.py +0 -733
  599. tomwer/gui/reconstruction/axis/radioaxis.py +0 -2467
  600. tomwer/gui/stitching/stitching.py +0 -1392
  601. tomwer/gui/test/__init__.py +0 -28
  602. tomwer/gui/test/test_axis_gui.py +0 -34
  603. tomwer/synctools/stacks/edit/darkflatpatch.py +0 -169
  604. tomwer/synctools/stacks/edit/imagekeyeditor.py +0 -135
  605. tomwer/third_part/WaitingOverlay.py +0 -110
  606. tomwer-1.3.26-py3.11-nspkg.pth +0 -1
  607. tomwer-1.3.26.dist-info/METADATA +0 -292
  608. tomwer-1.3.26.dist-info/RECORD +0 -785
  609. tomwer-1.3.26.dist-info/namespace_packages.txt +0 -1
  610. /orangecontrib/tomwer/{widgets/edit/test → tests}/__init__.py +0 -0
  611. {tomwer/core/process/control/test → orangecontrib/tomwer/tutorials/id16b}/__init__.py +0 -0
  612. {tomwer/core/process/icat → orangecontrib/tomwer/widgets/cluster/tests}/__init__.py +0 -0
  613. /orangecontrib/tomwer/widgets/control/icons/{tomoobjserie.png → tomoobjseries.png} +0 -0
  614. {tomwer/core/process/reconstruction/test → orangecontrib/tomwer/widgets/control/tests}/__init__.py +0 -0
  615. /orangecontrib/tomwer/widgets/{icat → dataportal}/icons/publish_processed_data.png +0 -0
  616. /orangecontrib/tomwer/widgets/{icat → dataportal}/icons/publish_processed_data.svg +0 -0
  617. {tomwer/core/process/test → orangecontrib/tomwer/widgets/debugtools/tests}/__init__.py +0 -0
  618. {tomwer/core/scan/test → orangecontrib/tomwer/widgets/edit/tests}/__init__.py +0 -0
  619. {tomwer/core/test → orangecontrib/tomwer/widgets/other/tests}/__init__.py +0 -0
  620. {tomwer/gui/cluster/test → orangecontrib/tomwer/widgets/reconstruction/tests}/__init__.py +0 -0
  621. {tomwer/gui/control/serie → orangecontrib/tomwer/widgets/stitching/tests}/__init__.py +0 -0
  622. {tomwer/gui/icat → orangecontrib/tomwer/widgets/tests}/__init__.py +0 -0
  623. {tomwer/gui/reconstruction/test → orangecontrib/tomwer/widgets/visualization/tests}/__init__.py +0 -0
  624. /tomwer/{synctools/stacks/edit → app/stitching}/__init__.py +0 -0
  625. /tomwer/{synctools/test → core/process/control/tests}/__init__.py +0 -0
  626. /tomwer/core/process/control/{test → tests}/test_email.py +0 -0
  627. /tomwer/core/process/control/{test → tests}/test_h52nx_process.py +0 -0
  628. /tomwer/{third_part → core/process/drac}/__init__.py +0 -0
  629. /tomwer/core/process/reconstruction/{test → tests}/test_axis_params.py +0 -0
  630. /tomwer/core/process/reconstruction/{test → tests}/test_darkref_copy.py +0 -0
  631. /tomwer/core/process/reconstruction/{test → tests}/test_paramsbase.py +0 -0
  632. /tomwer/core/scan/{test → tests}/test_scan.py +0 -0
  633. /tomwer/gui/control/{serie → series}/nxtomoconcatenate.py +0 -0
  634. /tomwer/gui/control/{test → tests}/test_datadiscovery.py +0 -0
  635. /tomwer/gui/control/{test → tests}/test_reducedarkflat_selector.py +0 -0
  636. /tomwer/gui/control/{test → tests}/test_single_tomo_obj.py +0 -0
  637. {orangecontrib/tomwer/widgets/edit/test → tomwer/tests/orangecontrib/tomwer/widgets/edit/tests}/test_image_key_upgrader.py +0 -0
  638. {tomwer-1.3.26.dist-info → tomwer-1.4.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,199 @@
1
+ import gc
2
+ import pickle
3
+ import shutil
4
+ import tempfile
5
+ import time
6
+ import os
7
+
8
+ import pytest
9
+ from orangecanvas.scheme.readwrite import literal_dumps
10
+ from silx.gui import qt
11
+ from silx.gui.utils.testutils import TestCaseQt
12
+
13
+ from orangecontrib.tomwer.widgets.reconstruction.AxisOW import AxisOW
14
+ from tomwer.core.utils.lbsram import mock_low_memory
15
+ from tomwer.core.process.reconstruction.axis.mode import AxisMode
16
+ from tomwer.core.settings import mock_lsbram
17
+ from tomwer.core.utils.scanutils import MockNXtomo, MockEDF
18
+ from tomwer.tests.utils import skip_gui_test
19
+
20
+
21
+ @pytest.mark.skipif(skip_gui_test(), reason="skip gui test")
22
+ class TestOWAxis(TestCaseQt):
23
+ """Test that the axis widget work correctly"""
24
+
25
+ def setUp(self):
26
+ self._window = AxisOW()
27
+ self.recons_params = self._window.recons_params
28
+ self.tempdir = tempfile.mkdtemp()
29
+ self.scan = MockNXtomo(
30
+ scan_path=os.path.join(self.tempdir, "nx_tomo.nx"),
31
+ n_proj=10,
32
+ n_ini_proj=10,
33
+ scan_range=180,
34
+ dim=20,
35
+ energy=12.3,
36
+ ).scan
37
+
38
+ self._window.getAxisParams().mode = AxisMode.centered
39
+ self._window.show()
40
+ self.qWaitForWindowExposed(self._window)
41
+
42
+ def tearDown(self):
43
+ shutil.rmtree(self.tempdir)
44
+ self._window.setAttribute(qt.Qt.WA_DeleteOnClose)
45
+ self._window.close()
46
+ gc.collect()
47
+
48
+ def testAxisLock(self):
49
+ """Test behavior when locking the axis position. Could not be included
50
+ in the tomwer/gui because the lock action is only available for the OW
51
+ """
52
+ assert self._window.getAxisParams().mode in (
53
+ AxisMode.centered,
54
+ AxisMode.global_,
55
+ )
56
+ radio_axis = self._window._widget._axisWidget
57
+ main_widget = self._window._widget
58
+ self.assertFalse(main_widget._controlWidget._lockBut.isLocked())
59
+ self.assertTrue(radio_axis._settingsWidget._mainWidget.isEnabled())
60
+ self.mouseClick(main_widget._controlWidget._lockBut, qt.Qt.LeftButton)
61
+ self.qapp.processEvents()
62
+ self.assertTrue(main_widget._controlWidget._lockBut.isLocked())
63
+ # when the lock button is activated we should automatically switch to
64
+ # the manual mode
65
+ self.assertTrue(self._window.getAxisParams().mode is AxisMode.manual)
66
+ self.assertFalse(radio_axis._settingsWidget._mainWidget.isEnabled())
67
+
68
+ def test_serializing(self):
69
+ pickle.dumps(self._window.recons_params.to_dict())
70
+
71
+ def test_literal_dumps(self):
72
+ literal_dumps(self._window.recons_params.to_dict())
73
+
74
+
75
+ class TestWindowAxisComputation(TestCaseQt):
76
+ @staticmethod
77
+ def _long_computation(scan):
78
+ time.sleep(5)
79
+ return -1
80
+
81
+ """Test that the axis widget work correctly"""
82
+
83
+ def setUp(self):
84
+ TestCaseQt.setUp(self)
85
+ self.tempdir = tempfile.mkdtemp()
86
+ self._mainWindow = AxisOW()
87
+ self.recons_params = self._mainWindow.recons_params
88
+ self._window = self._mainWindow._widget
89
+ self.scan = MockNXtomo(
90
+ scan_path=os.path.join(self.tempdir, "nx_tomo.nx"),
91
+ n_proj=10,
92
+ n_ini_proj=10,
93
+ scan_range=180,
94
+ dim=20,
95
+ energy=12.3,
96
+ ).scan
97
+ self._mainWindow.show()
98
+ self.qWaitForWindowExposed(self._mainWindow)
99
+ self._mainWindow.setMode("manual")
100
+
101
+ def tearDown(self):
102
+ shutil.rmtree(self.tempdir)
103
+ self._mainWindow.setAttribute(qt.Qt.WA_DeleteOnClose)
104
+ self._mainWindow.close()
105
+ self._mainWindow = None
106
+ self._window = None
107
+ gc.collect()
108
+
109
+ def testComputationSucceed(self):
110
+ """Test gui if the axis position is correctly computed"""
111
+ self.recons_params.mode = AxisMode.manual
112
+ radio_axis = self._window._axisWidget
113
+ self.assertEqual(radio_axis.getMode(), AxisMode.manual)
114
+ radio_axis.setXShift(2.345)
115
+ self._mainWindow.process(self.scan)
116
+ self.qapp.processEvents()
117
+ self.assertEqual(radio_axis.getMode(), AxisMode.manual)
118
+ self.assertEqual(self.recons_params.relative_cor_value, 2.345)
119
+ position_info_widget = self._window._controlWidget._positionInfo
120
+ self.assertEqual(position_info_widget._relativePositionQLE.text(), "2.345")
121
+
122
+
123
+ global _computation_res
124
+ _computation_res = 0
125
+
126
+
127
+ @pytest.mark.skipif(skip_gui_test(), reason="skip gui test")
128
+ class TestAxisStack(TestCaseQt):
129
+ """Test axis computation of a stack of scan"""
130
+
131
+ @staticmethod
132
+ def _test_computation(scan):
133
+ global _computation_res
134
+ _computation_res += 1
135
+ return _computation_res
136
+
137
+ def setUp(self):
138
+ # not working due to OW
139
+ TestCaseQt.setUp(self)
140
+ self._scan1 = MockEDF.mockScan(scanID=tempfile.mkdtemp())
141
+ self._scan2 = MockEDF.mockScan(scanID=tempfile.mkdtemp())
142
+ self._scan3 = MockEDF.mockScan(scanID=tempfile.mkdtemp())
143
+ self._mainWindow = AxisOW()
144
+ self.recons_params = self._mainWindow._axis_params
145
+ self._mainWindow._skip_exec(True)
146
+
147
+ global _computation_res
148
+ _computation_res = 0
149
+
150
+ self._mainWindow.patch_calc_method(
151
+ AxisMode.centered, TestAxisStack._test_computation
152
+ )
153
+ self.recons_params.mode = AxisMode.centered
154
+
155
+ self._mainWindow.show()
156
+ self.qWaitForWindowExposed(self._mainWindow)
157
+
158
+ def tearDown(self):
159
+ mock_low_memory(False)
160
+ mock_lsbram(False)
161
+ self._mainWindow.setAttribute(qt.Qt.WA_DeleteOnClose)
162
+ self._mainWindow.close()
163
+ self._mainWindow = None
164
+ self._recons_params = None
165
+ self.qapp.processEvents()
166
+ for scan in (self._scan1, self._scan2, self._scan3):
167
+ shutil.rmtree(scan.path)
168
+ gc.collect()
169
+
170
+ def testLowMemory(self):
171
+ """Make sure the axis computation will be skip if we are in low memory"""
172
+ mock_low_memory(True)
173
+ mock_lsbram(True)
174
+ for scan in (self._scan1, self._scan2, self._scan3):
175
+ self.qapp.processEvents()
176
+ self._mainWindow.new_data_in(scan)
177
+
178
+ self.assertEqual(self._scan1.axis_params, None)
179
+ self.assertEqual(self._scan2.axis_params, None)
180
+ self.assertEqual(self._scan3.axis_params, None)
181
+
182
+ def testLockStack(self):
183
+ """Check that axis position will be simply copy if we are in a lock
184
+ stack"""
185
+ self.recons_params.mode = AxisMode.manual
186
+ position_value = 0.36
187
+ self.recons_params.set_relative_value(position_value)
188
+
189
+ for scan in (self._scan1, self._scan2, self._scan3):
190
+ self._mainWindow.process(scan)
191
+
192
+ for i in range(5):
193
+ self.qapp.processEvents()
194
+ time.sleep(0.2)
195
+ self.qapp.processEvents()
196
+
197
+ self.assertEqual(self._scan1.axis_params.relative_cor_value, position_value)
198
+ self.assertEqual(self._scan2.axis_params.relative_cor_value, position_value)
199
+ self.assertEqual(self._scan3.axis_params.relative_cor_value, position_value)
@@ -0,0 +1,58 @@
1
+ # coding: utf-8
2
+ from __future__ import annotations
3
+
4
+ import gc
5
+ import os
6
+ import pickle
7
+ import tempfile
8
+ import time
9
+
10
+ import numpy
11
+ from orangecanvas.scheme.readwrite import literal_dumps
12
+ from silx.gui import qt
13
+ from silx.gui.utils.testutils import TestCaseQt
14
+
15
+ from orangecontrib.tomwer.widgets.reconstruction.CastNabuVolumeOW import (
16
+ CastNabuVolumeOW,
17
+ )
18
+ from tomwer.core.volume.rawvolume import RawVolume
19
+
20
+
21
+ class TestCastVolumeOW(TestCaseQt):
22
+ def setUp(self):
23
+ super().setUp()
24
+ self._window = CastNabuVolumeOW()
25
+
26
+ def tearDown(self):
27
+ self._window.setAttribute(qt.Qt.WA_DeleteOnClose)
28
+ self._window.close()
29
+ self._window = None
30
+ gc.collect()
31
+
32
+ def test(self):
33
+ self._window.show()
34
+ self.qWaitForWindowExposed(self._window)
35
+
36
+ def test_serializing(self):
37
+ pickle.dumps(self._window.getConfiguration())
38
+
39
+ def test_literal_dumps(self):
40
+ literal_dumps(self._window.getConfiguration())
41
+
42
+ def test_cast_volume(self):
43
+ with tempfile.TemporaryDirectory() as tmp_dir:
44
+ input_dir = os.path.join(tmp_dir, "input")
45
+ os.makedirs(input_dir)
46
+
47
+ volume = RawVolume(
48
+ file_path=os.path.join(input_dir, "vol_file.vol"),
49
+ data=numpy.linspace(0, 10, 100 * 100 * 3, dtype=numpy.float32).reshape(
50
+ 3, 100, 100
51
+ ),
52
+ )
53
+ volume.save()
54
+
55
+ self._window.process_volume(volume)
56
+ while self._window._processingStack.is_computing():
57
+ time.sleep(0.1)
58
+ self.qapp.processEvents()
@@ -0,0 +1,136 @@
1
+ import gc
2
+ import logging
3
+ import os
4
+ import pickle
5
+ import tempfile
6
+
7
+ import numpy
8
+ from orangecanvas.scheme.readwrite import literal_dumps
9
+ from silx.gui import qt
10
+ from silx.gui.utils.testutils import TestCaseQt
11
+
12
+ from orangecontrib.tomwer.widgets.reconstruction.DarkRefAndCopyOW import (
13
+ DarkRefAndCopyOW,
14
+ )
15
+ from tomwer.core.utils.scanutils import MockNXtomo
16
+
17
+ logging.disable(logging.INFO)
18
+
19
+
20
+ class TestDarkRefWidget(TestCaseQt):
21
+ """class testing the DarkRefWidget"""
22
+
23
+ def setUp(self):
24
+ self._tmp_path = tempfile.mkdtemp()
25
+ scan_folder_with_raw = os.path.join(self._tmp_path, "test_dir_1")
26
+ scan_folder_without_raw = os.path.join(self._tmp_path, "test_dir_2")
27
+ for my_dir in (scan_folder_with_raw, scan_folder_without_raw):
28
+ os.makedirs(my_dir)
29
+
30
+ self._scan_with_raw = MockNXtomo(
31
+ scan_path=scan_folder_with_raw,
32
+ create_ini_dark=True,
33
+ create_ini_flat=True,
34
+ create_final_flat=False,
35
+ n_proj=10,
36
+ n_ini_proj=10,
37
+ dim=12,
38
+ ).scan
39
+ self._scan_without_raw = MockNXtomo(
40
+ scan_path=scan_folder_without_raw,
41
+ create_ini_dark=False,
42
+ create_ini_flat=False,
43
+ create_final_flat=False,
44
+ n_proj=10,
45
+ n_ini_proj=10,
46
+ dim=12,
47
+ ).scan
48
+
49
+ self.widget = DarkRefAndCopyOW()
50
+ return super().setUp()
51
+
52
+ def tearDown(self):
53
+ # shutil.rmtree(self._tmp_path)
54
+ self.widget.setAttribute(qt.Qt.WA_DeleteOnClose)
55
+ self.widget.close()
56
+ gc.collect()
57
+
58
+ def test_serializing(self):
59
+ self.widget._updateSettingsVals()
60
+ pickle.dumps(self.widget._ewoks_default_inputs)
61
+
62
+ def test_literal_dumps(self):
63
+ self.widget._updateSettingsVals()
64
+ literal_dumps(self.widget._ewoks_default_inputs)
65
+
66
+ def test_copy(self):
67
+ self.widget.setCopyActive(True)
68
+ while self.qapp.hasPendingEvents():
69
+ self.qapp.processEvents()
70
+ assert len(os.listdir(self.widget._processing_stack._save_dir)) == 0
71
+
72
+ self.widget.process(self._scan_with_raw)
73
+ self.widget._processing_stack.wait_computation_finished()
74
+ while self.qapp.hasPendingEvents():
75
+ self.qapp.processEvents()
76
+ assert self._scan_with_raw.load_reduced_darks() not in (None, {})
77
+ assert self._scan_with_raw.load_reduced_flats() not in (None, {})
78
+ assert len(os.listdir(self.widget._processing_stack._save_dir)) == 1
79
+ assert len(os.listdir(self.widget._processing_stack._save_dir)) == 1
80
+
81
+ self.widget.setCopyActive(False)
82
+ while self.qapp.hasPendingEvents():
83
+ self.qapp.processEvents()
84
+ self.widget.process(self._scan_without_raw)
85
+ self.widget._processing_stack.wait_computation_finished()
86
+ while self.qapp.hasPendingEvents():
87
+ self.qapp.processEvents()
88
+ assert self._scan_without_raw.load_reduced_darks() in (None, {})
89
+ assert self._scan_without_raw.load_reduced_flats() in (None, {})
90
+
91
+ self.widget.setCopyActive(True)
92
+ while self.qapp.hasPendingEvents():
93
+ self.qapp.processEvents()
94
+ self.widget.process(self._scan_without_raw)
95
+ self.widget._processing_stack.wait_computation_finished()
96
+ while self.qapp.hasPendingEvents():
97
+ self.qapp.processEvents()
98
+ assert self._scan_without_raw.load_reduced_darks() not in (None, {})
99
+ assert self._scan_without_raw.load_reduced_flats() not in (None, {})
100
+
101
+ def test_set_darks_and_flats(self):
102
+ """
103
+ Test settings darks and flats.
104
+ """
105
+ self.widget.setCopyActive(True)
106
+
107
+ assert len(os.listdir(self.widget._processing_stack._save_dir)) == 0
108
+ self.widget.setReducedFlats(
109
+ {
110
+ "0.0r": numpy.linspace(12, 12 + 12 * 12, 12 * 12).reshape(12, 12),
111
+ "1.0r": numpy.linspace(24, 24 + 12 * 12, 12 * 12).reshape(12, 12),
112
+ }
113
+ )
114
+ self.widget.setReducedDarks(
115
+ {
116
+ "0.0r": numpy.linspace(0, 12 * 12, 12 * 12).reshape(12, 12),
117
+ }
118
+ )
119
+ self.widget.process(self._scan_without_raw)
120
+ self.widget._processing_stack.wait_computation_finished()
121
+ while self.qapp.hasPendingEvents():
122
+ self.qapp.processEvents()
123
+
124
+ loaded_reduced_darks = self._scan_without_raw.load_reduced_darks()
125
+ assert tuple(loaded_reduced_darks.keys()) == (0,)
126
+ numpy.testing.assert_allclose(
127
+ loaded_reduced_darks[0],
128
+ numpy.linspace(0, 12 * 12, 12 * 12).reshape(12, 12),
129
+ )
130
+
131
+ loaded_reduced_flats = self._scan_without_raw.load_reduced_flats()
132
+ assert tuple(loaded_reduced_flats.keys()) == (0, 9)
133
+ numpy.testing.assert_allclose(
134
+ loaded_reduced_flats[9],
135
+ numpy.linspace(24, 24 + 12 * 12, 12 * 12).reshape(12, 12),
136
+ )
@@ -0,0 +1,15 @@
1
+ import numpy
2
+
3
+ from orangecontrib.tomwer.widgets.reconstruction.NabuVolumeOW import (
4
+ _DeltaBetaSelectorDialog,
5
+ )
6
+ from tomwer.tests.conftest import qtapp # noqa F401
7
+
8
+
9
+ def test_DeltaBetaSelector(
10
+ qtapp, # noqa F811
11
+ ):
12
+ """simple test of the _DeltaBetaSelectorDialog"""
13
+ dialog = _DeltaBetaSelectorDialog(values=(12, 45))
14
+ dialog.show()
15
+ assert numpy.isscalar(dialog.getSelectedValue())
@@ -0,0 +1,200 @@
1
+ # coding: utf-8
2
+ from __future__ import annotations
3
+
4
+ import gc
5
+ import logging
6
+ import os
7
+ import pickle
8
+ import shutil
9
+ import tempfile
10
+
11
+ from orangecanvas.scheme.readwrite import literal_dumps
12
+ from processview.core.manager import DatasetState, ProcessManager
13
+ from silx.gui import qt
14
+ from silx.gui.utils.testutils import TestCaseQt
15
+ from silx.io.utils import h5py_read_dataset
16
+
17
+ from orangecontrib.tomwer.widgets.reconstruction.SinoNormOW import (
18
+ SinoNormOW as _NormIOW,
19
+ )
20
+ from tomwer.core import settings
21
+ from tomwer.core.utils.lbsram import mock_low_memory
22
+ from tomwer.core.process.reconstruction.normalization import SinoNormalizationTask
23
+ from tomwer.core.utils.scanutils import MockNXtomo
24
+ from tomwer.io.utils.h5pyutils import EntryReader
25
+
26
+ logger = logging.getLogger(__name__)
27
+
28
+
29
+ class NormIOW(_NormIOW):
30
+ def __init__(self, parent=None):
31
+ self._scans_finished = []
32
+ super().__init__(parent)
33
+
34
+ def processing_finished(self, scan):
35
+ self._scans_finished.append(scan)
36
+
37
+ def wait_processing(self, wait_time):
38
+ self._window._processing_stack._computationThread.wait(wait_time)
39
+
40
+ @property
41
+ def scans_finished(self):
42
+ return self._scans_finished
43
+
44
+ def compute(self):
45
+ self._window._processCurrentScan()
46
+
47
+ def setROI(self, start_x, end_x, start_y, end_y):
48
+ self._window.setROI(start_x=start_x, end_x=end_x, start_y=start_y, end_y=end_y)
49
+
50
+ def close(self):
51
+ self._scans_finished = {}
52
+ super().close()
53
+
54
+
55
+ class TestProcessing(TestCaseQt):
56
+ DIM = 100
57
+
58
+ def setUp(self):
59
+ super().setUp()
60
+ self._source_dir = tempfile.mkdtemp()
61
+
62
+ def create_scan(folder_name):
63
+ _dir = os.path.join(self._source_dir, folder_name)
64
+ return MockNXtomo(
65
+ scan_path=_dir,
66
+ n_ini_proj=20,
67
+ n_proj=20,
68
+ n_alignement_proj=2,
69
+ create_final_flat=False,
70
+ create_ini_dark=True,
71
+ create_ini_flat=True,
72
+ n_refs=1,
73
+ dim=self.DIM,
74
+ ).scan
75
+
76
+ # create scans
77
+ self.scan_1 = create_scan("scan_1")
78
+ self.scan_2 = create_scan("scan_2")
79
+ self.scan_3 = create_scan("scan_3")
80
+ self._process_manager = ProcessManager()
81
+
82
+ self.widget = NormIOW()
83
+ self.widget.show()
84
+
85
+ def tearDown(self):
86
+ mock_low_memory(False)
87
+ settings.mock_lsbram(False)
88
+ self.widget.setAttribute(qt.Qt.WA_DeleteOnClose)
89
+ self.widget.close()
90
+ self.widget = None
91
+ self.qapp.processEvents()
92
+ shutil.rmtree(self._source_dir)
93
+ gc.collect()
94
+
95
+ def test_serializing(self):
96
+ pickle.dumps(self.widget.getConfiguration())
97
+
98
+ def test_literal_dumps(self):
99
+ self.widget._updateSettings()
100
+ literal_dumps(self.widget._ewoks_default_inputs)
101
+
102
+ def testUnlocked(self):
103
+ """Test result when used with some interaction"""
104
+ self.widget.setLocked(False)
105
+
106
+ def process_scalar_manually():
107
+ self.widget.setCurrentMethod("division")
108
+ self.widget.setCurrentSource("manual ROI")
109
+
110
+ self.qapp.processEvents()
111
+ self.widget.setROI(start_x=0, end_x=10, start_y=0, end_y=10)
112
+ self.qapp.processEvents()
113
+ self.widget.compute()
114
+ self.widget.wait_processing(5000)
115
+ self.qapp.processEvents()
116
+
117
+ self.widget.process(self.scan_1)
118
+ process_scalar_manually()
119
+ self.assertEqual(
120
+ self._process_manager.get_dataset_state(
121
+ dataset_id=self.scan_1.get_identifier(),
122
+ process=self.widget,
123
+ ),
124
+ DatasetState.WAIT_USER_VALIDATION,
125
+ )
126
+
127
+ self.widget.process(self.scan_2)
128
+ process_scalar_manually()
129
+ self.assertEqual(len(self.widget.scans_finished), 0)
130
+ self.assertEqual(
131
+ self._process_manager.get_dataset_state(
132
+ dataset_id=self.scan_1.get_identifier(),
133
+ process=self.widget,
134
+ ),
135
+ DatasetState.SKIPPED,
136
+ )
137
+ self.assertEqual(
138
+ self._process_manager.get_dataset_state(
139
+ dataset_id=self.scan_2.get_identifier(),
140
+ process=self.widget,
141
+ ),
142
+ DatasetState.WAIT_USER_VALIDATION,
143
+ )
144
+
145
+ self.widget.process(self.scan_3)
146
+ process_scalar_manually()
147
+ self.widget.validateCurrentScan()
148
+ self.assertEqual(
149
+ self._process_manager.get_dataset_state(
150
+ dataset_id=self.scan_3.get_identifier(),
151
+ process=self.widget,
152
+ ),
153
+ DatasetState.SUCCEED,
154
+ )
155
+
156
+ def testTestLbsram(self):
157
+ """Test scan are all validated if 'low memory on lbsram' scenario is
158
+ activated"""
159
+ mock_low_memory(True)
160
+ settings.mock_lsbram(True)
161
+ for scan in (self.scan_1, self.scan_2, self.scan_3):
162
+ self.widget.process(scan)
163
+ self.widget.wait_processing(5000)
164
+ self.qapp.processEvents()
165
+
166
+ for scan in (self.scan_1, self.scan_2, self.scan_3):
167
+ with self.subTest(scan=str(scan)):
168
+ self.assertEqual(
169
+ self._process_manager.get_dataset_state(
170
+ dataset_id=scan.get_identifier(),
171
+ process=self.widget,
172
+ ),
173
+ DatasetState.SKIPPED,
174
+ )
175
+
176
+ def testLocked(self):
177
+ """Test scan are all validated if the widget is lock"""
178
+ self.widget.setLocked(True)
179
+ for scan in (self.scan_1, self.scan_2, self.scan_3):
180
+ self.widget.process(scan)
181
+ self.widget.wait_processing(5000)
182
+ self.qapp.processEvents()
183
+
184
+ for scan in (self.scan_1, self.scan_2, self.scan_3):
185
+ # test status is SUCCEED
186
+ with self.subTest(scan=str(scan)):
187
+ self.assertEqual(
188
+ self._process_manager.get_dataset_state(
189
+ dataset_id=scan.get_identifier(),
190
+ process=self.widget,
191
+ ),
192
+ DatasetState.SUCCEED,
193
+ )
194
+ # test process file has been updated
195
+ with EntryReader(scan.process_file_url) as entry:
196
+ self.assertTrue("tomwer_process_0" in entry)
197
+ self.assertEqual(
198
+ h5py_read_dataset(entry["tomwer_process_0"]["program"]),
199
+ SinoNormalizationTask.program_name(),
200
+ )
@@ -0,0 +1,20 @@
1
+ # import pickle
2
+
3
+ # from orangecanvas.scheme.readwrite import literal_dumps
4
+
5
+ # from tomwer.tests.conftest import qtapp # noqa F401
6
+
7
+ # from orangecontrib.tomwer.widgets.reconstruction.NabuHelicalPrepareWeightsDoubleOW import (
8
+ # NabuHelicalPrepareWeightsDoubleOW,
9
+ # )
10
+
11
+
12
+ # def test_NabuHelicalPrepareWeightsDoubleOW(
13
+ # qtapp, # noqa F811
14
+ # ):
15
+ # """simple test of the _DeltaBetaSelectorDialog"""
16
+ # widget = NabuHelicalPrepareWeightsDoubleOW()
17
+ # widget._loadSettings()
18
+ # # test settings serialization
19
+ # pickle.dumps(widget._ewoks_default_inputs)
20
+ # literal_dumps(widget._ewoks_default_inputs)
@@ -0,0 +1,74 @@
1
+ # coding: utf-8
2
+ from __future__ import annotations
3
+
4
+
5
+ import gc
6
+ import os
7
+ import pickle
8
+ import shutil
9
+ import tempfile
10
+ from time import sleep
11
+
12
+ from nabu.pipeline.config import get_default_nabu_config
13
+ from nabu.pipeline.fullfield.nabu_config import (
14
+ nabu_config as nabu_fullfield_default_config,
15
+ )
16
+ from orangecanvas.scheme.readwrite import literal_dumps
17
+ from silx.gui import qt
18
+ from silx.gui.utils.testutils import TestCaseQt
19
+
20
+ from orangecontrib.tomwer.widgets.reconstruction.NabuVolumeOW import NabuVolumeOW
21
+ from tomwer.core.utils.scanutils import MockNXtomo
22
+
23
+
24
+ class TestNabuVolumeOW(TestCaseQt):
25
+ def setUp(self):
26
+ super().setUp()
27
+ self.tmp_dir = tempfile.mkdtemp()
28
+ self.scan = MockNXtomo(
29
+ scan_path=os.path.join(self.tmp_dir, "myscan"),
30
+ n_proj=20,
31
+ n_ini_proj=20,
32
+ dim=10,
33
+ ).scan
34
+ self.widget = NabuVolumeOW()
35
+ self.widget._processingStack.setDryRun(True)
36
+
37
+ def tearDown(self):
38
+ self.widget.setAttribute(qt.Qt.WA_DeleteOnClose)
39
+ self.widget.close()
40
+ self.widget = None
41
+ shutil.rmtree(self.tmp_dir)
42
+ self.qapp.processEvents()
43
+ gc.collect()
44
+
45
+ def test_serializing(self):
46
+ pickle.dumps(self.widget.getConfiguration())
47
+
48
+ def test_literal_dumps(self):
49
+ literal_dumps(self.widget.getConfiguration())
50
+
51
+ def test_scan_as_None(self):
52
+ "test if scan is None"
53
+ self.widget.process(None)
54
+
55
+ def test_scan_un_preprocessed(self):
56
+ "test when scan is unconfigured (No nabu_recons_params defined)"
57
+ assert self.scan.nabu_recons_params is None
58
+ self.widget.process(self.scan)
59
+
60
+ def test_scan_ready_to_be_processed(self):
61
+ "test if scan has valid reconstruction parameters to be runned"
62
+ self.scan.nabu_recons_params = get_default_nabu_config(
63
+ nabu_fullfield_default_config
64
+ )
65
+ self.widget.process(self.scan)
66
+ timeout = 3
67
+ loop_sleep_time = 0.05
68
+ while not self.widget._processingStack.can_process_next():
69
+ self.qapp.processEvents()
70
+ timeout -= loop_sleep_time
71
+ if timeout <= 0.0:
72
+ raise TimeoutError("volume not process within expected time")
73
+ else:
74
+ sleep(loop_sleep_time)