tomwer 1.3.27__py3-none-any.whl → 1.4.0rc0__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 (632) 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 +48 -49
  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 +40 -85
  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 -7
  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 +7 -4
  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 +63 -111
  138. tomwer/core/process/reconstruction/axis/mode.py +5 -3
  139. tomwer/core/process/reconstruction/axis/params.py +5 -146
  140. tomwer/core/process/reconstruction/axis/projectiontype.py +0 -28
  141. tomwer/core/process/reconstruction/darkref/darkrefs.py +14 -39
  142. tomwer/core/process/reconstruction/darkref/darkrefscopy.py +7 -39
  143. tomwer/core/process/reconstruction/darkref/params.py +1 -28
  144. tomwer/core/process/reconstruction/nabu/castvolume.py +19 -34
  145. tomwer/core/process/reconstruction/nabu/nabucommon.py +18 -43
  146. tomwer/core/process/reconstruction/nabu/nabuscores.py +47 -48
  147. tomwer/core/process/reconstruction/nabu/nabuslices.py +59 -105
  148. tomwer/core/process/reconstruction/nabu/nabuvolume.py +44 -70
  149. tomwer/core/process/reconstruction/nabu/plane.py +10 -0
  150. tomwer/core/process/reconstruction/nabu/settings.py +1 -28
  151. tomwer/core/process/reconstruction/nabu/target.py +0 -28
  152. tomwer/core/process/reconstruction/nabu/test/test_castvolume.py +116 -0
  153. tomwer/core/process/reconstruction/nabu/test/test_nabu_utils.py +277 -0
  154. tomwer/core/process/reconstruction/nabu/test/test_nabunormalization.py +199 -0
  155. tomwer/core/process/reconstruction/nabu/utils.py +11 -60
  156. tomwer/core/process/reconstruction/normalization/normalization.py +2 -32
  157. tomwer/core/process/reconstruction/normalization/params.py +3 -35
  158. tomwer/core/process/reconstruction/output.py +14 -19
  159. tomwer/core/process/reconstruction/paramsbase.py +4 -33
  160. tomwer/core/process/reconstruction/saaxis/params.py +5 -33
  161. tomwer/core/process/reconstruction/saaxis/saaxis.py +18 -47
  162. tomwer/core/process/reconstruction/sadeltabeta/params.py +2 -31
  163. tomwer/core/process/reconstruction/sadeltabeta/sadeltabeta.py +16 -44
  164. tomwer/core/process/reconstruction/scores/params.py +9 -39
  165. tomwer/core/process/reconstruction/scores/scores.py +10 -42
  166. tomwer/core/process/reconstruction/tests/__init__.py +0 -0
  167. tomwer/core/process/reconstruction/tests/test_axis.py +46 -0
  168. tomwer/core/process/reconstruction/tests/test_darkref.py +33 -0
  169. tomwer/core/process/reconstruction/{test → tests}/test_saaxis.py +1 -27
  170. tomwer/core/process/reconstruction/tests/test_sadeltabeta.py +48 -0
  171. tomwer/core/process/script/python.py +1 -27
  172. tomwer/core/process/script/tests/test_script.py +41 -0
  173. tomwer/core/process/stitching/metadataholder.py +5 -4
  174. tomwer/core/process/stitching/nabustitcher.py +35 -5
  175. tomwer/core/process/stitching/tests/test_metadataholder.py +17 -0
  176. tomwer/core/process/task.py +20 -63
  177. tomwer/core/process/tests/__init__.py +0 -0
  178. tomwer/core/process/{test → tests}/test_axis.py +1 -79
  179. tomwer/core/process/{test → tests}/test_conditions.py +1 -28
  180. tomwer/core/process/{test → tests}/test_dark_and_flat.py +1 -27
  181. tomwer/core/process/{test → tests}/test_data_listener.py +1 -27
  182. tomwer/core/process/{test → tests}/test_data_transfer.py +2 -28
  183. tomwer/core/process/{test → tests}/test_data_watcher.py +1 -27
  184. tomwer/core/process/{test → tests}/test_nabu.py +4 -33
  185. tomwer/core/process/{test → tests}/test_normalization.py +1 -26
  186. tomwer/core/process/{test → tests}/test_timer.py +1 -27
  187. tomwer/core/process/utils.py +2 -31
  188. tomwer/core/process/visualization/dataviewer.py +1 -26
  189. tomwer/core/process/visualization/diffviewer.py +1 -26
  190. tomwer/core/process/visualization/imagestackviewer.py +0 -26
  191. tomwer/core/process/visualization/radiostack.py +0 -26
  192. tomwer/core/process/visualization/samplemoved.py +0 -28
  193. tomwer/core/process/visualization/sinogramviewer.py +0 -27
  194. tomwer/core/process/visualization/slicestack.py +0 -28
  195. tomwer/core/process/visualization/tests/test_data_viewer.py +12 -0
  196. tomwer/core/process/visualization/tests/test_diff_viewer.py +12 -0
  197. tomwer/core/process/visualization/tests/test_image_stack_viewer.py +14 -0
  198. tomwer/core/process/visualization/tests/test_radio_stack.py +12 -0
  199. tomwer/core/process/visualization/tests/test_sample_moved.py +14 -0
  200. tomwer/core/process/visualization/tests/test_sinogram_viewer.py +13 -0
  201. tomwer/core/process/visualization/tests/test_slice_stack.py +13 -0
  202. tomwer/core/process/visualization/tests/test_volume_viewer.py +12 -0
  203. tomwer/core/process/visualization/volumeviewer.py +0 -29
  204. tomwer/core/scan/__init__.py +3 -27
  205. tomwer/core/scan/blissscan.py +5 -34
  206. tomwer/core/scan/edfscan.py +19 -53
  207. tomwer/core/scan/hdf5scan.py +2 -2
  208. tomwer/core/scan/nxtomoscan.py +46 -54
  209. tomwer/core/scan/scanbase.py +104 -200
  210. tomwer/core/scan/scanfactory.py +11 -41
  211. tomwer/core/scan/tests/__init__.py +0 -0
  212. tomwer/core/scan/tests/test_edf.py +25 -0
  213. tomwer/core/scan/tests/test_future_scan.py +35 -0
  214. tomwer/core/scan/tests/test_nxtomoscan.py +143 -0
  215. tomwer/core/scan/{test → tests}/test_process_registration.py +1 -28
  216. tomwer/core/settings.py +18 -40
  217. tomwer/core/tests/__init__.py +0 -0
  218. tomwer/core/tests/test_scanutils.py +26 -0
  219. tomwer/core/{test → tests}/test_utils.py +1 -28
  220. tomwer/core/tomwer_object.py +4 -0
  221. tomwer/core/utils/__init__.py +2 -0
  222. tomwer/core/utils/char.py +0 -28
  223. tomwer/core/utils/deprecation.py +12 -38
  224. tomwer/core/utils/dictutils.py +1 -3
  225. tomwer/core/utils/ftseriesutils.py +1 -27
  226. tomwer/core/utils/gpu.py +0 -28
  227. tomwer/core/utils/image.py +8 -39
  228. tomwer/core/utils/locker.py +1 -28
  229. tomwer/core/utils/logconfig.py +0 -27
  230. tomwer/core/utils/normalization.py +4 -31
  231. tomwer/core/utils/nxtomoutils.py +8 -38
  232. tomwer/core/utils/resource.py +0 -26
  233. tomwer/core/utils/scanutils.py +23 -52
  234. tomwer/core/utils/slurm.py +7 -30
  235. tomwer/core/utils/spec.py +6 -6
  236. tomwer/core/utils/tests/__init__.py +0 -0
  237. tomwer/core/utils/tests/test_image.py +30 -0
  238. tomwer/core/utils/tests/test_nxtomo.py +38 -0
  239. tomwer/core/utils/tests/test_scan_utils.py +46 -0
  240. tomwer/core/utils/tests/test_time.py +6 -0
  241. tomwer/core/utils/threads.py +0 -26
  242. tomwer/core/utils/time.py +0 -27
  243. tomwer/core/volume/__init__.py +4 -0
  244. tomwer/core/volume/edfvolume.py +1 -28
  245. tomwer/core/volume/hdf5volume.py +1 -28
  246. tomwer/core/volume/jp2kvolume.py +1 -27
  247. tomwer/core/volume/rawvolume.py +1 -28
  248. tomwer/core/volume/tests/test_volumes.py +21 -0
  249. tomwer/core/volume/tiffvolume.py +1 -28
  250. tomwer/core/volume/volumebase.py +5 -0
  251. tomwer/core/volume/volumefactory.py +7 -33
  252. tomwer/gui/__init__.py +0 -28
  253. tomwer/gui/cluster/__init__.py +2 -0
  254. tomwer/gui/cluster/slurm.py +297 -95
  255. tomwer/gui/cluster/supervisor.py +1 -27
  256. tomwer/gui/cluster/tests/__init__.py +0 -0
  257. tomwer/gui/cluster/{test → tests}/test_cluster.py +21 -26
  258. tomwer/gui/cluster/{test → tests}/test_supervisor.py +1 -27
  259. tomwer/gui/conditions/__init__.py +2 -0
  260. tomwer/gui/conditions/filter.py +1 -26
  261. tomwer/gui/configuration/__init__.py +2 -0
  262. tomwer/gui/control/__init__.py +2 -0
  263. tomwer/gui/control/actions.py +2 -28
  264. tomwer/gui/control/datadiscovery.py +4 -3
  265. tomwer/gui/control/datalist.py +64 -69
  266. tomwer/gui/control/datalistener.py +1 -39
  267. tomwer/gui/control/datareacheractions.py +1 -28
  268. tomwer/gui/control/datatransfert.py +2 -29
  269. tomwer/gui/control/datavalidator.py +3 -37
  270. tomwer/gui/control/datawatcher/__init__.py +0 -28
  271. tomwer/gui/control/datawatcher/configuration.py +1 -28
  272. tomwer/gui/control/datawatcher/datawatcher.py +3 -32
  273. tomwer/gui/control/datawatcher/datawatcherobserver.py +2 -28
  274. tomwer/gui/control/history.py +5 -35
  275. tomwer/gui/control/nxtomomill.py +3 -30
  276. tomwer/gui/control/observations.py +61 -55
  277. tomwer/gui/control/reducedarkflatselector.py +24 -20
  278. tomwer/gui/control/scanselectorwidget.py +2 -28
  279. tomwer/gui/control/selectorwidgetbase.py +17 -17
  280. tomwer/gui/control/series/__init__.py +0 -0
  281. tomwer/gui/control/{serie/seriecreator.py → series/seriescreator.py} +214 -235
  282. tomwer/gui/control/series/serieswaiter.py +0 -0
  283. tomwer/gui/control/series/test/test_creator.py +424 -0
  284. tomwer/gui/control/series/test/test_nxtomo_concatenate.py +21 -0
  285. tomwer/gui/control/singletomoobj.py +1 -1
  286. tomwer/gui/control/tests/__init__.py +0 -0
  287. tomwer/gui/control/tests/test_datalist.py +47 -0
  288. tomwer/gui/control/{test → tests}/test_datalistener.py +1 -28
  289. tomwer/gui/control/tests/test_datavalidator.py +27 -0
  290. tomwer/gui/control/{test → tests}/test_inputwidget.py +1 -27
  291. tomwer/gui/control/tests/test_process_manager.py +38 -0
  292. tomwer/gui/control/tests/test_scan_observations.py +23 -0
  293. tomwer/gui/control/tests/test_scanselector.py +42 -0
  294. tomwer/gui/control/{test → tests}/test_scanvalidator.py +1 -27
  295. tomwer/gui/control/{test → tests}/test_volume_dialog.py +2 -30
  296. tomwer/gui/control/{test → tests}/test_volumeselector.py +1 -27
  297. tomwer/gui/control/volumeselectorwidget.py +2 -30
  298. tomwer/gui/dataportal/__init__.py +2 -0
  299. tomwer/gui/{icat → dataportal}/createscreenshots.py +3 -2
  300. tomwer/gui/dataportal/gallery.py +133 -0
  301. tomwer/gui/dataportal/outputformat.py +0 -0
  302. tomwer/gui/dataportal/publish.py +96 -0
  303. tomwer/gui/dataportal/tests/test_create_screenshots_gui.py +23 -0
  304. tomwer/gui/dataportal/tests/test_gallery_gui.py +21 -0
  305. tomwer/gui/debugtools/__init__.py +2 -0
  306. tomwer/gui/debugtools/datasetgenerator.py +1 -30
  307. tomwer/gui/debugtools/objectinspector.py +1 -29
  308. tomwer/gui/dialog/QDataDialog.py +89 -0
  309. tomwer/gui/{qfolderdialog.py → dialog/QVolumeDialog.py} +8 -107
  310. tomwer/gui/dialog/__init__.py +1 -0
  311. tomwer/gui/edit/__init__.py +2 -0
  312. tomwer/gui/edit/dkrfpatch.py +52 -87
  313. tomwer/gui/edit/imagekeyeditor.py +18 -54
  314. tomwer/gui/edit/nxtomoeditor.py +113 -300
  315. tomwer/gui/edit/nxtomowarmer.py +3 -2
  316. tomwer/gui/edit/tests/__init__.py +0 -0
  317. tomwer/gui/edit/{test → tests}/test_dkrf_patch.py +3 -29
  318. tomwer/gui/edit/{test → tests}/test_image_key_editor.py +1 -27
  319. tomwer/gui/edit/{test → tests}/test_nx_editor.py +45 -23
  320. tomwer/gui/icons.py +28 -66
  321. tomwer/gui/illustrations.py +4 -34
  322. tomwer/gui/imagefromfile.py +5 -30
  323. tomwer/gui/metadataloader.py +36 -0
  324. tomwer/gui/qconfigfile.py +3 -0
  325. tomwer/gui/qlefilesystem.py +3 -0
  326. tomwer/gui/reconstruction/__init__.py +2 -0
  327. tomwer/gui/reconstruction/axis/AxisMainWindow.py +264 -0
  328. tomwer/gui/reconstruction/axis/AxisOptionsWidget.py +153 -0
  329. tomwer/gui/reconstruction/axis/AxisSettingsWidget.py +776 -0
  330. tomwer/gui/reconstruction/axis/AxisWidget.py +526 -0
  331. tomwer/gui/reconstruction/axis/CalculationWidget.py +374 -0
  332. tomwer/gui/reconstruction/axis/CompareImages.py +11 -44
  333. tomwer/gui/reconstruction/axis/ControlWidget.py +277 -0
  334. tomwer/gui/reconstruction/axis/InputWidget.py +491 -0
  335. tomwer/gui/reconstruction/axis/ManualFramesSelection.py +168 -0
  336. tomwer/gui/reconstruction/axis/__init__.py +2 -2
  337. tomwer/gui/reconstruction/darkref/__init__.py +0 -27
  338. tomwer/gui/reconstruction/darkref/darkrefcopywidget.py +5 -34
  339. tomwer/gui/reconstruction/darkref/darkrefwidget.py +1 -27
  340. tomwer/gui/reconstruction/nabu/castvolume.py +40 -59
  341. tomwer/gui/reconstruction/nabu/check.py +7 -33
  342. tomwer/gui/reconstruction/nabu/nabuconfig/base.py +7 -34
  343. tomwer/gui/reconstruction/nabu/nabuconfig/ctf.py +6 -5
  344. tomwer/gui/reconstruction/nabu/nabuconfig/nabuconfig.py +10 -69
  345. tomwer/gui/reconstruction/nabu/nabuconfig/output.py +3 -47
  346. tomwer/gui/reconstruction/nabu/nabuconfig/phase.py +54 -36
  347. tomwer/gui/reconstruction/nabu/nabuconfig/preprocessing.py +103 -54
  348. tomwer/gui/reconstruction/nabu/nabuconfig/reconstruction.py +116 -65
  349. tomwer/gui/reconstruction/nabu/nabuflow.py +31 -61
  350. tomwer/gui/reconstruction/nabu/platform.py +94 -0
  351. tomwer/gui/reconstruction/nabu/slices.py +81 -45
  352. tomwer/gui/reconstruction/nabu/slurm.py +1 -27
  353. tomwer/gui/reconstruction/nabu/test/test_cast_volume.py +82 -0
  354. tomwer/gui/reconstruction/nabu/test/test_check.py +66 -0
  355. tomwer/gui/reconstruction/nabu/test/test_ctf.py +46 -0
  356. tomwer/gui/reconstruction/nabu/test/test_helical.py +21 -0
  357. tomwer/gui/reconstruction/nabu/test/test_nabu_preprocessing.py +81 -0
  358. tomwer/gui/reconstruction/nabu/volume.py +62 -90
  359. tomwer/gui/reconstruction/normalization/intensity.py +5 -32
  360. tomwer/gui/reconstruction/normalization/test/test_intensity.py +89 -0
  361. tomwer/gui/reconstruction/saaxis/corrangeselector.py +16 -49
  362. tomwer/gui/reconstruction/saaxis/dimensionwidget.py +56 -96
  363. tomwer/gui/reconstruction/saaxis/saaxis.py +17 -38
  364. tomwer/gui/reconstruction/saaxis/sliceselector.py +8 -39
  365. tomwer/gui/reconstruction/sadeltabeta/saadeltabeta.py +19 -37
  366. tomwer/gui/reconstruction/scores/control.py +2 -30
  367. tomwer/gui/reconstruction/scores/scoreplot.py +19 -48
  368. tomwer/gui/reconstruction/tests/__init__.py +0 -0
  369. tomwer/gui/reconstruction/{test → tests}/test_axis.py +23 -49
  370. tomwer/gui/reconstruction/{test → tests}/test_nabu.py +8 -31
  371. tomwer/gui/reconstruction/{test → tests}/test_saaxis.py +10 -37
  372. tomwer/gui/reconstruction/{test → tests}/test_sadeltabeta.py +1 -26
  373. tomwer/gui/samplemoved/__init__.py +2 -30
  374. tomwer/gui/samplemoved/selectiontable.py +3 -33
  375. tomwer/gui/settings.py +7 -0
  376. tomwer/gui/stackplot.py +33 -661
  377. tomwer/gui/stacks.py +261 -135
  378. tomwer/gui/stitching/SingleAxisStitchingWidget.py +326 -0
  379. tomwer/gui/stitching/StitchingOptionsWidget.py +438 -0
  380. tomwer/gui/stitching/StitchingWindow.py +586 -0
  381. tomwer/gui/stitching/__init__.py +2 -0
  382. tomwer/gui/stitching/alignment.py +90 -0
  383. tomwer/gui/stitching/axisorderedlist.py +44 -34
  384. tomwer/gui/stitching/config/axisparams.py +23 -11
  385. tomwer/gui/stitching/config/output.py +6 -5
  386. tomwer/gui/stitching/config/positionoveraxis.py +313 -51
  387. tomwer/gui/stitching/config/stitchingstrategies.py +22 -16
  388. tomwer/gui/stitching/config/tests/test_axisparams.py +25 -0
  389. tomwer/gui/stitching/config/tomoobjdetails.py +3 -5
  390. tomwer/gui/stitching/normalization.py +1 -0
  391. tomwer/gui/stitching/preview.py +59 -0
  392. tomwer/gui/stitching/singleaxis.py +57 -0
  393. tomwer/gui/stitching/stitchandbackground.py +3 -2
  394. tomwer/gui/stitching/stitching_preview.py +44 -36
  395. tomwer/gui/stitching/stitching_raw.py +5 -3
  396. tomwer/gui/stitching/tests/test_ZStitchingWindow.py +88 -0
  397. tomwer/gui/stitching/tests/test_axis_ordered_list.py +21 -0
  398. tomwer/gui/stitching/tests/test_normalization.py +27 -0
  399. tomwer/gui/stitching/tests/test_preview.py +68 -0
  400. tomwer/gui/stitching/tests/test_stitching_raw.py +110 -0
  401. tomwer/gui/stitching/tests/utils.py +92 -0
  402. tomwer/gui/stitching/utils.py +14 -0
  403. tomwer/gui/stitching/z_stitching/fineestimation.py +4 -32
  404. tomwer/gui/stitching/z_stitching/tests/test_fine_estimation.py +35 -0
  405. tomwer/gui/stitching/z_stitching/tests/test_raw_estimation.py +215 -0
  406. tomwer/gui/stitching/z_stitching/tests/test_stitching_window.py +51 -0
  407. tomwer/gui/tests/__init__.py +0 -0
  408. tomwer/gui/tests/test_axis_gui.py +27 -0
  409. tomwer/gui/{test → tests}/test_qfolder_dialog.py +1 -1
  410. tomwer/gui/utils/RangeWidget.py +44 -0
  411. tomwer/gui/utils/buttons.py +4 -3
  412. tomwer/gui/utils/completer.py +2 -33
  413. tomwer/gui/utils/flow.py +11 -40
  414. tomwer/gui/utils/gpu.py +60 -0
  415. tomwer/gui/utils/illustrations.py +1 -26
  416. tomwer/gui/utils/inputwidget.py +35 -73
  417. tomwer/gui/utils/lineselector/lineselector.py +9 -46
  418. tomwer/gui/utils/loadingmode.py +81 -0
  419. tomwer/gui/utils/qt_utils.py +9 -0
  420. tomwer/gui/utils/sandboxes.py +1 -26
  421. tomwer/gui/utils/scandescription.py +2 -31
  422. tomwer/gui/utils/scrollarea.py +6 -55
  423. tomwer/gui/utils/slider.py +4 -28
  424. tomwer/gui/utils/splashscreen.py +0 -28
  425. tomwer/gui/utils/step.py +14 -13
  426. tomwer/gui/utils/tests/test_completer.py +41 -0
  427. tomwer/gui/utils/tests/test_line_selector.py +21 -0
  428. tomwer/gui/utils/tests/test_splashscreen.py +8 -0
  429. tomwer/gui/utils/tests/test_vignettes.py +68 -0
  430. tomwer/gui/utils/unitsystem.py +15 -69
  431. tomwer/gui/utils/utils.py +4 -5
  432. tomwer/gui/utils/vignettes.py +10 -41
  433. tomwer/gui/utils/waiterthread.py +0 -26
  434. tomwer/gui/visualization/__init__.py +2 -0
  435. tomwer/gui/visualization/dataviewer.py +68 -421
  436. tomwer/gui/visualization/diffviewer/diffviewer.py +2 -30
  437. tomwer/gui/visualization/diffviewer/shiftwidget.py +4 -29
  438. tomwer/gui/visualization/fullscreenplot.py +5 -5
  439. tomwer/gui/visualization/imagestack.py +403 -0
  440. tomwer/gui/visualization/nxtomometadata.py +0 -4
  441. tomwer/gui/visualization/reconstructionparameters.py +14 -32
  442. tomwer/gui/visualization/scanoverview.py +33 -66
  443. tomwer/gui/visualization/sinogramviewer.py +2 -28
  444. tomwer/gui/visualization/test/__init__.py +0 -28
  445. tomwer/gui/visualization/test/test_dataviewer.py +1 -28
  446. tomwer/gui/visualization/test/test_diffviewer.py +1 -28
  447. tomwer/gui/visualization/test/test_nx_tomo_metadata_viewer.py +0 -5
  448. tomwer/gui/visualization/test/test_reconstruction_parameters.py +1 -27
  449. tomwer/gui/visualization/test/test_sinogramviewer.py +1 -28
  450. tomwer/gui/visualization/test/test_stacks.py +184 -115
  451. tomwer/gui/visualization/test/test_volumeviewer.py +3 -2
  452. tomwer/gui/visualization/tomoobjoverview.py +2 -2
  453. tomwer/gui/visualization/volumeoverview.py +3 -2
  454. tomwer/gui/visualization/volumeviewer.py +47 -43
  455. tomwer/io/__init__.py +2 -0
  456. tomwer/io/utils/h5pyutils.py +1 -27
  457. tomwer/io/utils/test/test_raw_and_processed_data.py +10 -0
  458. tomwer/io/utils/test/test_utils.py +67 -0
  459. tomwer/io/utils/utils.py +2 -31
  460. tomwer/resources/__init__.py +13 -33
  461. tomwer/resources/gui/icons/edit_downstream.svg +114 -0
  462. tomwer/resources/gui/icons/edit_upstream.svg +112 -0
  463. tomwer/resources/gui/icons/free_edition.svg +23 -0
  464. tomwer/resources/gui/icons/icat_gallery_opts.png +0 -0
  465. tomwer/resources/gui/icons/icat_gallery_opts.svg +80 -0
  466. tomwer/resources/gui/icons/search.png +0 -0
  467. tomwer/resources/gui/icons/search.svg +23 -0
  468. tomwer/resources/gui/icons/warning.png +0 -0
  469. tomwer/synctools/__init__.py +2 -0
  470. tomwer/synctools/axis.py +1 -27
  471. tomwer/synctools/darkref.py +1 -26
  472. tomwer/synctools/datalistener.py +1 -27
  473. tomwer/synctools/datatransfert.py +2 -27
  474. tomwer/synctools/imageloaderthread.py +1 -28
  475. tomwer/synctools/rsyncmanager.py +1 -25
  476. tomwer/synctools/saaxis.py +1 -26
  477. tomwer/synctools/sadeltabeta.py +1 -26
  478. tomwer/synctools/stacks/control/datalistener.py +1 -26
  479. tomwer/synctools/stacks/processingstack.py +4 -33
  480. tomwer/synctools/stacks/reconstruction/axis.py +2 -31
  481. tomwer/synctools/stacks/reconstruction/castvolume.py +12 -43
  482. tomwer/synctools/stacks/reconstruction/dkrefcopy.py +3 -26
  483. tomwer/synctools/stacks/reconstruction/nabu.py +1 -26
  484. tomwer/synctools/stacks/reconstruction/normalization.py +1 -26
  485. tomwer/synctools/stacks/reconstruction/saaxis.py +1 -26
  486. tomwer/synctools/stacks/reconstruction/sadeltabeta.py +1 -26
  487. tomwer/synctools/tests/__init__.py +0 -0
  488. tomwer/synctools/{test → tests}/test_darkRefs.py +16 -40
  489. tomwer/synctools/{test → tests}/test_foldertransfer.py +2 -33
  490. tomwer/synctools/utils/scanstages.py +2 -31
  491. tomwer/tests/__init__.py +1 -0
  492. tomwer/tests/app/test_stitching.py +95 -0
  493. tomwer/tests/datasets.py +1 -5
  494. tomwer/tests/orangecontrib/tomwer/widgets/cluster/tests/test_future_supervisorow.py +48 -0
  495. tomwer/tests/orangecontrib/tomwer/widgets/cluster/tests/test_slurm_clusterow.py +40 -0
  496. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_advancement.py +8 -0
  497. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_data_validator.py +55 -0
  498. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_datadiscovery.py +129 -0
  499. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_datalistener.py +111 -0
  500. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_dataselector.py +69 -0
  501. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_datawatcher.py +411 -0
  502. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_emailow.py +29 -0
  503. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_notifier.py +24 -0
  504. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_nxtomo_concatenate_ow.py +64 -0
  505. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_nxtomomill.py +133 -0
  506. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_reduce_dark_flat_selector.py +40 -0
  507. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_singletomoobj.py +40 -0
  508. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_timerow.py +25 -0
  509. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_tomoobj_series.py +96 -0
  510. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_volume_selector.py +69 -0
  511. orangecontrib/tomwer/widgets/edit/test/test_image_key_editor.py → tomwer/tests/orangecontrib/tomwer/widgets/debugtools/tests/test_dataset_generator.py +17 -16
  512. tomwer/tests/orangecontrib/tomwer/widgets/debugtools/tests/test_object_inspector.py +36 -0
  513. {orangecontrib/tomwer/widgets/edit/test → tomwer/tests/orangecontrib/tomwer/widgets/edit/tests}/test_dark_flat_patch.py +1 -27
  514. tomwer/tests/orangecontrib/tomwer/widgets/edit/tests/test_image_key_editor.py +30 -0
  515. tomwer/tests/orangecontrib/tomwer/widgets/edit/tests/test_nxtomo_editor.py +138 -0
  516. tomwer/tests/orangecontrib/tomwer/widgets/other/tests/test_pythonscript.py +31 -0
  517. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_axis.py +215 -0
  518. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_cast_volumeow.py +58 -0
  519. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_dark_refs_widget.py +136 -0
  520. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_delta_beta_selector.py +15 -0
  521. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_i_norm.py +200 -0
  522. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_nabu_helical_prepare_weights_double.py +20 -0
  523. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_nabu_volume.py +74 -0
  524. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_nabu_widget.py +107 -0
  525. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_sa_delta_beta.py +194 -0
  526. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_saaxis.py +194 -0
  527. tomwer/tests/orangecontrib/tomwer/widgets/stitching/tests/test_zstitching.py +313 -0
  528. tomwer/tests/orangecontrib/tomwer/widgets/tests/test_conditions.py +85 -0
  529. tomwer/tests/orangecontrib/tomwer/widgets/tests/test_darkref.py +225 -0
  530. tomwer/tests/orangecontrib/tomwer/widgets/tests/test_foldertransfert.py +105 -0
  531. tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_dataviewerow.py +57 -0
  532. tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_diffviewerow.py +39 -0
  533. tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_nxtomo_metadata_viewer.py +29 -0
  534. tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_radio_stackow.py +31 -0
  535. tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_sample_movedow.py +46 -0
  536. tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_sinogram_viewerow.py +31 -0
  537. tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_slice_stackow.py +31 -0
  538. tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_volume_viewerow.py +32 -0
  539. tomwer/tests/test_ewoks/test_conversion.py +104 -0
  540. tomwer/tests/test_ewoks/test_single_node_execution.py +87 -0
  541. tomwer/tests/test_ewoks/test_workflows.py +138 -0
  542. tomwer/utils.py +11 -39
  543. tomwer/version.py +3 -3
  544. {tomwer-1.3.27.dist-info → tomwer-1.4.0rc0.dist-info}/LICENSE +3 -3
  545. tomwer-1.4.0rc0.dist-info/METADATA +337 -0
  546. tomwer-1.4.0rc0.dist-info/RECORD +909 -0
  547. {tomwer-1.3.27.dist-info → tomwer-1.4.0rc0.dist-info}/WHEEL +1 -1
  548. {tomwer-1.3.27.dist-info → tomwer-1.4.0rc0.dist-info}/entry_points.txt +1 -0
  549. orangecontrib/tomwer/widgets/control/DataListOW.py +0 -129
  550. orangecontrib/tomwer/widgets/control/TomoObjSerieOW.py +0 -86
  551. orangecontrib/tomwer/widgets/control/VolumeSymLinkOW.py +0 -182
  552. orangecontrib/tomwer/widgets/edit/test/test_nxtomo_editor.py +0 -141
  553. orangecontrib/tomwer/widgets/icat/PublishProcessedDataOW.py +0 -115
  554. orangecontrib/tomwer/widgets/icat/RawDataScreenshotCreatorOW.py +0 -98
  555. orangecontrib/tomwer/widgets/icat/SaveToGalleryAndPublishOW.py +0 -129
  556. orangecontrib/tomwer/widgets/icat/icons/add_gallery.png +0 -0
  557. orangecontrib/tomwer/widgets/icat/icons/add_gallery.svg +0 -82
  558. orangecontrib/tomwer/widgets/icat/icons/raw_screenshots.png +0 -0
  559. orangecontrib/tomwer/widgets/icat/icons/raw_screenshots.svg +0 -143
  560. orangecontrib/tomwer/widgets/visualization/LivesliceOW.py +0 -87
  561. orangecontrib/tomwer/widgets/visualization/icons/liveslice.png +0 -0
  562. orangecontrib/tomwer/widgets/visualization/icons/liveslice.svg +0 -110
  563. tomwer/core/log/logger.py +0 -130
  564. tomwer/core/process/control/test/test_volume_link.py +0 -74
  565. tomwer/core/process/control/tomoobjserie.py +0 -12
  566. tomwer/core/process/control/volumesymlink.py +0 -200
  567. tomwer/core/process/icat/createscreenshots.py +0 -100
  568. tomwer/core/process/icat/gallery.py +0 -377
  569. tomwer/core/process/icat/icatbase.py +0 -36
  570. tomwer/core/process/icat/publish.py +0 -228
  571. tomwer/core/process/icat/screenshots.py +0 -27
  572. tomwer/core/process/reconstruction/test/test_darkref.py +0 -60
  573. tomwer/core/process/reconstruction/test/test_sadeltabeta.py +0 -74
  574. tomwer/core/process/visualization/liveslice.py +0 -6
  575. tomwer/core/progress.py +0 -100
  576. tomwer/core/scan/test/test_edf.py +0 -53
  577. tomwer/core/scan/test/test_future_scan.py +0 -61
  578. tomwer/core/scan/test/test_h5.py +0 -96
  579. tomwer/core/test/test_scanutils.py +0 -53
  580. tomwer/gui/control/emailnotifier.py +0 -174
  581. tomwer/gui/control/serie/seriewaiter.py +0 -28
  582. tomwer/gui/control/test/__init__.py +0 -28
  583. tomwer/gui/control/test/test_datalist.py +0 -96
  584. tomwer/gui/control/test/test_datavalidator.py +0 -54
  585. tomwer/gui/control/test/test_email.py +0 -35
  586. tomwer/gui/control/test/test_process_manager.py +0 -65
  587. tomwer/gui/control/test/test_scanselector.py +0 -67
  588. tomwer/gui/edit/test/__init__.py +0 -28
  589. tomwer/gui/icat/gallery.py +0 -214
  590. tomwer/gui/icat/publish.py +0 -187
  591. tomwer/gui/reconstruction/axis/axis.py +0 -733
  592. tomwer/gui/reconstruction/axis/radioaxis.py +0 -2467
  593. tomwer/gui/stitching/stitching.py +0 -1388
  594. tomwer/gui/test/__init__.py +0 -28
  595. tomwer/gui/test/test_axis_gui.py +0 -34
  596. tomwer/synctools/stacks/edit/darkflatpatch.py +0 -169
  597. tomwer/synctools/stacks/edit/imagekeyeditor.py +0 -135
  598. tomwer/third_part/WaitingOverlay.py +0 -110
  599. tomwer-1.3.27-py3.11-nspkg.pth +0 -1
  600. tomwer-1.3.27.dist-info/METADATA +0 -292
  601. tomwer-1.3.27.dist-info/RECORD +0 -785
  602. tomwer-1.3.27.dist-info/namespace_packages.txt +0 -1
  603. /orangecontrib/tomwer/{widgets/edit/test → tests}/__init__.py +0 -0
  604. {tomwer/core/process/control/test → orangecontrib/tomwer/tutorials/id16b}/__init__.py +0 -0
  605. {tomwer/core/process/icat → orangecontrib/tomwer/widgets/cluster/tests}/__init__.py +0 -0
  606. /orangecontrib/tomwer/widgets/control/icons/{tomoobjserie.png → tomoobjseries.png} +0 -0
  607. {tomwer/core/process/reconstruction/test → orangecontrib/tomwer/widgets/control/tests}/__init__.py +0 -0
  608. /orangecontrib/tomwer/widgets/{icat → dataportal}/icons/publish_processed_data.png +0 -0
  609. /orangecontrib/tomwer/widgets/{icat → dataportal}/icons/publish_processed_data.svg +0 -0
  610. {tomwer/core/process/test → orangecontrib/tomwer/widgets/debugtools/tests}/__init__.py +0 -0
  611. {tomwer/core/scan/test → orangecontrib/tomwer/widgets/edit/tests}/__init__.py +0 -0
  612. {tomwer/core/test → orangecontrib/tomwer/widgets/other/tests}/__init__.py +0 -0
  613. {tomwer/gui/cluster/test → orangecontrib/tomwer/widgets/reconstruction/tests}/__init__.py +0 -0
  614. {tomwer/gui/control/serie → orangecontrib/tomwer/widgets/stitching/tests}/__init__.py +0 -0
  615. {tomwer/gui/icat → orangecontrib/tomwer/widgets/tests}/__init__.py +0 -0
  616. {tomwer/gui/reconstruction/test → orangecontrib/tomwer/widgets/visualization/tests}/__init__.py +0 -0
  617. /tomwer/{synctools/stacks/edit → app/stitching}/__init__.py +0 -0
  618. /tomwer/{synctools/test → core/process/control/tests}/__init__.py +0 -0
  619. /tomwer/core/process/control/{test → tests}/test_email.py +0 -0
  620. /tomwer/core/process/control/{test → tests}/test_h52nx_process.py +0 -0
  621. /tomwer/{third_part → core/process/drac}/__init__.py +0 -0
  622. /tomwer/core/process/reconstruction/{test → tests}/test_axis_params.py +0 -0
  623. /tomwer/core/process/reconstruction/{test → tests}/test_darkref_copy.py +0 -0
  624. /tomwer/core/process/reconstruction/{test → tests}/test_paramsbase.py +0 -0
  625. /tomwer/core/process/reconstruction/{test → tests}/test_utils.py +0 -0
  626. /tomwer/core/scan/{test → tests}/test_scan.py +0 -0
  627. /tomwer/gui/control/{serie → series}/nxtomoconcatenate.py +0 -0
  628. /tomwer/gui/control/{test → tests}/test_datadiscovery.py +0 -0
  629. /tomwer/gui/control/{test → tests}/test_reducedarkflat_selector.py +0 -0
  630. /tomwer/gui/control/{test → tests}/test_single_tomo_obj.py +0 -0
  631. {orangecontrib/tomwer/widgets/edit/test → tomwer/tests/orangecontrib/tomwer/widgets/edit/tests}/test_image_key_upgrader.py +0 -0
  632. {tomwer-1.3.27.dist-info → tomwer-1.4.0rc0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,138 @@
1
+ import os
2
+ import pickle
3
+
4
+ import numpy
5
+ import pytest
6
+ from nxtomomill.nexus.nxtomo import NXtomo
7
+ from orangecanvas.scheme.readwrite import literal_dumps
8
+ from silx.gui.utils.testutils import SignalListener
9
+ from nxtomo.nxobject.nxdetector import ImageKey
10
+
11
+ from orangecontrib.tomwer.widgets.edit.NXtomoEditorOW import NXtomoEditorOW
12
+ from tomwer.core.process.edit.nxtomoeditor import NXtomoEditorKeys
13
+ from tomwer.core.scan.nxtomoscan import NXtomoScan
14
+ from tomwer.tests.utils import skip_gui_test
15
+ from tomwer.gui.utils.qt_utils import QSignalSpy
16
+ from tomwer.tests.conftest import qtapp # noqa F401
17
+
18
+
19
+ def getDefaultConfig() -> dict:
20
+ """return the configuration of the NXtomo editor. First value is the value of the field, second is: is the associated lock button locked or not"""
21
+ return {
22
+ NXtomoEditorKeys.ENERGY: (5.9, False),
23
+ NXtomoEditorKeys.SAMPLE_DETECTOR_DISTANCE: (2.4, True),
24
+ NXtomoEditorKeys.FIELD_OF_VIEW: ("Full", False),
25
+ NXtomoEditorKeys.X_PIXEL_SIZE: (0.023, True),
26
+ NXtomoEditorKeys.Y_PIXEL_SIZE: (0.025, True),
27
+ NXtomoEditorKeys.X_FLIPPED: (True, True),
28
+ NXtomoEditorKeys.Y_FLIPPED: (False, False),
29
+ NXtomoEditorKeys.X_TRANSLATION: (0.0,),
30
+ NXtomoEditorKeys.Z_TRANSLATION: (0.0,),
31
+ }
32
+
33
+
34
+ @pytest.mark.skipif(skip_gui_test(), reason="skip gui test")
35
+ def test_NXtomoEditorOW(
36
+ qtapp, # noqa F811
37
+ tmp_path,
38
+ ):
39
+ window = NXtomoEditorOW()
40
+ # test serialization
41
+ window.setConfiguration(getDefaultConfig())
42
+ assert window.getConfiguration() == getDefaultConfig()
43
+ pickle.dumps(window.getConfiguration())
44
+
45
+ # test literal dumps
46
+ literal_dumps(window.getConfiguration())
47
+
48
+ # test widget automation
49
+ signal_listener = SignalListener()
50
+ window.sigScanReady.connect(signal_listener)
51
+ # set up the widget to define and lock distance, energy and x pixel size
52
+ distance_widget = window.widget.mainWidget._distanceMetricEntry
53
+ distance_widget.setValue(0.6)
54
+ distance_widget.setUnit("mm")
55
+ distance_locker = window.widget.mainWidget._distanceLB
56
+ distance_locker.setLock(True)
57
+ energy_widget = window.widget.mainWidget._energyEntry
58
+ energy_widget.setValue(88.058)
59
+ energy_locker = window.widget.mainWidget._energyLockerLB
60
+ energy_locker.setLock(True)
61
+ x_pixel_widget = window.widget.mainWidget._xPixelSizeMetricEntry
62
+ x_pixel_widget.setValue(45)
63
+ x_pixel_widget.setUnit("nm")
64
+ x_pixel_locker = window.widget.mainWidget._xPixelSizeLB
65
+ x_pixel_locker.setLock(True)
66
+
67
+ # 1.0 create nx tomos with raw data
68
+ nx_tomo = NXtomo()
69
+ nx_tomo.instrument.detector.x_pixel_size = (
70
+ 0.023 # should be overwrite by the configuration / lock buttons
71
+ )
72
+ nx_tomo.instrument.detector.y_pixel_size = (
73
+ 0.025 # should be overwrite by the configuration / lock buttons
74
+ )
75
+ nx_tomo.instrument.detector.field_of_view = "full"
76
+ nx_tomo.instrument.detector.distance = (
77
+ 2.4 # should be overwrite by the configuration / lock buttons
78
+ )
79
+ nx_tomo.instrument.detector.x_flipped = (
80
+ False # should be overwrite by the configuration / lock buttons
81
+ )
82
+ nx_tomo.instrument.detector.y_flipped = True
83
+ nx_tomo.energy = 5.9
84
+ nx_tomo.instrument.detector.image_key_control = [ImageKey.PROJECTION.value] * 12
85
+ nx_tomo.instrument.detector.data = numpy.empty(shape=(12, 10, 10))
86
+ nx_tomo.sample.rotation_angle = numpy.linspace(0, 20, num=12)
87
+
88
+ file_path = os.path.join(tmp_path, "nxtomo.nx")
89
+ entry = "entry0000"
90
+ nx_tomo.save(
91
+ file_path=file_path,
92
+ data_path=entry,
93
+ )
94
+ # 2.0 set scan to the nxtomo-editor
95
+ scan = NXtomoScan(file_path, entry)
96
+ waiter = QSignalSpy(window.sigScanReady)
97
+ window.setScan(scan=scan)
98
+ # warning: avoid executing the ewoks task as this will be done
99
+ # automatically (has some field lock). This would create concurrency task
100
+ # and could bring some HDF5 concurrency error
101
+ waiter.wait(5000)
102
+ # 3.0 check results are as expected
103
+ # make sure the scan has been re-emitted
104
+ assert signal_listener.callCount() == 1
105
+ # make sure the edition of the parameters have been done and only those
106
+ overwrite_nx_tomo = NXtomo().load(
107
+ file_path=file_path,
108
+ data_path=entry,
109
+ detector_data_as="as_numpy_array",
110
+ )
111
+ numpy.testing.assert_almost_equal(
112
+ overwrite_nx_tomo.instrument.detector.x_pixel_size.si_value, 45e-9
113
+ )
114
+ assert (
115
+ overwrite_nx_tomo.instrument.detector.y_pixel_size.si_value
116
+ == nx_tomo.instrument.detector.y_pixel_size.si_value
117
+ )
118
+ assert (
119
+ overwrite_nx_tomo.instrument.detector.field_of_view
120
+ == nx_tomo.instrument.detector.field_of_view
121
+ )
122
+ numpy.testing.assert_almost_equal(
123
+ overwrite_nx_tomo.instrument.detector.distance.value, 6.0e-4
124
+ )
125
+ assert (
126
+ overwrite_nx_tomo.instrument.detector.x_flipped
127
+ == True # is lock to True so should load the value and overwrite it
128
+ )
129
+
130
+ assert (
131
+ overwrite_nx_tomo.instrument.detector.y_flipped
132
+ == True # is not locked and is initially set to False (should load it and ignore overwriting)
133
+ )
134
+ numpy.testing.assert_almost_equal(overwrite_nx_tomo.energy.value, 88.058)
135
+ numpy.testing.assert_array_almost_equal(
136
+ overwrite_nx_tomo.instrument.detector.data,
137
+ nx_tomo.instrument.detector.data,
138
+ )
@@ -0,0 +1,31 @@
1
+ import gc
2
+ import logging
3
+
4
+ from silx.gui import qt
5
+ from silx.gui.utils.testutils import TestCaseQt
6
+
7
+ from orangecontrib.tomwer.widgets.other.PythonScriptOW import OWPythonScript
8
+ from tomwer.core.scan.nxtomoscan import NXtomoScan
9
+ from tomwer.core.volume.hdf5volume import HDF5Volume
10
+
11
+ logging.disable(logging.INFO)
12
+
13
+
14
+ class TestEDFDarkRefWidget(TestCaseQt):
15
+ def setUp(self):
16
+ TestCaseQt.setUp(self)
17
+ self.widget = OWPythonScript()
18
+ self._scan = NXtomoScan("my_file.hdf5", entry="entry0000")
19
+ self._volume = HDF5Volume(file_path="my_volume.hdf5", data_path="volume")
20
+
21
+ def tearDown(self):
22
+ self.widget.setAttribute(qt.Qt.WA_DeleteOnClose)
23
+ self.widget.close()
24
+ self.widget = None
25
+ gc.collect()
26
+
27
+ def test_handle_data(self):
28
+ self.widget.handle_input(self._scan, (1,), "data")
29
+
30
+ def test_handle_volume(self):
31
+ self.widget.handle_input(self._volume, (1,), "volume")
@@ -0,0 +1,215 @@
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 testUnlockStack(self):
183
+ """Check that all axis position will be computed properly if we set a
184
+ stack of scan"""
185
+ self._mainWindow.recons_params.set_relative_value(1.0)
186
+ for scan in (self._scan1, self._scan2, self._scan3):
187
+ self._mainWindow.process(scan)
188
+
189
+ for i in range(5):
190
+ self.qapp.processEvents()
191
+ time.sleep(0.2)
192
+ self.qapp.processEvents()
193
+
194
+ self.assertNotEqual(self._scan1.axis_params, None)
195
+ self.assertNotEqual(self._scan2.axis_params, None)
196
+ self.assertNotEqual(self._scan3.axis_params, None)
197
+
198
+ def testLockStack(self):
199
+ """Check that axis position will be simply copy if we are in a lock
200
+ stack"""
201
+ self.recons_params.mode = AxisMode.manual
202
+ position_value = 0.36
203
+ self.recons_params.set_relative_value(position_value)
204
+
205
+ for scan in (self._scan1, self._scan2, self._scan3):
206
+ self._mainWindow.process(scan)
207
+
208
+ for i in range(5):
209
+ self.qapp.processEvents()
210
+ time.sleep(0.2)
211
+ self.qapp.processEvents()
212
+
213
+ self.assertEqual(self._scan1.axis_params.relative_cor_value, position_value)
214
+ self.assertEqual(self._scan2.axis_params.relative_cor_value, position_value)
215
+ 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())