tomwer 1.2.1__py3-none-any.whl → 1.3.12__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 (334) hide show
  1. orangecontrib/tomwer/tutorials/icat_publication.ows +58 -0
  2. orangecontrib/tomwer/widgets/__init__.py +11 -11
  3. orangecontrib/tomwer/widgets/control/DataDiscoveryOW.py +2 -2
  4. orangecontrib/tomwer/widgets/control/DataListOW.py +9 -7
  5. orangecontrib/tomwer/widgets/control/DataListenerOW.py +6 -6
  6. orangecontrib/tomwer/widgets/control/DataSelectorOW.py +21 -10
  7. orangecontrib/tomwer/widgets/control/DataValidatorOW.py +6 -6
  8. orangecontrib/tomwer/widgets/control/EDF2NXTomomillOW.py +24 -7
  9. orangecontrib/tomwer/widgets/control/EmailOW.py +4 -4
  10. orangecontrib/tomwer/widgets/control/NXTomomillMixIn.py +3 -3
  11. orangecontrib/tomwer/widgets/control/NXTomomillOW.py +64 -23
  12. orangecontrib/tomwer/widgets/control/NXtomoConcatenate.py +20 -8
  13. orangecontrib/tomwer/widgets/control/NotifierOW.py +1 -0
  14. orangecontrib/tomwer/widgets/control/SingleTomoObjOW.py +6 -6
  15. orangecontrib/tomwer/widgets/control/VolumeSelector.py +7 -4
  16. orangecontrib/tomwer/widgets/control/VolumeSymLinkOW.py +182 -182
  17. orangecontrib/tomwer/widgets/debugtools/DatasetGeneratorOW.py +5 -5
  18. orangecontrib/tomwer/widgets/edit/DarkFlatPatchOW.py +4 -4
  19. orangecontrib/tomwer/widgets/edit/ImageKeyEditorOW.py +3 -3
  20. orangecontrib/tomwer/widgets/edit/ImageKeyUpgraderOW.py +8 -1
  21. orangecontrib/tomwer/widgets/edit/NXtomoEditorOW.py +3 -3
  22. orangecontrib/tomwer/widgets/edit/test/test_nxtomo_editor.py +3 -3
  23. orangecontrib/tomwer/widgets/icat/PublishProcessedDataOW.py +115 -0
  24. orangecontrib/tomwer/widgets/icat/RawDataScreenshotCreatorOW.py +98 -0
  25. orangecontrib/tomwer/widgets/icat/SaveToGalleryAndPublishOW.py +129 -0
  26. orangecontrib/tomwer/widgets/icat/__init__.py +13 -0
  27. orangecontrib/tomwer/widgets/icat/icons/add_gallery.png +0 -0
  28. orangecontrib/tomwer/widgets/icat/icons/add_gallery.svg +82 -0
  29. orangecontrib/tomwer/widgets/icat/icons/publish_processed_data.png +0 -0
  30. orangecontrib/tomwer/widgets/icat/icons/publish_processed_data.svg +95 -0
  31. orangecontrib/tomwer/widgets/icat/icons/raw_screenshots.png +0 -0
  32. orangecontrib/tomwer/widgets/icat/icons/raw_screenshots.svg +143 -0
  33. orangecontrib/tomwer/widgets/icons/tomwer_data_portal.png +0 -0
  34. orangecontrib/tomwer/widgets/icons/tomwer_data_portal.svg +76 -0
  35. orangecontrib/tomwer/widgets/reconstruction/AxisOW.py +22 -20
  36. orangecontrib/tomwer/widgets/reconstruction/CastNabuVolumeOW.py +19 -3
  37. orangecontrib/tomwer/widgets/reconstruction/NabuHelicalPrepareWeightsDoubleOW.py +184 -169
  38. orangecontrib/tomwer/widgets/reconstruction/NabuOW.py +23 -0
  39. orangecontrib/tomwer/widgets/reconstruction/NabuVolumeOW.py +39 -5
  40. orangecontrib/tomwer/widgets/reconstruction/SAAxisOW.py +18 -22
  41. orangecontrib/tomwer/widgets/reconstruction/SADeltaBetaOW.py +18 -26
  42. orangecontrib/tomwer/widgets/reconstruction/SinoNormOW.py +15 -19
  43. orangecontrib/tomwer/widgets/visualization/DataViewerOW.py +9 -9
  44. orangecontrib/tomwer/widgets/visualization/DiffViewerOW.py +1 -1
  45. orangecontrib/tomwer/widgets/visualization/LivesliceOW.py +1 -1
  46. orangecontrib/tomwer/widgets/visualization/NXtomoMetadataViewerOW.py +3 -3
  47. orangecontrib/tomwer/widgets/visualization/SinogramViewerOW.py +0 -1
  48. orangecontrib/tomwer/widgets/visualization/VolumeViewerOW.py +3 -29
  49. tomwer/__main__.py +7 -64
  50. tomwer/app/axis.py +3 -3
  51. tomwer/app/canvas.py +8 -0
  52. tomwer/app/canvas_launcher/config.py +16 -14
  53. tomwer/app/canvas_launcher/environ.py +1 -0
  54. tomwer/app/canvas_launcher/mainwindow.py +4 -1
  55. tomwer/app/darkref.py +1 -1
  56. tomwer/app/darkrefpatch.py +1 -1
  57. tomwer/app/diffframe.py +3 -3
  58. tomwer/app/imagekeyeditor.py +5 -5
  59. tomwer/app/imagekeyupgrader.py +5 -5
  60. tomwer/app/intensitynormalization.py +14 -13
  61. tomwer/app/{saaxis.py → multicor.py} +3 -3
  62. tomwer/app/{sadeltabeta.py → multipag.py} +3 -3
  63. tomwer/app/nabuapp.py +0 -11
  64. tomwer/app/radiostack.py +6 -4
  65. tomwer/app/samplemoved.py +3 -2
  66. tomwer/app/scanviewer.py +4 -2
  67. tomwer/app/sinogramviewer.py +3 -2
  68. tomwer/app/slicestack.py +3 -2
  69. tomwer/app/zstitching.py +88 -6
  70. tomwer/core/cluster/cluster.py +26 -0
  71. tomwer/core/log/logger.py +7 -5
  72. tomwer/core/process/conditions/filters.py +1 -1
  73. tomwer/core/process/control/datalistener/datalistener.py +19 -14
  74. tomwer/core/process/control/datawatcher/edfdwprocess.py +0 -9
  75. tomwer/core/process/control/nxtomoconcatenate.py +13 -13
  76. tomwer/core/process/control/nxtomomill.py +92 -34
  77. tomwer/core/process/control/scantransfer.py +20 -43
  78. tomwer/core/process/control/scanvalidator.py +3 -2
  79. tomwer/core/process/control/test/test_concatenate_nxtomos.py +9 -9
  80. tomwer/core/process/control/test/test_email.py +4 -4
  81. tomwer/core/process/control/test/test_h52nx_process.py +59 -7
  82. tomwer/core/process/control/test/test_volume_link.py +64 -64
  83. tomwer/core/process/control/timer.py +1 -1
  84. tomwer/core/process/control/volumesymlink.py +200 -200
  85. tomwer/core/process/edit/darkflatpatch.py +14 -15
  86. tomwer/core/process/edit/imagekeyeditor.py +41 -39
  87. tomwer/core/process/icat/__init__.py +0 -0
  88. tomwer/core/process/icat/createscreenshots.py +100 -0
  89. tomwer/core/process/icat/gallery.py +377 -0
  90. tomwer/core/process/icat/icatbase.py +36 -0
  91. tomwer/core/process/icat/publish.py +228 -0
  92. tomwer/core/process/icat/screenshots.py +27 -0
  93. tomwer/core/process/output.py +52 -0
  94. tomwer/core/process/reconstruction/axis/axis.py +280 -69
  95. tomwer/core/process/reconstruction/axis/mode.py +163 -48
  96. tomwer/core/process/reconstruction/axis/params.py +29 -21
  97. tomwer/core/process/reconstruction/darkref/darkrefs.py +41 -127
  98. tomwer/core/process/reconstruction/darkref/darkrefscopy.py +4 -3
  99. tomwer/core/process/reconstruction/darkref/params.py +1 -1
  100. tomwer/core/process/reconstruction/nabu/castvolume.py +4 -4
  101. tomwer/core/process/reconstruction/nabu/helical.py +9 -5
  102. tomwer/core/process/reconstruction/nabu/nabucommon.py +71 -78
  103. tomwer/core/process/reconstruction/nabu/nabuscores.py +425 -53
  104. tomwer/core/process/reconstruction/nabu/nabuslices.py +114 -93
  105. tomwer/core/process/reconstruction/nabu/nabuvolume.py +54 -27
  106. tomwer/core/process/reconstruction/nabu/plane.py +9 -0
  107. tomwer/core/process/reconstruction/nabu/settings.py +2 -2
  108. tomwer/core/process/reconstruction/nabu/utils.py +164 -26
  109. tomwer/core/process/reconstruction/output.py +108 -0
  110. tomwer/core/process/reconstruction/saaxis/saaxis.py +238 -264
  111. tomwer/core/process/reconstruction/sadeltabeta/sadeltabeta.py +151 -87
  112. tomwer/core/process/reconstruction/scores/params.py +7 -4
  113. tomwer/core/process/reconstruction/scores/scores.py +13 -0
  114. tomwer/core/process/reconstruction/test/test_axis_params.py +2 -2
  115. tomwer/core/process/reconstruction/test/test_darkref.py +3 -3
  116. tomwer/core/process/reconstruction/test/test_darkref_copy.py +7 -7
  117. tomwer/core/process/reconstruction/test/test_saaxis.py +3 -4
  118. tomwer/core/process/reconstruction/test/test_sadeltabeta.py +2 -2
  119. tomwer/core/process/stitching/nabustitcher.py +13 -12
  120. tomwer/core/process/task.py +34 -26
  121. tomwer/core/process/test/test_axis.py +13 -12
  122. tomwer/core/process/test/test_dark_and_flat.py +10 -7
  123. tomwer/core/process/test/test_data_transfer.py +10 -8
  124. tomwer/core/process/test/test_nabu.py +14 -6
  125. tomwer/core/process/test/test_normalization.py +4 -4
  126. tomwer/core/scan/blissscan.py +3 -3
  127. tomwer/core/scan/edfscan.py +13 -10
  128. tomwer/core/scan/hdf5scan.py +19 -530
  129. tomwer/core/scan/nxtomoscan.py +534 -0
  130. tomwer/core/scan/scanbase.py +72 -44
  131. tomwer/core/scan/scanfactory.py +13 -13
  132. tomwer/core/scan/test/test_edf.py +2 -2
  133. tomwer/core/scan/test/test_future_scan.py +3 -3
  134. tomwer/core/scan/test/test_h5.py +18 -16
  135. tomwer/core/scan/test/test_process_registration.py +4 -40
  136. tomwer/core/scan/test/test_scan.py +5 -78
  137. tomwer/core/settings.py +22 -2
  138. tomwer/core/test/test_scanutils.py +8 -7
  139. tomwer/core/test/test_utils.py +35 -28
  140. tomwer/core/tomwer_object.py +1 -1
  141. tomwer/core/utils/__init__.py +0 -466
  142. tomwer/core/utils/deprecation.py +1 -1
  143. tomwer/core/utils/dictutils.py +14 -0
  144. tomwer/core/utils/lbsram.py +35 -0
  145. tomwer/core/utils/nxtomoutils.py +1 -1
  146. tomwer/core/utils/scanutils.py +6 -6
  147. tomwer/core/utils/spec.py +263 -0
  148. tomwer/core/volume/edfvolume.py +6 -6
  149. tomwer/core/volume/hdf5volume.py +6 -6
  150. tomwer/core/volume/jp2kvolume.py +6 -6
  151. tomwer/core/volume/rawvolume.py +6 -6
  152. tomwer/core/volume/tiffvolume.py +12 -12
  153. tomwer/core/volume/volumefactory.py +2 -2
  154. tomwer/gui/cluster/slurm.py +274 -65
  155. tomwer/gui/cluster/supervisor.py +12 -0
  156. tomwer/gui/cluster/test/test_cluster.py +14 -2
  157. tomwer/gui/cluster/test/test_supervisor.py +3 -3
  158. tomwer/gui/configuration/__init__.py +0 -0
  159. tomwer/gui/{reconstruction/nabu → configuration}/action.py +1 -32
  160. tomwer/gui/configuration/level.py +22 -0
  161. tomwer/gui/control/actions.py +54 -0
  162. tomwer/gui/control/datalist.py +83 -16
  163. tomwer/gui/control/datalistener.py +4 -16
  164. tomwer/gui/control/datawatcher/controlwidget.py +2 -4
  165. tomwer/gui/control/datawatcher/datawatcher.py +1 -24
  166. tomwer/gui/control/{email.py → emailnotifier.py} +9 -18
  167. tomwer/gui/control/history.py +2 -2
  168. tomwer/gui/control/observations.py +2 -2
  169. tomwer/gui/control/reducedarkflatselector.py +9 -9
  170. tomwer/gui/control/selectorwidgetbase.py +36 -9
  171. tomwer/gui/control/serie/seriecreator.py +5 -22
  172. tomwer/gui/control/test/test_email.py +1 -1
  173. tomwer/gui/control/test/test_scanvalidator.py +6 -5
  174. tomwer/gui/control/test/test_single_tomo_obj.py +3 -3
  175. tomwer/gui/control/tomoobjdisplaymode.py +8 -0
  176. tomwer/gui/debugtools/datasetgenerator.py +3 -3
  177. tomwer/gui/edit/dkrfpatch.py +20 -26
  178. tomwer/gui/edit/imagekeyeditor.py +11 -12
  179. tomwer/gui/edit/nxtomoeditor.py +111 -44
  180. tomwer/gui/edit/nxtomowarmer.py +7 -6
  181. tomwer/gui/edit/test/test_dkrf_patch.py +13 -13
  182. tomwer/gui/edit/test/test_image_key_editor.py +3 -3
  183. tomwer/gui/edit/test/test_nx_editor.py +40 -16
  184. tomwer/gui/icat/__init__.py +0 -0
  185. tomwer/gui/icat/createscreenshots.py +80 -0
  186. tomwer/gui/icat/gallery.py +214 -0
  187. tomwer/gui/icat/publish.py +187 -0
  188. tomwer/gui/imagefromfile.py +2 -2
  189. tomwer/gui/qfolderdialog.py +24 -1
  190. tomwer/gui/reconstruction/axis/CompareImages.py +88 -168
  191. tomwer/gui/reconstruction/axis/axis.py +171 -57
  192. tomwer/gui/reconstruction/axis/radioaxis.py +122 -257
  193. tomwer/gui/reconstruction/darkref/darkrefcopywidget.py +3 -2
  194. tomwer/gui/reconstruction/darkref/darkrefwidget.py +2 -1
  195. tomwer/gui/reconstruction/nabu/castvolume.py +14 -3
  196. tomwer/gui/reconstruction/nabu/check.py +9 -9
  197. tomwer/gui/reconstruction/nabu/helical.py +29 -12
  198. tomwer/gui/reconstruction/nabu/nabuconfig/base.py +2 -4
  199. tomwer/gui/reconstruction/nabu/nabuconfig/nabuconfig.py +2 -1
  200. tomwer/gui/reconstruction/nabu/nabuconfig/output.py +126 -35
  201. tomwer/gui/reconstruction/nabu/nabuconfig/phase.py +39 -32
  202. tomwer/gui/reconstruction/nabu/nabuconfig/preprocessing.py +222 -31
  203. tomwer/gui/reconstruction/nabu/nabuconfig/reconstruction.py +57 -27
  204. tomwer/gui/reconstruction/nabu/nabuflow.py +12 -20
  205. tomwer/gui/reconstruction/nabu/slices.py +10 -11
  206. tomwer/gui/reconstruction/nabu/volume.py +22 -10
  207. tomwer/gui/reconstruction/normalization/intensity.py +18 -48
  208. tomwer/gui/reconstruction/saaxis/corrangeselector.py +8 -24
  209. tomwer/gui/reconstruction/saaxis/dimensionwidget.py +1 -1
  210. tomwer/gui/reconstruction/saaxis/saaxis.py +9 -21
  211. tomwer/gui/reconstruction/sadeltabeta/saadeltabeta.py +45 -12
  212. tomwer/gui/reconstruction/scores/control.py +2 -9
  213. tomwer/gui/reconstruction/scores/scoreplot.py +13 -11
  214. tomwer/gui/reconstruction/test/test_axis.py +41 -16
  215. tomwer/gui/reconstruction/test/test_nabu.py +31 -9
  216. tomwer/gui/reconstruction/test/test_saaxis.py +3 -3
  217. tomwer/gui/reconstruction/test/test_sadeltabeta.py +12 -2
  218. tomwer/gui/settings.py +5 -28
  219. tomwer/gui/stackplot.py +2 -5
  220. tomwer/gui/stitching/action.py +49 -0
  221. tomwer/gui/stitching/config/axisparams.py +7 -24
  222. tomwer/gui/stitching/config/output.py +10 -8
  223. tomwer/gui/stitching/config/positionoveraxis.py +22 -23
  224. tomwer/gui/stitching/normalization.py +117 -0
  225. tomwer/gui/stitching/stitchandbackground.py +4 -6
  226. tomwer/gui/stitching/stitching.py +267 -45
  227. tomwer/gui/stitching/stitching_preview.py +62 -55
  228. tomwer/gui/stitching/stitching_raw.py +13 -12
  229. tomwer/gui/stitching/z_stitching/fineestimation.py +0 -60
  230. tomwer/gui/utils/buttons.py +112 -29
  231. tomwer/gui/utils/inputwidget.py +43 -25
  232. tomwer/gui/utils/lineselector/lineselector.py +1 -1
  233. tomwer/gui/utils/scandescription.py +4 -0
  234. tomwer/gui/utils/step.py +144 -0
  235. tomwer/gui/utils/unitsystem.py +2 -5
  236. tomwer/gui/utils/vignettes.py +176 -15
  237. tomwer/gui/visualization/dataviewer.py +48 -35
  238. tomwer/gui/visualization/diffviewer/diffviewer.py +7 -16
  239. tomwer/gui/visualization/diffviewer/shiftwidget.py +2 -5
  240. tomwer/gui/visualization/scanoverview.py +1 -1
  241. tomwer/gui/visualization/sinogramviewer.py +20 -36
  242. tomwer/gui/visualization/test/test_diffviewer.py +3 -3
  243. tomwer/gui/visualization/test/test_nx_tomo_metadata_viewer.py +4 -4
  244. tomwer/gui/visualization/test/test_sinogramviewer.py +2 -2
  245. tomwer/gui/visualization/test/test_stacks.py +3 -3
  246. tomwer/gui/visualization/test/test_volumeviewer.py +65 -67
  247. tomwer/gui/visualization/volumeviewer.py +114 -113
  248. tomwer/io/utils/h5pyutils.py +3 -3
  249. tomwer/io/utils/raw_and_processed_data.py +84 -0
  250. tomwer/io/utils/tomoobj.py +4 -6
  251. tomwer/io/utils/utils.py +7 -7
  252. tomwer/resources/gui/icons/parameters.svg +1 -1
  253. tomwer/resources/gui/icons/ruler.png +0 -0
  254. tomwer/resources/gui/icons/ruler.svg +273 -0
  255. tomwer/resources/gui/icons/short_description.png +0 -0
  256. tomwer/resources/gui/icons/short_description.svg +58 -0
  257. tomwer/resources/gui/icons/url.png +0 -0
  258. tomwer/resources/gui/icons/url.svg +58 -0
  259. tomwer/resources/gui/illustrations/no_rot.svg +1 -1
  260. tomwer/synctools/stacks/edit/darkflatpatch.py +19 -14
  261. tomwer/synctools/stacks/edit/imagekeyeditor.py +2 -2
  262. tomwer/synctools/stacks/reconstruction/axis.py +4 -4
  263. tomwer/synctools/stacks/reconstruction/castvolume.py +22 -7
  264. tomwer/synctools/stacks/reconstruction/dkrefcopy.py +25 -20
  265. tomwer/synctools/stacks/reconstruction/nabu.py +2 -2
  266. tomwer/synctools/stacks/reconstruction/normalization.py +2 -2
  267. tomwer/synctools/stacks/reconstruction/saaxis.py +2 -2
  268. tomwer/synctools/stacks/reconstruction/sadeltabeta.py +2 -2
  269. tomwer/synctools/test/test_darkRefs.py +7 -58
  270. tomwer/synctools/test/test_foldertransfer.py +6 -6
  271. tomwer/synctools/utils/scanstages.py +6 -6
  272. tomwer/tests/conftest.py +34 -0
  273. tomwer/tests/datasets.py +13 -0
  274. tomwer/tests/test_scripts.py +91 -41
  275. tomwer/tests/utils.py +5 -0
  276. tomwer/third_part/WaitingOverlay.py +110 -0
  277. tomwer/third_part/__init__.py +0 -0
  278. tomwer/version.py +2 -2
  279. tomwer-1.3.12-py3.11-nspkg.pth +1 -0
  280. {tomwer-1.2.1.dist-info → tomwer-1.3.12.dist-info}/METADATA +73 -58
  281. {tomwer-1.2.1.dist-info → tomwer-1.3.12.dist-info}/RECORD +287 -286
  282. {tomwer-1.2.1.dist-info → tomwer-1.3.12.dist-info}/WHEEL +1 -1
  283. orangecontrib/tomwer/widgets/reconstruction/TofuOW.py +0 -197
  284. orangecontrib/tomwer/widgets/reconstruction/icons/XY_lamino.svg +0 -168
  285. orangecontrib/tomwer/widgets/reconstruction/icons/XZ_lamino.svg +0 -275
  286. orangecontrib/tomwer/widgets/reconstruction/icons/YZ_lamino.svg +0 -182
  287. tomwer/app/lamino.py +0 -143
  288. tomwer/core/process/reconstruction/lamino/__init__.py +0 -1
  289. tomwer/core/process/reconstruction/lamino/tofu.py +0 -1000
  290. tomwer/core/process/test/test_lamino.py +0 -76
  291. tomwer/core/test/test_lamino.py +0 -92
  292. tomwer/gui/reconstruction/lamino/__init__.py +0 -31
  293. tomwer/gui/reconstruction/lamino/tofu/TofuOptionLoader.py +0 -107
  294. tomwer/gui/reconstruction/lamino/tofu/__init__.py +0 -1
  295. tomwer/gui/reconstruction/lamino/tofu/misc.py +0 -148
  296. tomwer/gui/reconstruction/lamino/tofu/projections.py +0 -896
  297. tomwer/gui/reconstruction/lamino/tofu/settings.py +0 -75
  298. tomwer/gui/reconstruction/lamino/tofu/tofu.py +0 -432
  299. tomwer/gui/reconstruction/lamino/tofu/tofuexpert.py +0 -567
  300. tomwer/gui/reconstruction/lamino/tofu/tofuoutput.py +0 -760
  301. tomwer/gui/reconstruction/test/test_lamino.py +0 -189
  302. tomwer/resources/gui/icons/esrf_1.svg +0 -307
  303. tomwer/resources/gui/icons/lamino_parameters.svg +0 -70
  304. tomwer/resources/gui/icons/triangle.svg +0 -80
  305. tomwer/resources/gui/illustrations/lamino_angle.png +0 -0
  306. tomwer/resources/gui/illustrations/lamino_angle.svg +0 -509
  307. tomwer/resources/gui/illustrations/lamino_beta_angle.png +0 -0
  308. tomwer/resources/gui/illustrations/lamino_beta_angle.svg +0 -97
  309. tomwer/resources/gui/illustrations/lamino_theta_angle.png +0 -0
  310. tomwer/resources/gui/illustrations/lamino_theta_angle.svg +0 -368
  311. tomwer/resources/gui/illustrations/manual_slice.png +0 -0
  312. tomwer/resources/gui/illustrations/manual_slice.svg +0 -221
  313. tomwer/resources/gui/illustrations/psi_angle.png +0 -0
  314. tomwer/resources/gui/illustrations/psi_angle.svg +0 -479
  315. tomwer/resources/gui/illustrations/rotation_center.png +0 -0
  316. tomwer/resources/gui/illustrations/rotation_center.svg +0 -276
  317. tomwer/resources/gui/illustrations/slice_stack.png +0 -0
  318. tomwer/resources/gui/illustrations/slice_stack.svg +0 -266
  319. tomwer/resources/gui/illustrations/xy_slice.png +0 -0
  320. tomwer/resources/gui/illustrations/xy_slice.svg +0 -269
  321. tomwer/resources/gui/illustrations/xz_slice.png +0 -0
  322. tomwer/resources/gui/illustrations/xz_slice.svg +0 -270
  323. tomwer/resources/gui/illustrations/yz_slice.png +0 -0
  324. tomwer/resources/gui/illustrations/yz_slice.svg +0 -270
  325. tomwer/synctools/stacks/reconstruction/lamino.py +0 -233
  326. tomwer/synctools/test/test_scanstages.py +0 -162
  327. tomwer/tests/utils/__init__.py +0 -247
  328. tomwer/tests/utils/utilstest.py +0 -220
  329. tomwer-1.2.1-py3.11-nspkg.pth +0 -1
  330. /tomwer/core/process/control/{email.py → emailnotifier.py} +0 -0
  331. {tomwer-1.2.1.dist-info → tomwer-1.3.12.dist-info}/LICENSE +0 -0
  332. {tomwer-1.2.1.dist-info → tomwer-1.3.12.dist-info}/entry_points.txt +0 -0
  333. {tomwer-1.2.1.dist-info → tomwer-1.3.12.dist-info}/namespace_packages.txt +0 -0
  334. {tomwer-1.2.1.dist-info → tomwer-1.3.12.dist-info}/top_level.txt +0 -0
@@ -3,6 +3,7 @@ import numpy
3
3
  from silx.gui import qt
4
4
 
5
5
  from tomwer.gui.stitching.axisorderedlist import AxisOrderedTomoObjsModel
6
+ from tomwer.gui.utils.step import StepSizeSelectorWidget
6
7
 
7
8
 
8
9
  class PosEditorOverOneAxis(qt.QWidget):
@@ -15,7 +16,6 @@ class PosEditorOverOneAxis(qt.QWidget):
15
16
  ) -> None:
16
17
  assert axis_edited in (0, 1, 2)
17
18
  super().__init__(parent, *args, **kwargs)
18
- self._stepSize = 1
19
19
  self._axisEdited = axis_edited
20
20
  # the axis the spin boxes are editing
21
21
  self._axisOrder = axis_order if axis_order is not None else axis_edited
@@ -25,7 +25,13 @@ class PosEditorOverOneAxis(qt.QWidget):
25
25
  self.__spinBoxescallback = {}
26
26
  self.setLayout(qt.QVBoxLayout())
27
27
  # widget to define step size
28
- self._stepSizeWidget = StepSizeWidget(self)
28
+ self._stepSizeWidget = StepSizeSelectorWidget(
29
+ self,
30
+ fine_value=1,
31
+ medium_value=5,
32
+ rough_value=25,
33
+ dtype=int,
34
+ )
29
35
  self.layout().addWidget(self._stepSizeWidget)
30
36
 
31
37
  # table with the different Tomo objects
@@ -35,22 +41,28 @@ class PosEditorOverOneAxis(qt.QWidget):
35
41
 
36
42
  self.layout().addWidget(self._tomoObjsTableView)
37
43
 
44
+ # connect signal / slot
45
+ self._stepSizeWidget.valueChanged.connect(self._updateStepSize)
46
+
38
47
  # tune table view
39
48
  self._tomoObjsTableView.setColumnWidth(0, 15)
40
49
  self._tomoObjsTableView.setColumnWidth(2, 120)
41
50
  self._tomoObjsTableView.horizontalHeader().setSectionResizeMode(
42
51
  1, qt.QHeaderView.Stretch
43
52
  )
53
+ self.setStepSize(1)
44
54
 
45
- # connect signal / slot
46
- self._stepSizeWidget.stepSB.valueChanged.connect(self.setStepSize)
47
- self._stepSize = 1
55
+ def _updateStepSize(self):
56
+ step_size = self.getStepSize()
57
+ for sb in self._tomoObjtoSpinBoxes.values():
58
+ sb.setSingleStep(step_size)
48
59
 
49
60
  def setStepSize(self, step_size: int):
50
- self._stepSize = step_size
51
- # update SB step size
52
- for sb in self._tomoObjtoSpinBoxes.values():
53
- sb.setSingleStep(self._stepSize)
61
+ self._stepSizeWidget.setStepSize(step_size)
62
+ self._updateStepSize()
63
+
64
+ def getStepSize(self) -> int:
65
+ return self._stepSizeWidget.getStepSize()
54
66
 
55
67
  def addTomoObj(self, tomo_obj):
56
68
  if tomo_obj is None:
@@ -68,7 +80,7 @@ class PosEditorOverOneAxis(qt.QWidget):
68
80
  spinBox = qt.QSpinBox(parent=self)
69
81
  spinBox.setRange(numpy.iinfo(numpy.int32).min, numpy.iinfo(numpy.int32).max)
70
82
  spinBox.setSuffix("px")
71
- spinBox.setSingleStep(self._stepSize)
83
+ spinBox.setSingleStep(self.getStepSize())
72
84
  spinBox.setValue(
73
85
  tomo_obj.stitching_metadata.get_abs_position_px(axis=self._axisEdited)
74
86
  or self.DEFAULT_VALUE_WHEM_MISSING
@@ -154,16 +166,3 @@ class EditableAxisOrderedTomoObjsModel(AxisOrderedTomoObjsModel):
154
166
  def __init__(self, axis: int, parent=None) -> None:
155
167
  super().__init__(axis, parent)
156
168
  self._headers = ["index", "tomo obj", f"axis {axis} pos (px)"]
157
-
158
-
159
- class StepSizeWidget(qt.QWidget):
160
- def __init__(self, parent=None) -> None:
161
- super().__init__(parent)
162
- self.setLayout(qt.QFormLayout())
163
- self._stepSB = qt.QSpinBox(self)
164
- self._stepSB.setRange(1, 9999)
165
- self.layout().addRow("step size", self._stepSB)
166
-
167
- @property
168
- def stepSB(self):
169
- return self._stepSB
@@ -0,0 +1,117 @@
1
+ from __future__ import annotations
2
+ from silx.gui import qt
3
+ from nabu.stitching.sample_normalization import (
4
+ SampleSide as _SampleSide,
5
+ Method as _SampleNormalizationMethod,
6
+ )
7
+ from nabu.stitching import config as _config_stitching
8
+ from tomwer.gui.utils.qt_utils import block_signals
9
+
10
+
11
+ class NormalizationBySampleGroupBox(qt.QGroupBox):
12
+ """
13
+ Widget to define the normalization to apply to frames"""
14
+
15
+ sigConfigChanged = qt.Signal()
16
+ """Emit when the configuration is changed"""
17
+
18
+ def __init__(self, title: str = "normalization by sample", parent=None):
19
+ # FIXME: add a way to the user for requesting a view of the region picked ???
20
+ super().__init__(title, parent)
21
+ self.setCheckable(True)
22
+ self.setLayout(qt.QFormLayout())
23
+
24
+ # method
25
+ self._methodCB = qt.QComboBox(self)
26
+ self._methodCB.addItems(_SampleNormalizationMethod.values())
27
+ self._methodCB.setCurrentText(_SampleNormalizationMethod.MEDIAN.value)
28
+ self.layout().addRow("method", self._methodCB)
29
+
30
+ # side
31
+ self._sideCB = qt.QComboBox(self)
32
+ self._sideCB.addItems(_SampleSide.values())
33
+ self._sideCB.setCurrentText(_SampleSide.LEFT.value)
34
+ self.layout().addRow("sampling side", self._sideCB)
35
+
36
+ # width
37
+ self._widthSB = qt.QSpinBox(self)
38
+ self._widthSB.setRange(1, 9999999)
39
+ self._widthSB.setValue(30)
40
+ self._widthSB.setSingleStep(10)
41
+ self.layout().addRow("sampling width", self._widthSB)
42
+
43
+ # margin
44
+ self._marginSB = qt.QSpinBox(self)
45
+ self._marginSB.setRange(0, 999999)
46
+ self._marginSB.setValue(0)
47
+ self.layout().addRow("sampling margin", self._marginSB)
48
+
49
+ # connect signal / slot
50
+ self._methodCB.currentIndexChanged.connect(self._configChanged)
51
+ self._sideCB.currentIndexChanged.connect(self._configChanged)
52
+ self._widthSB.valueChanged.connect(self._configChanged)
53
+ self._marginSB.valueChanged.connect(self._configChanged)
54
+
55
+ def _configChanged(self, *args, **kwargs):
56
+ self.sigConfigChanged.emit()
57
+
58
+ def getMethod(self) -> _SampleNormalizationMethod:
59
+ return _SampleNormalizationMethod.from_value(self._methodCB.currentText())
60
+
61
+ def setMethod(self, method: _SampleNormalizationMethod | str):
62
+ method = _SampleNormalizationMethod.from_value(method)
63
+ self._methodCB.setCurrentText(method.value)
64
+
65
+ def getSide(self) -> _SampleSide:
66
+ return _SampleSide.from_value(self._sideCB.currentText())
67
+
68
+ def setSide(self, side: _SampleSide):
69
+ side = _SampleSide.from_value(side)
70
+ self._sideCB.setCurrentText(side.value)
71
+
72
+ def getMargin(self) -> int:
73
+ return self._marginSB.value()
74
+
75
+ def setMargin(self, margin: int):
76
+ self._marginSB.setValue(int(margin))
77
+
78
+ def getWidth(self) -> int:
79
+ return self._widthSB.value()
80
+
81
+ def setWidth(self, width: int):
82
+ self._widthSB.setValue(int(width))
83
+
84
+ def getConfiguration(self) -> dict:
85
+ return {
86
+ _config_stitching.NORMALIZATION_BY_SAMPLE_ACTIVE_FIELD: self.isChecked(),
87
+ _config_stitching.NORMALIZATION_BY_SAMPLE_METHOD: self.getMethod().value,
88
+ _config_stitching.NORMALIZATION_BY_SAMPLE_SIDE: self.getSide().value,
89
+ _config_stitching.NORMALIZATION_BY_SAMPLE_MARGIN: self.getMargin(),
90
+ _config_stitching.NORMALIZATION_BY_SAMPLE_WIDTH: self.getWidth(),
91
+ }
92
+
93
+ def setConfiguration(self, config: dict) -> None:
94
+ with block_signals(self):
95
+ method = config.get(_config_stitching.NORMALIZATION_BY_SAMPLE_METHOD, None)
96
+ if method is not None:
97
+ self.setMethod(method=method)
98
+
99
+ side = config.get(_config_stitching.NORMALIZATION_BY_SAMPLE_SIDE, None)
100
+ if side is not None:
101
+ self.setSide(side=side)
102
+
103
+ margin = config.get(_config_stitching.NORMALIZATION_BY_SAMPLE_MARGIN, None)
104
+ if margin is not None:
105
+ self.setMargin(margin=margin)
106
+
107
+ width = config.get(_config_stitching.NORMALIZATION_BY_SAMPLE_WIDTH, None)
108
+ if width is not None:
109
+ self.setWidth(width=width)
110
+
111
+ active = config.get(
112
+ _config_stitching.NORMALIZATION_BY_SAMPLE_ACTIVE_FIELD, None
113
+ )
114
+ if active is not None:
115
+ self.setChecked(active in (True, 1, "1", "True"))
116
+
117
+ self._configChanged()
@@ -21,11 +21,11 @@ class AlphaChannelWidget(qt.QWidget):
21
21
  self._alphaImgSlider = qt.QSlider(qt.Qt.Horizontal, self)
22
22
  self._alphaImgSlider.setMinimumWidth(40)
23
23
  self._alphaImgSlider.setRange(0, 100)
24
- self.layout().addRow(f"{ALPHA_CHAR} stitching", self._alphaImgSlider)
24
+ self.layout().addRow(f"{ALPHA_CHAR} image", self._alphaImgSlider)
25
25
  self._alphaBackgroundSlider = qt.QSlider(qt.Qt.Horizontal, self)
26
26
  self._alphaBackgroundSlider.setMinimumWidth(40)
27
27
  self._alphaBackgroundSlider.setRange(0, 100)
28
- self.layout().addRow(f"{ALPHA_CHAR} background", self._alphaBackgroundSlider)
28
+ self.layout().addRow(f"{ALPHA_CHAR} overlay", self._alphaBackgroundSlider)
29
29
 
30
30
  # connect signal / slot
31
31
  self._alphaImgSlider.valueChanged.connect(self._alphaImgchanged)
@@ -62,8 +62,8 @@ class StitchAndBackgroundAlphaMixIn:
62
62
  self._stitched_image = None
63
63
  self._composition_background = None
64
64
  # background action to show / hide the backgrounds
65
- self._backGroundAction = qt.QAction("background", self)
66
- self._backGroundAction.setToolTip("show / hide colored background")
65
+ self._backGroundAction = qt.QAction("overlay", self)
66
+ self._backGroundAction.setToolTip("show / hide overlay on top of image")
67
67
  self._backGroundAction.setCheckable(True)
68
68
  save_icon = tomwer_icons.getQIcon("background")
69
69
  self._backGroundAction.setIcon(save_icon)
@@ -128,8 +128,6 @@ class StitchAndBackgroundAlphaMixIn:
128
128
  )
129
129
  background_data = self.getImage(legend=self.LEGEND_BACKGROUND)
130
130
  background_data.setAlpha(self.getBackgroundImgAlpha())
131
- # TODO: active image is always the image data
132
-
133
131
  else:
134
132
  if self.getImage(self.LEGEND_BACKGROUND) is not None:
135
133
  self.removeImage(self.LEGEND_BACKGROUND)