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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (638) hide show
  1. orangecontrib/tomwer/orange/managedprocess.py +1 -29
  2. orangecontrib/tomwer/orange/settings.py +2 -28
  3. orangecontrib/tomwer/tests/TestAcquisition.py +220 -0
  4. orangecontrib/tomwer/tutorials/append_raw_darks_and_flats_frames_to_NXtomos.ows +2 -2
  5. orangecontrib/tomwer/tutorials/copy_reduced_darks_and_flats_meth1.ows +1 -1
  6. orangecontrib/tomwer/tutorials/{icat_publication.ows → drac_publication.ows} +7 -21
  7. orangecontrib/tomwer/tutorials/id16b/ID16b_full_volume.ows +22 -0
  8. orangecontrib/tomwer/tutorials/id16b/ID16b_insitu.ows +302 -0
  9. orangecontrib/tomwer/tutorials/id16b/ID16b_normalization.ows +218 -0
  10. orangecontrib/tomwer/tutorials/simple_volume_to_slurm_reconstruction.ows +29 -24
  11. orangecontrib/tomwer/tutorials/test_cor.ows +19 -0
  12. orangecontrib/tomwer/tutorials/volume_casting_on_slurm.ows +54 -0
  13. orangecontrib/tomwer/widgets/__init__.py +3 -5
  14. orangecontrib/tomwer/widgets/cluster/FutureSupervisorOW.py +35 -54
  15. orangecontrib/tomwer/widgets/cluster/SlurmClusterOW.py +1 -31
  16. orangecontrib/tomwer/widgets/control/AdvancementOW.py +1 -29
  17. orangecontrib/tomwer/widgets/control/DataDiscoveryOW.py +5 -4
  18. orangecontrib/tomwer/widgets/control/DataListenerOW.py +1 -29
  19. orangecontrib/tomwer/widgets/control/DataSelectorOW.py +11 -30
  20. orangecontrib/tomwer/widgets/control/DataTransfertOW.py +2 -28
  21. orangecontrib/tomwer/widgets/control/DataValidatorOW.py +1 -28
  22. orangecontrib/tomwer/widgets/control/DataWatcherOW.py +1 -28
  23. orangecontrib/tomwer/widgets/control/EDF2NXTomomillOW.py +48 -51
  24. orangecontrib/tomwer/widgets/control/EmailOW.py +12 -2
  25. orangecontrib/tomwer/widgets/control/FilterOW.py +1 -28
  26. orangecontrib/tomwer/widgets/control/NXTomomillOW.py +37 -53
  27. orangecontrib/tomwer/widgets/control/NXtomoConcatenate.py +21 -20
  28. orangecontrib/tomwer/widgets/control/NotifierOW.py +9 -28
  29. orangecontrib/tomwer/widgets/control/ReduceDarkFlatSelectorOW.py +3 -2
  30. orangecontrib/tomwer/widgets/control/SingleTomoObjOW.py +1 -27
  31. orangecontrib/tomwer/widgets/control/TimerOW.py +9 -28
  32. orangecontrib/tomwer/widgets/control/TomoObjSeriesOW.py +58 -0
  33. orangecontrib/tomwer/widgets/control/VolumeSelector.py +8 -30
  34. orangecontrib/tomwer/widgets/control/icons/nxtomomill.svg +173 -119
  35. orangecontrib/tomwer/widgets/control/icons/reduced_darkflat_selector.png +0 -0
  36. orangecontrib/tomwer/widgets/control/icons/reduced_darkflat_selector.svg +55 -195
  37. orangecontrib/tomwer/widgets/control/icons/{tomoobjserie.svg → tomoobjseries.svg} +2 -2
  38. orangecontrib/tomwer/widgets/dataportal/PublishProcessedDataOW.py +172 -0
  39. orangecontrib/tomwer/widgets/{icat → dataportal}/__init__.py +2 -2
  40. orangecontrib/tomwer/widgets/debugtools/DatasetGeneratorOW.py +2 -29
  41. orangecontrib/tomwer/widgets/debugtools/ObjectInspectorOW.py +1 -29
  42. orangecontrib/tomwer/widgets/edit/DarkFlatPatchOW.py +48 -73
  43. orangecontrib/tomwer/widgets/edit/ImageKeyEditorOW.py +48 -75
  44. orangecontrib/tomwer/widgets/edit/ImageKeyUpgraderOW.py +5 -30
  45. orangecontrib/tomwer/widgets/edit/NXtomoEditorOW.py +51 -52
  46. orangecontrib/tomwer/widgets/other/PythonScriptOW.py +22 -10
  47. orangecontrib/tomwer/widgets/reconstruction/AxisOW.py +51 -60
  48. orangecontrib/tomwer/widgets/reconstruction/CastNabuVolumeOW.py +22 -68
  49. orangecontrib/tomwer/widgets/reconstruction/DarkRefAndCopyOW.py +3 -30
  50. orangecontrib/tomwer/widgets/reconstruction/NabuHelicalPrepareWeightsDoubleOW.py +21 -19
  51. orangecontrib/tomwer/widgets/reconstruction/NabuOW.py +7 -70
  52. orangecontrib/tomwer/widgets/reconstruction/NabuVolumeOW.py +41 -84
  53. orangecontrib/tomwer/widgets/reconstruction/SAAxisOW.py +15 -40
  54. orangecontrib/tomwer/widgets/reconstruction/SADeltaBetaOW.py +13 -35
  55. orangecontrib/tomwer/widgets/reconstruction/SinoNormOW.py +2 -30
  56. orangecontrib/tomwer/widgets/stitching/ZStitchingConfigOW.py +11 -11
  57. orangecontrib/tomwer/widgets/utils.py +2 -29
  58. orangecontrib/tomwer/widgets/visualization/DataViewerOW.py +1 -27
  59. orangecontrib/tomwer/widgets/visualization/DiffViewerOW.py +1 -27
  60. orangecontrib/tomwer/widgets/visualization/NXtomoMetadataViewerOW.py +1 -1
  61. orangecontrib/tomwer/widgets/visualization/RadioStackOW.py +2 -28
  62. orangecontrib/tomwer/widgets/visualization/SampleMovedOW.py +1 -27
  63. orangecontrib/tomwer/widgets/visualization/SinogramViewerOW.py +1 -27
  64. orangecontrib/tomwer/widgets/visualization/SliceStackOW.py +2 -28
  65. tomwer/__init__.py +3 -28
  66. tomwer/__main__.py +8 -4
  67. tomwer/app/__init__.py +2 -0
  68. tomwer/app/axis.py +8 -10
  69. tomwer/app/canvas.py +23 -29
  70. tomwer/app/canvas_launcher/config.py +14 -102
  71. tomwer/app/canvas_launcher/environ.py +5 -8
  72. tomwer/app/canvas_launcher/mainwindow.py +175 -69
  73. tomwer/app/canvas_launcher/splash.py +1 -3
  74. tomwer/app/canvas_launcher/utils.py +47 -0
  75. tomwer/app/canvas_launcher/widgetsscheme.py +3 -10
  76. tomwer/app/diffframe.py +2 -0
  77. tomwer/app/imagekeyeditor.py +2 -1
  78. tomwer/app/imagekeyupgrader.py +2 -0
  79. tomwer/app/multicor.py +5 -2
  80. tomwer/app/multipag.py +16 -5
  81. tomwer/app/nabuapp.py +2 -1
  82. tomwer/app/nxtomoeditor.py +17 -12
  83. tomwer/app/patchrawdarkflat.py +2 -0
  84. tomwer/app/radiostack.py +3 -2
  85. tomwer/app/reducedarkflat.py +3 -0
  86. tomwer/app/samplemoved.py +2 -0
  87. tomwer/app/scanviewer.py +2 -0
  88. tomwer/app/sinogramviewer.py +2 -0
  89. tomwer/app/slicestack.py +11 -13
  90. tomwer/app/stitching/common.py +431 -0
  91. tomwer/app/stopdatalistener.py +3 -0
  92. tomwer/app/ystitching.py +26 -0
  93. tomwer/app/zstitching.py +8 -363
  94. tomwer/core/__init__.py +2 -28
  95. tomwer/core/cluster/__init__.py +3 -0
  96. tomwer/core/cluster/cluster.py +10 -26
  97. tomwer/core/futureobject.py +17 -43
  98. tomwer/core/log/__init__.py +2 -0
  99. tomwer/core/log/processlog.py +0 -28
  100. tomwer/core/process/cluster/supervisor.py +52 -34
  101. tomwer/core/process/conditions/filters.py +3 -28
  102. tomwer/core/process/control/datalistener/datalistener.py +7 -75
  103. tomwer/core/process/control/datalistener/rpcserver.py +8 -38
  104. tomwer/core/process/control/datawatcher/datawatcher.py +11 -40
  105. tomwer/core/process/control/datawatcher/datawatcherobserver.py +30 -64
  106. tomwer/core/process/control/datawatcher/datawatcherprocess.py +11 -32
  107. tomwer/core/process/control/datawatcher/edfdwprocess.py +2 -27
  108. tomwer/core/process/control/datawatcher/hdf5dwprocess.py +1 -26
  109. tomwer/core/process/control/datawatcher/status.py +1 -26
  110. tomwer/core/process/control/emailnotifier.py +11 -23
  111. tomwer/core/process/control/nxtomoconcatenate.py +20 -18
  112. tomwer/core/process/control/nxtomomill.py +9 -44
  113. tomwer/core/process/control/scanlist.py +0 -27
  114. tomwer/core/process/control/scantransfer.py +15 -13
  115. tomwer/core/process/control/scanvalidator.py +4 -30
  116. tomwer/core/process/control/{test → tests}/test_concatenate_nxtomos.py +5 -5
  117. tomwer/core/process/control/timer.py +1 -27
  118. tomwer/core/process/control/tomoobjseries.py +12 -0
  119. tomwer/core/process/drac/binning.py +37 -0
  120. tomwer/core/process/drac/dracbase.py +170 -0
  121. tomwer/core/process/drac/gallery.py +109 -0
  122. tomwer/core/process/drac/output.py +12 -0
  123. tomwer/core/process/drac/processeddataset.py +147 -0
  124. tomwer/core/process/drac/publish.py +118 -0
  125. tomwer/core/process/drac/rawdataset.py +142 -0
  126. tomwer/core/process/drac/tests/test_gallery.py +71 -0
  127. tomwer/core/process/drac/tests/test_icat_processed_dataset.py +80 -0
  128. tomwer/core/process/drac/tests/test_icat_raw_dataset.py +90 -0
  129. tomwer/core/process/edit/darkflatpatch.py +1 -28
  130. tomwer/core/process/edit/imagekeyeditor.py +4 -32
  131. tomwer/core/process/edit/nxtomoeditor.py +307 -0
  132. tomwer/core/process/edit/tests/test_darkflatpatch.py +243 -0
  133. tomwer/core/process/edit/tests/test_imagekey_editor.py +99 -0
  134. tomwer/core/process/output.py +9 -2
  135. tomwer/core/process/reconstruction/__init__.py +0 -26
  136. tomwer/core/process/reconstruction/axis/anglemode.py +1 -29
  137. tomwer/core/process/reconstruction/axis/axis.py +47 -804
  138. tomwer/core/process/reconstruction/axis/mode.py +89 -25
  139. tomwer/core/process/reconstruction/axis/params.py +131 -283
  140. tomwer/core/process/reconstruction/axis/projectiontype.py +0 -28
  141. tomwer/core/process/reconstruction/axis/side.py +8 -0
  142. tomwer/core/process/reconstruction/darkref/darkrefs.py +14 -39
  143. tomwer/core/process/reconstruction/darkref/darkrefscopy.py +7 -39
  144. tomwer/core/process/reconstruction/darkref/params.py +1 -28
  145. tomwer/core/process/reconstruction/nabu/castvolume.py +19 -34
  146. tomwer/core/process/reconstruction/nabu/nabucommon.py +18 -43
  147. tomwer/core/process/reconstruction/nabu/nabuscores.py +64 -68
  148. tomwer/core/process/reconstruction/nabu/nabuslices.py +63 -105
  149. tomwer/core/process/reconstruction/nabu/nabuvolume.py +44 -70
  150. tomwer/core/process/reconstruction/nabu/plane.py +10 -0
  151. tomwer/core/process/reconstruction/nabu/settings.py +1 -28
  152. tomwer/core/process/reconstruction/nabu/target.py +0 -28
  153. tomwer/core/process/reconstruction/nabu/test/test_castvolume.py +116 -0
  154. tomwer/core/process/reconstruction/nabu/test/test_nabu_utils.py +277 -0
  155. tomwer/core/process/reconstruction/nabu/test/test_nabunormalization.py +199 -0
  156. tomwer/core/process/reconstruction/nabu/utils.py +11 -60
  157. tomwer/core/process/reconstruction/normalization/normalization.py +2 -32
  158. tomwer/core/process/reconstruction/normalization/params.py +3 -35
  159. tomwer/core/process/reconstruction/output.py +14 -19
  160. tomwer/core/process/reconstruction/paramsbase.py +4 -33
  161. tomwer/core/process/reconstruction/saaxis/params.py +5 -33
  162. tomwer/core/process/reconstruction/saaxis/saaxis.py +22 -51
  163. tomwer/core/process/reconstruction/sadeltabeta/params.py +2 -31
  164. tomwer/core/process/reconstruction/sadeltabeta/sadeltabeta.py +18 -46
  165. tomwer/core/process/reconstruction/scores/params.py +9 -39
  166. tomwer/core/process/reconstruction/scores/scores.py +10 -42
  167. tomwer/core/process/reconstruction/tests/__init__.py +0 -0
  168. tomwer/core/process/reconstruction/tests/test_axis.py +46 -0
  169. tomwer/core/process/reconstruction/tests/test_darkref.py +33 -0
  170. tomwer/core/process/reconstruction/{test → tests}/test_saaxis.py +1 -27
  171. tomwer/core/process/reconstruction/tests/test_sadeltabeta.py +48 -0
  172. tomwer/core/process/reconstruction/{test → tests}/test_utils.py +4 -4
  173. tomwer/core/process/reconstruction/utils/cor.py +8 -4
  174. tomwer/core/process/script/python.py +1 -27
  175. tomwer/core/process/script/tests/test_script.py +41 -0
  176. tomwer/core/process/stitching/metadataholder.py +5 -4
  177. tomwer/core/process/stitching/nabustitcher.py +35 -5
  178. tomwer/core/process/stitching/tests/test_metadataholder.py +17 -0
  179. tomwer/core/process/task.py +20 -63
  180. tomwer/core/process/tests/__init__.py +0 -0
  181. tomwer/core/process/{test → tests}/test_conditions.py +1 -28
  182. tomwer/core/process/{test → tests}/test_dark_and_flat.py +1 -27
  183. tomwer/core/process/{test → tests}/test_data_listener.py +1 -27
  184. tomwer/core/process/{test → tests}/test_data_transfer.py +2 -28
  185. tomwer/core/process/{test → tests}/test_data_watcher.py +1 -27
  186. tomwer/core/process/{test → tests}/test_nabu.py +2 -33
  187. tomwer/core/process/{test → tests}/test_normalization.py +1 -26
  188. tomwer/core/process/{test → tests}/test_timer.py +1 -27
  189. tomwer/core/process/utils.py +2 -31
  190. tomwer/core/process/visualization/dataviewer.py +1 -26
  191. tomwer/core/process/visualization/diffviewer.py +1 -26
  192. tomwer/core/process/visualization/imagestackviewer.py +0 -26
  193. tomwer/core/process/visualization/radiostack.py +0 -26
  194. tomwer/core/process/visualization/samplemoved.py +0 -28
  195. tomwer/core/process/visualization/sinogramviewer.py +0 -27
  196. tomwer/core/process/visualization/slicestack.py +0 -28
  197. tomwer/core/process/visualization/tests/test_data_viewer.py +12 -0
  198. tomwer/core/process/visualization/tests/test_diff_viewer.py +12 -0
  199. tomwer/core/process/visualization/tests/test_image_stack_viewer.py +14 -0
  200. tomwer/core/process/visualization/tests/test_radio_stack.py +12 -0
  201. tomwer/core/process/visualization/tests/test_sample_moved.py +14 -0
  202. tomwer/core/process/visualization/tests/test_sinogram_viewer.py +13 -0
  203. tomwer/core/process/visualization/tests/test_slice_stack.py +13 -0
  204. tomwer/core/process/visualization/tests/test_volume_viewer.py +12 -0
  205. tomwer/core/process/visualization/volumeviewer.py +0 -29
  206. tomwer/core/scan/__init__.py +3 -27
  207. tomwer/core/scan/blissscan.py +5 -34
  208. tomwer/core/scan/edfscan.py +19 -53
  209. tomwer/core/scan/hdf5scan.py +2 -2
  210. tomwer/core/scan/nxtomoscan.py +48 -54
  211. tomwer/core/scan/scanbase.py +107 -203
  212. tomwer/core/scan/scanfactory.py +11 -41
  213. tomwer/core/scan/tests/__init__.py +0 -0
  214. tomwer/core/scan/tests/test_edf.py +25 -0
  215. tomwer/core/scan/tests/test_future_scan.py +35 -0
  216. tomwer/core/scan/tests/test_nxtomoscan.py +143 -0
  217. tomwer/core/scan/tests/test_process_registration.py +64 -0
  218. tomwer/core/settings.py +18 -40
  219. tomwer/core/tests/__init__.py +0 -0
  220. tomwer/core/tests/test_scanutils.py +26 -0
  221. tomwer/core/{test → tests}/test_utils.py +1 -28
  222. tomwer/core/tomwer_object.py +4 -0
  223. tomwer/core/utils/__init__.py +2 -0
  224. tomwer/core/utils/char.py +0 -28
  225. tomwer/core/utils/deprecation.py +12 -38
  226. tomwer/core/utils/dictutils.py +1 -3
  227. tomwer/core/utils/ftseriesutils.py +1 -27
  228. tomwer/core/utils/gpu.py +0 -28
  229. tomwer/core/utils/image.py +8 -39
  230. tomwer/core/utils/locker.py +1 -28
  231. tomwer/core/utils/logconfig.py +0 -27
  232. tomwer/core/utils/normalization.py +4 -31
  233. tomwer/core/utils/nxtomoutils.py +8 -38
  234. tomwer/core/utils/resource.py +0 -26
  235. tomwer/core/utils/scanutils.py +23 -52
  236. tomwer/core/utils/slurm.py +7 -30
  237. tomwer/core/utils/spec.py +6 -6
  238. tomwer/core/utils/tests/__init__.py +0 -0
  239. tomwer/core/utils/tests/test_image.py +30 -0
  240. tomwer/core/utils/tests/test_nxtomo.py +38 -0
  241. tomwer/core/utils/tests/test_scan_utils.py +46 -0
  242. tomwer/core/utils/tests/test_time.py +6 -0
  243. tomwer/core/utils/threads.py +0 -26
  244. tomwer/core/utils/time.py +0 -27
  245. tomwer/core/volume/__init__.py +4 -0
  246. tomwer/core/volume/edfvolume.py +1 -28
  247. tomwer/core/volume/hdf5volume.py +1 -28
  248. tomwer/core/volume/jp2kvolume.py +1 -27
  249. tomwer/core/volume/rawvolume.py +1 -28
  250. tomwer/core/volume/tests/test_volumes.py +21 -0
  251. tomwer/core/volume/tiffvolume.py +1 -28
  252. tomwer/core/volume/volumebase.py +5 -0
  253. tomwer/core/volume/volumefactory.py +7 -33
  254. tomwer/gui/__init__.py +0 -28
  255. tomwer/gui/cluster/__init__.py +2 -0
  256. tomwer/gui/cluster/slurm.py +297 -95
  257. tomwer/gui/cluster/supervisor.py +1 -27
  258. tomwer/gui/cluster/tests/__init__.py +0 -0
  259. tomwer/gui/cluster/{test → tests}/test_cluster.py +21 -26
  260. tomwer/gui/cluster/{test → tests}/test_supervisor.py +1 -27
  261. tomwer/gui/conditions/__init__.py +2 -0
  262. tomwer/gui/conditions/filter.py +1 -26
  263. tomwer/gui/configuration/__init__.py +2 -0
  264. tomwer/gui/control/__init__.py +2 -0
  265. tomwer/gui/control/actions.py +2 -28
  266. tomwer/gui/control/datadiscovery.py +4 -3
  267. tomwer/gui/control/datalist.py +64 -69
  268. tomwer/gui/control/datalistener.py +1 -39
  269. tomwer/gui/control/datareacheractions.py +1 -28
  270. tomwer/gui/control/datatransfert.py +2 -29
  271. tomwer/gui/control/datavalidator.py +3 -37
  272. tomwer/gui/control/datawatcher/__init__.py +0 -28
  273. tomwer/gui/control/datawatcher/configuration.py +1 -28
  274. tomwer/gui/control/datawatcher/datawatcher.py +3 -32
  275. tomwer/gui/control/datawatcher/datawatcherobserver.py +2 -28
  276. tomwer/gui/control/history.py +5 -35
  277. tomwer/gui/control/nxtomomill.py +3 -30
  278. tomwer/gui/control/observations.py +61 -55
  279. tomwer/gui/control/reducedarkflatselector.py +24 -20
  280. tomwer/gui/control/scanselectorwidget.py +2 -28
  281. tomwer/gui/control/selectorwidgetbase.py +17 -17
  282. tomwer/gui/control/series/__init__.py +0 -0
  283. tomwer/gui/control/{serie/seriecreator.py → series/seriescreator.py} +214 -235
  284. tomwer/gui/control/series/serieswaiter.py +0 -0
  285. tomwer/gui/control/series/test/test_creator.py +424 -0
  286. tomwer/gui/control/series/test/test_nxtomo_concatenate.py +21 -0
  287. tomwer/gui/control/singletomoobj.py +1 -1
  288. tomwer/gui/control/tests/__init__.py +0 -0
  289. tomwer/gui/control/tests/test_datalist.py +47 -0
  290. tomwer/gui/control/{test → tests}/test_datalistener.py +1 -28
  291. tomwer/gui/control/tests/test_datavalidator.py +27 -0
  292. tomwer/gui/control/{test → tests}/test_inputwidget.py +1 -27
  293. tomwer/gui/control/tests/test_process_manager.py +38 -0
  294. tomwer/gui/control/tests/test_scan_observations.py +23 -0
  295. tomwer/gui/control/tests/test_scanselector.py +42 -0
  296. tomwer/gui/control/{test → tests}/test_scanvalidator.py +1 -27
  297. tomwer/gui/control/{test → tests}/test_volume_dialog.py +2 -30
  298. tomwer/gui/control/{test → tests}/test_volumeselector.py +1 -27
  299. tomwer/gui/control/volumeselectorwidget.py +2 -30
  300. tomwer/gui/dataportal/__init__.py +2 -0
  301. tomwer/gui/{icat → dataportal}/createscreenshots.py +3 -2
  302. tomwer/gui/dataportal/gallery.py +133 -0
  303. tomwer/gui/dataportal/outputformat.py +0 -0
  304. tomwer/gui/dataportal/publish.py +96 -0
  305. tomwer/gui/dataportal/tests/test_create_screenshots_gui.py +23 -0
  306. tomwer/gui/dataportal/tests/test_gallery_gui.py +21 -0
  307. tomwer/gui/debugtools/__init__.py +2 -0
  308. tomwer/gui/debugtools/datasetgenerator.py +1 -30
  309. tomwer/gui/debugtools/objectinspector.py +1 -29
  310. tomwer/gui/dialog/QDataDialog.py +89 -0
  311. tomwer/gui/{qfolderdialog.py → dialog/QVolumeDialog.py} +8 -107
  312. tomwer/gui/dialog/__init__.py +1 -0
  313. tomwer/gui/edit/__init__.py +2 -0
  314. tomwer/gui/edit/dkrfpatch.py +52 -87
  315. tomwer/gui/edit/imagekeyeditor.py +18 -54
  316. tomwer/gui/edit/nxtomoeditor.py +113 -300
  317. tomwer/gui/edit/nxtomowarmer.py +3 -2
  318. tomwer/gui/edit/tests/__init__.py +0 -0
  319. tomwer/gui/edit/{test → tests}/test_dkrf_patch.py +3 -29
  320. tomwer/gui/edit/{test → tests}/test_image_key_editor.py +1 -27
  321. tomwer/gui/edit/{test → tests}/test_nx_editor.py +45 -23
  322. tomwer/gui/fonts.py +5 -0
  323. tomwer/gui/icons.py +28 -66
  324. tomwer/gui/illustrations.py +4 -34
  325. tomwer/gui/imagefromfile.py +5 -30
  326. tomwer/gui/metadataloader.py +36 -0
  327. tomwer/gui/qconfigfile.py +3 -0
  328. tomwer/gui/qlefilesystem.py +3 -0
  329. tomwer/gui/reconstruction/__init__.py +2 -0
  330. tomwer/gui/reconstruction/axis/AxisMainWindow.py +275 -0
  331. tomwer/gui/reconstruction/axis/AxisOptionsWidget.py +313 -0
  332. tomwer/gui/reconstruction/axis/AxisSettingsWidget.py +797 -0
  333. tomwer/gui/reconstruction/axis/AxisWidget.py +534 -0
  334. tomwer/gui/reconstruction/axis/CalculationWidget.py +218 -0
  335. tomwer/gui/reconstruction/axis/CompareImages.py +11 -44
  336. tomwer/gui/reconstruction/axis/ControlWidget.py +285 -0
  337. tomwer/gui/reconstruction/axis/EstimatedCORWidget.py +394 -0
  338. tomwer/gui/reconstruction/axis/EstimatedCorComboBox.py +118 -0
  339. tomwer/gui/reconstruction/axis/InputWidget.py +347 -0
  340. tomwer/gui/reconstruction/axis/ManualFramesSelection.py +168 -0
  341. tomwer/gui/reconstruction/axis/__init__.py +2 -2
  342. tomwer/gui/reconstruction/darkref/__init__.py +0 -27
  343. tomwer/gui/reconstruction/darkref/darkrefcopywidget.py +5 -34
  344. tomwer/gui/reconstruction/darkref/darkrefwidget.py +1 -27
  345. tomwer/gui/reconstruction/nabu/castvolume.py +40 -59
  346. tomwer/gui/reconstruction/nabu/check.py +7 -33
  347. tomwer/gui/reconstruction/nabu/nabuconfig/base.py +7 -34
  348. tomwer/gui/reconstruction/nabu/nabuconfig/ctf.py +6 -5
  349. tomwer/gui/reconstruction/nabu/nabuconfig/nabuconfig.py +10 -69
  350. tomwer/gui/reconstruction/nabu/nabuconfig/output.py +3 -47
  351. tomwer/gui/reconstruction/nabu/nabuconfig/phase.py +54 -36
  352. tomwer/gui/reconstruction/nabu/nabuconfig/preprocessing.py +103 -54
  353. tomwer/gui/reconstruction/nabu/nabuconfig/reconstruction.py +116 -65
  354. tomwer/gui/reconstruction/nabu/nabuflow.py +31 -61
  355. tomwer/gui/reconstruction/nabu/platform.py +94 -0
  356. tomwer/gui/reconstruction/nabu/slices.py +81 -45
  357. tomwer/gui/reconstruction/nabu/slurm.py +1 -27
  358. tomwer/gui/reconstruction/nabu/test/test_cast_volume.py +82 -0
  359. tomwer/gui/reconstruction/nabu/test/test_check.py +66 -0
  360. tomwer/gui/reconstruction/nabu/test/test_ctf.py +46 -0
  361. tomwer/gui/reconstruction/nabu/test/test_helical.py +21 -0
  362. tomwer/gui/reconstruction/nabu/test/test_nabu_preprocessing.py +81 -0
  363. tomwer/gui/reconstruction/nabu/volume.py +62 -90
  364. tomwer/gui/reconstruction/normalization/intensity.py +5 -32
  365. tomwer/gui/reconstruction/normalization/test/test_intensity.py +89 -0
  366. tomwer/gui/reconstruction/saaxis/corrangeselector.py +32 -56
  367. tomwer/gui/reconstruction/saaxis/dimensionwidget.py +56 -96
  368. tomwer/gui/reconstruction/saaxis/saaxis.py +17 -38
  369. tomwer/gui/reconstruction/saaxis/sliceselector.py +8 -39
  370. tomwer/gui/reconstruction/sadeltabeta/saadeltabeta.py +19 -37
  371. tomwer/gui/reconstruction/scores/control.py +2 -30
  372. tomwer/gui/reconstruction/scores/scoreplot.py +23 -49
  373. tomwer/gui/reconstruction/tests/__init__.py +0 -0
  374. tomwer/gui/reconstruction/{test → tests}/test_axis.py +23 -49
  375. tomwer/gui/reconstruction/{test → tests}/test_nabu.py +16 -31
  376. tomwer/gui/reconstruction/{test → tests}/test_saaxis.py +10 -37
  377. tomwer/gui/reconstruction/{test → tests}/test_sadeltabeta.py +1 -26
  378. tomwer/gui/samplemoved/__init__.py +2 -30
  379. tomwer/gui/samplemoved/selectiontable.py +3 -33
  380. tomwer/gui/settings.py +7 -0
  381. tomwer/gui/stackplot.py +33 -661
  382. tomwer/gui/stacks.py +261 -135
  383. tomwer/gui/stitching/SingleAxisStitchingWidget.py +326 -0
  384. tomwer/gui/stitching/StitchingOptionsWidget.py +438 -0
  385. tomwer/gui/stitching/StitchingWindow.py +586 -0
  386. tomwer/gui/stitching/__init__.py +2 -0
  387. tomwer/gui/stitching/alignment.py +90 -0
  388. tomwer/gui/stitching/axisorderedlist.py +44 -34
  389. tomwer/gui/stitching/config/axisparams.py +25 -11
  390. tomwer/gui/stitching/config/output.py +6 -5
  391. tomwer/gui/stitching/config/positionoveraxis.py +313 -51
  392. tomwer/gui/stitching/config/stitchingstrategies.py +22 -16
  393. tomwer/gui/stitching/config/tests/test_axisparams.py +25 -0
  394. tomwer/gui/stitching/config/tomoobjdetails.py +3 -5
  395. tomwer/gui/stitching/normalization.py +1 -0
  396. tomwer/gui/stitching/preview.py +59 -0
  397. tomwer/gui/stitching/singleaxis.py +57 -0
  398. tomwer/gui/stitching/stitchandbackground.py +3 -2
  399. tomwer/gui/stitching/stitching_preview.py +44 -36
  400. tomwer/gui/stitching/stitching_raw.py +5 -3
  401. tomwer/gui/stitching/tests/test_ZStitchingWindow.py +88 -0
  402. tomwer/gui/stitching/tests/test_axis_ordered_list.py +21 -0
  403. tomwer/gui/stitching/tests/test_normalization.py +27 -0
  404. tomwer/gui/stitching/tests/test_preview.py +68 -0
  405. tomwer/gui/stitching/tests/test_stitching_raw.py +110 -0
  406. tomwer/gui/stitching/tests/utils.py +92 -0
  407. tomwer/gui/stitching/utils.py +14 -0
  408. tomwer/gui/stitching/z_stitching/fineestimation.py +5 -33
  409. tomwer/gui/stitching/z_stitching/tests/test_fine_estimation.py +35 -0
  410. tomwer/gui/stitching/z_stitching/tests/test_raw_estimation.py +215 -0
  411. tomwer/gui/stitching/z_stitching/tests/test_stitching_window.py +51 -0
  412. tomwer/gui/tests/__init__.py +0 -0
  413. tomwer/gui/tests/test_axis_gui.py +43 -0
  414. tomwer/gui/{test → tests}/test_qfolder_dialog.py +1 -1
  415. tomwer/gui/utils/RangeWidget.py +44 -0
  416. tomwer/gui/utils/buttons.py +4 -3
  417. tomwer/gui/utils/completer.py +2 -33
  418. tomwer/gui/utils/flow.py +11 -40
  419. tomwer/gui/utils/gpu.py +60 -0
  420. tomwer/gui/utils/illustrations.py +1 -26
  421. tomwer/gui/utils/inputwidget.py +35 -73
  422. tomwer/gui/utils/lineselector/lineselector.py +9 -46
  423. tomwer/gui/utils/loadingmode.py +81 -0
  424. tomwer/gui/utils/qt_utils.py +9 -0
  425. tomwer/gui/utils/sandboxes.py +1 -26
  426. tomwer/gui/utils/scandescription.py +2 -31
  427. tomwer/gui/utils/scrollarea.py +6 -55
  428. tomwer/gui/utils/slider.py +4 -28
  429. tomwer/gui/utils/splashscreen.py +0 -28
  430. tomwer/gui/utils/step.py +14 -13
  431. tomwer/gui/utils/tests/test_completer.py +41 -0
  432. tomwer/gui/utils/tests/test_line_selector.py +21 -0
  433. tomwer/gui/utils/tests/test_splashscreen.py +8 -0
  434. tomwer/gui/utils/tests/test_vignettes.py +68 -0
  435. tomwer/gui/utils/unitsystem.py +15 -69
  436. tomwer/gui/utils/utils.py +4 -5
  437. tomwer/gui/utils/vignettes.py +10 -41
  438. tomwer/gui/utils/waiterthread.py +0 -26
  439. tomwer/gui/visualization/__init__.py +2 -0
  440. tomwer/gui/visualization/dataviewer.py +68 -421
  441. tomwer/gui/visualization/diffviewer/diffviewer.py +2 -30
  442. tomwer/gui/visualization/diffviewer/shiftwidget.py +4 -29
  443. tomwer/gui/visualization/fullscreenplot.py +5 -5
  444. tomwer/gui/visualization/imagestack.py +403 -0
  445. tomwer/gui/visualization/nxtomometadata.py +0 -4
  446. tomwer/gui/visualization/reconstructionparameters.py +14 -32
  447. tomwer/gui/visualization/scanoverview.py +33 -66
  448. tomwer/gui/visualization/sinogramviewer.py +2 -28
  449. tomwer/gui/visualization/test/__init__.py +0 -28
  450. tomwer/gui/visualization/test/test_dataviewer.py +1 -28
  451. tomwer/gui/visualization/test/test_diffviewer.py +1 -28
  452. tomwer/gui/visualization/test/test_nx_tomo_metadata_viewer.py +0 -5
  453. tomwer/gui/visualization/test/test_reconstruction_parameters.py +1 -27
  454. tomwer/gui/visualization/test/test_sinogramviewer.py +1 -28
  455. tomwer/gui/visualization/test/test_stacks.py +184 -115
  456. tomwer/gui/visualization/test/test_volumeviewer.py +3 -2
  457. tomwer/gui/visualization/tomoobjoverview.py +2 -2
  458. tomwer/gui/visualization/volumeoverview.py +3 -2
  459. tomwer/gui/visualization/volumeviewer.py +47 -43
  460. tomwer/io/__init__.py +2 -0
  461. tomwer/io/utils/h5pyutils.py +1 -27
  462. tomwer/io/utils/test/test_raw_and_processed_data.py +10 -0
  463. tomwer/io/utils/test/test_utils.py +67 -0
  464. tomwer/io/utils/utils.py +2 -31
  465. tomwer/resources/__init__.py +13 -33
  466. tomwer/resources/gui/icons/edit_downstream.svg +114 -0
  467. tomwer/resources/gui/icons/edit_upstream.svg +112 -0
  468. tomwer/resources/gui/icons/free_edition.svg +23 -0
  469. tomwer/resources/gui/icons/icat_gallery_opts.png +0 -0
  470. tomwer/resources/gui/icons/icat_gallery_opts.svg +80 -0
  471. tomwer/resources/gui/icons/search.png +0 -0
  472. tomwer/resources/gui/icons/search.svg +23 -0
  473. tomwer/resources/gui/icons/warning.png +0 -0
  474. tomwer/synctools/__init__.py +2 -0
  475. tomwer/synctools/axis.py +1 -27
  476. tomwer/synctools/darkref.py +1 -26
  477. tomwer/synctools/datalistener.py +1 -27
  478. tomwer/synctools/datatransfert.py +2 -27
  479. tomwer/synctools/imageloaderthread.py +1 -28
  480. tomwer/synctools/rsyncmanager.py +1 -25
  481. tomwer/synctools/saaxis.py +1 -26
  482. tomwer/synctools/sadeltabeta.py +1 -26
  483. tomwer/synctools/stacks/control/datalistener.py +1 -26
  484. tomwer/synctools/stacks/processingstack.py +4 -33
  485. tomwer/synctools/stacks/reconstruction/axis.py +6 -53
  486. tomwer/synctools/stacks/reconstruction/castvolume.py +12 -43
  487. tomwer/synctools/stacks/reconstruction/dkrefcopy.py +4 -27
  488. tomwer/synctools/stacks/reconstruction/nabu.py +3 -28
  489. tomwer/synctools/stacks/reconstruction/normalization.py +2 -27
  490. tomwer/synctools/stacks/reconstruction/saaxis.py +2 -27
  491. tomwer/synctools/stacks/reconstruction/sadeltabeta.py +2 -27
  492. tomwer/synctools/tests/__init__.py +0 -0
  493. tomwer/synctools/{test → tests}/test_darkRefs.py +16 -40
  494. tomwer/synctools/{test → tests}/test_foldertransfer.py +2 -33
  495. tomwer/synctools/utils/scanstages.py +2 -31
  496. tomwer/tests/__init__.py +1 -0
  497. tomwer/tests/app/test_stitching.py +95 -0
  498. tomwer/tests/datasets.py +1 -5
  499. tomwer/tests/orangecontrib/tomwer/widgets/cluster/tests/test_future_supervisorow.py +48 -0
  500. tomwer/tests/orangecontrib/tomwer/widgets/cluster/tests/test_slurm_clusterow.py +40 -0
  501. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_advancement.py +8 -0
  502. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_data_validator.py +55 -0
  503. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_datadiscovery.py +129 -0
  504. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_datalistener.py +111 -0
  505. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_dataselector.py +69 -0
  506. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_datawatcher.py +411 -0
  507. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_emailow.py +29 -0
  508. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_notifier.py +24 -0
  509. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_nxtomo_concatenate_ow.py +64 -0
  510. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_nxtomomill.py +133 -0
  511. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_reduce_dark_flat_selector.py +40 -0
  512. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_singletomoobj.py +40 -0
  513. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_timerow.py +25 -0
  514. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_tomoobj_series.py +96 -0
  515. tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_volume_selector.py +69 -0
  516. orangecontrib/tomwer/widgets/edit/test/test_image_key_editor.py → tomwer/tests/orangecontrib/tomwer/widgets/debugtools/tests/test_dataset_generator.py +17 -16
  517. tomwer/tests/orangecontrib/tomwer/widgets/debugtools/tests/test_object_inspector.py +36 -0
  518. {orangecontrib/tomwer/widgets/edit/test → tomwer/tests/orangecontrib/tomwer/widgets/edit/tests}/test_dark_flat_patch.py +1 -27
  519. tomwer/tests/orangecontrib/tomwer/widgets/edit/tests/test_image_key_editor.py +30 -0
  520. tomwer/tests/orangecontrib/tomwer/widgets/edit/tests/test_nxtomo_editor.py +138 -0
  521. tomwer/tests/orangecontrib/tomwer/widgets/other/tests/test_pythonscript.py +31 -0
  522. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_axis.py +199 -0
  523. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_cast_volumeow.py +58 -0
  524. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_dark_refs_widget.py +136 -0
  525. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_delta_beta_selector.py +15 -0
  526. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_i_norm.py +200 -0
  527. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_nabu_helical_prepare_weights_double.py +20 -0
  528. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_nabu_volume.py +74 -0
  529. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_nabu_widget.py +107 -0
  530. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_sa_delta_beta.py +194 -0
  531. tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_saaxis.py +194 -0
  532. tomwer/tests/orangecontrib/tomwer/widgets/stitching/tests/test_zstitching.py +313 -0
  533. tomwer/tests/orangecontrib/tomwer/widgets/tests/test_conditions.py +85 -0
  534. tomwer/tests/orangecontrib/tomwer/widgets/tests/test_darkref.py +225 -0
  535. tomwer/tests/orangecontrib/tomwer/widgets/tests/test_foldertransfert.py +105 -0
  536. tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_dataviewerow.py +57 -0
  537. tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_diffviewerow.py +39 -0
  538. tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_nxtomo_metadata_viewer.py +29 -0
  539. tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_radio_stackow.py +31 -0
  540. tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_sample_movedow.py +46 -0
  541. tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_sinogram_viewerow.py +31 -0
  542. tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_slice_stackow.py +31 -0
  543. tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_volume_viewerow.py +32 -0
  544. tomwer/tests/test_ewoks/test_conversion.py +104 -0
  545. tomwer/tests/test_ewoks/test_single_node_execution.py +87 -0
  546. tomwer/tests/test_ewoks/test_workflows.py +138 -0
  547. tomwer/utils.py +11 -39
  548. tomwer/version.py +2 -2
  549. {tomwer-1.3.27.dist-info → tomwer-1.4.0.dist-info}/LICENSE +3 -3
  550. tomwer-1.4.0.dist-info/METADATA +337 -0
  551. tomwer-1.4.0.dist-info/RECORD +912 -0
  552. {tomwer-1.3.27.dist-info → tomwer-1.4.0.dist-info}/WHEEL +1 -1
  553. {tomwer-1.3.27.dist-info → tomwer-1.4.0.dist-info}/entry_points.txt +1 -0
  554. orangecontrib/tomwer/widgets/control/DataListOW.py +0 -129
  555. orangecontrib/tomwer/widgets/control/TomoObjSerieOW.py +0 -86
  556. orangecontrib/tomwer/widgets/control/VolumeSymLinkOW.py +0 -182
  557. orangecontrib/tomwer/widgets/edit/test/test_nxtomo_editor.py +0 -141
  558. orangecontrib/tomwer/widgets/icat/PublishProcessedDataOW.py +0 -115
  559. orangecontrib/tomwer/widgets/icat/RawDataScreenshotCreatorOW.py +0 -98
  560. orangecontrib/tomwer/widgets/icat/SaveToGalleryAndPublishOW.py +0 -129
  561. orangecontrib/tomwer/widgets/icat/icons/add_gallery.png +0 -0
  562. orangecontrib/tomwer/widgets/icat/icons/add_gallery.svg +0 -82
  563. orangecontrib/tomwer/widgets/icat/icons/raw_screenshots.png +0 -0
  564. orangecontrib/tomwer/widgets/icat/icons/raw_screenshots.svg +0 -143
  565. orangecontrib/tomwer/widgets/visualization/LivesliceOW.py +0 -87
  566. orangecontrib/tomwer/widgets/visualization/icons/liveslice.png +0 -0
  567. orangecontrib/tomwer/widgets/visualization/icons/liveslice.svg +0 -110
  568. tomwer/core/log/logger.py +0 -130
  569. tomwer/core/process/control/test/test_volume_link.py +0 -74
  570. tomwer/core/process/control/tomoobjserie.py +0 -12
  571. tomwer/core/process/control/volumesymlink.py +0 -200
  572. tomwer/core/process/icat/createscreenshots.py +0 -100
  573. tomwer/core/process/icat/gallery.py +0 -377
  574. tomwer/core/process/icat/icatbase.py +0 -36
  575. tomwer/core/process/icat/publish.py +0 -228
  576. tomwer/core/process/icat/screenshots.py +0 -27
  577. tomwer/core/process/reconstruction/test/test_darkref.py +0 -60
  578. tomwer/core/process/reconstruction/test/test_sadeltabeta.py +0 -74
  579. tomwer/core/process/test/test_axis.py +0 -309
  580. tomwer/core/process/visualization/liveslice.py +0 -6
  581. tomwer/core/progress.py +0 -100
  582. tomwer/core/scan/test/test_edf.py +0 -53
  583. tomwer/core/scan/test/test_future_scan.py +0 -61
  584. tomwer/core/scan/test/test_h5.py +0 -96
  585. tomwer/core/scan/test/test_process_registration.py +0 -109
  586. tomwer/core/test/test_scanutils.py +0 -53
  587. tomwer/gui/control/emailnotifier.py +0 -174
  588. tomwer/gui/control/serie/seriewaiter.py +0 -28
  589. tomwer/gui/control/test/__init__.py +0 -28
  590. tomwer/gui/control/test/test_datalist.py +0 -96
  591. tomwer/gui/control/test/test_datavalidator.py +0 -54
  592. tomwer/gui/control/test/test_email.py +0 -35
  593. tomwer/gui/control/test/test_process_manager.py +0 -65
  594. tomwer/gui/control/test/test_scanselector.py +0 -67
  595. tomwer/gui/edit/test/__init__.py +0 -28
  596. tomwer/gui/icat/gallery.py +0 -214
  597. tomwer/gui/icat/publish.py +0 -187
  598. tomwer/gui/reconstruction/axis/axis.py +0 -733
  599. tomwer/gui/reconstruction/axis/radioaxis.py +0 -2467
  600. tomwer/gui/stitching/stitching.py +0 -1388
  601. tomwer/gui/test/__init__.py +0 -28
  602. tomwer/gui/test/test_axis_gui.py +0 -34
  603. tomwer/synctools/stacks/edit/darkflatpatch.py +0 -169
  604. tomwer/synctools/stacks/edit/imagekeyeditor.py +0 -135
  605. tomwer/third_part/WaitingOverlay.py +0 -110
  606. tomwer-1.3.27-py3.11-nspkg.pth +0 -1
  607. tomwer-1.3.27.dist-info/METADATA +0 -292
  608. tomwer-1.3.27.dist-info/RECORD +0 -785
  609. tomwer-1.3.27.dist-info/namespace_packages.txt +0 -1
  610. /orangecontrib/tomwer/{widgets/edit/test → tests}/__init__.py +0 -0
  611. {tomwer/core/process/control/test → orangecontrib/tomwer/tutorials/id16b}/__init__.py +0 -0
  612. {tomwer/core/process/icat → orangecontrib/tomwer/widgets/cluster/tests}/__init__.py +0 -0
  613. /orangecontrib/tomwer/widgets/control/icons/{tomoobjserie.png → tomoobjseries.png} +0 -0
  614. {tomwer/core/process/reconstruction/test → orangecontrib/tomwer/widgets/control/tests}/__init__.py +0 -0
  615. /orangecontrib/tomwer/widgets/{icat → dataportal}/icons/publish_processed_data.png +0 -0
  616. /orangecontrib/tomwer/widgets/{icat → dataportal}/icons/publish_processed_data.svg +0 -0
  617. {tomwer/core/process/test → orangecontrib/tomwer/widgets/debugtools/tests}/__init__.py +0 -0
  618. {tomwer/core/scan/test → orangecontrib/tomwer/widgets/edit/tests}/__init__.py +0 -0
  619. {tomwer/core/test → orangecontrib/tomwer/widgets/other/tests}/__init__.py +0 -0
  620. {tomwer/gui/cluster/test → orangecontrib/tomwer/widgets/reconstruction/tests}/__init__.py +0 -0
  621. {tomwer/gui/control/serie → orangecontrib/tomwer/widgets/stitching/tests}/__init__.py +0 -0
  622. {tomwer/gui/icat → orangecontrib/tomwer/widgets/tests}/__init__.py +0 -0
  623. {tomwer/gui/reconstruction/test → orangecontrib/tomwer/widgets/visualization/tests}/__init__.py +0 -0
  624. /tomwer/{synctools/stacks/edit → app/stitching}/__init__.py +0 -0
  625. /tomwer/{synctools/test → core/process/control/tests}/__init__.py +0 -0
  626. /tomwer/core/process/control/{test → tests}/test_email.py +0 -0
  627. /tomwer/core/process/control/{test → tests}/test_h52nx_process.py +0 -0
  628. /tomwer/{third_part → core/process/drac}/__init__.py +0 -0
  629. /tomwer/core/process/reconstruction/{test → tests}/test_axis_params.py +0 -0
  630. /tomwer/core/process/reconstruction/{test → tests}/test_darkref_copy.py +0 -0
  631. /tomwer/core/process/reconstruction/{test → tests}/test_paramsbase.py +0 -0
  632. /tomwer/core/scan/{test → tests}/test_scan.py +0 -0
  633. /tomwer/gui/control/{serie → series}/nxtomoconcatenate.py +0 -0
  634. /tomwer/gui/control/{test → tests}/test_datadiscovery.py +0 -0
  635. /tomwer/gui/control/{test → tests}/test_reducedarkflat_selector.py +0 -0
  636. /tomwer/gui/control/{test → tests}/test_single_tomo_obj.py +0 -0
  637. {orangecontrib/tomwer/widgets/edit/test → tomwer/tests/orangecontrib/tomwer/widgets/edit/tests}/test_image_key_upgrader.py +0 -0
  638. {tomwer-1.3.27.dist-info → tomwer-1.4.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,94 @@
1
+ from __future__ import annotations
2
+ from silx.gui import qt
3
+
4
+ from tomwer.gui.reconstruction.nabu.nabuconfig.base import _NabuStageConfigBase
5
+ from tomwer.gui.utils.gpu import SelectGPUGroupBox
6
+
7
+
8
+ class NabuPlatformSettings(qt.QWidget, _NabuStageConfigBase):
9
+ """define settings to be used for the local reconstruction like gpu..."""
10
+
11
+ sigConfigChanged = qt.Signal()
12
+
13
+ DEFAULT_GPU_FRACTION = 90
14
+ DEFAULT_CPU_FRACTION = 90
15
+
16
+ def __init__(self, parent: qt.QWidget | None = None) -> None:
17
+ qt.QWidget.__init__(self, parent, stage=None)
18
+ _NabuStageConfigBase.__init__(self, stage=None)
19
+
20
+ self.setLayout(qt.QFormLayout())
21
+ self._gpuSelWidget = SelectGPUGroupBox()
22
+ self._gpuSelWidget.setChecked(False)
23
+ # keep default behavior: don't set any default gpu
24
+ self.layout().addRow(self._gpuSelWidget)
25
+
26
+ # gpu percentage
27
+ self._GPUFractionLabel = qt.QLabel("GPU percentage usage", self)
28
+ self.registerWidget(self._GPUFractionLabel, "advanced")
29
+ self._GPUFractionSB = qt.QSpinBox(self)
30
+ self._GPUFractionSB.setSingleStep(10)
31
+ self._GPUFractionSB.setSuffix("%")
32
+ self._GPUFractionSB.setMinimum(1)
33
+ self._GPUFractionSB.setMaximum(100)
34
+ self._GPUFractionSB.setToolTip("Which fraction of GPU memory to use.")
35
+ self.registerWidget(self._GPUFractionSB, "advanced")
36
+ self.layout().addRow(self._GPUFractionLabel, self._GPUFractionSB)
37
+
38
+ # cpu percentage
39
+ self._CPUFractionLabel = qt.QLabel("CPU percentage usage", self)
40
+ self.registerWidget(self._CPUFractionLabel, "advanced")
41
+ self._CPUFractionSB = qt.QSpinBox(self)
42
+ self._CPUFractionSB.setSingleStep(10)
43
+ self._CPUFractionSB.setSuffix("%")
44
+ self._CPUFractionSB.setMinimum(1)
45
+ self._CPUFractionSB.setMaximum(100)
46
+ self._CPUFractionSB.setToolTip("Which fraction of CPU memory to use.")
47
+ self.registerWidget(self._CPUFractionSB, "advanced")
48
+ self.layout().addRow(self._CPUFractionLabel, self._CPUFractionSB)
49
+
50
+ # set up
51
+ self._GPUFractionSB.setValue(NabuPlatformSettings.DEFAULT_GPU_FRACTION)
52
+ self._CPUFractionSB.setValue(NabuPlatformSettings.DEFAULT_CPU_FRACTION)
53
+
54
+ # connect signal / slot
55
+ self._gpuSelWidget.sigGPUChanged.connect(self.sigConfigChanged)
56
+ self._GPUFractionSB.valueChanged.connect(self._triggerSigConfChanged)
57
+ self._CPUFractionSB.valueChanged.connect(self._triggerSigConfChanged)
58
+
59
+ def getCPUFraction(self) -> float:
60
+ return self._CPUFractionSB.value() / 100.0
61
+
62
+ def setCPUFraction(self, value: float):
63
+ return self._CPUFractionSB.setValue(int(value * 100.0))
64
+
65
+ def getGPUFraction(self) -> float:
66
+ return self._GPUFractionSB.value() / 100.0
67
+
68
+ def setGPUFraction(self, value: float):
69
+ return self._GPUFractionSB.setValue(int(value * 100.0))
70
+
71
+ def _triggerSigConfChanged(self, *args, **kwargs) -> None:
72
+ self.sigConfigChanged.emit()
73
+
74
+ def getConfiguration(self) -> dict:
75
+ config = {
76
+ "gpu_mem_fraction": self.getGPUFraction(),
77
+ "cpu_mem_fraction": self.getCPUFraction(),
78
+ }
79
+ selected_gpu_id = self._gpuSelWidget.getSelectedGPUId()
80
+ if selected_gpu_id is not None:
81
+ config["resources"] = {
82
+ "gpu_id": selected_gpu_id,
83
+ }
84
+ return config
85
+
86
+ def setConfiguration(self, config: dict) -> None:
87
+ gpu_id = config.get("resources", {}).get("gpu_id", None)
88
+ if gpu_id not in (None, ""):
89
+ self._gpuSelWidget.setSelectedGPUId(value=gpu_id)
90
+ self._gpuSelWidget.setChecked(True)
91
+ if "gpu_mem_fraction" in config:
92
+ self.setGPUFraction(config["gpu_mem_fraction"])
93
+ if "cpu_mem_fraction" in config:
94
+ self.setCPUFraction(config["cpu_mem_fraction"])
@@ -1,31 +1,6 @@
1
1
  # coding: utf-8
2
- # /*##########################################################################
3
- #
4
- # Copyright (c) 2016-2017 European Synchrotron Radiation Facility
5
- #
6
- # Permission is hereby granted, free of charge, to any person obtaining a copy
7
- # of this software and associated documentation files (the "Software"), to deal
8
- # in the Software without restriction, including without limitation the rights
9
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
- # copies of the Software, and to permit persons to whom the Software is
11
- # furnished to do so, subject to the following conditions:
12
- #
13
- # The above copyright notice and this permission notice shall be included in
14
- # all copies or substantial portions of the Software.
15
- #
16
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
- # THE SOFTWARE.
23
- #
24
- # ###########################################################################*/
25
-
26
- __authors__ = ["H. Payno"]
27
- __license__ = "MIT"
28
- __date__ = "04/03/2019"
2
+ from __future__ import annotations
3
+
29
4
 
30
5
  import logging
31
6
 
@@ -38,11 +13,14 @@ from silx.gui import qt
38
13
  from silx.utils.enum import Enum as _Enum
39
14
  from nxtomo.nxobject.nxdetector import FOV
40
15
 
16
+ from tomwer.core.utils.dictutils import concatenate_dict
41
17
  from tomwer.core.process.reconstruction.nabu.utils import _NabuMode
42
18
  from tomwer.core.scan.scanbase import TomwerScanBase
43
19
  from tomwer.gui import icons as tomwer_icons
44
20
  from tomwer.gui.reconstruction.nabu.nabuflow import NabuFlowArea
21
+ from tomwer.gui.reconstruction.nabu.platform import NabuPlatformSettings
45
22
  from tomwer.gui.utils.buttons import PadlockButton
23
+ from tomwer.gui.settings import TAB_LABEL_PLATFORM_SETTINGS
46
24
 
47
25
  from ...utils.flow import FlowDirection
48
26
  from tomwer.gui.configuration.action import (
@@ -153,15 +131,15 @@ class _NabuConfiguration(qt.QWidget):
153
131
  def filter(self, stage=None, process=None):
154
132
  """Apply a filter on the options to show
155
133
 
156
- :param str stage:
157
- :param str process:
134
+ :param stage:
135
+ :param process:
158
136
  """
159
137
  pass
160
138
 
161
139
  def setStages(self, stages: dict) -> None:
162
140
  """
163
141
 
164
- :param dict stages: contains stages the user can edit and for each
142
+ :param stages: contains stages the user can edit and for each
165
143
  stages the associated processes.
166
144
  """
167
145
  self.clear()
@@ -213,7 +191,7 @@ class NabuWindow(qt.QMainWindow):
213
191
  qt.QMainWindow.__init__(self, parent=parent)
214
192
  self.setWindowFlags(qt.Qt.Widget)
215
193
 
216
- self._mainWidget = NabuWidget(parent=self, flow_direction=flow_direction)
194
+ self._mainWidget = NabuTabWidget(parent=self, flow_direction=flow_direction)
217
195
  self.setCentralWidget(self._mainWidget)
218
196
  style = qt.QApplication.style()
219
197
 
@@ -279,14 +257,6 @@ class NabuWindow(qt.QMainWindow):
279
257
  self.__tSpacer.setSizePolicy(qt.QSizePolicy.Expanding, qt.QSizePolicy.Preferred)
280
258
  toolbar.addWidget(self.__tSpacer)
281
259
 
282
- # expose API
283
- self.setOutputDir = self._mainWidget.setOutputDir
284
- self.setScan = self._mainWidget.setScan
285
- self.getMode = self._mainWidget.getMode
286
- self.setMode = self._mainWidget.setMode
287
- self.hideSlicesInterface = self._mainWidget.hideSlicesInterface
288
- self.hidePaganinInterface = self._mainWidget.hidePaganinInterface
289
-
290
260
  # connect signal / slot
291
261
  self._mainWidget.sigConfigChanged.connect(self.sigConfigChanged)
292
262
 
@@ -348,8 +318,9 @@ class NabuWindow(qt.QMainWindow):
348
318
  )
349
319
 
350
320
  def _resetParameters(self):
321
+ # reset nabu settings
351
322
  default_config = get_default_nabu_config(nabu_fullfield_default_config)
352
- self._mainWidget._configuration._preProcessingWidget._sinoRingsOpts.resetConfiguration()
323
+ self._mainWidget.nabuSettingsWidget._configuration._preProcessingWidget._sinoRingsOpts.resetConfiguration()
353
324
  default_config["tomwer_slices"] = "middle"
354
325
  default_config["preproc"]["ccd_filter_enabled"] = False
355
326
  default_config["preproc"]["double_flatfield_enabled"] = False
@@ -427,11 +398,31 @@ class NabuWindow(qt.QMainWindow):
427
398
  else:
428
399
  raise ValueError("Level not recognize")
429
400
 
401
+ # expose API
402
+
430
403
  def setModeLocked(self, locked: bool):
431
- self._mainWidget.setModeLocked(locked)
404
+ self._mainWidget.nabuSettingsWidget.setModeLocked(locked)
432
405
 
433
406
  def isModeLocked(self):
434
- return self._mainWidget.isModeLocked()
407
+ return self._mainWidget.nabuSettingsWidget.isModeLocked()
408
+
409
+ def setOutputDir(self, dir: str):
410
+ self._mainWidget.nabuSettingsWidget.setOutputDir(dir=dir)
411
+
412
+ def setScan(self, scan: TomwerScanBase):
413
+ self._mainWidget.nabuSettingsWidget.setScan(scan=scan)
414
+
415
+ def getMode(self):
416
+ return self._mainWidget.nabuSettingsWidget.getMode()
417
+
418
+ def setMode(self, mode):
419
+ self._mainWidget.nabuSettingsWidget.setMode(mode=mode)
420
+
421
+ def hideSlicesInterface(self):
422
+ self._mainWidget.nabuSettingsWidget.hideSlicesInterface()
423
+
424
+ def hidePaganinInterface(self):
425
+ self._mainWidget.nabuSettingsWidget.hidePaganinInterface()
435
426
 
436
427
 
437
428
  class NabuWidget(qt.QWidget):
@@ -484,9 +475,7 @@ class NabuWidget(qt.QWidget):
484
475
  # nabu configuration
485
476
  self._configurationScrollArea = qt.QScrollArea(self)
486
477
  self._configurationScrollArea.setWidgetResizable(True)
487
- self._configuration = NabuConfiguration(
488
- parent=self, scrollArea=self._configurationScrollArea
489
- )
478
+ self._configuration = NabuConfiguration(parent=self)
490
479
  self._configurationScrollArea.setWidget(self._configuration)
491
480
  self._configurationScrollArea.setHorizontalScrollBarPolicy(
492
481
  qt.Qt.ScrollBarAlwaysOff
@@ -622,3 +611,50 @@ class NabuWidget(qt.QWidget):
622
611
  def setFilteringActive(self, active):
623
612
  self._filteringActive = active
624
613
  self.updateConfigurationFilter()
614
+
615
+
616
+ class NabuTabWidget(qt.QTabWidget):
617
+ """
618
+ Widget that group Nabu reconstruction settings and (local) platform settings
619
+ """
620
+
621
+ sigConfigChanged = qt.Signal()
622
+
623
+ def __init__(self, parent=None, flow_direction: str = "vertical"):
624
+ super().__init__(parent=parent)
625
+ self._nabuSettingsWidget = NabuWidget(
626
+ parent=self, flow_direction=flow_direction
627
+ )
628
+ self.addTab(self._nabuSettingsWidget, "reconstruction settings")
629
+ self._platformSettingsWidget = NabuPlatformSettings(parent=self)
630
+ self.addTab(self._platformSettingsWidget, TAB_LABEL_PLATFORM_SETTINGS)
631
+
632
+ # connect signal / slot
633
+ self._nabuSettingsWidget.sigConfigChanged.connect(self.sigConfigChanged)
634
+ self._platformSettingsWidget.sigConfigChanged.connect(self.sigConfigChanged)
635
+
636
+ def getConfiguration(self) -> dict:
637
+ config = self._nabuSettingsWidget.getConfiguration()
638
+ config = concatenate_dict(
639
+ config, self._platformSettingsWidget.getConfiguration()
640
+ )
641
+ return config
642
+
643
+ def setConfiguration(self, config: dict):
644
+ self._nabuSettingsWidget.setConfiguration(config=config)
645
+ self._platformSettingsWidget.setConfiguration(config=config)
646
+
647
+ def setConfigurationLevel(self, level):
648
+ self._nabuSettingsWidget.setConfigurationLevel(level=level)
649
+ self._platformSettingsWidget.setConfigurationLevel(level=level)
650
+
651
+ def getConfigurationLevel(self):
652
+ return self._nabuSettingsWidget.getConfigurationLevel()
653
+
654
+ @property
655
+ def nabuSettingsWidget(self):
656
+ return self._nabuSettingsWidget
657
+
658
+ @property
659
+ def platformSettings(self):
660
+ return self._platformSettingsWidget
@@ -1,31 +1,5 @@
1
1
  # coding: utf-8
2
- # /*##########################################################################
3
- #
4
- # Copyright (c) 2016-2017 European Synchrotron Radiation Facility
5
- #
6
- # Permission is hereby granted, free of charge, to any person obtaining a copy
7
- # of this software and associated documentation files (the "Software"), to deal
8
- # in the Software without restriction, including without limitation the rights
9
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
- # copies of the Software, and to permit persons to whom the Software is
11
- # furnished to do so, subject to the following conditions:
12
- #
13
- # The above copyright notice and this permission notice shall be included in
14
- # all copies or substantial portions of the Software.
15
- #
16
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
- # THE SOFTWARE.
23
- #
24
- # ###########################################################################*/
25
-
26
- __authors__ = ["H. Payno"]
27
- __license__ = "MIT"
28
- __date__ = "11/10/2021"
2
+ from __future__ import annotations
29
3
 
30
4
 
31
5
  from silx.gui import qt
@@ -0,0 +1,82 @@
1
+ from tomwer.tests.conftest import qtapp # noqa F401
2
+ from tomwer.gui.reconstruction.nabu.castvolume import CastVolumeWidget
3
+
4
+
5
+ def test_CastVolumeWidget(qtapp): # noqa F811
6
+ """simple test of the CastVolumeWidget"""
7
+ widget = CastVolumeWidget(parent=None)
8
+ assert widget.getConfiguration() == {
9
+ "compression_ratios": None,
10
+ "data_max": None,
11
+ "data_min": None,
12
+ "output_data_type": "uint16",
13
+ "output_dir": "{volume_data_parent_folder}/cast_volume",
14
+ "output_file_format": "tiff",
15
+ "overwrite": True,
16
+ "rescale_max_percentile": 90,
17
+ "rescale_min_percentile": 10,
18
+ }
19
+
20
+ widget._minMaxAuto.setChecked(False)
21
+ assert widget.getConfiguration() == {
22
+ "compression_ratios": None,
23
+ "data_max": 0.0,
24
+ "data_min": 0.0,
25
+ "output_data_type": "uint16",
26
+ "output_dir": "{volume_data_parent_folder}/cast_volume",
27
+ "output_file_format": "tiff",
28
+ "overwrite": True,
29
+ "rescale_max_percentile": None,
30
+ "rescale_min_percentile": None,
31
+ }
32
+
33
+ widget.setDataMin(1.0)
34
+ widget.setDataMax(10.0)
35
+
36
+ assert widget.getConfiguration() == {
37
+ "compression_ratios": None,
38
+ "data_max": 10.0,
39
+ "data_min": 1.0,
40
+ "output_data_type": "uint16",
41
+ "output_dir": "{volume_data_parent_folder}/cast_volume",
42
+ "output_file_format": "tiff",
43
+ "overwrite": True,
44
+ "rescale_max_percentile": None,
45
+ "rescale_min_percentile": None,
46
+ }
47
+ widget.setOutputFileformat("edf")
48
+ assert widget.getConfiguration() == {
49
+ "compression_ratios": None,
50
+ "data_max": 10.0,
51
+ "data_min": 1.0,
52
+ "output_data_type": "uint16",
53
+ "output_dir": "{volume_data_parent_folder}/cast_volume",
54
+ "output_file_format": "edf",
55
+ "overwrite": True,
56
+ "rescale_max_percentile": None,
57
+ "rescale_min_percentile": None,
58
+ }
59
+ widget.setOverwrite(False)
60
+ assert widget.getConfiguration() == {
61
+ "compression_ratios": None,
62
+ "data_max": 10.0,
63
+ "data_min": 1.0,
64
+ "output_data_type": "uint16",
65
+ "output_dir": "{volume_data_parent_folder}/cast_volume",
66
+ "output_file_format": "edf",
67
+ "overwrite": False,
68
+ "rescale_max_percentile": None,
69
+ "rescale_min_percentile": None,
70
+ }
71
+ widget.setOutputDataType("float32")
72
+ assert widget.getConfiguration() == {
73
+ "compression_ratios": None,
74
+ "data_max": 10.0,
75
+ "data_min": 1.0,
76
+ "output_data_type": "float32",
77
+ "output_dir": "{volume_data_parent_folder}/cast_volume",
78
+ "output_file_format": "edf",
79
+ "overwrite": False,
80
+ "rescale_max_percentile": None,
81
+ "rescale_min_percentile": None,
82
+ }
@@ -0,0 +1,66 @@
1
+ # coding: utf-8
2
+ from __future__ import annotations
3
+
4
+
5
+ import os
6
+
7
+ import pytest
8
+ from nxtomo.nxobject.nxdetector import ImageKey
9
+
10
+ from tomwer.core.scan.edfscan import EDFTomoScan
11
+ from tomwer.core.utils.scanutils import MockEDF, MockNXtomo
12
+ from tomwer.gui.reconstruction.nabu import check
13
+
14
+
15
+ def test_check_dark_series(tmpdir):
16
+ """test check.check_dark_series function"""
17
+ full_edf_path = os.path.join(tmpdir, "my", "aquisition", "folder")
18
+ MockEDF.fastMockAcquisition(full_edf_path)
19
+ edf_scan = EDFTomoScan(full_edf_path)
20
+ with pytest.raises(TypeError):
21
+ assert check.check_dark_series(edf_scan)
22
+
23
+ full_hdf5_scan = os.path.join(tmpdir, "hdf5_scan")
24
+ scan = MockNXtomo(
25
+ scan_path=full_hdf5_scan,
26
+ n_proj=20,
27
+ n_ini_proj=20,
28
+ dim=10,
29
+ ).scan
30
+ scan._image_keys = (
31
+ [ImageKey.DARK_FIELD] * 2
32
+ + [ImageKey.PROJECTION] * 4
33
+ + [ImageKey.DARK_FIELD] * 2
34
+ )
35
+ assert check.check_dark_series(scan, logger=None, user_input=False) is False
36
+ scan._image_keys = [ImageKey.DARK_FIELD] * 2 + [ImageKey.PROJECTION] * 4
37
+ assert check.check_dark_series(scan, logger=None, user_input=False) is True
38
+ scan._image_keys = [ImageKey.PROJECTION] * 4
39
+ assert check.check_dark_series(scan, logger=None, user_input=False) is False
40
+
41
+
42
+ def test_check_flat_series(tmpdir):
43
+ """test check.check_flat_series function"""
44
+ full_edf_path = os.path.join(tmpdir, "my", "aquisition", "folder")
45
+ MockEDF.fastMockAcquisition(full_edf_path)
46
+ edf_scan = EDFTomoScan(full_edf_path)
47
+ with pytest.raises(TypeError):
48
+ assert check.check_flat_series(edf_scan)
49
+
50
+ full_hdf5_scan = os.path.join(tmpdir, "hdf5_scan")
51
+ scan = MockNXtomo(
52
+ scan_path=full_hdf5_scan,
53
+ n_proj=20,
54
+ n_ini_proj=20,
55
+ dim=10,
56
+ ).scan
57
+ scan._image_keys = (
58
+ [ImageKey.FLAT_FIELD] * 2
59
+ + [ImageKey.PROJECTION] * 4
60
+ + [ImageKey.FLAT_FIELD] * 2
61
+ )
62
+ assert check.check_flat_series(scan, logger=None, user_input=False) is True
63
+ scan._image_keys = [ImageKey.FLAT_FIELD] * 2 + [ImageKey.PROJECTION] * 4
64
+ assert check.check_flat_series(scan, logger=None, user_input=False) is True
65
+ scan._image_keys = [ImageKey.PROJECTION] * 4
66
+ assert check.check_flat_series(scan, logger=None, user_input=False) is False
@@ -0,0 +1,46 @@
1
+ import pytest
2
+ from silx.gui import qt
3
+ from silx.gui.utils.testutils import TestCaseQt
4
+
5
+ from tomwer.gui.reconstruction.nabu.nabuconfig.ctf import CTFConfig
6
+ from tomwer.tests.utils import skip_gui_test
7
+
8
+
9
+ @pytest.mark.skipif(skip_gui_test(), reason="skip gui test")
10
+ class TestFutureSupervisorOW(TestCaseQt):
11
+ def setUp(self):
12
+ super().setUp()
13
+ self._widget = CTFConfig()
14
+
15
+ def tearDown(self):
16
+ self._widget.setAttribute(qt.Qt.WA_DeleteOnClose)
17
+ self._widget.close()
18
+ self._widget = None
19
+ return super().tearDown()
20
+
21
+ def test_configuration(self):
22
+ """
23
+ test configuration setter and getter
24
+ """
25
+ self._widget.show()
26
+ config = self._widget.getConfiguration()
27
+ assert isinstance(config, dict)
28
+
29
+ assert config == {
30
+ "ctf_geometry": " z1_v=None; z1_h=None; detec_pixel_size=None; magnification=True",
31
+ "ctf_advanced_params": " length_scale=1e-05; lim1=1e-05; lim2=0.2; normalize_by_mean=True",
32
+ "ctf_translations_file": "",
33
+ "beam_shape": "parallel",
34
+ }
35
+
36
+ config["beam_shape"] = "cone"
37
+ config["ctf_translations_file"] = "my_file.txt"
38
+ config["ctf_geometry"] = (
39
+ " z1_v=10.2; z1_h=3.6; detec_pixel_size=1e-05; magnification=False"
40
+ )
41
+ config["ctf_advanced_params"] = (
42
+ " length_scale=2e-05; lim1=1e-08; lim2=0.1; normalize_by_mean=False"
43
+ )
44
+
45
+ self._widget.setConfiguration(config)
46
+ assert self._widget.getConfiguration() == config
@@ -0,0 +1,21 @@
1
+ from tomwer.tests.conftest import qtapp # noqa F401
2
+ from tomwer.gui.reconstruction.nabu.helical import HelicalPrepareWeightsDouble
3
+
4
+
5
+ def test_DeltaBetaSelector(
6
+ qtapp, # noqa F811
7
+ ):
8
+ """simple test of the _DeltaBetaSelectorDialog"""
9
+ widget = HelicalPrepareWeightsDouble()
10
+ assert widget.getConfiguration() == {
11
+ "processes_file": "{scan_parent_dir_basename}/{scan_dir_name}/map_and_doubleff.hdf5",
12
+ "transition_width_vertical": 50.0,
13
+ "transition_width_horizontal": 50.0,
14
+ }
15
+ config = {
16
+ "processes_file": "test.hdf5",
17
+ "transition_width_vertical": 12.5,
18
+ "transition_width_horizontal": 11.5,
19
+ }
20
+ widget.setConfiguration(config=config)
21
+ assert widget.getConfiguration() == config
@@ -0,0 +1,81 @@
1
+ from tomwer.gui.reconstruction.nabu.nabuconfig.preprocessing import (
2
+ SinoRingsOptions,
3
+ TiltCorrection,
4
+ RingCorrectionMethod,
5
+ )
6
+ from tomwer.tests.conftest import qtapp # noqa F401
7
+
8
+
9
+ def test_tilt_correction_widget(qtapp): # noqa F811
10
+ """
11
+ Test of TiltCorrection
12
+ """
13
+ widget = TiltCorrection(text="")
14
+ assert not widget._tiltManualRB.isChecked()
15
+ assert widget._autoManualRB.isChecked()
16
+ assert widget.getTiltCorrection() == ("1d-correlation", "")
17
+ widget.setTiltCorrection(0.0)
18
+ assert widget.getTiltCorrection() == (0.0, "")
19
+ assert widget._tiltManualRB.isChecked()
20
+ assert not widget._autoManualRB.isChecked()
21
+ widget.setTiltCorrection("fft-polar", auto_tilt_options="low_pass=10")
22
+ assert widget.getTiltCorrection() == ("fft-polar", "low_pass=10")
23
+ assert not widget._tiltManualRB.isChecked()
24
+ assert widget._autoManualRB.isChecked()
25
+
26
+
27
+ def test_sino_rings_options(qtapp): # noqa F811
28
+ """
29
+ Test of SinoRingsOptions
30
+ """
31
+ widget = SinoRingsOptions()
32
+ # test munch options
33
+ assert widget.getOptions() == {
34
+ "sigma": 1.0,
35
+ "levels": 10,
36
+ "padding": False,
37
+ }
38
+
39
+ widget.setOptions(
40
+ {
41
+ "sigma": 3.25,
42
+ "levels": 564,
43
+ "padding": True,
44
+ }
45
+ )
46
+ assert widget.getOptions() == {
47
+ "sigma": 3.25,
48
+ "levels": 564,
49
+ "padding": True,
50
+ }
51
+ # test mean division
52
+ widget.setMethod(method=RingCorrectionMethod.MEAN_DIVISION)
53
+ assert widget.getOptions() == {
54
+ "filter_cutoff": (0, 30),
55
+ }
56
+
57
+ # test VO deringer
58
+ widget.setMethod(method=RingCorrectionMethod.VO.value)
59
+ assert widget.getOptions() == {
60
+ "dim": 1,
61
+ "la_size": 51,
62
+ "sm_size": 21,
63
+ "snr": 3.0,
64
+ }
65
+ new_vo_options = {
66
+ "dim": 2,
67
+ "la_size": 42,
68
+ "sm_size": 22,
69
+ "snr": 6.3,
70
+ }
71
+ widget.setOptions(new_vo_options)
72
+ assert widget.getOptions() == new_vo_options
73
+
74
+ # test mean division
75
+ new_mean_division_options = {
76
+ "filter_cutoff": (10, 23),
77
+ }
78
+
79
+ widget.setMethod(method=RingCorrectionMethod.MEAN_DIVISION)
80
+ widget.setOptions(new_mean_division_options)
81
+ assert widget.getOptions() == new_mean_division_options