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
tomwer/core/settings.py CHANGED
@@ -92,6 +92,7 @@ class SlurmSettingsMode(_Enum):
92
92
  CAST_VOLUME = "cast_volume"
93
93
  SLICE_RECONSTRUCTION = "slice_reconstruction"
94
94
  VOLUME_RECONSTRUCTION = "volume_reconstruction"
95
+ STITCHING = "stitching"
95
96
 
96
97
  @staticmethod
97
98
  def get_settings_class(mode):
@@ -106,6 +107,8 @@ class SlurmSettingsMode(_Enum):
106
107
  return DefaultSlurmSettingsSliceReconstruction
107
108
  elif mode is SlurmSettingsMode.VOLUME_RECONSTRUCTION:
108
109
  return DefaultSlurmSettingsVolumeReconstruction
110
+ elif mode is SlurmSettingsMode.STITCHING:
111
+ return DefaultSlurmSettingsStitching
109
112
  else:
110
113
  raise ValueError(f"{mode} not handled")
111
114
 
@@ -122,7 +125,7 @@ class SlurmSettings:
122
125
  N_JOBS = 1
123
126
  """on how many job we want to split the EwoksTask"""
124
127
 
125
- MEMORY_PER_WORKER = 64 # memory in GB
128
+ MEMORY_PER_WORKER = 128 # memory in GB
126
129
  """Amount of memory per worker"""
127
130
 
128
131
  PARTITION = "p9gpu"
@@ -133,7 +136,7 @@ class SlurmSettings:
133
136
  N_GPUS_PER_WORKER = 1
134
137
  """number of gpu per worker"""
135
138
 
136
- PYTHON_VENV = "/scisoft/tomotools/activate stable"
139
+ PYTHON_VENV = None
137
140
  """Python executable to take. Useful if compute nodes have a different environment from the front end.
138
141
  """
139
142
 
@@ -141,6 +144,12 @@ class SlurmSettings:
141
144
  """Slurm cluster project name. `scan`, `process` and `info` will be format.
142
145
  """
143
146
 
147
+ MODULES_TO_LOAD = ("tomotools/stable", )
148
+
149
+ SBATCH_EXTRA_PARAMS = {
150
+ "export": "NONE", # value to provide to sbatch --export={}
151
+ }
152
+
144
153
 
145
154
  class DefaultSlurmSettingsCastVolume(SlurmSettings):
146
155
  """
@@ -171,3 +180,14 @@ class DefaultSlurmSettingsVolumeReconstruction(SlurmSettings):
171
180
  MEMORY_PER_WORKER = 256 # memory in GB
172
181
 
173
182
  PARTITION = None
183
+
184
+
185
+ class DefaultSlurmSettingsStitching(SlurmSettings):
186
+ """*
187
+ default proposed configuration for stitching
188
+ """
189
+ N_JOBS = 15
190
+
191
+ PARTITION = "nice-long"
192
+
193
+ N_GPUS_PER_WORKER = 0
@@ -31,22 +31,23 @@ import os
31
31
  import tempfile
32
32
  import unittest
33
33
 
34
- from tomwer.core.scan.hdf5scan import HDF5TomoScan
35
- from tomwer.core.utils.scanutils import MockHDF5
34
+ from nxtomo.application.nxtomo import NXtomo
35
+ from tomwer.core.scan.nxtomoscan import NXtomoScan
36
+ from tomwer.core.utils.scanutils import MockNXtomo
36
37
 
37
38
 
38
- class TestMockHDF5(unittest.TestCase):
39
- """Test the MockHDF5 file"""
39
+ class TestMockNXtomo(unittest.TestCase):
40
+ """Test the MockNXtomo file"""
40
41
 
41
42
  def test_creation(self):
42
43
  folder = tempfile.mkdtemp()
43
- mock = MockHDF5(scan_path=folder, n_proj=10, n_ini_proj=10)
44
+ mock = MockNXtomo(scan_path=folder, n_proj=10, n_ini_proj=10)
44
45
  self.assertEqual(
45
46
  mock.scan_master_file,
46
47
  os.path.join(folder, os.path.basename(folder) + ".h5"),
47
48
  )
48
- tomoScan = HDF5TomoScan(mock.scan_path, entry=mock.scan_entry)
49
- self.assertEqual(len(HDF5TomoScan.get_valid_entries(mock.scan_master_file)), 1)
49
+ tomoScan = NXtomoScan(mock.scan_path, entry=mock.scan_entry)
50
+ self.assertEqual(len(NXtomo.get_valid_entries(mock.scan_master_file)), 1)
50
51
  tomoScan.update()
51
52
  self.assertEqual(tomoScan.scan_range, 360)
52
53
  self.assertEqual(len(tomoScan.projections), 10)
@@ -35,22 +35,29 @@ import unittest
35
35
 
36
36
  import numpy
37
37
 
38
- from tomwer.core import utils
38
+ from tomwer.core.utils import spec as spec_utils
39
39
  from tomwer.core.utils.normalization import flatFieldCorrection
40
- from tomwer.core.utils.scanutils import MockEDF, MockHDF5
41
- from tomwer.tests.utils import UtilsTest
40
+ from tomwer.core.utils.scanutils import MockEDF, MockNXtomo
41
+ from tomwer.tests.datasets import TomwerCIDatasets
42
42
 
43
43
 
44
44
  class TestGetClosestEnergy(unittest.TestCase):
45
45
  def setUp(self):
46
46
  self.topSrcFolder = tempfile.mkdtemp()
47
47
  self.dataSetID = "scan_3_"
48
- self.dataDir = UtilsTest.getEDFDataset(self.dataSetID)
48
+ self.dataDir = TomwerCIDatasets.get_dataset(
49
+ f"edf_datasets/{self.dataSetID}",
50
+ )
49
51
  self.sourceS3 = os.path.join(self.topSrcFolder, self.dataSetID)
50
52
  shutil.copytree(src=os.path.join(self.dataDir), dst=self.sourceS3)
51
53
 
52
54
  self.sourceT01 = os.path.join(self.topSrcFolder, "test01")
53
- shutil.copytree(src=UtilsTest.getEDFDataset("test01"), dst=self.sourceT01)
55
+ shutil.copytree(
56
+ src=TomwerCIDatasets.get_dataset(
57
+ "edf_datasets/test01",
58
+ ),
59
+ dst=self.sourceT01,
60
+ )
54
61
  self.S3XMLFile = os.path.join(self.sourceS3, "scan_3_.xml")
55
62
  self.S3Ref0000 = os.path.join(self.sourceS3, "ref0000_0000.edf")
56
63
  self.S3Ref0010 = os.path.join(self.sourceS3, "ref0000_0010.edf")
@@ -61,34 +68,42 @@ class TestGetClosestEnergy(unittest.TestCase):
61
68
  def testEnergyFromEDF(self):
62
69
  os.remove(self.S3XMLFile)
63
70
  self.assertTrue(
64
- utils.getClosestEnergy(scan=self.sourceS3, refFile=self.S3Ref0000) == 61
71
+ spec_utils.getClosestEnergy(scan=self.sourceS3, refFile=self.S3Ref0000)
72
+ == 61
65
73
  )
66
74
  self.assertTrue(
67
- utils.getClosestEnergy(scan=self.sourceS3, refFile=self.S3Ref0010) == 61
75
+ spec_utils.getClosestEnergy(scan=self.sourceS3, refFile=self.S3Ref0010)
76
+ == 61
68
77
  )
69
78
 
70
79
  def testEnergyFromXML(self):
71
80
  os.remove(self.S3Ref0000)
72
81
  os.remove(self.S3Ref0010)
73
82
  self.assertTrue(
74
- utils.getClosestEnergy(scan=self.sourceS3, refFile=self.S3Ref0000) == 10
83
+ spec_utils.getClosestEnergy(scan=self.sourceS3, refFile=self.S3Ref0000)
84
+ == 10
75
85
  )
76
86
  self.assertTrue(
77
- utils.getClosestEnergy(scan=self.sourceS3, refFile=self.S3Ref0010) == 10
87
+ spec_utils.getClosestEnergy(scan=self.sourceS3, refFile=self.S3Ref0010)
88
+ == 10
78
89
  )
79
90
 
80
91
  def testEnergyFromInfo(self):
81
- self.assertTrue(utils.getClosestEnergy(scan=self.sourceT01, refFile=None) == 19)
92
+ self.assertTrue(
93
+ spec_utils.getClosestEnergy(scan=self.sourceT01, refFile=None) == 19
94
+ )
82
95
 
83
96
  def testDefaultEnergy(self):
84
97
  os.remove(self.S3XMLFile)
85
98
  os.remove(self.S3Ref0000)
86
99
  os.remove(self.S3Ref0010)
87
100
  self.assertTrue(
88
- utils.getClosestEnergy(scan=self.sourceS3, refFile=self.S3Ref0000) is None
101
+ spec_utils.getClosestEnergy(scan=self.sourceS3, refFile=self.S3Ref0000)
102
+ is None
89
103
  )
90
104
  self.assertTrue(
91
- utils.getClosestEnergy(scan=self.sourceS3, refFile=self.S3Ref0010) is None
105
+ spec_utils.getClosestEnergy(scan=self.sourceS3, refFile=self.S3Ref0010)
106
+ is None
92
107
  )
93
108
 
94
109
 
@@ -96,7 +111,9 @@ class TestGetClosestSREnergy(unittest.TestCase):
96
111
  def setUp(self):
97
112
  self.topSrcFolder = tempfile.mkdtemp()
98
113
  self.dataSetID = "test10"
99
- self.dataDir = UtilsTest.getEDFDataset(self.dataSetID)
114
+ self.dataDir = TomwerCIDatasets.get_dataset(
115
+ f"edf_datasets/{self.dataSetID}",
116
+ )
100
117
  self.sourceT10 = os.path.join(self.topSrcFolder, self.dataSetID)
101
118
  shutil.copytree(src=os.path.join(self.dataDir), dst=self.sourceT10)
102
119
  self.T10XMLFile = os.path.join(self.sourceT10, "test10.xml")
@@ -106,16 +123,6 @@ class TestGetClosestSREnergy(unittest.TestCase):
106
123
  def tearDown(self):
107
124
  shutil.rmtree(self.topSrcFolder)
108
125
 
109
- def testIntenistyFromInfo(self):
110
- self.assertTrue(
111
- utils.getClosestSRCurrent(scan_dir=self.sourceT10, refFile=None) == 101.3
112
- )
113
-
114
- def testDefaultIntensity(self):
115
- os.remove(self.T10XMLFile)
116
- os.remove(self.T10InfoFile)
117
- self.assertTrue(utils.getClosestSRCurrent(scan_dir=self.sourceT10) is None)
118
-
119
126
 
120
127
  class TestMockEDFScan(unittest.TestCase):
121
128
  """Test that mock scan are adapted to other unit test"""
@@ -254,8 +261,8 @@ class TestMockEDFScan(unittest.TestCase):
254
261
  self.assertEqual(scan_dynamic[angle_id].file_path(), file_name)
255
262
 
256
263
 
257
- class TestMockHDF5(unittest.TestCase):
258
- """Test MockHDF5 to check that the file produced is valid"""
264
+ class TestMockNXtomo(unittest.TestCase):
265
+ """Test MockNXtomo to check that the file produced is valid"""
259
266
 
260
267
  def setUp(self) -> None:
261
268
  self._folder = tempfile.mkdtemp()
@@ -266,14 +273,14 @@ class TestMockHDF5(unittest.TestCase):
266
273
  def testSimpleMockCreationOneCall(self):
267
274
  """Test mock of an acquisition starting by one dark, then 10 ref,
268
275
  then 20 radios, then 10 'final' ref and 2 alignment radio"""
269
- mock = MockHDF5(
276
+ mock = MockNXtomo(
270
277
  scan_path=self._folder,
271
278
  n_proj=20,
272
279
  n_ini_proj=20,
273
280
  n_alignement_proj=2,
274
281
  create_ini_dark=True,
275
- create_ini_ref=True,
276
- create_final_ref=True,
282
+ create_ini_flat=True,
283
+ create_final_flat=True,
277
284
  n_refs=10,
278
285
  )
279
286
  self.assertTrue(0 in mock.scan.darks.keys())
@@ -28,7 +28,7 @@ class TomwerObject(Dataset):
28
28
  def cast_volume(self, volume):
29
29
  from tomwer.core.volume.volumebase import TomwerVolumeBase
30
30
 
31
- if not isinstance(volume, TomwerVolumeBase):
31
+ if not (volume is None or isinstance(volume, TomwerVolumeBase)):
32
32
  from tomwer.core.volume.volumefactory import (
33
33
  VolumeFactory,
34
34
  ) # avoid cyclic import