tomwer 1.1.1__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 (353) 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 +27 -34
  46. orangecontrib/tomwer/widgets/reconstruction/SADeltaBetaOW.py +23 -25
  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/utils.py +17 -15
  124. tomwer/core/process/reconstruction/normalization/__init__.py +1 -3
  125. tomwer/core/process/reconstruction/normalization/normalization.py +16 -21
  126. tomwer/core/process/reconstruction/normalization/params.py +2 -2
  127. tomwer/core/process/reconstruction/saaxis/__init__.py +1 -1
  128. tomwer/core/process/reconstruction/saaxis/params.py +6 -7
  129. tomwer/core/process/reconstruction/saaxis/saaxis.py +44 -55
  130. tomwer/core/process/reconstruction/sadeltabeta/__init__.py +1 -1
  131. tomwer/core/process/reconstruction/sadeltabeta/params.py +9 -13
  132. tomwer/core/process/reconstruction/sadeltabeta/sadeltabeta.py +40 -46
  133. tomwer/core/process/reconstruction/scores/__init__.py +2 -2
  134. tomwer/core/process/reconstruction/scores/params.py +6 -9
  135. tomwer/core/process/reconstruction/scores/scores.py +10 -13
  136. tomwer/core/process/reconstruction/test/test_axis_params.py +4 -2
  137. tomwer/core/process/reconstruction/test/test_darkref.py +1 -2
  138. tomwer/core/process/reconstruction/test/test_darkref_copy.py +3 -1
  139. tomwer/core/process/reconstruction/test/test_paramsbase.py +1 -1
  140. tomwer/core/process/reconstruction/test/test_saaxis.py +11 -7
  141. tomwer/core/process/reconstruction/test/test_sadeltabeta.py +5 -4
  142. tomwer/core/process/reconstruction/test/test_utils.py +3 -2
  143. tomwer/core/process/script/python.py +6 -8
  144. tomwer/core/process/task.py +11 -12
  145. tomwer/core/process/test/test_axis.py +12 -9
  146. tomwer/core/process/test/test_conditions.py +8 -8
  147. tomwer/core/process/test/test_dark_and_flat.py +9 -8
  148. tomwer/core/process/test/test_data_listener.py +5 -3
  149. tomwer/core/process/test/test_data_transfer.py +14 -12
  150. tomwer/core/process/test/test_data_watcher.py +3 -1
  151. tomwer/core/process/test/test_lamino.py +3 -1
  152. tomwer/core/process/test/test_nabu.py +13 -12
  153. tomwer/core/process/test/test_normalization.py +7 -5
  154. tomwer/core/process/test/test_timer.py +2 -1
  155. tomwer/core/process/utils.py +9 -9
  156. tomwer/core/progress.py +3 -4
  157. tomwer/core/scan/blissscan.py +4 -2
  158. tomwer/core/scan/edfscan.py +26 -29
  159. tomwer/core/scan/futurescan.py +2 -1
  160. tomwer/core/scan/hdf5scan.py +21 -28
  161. tomwer/core/scan/scanbase.py +18 -18
  162. tomwer/core/scan/scanfactory.py +20 -21
  163. tomwer/core/scan/scantype.py +7 -0
  164. tomwer/core/scan/test/test_edf.py +2 -1
  165. tomwer/core/scan/test/test_future_scan.py +2 -1
  166. tomwer/core/scan/test/test_h5.py +5 -4
  167. tomwer/core/scan/test/test_process_registration.py +5 -3
  168. tomwer/core/scan/test/test_scan.py +11 -9
  169. tomwer/core/settings.py +1 -2
  170. tomwer/core/test/test_lamino.py +3 -2
  171. tomwer/core/test/test_scanutils.py +3 -2
  172. tomwer/core/test/test_utils.py +6 -4
  173. tomwer/core/utils/__init__.py +8 -6
  174. tomwer/core/utils/deprecation.py +2 -2
  175. tomwer/core/utils/image.py +4 -3
  176. tomwer/core/utils/locker.py +1 -1
  177. tomwer/core/utils/normalization.py +1 -0
  178. tomwer/core/utils/nxtomoutils.py +2 -1
  179. tomwer/core/utils/scanutils.py +9 -6
  180. tomwer/core/utils/slurm.py +2 -1
  181. tomwer/core/utils/time.py +2 -4
  182. tomwer/core/utils/volumeutils.py +2 -1
  183. tomwer/core/volume/__init__.py +1 -1
  184. tomwer/core/volume/edfvolume.py +4 -3
  185. tomwer/core/volume/hdf5volume.py +6 -8
  186. tomwer/core/volume/jp2kvolume.py +4 -3
  187. tomwer/core/volume/rawvolume.py +7 -7
  188. tomwer/core/volume/tiffvolume.py +8 -6
  189. tomwer/core/volume/volumebase.py +1 -0
  190. tomwer/core/volume/volumefactory.py +18 -18
  191. tomwer/gui/cluster/slurm.py +2 -0
  192. tomwer/gui/cluster/supervisor.py +4 -2
  193. tomwer/gui/cluster/test/test_cluster.py +5 -4
  194. tomwer/gui/cluster/test/test_supervisor.py +4 -2
  195. tomwer/gui/conditions/filter.py +7 -6
  196. tomwer/gui/control/actions.py +1 -0
  197. tomwer/gui/control/datadiscovery.py +168 -0
  198. tomwer/gui/control/datalist.py +29 -28
  199. tomwer/gui/control/datalistener.py +8 -4
  200. tomwer/gui/control/datareacheractions.py +2 -1
  201. tomwer/gui/control/datatransfert.py +3 -1
  202. tomwer/gui/control/datavalidator.py +11 -12
  203. tomwer/gui/control/datawatcher/configuration.py +12 -1
  204. tomwer/gui/control/datawatcher/controlwidget.py +116 -0
  205. tomwer/gui/control/datawatcher/datawatcher.py +63 -121
  206. tomwer/gui/control/datawatcher/datawatcherobserver.py +7 -9
  207. tomwer/gui/control/history.py +3 -1
  208. tomwer/gui/control/observations.py +7 -7
  209. tomwer/gui/control/scanselectorwidget.py +4 -2
  210. tomwer/gui/control/selectorwidgetbase.py +3 -1
  211. tomwer/gui/control/serie/seriecreator.py +11 -12
  212. tomwer/gui/control/singletomoobj.py +4 -4
  213. tomwer/gui/control/test/test_datadiscovery.py +27 -0
  214. tomwer/gui/control/test/test_datalist.py +7 -6
  215. tomwer/gui/control/test/test_datalistener.py +4 -4
  216. tomwer/gui/control/test/test_datavalidator.py +3 -1
  217. tomwer/gui/control/test/test_inputwidget.py +5 -4
  218. tomwer/gui/control/test/test_process_manager.py +3 -3
  219. tomwer/gui/control/test/test_scanselector.py +6 -4
  220. tomwer/gui/control/test/test_scanvalidator.py +6 -5
  221. tomwer/gui/control/test/test_single_tomo_obj.py +5 -3
  222. tomwer/gui/control/test/test_volume_dialog.py +7 -5
  223. tomwer/gui/control/test/test_volumeselector.py +8 -6
  224. tomwer/gui/control/volumeselectorwidget.py +2 -1
  225. tomwer/gui/debugtools/datasetgenerator.py +2 -1
  226. tomwer/gui/debugtools/objectinspector.py +6 -7
  227. tomwer/gui/edit/dkrfpatch.py +11 -10
  228. tomwer/gui/edit/imagekeyeditor.py +12 -12
  229. tomwer/gui/edit/nxtomoeditor.py +8 -7
  230. tomwer/gui/edit/test/test_dkrf_patch.py +10 -9
  231. tomwer/gui/edit/test/test_image_key_editor.py +8 -6
  232. tomwer/gui/edit/test/test_nx_editor.py +7 -5
  233. tomwer/gui/icons.py +3 -2
  234. tomwer/gui/illustrations.py +3 -2
  235. tomwer/gui/imagefromfile.py +3 -1
  236. tomwer/gui/qfolderdialog.py +14 -12
  237. tomwer/gui/reconstruction/axis/CompareImages.py +9 -8
  238. tomwer/gui/reconstruction/axis/__init__.py +1 -1
  239. tomwer/gui/reconstruction/axis/axis.py +9 -7
  240. tomwer/gui/reconstruction/axis/radioaxis.py +30 -32
  241. tomwer/gui/reconstruction/darkref/darkrefcopywidget.py +6 -5
  242. tomwer/gui/reconstruction/darkref/darkrefwidget.py +4 -2
  243. tomwer/gui/reconstruction/lamino/tofu/misc.py +3 -1
  244. tomwer/gui/reconstruction/lamino/tofu/projections.py +16 -8
  245. tomwer/gui/reconstruction/lamino/tofu/tofu.py +6 -3
  246. tomwer/gui/reconstruction/lamino/tofu/tofuexpert.py +5 -2
  247. tomwer/gui/reconstruction/lamino/tofu/tofuoutput.py +8 -5
  248. tomwer/gui/reconstruction/nabu/action.py +1 -0
  249. tomwer/gui/reconstruction/nabu/castvolume.py +6 -4
  250. tomwer/gui/reconstruction/nabu/check.py +3 -2
  251. tomwer/gui/reconstruction/nabu/nabuconfig/base.py +5 -2
  252. tomwer/gui/reconstruction/nabu/nabuconfig/ctf.py +6 -3
  253. tomwer/gui/reconstruction/nabu/nabuconfig/nabuconfig.py +4 -3
  254. tomwer/gui/reconstruction/nabu/nabuconfig/output.py +7 -5
  255. tomwer/gui/reconstruction/nabu/nabuconfig/phase.py +8 -6
  256. tomwer/gui/reconstruction/nabu/nabuconfig/preprocessing.py +7 -7
  257. tomwer/gui/reconstruction/nabu/nabuconfig/reconstruction.py +40 -33
  258. tomwer/gui/reconstruction/nabu/nabuflow.py +7 -4
  259. tomwer/gui/reconstruction/nabu/slices.py +14 -10
  260. tomwer/gui/reconstruction/nabu/slurm.py +1 -0
  261. tomwer/gui/reconstruction/nabu/volume.py +5 -3
  262. tomwer/gui/reconstruction/normalization/intensity.py +14 -13
  263. tomwer/gui/reconstruction/saaxis/corrangeselector.py +36 -35
  264. tomwer/gui/reconstruction/saaxis/dimensionwidget.py +5 -4
  265. tomwer/gui/reconstruction/saaxis/saaxis.py +17 -17
  266. tomwer/gui/reconstruction/saaxis/sliceselector.py +5 -5
  267. tomwer/gui/reconstruction/sadeltabeta/saadeltabeta.py +33 -36
  268. tomwer/gui/reconstruction/scores/scoreplot.py +19 -18
  269. tomwer/gui/reconstruction/test/test_axis.py +14 -13
  270. tomwer/gui/reconstruction/test/test_lamino.py +3 -2
  271. tomwer/gui/reconstruction/test/test_nabu.py +8 -6
  272. tomwer/gui/reconstruction/test/test_saaxis.py +17 -15
  273. tomwer/gui/reconstruction/test/test_sadeltabeta.py +15 -13
  274. tomwer/gui/samplemoved/__init__.py +8 -7
  275. tomwer/gui/samplemoved/selectiontable.py +4 -2
  276. tomwer/gui/stackplot.py +14 -13
  277. tomwer/gui/stacks.py +11 -9
  278. tomwer/gui/test/test_axis_gui.py +5 -4
  279. tomwer/gui/test/test_qfolder_dialog.py +2 -1
  280. tomwer/gui/utils/__init__.py +5 -5
  281. tomwer/gui/utils/buttons.py +1 -0
  282. tomwer/gui/utils/completer.py +1 -0
  283. tomwer/gui/utils/flow.py +4 -2
  284. tomwer/gui/utils/illustrations.py +1 -0
  285. tomwer/gui/utils/inputwidget.py +11 -17
  286. tomwer/gui/utils/lineselector/lineselector.py +6 -8
  287. tomwer/gui/utils/qt_utils.py +1 -0
  288. tomwer/gui/utils/scandescription.py +2 -0
  289. tomwer/gui/utils/splashscreen.py +1 -1
  290. tomwer/gui/utils/unitsystem.py +3 -1
  291. tomwer/gui/utils/vignettes.py +8 -8
  292. tomwer/gui/utils/waiterthread.py +2 -1
  293. tomwer/gui/visualization/dataviewer.py +20 -28
  294. tomwer/gui/visualization/diffviewer/diffviewer.py +17 -20
  295. tomwer/gui/visualization/diffviewer/shiftwidget.py +3 -1
  296. tomwer/gui/visualization/nxtomometadata.py +1 -0
  297. tomwer/gui/visualization/reconstructionparameters.py +13 -12
  298. tomwer/gui/visualization/scanoverview.py +5 -3
  299. tomwer/gui/visualization/sinogramviewer.py +3 -2
  300. tomwer/gui/visualization/test/test_dataviewer.py +3 -1
  301. tomwer/gui/visualization/test/test_diffviewer.py +8 -6
  302. tomwer/gui/visualization/test/test_nx_tomo_metadata_viewer.py +5 -3
  303. tomwer/gui/visualization/test/test_reconstruction_parameters.py +5 -3
  304. tomwer/gui/visualization/test/test_sinogramviewer.py +10 -9
  305. tomwer/gui/visualization/test/test_stacks.py +8 -6
  306. tomwer/gui/visualization/test/test_volumeviewer.py +10 -8
  307. tomwer/gui/visualization/tomoobjoverview.py +7 -4
  308. tomwer/gui/visualization/volumeoverview.py +5 -3
  309. tomwer/gui/visualization/volumeviewer.py +15 -14
  310. tomwer/io/utils/__init__.py +3 -3
  311. tomwer/io/utils/h5pyutils.py +2 -1
  312. tomwer/io/utils/utils.py +17 -21
  313. tomwer/resources/__init__.py +1 -1
  314. tomwer/synctools/axis.py +3 -1
  315. tomwer/synctools/darkref.py +3 -2
  316. tomwer/synctools/datalistener.py +10 -6
  317. tomwer/synctools/datatransfert.py +2 -3
  318. tomwer/synctools/imageloaderthread.py +5 -3
  319. tomwer/synctools/rsyncmanager.py +3 -2
  320. tomwer/synctools/saaxis.py +3 -1
  321. tomwer/synctools/sadeltabeta.py +3 -1
  322. tomwer/synctools/stacks/control/datalistener.py +9 -12
  323. tomwer/synctools/stacks/edit/darkflatpatch.py +13 -12
  324. tomwer/synctools/stacks/edit/imagekeyeditor.py +12 -11
  325. tomwer/synctools/stacks/processingstack.py +3 -2
  326. tomwer/synctools/stacks/reconstruction/axis.py +12 -12
  327. tomwer/synctools/stacks/reconstruction/castvolume.py +8 -5
  328. tomwer/synctools/stacks/reconstruction/dkrefcopy.py +10 -9
  329. tomwer/synctools/stacks/reconstruction/lamino.py +9 -7
  330. tomwer/synctools/stacks/reconstruction/nabu.py +18 -17
  331. tomwer/synctools/stacks/reconstruction/normalization.py +12 -16
  332. tomwer/synctools/stacks/reconstruction/saaxis.py +13 -11
  333. tomwer/synctools/stacks/reconstruction/sadeltabeta.py +16 -14
  334. tomwer/synctools/test/test_darkRefs.py +4 -3
  335. tomwer/synctools/test/test_foldertransfer.py +14 -12
  336. tomwer/synctools/test/test_scanstages.py +8 -7
  337. tomwer/synctools/utils/scanstages.py +7 -5
  338. tomwer/tests/conftest.py +4 -4
  339. tomwer/tests/test_scripts.py +3 -2
  340. tomwer/tests/utils/__init__.py +5 -4
  341. tomwer/tests/utils/utilstest.py +5 -6
  342. tomwer/third_party/nabu/preproc/phase.py +7 -5
  343. tomwer/third_party/nabu/utils.py +3 -2
  344. tomwer/utils.py +12 -12
  345. tomwer/version.py +4 -4
  346. {tomwer-1.1.1.dist-info → tomwer-1.2.0a0.dist-info}/METADATA +2 -2
  347. {tomwer-1.1.1.dist-info → tomwer-1.2.0a0.dist-info}/RECORD +353 -345
  348. /tomwer-1.1.1-py3.8-nspkg.pth → /tomwer-1.2.0a0-py3.8-nspkg.pth +0 -0
  349. {tomwer-1.1.1.dist-info → tomwer-1.2.0a0.dist-info}/LICENSE +0 -0
  350. {tomwer-1.1.1.dist-info → tomwer-1.2.0a0.dist-info}/WHEEL +0 -0
  351. {tomwer-1.1.1.dist-info → tomwer-1.2.0a0.dist-info}/entry_points.txt +0 -0
  352. {tomwer-1.1.1.dist-info → tomwer-1.2.0a0.dist-info}/namespace_packages.txt +0 -0
  353. {tomwer-1.1.1.dist-info → tomwer-1.2.0a0.dist-info}/top_level.txt +0 -0
@@ -34,23 +34,26 @@ __license__ = "MIT"
34
34
  __date__ = "26/02/2021"
35
35
 
36
36
 
37
- from tomwer.gui import icons
38
- from tomwer.core.process.reconstruction.saaxis.saaxis import ReconstructionMode
39
- from tomwer.gui.utils.slider import LogSlider
40
- from tomwer.core.scan.scanbase import TomwerScanBase
37
+ import functools
38
+ import logging
39
+ import weakref
41
40
  from typing import Union
41
+
42
+ import numpy
43
+ from silx.gui import icons as silxicons
44
+ from silx.gui import qt
45
+ from silx.gui.dialog.ImageFileDialog import ImageFileDialog
42
46
  from silx.gui.plot import items
43
47
  from silx.utils.enum import Enum as _Enum
48
+ from tomoscan.esrf.scan.utils import get_data
49
+
50
+ from tomwer.core.process.reconstruction.saaxis.saaxis import ReconstructionMode
51
+ from tomwer.core.scan.scanbase import TomwerScanBase
52
+ from tomwer.gui import icons
44
53
  from tomwer.gui.reconstruction.saaxis.sliceselector import SliceSelector
45
- from tomwer.gui.visualization.sinogramviewer import SinogramViewer as _SinogramViewer
46
54
  from tomwer.gui.utils.lineselector import QSliceSelectorDialog
47
- from silx.gui import qt, icons as silxicons
48
- from silx.gui.dialog.ImageFileDialog import ImageFileDialog
49
- from tomoscan.esrf.scan.utils import get_data
50
- import numpy
51
- import weakref
52
- import logging
53
- import functools
55
+ from tomwer.gui.utils.slider import LogSlider
56
+ from tomwer.gui.visualization.sinogramviewer import SinogramViewer as _SinogramViewer
54
57
 
55
58
  _logger = logging.getLogger(__name__)
56
59
 
@@ -124,13 +127,13 @@ class SinogramViewer(_SinogramViewer):
124
127
  and self._estimated_cor is not None
125
128
  ):
126
129
  self.setCorRange(
127
- min=self._min,
128
- max=self._max,
130
+ cor_min=self._min,
131
+ cor_max=self._max,
129
132
  estimated_cor=self._estimated_cor,
130
133
  other_cors=self._other_cors,
131
134
  )
132
135
 
133
- def setCorRange(self, min, max, estimated_cor, other_cors=tuple()):
136
+ def setCorRange(self, cor_min, cor_max, estimated_cor, other_cors=tuple()):
134
137
  """
135
138
  For now we can only modify the estimated cor
136
139
 
@@ -140,8 +143,8 @@ class SinogramViewer(_SinogramViewer):
140
143
  :param int display_n_recons: the grid created by all cor observe
141
144
  :return:
142
145
  """
143
- self._min = min
144
- self._max = max
146
+ self._min = cor_min
147
+ self._max = cor_max
145
148
  self._estimated_cor = estimated_cor
146
149
  self._other_cors = other_cors if other_cors is not None else tuple()
147
150
 
@@ -168,10 +171,10 @@ class SinogramViewer(_SinogramViewer):
168
171
  plot.removeMarker(marker)
169
172
  # recreate markers
170
173
  plot.addXMarker(
171
- x=min, legend="from", text="from", color="#3449ebff", draggable=True
174
+ x=cor_min, legend="from", text="from", color="#3449ebff", draggable=True
172
175
  )
173
176
  plot.addXMarker(
174
- x=max, legend="to", text="to", color="#3449ebff", draggable=True
177
+ x=cor_max, legend="to", text="to", color="#3449ebff", draggable=True
175
178
  )
176
179
  plot.addXMarker(
177
180
  x=estimated_cor,
@@ -182,7 +185,7 @@ class SinogramViewer(_SinogramViewer):
182
185
  )
183
186
  for i_cor, cor in enumerate(other_cors):
184
187
  plot.addXMarker(
185
- x=cor, legend="cor_{}".format(i_cor), draggable=False, color="#34dceb42"
188
+ x=cor, legend=f"cor_{i_cor}", draggable=False, color="#34dceb42"
186
189
  )
187
190
 
188
191
  # handle draggable markers
@@ -274,15 +277,13 @@ class _ReconstructionModeGB(qt.QGroupBox):
274
277
  valid_modes = ("vertical", "horizontal")
275
278
  if mode not in valid_modes:
276
279
  raise ValueError(
277
- "mode {} is not recosgnized. Valid modes are {}"
278
- "".format(mode, valid_modes)
280
+ f"mode {mode} is not recosgnized. Valid modes are {valid_modes}"
279
281
  )
280
282
  self._verticalRB.setChecked(mode == "vertical")
281
283
  if mode == "vertical":
282
284
  if slices not in self._DEFAULT_VERTICAL_SLICE_MODE:
283
285
  raise ValueError(
284
- "{} is not a vadid slice mode. Calid are {}"
285
- "".format(slices, self._DEFAULT_VERTICAL_SLICE_MODE)
286
+ f"{slices} is not a vadid slice mode. Calid are {self._DEFAULT_VERTICAL_SLICE_MODE}"
286
287
  )
287
288
  else:
288
289
  index = self._defaultSlicesCB.findText(slices)
@@ -358,29 +359,29 @@ class _ReconstructionModeGB(qt.QGroupBox):
358
359
  else:
359
360
  return self._sliceVerticalQSB.getSlicesValue()
360
361
  else:
361
- raise ValueError("mode {} is not handled".format(mode))
362
+ raise ValueError(f"mode {mode} is not handled")
362
363
 
363
- def setReconstructionSlices(self, slice: Union[dict, int, str]):
364
+ def setReconstructionSlices(self, slice_: Union[dict, int, str]):
364
365
  slice_name = None
365
- if slice == "middle" or isinstance(slice, int) or len(slice) == 1:
366
+ if slice_ == "middle" or isinstance(slice_, int) or len(slice_) == 1:
366
367
  self.setReconstructionMode(ReconstructionMode.VERTICAL)
367
368
  target = self._sliceVerticalQSB
368
- if slice == "middle":
369
+ if slice_ == "middle":
369
370
  index = self._defaultSlicesCB.findText("middle")
370
371
  else:
371
372
  index = self._defaultSlicesCB.findText("other")
372
373
  slice_name = "Slice"
373
374
  self._defaultSlicesCB.setCurrentIndex(index)
374
- elif len(slice) == 2:
375
+ elif len(slice_) == 2:
375
376
  self.setReconstructionMode(ReconstructionMode.TILT_CORRECTION)
376
377
  target = self._sliceTiltCorrQSB
377
378
  else:
378
379
  raise ValueError("slice is expected to contain one or two element(s)")
379
- if slice not in ("middle",):
380
- if isinstance(slice, int):
381
- target.setSliceValue(name=slice_name, value=slice)
380
+ if slice_ not in ("middle",):
381
+ if isinstance(slice_, int):
382
+ target.setSliceValue(name=slice_name, value=slice_)
382
383
  else:
383
- for slice_name, slice_value in slice.items():
384
+ for slice_name, slice_value in slice_.items():
384
385
  target.setSliceValue(name=slice_name, value=slice_value)
385
386
 
386
387
  def _reconstructionModeChanged(self, *args, **kwargs):
@@ -534,14 +535,14 @@ class _EstimatedCorWidget(qt.QGroupBox):
534
535
  else:
535
536
  return self._MIDDLE_COR_TXT
536
537
  else:
537
- raise ValueError("Mode {} is not recognized".format(mode))
538
+ raise ValueError(f"Mode {mode} is not recognized")
538
539
  else:
539
540
  if mode in ("rel", "relative"):
540
541
  return self._manualCORRel.value()
541
542
  elif mode in ("abs", "absolute"):
542
543
  return self._manualCORAbs.value()
543
544
  else:
544
- raise ValueError("Mode {} is not recognized".format(mode))
545
+ raise ValueError(f"Mode {mode} is not recognized")
545
546
 
546
547
  def _modeChanged(self, *args, **kwargs):
547
548
  manual_opt_visible = not self._middlePositionRB.isChecked()
@@ -34,9 +34,10 @@ __license__ = "MIT"
34
34
  __date__ = "05/02/2021"
35
35
 
36
36
 
37
+ from collections.abc import Iterable
38
+
37
39
  from silx.gui import qt
38
40
  from tomoscan.unitsystem import metricsystem
39
- from collections.abc import Iterable
40
41
 
41
42
 
42
43
  class DimensionWidget(qt.QGroupBox):
@@ -85,7 +86,7 @@ class DimensionWidget(qt.QGroupBox):
85
86
  self._dim0ValueQLE.setSingleStep(0.0001)
86
87
  self._dim0ValueQLE.setValue(self._getDim0DisplayValue())
87
88
  if dims_colors is not None:
88
- stylesheet = "background-color: {}".format(dims_colors[0])
89
+ stylesheet = f"background-color: {dims_colors[0]}"
89
90
  self._dim0ValueQLE.setStyleSheet(stylesheet)
90
91
  self.layout().addWidget(self._dim0ValueQLE)
91
92
  # dim 1
@@ -97,7 +98,7 @@ class DimensionWidget(qt.QGroupBox):
97
98
  self._dim1ValueQLE.setSingleStep(0.0001)
98
99
  self._dim1ValueQLE.setValue(self._getDim1DisplayValue())
99
100
  if dims_colors is not None:
100
- stylesheet = "background-color: {}".format(dims_colors[1])
101
+ stylesheet = f"background-color: {dims_colors[1]}"
101
102
  self._dim1ValueQLE.setStyleSheet(stylesheet)
102
103
  self.layout().addWidget(self._dim1ValueQLE)
103
104
  # dim 2
@@ -109,7 +110,7 @@ class DimensionWidget(qt.QGroupBox):
109
110
  self._dim2ValueQLE.setSingleStep(0.0001)
110
111
  self._dim2ValueQLE.setValue(self._getDim2DisplayValue())
111
112
  if dims_colors is not None:
112
- stylesheet = "background-color: {}".format(dims_colors[2])
113
+ stylesheet = f"background-color: {dims_colors[2]}"
113
114
  self._dim2ValueQLE.setStyleSheet(stylesheet)
114
115
  self.layout().addWidget(self._dim2ValueQLE)
115
116
 
@@ -34,25 +34,26 @@ __license__ = "MIT"
34
34
  __date__ = "01/02/2021"
35
35
 
36
36
 
37
+ import logging
38
+ from typing import Union
39
+
40
+ import numpy
37
41
  from silx.gui import qt
38
- from tomwer.gui import icons
39
- from tomwer.gui.reconstruction.nabu.slices import NabuWindow
40
- from tomwer.gui.reconstruction.axis.radioaxis import _CalculationWidget
41
- from tomwer.synctools.axis import QAxisRP
42
+
43
+ from tomwer.core.process.reconstruction.axis import mode as axis_mode
42
44
  from tomwer.core.process.reconstruction.nabu.utils import _NabuMode
43
45
  from tomwer.core.process.reconstruction.saaxis.params import SAAxisParams
44
- from tomwer.gui.reconstruction.scores.scoreplot import ScorePlot as _ScorePlot
45
- from tomwer.gui.reconstruction.scores.scoreplot import CorSelection
46
+ from tomwer.core.process.reconstruction.saaxis.saaxis import SAAxisProcess
47
+ from tomwer.gui import icons
48
+ from tomwer.gui.reconstruction.axis.radioaxis import _CalculationWidget
49
+ from tomwer.gui.reconstruction.nabu.slices import NabuWindow
46
50
  from tomwer.gui.reconstruction.saaxis.corrangeselector import SliceAndCorWidget
47
- from tomwer.gui.utils.buttons import TabBrowsersButtons
48
51
  from tomwer.gui.reconstruction.scores.control import ControlWidget
49
- from tomwer.core.process.reconstruction.saaxis.saaxis import SAAxisProcess
50
- from tomwer.core.process.reconstruction.axis import mode as axis_mode
52
+ from tomwer.gui.reconstruction.scores.scoreplot import CorSelection
53
+ from tomwer.gui.reconstruction.scores.scoreplot import ScorePlot as _ScorePlot
54
+ from tomwer.gui.utils.buttons import TabBrowsersButtons
51
55
  from tomwer.gui.utils.scandescription import ScanNameLabelAndShape
52
- import numpy
53
- from typing import Union
54
- import logging
55
-
56
+ from tomwer.synctools.axis import QAxisRP
56
57
 
57
58
  _logger = logging.getLogger(__file__)
58
59
 
@@ -264,8 +265,7 @@ class _SAAxisTabWidget(qt.QTabWidget):
264
265
  config = config.to_dict()
265
266
  if not isinstance(config, dict):
266
267
  raise TypeError(
267
- "config should be a dictionary or a SAAxisParams. "
268
- "Not {}".format(type(config))
268
+ f"config should be a dictionary or a SAAxisParams. Not {type(config)}"
269
269
  )
270
270
 
271
271
  research_width = config.get("research_width", None)
@@ -491,8 +491,8 @@ class SAAxisWindow(qt.QMainWindow):
491
491
  else:
492
492
  other_cors = ()
493
493
  sino_viewer.setCorRange(
494
- min=cors[0],
495
- max=cors[-1],
494
+ cor_min=cors[0],
495
+ cor_max=cors[-1],
496
496
  estimated_cor=estimated_cor,
497
497
  other_cors=other_cors,
498
498
  )
@@ -35,11 +35,11 @@ __license__ = "MIT"
35
35
  __date__ = "04/02/2021"
36
36
 
37
37
 
38
- from silx.gui import qt
39
- from silx.gui.plot import PlotWidget
40
38
  import functools
41
- import numpy
42
39
 
40
+ import numpy
41
+ from silx.gui import qt
42
+ from silx.gui.plot import PlotWidget
43
43
 
44
44
  # class SliceSelectorWithMiddle(qt.QWidget):
45
45
 
@@ -82,7 +82,7 @@ class SliceSelector(qt.QWidget):
82
82
  widget.layout().setContentsMargins(0, 0, 0, 0)
83
83
  widget.layout().addWidget(qt.QLabel(name, self))
84
84
  sb = qt.QSpinBox(self)
85
- stylesheet = "background-color: {}".format(color)
85
+ stylesheet = f"background-color: {color}"
86
86
  sb.setStyleSheet(stylesheet)
87
87
 
88
88
  min_i, max_i = self.getSlicesRange()
@@ -288,7 +288,7 @@ class _SliceSelectorFrmVolume(PlotWidget):
288
288
  self.sigSlicesChanged.emit()
289
289
 
290
290
  def getMarkerName(self, name: str):
291
- return "marker_{}".format(name)
291
+ return f"marker_{name}"
292
292
 
293
293
  def _addSliceAnchor(self, value, curve_name, color):
294
294
  y_value = self.valueToPlotSpace(value=value)
@@ -34,28 +34,32 @@ __license__ = "MIT"
34
34
  __date__ = "20/05/2021"
35
35
 
36
36
 
37
+ import logging
38
+ import typing
39
+
40
+ import numpy
37
41
  from silx.gui import qt
38
- from tomwer.gui import icons
39
- from tomwer.core.process.reconstruction.scores.params import ScoreMethod
42
+
43
+ from tomwer.core.process.reconstruction.nabu.utils import (
44
+ ConfigurationLevel,
45
+ _NabuMode,
46
+ retrieve_lst_of_value_from_str,
47
+ )
40
48
  from tomwer.core.process.reconstruction.sadeltabeta.sadeltabeta import (
41
49
  SADeltaBetaProcess,
42
50
  )
43
- from tomwer.synctools.sadeltabeta import QSADeltaBetaParams
44
- from tomwer.gui.utils.buttons import TabBrowsersButtons
51
+ from tomwer.core.process.reconstruction.scores.params import ScoreMethod
52
+ from tomwer.core.scan.scanbase import TomwerScanBase
53
+ from tomwer.gui import icons
54
+ from tomwer.gui.reconstruction.nabu.nabuconfig.phase import _NabuPhaseConfig
45
55
  from tomwer.gui.reconstruction.nabu.slices import NabuWindow
46
- from tomwer.gui.utils.scandescription import ScanNameLabelAndShape
47
- from tomwer.gui.reconstruction.scores.scoreplot import ScorePlot as _ScorePlot
48
- from tomwer.gui.reconstruction.scores.scoreplot import DelaBetaSelection
49
- from tomwer.core.process.reconstruction.nabu.utils import _NabuMode
50
- from tomwer.core.process.reconstruction.nabu.utils import ConfigurationLevel
51
- from tomwer.core.process.reconstruction.nabu.utils import retrieve_lst_of_value_from_str
52
- from tomwer.gui.reconstruction.scores.control import ControlWidget
53
56
  from tomwer.gui.reconstruction.saaxis.sliceselector import SliceSelector
54
- from tomwer.gui.reconstruction.nabu.nabuconfig.phase import _NabuPhaseConfig
55
- from tomwer.core.scan.scanbase import TomwerScanBase
56
- import typing
57
- import numpy
58
- import logging
57
+ from tomwer.gui.reconstruction.scores.control import ControlWidget
58
+ from tomwer.gui.reconstruction.scores.scoreplot import DelaBetaSelection
59
+ from tomwer.gui.reconstruction.scores.scoreplot import ScorePlot as _ScorePlot
60
+ from tomwer.gui.utils.buttons import TabBrowsersButtons
61
+ from tomwer.gui.utils.scandescription import ScanNameLabelAndShape
62
+ from tomwer.synctools.sadeltabeta import QSADeltaBetaParams
59
63
 
60
64
  _logger = logging.getLogger(__name__)
61
65
 
@@ -181,16 +185,15 @@ class _SADeltaBetaTabWidget(qt.QTabWidget):
181
185
  def getReconstructionSlice(self):
182
186
  return self._deltaBetaSelectionWidget.getSlice()
183
187
 
184
- def setReconstructionSlice(self, slice):
185
- return self._deltaBetaSelectionWidget.setSlice(slice=slice)
188
+ def setReconstructionSlice(self, slice_):
189
+ return self._deltaBetaSelectionWidget.setSlice(slice_=slice_)
186
190
 
187
191
  def setConfiguration(self, config):
188
192
  if isinstance(config, QSADeltaBetaParams):
189
193
  config = config.to_dict()
190
194
  if not isinstance(config, dict):
191
195
  raise TypeError(
192
- "config should be a dictionary or a SAAxisParams. "
193
- "Not {}".format(type(config))
196
+ f"config should be a dictionary or a SAAxisParams. Not {type(config)}"
194
197
  )
195
198
 
196
199
  db_values = config.get("delta_beta_values", None)
@@ -429,24 +432,20 @@ class DeltaBetaSelectionWidget(qt.QWidget):
429
432
  def _updated(self, *args, **kwargs):
430
433
  self.sigConfigurationChanged.emit()
431
434
 
432
- def setSlice(self, slice: typing.Union["str", int]):
433
- if isinstance(slice, str):
434
- if slice != "middle":
435
- raise ValueError(
436
- "Slice should be 'middle' or an int. " "Not {}".format(slice)
437
- )
435
+ def setSlice(self, slice_: typing.Union["str", int]):
436
+ if isinstance(slice_, str):
437
+ if slice_ != "middle":
438
+ raise ValueError(f"Slice should be 'middle' or an int. Not {slice_}")
438
439
  else:
439
440
  self.setMode("middle")
440
- elif isinstance(slice, int):
441
+ elif isinstance(slice_, int):
441
442
  self.setMode("other")
442
- self._sliceSelectionQSB.setSliceValue("Slice", slice)
443
- elif isinstance(slice, dict) and "Slice" in slice:
443
+ self._sliceSelectionQSB.setSliceValue("Slice", slice_)
444
+ elif isinstance(slice_, dict) and "Slice" in slice_:
444
445
  self.setMode("other")
445
- self._sliceSelectionQSB.setSliceValue("Slice", slice["Slice"])
446
+ self._sliceSelectionQSB.setSliceValue("Slice", slice_["Slice"])
446
447
  else:
447
- raise TypeError(
448
- "slice should be an int or 'middle'. Not {}".format(type(slice))
449
- )
448
+ raise TypeError(f"slice should be an int or 'middle'. Not {type(slice_)}")
450
449
 
451
450
  def setSliceRange(self, min_, max_):
452
451
  self._sliceSelectionQSB.setSlicesRange(min_, max_)
@@ -457,9 +456,7 @@ class DeltaBetaSelectionWidget(qt.QWidget):
457
456
  def setMode(self, mode):
458
457
  if mode not in self._DEFAULT_VERTICAL_SLICE_MODE:
459
458
  raise ValueError(
460
- "mode should be in {}. Not {}.".format(
461
- self._DEFAULT_VERTICAL_SLICE_MODE, mode
462
- )
459
+ f"mode should be in {self._DEFAULT_VERTICAL_SLICE_MODE}. Not {mode}."
463
460
  )
464
461
  idx = self._defaultSlicesCB.findText(mode)
465
462
  self._defaultSlicesCB.setCurrentIndex(idx)
@@ -35,25 +35,26 @@ __license__ = "MIT"
35
35
  __date__ = "25/02/2021"
36
36
 
37
37
 
38
+ import logging
38
39
  import os
39
40
  import weakref
40
- import numpy
41
- import logging
42
- from typing import Union
43
41
  from contextlib import AbstractContextManager
42
+ from typing import Union
43
+
44
+ import numpy
44
45
  from matplotlib import image as _matplotlib_image
45
46
  from silx.gui import qt
46
47
  from silx.gui.plot import PlotWidget
47
- from tomwer.io.utils.utils import get_slice_data
48
+
49
+ from tomwer.core.process.reconstruction.scores.params import ScoreMethod
50
+ from tomwer.gui import icons, settings
48
51
  from tomwer.gui.reconstruction.saaxis.dimensionwidget import DimensionWidget
49
- from tomwer.gui.visualization.dataviewer import ImageStack
50
- from tomwer.gui.utils.vignettes import VignettesQDialog
51
52
  from tomwer.gui.utils.buttons import PadlockButton
52
- from tomwer.gui import icons
53
- from tomwer.gui import settings
54
- from tomwer.io.utils.h5pyutils import DatasetReader
55
- from tomwer.core.process.reconstruction.scores.params import ScoreMethod
53
+ from tomwer.gui.utils.vignettes import VignettesQDialog
54
+ from tomwer.gui.visualization.dataviewer import ImageStack
56
55
  from tomwer.io.utils import get_default_directory
56
+ from tomwer.io.utils.h5pyutils import DatasetReader
57
+ from tomwer.io.utils.utils import get_slice_data
57
58
 
58
59
  _logger = logging.getLogger(__name__)
59
60
 
@@ -147,7 +148,7 @@ class VariableSelection(qt.QWidget):
147
148
  # TODO: this should be inherite by a cor plot (to display variable and absloute value)
148
149
  # cor value
149
150
  self._currentVarValue = qt.QGroupBox(self)
150
- self._currentVarValue.setTitle("current {} value".format(self._variable_name))
151
+ self._currentVarValue.setTitle(f"current {self._variable_name} value")
151
152
  self._currentVarValue.setLayout(qt.QFormLayout())
152
153
  self.layout().addWidget(self._currentVarValue, 0, 3, 3, 2)
153
154
 
@@ -156,7 +157,7 @@ class VariableSelection(qt.QWidget):
156
157
  self.layout().addWidget(self._currentcorRB, 0, 5, 1, 1)
157
158
  self._autofocusRB = qt.QRadioButton("autofocus", self)
158
159
  self._autofocusRB.setToolTip(
159
- "Take the {} with the best score".format(self._variable_name)
160
+ f"Take the {self._variable_name} with the best score"
160
161
  )
161
162
  self.layout().addWidget(self._autofocusRB, 1, 5, 1, 1)
162
163
  # lock autofocus button
@@ -211,13 +212,13 @@ class VariableSelection(qt.QWidget):
211
212
  master_plot = self.parent().getPlotWidget()
212
213
  colormap = master_plot.getColorBarWidget().getColormap()
213
214
  dialog = VignettesQDialog(
214
- value_name="{} position".format(self._variable_name),
215
+ value_name=f"{self._variable_name} position",
215
216
  score_name="score",
216
217
  value_format="{:.3f}",
217
218
  score_format="{:.3f}",
218
219
  colormap=colormap,
219
220
  )
220
- dialog.setWindowTitle("{} - vignettes".format(self.getWindowTitle()))
221
+ dialog.setWindowTitle(f"{self.getWindowTitle()} - vignettes")
221
222
 
222
223
  # set scores
223
224
  dialog.setScores(self._scores, score_method=self.getScoreMethod())
@@ -285,7 +286,7 @@ class SingleValueSelection(VariableSelection):
285
286
  self._currentVarValue.layout().addRow("value:", self._valueLE)
286
287
 
287
288
  def setValue(self, value):
288
- self._valueLE.setText("{:.2f}".format(value))
289
+ self._valueLE.setText(f"{value:.2f}")
289
290
 
290
291
  def getWindowTitle(self):
291
292
  raise NotImplementedError("Base class")
@@ -325,12 +326,12 @@ class CorSelection(VariableSelection):
325
326
  if relative_value is None:
326
327
  self._relativeVarValueLE.clear()
327
328
  else:
328
- self._relativeVarValueLE.setText("{:.3f}".format(relative_value))
329
+ self._relativeVarValueLE.setText(f"{relative_value:.3f}")
329
330
  if relative_value is None or self._img_width is None:
330
331
  self._absoluteVarValueLE.clear()
331
332
  else:
332
333
  absolute_value = relative_value + self._img_width / 2.0
333
- self._absoluteVarValueLE.setText("{:.3f}".format(absolute_value))
334
+ self._absoluteVarValueLE.setText(f"{absolute_value:.3f}")
334
335
 
335
336
  def getWindowTitle(self):
336
337
  return "sa axis - vignettes"
@@ -439,7 +440,7 @@ class _VariableValueLabels(qt.QWidget):
439
440
  for i_var in var_indexes:
440
441
  var_value = self._var_values[i_var]
441
442
  var_px_pos = var_px_positions[i_var]
442
- txt_value = "{:.3f}".format(var_value)
443
+ txt_value = f"{var_value:.3f}"
443
444
  # apply rotation to "invert" the painter rotation requested to
444
445
  # paint oblique text
445
446
  with PainterRotationCM(
@@ -27,22 +27,23 @@ __license__ = "MIT"
27
27
  __date__ = "16/06/2021"
28
28
 
29
29
 
30
- from tomwer.gui.reconstruction.axis import AxisWindow
31
- from tomwer.gui.reconstruction.axis.radioaxis import _ManualFramesSelection
32
- from tomwer.tests.utils import skip_gui_test
33
- from tomwer.tests.utils import UtilsTest
34
- from tomwer.core.process.reconstruction.axis.mode import AxisMode
35
- from tomwer.core.scan.edfscan import EDFTomoScan
36
- from tomwer.synctools.axis import QAxisRP
37
- from silx.gui.utils.testutils import TestCaseQt
38
- from tomwer.core.scan.hdf5scan import HDF5TomoScan
39
- from silx.gui import qt
40
- import numpy.random
41
- import pytest
42
- import tempfile
43
30
  import os
44
31
  import shutil
32
+ import tempfile
33
+
45
34
  import h5py
35
+ import numpy.random
36
+ import pytest
37
+ from silx.gui import qt
38
+ from silx.gui.utils.testutils import TestCaseQt
39
+
40
+ from tomwer.core.process.reconstruction.axis.mode import AxisMode
41
+ from tomwer.core.scan.edfscan import EDFTomoScan
42
+ from tomwer.core.scan.hdf5scan import HDF5TomoScan
43
+ from tomwer.gui.reconstruction.axis import AxisWindow
44
+ from tomwer.gui.reconstruction.axis.radioaxis import _ManualFramesSelection
45
+ from tomwer.synctools.axis import QAxisRP
46
+ from tomwer.tests.utils import UtilsTest, skip_gui_test
46
47
 
47
48
 
48
49
  @pytest.mark.skipif(skip_gui_test(), reason="skip gui test")
@@ -31,12 +31,13 @@ import os
31
31
  import shutil
32
32
  import tempfile
33
33
  import unittest
34
+
34
35
  import pytest
35
36
  from silx.gui import qt
37
+
36
38
  from tomwer.core import settings
37
39
  from tomwer.gui.reconstruction.lamino.tofu import TofuWindow
38
- from tomwer.tests.utils import UtilsTest
39
- from tomwer.tests.utils import skip_gui_test
40
+ from tomwer.tests.utils import UtilsTest, skip_gui_test
40
41
 
41
42
 
42
43
  @pytest.mark.skipif(skip_gui_test(), reason="skip gui test")
@@ -28,21 +28,23 @@ __date__ = "05/02/2020"
28
28
 
29
29
 
30
30
  import os
31
+
32
+ import pytest
31
33
  from silx.gui import qt
32
- from tomwer.tests.utils import skip_gui_test
33
- from tomwer.gui.reconstruction.nabu.nabuflow import NabuFlowControl
34
+ from silx.gui.utils.testutils import TestCaseQt
35
+
36
+ from tomwer.gui.reconstruction.nabu.nabuconfig.output import _NabuOutputConfig
37
+ from tomwer.gui.reconstruction.nabu.nabuconfig.phase import _NabuPhaseConfig
34
38
  from tomwer.gui.reconstruction.nabu.nabuconfig.preprocessing import (
35
39
  _NabuPreProcessingConfig,
36
40
  _RingCorrectionMethod,
37
41
  )
38
- from tomwer.gui.reconstruction.nabu.nabuconfig.phase import _NabuPhaseConfig
39
42
  from tomwer.gui.reconstruction.nabu.nabuconfig.reconstruction import (
40
43
  _NabuReconstructionConfig,
41
44
  )
42
- from tomwer.gui.reconstruction.nabu.nabuconfig.output import _NabuOutputConfig
45
+ from tomwer.gui.reconstruction.nabu.nabuflow import NabuFlowControl
43
46
  from tomwer.gui.reconstruction.nabu.volume import NabuVolumeWidget
44
- from silx.gui.utils.testutils import TestCaseQt
45
- import pytest
47
+ from tomwer.tests.utils import skip_gui_test
46
48
 
47
49
 
48
50
  class ProcessClass:
@@ -27,26 +27,28 @@ __license__ = "MIT"
27
27
  __date__ = "03/02/2021"
28
28
 
29
29
 
30
- from tomwer.tests.utils import skip_gui_test
31
- from tomwer.gui.reconstruction.saaxis.dimensionwidget import DimensionWidget
32
- from tomoscan.unitsystem import metricsystem
30
+ import os
31
+ import shutil
32
+ import tempfile
33
+
34
+ import h5py
35
+ import numpy
36
+ import pytest
37
+ from silx.gui import qt
33
38
  from silx.gui.utils.testutils import TestCaseQt
34
- from tomwer.core.utils.scanutils import MockHDF5
35
- from tomwer.gui.reconstruction.saaxis.saaxis import SAAxisWindow
39
+ from silx.io.url import DataUrl
40
+ from tomoscan.unitsystem import metricsystem
41
+
36
42
  from tomwer.core.process.reconstruction.saaxis.params import (
37
- SAAxisParams,
38
43
  ReconstructionMode,
44
+ SAAxisParams,
39
45
  )
40
46
  from tomwer.core.process.reconstruction.scores import ComputedScore
41
47
  from tomwer.core.process.reconstruction.scores.params import ScoreMethod
42
- from silx.io.url import DataUrl
43
- from silx.gui import qt
44
- import pytest
45
- import numpy
46
- import shutil
47
- import tempfile
48
- import os
49
- import h5py
48
+ from tomwer.core.utils.scanutils import MockHDF5
49
+ from tomwer.gui.reconstruction.saaxis.dimensionwidget import DimensionWidget
50
+ from tomwer.gui.reconstruction.saaxis.saaxis import SAAxisWindow
51
+ from tomwer.tests.utils import skip_gui_test
50
52
 
51
53
 
52
54
  @pytest.mark.skipif(skip_gui_test(), reason="skip gui test")
@@ -127,7 +129,7 @@ class TestSAAxisWindow(TestCaseQt):
127
129
  self._cor_scores = {}
128
130
 
129
131
  for i in range(self._N_OUTPUT_URLS):
130
- output_file = os.path.join(self.folder, "recons_{}.h5".format(i))
132
+ output_file = os.path.join(self.folder, f"recons_{i}.h5")
131
133
  with h5py.File(output_file, mode="a") as h5f:
132
134
  h5f["data"] = numpy.random.random(100 * 100).reshape(100, 100)
133
135
  url = DataUrl(file_path=output_file, data_path="data", scheme="silx")