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
@@ -27,21 +27,24 @@ __authors__ = ["H. Payno"]
27
27
  __license__ = "MIT"
28
28
  __date__ = "13/08/2021"
29
29
 
30
+ import logging
31
+ import weakref
32
+
30
33
  from silx.gui import qt
31
- from silx.utils.enum import Enum as _Enum
34
+ from silx.gui.plot.ImageStack import ImageStack as _ImageStack
35
+ from silx.gui.plot.ImageStack import UrlLoader
32
36
  from silx.gui.utils.signal import SignalProxy
33
- import weakref
34
- import logging
35
- from silx.gui.plot.ImageStack import UrlLoader, ImageStack as _ImageStack
37
+ from silx.io.url import DataUrl
38
+ from silx.utils.enum import Enum as _Enum
39
+
36
40
  from tomwer.core.scan.scanbase import TomwerScanBase
37
41
  from tomwer.core.utils.ftseriesutils import get_vol_file_shape
38
- from silx.io.url import DataUrl
39
42
  from tomwer.core.volume.volumebase import TomwerVolumeBase
43
+ from tomwer.core.volume.volumefactory import VolumeFactory
40
44
  from tomwer.gui.settings import Y_AXIS_DOWNWARD
41
45
  from tomwer.gui.visualization.reconstructionparameters import ReconstructionParameters
42
46
  from tomwer.gui.visualization.scanoverview import ScanOverviewWidget
43
47
  from tomwer.io.utils.utils import get_slice_data
44
- from tomwer.core.volume.volumefactory import VolumeFactory
45
48
 
46
49
  try:
47
50
  from PIL import Image
@@ -55,10 +58,11 @@ except ImportError: # pragma: no cover
55
58
  has_cv2 = False # pragma: no cover
56
59
  else:
57
60
  has_cv2 = True
61
+ import os
62
+ import time
63
+
58
64
  import numpy
59
65
  import numpy.lib.npyio
60
- import time
61
- import os
62
66
 
63
67
  _logger = logging.getLogger(__name__)
64
68
 
@@ -496,9 +500,7 @@ class ImageStack(_ImageStack):
496
500
  if data.ndim == 3 and data.shape[0] == 1:
497
501
  data = data.reshape((data.shape[1], data.shape[2]))
498
502
  else:
499
- _logger.warning(
500
- "Image Stack only manage 2D data. Url: {}" "".format(url)
501
- )
503
+ _logger.warning(f"Image Stack only manage 2D data. Url: {url}")
502
504
  return
503
505
  if self._normFct is None:
504
506
  self._urlData[url] = data
@@ -525,9 +527,7 @@ class ImageStack(_ImageStack):
525
527
  self._reconsWidget.setUrl(url)
526
528
  except Exception as e:
527
529
  _logger.info(
528
- "Unable to set reconstruction parameters from"
529
- " {}. Not handled for pyhst reconstructions. "
530
- "Error is {}".format(url, str(e))
530
+ f"Unable to set reconstruction parameters from {url}. Not handled for pyhst reconstructions. Error is {e}"
531
531
  )
532
532
  super().setCurrentUrl(url)
533
533
 
@@ -542,13 +542,12 @@ class ImageStack(_ImageStack):
542
542
  url = DataUrl(path=item.text())
543
543
  except Exception:
544
544
  _logger.info(
545
- "fail to deduce data of last modification for "
546
- "{}".format(item.text())
545
+ f"fail to deduce data of last modification for {item.text()}"
547
546
  )
548
547
  else:
549
548
  if os.path.exists(url.file_path()):
550
549
  lst_m = time.ctime(os.path.getmtime(url.file_path()))
551
- item.setToolTip("last modification : {}".format(lst_m))
550
+ item.setToolTip(f"last modification : {lst_m}")
552
551
  items.append(listWidget.item(i))
553
552
 
554
553
 
@@ -586,9 +585,7 @@ class _TomwerUrlLoader(UrlLoader):
586
585
  except ValueError:
587
586
  self.data = None
588
587
  _logger.warning(
589
- "Fail to open {}. Maybe the reconstruction failed.".format(
590
- self.url.path()
591
- )
588
+ f"Fail to open {self.url.path()}. Maybe the reconstruction failed."
592
589
  )
593
590
 
594
591
  def _load_vol(self):
@@ -632,9 +629,7 @@ class _TomwerUrlLoader(UrlLoader):
632
629
  data = data.reshape(shape)
633
630
  except ValueError:
634
631
  _logger.warning(
635
- "unable to fix shape for raw file {}. "
636
- "Look for information in {}"
637
- "".format(raw_file, info_file)
632
+ f"unable to fix shape for raw file {raw_file}. Look for information in {info_file}"
638
633
  )
639
634
  try:
640
635
  sqr = int(numpy.sqrt(len(data)))
@@ -642,15 +637,12 @@ class _TomwerUrlLoader(UrlLoader):
642
637
  data = data.reshape(shape)
643
638
  except ValueError:
644
639
  _logger.info(
645
- "deduction of shape size for {} "
646
- "failed".format(raw_file)
640
+ f"deduction of shape size for {raw_file} failed"
647
641
  )
648
642
  data = None
649
643
  else:
650
644
  _logger.warning(
651
- f"try deducing shape size for {raw_file} "
652
- "might be an incorrect "
653
- "interpretation"
645
+ f"try deducing shape size for {raw_file} might be an incorrect interpretation"
654
646
  )
655
647
  if self.url.data_slice() is None:
656
648
  return data
@@ -34,21 +34,23 @@ __date__ = "23/03/2022"
34
34
  import functools
35
35
  import logging
36
36
  import os
37
+
37
38
  import numpy
38
39
  from processview.core.dataset import DatasetIdentifier
40
+ from silx.gui import icons as silx_icons
41
+ from silx.gui import qt
42
+ from silx.io.url import DataUrl
43
+ from silx.utils.enum import Enum as _Enum
44
+
39
45
  from tomwer.core.scan.scanbase import TomwerScanBase
40
46
  from tomwer.core.scan.scanfactory import ScanFactory
41
47
  from tomwer.core.utils.image import shift_img
42
- from tomwer.gui.settings import Y_AXIS_DOWNWARD
43
- from tomwer.gui.utils.completer import UrlCompleterDialog
44
- from tomwer.io.utils import get_slice_data
45
48
  from tomwer.gui.qfolderdialog import QDataDialog
46
49
  from tomwer.gui.reconstruction.axis.CompareImages import CompareImages as _CompareImages
50
+ from tomwer.gui.settings import Y_AXIS_DOWNWARD
51
+ from tomwer.gui.utils.completer import UrlCompleterDialog
47
52
  from tomwer.gui.visualization.diffviewer.shiftwidget import TwoFramesShiftTab
48
- from silx.gui import qt
49
- from silx.io.url import DataUrl
50
- from silx.utils.enum import Enum as _Enum
51
- from silx.gui import icons as silx_icons
53
+ from tomwer.io.utils import get_slice_data
52
54
 
53
55
  _logger = logging.getLogger(__name__)
54
56
 
@@ -60,14 +62,14 @@ class CompareImages(_CompareImages):
60
62
  self.getPlot().setPanWithArrowKeys(False)
61
63
  self._firstVisible = True
62
64
 
63
- def setVisible(self, bool):
65
+ def setVisible(self, visible):
64
66
  if self._firstVisible:
65
67
  # hack to enforce matplotlib to replot the widget.
66
68
  # because it looks like it is missing to find the correct viewport
67
69
  # when not visible
68
70
  self.getPlot().resetZoom()
69
71
  self._firstVisible = False
70
- super().setVisible(bool)
72
+ super().setVisible(visible)
71
73
 
72
74
 
73
75
  class _FrameSelector(qt.QWidget):
@@ -166,7 +168,7 @@ class _FrameSelector(qt.QWidget):
166
168
  elif type_selected == self.FrameType.RECON_SLICES:
167
169
  urls = self._scan.get_reconstructions_urls()
168
170
  else:
169
- raise ValueError("Type {} not managed".format(type_selected))
171
+ raise ValueError(f"Type {type_selected} not managed")
170
172
  urls = sorted(urls, key=lambda url: url.path())
171
173
  for url in urls:
172
174
  if url.data_slice() is not None:
@@ -269,7 +271,7 @@ class _FramesSelector(qt.QWidget):
269
271
 
270
272
  def addScan(self, scan):
271
273
  if not isinstance(scan, TomwerScanBase):
272
- raise TypeError("scan should be an instance of {}".format(TomwerScanBase))
274
+ raise TypeError(f"scan should be an instance of {TomwerScanBase}")
273
275
  self._leftScanCB.addScan(scan.get_identifier())
274
276
  self._rightScanCB.addScan(scan.get_identifier())
275
277
 
@@ -319,9 +321,7 @@ class _FramesSelector(qt.QWidget):
319
321
  scans = ScanFactory.create_scan_objects(scan_path=folder)
320
322
  except Exception as e:
321
323
  _logger.error(
322
- "cannot create scan instances from {}. Error is {}".format(
323
- folder, e
324
- )
324
+ f"cannot create scan instances from {folder}. Error is {e}"
325
325
  )
326
326
  else:
327
327
  for scan in scans:
@@ -445,7 +445,7 @@ class DiffFrameViewer(qt.QMainWindow):
445
445
  if data.ndim == 3 and data.shape[0] == 1:
446
446
  data = data.reshape((data.shape[1], data.shape[2]))
447
447
  else:
448
- _logger.error("Cannot display {}. Should be 2D".format(url.path()))
448
+ _logger.error(f"Cannot display {url.path()}. Should be 2D")
449
449
  return
450
450
 
451
451
  if self.isFrameALRFlip():
@@ -478,7 +478,7 @@ class DiffFrameViewer(qt.QMainWindow):
478
478
  if data.ndim == 3 and data.shape[0] == 1:
479
479
  data = data.reshape((data.shape[1], data.shape[2]))
480
480
  else:
481
- _logger.error("Cannot display {}. Should be 2D".format(url.path()))
481
+ _logger.error(f"Cannot display {url.path()}. Should be 2D")
482
482
  return
483
483
  if self.isFrameBLRFlip():
484
484
  data = numpy.fliplr(data)
@@ -548,10 +548,7 @@ class _ScanComboBox(qt.QWidget):
548
548
  try:
549
549
  scan = DatasetIdentifier.recreate_dataset(dataset_id)
550
550
  except Exception as e:
551
- _logger.error(
552
- "Fail to recreate dataset from {}. Reason is {}."
553
- "".format(str(dataset_id), e)
554
- )
551
+ _logger.error(f"Fail to recreate dataset from {dataset_id}. Reason is {e}.")
555
552
  return None
556
553
  else:
557
554
  return scan
@@ -31,9 +31,11 @@ __license__ = "MIT"
31
31
  __date__ = "07/12/2021"
32
32
 
33
33
 
34
+ import sys
35
+
34
36
  from silx.gui import qt
35
37
  from silx.utils.enum import Enum as _Enum
36
- import sys
38
+
37
39
  from tomwer.utils import docstring
38
40
 
39
41
 
@@ -1,4 +1,5 @@
1
1
  from silx.gui import qt
2
+
2
3
  from tomwer.gui.edit.nxtomoeditor import NXtomoEditor as _NXtomoEditor
3
4
 
4
5
 
@@ -28,12 +28,14 @@ __license__ = "MIT"
28
28
  __date__ = "31/03/2021"
29
29
 
30
30
 
31
+ import os
32
+
31
33
  from silx.gui import qt
32
34
  from silx.io.url import DataUrl
33
35
  from silx.io.utils import h5py_read_dataset
34
- from tomwer.core.utils.char import BETA_CHAR, DELTA_CHAR
35
36
  from tomoscan.io import HDF5File
36
- import os
37
+
38
+ from tomwer.core.utils.char import BETA_CHAR, DELTA_CHAR
37
39
 
38
40
 
39
41
  class ReconstructionParameters(qt.QWidget):
@@ -99,8 +101,7 @@ class ReconstructionParameters(qt.QWidget):
99
101
  url = DataUrl(path=url)
100
102
  else:
101
103
  raise TypeError(
102
- "url should be a DataUrl or a str representing"
103
- "an url and not {}".format(type(url))
104
+ f"url should be a DataUrl or a str representing an url and not {type(url)}"
104
105
  )
105
106
  for func in (
106
107
  self._setMethod,
@@ -120,10 +121,10 @@ class ReconstructionParameters(qt.QWidget):
120
121
  func(url)
121
122
 
122
123
  @staticmethod
123
- def _decode_nabu_str(input):
124
- if hasattr(input, "decode"):
125
- input = input.decode("UTF-8")
126
- return input
124
+ def _decode_nabu_str(input_str):
125
+ if hasattr(input_str, "decode"):
126
+ input_str = input_str.decode("UTF-8")
127
+ return input_str
127
128
 
128
129
  def _setMethod(self, url):
129
130
  def get_method_value():
@@ -186,7 +187,7 @@ class ReconstructionParameters(qt.QWidget):
186
187
 
187
188
  value = self._decode_nabu_str(get_distance_value())
188
189
  if value is not None:
189
- value = "{:.2}".format(float(value))
190
+ value = f"{value:.2}"
190
191
  self._distanceQLE.setText(value if value is not None else "")
191
192
 
192
193
  def _setPixelSize(self, url):
@@ -206,7 +207,7 @@ class ReconstructionParameters(qt.QWidget):
206
207
 
207
208
  value = self._decode_nabu_str(get_pixel_size_value())
208
209
  if value is not None:
209
- value = "{:.8}".format(float(value))
210
+ value = f"{float(value):.8}"
210
211
  self._pixelSizeQLE.setText(value if value is not None else "")
211
212
 
212
213
  def _setCor(self, url):
@@ -222,7 +223,7 @@ class ReconstructionParameters(qt.QWidget):
222
223
 
223
224
  value = self._decode_nabu_str(get_cor_value())
224
225
  if value not in (None, "None", "none"):
225
- value = "{:.4f}".format(float(value))
226
+ value = f"{float(value):.4f}"
226
227
  self._corQLE.setText(value if value is not None else "")
227
228
 
228
229
  def _setPaddingType(self, url):
@@ -369,4 +370,4 @@ class ReconstructionParameters(qt.QWidget):
369
370
  if nabu_version is not None:
370
371
  software = "nabu"
371
372
  software_version = nabu_version
372
- self._softwareVersionQLE.setText("{} ({})".format(software, software_version))
373
+ self._softwareVersionQLE.setText(f"{software} ({software_version})")
@@ -28,11 +28,13 @@ __license__ = "MIT"
28
28
  __date__ = "31/03/2021"
29
29
 
30
30
 
31
- from silx.gui import qt
32
- from tomwer.core.scan.scanbase import TomwerScanBase
33
- import weakref
34
31
  import logging
32
+ import weakref
33
+
34
+ from silx.gui import qt
35
+
35
36
  from tomwer.core.scan.edfscan import EDFTomoScan
37
+ from tomwer.core.scan.scanbase import TomwerScanBase
36
38
 
37
39
  _logger = logging.getLogger(__name__)
38
40
 
@@ -31,11 +31,12 @@ __license__ = "MIT"
31
31
  __date__ = "26/03/2020"
32
32
 
33
33
 
34
- from silx.gui import qt
35
- from silx.gui.plot.ImageStack import _PlotWithWaitingLabel
36
34
  import logging
37
35
  import weakref
38
36
 
37
+ from silx.gui import qt
38
+ from silx.gui.plot.ImageStack import _PlotWithWaitingLabel
39
+
39
40
  from tomwer.gui.settings import Y_AXIS_DOWNWARD
40
41
 
41
42
  _logger = logging.getLogger(__name__)
@@ -29,8 +29,10 @@ __date__ = "30/07/2020"
29
29
 
30
30
 
31
31
  import unittest
32
- from silx.gui.utils.testutils import TestCaseQt
32
+
33
33
  from silx.gui import qt
34
+ from silx.gui.utils.testutils import TestCaseQt
35
+
34
36
  from tomwer.gui.visualization.dataviewer import DataViewer, ImageStack
35
37
 
36
38
 
@@ -28,15 +28,17 @@ __license__ = "MIT"
28
28
  __date__ = "21/06/2021"
29
29
 
30
30
 
31
+ import logging
32
+ import os
33
+ import shutil
34
+ import tempfile
35
+ import unittest
36
+
31
37
  from silx.gui import qt
32
- from tomwer.core.utils.scanutils import MockHDF5
33
38
  from silx.gui.utils.testutils import TestCaseQt
39
+
40
+ from tomwer.core.utils.scanutils import MockHDF5
34
41
  from tomwer.gui.visualization.diffviewer import DiffFrameViewer
35
- import unittest
36
- import logging
37
- import tempfile
38
- import shutil
39
- import os
40
42
 
41
43
  logging.disable(logging.INFO)
42
44
 
@@ -1,12 +1,14 @@
1
1
  import os
2
- import pytest
2
+
3
3
  import numpy
4
+ import pytest
5
+ from nxtomomill.nexus.nxtomo import NXtomo
6
+ from silx.gui import qt
4
7
  from tomoscan.esrf.scan.hdf5scan import ImageKey
8
+
5
9
  from tomwer.core.scan.hdf5scan import HDF5TomoScan
6
10
  from tomwer.gui.visualization.nxtomometadata import NXtomoMetadataViewer
7
- from nxtomomill.nexus.nxtomo import NXtomo
8
11
  from tomwer.tests.conftest import qtapp # noqa F401
9
- from silx.gui import qt
10
12
 
11
13
 
12
14
  def test_nx_editor(
@@ -28,12 +28,14 @@ __license__ = "MIT"
28
28
  __date__ = "15/12/2021"
29
29
 
30
30
 
31
+ import os
32
+ import shutil
31
33
  import tempfile
32
- from silx.gui.utils.testutils import TestCaseQt
34
+
33
35
  from silx.gui import qt
36
+ from silx.gui.utils.testutils import TestCaseQt
34
37
  from silx.io.url import DataUrl
35
- import shutil
36
- import os
38
+
37
39
  from tomwer.core.utils import scanutils
38
40
  from tomwer.gui.visualization.reconstructionparameters import ReconstructionParameters
39
41
 
@@ -28,17 +28,18 @@ __license__ = "MIT"
28
28
  __date__ = "22/01/2017"
29
29
 
30
30
 
31
- from silx.gui.utils.testutils import SignalListener
32
- from tomwer.gui.visualization import sinogramviewer
33
- from silx.gui import qt
34
- from tomwer.core.utils.scanutils import MockHDF5
35
- from silx.gui.utils.testutils import TestCaseQt
36
- import unittest
37
31
  import logging
38
- import time
39
- import tempfile
40
- import shutil
41
32
  import os
33
+ import shutil
34
+ import tempfile
35
+ import time
36
+ import unittest
37
+
38
+ from silx.gui import qt
39
+ from silx.gui.utils.testutils import SignalListener, TestCaseQt
40
+
41
+ from tomwer.core.utils.scanutils import MockHDF5
42
+ from tomwer.gui.visualization import sinogramviewer
42
43
 
43
44
  logging.disable(logging.INFO)
44
45
 
@@ -26,20 +26,22 @@ __authors__ = ["H. Payno"]
26
26
  __license__ = "MIT"
27
27
  __date__ = "16/06/2021"
28
28
 
29
+ import logging
29
30
  import os
30
31
  import shutil
31
32
  import tempfile
33
+ import time
34
+ import weakref
35
+
32
36
  import numpy
33
- from tomwer.core.utils.scanutils import MockHDF5
34
- from tomwer.gui.stacks import SliceStack, RadioStack
37
+ import pytest
35
38
  from silx.gui import qt
36
39
  from silx.gui.utils.testutils import TestCaseQt
37
- import logging
38
- import time
39
- import pytest
40
40
  from tomoscan.esrf.volume.edfvolume import EDFVolume
41
+
42
+ from tomwer.core.utils.scanutils import MockHDF5
43
+ from tomwer.gui.stacks import RadioStack, SliceStack
41
44
  from tomwer.tests.utils import skip_gui_test
42
- import weakref
43
45
 
44
46
  logging.disable(logging.INFO)
45
47
 
@@ -28,17 +28,19 @@ __license__ = "MIT"
28
28
  __date__ = "21/06/2021"
29
29
 
30
30
 
31
+ import logging
32
+ import os
33
+ import shutil
34
+ import tempfile
35
+ import unittest
36
+
37
+ import numpy
31
38
  from silx.gui import qt
32
- from tomwer.core.utils.scanutils import MockHDF5
33
39
  from silx.gui.utils.testutils import TestCaseQt
34
- from tomwer.gui.visualization.volumeviewer import VolumeViewer
35
40
  from tomoscan.esrf.volume.hdf5volume import HDF5Volume
36
- import numpy
37
- import unittest
38
- import logging
39
- import tempfile
40
- import shutil
41
- import os
41
+
42
+ from tomwer.core.utils.scanutils import MockHDF5
43
+ from tomwer.gui.visualization.volumeviewer import VolumeViewer
42
44
 
43
45
  logging.disable(logging.INFO)
44
46
 
@@ -1,10 +1,13 @@
1
- from .volumeoverview import VolumeOverviewWidget
2
- from .scanoverview import ScanOverviewWidget
1
+ from typing import Optional
2
+
3
3
  from silx.gui import qt
4
+
5
+ from tomwer.core.scan.scanbase import TomwerScanBase
4
6
  from tomwer.core.tomwer_object import TomwerObject
5
7
  from tomwer.core.volume.volumebase import TomwerVolumeBase
6
- from tomwer.core.scan.scanbase import TomwerScanBase
7
- from typing import Optional
8
+
9
+ from .scanoverview import ScanOverviewWidget
10
+ from .volumeoverview import VolumeOverviewWidget
8
11
 
9
12
 
10
13
  class TomoObjOverview(qt.QWidget):
@@ -1,8 +1,10 @@
1
+ import logging
2
+ from typing import Optional
3
+
1
4
  from silx.gui import qt
2
- from tomwer.core.volume.volumebase import TomwerVolumeBase
3
5
  from tomoscan.identifier import VolumeIdentifier
4
- from typing import Optional
5
- import logging
6
+
7
+ from tomwer.core.volume.volumebase import TomwerVolumeBase
6
8
 
7
9
  _logger = logging.getLogger(__name__)
8
10
 
@@ -28,25 +28,26 @@ __license__ = "MIT"
28
28
  __date__ = "05/08/2020"
29
29
 
30
30
 
31
+ import logging
32
+ import os
33
+ import weakref
34
+
35
+ import numpy
36
+ import numpy.lib.npyio
37
+ import silx
31
38
  from silx.gui import qt
32
- from tomoscan.volumebase import VolumeBase
33
- from tomoscan.identifier import VolumeIdentifier
34
- from tomoscan.esrf.volume.hdf5volume import HDF5Volume
35
- from tomoscan.factory import Factory
39
+ from silx.gui.colors import Colormap
36
40
  from silx.gui.data.DataViewerFrame import DataViewerFrame
41
+ from silx.gui.data.DataViews import IMAGE_MODE, DataViewHooks
37
42
  from silx.gui.dialog.ColormapDialog import ColormapDialog
38
- from silx.gui.data.DataViews import DataViewHooks
39
- from silx.gui.data.DataViews import IMAGE_MODE
40
- import os
43
+ from tomoscan.esrf.volume.hdf5volume import HDF5Volume
44
+ from tomoscan.factory import Factory
45
+ from tomoscan.identifier import VolumeIdentifier
46
+ from tomoscan.volumebase import VolumeBase
47
+
41
48
  from tomwer.core.scan.scanbase import TomwerScanBase
42
- import logging
43
49
  from tomwer.core.utils.ftseriesutils import get_vol_file_shape
44
- import weakref
45
50
  from tomwer.gui.visualization.reconstructionparameters import ReconstructionParameters
46
- import silx
47
- from silx.gui.colors import Colormap
48
- import numpy
49
- import numpy.lib.npyio
50
51
 
51
52
  _logger = logging.getLogger(__name__)
52
53
 
@@ -292,7 +293,7 @@ class VolumeViewer(qt.QMainWindow):
292
293
  return
293
294
 
294
295
  elif len(scan.latest_vol_reconstructions) == 0:
295
- _logger.warning("No reconstructed volume for {}".format(scan))
296
+ _logger.warning(f"No reconstructed volume for {scan}")
296
297
  self.clear()
297
298
  self._infoWidget.setScan(scan)
298
299
  else:
@@ -1,5 +1,5 @@
1
- from .utils import get_slice_data # noqa F401
2
- from .utils import get_default_directory # noqa F401
3
1
  from .utils import format_stderr_stdout # noqa F401
4
- from .utils import get_linked_files_with_vds # noqa F401
2
+ from .utils import get_default_directory # noqa F401
5
3
  from .utils import get_linked_files_with_entry # noqa F401
4
+ from .utils import get_linked_files_with_vds # noqa F401
5
+ from .utils import get_slice_data # noqa F401
@@ -32,9 +32,10 @@ __date__ = "22/04/2021"
32
32
 
33
33
 
34
34
  import contextlib
35
+
36
+ import h5py
35
37
  from silx.io.url import DataUrl
36
38
  from tomoscan.io import HDF5File
37
- import h5py
38
39
 
39
40
 
40
41
  class _BaseReader(contextlib.AbstractContextManager):