tomwer 1.1.0rc7__py3-none-any.whl → 1.2.0a0__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 (361) hide show
  1. orangecontrib/tomwer/__init__.py +1 -0
  2. orangecontrib/tomwer/orange/managedprocess.py +6 -4
  3. orangecontrib/tomwer/state_summary.py +3 -2
  4. orangecontrib/tomwer/widgets/__init__.py +2 -2
  5. orangecontrib/tomwer/widgets/cluster/FutureSupervisorOW.py +9 -7
  6. orangecontrib/tomwer/widgets/cluster/SlurmClusterOW.py +6 -5
  7. orangecontrib/tomwer/widgets/control/AdvancementOW.py +2 -1
  8. orangecontrib/tomwer/widgets/control/DataDiscoveryOW.py +235 -0
  9. orangecontrib/tomwer/widgets/control/DataListOW.py +7 -5
  10. orangecontrib/tomwer/widgets/control/DataListenerOW.py +13 -14
  11. orangecontrib/tomwer/widgets/control/DataSelectorOW.py +8 -6
  12. orangecontrib/tomwer/widgets/control/DataTransfertOW.py +9 -9
  13. orangecontrib/tomwer/widgets/control/DataValidatorOW.py +7 -8
  14. orangecontrib/tomwer/widgets/control/DataWatcherOW.py +25 -17
  15. orangecontrib/tomwer/widgets/control/EDF2NXTomomillOW.py +8 -8
  16. orangecontrib/tomwer/widgets/control/FilterOW.py +9 -8
  17. orangecontrib/tomwer/widgets/control/NXTomomillMixIn.py +3 -4
  18. orangecontrib/tomwer/widgets/control/NXTomomillOW.py +13 -14
  19. orangecontrib/tomwer/widgets/control/NotifierOW.py +3 -4
  20. orangecontrib/tomwer/widgets/control/SingleTomoObjOW.py +7 -5
  21. orangecontrib/tomwer/widgets/control/TimerOW.py +6 -5
  22. orangecontrib/tomwer/widgets/control/TomoObjSerieOW.py +5 -3
  23. orangecontrib/tomwer/widgets/control/VolumeSelector.py +8 -6
  24. orangecontrib/tomwer/widgets/control/VolumeSymLinkOW.py +10 -9
  25. orangecontrib/tomwer/widgets/control/icons/datadiscover.png +0 -0
  26. orangecontrib/tomwer/widgets/control/icons/datadiscover.svg +137 -0
  27. orangecontrib/tomwer/widgets/control/icons/nxtomomill.png +0 -0
  28. orangecontrib/tomwer/widgets/control/icons/nxtomomill.svg +5 -8
  29. orangecontrib/tomwer/widgets/debugtools/DatasetGeneratorOW.py +13 -15
  30. orangecontrib/tomwer/widgets/debugtools/ObjectInspectorOW.py +3 -2
  31. orangecontrib/tomwer/widgets/edit/DarkFlatPatchOW.py +10 -7
  32. orangecontrib/tomwer/widgets/edit/ImageKeyEditorOW.py +8 -5
  33. orangecontrib/tomwer/widgets/edit/ImageKeyUpgraderOW.py +5 -2
  34. orangecontrib/tomwer/widgets/edit/NXtomoEditorOW.py +6 -3
  35. orangecontrib/tomwer/widgets/edit/test/test_dark_flat_patch.py +8 -6
  36. orangecontrib/tomwer/widgets/edit/test/test_image_key_editor.py +3 -1
  37. orangecontrib/tomwer/widgets/edit/test/test_image_key_upgrader.py +3 -1
  38. orangecontrib/tomwer/widgets/edit/test/test_nxtomo_editor.py +3 -1
  39. orangecontrib/tomwer/widgets/other/PythonScriptOW.py +11 -11
  40. orangecontrib/tomwer/widgets/reconstruction/AxisOW.py +22 -27
  41. orangecontrib/tomwer/widgets/reconstruction/CastNabuVolumeOW.py +13 -11
  42. orangecontrib/tomwer/widgets/reconstruction/DarkRefAndCopyOW.py +11 -9
  43. orangecontrib/tomwer/widgets/reconstruction/NabuOW.py +16 -14
  44. orangecontrib/tomwer/widgets/reconstruction/NabuVolumeOW.py +27 -32
  45. orangecontrib/tomwer/widgets/reconstruction/SAAxisOW.py +32 -38
  46. orangecontrib/tomwer/widgets/reconstruction/SADeltaBetaOW.py +26 -26
  47. orangecontrib/tomwer/widgets/reconstruction/SinoNormOW.py +16 -18
  48. orangecontrib/tomwer/widgets/reconstruction/TofuOW.py +9 -7
  49. orangecontrib/tomwer/widgets/reconstruction/icons/nabu_2d.png +0 -0
  50. orangecontrib/tomwer/widgets/reconstruction/icons/nabu_2d.svg +8 -11
  51. orangecontrib/tomwer/widgets/visualization/DataViewerOW.py +8 -8
  52. orangecontrib/tomwer/widgets/visualization/DiffViewerOW.py +6 -4
  53. orangecontrib/tomwer/widgets/visualization/LivesliceOW.py +4 -3
  54. orangecontrib/tomwer/widgets/visualization/NXtomoMetadataViewerOW.py +4 -3
  55. orangecontrib/tomwer/widgets/visualization/RadioStackOW.py +6 -4
  56. orangecontrib/tomwer/widgets/visualization/SampleMovedOW.py +8 -6
  57. orangecontrib/tomwer/widgets/visualization/SinogramViewerOW.py +6 -3
  58. orangecontrib/tomwer/widgets/visualization/SliceStackOW.py +7 -5
  59. orangecontrib/tomwer/widgets/visualization/VolumeViewerOW.py +5 -4
  60. tomwer/__init__.py +1 -1
  61. tomwer/__main__.py +2 -1
  62. tomwer/app/axis.py +18 -14
  63. tomwer/app/canvas.py +7 -5
  64. tomwer/app/canvas_launcher/config.py +8 -6
  65. tomwer/app/canvas_launcher/environ.py +1 -2
  66. tomwer/app/canvas_launcher/mainwindow.py +23 -22
  67. tomwer/app/canvas_launcher/splash.py +1 -0
  68. tomwer/app/canvas_launcher/widgetsscheme.py +3 -3
  69. tomwer/app/darkref.py +7 -6
  70. tomwer/app/darkrefpatch.py +8 -6
  71. tomwer/app/diffframe.py +6 -4
  72. tomwer/app/imagekeyeditor.py +10 -10
  73. tomwer/app/imagekeyupgrader.py +8 -6
  74. tomwer/app/intensitynormalization.py +8 -8
  75. tomwer/app/lamino.py +5 -3
  76. tomwer/app/nabuapp.py +8 -6
  77. tomwer/app/nxtomoeditor.py +6 -5
  78. tomwer/app/radiostack.py +8 -6
  79. tomwer/app/rsync.py +3 -3
  80. tomwer/app/saaxis.py +22 -23
  81. tomwer/app/sadeltabeta.py +21 -21
  82. tomwer/app/samplemoved.py +8 -6
  83. tomwer/app/scanviewer.py +7 -6
  84. tomwer/app/sinogramviewer.py +8 -7
  85. tomwer/app/slicestack.py +8 -6
  86. tomwer/app/stopdatalistener.py +2 -1
  87. tomwer/core/futureobject.py +15 -6
  88. tomwer/core/log/logger.py +4 -3
  89. tomwer/core/log/processlog.py +0 -1
  90. tomwer/core/process/conditions/filters.py +3 -3
  91. tomwer/core/process/control/datadiscovery.py +7 -0
  92. tomwer/core/process/control/datalistener/datalistener.py +22 -21
  93. tomwer/core/process/control/datalistener/rpcserver.py +18 -28
  94. tomwer/core/process/control/datawatcher/datawatcher.py +15 -12
  95. tomwer/core/process/control/datawatcher/datawatcherobserver.py +11 -8
  96. tomwer/core/process/control/datawatcher/datawatcherprocess.py +7 -5
  97. tomwer/core/process/control/datawatcher/edfdwprocess.py +5 -15
  98. tomwer/core/process/control/datawatcher/hdf5dwprocess.py +3 -1
  99. tomwer/core/process/control/datawatcher/status.py +2 -0
  100. tomwer/core/process/control/nxtomomill.py +7 -6
  101. tomwer/core/process/control/scanlist.py +2 -1
  102. tomwer/core/process/control/scanselector.py +1 -0
  103. tomwer/core/process/control/scantransfer.py +12 -12
  104. tomwer/core/process/control/scanvalidator.py +7 -6
  105. tomwer/core/process/control/test/test_volume_link.py +5 -4
  106. tomwer/core/process/control/timer.py +4 -4
  107. tomwer/core/process/control/volumeselector.py +1 -0
  108. tomwer/core/process/control/volumesymlink.py +8 -9
  109. tomwer/core/process/edit/darkflatpatch.py +9 -12
  110. tomwer/core/process/edit/imagekeyeditor.py +11 -13
  111. tomwer/core/process/reconstruction/axis/axis.py +36 -38
  112. tomwer/core/process/reconstruction/axis/mode.py +2 -1
  113. tomwer/core/process/reconstruction/axis/params.py +23 -28
  114. tomwer/core/process/reconstruction/darkref/darkrefs.py +23 -27
  115. tomwer/core/process/reconstruction/darkref/darkrefscopy.py +14 -18
  116. tomwer/core/process/reconstruction/darkref/params.py +3 -1
  117. tomwer/core/process/reconstruction/lamino/tofu.py +11 -15
  118. tomwer/core/process/reconstruction/nabu/castvolume.py +15 -18
  119. tomwer/core/process/reconstruction/nabu/nabucommon.py +19 -20
  120. tomwer/core/process/reconstruction/nabu/nabuscores.py +16 -14
  121. tomwer/core/process/reconstruction/nabu/nabuslices.py +27 -22
  122. tomwer/core/process/reconstruction/nabu/nabuvolume.py +20 -22
  123. tomwer/core/process/reconstruction/nabu/slurm.py +36 -0
  124. tomwer/core/process/reconstruction/nabu/utils.py +18 -15
  125. tomwer/core/process/reconstruction/normalization/__init__.py +1 -3
  126. tomwer/core/process/reconstruction/normalization/normalization.py +16 -21
  127. tomwer/core/process/reconstruction/normalization/params.py +2 -2
  128. tomwer/core/process/reconstruction/saaxis/__init__.py +1 -1
  129. tomwer/core/process/reconstruction/saaxis/params.py +6 -7
  130. tomwer/core/process/reconstruction/saaxis/saaxis.py +44 -55
  131. tomwer/core/process/reconstruction/sadeltabeta/__init__.py +1 -1
  132. tomwer/core/process/reconstruction/sadeltabeta/params.py +9 -13
  133. tomwer/core/process/reconstruction/sadeltabeta/sadeltabeta.py +40 -46
  134. tomwer/core/process/reconstruction/scores/__init__.py +2 -2
  135. tomwer/core/process/reconstruction/scores/params.py +6 -9
  136. tomwer/core/process/reconstruction/scores/scores.py +10 -13
  137. tomwer/core/process/reconstruction/test/test_axis_params.py +4 -2
  138. tomwer/core/process/reconstruction/test/test_darkref.py +1 -2
  139. tomwer/core/process/reconstruction/test/test_darkref_copy.py +3 -1
  140. tomwer/core/process/reconstruction/test/test_paramsbase.py +1 -1
  141. tomwer/core/process/reconstruction/test/test_saaxis.py +11 -7
  142. tomwer/core/process/reconstruction/test/test_sadeltabeta.py +5 -4
  143. tomwer/core/process/reconstruction/test/test_utils.py +3 -2
  144. tomwer/core/process/script/python.py +6 -8
  145. tomwer/core/process/task.py +11 -12
  146. tomwer/core/process/test/test_axis.py +12 -9
  147. tomwer/core/process/test/test_conditions.py +8 -8
  148. tomwer/core/process/test/test_dark_and_flat.py +9 -8
  149. tomwer/core/process/test/test_data_listener.py +5 -3
  150. tomwer/core/process/test/test_data_transfer.py +14 -12
  151. tomwer/core/process/test/test_data_watcher.py +3 -1
  152. tomwer/core/process/test/test_lamino.py +3 -1
  153. tomwer/core/process/test/test_nabu.py +13 -12
  154. tomwer/core/process/test/test_normalization.py +7 -5
  155. tomwer/core/process/test/test_timer.py +2 -1
  156. tomwer/core/process/utils.py +9 -9
  157. tomwer/core/progress.py +3 -4
  158. tomwer/core/scan/blissscan.py +4 -2
  159. tomwer/core/scan/edfscan.py +26 -29
  160. tomwer/core/scan/futurescan.py +2 -1
  161. tomwer/core/scan/hdf5scan.py +21 -28
  162. tomwer/core/scan/scanbase.py +18 -18
  163. tomwer/core/scan/scanfactory.py +20 -21
  164. tomwer/core/scan/scantype.py +7 -0
  165. tomwer/core/scan/test/test_edf.py +2 -1
  166. tomwer/core/scan/test/test_future_scan.py +2 -1
  167. tomwer/core/scan/test/test_h5.py +5 -4
  168. tomwer/core/scan/test/test_process_registration.py +5 -3
  169. tomwer/core/scan/test/test_scan.py +11 -9
  170. tomwer/core/settings.py +1 -2
  171. tomwer/core/test/test_lamino.py +3 -2
  172. tomwer/core/test/test_scanutils.py +3 -2
  173. tomwer/core/test/test_utils.py +6 -4
  174. tomwer/core/utils/__init__.py +8 -6
  175. tomwer/core/utils/deprecation.py +2 -2
  176. tomwer/core/utils/image.py +4 -3
  177. tomwer/core/utils/laminoutils.py +80 -0
  178. tomwer/core/utils/locker.py +1 -1
  179. tomwer/core/utils/normalization.py +1 -0
  180. tomwer/core/utils/nxtomoutils.py +2 -1
  181. tomwer/core/utils/scanutils.py +9 -6
  182. tomwer/core/utils/slurm.py +2 -1
  183. tomwer/core/utils/time.py +2 -4
  184. tomwer/core/utils/volumeutils.py +2 -1
  185. tomwer/core/volume/__init__.py +1 -1
  186. tomwer/core/volume/edfvolume.py +4 -3
  187. tomwer/core/volume/hdf5volume.py +6 -8
  188. tomwer/core/volume/jp2kvolume.py +4 -3
  189. tomwer/core/volume/rawvolume.py +7 -7
  190. tomwer/core/volume/tiffvolume.py +8 -6
  191. tomwer/core/volume/volumebase.py +1 -0
  192. tomwer/core/volume/volumefactory.py +18 -18
  193. tomwer/gui/cluster/slurm.py +2 -0
  194. tomwer/gui/cluster/supervisor.py +4 -2
  195. tomwer/gui/cluster/test/test_cluster.py +5 -4
  196. tomwer/gui/cluster/test/test_supervisor.py +4 -2
  197. tomwer/gui/conditions/filter.py +7 -6
  198. tomwer/gui/control/actions.py +1 -0
  199. tomwer/gui/control/datadiscovery.py +168 -0
  200. tomwer/gui/control/datalist.py +29 -28
  201. tomwer/gui/control/datalistener.py +8 -4
  202. tomwer/gui/control/datareacheractions.py +2 -1
  203. tomwer/gui/control/datatransfert.py +3 -1
  204. tomwer/gui/control/datavalidator.py +11 -12
  205. tomwer/gui/control/datawatcher/configuration.py +12 -1
  206. tomwer/gui/control/datawatcher/controlwidget.py +116 -0
  207. tomwer/gui/control/datawatcher/datawatcher.py +63 -121
  208. tomwer/gui/control/datawatcher/datawatcherobserver.py +7 -9
  209. tomwer/gui/control/history.py +3 -1
  210. tomwer/gui/control/observations.py +7 -7
  211. tomwer/gui/control/scanselectorwidget.py +4 -2
  212. tomwer/gui/control/selectorwidgetbase.py +3 -1
  213. tomwer/gui/control/serie/seriecreator.py +11 -12
  214. tomwer/gui/control/singletomoobj.py +4 -4
  215. tomwer/gui/control/test/test_datadiscovery.py +27 -0
  216. tomwer/gui/control/test/test_datalist.py +7 -6
  217. tomwer/gui/control/test/test_datalistener.py +4 -4
  218. tomwer/gui/control/test/test_datavalidator.py +3 -1
  219. tomwer/gui/control/test/test_inputwidget.py +5 -4
  220. tomwer/gui/control/test/test_process_manager.py +3 -3
  221. tomwer/gui/control/test/test_scanselector.py +6 -4
  222. tomwer/gui/control/test/test_scanvalidator.py +6 -5
  223. tomwer/gui/control/test/test_single_tomo_obj.py +5 -3
  224. tomwer/gui/control/test/test_volume_dialog.py +7 -5
  225. tomwer/gui/control/test/test_volumeselector.py +8 -6
  226. tomwer/gui/control/volumeselectorwidget.py +2 -1
  227. tomwer/gui/debugtools/datasetgenerator.py +2 -1
  228. tomwer/gui/debugtools/objectinspector.py +6 -7
  229. tomwer/gui/edit/dkrfpatch.py +11 -10
  230. tomwer/gui/edit/imagekeyeditor.py +12 -12
  231. tomwer/gui/edit/nxtomoeditor.py +8 -7
  232. tomwer/gui/edit/test/test_dkrf_patch.py +10 -9
  233. tomwer/gui/edit/test/test_image_key_editor.py +8 -6
  234. tomwer/gui/edit/test/test_nx_editor.py +7 -5
  235. tomwer/gui/icons.py +3 -2
  236. tomwer/gui/illustrations.py +3 -2
  237. tomwer/gui/imagefromfile.py +3 -1
  238. tomwer/gui/qfolderdialog.py +14 -12
  239. tomwer/gui/reconstruction/axis/CompareImages.py +9 -8
  240. tomwer/gui/reconstruction/axis/__init__.py +1 -1
  241. tomwer/gui/reconstruction/axis/axis.py +9 -7
  242. tomwer/gui/reconstruction/axis/radioaxis.py +30 -32
  243. tomwer/gui/reconstruction/darkref/darkrefcopywidget.py +6 -5
  244. tomwer/gui/reconstruction/darkref/darkrefwidget.py +4 -2
  245. tomwer/gui/reconstruction/lamino/tofu/misc.py +3 -1
  246. tomwer/gui/reconstruction/lamino/tofu/projections.py +16 -8
  247. tomwer/gui/reconstruction/lamino/tofu/tofu.py +6 -3
  248. tomwer/gui/reconstruction/lamino/tofu/tofuexpert.py +5 -2
  249. tomwer/gui/reconstruction/lamino/tofu/tofuoutput.py +8 -5
  250. tomwer/gui/reconstruction/nabu/action.py +1 -0
  251. tomwer/gui/reconstruction/nabu/castvolume.py +6 -4
  252. tomwer/gui/reconstruction/nabu/check.py +3 -2
  253. tomwer/gui/reconstruction/nabu/nabuconfig/base.py +5 -2
  254. tomwer/gui/reconstruction/nabu/nabuconfig/ctf.py +6 -3
  255. tomwer/gui/reconstruction/nabu/nabuconfig/nabuconfig.py +4 -3
  256. tomwer/gui/reconstruction/nabu/nabuconfig/output.py +7 -5
  257. tomwer/gui/reconstruction/nabu/nabuconfig/phase.py +8 -6
  258. tomwer/gui/reconstruction/nabu/nabuconfig/preprocessing.py +7 -7
  259. tomwer/gui/reconstruction/nabu/nabuconfig/reconstruction.py +40 -33
  260. tomwer/gui/reconstruction/nabu/nabuflow.py +7 -4
  261. tomwer/gui/reconstruction/nabu/slices.py +14 -10
  262. tomwer/gui/reconstruction/nabu/slurm.py +1 -0
  263. tomwer/gui/reconstruction/nabu/volume.py +5 -3
  264. tomwer/gui/reconstruction/normalization/intensity.py +14 -13
  265. tomwer/gui/reconstruction/saaxis/corrangeselector.py +36 -35
  266. tomwer/gui/reconstruction/saaxis/dimensionwidget.py +5 -4
  267. tomwer/gui/reconstruction/saaxis/saaxis.py +17 -17
  268. tomwer/gui/reconstruction/saaxis/sliceselector.py +5 -5
  269. tomwer/gui/reconstruction/sadeltabeta/saadeltabeta.py +33 -36
  270. tomwer/gui/reconstruction/scores/scoreplot.py +19 -18
  271. tomwer/gui/reconstruction/test/test_axis.py +14 -13
  272. tomwer/gui/reconstruction/test/test_lamino.py +3 -2
  273. tomwer/gui/reconstruction/test/test_nabu.py +8 -6
  274. tomwer/gui/reconstruction/test/test_saaxis.py +17 -15
  275. tomwer/gui/reconstruction/test/test_sadeltabeta.py +15 -13
  276. tomwer/gui/samplemoved/__init__.py +8 -7
  277. tomwer/gui/samplemoved/selectiontable.py +4 -2
  278. tomwer/gui/stackplot.py +14 -13
  279. tomwer/gui/stacks.py +11 -9
  280. tomwer/gui/test/test_axis_gui.py +5 -4
  281. tomwer/gui/test/test_qfolder_dialog.py +2 -1
  282. tomwer/gui/utils/__init__.py +5 -5
  283. tomwer/gui/utils/buttons.py +1 -0
  284. tomwer/gui/utils/completer.py +1 -0
  285. tomwer/gui/utils/flow.py +4 -2
  286. tomwer/gui/utils/illustrations.py +1 -0
  287. tomwer/gui/utils/inputwidget.py +11 -17
  288. tomwer/gui/utils/lineselector/lineselection.py +76 -0
  289. tomwer/gui/utils/lineselector/lineselector.py +6 -8
  290. tomwer/gui/utils/qt_utils.py +1 -0
  291. tomwer/gui/utils/scandescription.py +2 -0
  292. tomwer/gui/utils/splashscreen.py +1 -1
  293. tomwer/gui/utils/unitsystem.py +3 -1
  294. tomwer/gui/utils/vignettes.py +8 -8
  295. tomwer/gui/utils/waiterthread.py +2 -1
  296. tomwer/gui/visualization/dataviewer.py +20 -28
  297. tomwer/gui/visualization/diffviewer/diffviewer.py +17 -20
  298. tomwer/gui/visualization/diffviewer/shiftwidget.py +3 -1
  299. tomwer/gui/visualization/nxtomometadata.py +1 -0
  300. tomwer/gui/visualization/reconstructionparameters.py +13 -12
  301. tomwer/gui/visualization/scanoverview.py +5 -3
  302. tomwer/gui/visualization/sinogramviewer.py +3 -2
  303. tomwer/gui/visualization/test/test_dataviewer.py +3 -1
  304. tomwer/gui/visualization/test/test_diffviewer.py +8 -6
  305. tomwer/gui/visualization/test/test_nx_tomo_metadata_viewer.py +5 -3
  306. tomwer/gui/visualization/test/test_reconstruction_parameters.py +5 -3
  307. tomwer/gui/visualization/test/test_sinogramviewer.py +10 -9
  308. tomwer/gui/visualization/test/test_stacks.py +8 -6
  309. tomwer/gui/visualization/test/test_volumeviewer.py +10 -8
  310. tomwer/gui/visualization/tomoobjoverview.py +7 -4
  311. tomwer/gui/visualization/volumeoverview.py +5 -3
  312. tomwer/gui/visualization/volumeviewer.py +15 -14
  313. tomwer/io/utils/__init__.py +3 -3
  314. tomwer/io/utils/h5pyutils.py +2 -1
  315. tomwer/io/utils/utils.py +17 -21
  316. tomwer/resources/__init__.py +1 -1
  317. tomwer/synctools/axis.py +3 -1
  318. tomwer/synctools/darkref.py +3 -2
  319. tomwer/synctools/datalistener.py +10 -6
  320. tomwer/synctools/datatransfert.py +2 -3
  321. tomwer/synctools/imageloaderthread.py +5 -3
  322. tomwer/synctools/rsyncmanager.py +3 -2
  323. tomwer/synctools/saaxis.py +3 -1
  324. tomwer/synctools/sadeltabeta.py +3 -1
  325. tomwer/synctools/stacks/control/datalistener.py +9 -12
  326. tomwer/synctools/stacks/edit/darkflatpatch.py +13 -12
  327. tomwer/synctools/stacks/edit/imagekeyeditor.py +12 -11
  328. tomwer/synctools/stacks/processingstack.py +3 -2
  329. tomwer/synctools/stacks/reconstruction/axis.py +12 -12
  330. tomwer/synctools/stacks/reconstruction/castvolume.py +8 -5
  331. tomwer/synctools/stacks/reconstruction/dkrefcopy.py +10 -9
  332. tomwer/synctools/stacks/reconstruction/lamino.py +9 -7
  333. tomwer/synctools/stacks/reconstruction/nabu.py +18 -17
  334. tomwer/synctools/stacks/reconstruction/normalization.py +12 -16
  335. tomwer/synctools/stacks/reconstruction/saaxis.py +13 -11
  336. tomwer/synctools/stacks/reconstruction/sadeltabeta.py +16 -14
  337. tomwer/synctools/test/test_darkRefs.py +4 -3
  338. tomwer/synctools/test/test_foldertransfer.py +14 -12
  339. tomwer/synctools/test/test_scanstages.py +8 -7
  340. tomwer/synctools/utils/scanstages.py +7 -5
  341. tomwer/tests/conftest.py +4 -4
  342. tomwer/tests/test_scripts.py +3 -2
  343. tomwer/tests/utils/__init__.py +5 -4
  344. tomwer/tests/utils/utilstest.py +5 -6
  345. tomwer/third_party/nabu/preproc/phase.py +7 -5
  346. tomwer/third_party/nabu/utils.py +3 -2
  347. tomwer/utils.py +12 -12
  348. tomwer/version.py +3 -3
  349. tomwer/web/__init__.py +30 -0
  350. tomwer/web/client.py +43 -0
  351. tomwer/web/config.py +36 -0
  352. tomwer/web/test/__init__.py +0 -0
  353. tomwer/web/test/test_graylog_connection.py +59 -0
  354. {tomwer-1.1.0rc7.dist-info → tomwer-1.2.0a0.dist-info}/METADATA +2 -2
  355. {tomwer-1.1.0rc7.dist-info → tomwer-1.2.0a0.dist-info}/RECORD +361 -345
  356. {tomwer-1.1.0rc7.dist-info → tomwer-1.2.0a0.dist-info}/WHEEL +1 -1
  357. /tomwer-1.1.0rc7-py3.9-nspkg.pth → /tomwer-1.2.0a0-py3.8-nspkg.pth +0 -0
  358. {tomwer-1.1.0rc7.dist-info → tomwer-1.2.0a0.dist-info}/LICENSE +0 -0
  359. {tomwer-1.1.0rc7.dist-info → tomwer-1.2.0a0.dist-info}/entry_points.txt +0 -0
  360. {tomwer-1.1.0rc7.dist-info → tomwer-1.2.0a0.dist-info}/namespace_packages.txt +0 -0
  361. {tomwer-1.1.0rc7.dist-info → tomwer-1.2.0a0.dist-info}/top_level.txt +0 -0
@@ -32,37 +32,36 @@ __license__ = "MIT"
32
32
  __date__ = "27/10/2021"
33
33
 
34
34
 
35
- from tomwer.core.cluster.cluster import (
36
- SlurmClusterConfiguration,
37
- )
35
+ import logging
36
+ import os
37
+ import subprocess
38
+ import uuid
39
+ from typing import Iterable, Optional, Union
40
+
41
+ import numpy
42
+ from silx.io.url import DataUrl
43
+ from silx.utils.enum import Enum as _Enum
38
44
  from sluurp.executor import submit as submit_to_slurm_cluster
39
45
  from sluurp.job import SBatchScriptJob
46
+ from tomoscan.io import HDF5File
47
+ from tomoscan.normalization import Method as INormMethod
48
+
49
+ from tomwer.core.cluster.cluster import SlurmClusterConfiguration
40
50
  from tomwer.core.process.reconstruction.nabu.target import Target
41
51
  from tomwer.core.process.reconstruction.nabu.utils import (
42
52
  _NabuPhaseMethod,
43
53
  nabu_std_err_has_error,
44
54
  )
45
- from tomwer.core.utils.scanutils import format_output_location
55
+ from tomwer.core.process.reconstruction.normalization.params import (
56
+ _ValueSource as INormSource,
57
+ )
46
58
  from tomwer.core.scan.edfscan import EDFTomoScan
47
59
  from tomwer.core.scan.hdf5scan import HDF5TomoScan
48
60
  from tomwer.core.scan.scanbase import TomwerScanBase
61
+ from tomwer.core.utils.scanutils import format_output_location
49
62
  from tomwer.core.utils.slurm import get_slurm_script_name, is_slurm_available
50
- from tomwer.core.process.reconstruction.normalization.params import (
51
- _ValueSource as INormSource,
52
- )
53
- from tomoscan.normalization import Method as INormMethod
54
- from silx.utils.enum import Enum as _Enum
55
- from silx.io.url import DataUrl
56
- from typing import Iterable, Optional
57
- from typing import Union
58
- import logging
59
- import subprocess
60
- from . import settings
61
- from . import utils
62
- import os
63
- import uuid
64
- from tomoscan.io import HDF5File
65
- import numpy
63
+
64
+ from . import settings, utils
66
65
 
67
66
  _logger = logging.getLogger(__name__)
68
67
  try:
@@ -47,29 +47,31 @@ except (ImportError, OSError):
47
47
  has_nabu = True
48
48
  else:
49
49
  has_nabu = True
50
+ import logging
51
+ import os
50
52
  from typing import Iterable, Optional, Union
51
53
 
54
+ from nabu.pipeline.fullfield.nabu_config import (
55
+ nabu_config as nabu_fullfield_default_config,
56
+ )
52
57
  from processview.core.manager.manager import ProcessManager
58
+
59
+ from tomwer.core.futureobject import FutureTomwerObject
60
+ from tomwer.core.process.reconstruction.nabu.nabuslices import (
61
+ SingleSliceRunner,
62
+ _NabuBaseReconstructor,
63
+ generate_nabu_configfile,
64
+ )
53
65
  from tomwer.core.process.reconstruction.nabu.target import Target
54
66
  from tomwer.core.progress import Progress
55
67
  from tomwer.core.scan.edfscan import EDFTomoScan
56
- from tomwer.core.futureobject import FutureTomwerObject
57
68
  from tomwer.core.scan.scanbase import TomwerScanBase
58
69
  from tomwer.core.utils.slurm import is_slurm_available
59
70
  from tomwer.utils import docstring
71
+
60
72
  from ..nabu import settings as nabu_settings
61
- from tomwer.core.process.reconstruction.nabu.nabuslices import (
62
- SingleSliceRunner,
63
- generate_nabu_configfile,
64
- _NabuBaseReconstructor,
65
- )
66
- from nabu.pipeline.fullfield.nabu_config import (
67
- nabu_config as nabu_fullfield_default_config,
68
- )
69
- from .nabucommon import ResultSlurmRun, ResultsLocalRun, ResultsWithStd
70
73
  from . import utils
71
- import logging
72
- import os
74
+ from .nabucommon import ResultsLocalRun, ResultSlurmRun, ResultsWithStd
73
75
 
74
76
  _logger = logging.getLogger(__name__)
75
77
 
@@ -254,7 +256,7 @@ class _Reconstructor(_NabuBaseReconstructor):
254
256
  db=db,
255
257
  ctf=ctf,
256
258
  )
257
- _config["output"]["file_prefix"] = "cor_{}_{}".format(_file_name, cor)
259
+ _config["output"]["file_prefix"] = f"cor_{_file_name}_{cor}"
258
260
  if _config["output"]["location"] not in ("", None):
259
261
  # if user specify the location
260
262
  if not os.path.isdir(_config["output"]["location"]):
@@ -303,5 +305,5 @@ class _Reconstructor(_NabuBaseReconstructor):
303
305
  )
304
306
  if not isinstance(self.scan, EDFTomoScan):
305
307
  name = "_".join((self.scan.entry.lstrip("/"), name))
306
- conf_file = os.path.join(cfg_folder, "cor_{}_{}".format(cor, name))
308
+ conf_file = os.path.join(cfg_folder, f"cor_{cor}_{name}")
307
309
  return config, conf_file
@@ -28,15 +28,16 @@ __license__ = "MIT"
28
28
  __date__ = "26/10/2021"
29
29
 
30
30
 
31
- import functools
32
- import os
33
31
  import copy
32
+ import functools
34
33
  import logging
34
+ import os
35
+
35
36
  from processview.core.manager.manager import ProcessManager
36
37
 
37
38
  from tomwer.core.futureobject import FutureTomwerObject
38
- from tomwer.core.utils.slurm import is_slurm_available
39
39
  from tomwer.core.utils.scanutils import data_identifier_to_scan
40
+ from tomwer.core.utils.slurm import is_slurm_available
40
41
 
41
42
  try:
42
43
  from nabu.pipeline.fullfield.reconstruction import ( # noqa F401
@@ -58,36 +59,40 @@ else:
58
59
  has_nabu = True
59
60
  _err_import_nabu = None
60
61
 
61
- from silx.utils.enum import Enum as _Enum
62
- from tomwer.core.scan.scanbase import TomwerScanBase
63
- from tomwer.core.scan.hdf5scan import HDF5TomoScan
64
- from tomwer.core.scan.scanfactory import ScanFactory
65
- from tomwer.utils import docstring
66
- from typing import Iterable, Union
67
- from typing import Optional
68
- from nabu.pipeline.config import generate_nabu_configfile
62
+ from typing import Iterable, Optional, Union
63
+
64
+ from nabu import version as nabu_version
65
+ from nabu.pipeline.config import (
66
+ _extract_nabuconfig_keyvals,
67
+ generate_nabu_configfile,
68
+ get_default_nabu_config,
69
+ )
69
70
  from nabu.pipeline.fullfield.nabu_config import (
70
71
  nabu_config as nabu_fullfield_default_config,
71
72
  )
72
- from nabu.pipeline.config import _extract_nabuconfig_keyvals
73
- from nabu import version as nabu_version
73
+ from processview.core.superviseprocess import SuperviseProcess
74
74
  from silx.io.dictdump import h5todict
75
- from . import utils
76
- from . import settings as nabu_settings
75
+ from silx.io.utils import h5py_read_dataset
76
+ from silx.utils.enum import Enum as _Enum
77
77
  from tomoscan.io import HDF5File
78
+
79
+ from tomwer.core.process.task import Task
78
80
  from tomwer.core.scan.edfscan import EDFTomoScan
79
- from silx.io.utils import h5py_read_dataset
80
- from nabu.pipeline.config import get_default_nabu_config
81
+ from tomwer.core.scan.hdf5scan import HDF5TomoScan
82
+ from tomwer.core.scan.scanbase import TomwerScanBase
83
+ from tomwer.core.scan.scanfactory import ScanFactory
81
84
  from tomwer.io.utils.h5pyutils import EntryReader
82
- from tomwer.core.process.task import Task
83
- from .target import Target
85
+ from tomwer.utils import docstring
86
+
87
+ from . import settings as nabu_settings
88
+ from . import utils
84
89
  from .nabucommon import (
85
- _NabuBaseReconstructor,
86
- ResultsRun,
87
90
  ResultsLocalRun,
88
91
  ResultSlurmRun,
92
+ ResultsRun,
93
+ _NabuBaseReconstructor,
89
94
  )
90
- from processview.core.superviseprocess import SuperviseProcess
95
+ from .target import Target
91
96
 
92
97
  _logger = logging.getLogger(__name__)
93
98
  if not has_nabu:
@@ -28,36 +28,34 @@ __license__ = "MIT"
28
28
  __date__ = "26/10/2021"
29
29
 
30
30
 
31
+ import copy
32
+ import functools
31
33
  import logging
34
+ import os
32
35
  from typing import Iterable, Optional
36
+
37
+ from nabu import version as nabu_version
38
+ from nabu.pipeline.config import generate_nabu_configfile
39
+ from nabu.pipeline.fullfield.nabu_config import (
40
+ nabu_config as nabu_fullfield_default_config,
41
+ )
33
42
  from processview.core.manager.manager import ProcessManager
43
+ from silx.io.utils import h5py_read_dataset
44
+
34
45
  from tomwer.core.cluster.cluster import SlurmClusterConfiguration
35
46
  from tomwer.core.futureobject import FutureTomwerObject
36
- from tomwer.core.scan.scanbase import TomwerScanBase
47
+ from tomwer.core.process.task import Task
48
+ from tomwer.core.scan.edfscan import EDFTomoScan
37
49
  from tomwer.core.scan.hdf5scan import HDF5TomoScan
50
+ from tomwer.core.scan.scanbase import TomwerScanBase
38
51
  from tomwer.core.scan.scanfactory import ScanFactory
39
52
  from tomwer.core.utils.scanutils import data_identifier_to_scan
40
- from . import utils
41
- from . import settings
42
- from nabu.pipeline.config import generate_nabu_configfile
43
- from nabu.pipeline.fullfield.nabu_config import (
44
- nabu_config as nabu_fullfield_default_config,
45
- )
46
- from nabu import version as nabu_version
47
- from tomwer.core.scan.edfscan import EDFTomoScan
48
- import copy
49
- import os
50
- from tomwer.core.process.task import Task
51
53
  from tomwer.io.utils.h5pyutils import EntryReader
52
- from silx.io.utils import h5py_read_dataset
53
- from .target import Target
54
- import functools
55
54
  from tomwer.utils import docstring
56
- from .nabucommon import (
57
- _NabuBaseReconstructor,
58
- ResultsLocalRun,
59
- ResultSlurmRun,
60
- )
55
+
56
+ from . import settings, utils
57
+ from .nabucommon import ResultsLocalRun, ResultSlurmRun, _NabuBaseReconstructor
58
+ from .target import Target
61
59
 
62
60
  _logger = logging.getLogger(__name__)
63
61
 
@@ -260,7 +258,7 @@ class VolumeRunner(_NabuBaseReconstructor):
260
258
  if not isinstance(self.scan, EDFTomoScan):
261
259
  name = "_".join((self.scan.entry.lstrip("/"), name))
262
260
  conf_file = os.path.join(cfg_folder, name)
263
- _logger.info("{}: create {}".format(self.scan, conf_file))
261
+ _logger.info(f"{self.scan}: create {conf_file}")
264
262
 
265
263
  # add some tomwer metadata and save the configuration
266
264
  # note: for now the section is ignored by nabu but shouldn't stay that way
@@ -401,7 +399,7 @@ class NabuVolume(
401
399
  elif isinstance(scan, dict):
402
400
  scan = ScanFactory.create_scan_object_frm_dict(scan)
403
401
  else:
404
- raise ValueError("input type {} is not managed".format(scan))
402
+ raise ValueError(f"input type {scan} is not managed")
405
403
 
406
404
  if scan.nabu_recons_params is None:
407
405
  raise ValueError(
@@ -0,0 +1,36 @@
1
+ import subprocess
2
+ import logging
3
+
4
+ _logger = logging.getLogger(__name__)
5
+
6
+
7
+ def check_n_gpu():
8
+ try:
9
+ from pycuda import driver # pylint: disable=E0401
10
+
11
+ driver.init()
12
+ n_gpus = driver.Device.count()
13
+ except Exception as e:
14
+ raise e
15
+ else:
16
+ if n_gpus == 0:
17
+ raise RuntimeError("No gpu detected to run nabu reconstruction")
18
+ else:
19
+ _logger.info(f"{n_gpus} detected by pycuda")
20
+
21
+
22
+ def _exec_nabu_on_slurm(conf_file: str, scan_path: str) -> tuple:
23
+ check_n_gpu()
24
+
25
+ NABU_FULL_FIELD_APP_PATH = "nabu.app.reconstruct"
26
+ # need to be executed in his own context
27
+ command = " ".join(("python", "-m", NABU_FULL_FIELD_APP_PATH, conf_file))
28
+ process = subprocess.Popen(
29
+ command,
30
+ shell=True,
31
+ cwd=scan_path,
32
+ stdout=subprocess.PIPE,
33
+ stderr=subprocess.PIPE,
34
+ )
35
+ res = process.communicate()
36
+ return res
@@ -28,25 +28,27 @@ __license__ = "MIT"
28
28
  __date__ = "06/08/2020"
29
29
 
30
30
 
31
- from tomwer.core.scan.edfscan import EDFTomoScan
32
- from tomwer.core.scan.scanbase import TomwerScanBase
33
- from tomwer.core.scan.hdf5scan import HDF5TomoScan
34
- import tomwer.version
35
- from silx.utils.enum import Enum as _Enum
36
- from contextlib import AbstractContextManager
37
- import logging
38
31
  import datetime
39
- import typing
32
+ import logging
40
33
  import os
41
- from tomwer.core.volume.hdf5volume import HDF5Volume
42
- from tomwer.core.volume.edfvolume import EDFVolume
43
- from tomwer.core.volume.jp2kvolume import JP2KVolume
44
- from tomwer.core.volume.tiffvolume import TIFFVolume
45
- from tomwer.core.volume.rawvolume import RawVolume
34
+ import typing
35
+ from contextlib import AbstractContextManager
36
+
37
+ from nabu.pipeline.config import generate_nabu_configfile, parse_nabu_config_file
46
38
  from nabu.pipeline.fullfield.nabu_config import (
47
39
  nabu_config as nabu_fullfield_default_config,
48
40
  )
49
- from nabu.pipeline.config import generate_nabu_configfile, parse_nabu_config_file
41
+ from silx.utils.enum import Enum as _Enum
42
+
43
+ import tomwer.version
44
+ from tomwer.core.scan.edfscan import EDFTomoScan
45
+ from tomwer.core.scan.hdf5scan import HDF5TomoScan
46
+ from tomwer.core.scan.scanbase import TomwerScanBase
47
+ from tomwer.core.volume.edfvolume import EDFVolume
48
+ from tomwer.core.volume.hdf5volume import HDF5Volume
49
+ from tomwer.core.volume.jp2kvolume import JP2KVolume
50
+ from tomwer.core.volume.rawvolume import RawVolume
51
+ from tomwer.core.volume.tiffvolume import TIFFVolume
50
52
 
51
53
  _logger = logging.getLogger(__name__)
52
54
 
@@ -242,7 +244,7 @@ def get_recons_volume_identifier(
242
244
  # )
243
245
 
244
246
  else:
245
- raise ValueError("file format not managed: {}".format(file_format))
247
+ raise ValueError(f"file format not managed: {file_format}")
246
248
 
247
249
  return tuple([volume.get_identifier() for volume in volumes])
248
250
 
@@ -413,6 +415,7 @@ def nabu_std_err_has_error(errs: typing.Optional[bytes]):
413
415
  return (
414
416
  "warning" in line
415
417
  or "Warning" in line
418
+ or "deprecated" in line
416
419
  or line.replace(" ", "") == ""
417
420
  or "unable to load" in line
418
421
  )
@@ -1,4 +1,2 @@
1
- from .normalization import ( # noqa F403
2
- SinoNormalizationTask,
3
- )
1
+ from .normalization import SinoNormalizationTask # noqa F403
4
2
  from .params import SinoNormalizationParams # noqa F403
@@ -34,24 +34,22 @@ __license__ = "MIT"
34
34
  __date__ = "25/06/2021"
35
35
 
36
36
 
37
- import numpy
38
- import logging
39
37
  import functools
38
+ import logging
39
+
40
+ import numpy
41
+ import tomoscan.esrf.scan.utils
42
+ from processview.core.dataset import DatasetIdentifier
43
+ from processview.core.superviseprocess import SuperviseProcess
40
44
  from silx.io.url import DataUrl
45
+ from tomoscan.esrf.scan.utils import get_data
46
+ from tomoscan.normalization import Method as NormMethod
47
+
41
48
  import tomwer.version
42
49
  from tomwer.core.process.task import Task
43
50
  from tomwer.core.utils.scanutils import data_identifier_to_scan
44
- from .params import (
45
- SinoNormalizationParams,
46
- _ValueCalculationFct,
47
- _ValueSource,
48
- )
49
- from tomoscan.normalization import Method as NormMethod
50
- import tomoscan.esrf.scan.utils
51
- from tomoscan.esrf.scan.utils import get_data
52
- from processview.core.dataset import DatasetIdentifier
53
- from processview.core.superviseprocess import SuperviseProcess
54
51
 
52
+ from .params import SinoNormalizationParams, _ValueCalculationFct, _ValueSource
55
53
 
56
54
  _logger = logging.getLogger(__name__)
57
55
 
@@ -143,7 +141,7 @@ class SinoNormalizationTask(
143
141
  "source": _ValueSource.MANUAL_SCALAR.value,
144
142
  }
145
143
  else:
146
- raise ValueError("method {} is not handled".format(params.method))
144
+ raise ValueError(f"method {params.method} is not handled")
147
145
  except Exception as e:
148
146
  _logger.error(e)
149
147
  final_norm_info = {"tomwer_processing_res_code": False}
@@ -274,7 +272,7 @@ class SinoNormalizationTask(
274
272
 
275
273
  def retrieve_data_proj_indexes(url_):
276
274
  urls = []
277
- for slice in range(
275
+ for data_slice in range(
278
276
  url_.data_slice().start,
279
277
  url_.data_slice().stop,
280
278
  url_.data_slice().step or 1,
@@ -284,7 +282,7 @@ class SinoNormalizationTask(
284
282
  file_path=url_.file_path(),
285
283
  data_path=url_.data_path(),
286
284
  scheme=url_.scheme(),
287
- data_slice=slice,
285
+ data_slice=data_slice,
288
286
  )
289
287
  )
290
288
 
@@ -298,8 +296,7 @@ class SinoNormalizationTask(
298
296
  res.append(url_idxs[my_url_path])
299
297
  else:
300
298
  _logger.warning(
301
- "unable to retrieve frame index from url {}. "
302
- "Take the slice index as frame index".format(my_url_path)
299
+ f"unable to retrieve frame index from url {my_url_path}. Take the slice index as frame index"
303
300
  )
304
301
  return res
305
302
 
@@ -323,9 +320,7 @@ class SinoNormalizationTask(
323
320
  ]
324
321
  current_idx += length
325
322
  else:
326
- raise ValueError(
327
- "Frame where expected and not a " "{}D object".format(data.ndim)
328
- )
323
+ raise ValueError(f"Frame where expected and not a {data.ndim}D object")
329
324
  return SinoNormalizationTask.compute_stats(roi_area)
330
325
 
331
326
  @staticmethod
@@ -339,7 +334,7 @@ class SinoNormalizationTask(
339
334
  elif data.ndim in (0, 1):
340
335
  res = data
341
336
  else:
342
- raise ValueError("dataset dimension not handled ({})".format(data.ndim))
337
+ raise ValueError(f"dataset dimension not handled ({data.ndim}D)")
343
338
  results[calc_fct.value] = res
344
339
  return results
345
340
 
@@ -34,11 +34,11 @@ __license__ = "MIT"
34
34
  __date__ = "25/06/2021"
35
35
 
36
36
 
37
+ import typing
38
+
37
39
  from silx.utils.enum import Enum as _Enum
38
40
  from tomoscan.normalization import Method
39
41
 
40
- import typing
41
-
42
42
 
43
43
  class _ValueSource(_Enum):
44
44
  MONITOR = "intensity monitor"
@@ -1,2 +1,2 @@
1
- from .saaxis import SAAxisProcess # noqa F401
2
1
  from .params import SAAxisParams # noqa F401
2
+ from .saaxis import SAAxisProcess # noqa F401
@@ -30,9 +30,11 @@ __date__ = "18/02/2021"
30
30
 
31
31
  from collections.abc import Iterable
32
32
  from typing import Union
33
+
34
+ import numpy
33
35
  from silx.utils.enum import Enum as _Enum
36
+
34
37
  from tomwer.core.process.reconstruction.scores.params import SABaseParams
35
- import numpy
36
38
 
37
39
 
38
40
  class ReconstructionMode(_Enum):
@@ -92,7 +94,7 @@ class SAAxisParams(SABaseParams):
92
94
  @image_width.setter
93
95
  def image_width(self, width):
94
96
  if not isinstance(width, (type(None), float, int)):
95
- raise TypeError("None, int or float expected. Not {}".format(type(width)))
97
+ raise TypeError(f"None, int or float expected. Not {type(width)}")
96
98
  else:
97
99
  self._image_width = width
98
100
 
@@ -136,12 +138,9 @@ class SAAxisParams(SABaseParams):
136
138
  if self.slice_indexes is None:
137
139
  missing_information.append("slice index not provided")
138
140
  if len(missing_information) > 0:
141
+ missing_information_str = " ; ".join(missing_information)
139
142
  raise ValueError(
140
- str(
141
- "Some informations are missing: {}".format(
142
- " ; ".join(missing_information)
143
- )
144
- )
143
+ f"Some informations are missing: {missing_information_str}"
145
144
  )
146
145
 
147
146
  @staticmethod