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
@@ -10,7 +10,7 @@ from silx.gui import qt
10
10
  from typing import Optional
11
11
 
12
12
  from tomwer.core.scan.scanbase import TomwerScanBase
13
- from tomwer.core.scan.hdf5scan import HDF5TomoScan
13
+ from tomwer.core.scan.nxtomoscan import NXtomoScan
14
14
  from tomwer.core.process.control.nxtomoconcatenate import (
15
15
  ConcatenateNXtomoTask,
16
16
  format_output_location,
@@ -34,7 +34,7 @@ class NXtomoConcatenateOW(
34
34
  # note of this widget should be the one registered on the documentation
35
35
  name = "NXtomo concatenation"
36
36
  id = "orangecontrib.tomwer.widgets.control.NXtomoConcatenate.NXtomoConcatenate"
37
- description = "concatenate a serie (of NXtomo / HDF5TomoScan) into a single Nxtomo"
37
+ description = "concatenate a serie (of NXtomo / NXtomoScan) into a single Nxtomo"
38
38
  icon = "icons/concatenate_nxtomos.svg"
39
39
  priority = 200
40
40
  keywords = [
@@ -44,7 +44,7 @@ class NXtomoConcatenateOW(
44
44
  "concatenate",
45
45
  "NXtomo",
46
46
  "data",
47
- "HDF5TomoScan",
47
+ "NXtomoScan",
48
48
  ]
49
49
 
50
50
  want_main_area = True
@@ -59,6 +59,13 @@ class NXtomoConcatenateOW(
59
59
  "overwrite": False,
60
60
  }
61
61
  )
62
+ _ewoks_inputs_to_hide_from_orange = (
63
+ "output_entry",
64
+ "serialize_output_data",
65
+ "progress",
66
+ "output_file",
67
+ "overwrite",
68
+ )
62
69
 
63
70
  TIMEOUT = 30
64
71
 
@@ -88,7 +95,12 @@ class NXtomoConcatenateOW(
88
95
  ## connect signal / slot
89
96
  self.widget.sigConfigChanged.connect(self._updateSettings)
90
97
 
91
- self.task_output_changed_callbacks.add(self._notify_state)
98
+ if isinstance(self.task_output_changed_callbacks, set):
99
+ self.task_output_changed_callbacks.add(self._notify_state)
100
+ elif isinstance(self.task_output_changed_callbacks, list):
101
+ self.task_output_changed_callbacks.append(self._notify_state)
102
+ else:
103
+ raise NotImplementedError
92
104
 
93
105
  ## handle settings
94
106
  self._loadSettings()
@@ -124,9 +136,9 @@ class NXtomoConcatenateOW(
124
136
  # task will be executed only when the user validates the dialog
125
137
  data = super().get_task_inputs().get("data", None)
126
138
  if data is not None:
127
- if not isinstance(data, HDF5TomoScan):
139
+ if not isinstance(data, NXtomoScan):
128
140
  raise TypeError(
129
- f"data is expected to be an instance of HDF5TomoScan. {type(data)} are not handled"
141
+ f"data is expected to be an instance of NXtomoScan. {type(data)} are not handled"
130
142
  )
131
143
  self.add(data.path)
132
144
 
@@ -136,7 +148,7 @@ class NXtomoConcatenateOW(
136
148
  def _newTaskStarted(self):
137
149
  try:
138
150
  task_executor = self.sender()
139
- scan_about_to_be_created = HDF5TomoScan(
151
+ scan_about_to_be_created = NXtomoScan(
140
152
  scan=format_output_location(
141
153
  file_path=task_executor.current_task.inputs.output_file_path,
142
154
  serie=task_executor.current_task.inputs.serie,
@@ -168,7 +180,7 @@ class NXtomoConcatenateOW(
168
180
  return
169
181
  else:
170
182
  self.__serie = serie
171
- scan_about_to_be_created = HDF5TomoScan(
183
+ scan_about_to_be_created = NXtomoScan(
172
184
  scan=format_output_location(
173
185
  file_path=self.getOutputFilePath(),
174
186
  serie=serie,
@@ -47,6 +47,7 @@ class NotifierWidgetOW(widget.OWBaseWidget):
47
47
  keywords = ["control", "notifier", "notification"]
48
48
 
49
49
  want_main_area = True
50
+ want_control_area = False
50
51
  resizing_enabled = False
51
52
 
52
53
  _muted = settings.Setting(False)
@@ -147,9 +147,9 @@ class SingleTomoObjOW(OWBaseWidget, openclass=True):
147
147
  reduced_frames=data.reduced_darks, scan=data
148
148
  )
149
149
  )
150
- reduced_darks[
151
- "reduce_frames_name"
152
- ] = f"darks from {data.get_identifier().short_description()}"
150
+ reduced_darks["reduce_frames_name"] = (
151
+ f"darks from {data.get_identifier().short_description()}"
152
+ )
153
153
  self.Outputs.relative_reduced_darks.send(reduced_darks)
154
154
 
155
155
  if data.reduced_flats not in (None, {}):
@@ -162,7 +162,7 @@ class SingleTomoObjOW(OWBaseWidget, openclass=True):
162
162
  reduced_frames=data.reduced_flats, scan=data
163
163
  )
164
164
  )
165
- reduced_flats[
166
- "reduce_frames_name"
167
- ] = f"flats from {data.get_identifier().short_description()}"
165
+ reduced_flats["reduce_frames_name"] = (
166
+ f"flats from {data.get_identifier().short_description()}"
167
+ )
168
168
  self.Outputs.relative_reduced_flats.send(reduced_flats)
@@ -37,7 +37,7 @@ from orangewidget.widget import Input, Output, OWBaseWidget
37
37
  from silx.gui import qt
38
38
 
39
39
  import tomwer.core.process.control.volumeselector
40
- from tomwer.core.scan.hdf5scan import HDF5TomoScan
40
+ from tomwer.core.scan.nxtomoscan import NXtomoScan
41
41
  from tomwer.core.volume.volumebase import TomwerVolumeBase
42
42
  from tomwer.gui.control.volumeselectorwidget import VolumeSelectorWidget
43
43
 
@@ -88,7 +88,10 @@ class VolumeSelectorOW(OWBaseWidget, openclass=True):
88
88
  self.add = self.widget.add
89
89
 
90
90
  @Inputs.volume
91
- def addVolume(self, volume, *args, **kwargs):
91
+ def _volumeReceived(self, volume, *args, **kwargs):
92
+ self.addVolume(volume)
93
+
94
+ def addVolume(self, volume):
92
95
  if volume is not None:
93
96
  self.widget.add(volume)
94
97
 
@@ -119,8 +122,8 @@ class VolumeSelectorOW(OWBaseWidget, openclass=True):
119
122
  # kept for backward compatibility since 0.11. To be removed on the future version.
120
123
  if "@" in scan:
121
124
  entry, file_path = scan.split("@")
122
- hdf5_tomo_scan = HDF5TomoScan(entry=entry, scan=file_path)
123
- self.addVolume(hdf5_tomo_scan)
125
+ nxtomo_scan = NXtomoScan(entry=entry, scan=file_path)
126
+ self.addVolume(nxtomo_scan)
124
127
  else:
125
128
  self.addVolume(scan)
126
129
 
@@ -1,182 +1,182 @@
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__ = "16/11/2020"
29
-
30
-
31
- import logging
32
-
33
- from orangewidget import gui
34
- from orangewidget.settings import Setting
35
- from orangewidget.widget import Input, Output
36
- from processview.core.manager import DatasetState, ProcessManager
37
- from silx.gui import qt
38
-
39
- import tomwer.core.process.control.volumesymlink
40
- from orangecontrib.tomwer.orange.managedprocess import SuperviseOW
41
- from tomwer.core.process.control.volumesymlink import (
42
- OutputType,
43
- VolumeSymbolicLinkTask,
44
- )
45
- from tomwer.core.scan.scanbase import TomwerScanBase
46
-
47
- _logger = logging.getLogger(__name__)
48
-
49
-
50
- class VolumeSymLinkOW(SuperviseOW):
51
- """
52
- link volume reconstructed at proposal file if possible else under
53
- the given folder
54
- """
55
-
56
- name = "volume symbolic link"
57
- id = "orange.widgets.tomwer.control.VolumeSymLinkOW.VolumeSymLinkOW"
58
- description = (
59
- "create a symbolic link for the latest volume reconstructed on a "
60
- "given folder"
61
- )
62
- icon = "icons/volumesymlink.svg"
63
- priority = 200
64
- keywords = [
65
- "hdf5",
66
- "tomwer",
67
- "folder",
68
- "volume",
69
- "symlink",
70
- "tomography",
71
- "symbolic link",
72
- ]
73
-
74
- want_main_area = True
75
- resizing_enabled = True
76
-
77
- ewokstaskclass = tomwer.core.process.control.volumesymlink.VolumeSymbolicLinkTask
78
-
79
- _scans = Setting(list())
80
-
81
- class Inputs:
82
- data = Input(name="data", type=TomwerScanBase, doc="scan to be process")
83
-
84
- class Outputs:
85
- data = Output(name="data", type=TomwerScanBase, doc="one scan to be process")
86
-
87
- def __init__(self, parent=None):
88
- super().__init__(parent)
89
- self._mainWidget = _OutputDir(parent=self)
90
- layout = gui.vBox(self.mainArea, self.name).layout()
91
- layout.addWidget(self._mainWidget)
92
-
93
- @Inputs.data
94
- def process(self, scan):
95
- if scan is None:
96
- return
97
- symlink_process = VolumeSymbolicLinkTask(
98
- inputs={
99
- "data": scan,
100
- "output_type": self._mainWidget.getOutputType(),
101
- "output_folder": self._mainWidget.getOutputFolder(),
102
- "serialize_output_data": False,
103
- }
104
- )
105
- ProcessManager().notify_dataset_state(
106
- dataset=self.scan,
107
- process=self,
108
- state=DatasetState.ON_GOING,
109
- )
110
- try:
111
- symlink_process.run()
112
- except Exception:
113
- mess = f"Failed to create symbolic link for {scan}"
114
- _logger.processFailed(mess)
115
- ProcessManager().notify_dataset_state(
116
- dataset=self.scan, process=self, state=DatasetState.FAILED, details=mess
117
- )
118
- else:
119
- mess = f"Create symbolic link for {scan}"
120
- _logger.processSucceed(mess)
121
- ProcessManager().notify_dataset_state(
122
- dataset=self.scan,
123
- process=self,
124
- state=DatasetState.SUCCEED,
125
- details=mess,
126
- )
127
- self.Outputs.data.send(scan)
128
-
129
- def reprocess(self, dataset):
130
- self.process(dataset)
131
-
132
-
133
- class _OutputDir(qt.QGroupBox):
134
- def __init__(self, parent):
135
- qt.QGroupBox.__init__(self, parent)
136
- self._button_grp = qt.QButtonGroup(self)
137
- self._button_grp.setExclusive(True)
138
- self.setLayout(qt.QGridLayout())
139
- self._oneLevelCB = qt.QRadioButton(OutputType.ONE_LEVEL_UPPER.value, self)
140
- self._button_grp.addButton(self._oneLevelCB)
141
- self.layout().addWidget(self._oneLevelCB, 1, 0, 1, 3)
142
- self._staticOpt = qt.QRadioButton("", self)
143
- self._button_grp.addButton(self._staticOpt)
144
- self.layout().addWidget(self._staticOpt, 2, 0, 1, 1)
145
- self._qleFolder = qt.QLineEdit("", self)
146
- self.layout().addWidget(self._qleFolder, 2, 1, 1, 1)
147
- self._selectPB = qt.QPushButton("select", self)
148
- self.layout().addWidget(self._selectPB, 2, 2, 1, 1)
149
-
150
- # connect signal / slot
151
- self._selectPB.released.connect(self._selectFolder)
152
- self._qleFolder.editingFinished.connect(self._activeStaticOpt)
153
-
154
- # set up
155
- self._oneLevelCB.setChecked(True)
156
-
157
- def _activeStaticOpt(self, *args, **kwargs):
158
- self._staticOpt.setChecked(True)
159
-
160
- def _selectFolder(self): # pragma: no cover
161
- dialog = qt.QFileDialog(self)
162
- dialog.setWindowTitle("Select destination folder for symbolic link")
163
- dialog.setModal(1)
164
- dialog.setFileMode(qt.QFileDialog.DirectoryOnly)
165
-
166
- if not dialog.exec_():
167
- dialog.close()
168
- return None
169
-
170
- dest_folder = dialog.selectedFiles()[0]
171
- self._qleFolder.setText(dest_folder)
172
-
173
- def getOutputType(self) -> OutputType:
174
- if self._oneLevelCB.isChecked():
175
- return OutputType.ONE_LEVEL_UPPER
176
- elif self._staticOpt.isChecked():
177
- return OutputType.STATIC
178
- else:
179
- raise TypeError("Not managed")
180
-
181
- def getOutputFolder(self):
182
- return self._qleFolder.text()
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__ = "16/11/2020"
29
+
30
+
31
+ # import logging
32
+
33
+ # from orangewidget import gui
34
+ # from orangewidget.settings import Setting
35
+ # from orangewidget.widget import Input, Output
36
+ # from processview.core.manager import DatasetState, ProcessManager
37
+ # from silx.gui import qt
38
+
39
+ # import tomwer.core.process.control.volumesymlink
40
+ # from orangecontrib.tomwer.orange.managedprocess import SuperviseOW
41
+ # from tomwer.core.process.control.volumesymlink import (
42
+ # OutputType,
43
+ # VolumeSymbolicLinkTask,
44
+ # )
45
+ # from tomwer.core.scan.scanbase import TomwerScanBase
46
+
47
+ # _logger = logging.getLogger(__name__)
48
+
49
+
50
+ # class VolumeSymLinkOW(SuperviseOW):
51
+ # """
52
+ # link volume reconstructed at proposal file if possible else under
53
+ # the given folder
54
+ # """
55
+
56
+ # name = "volume symbolic link"
57
+ # id = "orange.widgets.tomwer.control.VolumeSymLinkOW.VolumeSymLinkOW"
58
+ # description = (
59
+ # "create a symbolic link for the latest volume reconstructed on a "
60
+ # "given folder"
61
+ # )
62
+ # icon = "icons/volumesymlink.svg"
63
+ # priority = 200
64
+ # keywords = [
65
+ # "hdf5",
66
+ # "tomwer",
67
+ # "folder",
68
+ # "volume",
69
+ # "symlink",
70
+ # "tomography",
71
+ # "symbolic link",
72
+ # ]
73
+
74
+ # want_main_area = True
75
+ # resizing_enabled = True
76
+
77
+ # ewokstaskclass = tomwer.core.process.control.volumesymlink.VolumeSymbolicLinkTask
78
+
79
+ # _scans = Setting(list())
80
+
81
+ # class Inputs:
82
+ # data = Input(name="data", type=TomwerScanBase, doc="scan to be process")
83
+
84
+ # class Outputs:
85
+ # data = Output(name="data", type=TomwerScanBase, doc="one scan to be process")
86
+
87
+ # def __init__(self, parent=None):
88
+ # super().__init__(parent)
89
+ # self._mainWidget = _OutputDir(parent=self)
90
+ # layout = gui.vBox(self.mainArea, self.name).layout()
91
+ # layout.addWidget(self._mainWidget)
92
+
93
+ # @Inputs.data
94
+ # def process(self, scan):
95
+ # if scan is None:
96
+ # return
97
+ # symlink_process = VolumeSymbolicLinkTask(
98
+ # inputs={
99
+ # "data": scan,
100
+ # "output_type": self._mainWidget.getOutputType(),
101
+ # "output_folder": self._mainWidget.getOutputFolder(),
102
+ # "serialize_output_data": False,
103
+ # }
104
+ # )
105
+ # ProcessManager().notify_dataset_state(
106
+ # dataset=self.scan,
107
+ # process=self,
108
+ # state=DatasetState.ON_GOING,
109
+ # )
110
+ # try:
111
+ # symlink_process.run()
112
+ # except Exception:
113
+ # mess = f"Failed to create symbolic link for {scan}"
114
+ # _logger.processFailed(mess)
115
+ # ProcessManager().notify_dataset_state(
116
+ # dataset=self.scan, process=self, state=DatasetState.FAILED, details=mess
117
+ # )
118
+ # else:
119
+ # mess = f"Create symbolic link for {scan}"
120
+ # _logger.processSucceed(mess)
121
+ # ProcessManager().notify_dataset_state(
122
+ # dataset=self.scan,
123
+ # process=self,
124
+ # state=DatasetState.SUCCEED,
125
+ # details=mess,
126
+ # )
127
+ # self.Outputs.data.send(scan)
128
+
129
+ # def reprocess(self, dataset):
130
+ # self.process(dataset)
131
+
132
+
133
+ # class _OutputDir(qt.QGroupBox):
134
+ # def __init__(self, parent):
135
+ # qt.QGroupBox.__init__(self, parent)
136
+ # self._button_grp = qt.QButtonGroup(self)
137
+ # self._button_grp.setExclusive(True)
138
+ # self.setLayout(qt.QGridLayout())
139
+ # self._oneLevelCB = qt.QRadioButton(OutputType.ONE_LEVEL_UPPER.value, self)
140
+ # self._button_grp.addButton(self._oneLevelCB)
141
+ # self.layout().addWidget(self._oneLevelCB, 1, 0, 1, 3)
142
+ # self._staticOpt = qt.QRadioButton("", self)
143
+ # self._button_grp.addButton(self._staticOpt)
144
+ # self.layout().addWidget(self._staticOpt, 2, 0, 1, 1)
145
+ # self._qleFolder = qt.QLineEdit("", self)
146
+ # self.layout().addWidget(self._qleFolder, 2, 1, 1, 1)
147
+ # self._selectPB = qt.QPushButton("select", self)
148
+ # self.layout().addWidget(self._selectPB, 2, 2, 1, 1)
149
+
150
+ # # connect signal / slot
151
+ # self._selectPB.released.connect(self._selectFolder)
152
+ # self._qleFolder.editingFinished.connect(self._activeStaticOpt)
153
+
154
+ # # set up
155
+ # self._oneLevelCB.setChecked(True)
156
+
157
+ # def _activeStaticOpt(self, *args, **kwargs):
158
+ # self._staticOpt.setChecked(True)
159
+
160
+ # def _selectFolder(self): # pragma: no cover
161
+ # dialog = qt.QFileDialog(self)
162
+ # dialog.setWindowTitle("Select destination folder for symbolic link")
163
+ # dialog.setModal(1)
164
+ # dialog.setFileMode(qt.QFileDialog.DirectoryOnly)
165
+
166
+ # if not dialog.exec_():
167
+ # dialog.close()
168
+ # return None
169
+
170
+ # dest_folder = dialog.selectedFiles()[0]
171
+ # self._qleFolder.setText(dest_folder)
172
+
173
+ # def getOutputType(self) -> OutputType:
174
+ # if self._oneLevelCB.isChecked():
175
+ # return OutputType.ONE_LEVEL_UPPER
176
+ # elif self._staticOpt.isChecked():
177
+ # return OutputType.STATIC
178
+ # else:
179
+ # raise TypeError("Not managed")
180
+
181
+ # def getOutputFolder(self):
182
+ # return self._qleFolder.text()
@@ -41,8 +41,8 @@ from silx.gui.utils import concurrent
41
41
 
42
42
  from tomwer.core.scan.blissscan import BlissScan
43
43
  from tomwer.core.scan.edfscan import EDFTomoScan
44
- from tomwer.core.scan.hdf5scan import HDF5TomoScan
45
- from tomwer.core.utils.scanutils import MockBlissAcquisition, MockEDF, MockHDF5
44
+ from tomwer.core.scan.nxtomoscan import NXtomoScan
45
+ from tomwer.core.utils.scanutils import MockBlissAcquisition, MockEDF, MockNXtomo
46
46
  from tomwer.gui.debugtools.datasetgenerator import DatasetGeneratorDialog
47
47
 
48
48
 
@@ -150,13 +150,13 @@ class _DatasetGeneratorThread(threading.Thread):
150
150
  scan = MockEDF.mockScan(
151
151
  scanID=self.scan_path, nRadio=self.n_proj, dim=self.dims[0]
152
152
  )
153
- elif self.type_to_generate == HDF5TomoScan.__name__:
154
- scan = MockHDF5(
153
+ elif self.type_to_generate == NXtomoScan.__name__:
154
+ scan = MockNXtomo(
155
155
  scan_path=self.scan_path,
156
156
  n_proj=self.n_proj,
157
157
  n_ini_proj=self.n_proj,
158
158
  create_ini_dark=self.create_ini_dark,
159
- create_ini_ref=self.create_ini_flat,
159
+ create_ini_flat=self.create_ini_flat,
160
160
  dim=self.dims[0],
161
161
  ).scan
162
162
  elif self.type_to_generate == BlissScan.__name__:
@@ -38,7 +38,7 @@ from orangewidget.widget import Input, Output
38
38
  from silx.io.url import DataUrl
39
39
 
40
40
  import tomwer.core.process.edit.darkflatpatch
41
- from tomwer.core.scan.hdf5scan import HDF5TomoScan
41
+ from tomwer.core.scan.nxtomoscan import NXtomoScan
42
42
  from tomwer.core.scan.scanbase import TomwerScanBase
43
43
  from tomwer.gui.edit.dkrfpatch import DarkRefPatchWidget
44
44
  from tomwer.synctools.stacks.edit.darkflatpatch import DarkFlatPatchProcessStack
@@ -52,7 +52,7 @@ _logger = logging.getLogger(__name__)
52
52
 
53
53
  class DarkFlatPatchOW(WidgetLongProcessing, SuperviseOW):
54
54
  """
55
- Widget to define on the fly the image_key of a HDF5TomoScan
55
+ Widget to define on the fly the image_key of a NXtomoScan
56
56
  """
57
57
 
58
58
  name = "dark-flat-patch"
@@ -110,8 +110,8 @@ class DarkFlatPatchOW(WidgetLongProcessing, SuperviseOW):
110
110
  def process(self, scan):
111
111
  if scan is None:
112
112
  return
113
- elif not isinstance(scan, HDF5TomoScan):
114
- _logger.error("We can only patch dark and flat for HDF5TomoScan")
113
+ elif not isinstance(scan, NXtomoScan):
114
+ _logger.error("We can only patch dark and flat for NXtomoScan")
115
115
  else:
116
116
  self._processingStack.add(scan, self.getConfiguration())
117
117
 
@@ -35,7 +35,7 @@ from orangewidget import gui
35
35
  from orangewidget.widget import Input, Output
36
36
 
37
37
  import tomwer.core.process.edit.imagekeyeditor
38
- from tomwer.core.scan.hdf5scan import HDF5TomoScan
38
+ from tomwer.core.scan.nxtomoscan import NXtomoScan
39
39
  from tomwer.core.scan.scanbase import TomwerScanBase
40
40
  from tomwer.gui.edit.imagekeyeditor import ImageKeyDialog
41
41
  from tomwer.synctools.stacks.edit.imagekeyeditor import ImageKeyEditorProcessStack
@@ -49,7 +49,7 @@ _logger = logging.getLogger(__name__)
49
49
 
50
50
  class ImageKeyEditorOW(SuperviseOW, WidgetLongProcessing):
51
51
  """
52
- Widget to define on the fly the image_key of a HDF5TomoScan
52
+ Widget to define on the fly the image_key of a NXtomoScan
53
53
  """
54
54
 
55
55
  name = "image-key-editor"
@@ -103,7 +103,7 @@ class ImageKeyEditorOW(SuperviseOW, WidgetLongProcessing):
103
103
  def process(self, scan):
104
104
  if scan is None:
105
105
  return
106
- elif not isinstance(scan, HDF5TomoScan):
106
+ elif not isinstance(scan, NXtomoScan):
107
107
  _logger.error("You can only edit image keys for the HDF5 scans")
108
108
  else:
109
109
  self._scan = scan
@@ -71,6 +71,8 @@ class ImageKeyUpgraderOW(
71
71
  want_main_area = True
72
72
  resizing_enabled = True
73
73
 
74
+ _ewoks_inputs_to_hide_from_orange = ("operations", "serialize_output_data")
75
+
74
76
  def __init__(self, parent=None, *args, **kwargs):
75
77
  super().__init__(parent=parent, *args, **kwargs)
76
78
 
@@ -79,7 +81,12 @@ class ImageKeyUpgraderOW(
79
81
  _layout.addWidget(self.widget)
80
82
 
81
83
  # connect signal / slot
82
- self.task_output_changed_callbacks.add(self._notify_state)
84
+ if isinstance(self.task_output_changed_callbacks, set):
85
+ self.task_output_changed_callbacks.add(self._notify_state)
86
+ elif isinstance(self.task_output_changed_callbacks, list):
87
+ self.task_output_changed_callbacks.append(self._notify_state)
88
+ else:
89
+ raise NotImplementedError
83
90
  self.widget.sigOperationsChanged.connect(self._update_operations_to_ewoks)
84
91
 
85
92
  self._updateGUIFromDefaultValues()
@@ -5,7 +5,7 @@ from orangewidget.settings import Setting
5
5
  from orangewidget.widget import Input, Output
6
6
  from silx.gui import qt
7
7
 
8
- from tomwer.core.scan.hdf5scan import HDF5TomoScan
8
+ from tomwer.core.scan.nxtomoscan import NXtomoScan
9
9
  from tomwer.core.scan.scanbase import TomwerScanBase
10
10
  from tomwer.gui.edit.nxtomoeditor import NXtomoEditorDialog as _NXtomoEditorDialog
11
11
 
@@ -104,9 +104,9 @@ class NXtomoEditorOW(SuperviseOW):
104
104
  def _setScan(self, scan):
105
105
  if scan is None:
106
106
  pass
107
- elif not isinstance(scan, HDF5TomoScan):
107
+ elif not isinstance(scan, NXtomoScan):
108
108
  raise TypeError(
109
- f"expect to have an instance of {HDF5TomoScan}. {type(scan)} provided."
109
+ f"expect to have an instance of {NXtomoScan}. {type(scan)} provided."
110
110
  )
111
111
  else:
112
112
  self.widget.setScan(scan)