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,411 @@
1
+ # coding: utf-8
2
+ from __future__ import annotations
3
+
4
+ import gc
5
+ import logging
6
+ import os
7
+ import shutil
8
+ import tempfile
9
+ import time
10
+ from time import sleep
11
+
12
+ from silx.gui import qt
13
+ from silx.gui.utils.testutils import SignalListener, TestCaseQt
14
+
15
+ from orangecontrib.tomwer.tests.TestAcquisition import Simulation
16
+ from orangecontrib.tomwer.widgets.control.DataWatcherOW import DataWatcherOW
17
+ from tomwer.core.process.control.datawatcher import status as datawatcherstatus
18
+ from tomwer.core.utils.scanutils import MockBlissAcquisition, MockNXtomo
19
+
20
+ logging.disable(logging.INFO)
21
+
22
+
23
+ class DataWatcherWaiter(TestCaseQt):
24
+ """Define a simple objecy able to wait for some state of the DataWatcher
25
+ arrive"""
26
+
27
+ def __init__(self, *args, **kwargs):
28
+ super().__init__(*args, **kwargs)
29
+ self.reset()
30
+ self.lastStatus = []
31
+
32
+ def tearDown(self):
33
+ pass
34
+
35
+ def reset(self):
36
+ self.lastStatus = []
37
+
38
+ def stateHasChanged(self, val):
39
+ """Register all status"""
40
+ if val not in self.lastStatus:
41
+ self.lastStatus.append(val)
42
+
43
+ def waitForState(self, state, maxWaiting):
44
+ """simple function wich wait until the DataWatcherWidget reach the given
45
+ state.
46
+ If the widget doesn't reach this state after maxWaiting second. Then fail.
47
+
48
+ :param state: the state we are waiting for
49
+ :param maxWaiting: the maximal number of second to wait until failling.
50
+ """
51
+ while state not in self.lastStatus:
52
+ time.sleep(1.0)
53
+ self.qapp.processEvents()
54
+ maxWaiting -= 1
55
+ if maxWaiting <= 0:
56
+ return False
57
+ return state in self.lastStatus
58
+
59
+
60
+ class TestDataWatcherAcquisition(DataWatcherWaiter):
61
+ """Functions testing the classical behavior of data watcher
62
+ - signal acquisition is over only when all files are copied
63
+ """
64
+
65
+ def tearDown(self):
66
+ while self.qapp.hasPendingEvents():
67
+ self.qapp.processEvents()
68
+ self.dataWatcherWidget.setObservation(False)
69
+ self.dataWatcherWidget.close()
70
+ del self.dataWatcherWidget
71
+ self.dataWatcherWidget = None
72
+ self.s.wait()
73
+ del self.s
74
+ if os.path.isdir(self.inputdir):
75
+ shutil.rmtree(self.inputdir)
76
+ gc.collect()
77
+ super().tearDown()
78
+
79
+ def setUp(self):
80
+ self.manipulationId = "test10"
81
+
82
+ super().setUp()
83
+ self.inputdir = tempfile.mkdtemp()
84
+ DataWatcherWaiter.reset(self)
85
+ self.dataWatcherWidget = DataWatcherOW(displayAdvancement=False)
86
+ self.dataWatcherWidget.srcPattern = ""
87
+ self.dataWatcherWidget.sigTMStatusChanged.connect(self.stateHasChanged)
88
+ self.dataWatcherWidget.setAttribute(qt.Qt.WA_DeleteOnClose)
89
+
90
+ self.s = Simulation(
91
+ self.inputdir,
92
+ self.manipulationId,
93
+ finalState=Simulation.advancement["acquisitionRunning"],
94
+ )
95
+
96
+ def testStartAcquisition(self):
97
+ """Make sure the data watch detect the acquisition of started"""
98
+ observeDir = os.path.join(self.inputdir, self.manipulationId)
99
+ for folder in (self.inputdir, observeDir):
100
+ if not os.path.exists(folder):
101
+ os.makedirs(folder)
102
+
103
+ self.assertTrue(os.path.isdir(observeDir))
104
+
105
+ self.s.createFinalXML(True)
106
+ self.dataWatcherWidget.setFolderObserved(observeDir)
107
+
108
+ self.assertTrue(self.dataWatcherWidget.currentStatus == "not processing")
109
+ self.s.start()
110
+ self.s.advanceTo("acquisitionDone")
111
+ self.s.start()
112
+ self.s.wait()
113
+ self.dataWatcherWidget.startObservation()
114
+ self.dataWatcherWidget._widget.observationThread.wait()
115
+ self.dataWatcherWidget._widget.observationThread.observations.dict[
116
+ observeDir
117
+ ].wait()
118
+ self.qapp.processEvents()
119
+ finishedAcqui = (
120
+ self.dataWatcherWidget._widget.observationThread.observations.ignoredFolders
121
+ )
122
+ self.qapp.processEvents()
123
+ self.assertTrue(observeDir in finishedAcqui)
124
+
125
+
126
+ class TestDataWatcherInteraction(TestCaseQt):
127
+ """Simple unit test to test the start/stop observation button action"""
128
+
129
+ def setUp(self):
130
+ super().setUp()
131
+ self.inputdir = tempfile.mkdtemp()
132
+ self.dataWatcherWidget = DataWatcherOW(displayAdvancement=False)
133
+ self.dataWatcherWidget.setAttribute(qt.Qt.WA_DeleteOnClose)
134
+ self.dataWatcherWidget.srcPattern = ""
135
+
136
+ def tearDown(self):
137
+ while self.qapp.hasPendingEvents():
138
+ self.qapp.processEvents()
139
+ self.dataWatcherWidget.close()
140
+ del self.dataWatcherWidget
141
+ if os.path.isdir(self.inputdir):
142
+ shutil.rmtree(self.inputdir)
143
+ gc.collect()
144
+
145
+ def testStartAndStopAcquisition(self):
146
+ """test multiple start and stop action on the start observation to
147
+ make sure no crash are appearing
148
+ """
149
+ try:
150
+ self.dataWatcherWidget.setFolderObserved(self.inputdir)
151
+ self.dataWatcherWidget.show()
152
+ self.dataWatcherWidget.setObservation(True)
153
+ for _ in range(5):
154
+ self.dataWatcherWidget._widget._qpbstartstop.pressed.emit()
155
+ self.assertTrue(True)
156
+ except Exception:
157
+ self.assertTrue(False)
158
+
159
+
160
+ class WaitForXMLOption(DataWatcherWaiter):
161
+ """test the behavior of datawatcher when the option 'wait for xml copy'
162
+ Basically in this case DataWatcherDirObserver will wait until an .xml
163
+ arrived
164
+ """
165
+
166
+ @classmethod
167
+ def setUpClass(cls):
168
+ cls.dataWatcherWidget = DataWatcherOW(displayAdvancement=False)
169
+ cls.dataWatcherWidget.setAttribute(qt.Qt.WA_DeleteOnClose)
170
+ cls.dataWatcherWidget.obsMethod = datawatcherstatus.DET_END_XML
171
+ cls.dataWatcherWidget.srcPattern = ""
172
+ cls.manipulationId = "test10"
173
+ super().setUpClass()
174
+
175
+ def setUp(self):
176
+ self.inputdir = tempfile.mkdtemp()
177
+ self.reset()
178
+ self.dataWatcherWidget.setObservation(False)
179
+ self.dataWatcherWidget.resetStatus()
180
+ super().setUp()
181
+
182
+ def tearDown(self):
183
+ while self.qapp.hasPendingEvents():
184
+ self.qapp.processEvents()
185
+ if os.path.isdir(self.inputdir):
186
+ shutil.rmtree(self.inputdir)
187
+ gc.collect()
188
+ super().tearDown()
189
+
190
+ @classmethod
191
+ def tearDownClass(cls):
192
+ cls.dataWatcherWidget.close()
193
+ del cls.dataWatcherWidget
194
+ if hasattr(cls, "s"):
195
+ cls.s.quit()
196
+ del cls.s
197
+ super().tearDownClass()
198
+
199
+ def testAcquistionNotEnding(self):
200
+ """Check behavior if an acquisition never end"""
201
+ observeDir = os.path.join(self.inputdir, self.manipulationId)
202
+ for folder in (self.inputdir, observeDir):
203
+ if not os.path.exists(folder):
204
+ os.makedirs(folder)
205
+
206
+ self.assertTrue(os.path.isdir(observeDir))
207
+
208
+ self.s = Simulation(
209
+ self.inputdir,
210
+ self.manipulationId,
211
+ finalState=Simulation.advancement["acquisitionRunning"],
212
+ )
213
+ self.dataWatcherWidget.setFolderObserved(observeDir)
214
+ self.dataWatcherWidget.show()
215
+ self.dataWatcherWidget.sigTMStatusChanged.connect(self.stateHasChanged)
216
+
217
+ self.assertTrue(self.dataWatcherWidget.currentStatus == "not processing")
218
+ self.s.start()
219
+ self.s.wait()
220
+ self.dataWatcherWidget.setObservation(True)
221
+ self.dataWatcherWidget._widget.observationThread.wait()
222
+ self.dataWatcherWidget._widget.observationThread.observations.dict[
223
+ observeDir
224
+ ].wait()
225
+ finishedAcqui = (
226
+ self.dataWatcherWidget._widget.observationThread.observations.ignoredFolders
227
+ )
228
+ self.qapp.processEvents()
229
+ self.assertFalse(observeDir in finishedAcqui)
230
+
231
+ def testAcquistionEnded(self):
232
+ """Check behavior if an acquisition is ending"""
233
+ manipulationId = "test10"
234
+ observeDir = os.path.join(self.inputdir, self.manipulationId)
235
+ for folder in (self.inputdir, observeDir):
236
+ if not os.path.exists(folder):
237
+ os.makedirs(folder)
238
+
239
+ self.assertTrue(os.path.isdir(observeDir))
240
+
241
+ self.s = Simulation(
242
+ self.inputdir,
243
+ manipulationId,
244
+ finalState=Simulation.advancement["acquisitionDone"],
245
+ )
246
+ self.s.createFinalXML(True)
247
+ self.dataWatcherWidget.setFolderObserved(observeDir)
248
+ self.dataWatcherWidget.show()
249
+ self.dataWatcherWidget.sigTMStatusChanged.connect(self.stateHasChanged)
250
+
251
+ self.assertTrue(self.dataWatcherWidget.currentStatus == "not processing")
252
+ self.s.start()
253
+ self.s.wait()
254
+ self.dataWatcherWidget.setObservation(True)
255
+ self.dataWatcherWidget._widget.observationThread.wait()
256
+ self.dataWatcherWidget._widget.observationThread.observations.dict[
257
+ observeDir
258
+ ].wait()
259
+ finishedAcqui = (
260
+ self.dataWatcherWidget._widget.observationThread.observations.ignoredFolders
261
+ )
262
+ self.qapp.processEvents()
263
+ self.assertTrue(observeDir in finishedAcqui)
264
+
265
+
266
+ class TestRSync(DataWatcherWaiter):
267
+ """test that the synchronization using RSyncManager is working"""
268
+
269
+ def setUp(self):
270
+ super().setUp()
271
+ self.inputdir = tempfile.mkdtemp()
272
+ self.outputdir = tempfile.mkdtemp()
273
+ DataWatcherWaiter.reset(self)
274
+ self.dataWatcherWidget = DataWatcherOW(displayAdvancement=False)
275
+ self.dataWatcherWidget.setAttribute(qt.Qt.WA_DeleteOnClose)
276
+ self.dataWatcherWidget._widget.setSrcAndDestPattern(
277
+ self.inputdir, self.outputdir
278
+ )
279
+
280
+ def tearDown(self):
281
+ while self.qapp.hasPendingEvents():
282
+ self.qapp.processEvents()
283
+ self.dataWatcherWidget.close()
284
+ del self.dataWatcherWidget
285
+ if hasattr(self, "s"):
286
+ self.s.quit()
287
+ del self.s
288
+ super(TestRSync, self).tearDown()
289
+ for d in (self.inputdir, self.outputdir):
290
+ if os.path.isdir(d):
291
+ shutil.rmtree(d, ignore_errors=True)
292
+ gc.collect()
293
+
294
+ def testStartAcquisition(self):
295
+ """Test that rsync is launched when an acquisition is discovered"""
296
+ manipulationId = "test10"
297
+ observeDir = os.path.join(self.inputdir, manipulationId)
298
+ for folder in (self.inputdir, observeDir):
299
+ if not os.path.exists(folder):
300
+ os.makedirs(folder)
301
+
302
+ self.assertTrue(os.path.isdir(observeDir))
303
+
304
+ self.s = Simulation(
305
+ self.inputdir,
306
+ manipulationId,
307
+ finalState=Simulation.advancement["acquisitionRunning"],
308
+ )
309
+
310
+ self.s.setSrcDestPatterns(self.inputdir, self.outputdir)
311
+ self.s.createFinalXML(True)
312
+ self.dataWatcherWidget.setFolderObserved(self.inputdir)
313
+ self.dataWatcherWidget.show()
314
+ self.dataWatcherWidget.sigTMStatusChanged.connect(self.stateHasChanged)
315
+ self.assertTrue(self.dataWatcherWidget.currentStatus == "not processing")
316
+ self.dataWatcherWidget.setObservation(True)
317
+ self.s.start()
318
+ # check state scanning
319
+ time.sleep(0.5)
320
+
321
+ self.dataWatcherWidget.stopObservation()
322
+
323
+ # in this case the .info should be in the output dir also
324
+ test10_output = os.path.join(self.outputdir, "test10")
325
+ test10_input = os.path.join(self.inputdir, "test10")
326
+ self.assertTrue(os.path.isfile(os.path.join(test10_output, "test10.info")))
327
+
328
+ # make sure file transfert have been started (using rsync)
329
+ # all file in outputdir should be in input dir
330
+ time.sleep(2)
331
+ # check that some .edf file have already been copied
332
+ self.assertTrue(len(test10_output) > 5)
333
+
334
+ # xml shouldn't be there because we are righting it at the end
335
+ self.assertFalse(os.path.isfile(os.path.join(test10_output, "test10.xml")))
336
+ self.assertFalse(os.path.isfile(os.path.join(test10_input, "test10.xml")))
337
+
338
+
339
+ class TestDataWatcherBlissScan(TestCaseQt):
340
+ def setUp(self):
341
+ self._widget = DataWatcherOW(self)
342
+ self.tempdir = tempfile.mkdtemp()
343
+ MockBlissAcquisition(
344
+ n_sample=1,
345
+ n_sequence=1,
346
+ n_scan_per_sequence=3,
347
+ n_darks=2,
348
+ n_flats=2,
349
+ output_dir=os.path.join(self.tempdir, "folder_1"),
350
+ )
351
+
352
+ MockBlissAcquisition(
353
+ n_sample=2,
354
+ n_sequence=1,
355
+ n_scan_per_sequence=3,
356
+ n_darks=2,
357
+ n_flats=2,
358
+ output_dir=os.path.join(self.tempdir, "test", "with", "some", "depth"),
359
+ )
360
+ self._listener = SignalListener()
361
+ self._widget._widget.sigScanReady.connect(self._listener)
362
+
363
+ def tearDown(self):
364
+ self._widget._widget.sigScanReady.disconnect(self._listener)
365
+ self._widget.stopObservation()
366
+ self._listener = None
367
+ shutil.rmtree(self.tempdir)
368
+ self._widget.setAttribute(qt.Qt.WA_DeleteOnClose)
369
+ self._widget.close()
370
+ self._widget = None
371
+ gc.collect()
372
+
373
+
374
+ class TestDataWatcherNXtomo(TestCaseQt):
375
+ def setUp(self):
376
+ self._widget = DataWatcherOW(self)
377
+ self.tempdir = tempfile.mkdtemp()
378
+ MockNXtomo(
379
+ scan_path=os.path.join(self.tempdir, "folder_1"),
380
+ n_proj=10,
381
+ )
382
+
383
+ MockNXtomo(
384
+ scan_path=os.path.join(self.tempdir, "test", "with", "some", "depth"),
385
+ n_proj=10,
386
+ )
387
+ self._listener = SignalListener()
388
+ self._widget._widget.sigScanReady.connect(self._listener)
389
+
390
+ def tearDown(self):
391
+ self._widget._widget.sigScanReady.disconnect(self._listener)
392
+ self._widget.stopObservation()
393
+ self._listener = None
394
+ shutil.rmtree(self.tempdir)
395
+ self._widget.setAttribute(qt.Qt.WA_DeleteOnClose)
396
+ self._widget.close()
397
+ self._widget = None
398
+ gc.collect()
399
+
400
+ def test(self):
401
+ self._widget.setFolderObserved(self.tempdir)
402
+ self._widget._widget.getConfigWindow().setMode((datawatcherstatus.NXtomo_END,))
403
+ self._widget.show()
404
+ self._widget.startObservation()
405
+ processing_time = 2
406
+ sleep_time = 0.005
407
+ while processing_time > 0:
408
+ self.qapp.processEvents()
409
+ sleep(sleep_time)
410
+ processing_time -= sleep_time
411
+ assert self._listener.callCount() == 2
@@ -0,0 +1,29 @@
1
+ import gc
2
+ import pickle
3
+
4
+ from silx.gui import qt
5
+ from silx.gui.utils.testutils import TestCaseQt
6
+
7
+ from orangecontrib.tomwer.widgets.control.EmailOW import EmailOW
8
+ from orangecanvas.scheme.readwrite import literal_dumps
9
+
10
+
11
+ class TestEmailOW(TestCaseQt):
12
+ def setUp(self):
13
+ super().setUp()
14
+ self.widget = EmailOW()
15
+
16
+ def tearDown(self):
17
+ self.widget.setAttribute(qt.Qt.WA_DeleteOnClose)
18
+ self.widget.close()
19
+ self.widget = None
20
+ gc.collect()
21
+
22
+ def test(self):
23
+ self.widget.show()
24
+
25
+ def test_serializing(self):
26
+ pickle.dumps(self.widget.getConfiguration())
27
+
28
+ def test_literal_dumps(self):
29
+ literal_dumps(self.widget.getConfiguration())
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ from __future__ import annotations
3
+
4
+ import gc
5
+
6
+ from silx.gui import qt
7
+ from silx.gui.utils.testutils import TestCaseQt
8
+
9
+ from orangecontrib.tomwer.widgets.control.NotifierOW import NotifierWidgetOW
10
+
11
+
12
+ class TestTimerOW(TestCaseQt):
13
+ def setUp(self):
14
+ super().setUp()
15
+ self.widget = NotifierWidgetOW()
16
+
17
+ def tearDown(self):
18
+ self.widget.setAttribute(qt.Qt.WA_DeleteOnClose)
19
+ self.widget.close()
20
+ self.widget = None
21
+ gc.collect()
22
+
23
+ def test(self):
24
+ self.widget.show()
@@ -0,0 +1,64 @@
1
+ import os
2
+ from tomoscan.series import Series
3
+ import pickle
4
+
5
+ from ewoksorange.bindings.qtapp import QtEvent
6
+
7
+ from orangecanvas.scheme.readwrite import literal_dumps
8
+
9
+ from tomwer.tests.conftest import qtapp # noqa F401
10
+ from tomwer.core.utils.scanutils import MockNXtomo
11
+
12
+ from orangecontrib.tomwer.widgets.control.NXtomoConcatenate import NXtomoConcatenateOW
13
+
14
+
15
+ def test_NabuHelicalPrepareWeightsDoubleOW(
16
+ qtapp, # noqa F811
17
+ tmp_path,
18
+ ):
19
+ """simple test of the _DeltaBetaSelectorDialog"""
20
+ widget = NXtomoConcatenateOW()
21
+ widget._loadSettings()
22
+ # test settings serialization
23
+ pickle.dumps(widget._ewoks_default_inputs)
24
+ literal_dumps(widget._ewoks_default_inputs)
25
+
26
+ scan_1 = MockNXtomo(
27
+ scan_path=os.path.join(tmp_path, "scan1"),
28
+ n_proj=10,
29
+ n_ini_proj=10,
30
+ scan_range=180,
31
+ dim=20,
32
+ energy=12.3,
33
+ ).scan
34
+ scan_2 = MockNXtomo(
35
+ scan_path=os.path.join(tmp_path, "scan2"),
36
+ n_proj=10,
37
+ n_ini_proj=10,
38
+ scan_range=180,
39
+ dim=20,
40
+ energy=12.3,
41
+ ).scan
42
+
43
+ output_scan_file = os.path.join(tmp_path, "concatenation.nx")
44
+ assert not os.path.exists(output_scan_file)
45
+
46
+ widget.widget.setConfiguration(
47
+ {
48
+ "output_file": output_scan_file,
49
+ }
50
+ )
51
+
52
+ # process task
53
+ finished = QtEvent()
54
+
55
+ def finished_callback():
56
+ finished.set()
57
+
58
+ executor = widget.task_executor_queue
59
+ executor.sigComputationEnded.connect(finished_callback)
60
+ widget._process_series(series=Series(iterable=[scan_1, scan_2]))
61
+
62
+ # wait until processing is finished
63
+ assert finished.wait(timeout=10)
64
+ assert os.path.exists(output_scan_file)
@@ -0,0 +1,133 @@
1
+ # coding: utf-8
2
+ from __future__ import annotations
3
+
4
+ import gc
5
+ import os
6
+ import shutil
7
+ import tempfile
8
+ import time
9
+
10
+ from orangecanvas.scheme.readwrite import literal_dumps
11
+ from processview.core.manager.manager import DatasetState, ProcessManager
12
+ from silx.gui import qt
13
+ from silx.gui.utils.testutils import TestCaseQt
14
+ from tomoscan.esrf.scan.mock import MockEDF
15
+
16
+ from orangecontrib.tomwer.widgets.control.EDF2NXTomomillOW import EDF2NXOW
17
+ from orangecontrib.tomwer.widgets.control.NXTomomillOW import NXTomomillOW
18
+ from tomwer.core.scan.blissscan import BlissScan
19
+ from tomwer.core.scan.nxtomoscan import NXtomoScan
20
+ from tomwer.core.utils.scanutils import MockBlissAcquisition
21
+
22
+
23
+ class TestNXTomomillOw(TestCaseQt):
24
+ """
25
+ Test the NXTomomillOW widget
26
+ """
27
+
28
+ def setUp(self):
29
+ super().setUp()
30
+ self.tempdir = tempfile.mkdtemp()
31
+ mock = MockBlissAcquisition(
32
+ n_sample=1,
33
+ n_sequence=1,
34
+ n_scan_per_sequence=3,
35
+ n_darks=2,
36
+ n_flats=2,
37
+ output_dir=self.tempdir,
38
+ )
39
+ self.scan = BlissScan(
40
+ master_file=mock.samples[0].sample_file,
41
+ proposal_file=mock.proposal_file,
42
+ entry="1.1",
43
+ )
44
+ self.widget = NXTomomillOW()
45
+
46
+ def tearDown(self):
47
+ self.widget.setAttribute(qt.Qt.WA_DeleteOnClose)
48
+ self.widget.close()
49
+ self.widget = None
50
+ shutil.rmtree(self.tempdir)
51
+ gc.collect()
52
+
53
+ def test(self):
54
+ self.widget.add(self.scan.master_file)
55
+ self.widget._sendAll()
56
+
57
+ def test_literal_dumps(self):
58
+ self.widget._saveNXTomoCfgFile(cfg_file="")
59
+ literal_dumps(self.widget._ewoks_default_inputs)
60
+
61
+
62
+ class TestEDF2NXOW(TestCaseQt):
63
+ """
64
+ Test the EDF2NXOW widget
65
+ """
66
+
67
+ def setUp(self):
68
+ super().setUp()
69
+ self.tempdir = tempfile.mkdtemp()
70
+ self._edf_folder_1 = os.path.join(self.tempdir, "edf_scan_1")
71
+ self._edf_folder_2 = os.path.join(self.tempdir, "edf_scan_2_")
72
+ MockEDF(
73
+ scan_path=self._edf_folder_1,
74
+ n_radio=10,
75
+ n_ini_radio=10,
76
+ n_extra_radio=0,
77
+ dim=128,
78
+ dark_n=1,
79
+ flat_n=1,
80
+ )
81
+ MockEDF(
82
+ scan_path=self._edf_folder_2,
83
+ n_radio=10,
84
+ n_ini_radio=10,
85
+ n_extra_radio=0,
86
+ dim=128,
87
+ dark_n=1,
88
+ flat_n=1,
89
+ )
90
+ self.widget = EDF2NXOW()
91
+ self._process_manager = ProcessManager()
92
+
93
+ def tearDown(self):
94
+ self.widget.setAttribute(qt.Qt.WA_DeleteOnClose)
95
+ self.widget.close()
96
+ self.widget = None
97
+ shutil.rmtree(self.tempdir)
98
+ gc.collect()
99
+
100
+ def test(self):
101
+ self.widget.add(self._edf_folder_1)
102
+ self.widget.add(self._edf_folder_2)
103
+ self.widget._sendAll()
104
+ self.qapp.processEvents()
105
+ timeout = 10
106
+ processing_queue = self.widget.task_executor_queue
107
+ while not processing_queue.is_available and not processing_queue.empty():
108
+ self.qapp.processEvents()
109
+ time.sleep(0.1)
110
+ timeout -= 0.1
111
+ if timeout <= 0:
112
+ raise TimeoutError
113
+ # need to call one more time the processEvents tpo call callbacks and status notification
114
+ for i in range(3):
115
+ self.qapp.processEvents()
116
+ time.sleep(0.1)
117
+
118
+ # check the two output files exists and status of the processing is done...
119
+ for folder in (self._edf_folder_1, self._edf_folder_2):
120
+ scan = NXtomoScan(scan=folder + ".nx", entry="entry")
121
+ self.assertTrue(os.path.exists(scan.master_file))
122
+
123
+ self.assertEqual(
124
+ self._process_manager.get_dataset_state(
125
+ dataset_id=scan.get_identifier(),
126
+ process=self.widget,
127
+ ),
128
+ DatasetState.SUCCEED,
129
+ )
130
+
131
+ def test_literal_dumps(self):
132
+ self.widget._saveNXTomoCfgFile(cfg_file="")
133
+ literal_dumps(self.widget._ewoks_default_inputs)
@@ -0,0 +1,40 @@
1
+ import gc
2
+ import pickle
3
+ import numpy
4
+
5
+ from silx.gui import qt
6
+ from silx.gui.utils.testutils import TestCaseQt
7
+
8
+ from orangecontrib.tomwer.widgets.control.ReduceDarkFlatSelectorOW import (
9
+ ReduceDarkFlatSelectorOW,
10
+ )
11
+ from orangecanvas.scheme.readwrite import literal_dumps
12
+
13
+
14
+ class TestEmailOW(TestCaseQt):
15
+ def setUp(self):
16
+ super().setUp()
17
+ self.widget = ReduceDarkFlatSelectorOW()
18
+ self.widget._dialog.addReduceFrames(
19
+ {
20
+ "reduce_frames_name": "new dict",
21
+ -1: numpy.random.random(100 * 100).reshape(100, 100),
22
+ 2: numpy.random.random(100 * 100).reshape(100, 100),
23
+ },
24
+ selected=(-1, 2),
25
+ )
26
+
27
+ def tearDown(self):
28
+ self.widget.setAttribute(qt.Qt.WA_DeleteOnClose)
29
+ self.widget.close()
30
+ self.widget = None
31
+ gc.collect()
32
+
33
+ def test(self):
34
+ self.widget.show()
35
+
36
+ def test_serializing(self):
37
+ pickle.dumps(self.widget.getConfiguration())
38
+
39
+ def test_literal_dumps(self):
40
+ literal_dumps(self.widget.getConfiguration())