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,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")
@@ -27,21 +27,23 @@ __license__ = "MIT"
27
27
  __date__ = "09/06/2021"
28
28
 
29
29
 
30
- from tomwer.tests.utils import skip_gui_test
31
- from silx.gui.utils.testutils import TestCaseQt
32
- from tomwer.core.utils.scanutils import MockHDF5
33
- from tomwer.gui.reconstruction.sadeltabeta import SADeltaBetaWindow
34
- from tomwer.core.process.reconstruction.sadeltabeta.params import SADeltaBetaParams
35
- from tomwer.core.process.reconstruction.scores.params import ScoreMethod
36
- from tomwer.core.process.reconstruction.scores import ComputedScore
37
- from silx.io.url import DataUrl
38
- from silx.gui import qt
39
- import pytest
40
- import numpy
30
+ import os
41
31
  import shutil
42
32
  import tempfile
43
- import os
33
+
44
34
  import h5py
35
+ import numpy
36
+ import pytest
37
+ from silx.gui import qt
38
+ from silx.gui.utils.testutils import TestCaseQt
39
+ from silx.io.url import DataUrl
40
+
41
+ from tomwer.core.process.reconstruction.sadeltabeta.params import SADeltaBetaParams
42
+ from tomwer.core.process.reconstruction.scores import ComputedScore
43
+ from tomwer.core.process.reconstruction.scores.params import ScoreMethod
44
+ from tomwer.core.utils.scanutils import MockHDF5
45
+ from tomwer.gui.reconstruction.sadeltabeta import SADeltaBetaWindow
46
+ from tomwer.tests.utils import skip_gui_test
45
47
 
46
48
 
47
49
  @pytest.mark.skipif(skip_gui_test(), reason="skip gui test")
@@ -58,7 +60,7 @@ class TestSADeltaBetaWindow(TestCaseQt):
58
60
  self._cor_scores = {}
59
61
 
60
62
  for i in range(self._N_OUTPUT_URLS):
61
- output_file = os.path.join(self.folder, "recons_{}.h5".format(i))
63
+ output_file = os.path.join(self.folder, f"recons_{i}.h5")
62
64
  with h5py.File(output_file, mode="a") as h5f:
63
65
  h5f["data"] = numpy.random.random(100 * 100).reshape(100, 100)
64
66
  url = DataUrl(file_path=output_file, data_path="data", scheme="silx")
@@ -30,16 +30,17 @@ __license__ = "MIT"
30
30
  __date__ = "19/03/2018"
31
31
 
32
32
 
33
- from collections import OrderedDict
33
+ import logging
34
34
  import weakref
35
- from tomwer.core.scan.scanbase import TomwerScanBase
36
- from tomwer.gui.samplemoved.selectiontable import AngleSelectionTable
37
- from tomoscan.esrf.scan.utils import get_data
38
- from silx.gui import qt
39
- import silx.io.utils
35
+ from collections import OrderedDict
36
+
40
37
  import silx.io.url
41
- import logging
38
+ import silx.io.utils
39
+ from silx.gui import qt
40
+ from tomoscan.esrf.scan.utils import get_data
42
41
 
42
+ from tomwer.core.scan.scanbase import TomwerScanBase
43
+ from tomwer.gui.samplemoved.selectiontable import AngleSelectionTable
43
44
  from tomwer.gui.settings import Y_AXIS_DOWNWARD
44
45
 
45
46
  _logger = logging.getLogger(__name__)
@@ -30,13 +30,15 @@ __license__ = "MIT"
30
30
  __date__ = "17/08/2021"
31
31
 
32
32
 
33
+ import functools
34
+ import logging
33
35
  import os
34
36
  from collections import OrderedDict
35
- import functools
37
+
36
38
  from silx.gui import qt
37
39
  from silx.io.url import DataUrl
40
+
38
41
  from tomwer.gui.imagefromfile import FileWithImage
39
- import logging
40
42
 
41
43
  logger = logging.getLogger(__name__)
42
44
 
tomwer/gui/stackplot.py CHANGED
@@ -28,24 +28,25 @@ __author__ = ["P. Paleo", "H. Payno"]
28
28
  __license__ = "MIT"
29
29
  __date__ = "24/05/2016"
30
30
 
31
+ import functools
32
+ import logging
33
+ import os
34
+ import time
35
+ from collections import OrderedDict, namedtuple
36
+ from typing import Iterable, Optional
37
+
38
+ import numpy
31
39
  from silx.gui import qt
32
40
  from silx.gui.plot import Plot2D
33
- from . import utils
34
- from tomwer.gui import settings
35
- import numpy
36
- import os
37
- from collections import OrderedDict
38
- import tomwer.resources
39
- from .imagefromfile import ImageFromFile, FileWithImage, _Image
40
41
  from silx.gui.plot.actions import PlotAction
41
42
  from silx.gui.plot.actions.control import YAxisInvertedAction
42
43
  from silx.io.url import DataUrl
43
- import logging
44
- from tomwer.gui import icons
45
- import functools
46
- import time
47
- from collections import namedtuple
48
- from typing import Iterable, Optional
44
+
45
+ import tomwer.resources
46
+ from tomwer.gui import icons, settings
47
+
48
+ from . import utils
49
+ from .imagefromfile import FileWithImage, ImageFromFile, _Image
49
50
 
50
51
  logger = logging.getLogger(__name__)
51
52
 
tomwer/gui/stacks.py CHANGED
@@ -30,17 +30,19 @@ __license__ = "MIT"
30
30
  __date__ = "19/03/2018"
31
31
 
32
32
 
33
+ import logging
34
+ from collections import OrderedDict
33
35
  from typing import Union
36
+
37
+ import h5py
34
38
  from silx.gui import qt
35
- from tomwer.gui.stackplot import _QImageFileStackPlot
36
- from collections import OrderedDict
37
- from tomwer.gui.qfolderdialog import QDataDialog
39
+ from tomoscan.factory import Factory
40
+ from tomoscan.identifier import VolumeIdentifier
41
+
38
42
  from tomwer.core.scan.scanbase import TomwerScanBase
39
43
  from tomwer.core.scan.scanfactory import ScanFactory
40
- from tomoscan.identifier import VolumeIdentifier
41
- from tomoscan.factory import Factory
42
- import logging
43
- import h5py
44
+ from tomwer.gui.qfolderdialog import QDataDialog
45
+ from tomwer.gui.stackplot import _QImageFileStackPlot
44
46
 
45
47
  _logger = logging.getLogger(__name__)
46
48
 
@@ -131,8 +133,8 @@ class _ImageStack(qt.QMainWindow):
131
133
  for scan in all_images:
132
134
  try:
133
135
  oScanSlices = OrderedDict(sorted(all_images[scan].items()))
134
- for slice in oScanSlices:
135
- ordered_imgs.append(all_images[scan][slice])
136
+ for scan_slice in oScanSlices:
137
+ ordered_imgs.append(all_images[scan][scan_slice])
136
138
  except TypeError:
137
139
  # in case algorithm could extract recons index
138
140
  ordered_imgs = ordered_imgs + list(all_images[scan].values())
@@ -1,8 +1,9 @@
1
+ import pytest
2
+ from silx.gui.utils.testutils import TestCaseQt
3
+
1
4
  from tomwer.gui.reconstruction.axis.radioaxis import AxisTabWidget
2
5
  from tomwer.synctools.axis import QAxisRP
3
- from silx.gui.utils.testutils import TestCaseQt
4
6
  from tomwer.tests.utils import skip_gui_test
5
- import pytest
6
7
 
7
8
 
8
9
  @pytest.mark.skipif(skip_gui_test(), reason="skip gui test")
@@ -13,10 +14,10 @@ class TestGetNabuCorOpts(TestCaseQt):
13
14
  """
14
15
  axis_params = QAxisRP()
15
16
  widget = AxisTabWidget(recons_params=axis_params)
16
- assert axis_params.get_nabu_cor_options_as_str() == "side='all'"
17
+ assert axis_params.get_nabu_cor_options_as_str() == "side='right'"
17
18
  widget._calculationWidget._corOpts.setText("low_pass=2")
18
19
  widget._calculationWidget._corOpts.editingFinished.emit()
19
- assert axis_params.get_nabu_cor_options_as_str() == "side='all' ; low_pass=2"
20
+ assert axis_params.get_nabu_cor_options_as_str() == "side='right' ; low_pass=2"
20
21
  widget._calculationWidget._corOpts.setText("low_pass=2 ; high_pass=10")
21
22
  widget._calculationWidget._sideCB.setCurrentText("left")
22
23
  widget._calculationWidget._corOpts.editingFinished.emit()
@@ -1,6 +1,7 @@
1
1
  import pytest
2
- from tomwer.tests.conftest import qtapp # noqa F401
2
+
3
3
  from tomwer.gui.qfolderdialog import QDataDialog
4
+ from tomwer.tests.conftest import qtapp # noqa F401
4
5
 
5
6
 
6
7
  @pytest.mark.parametrize("multi_selection", (True, False))
@@ -31,9 +31,9 @@ __license__ = "MIT"
31
31
  __date__ = "29/01/2020"
32
32
 
33
33
 
34
- import subprocess
35
34
  import logging
36
35
  import os
36
+ import subprocess
37
37
 
38
38
  _logger = logging.getLogger(__name__)
39
39
 
@@ -76,10 +76,10 @@ def open_url_with_image_j(url):
76
76
  # for now we only manage the simple case of an edf file
77
77
  try:
78
78
  subprocess.call(["imagej", "-o", url.file_path()])
79
- except Exception:
80
- _logger.warning("Fail to open {}. Reason is {}".format(str(url), str()))
79
+ except Exception as e:
80
+ _logger.warning(f"Fail to open {url}. Reason is {e}")
81
81
  elif __image_j_from == "binary":
82
82
  try:
83
83
  subprocess.call([_IMAGE_J_BIN_PATH, url.file_path()])
84
- except Exception:
85
- _logger.warning("Fail to open {}. Reason is {}".format(str(url), str()))
84
+ except Exception as e:
85
+ _logger.warning(f"Fail to open {url}. Reason is {e}")
@@ -32,6 +32,7 @@ __date__ = "03/10/2018"
32
32
 
33
33
 
34
34
  from silx.gui import qt
35
+
35
36
  from tomwer.gui import icons
36
37
 
37
38
 
@@ -32,6 +32,7 @@ __date__ = "23/03/2022"
32
32
 
33
33
 
34
34
  from typing import Optional
35
+
35
36
  from silx.gui import qt
36
37
 
37
38
 
tomwer/gui/utils/flow.py CHANGED
@@ -28,10 +28,12 @@ __license__ = "MIT"
28
28
  __date__ = "04/03/2019"
29
29
 
30
30
 
31
+ import functools
32
+ from typing import Union
33
+
31
34
  from silx.gui import qt
32
35
  from silx.utils.enum import Enum as _Enum
33
- from typing import Union
34
- import functools
36
+
35
37
  from tomwer.gui import icons
36
38
  from tomwer.utils import docstring
37
39
 
@@ -32,6 +32,7 @@ __date__ = "28/09/2018"
32
32
 
33
33
 
34
34
  from silx.gui import qt
35
+
35
36
  from tomwer.gui import illustrations
36
37
 
37
38
 
@@ -26,17 +26,16 @@ __authors__ = ["H.Payno"]
26
26
  __license__ = "MIT"
27
27
  __date__ = "16/08/2018"
28
28
 
29
- from silx.gui import qt
30
- from tomwer.gui import icons
31
- import numpy
32
29
  import logging
33
-
34
- from nxtomomill.io.config import (
35
- TomoHDF5Config as HDF5Config,
36
- TomoEDFConfig as EDFConfig,
37
- )
38
- from typing import Optional, Union
39
30
  import os
31
+ from typing import Optional, Union
32
+
33
+ import numpy
34
+ from nxtomomill.io.config import TomoEDFConfig as EDFConfig
35
+ from nxtomomill.io.config import TomoHDF5Config as HDF5Config
36
+ from silx.gui import qt
37
+
38
+ from tomwer.gui import icons
40
39
  from tomwer.gui.qlefilesystem import QLFileSystem
41
40
  from tomwer.io.utils import get_default_directory
42
41
 
@@ -98,7 +97,7 @@ class SelectionLineEdit(qt.QWidget):
98
97
  _from, _to, _step = self._qLineEdit.text().split(":")
99
98
  _from, _to, _step = float(_from), float(_to), float(_step)
100
99
  if _from > _to:
101
- _logger.warning("to > from, invert %s and %s" % (_from, _to))
100
+ _logger.warning(f"to > from, invert {_from} and {_to}")
102
101
  tmp = _to
103
102
  _to = _from
104
103
  _from = tmp
@@ -399,18 +398,13 @@ class _ConfigFileSelector(qt.QWidget):
399
398
  try:
400
399
  self._load_config_file(cfg_file)
401
400
  except Exception as e:
402
- mess = (
403
- "Fail to load nxtomomill configuration from {}. "
404
- "Error is {}".format(cfg_file, e)
405
- )
401
+ mess = f"Fail to load nxtomomill configuration from {cfg_file}. Error is {e}"
406
402
  _logger.warning(mess)
407
403
  qt.QMessageBox.warning(
408
404
  self, "Unable to read configuration from file", mess
409
405
  )
410
406
  else:
411
- _logger.info(
412
- "Will use {} as input configuration file." "".format(cfg_file)
413
- )
407
+ _logger.info(f"Will use {cfg_file} as input configuration file.")
414
408
  self.sigConfigFileChanged.emit(cfg_file)
415
409
 
416
410
  def getCFGFilePath(self):
@@ -0,0 +1,76 @@
1
+ # coding: utf-8
2
+ # /*##########################################################################
3
+ #
4
+ # Copyright (c) 2016 European Synchrotron Radiation Facility
5
+ #
6
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ # of this software and associated documentation files (the "Software"), to deal
8
+ # in the Software without restriction, including without limitation the rights
9
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ # copies of the Software, and to permit persons to whom the Software is
11
+ # furnished to do so, subject to the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be included in
14
+ # all copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
+ # THE SOFTWARE.
23
+ #
24
+ # ###########################################################################*/
25
+
26
+ __authors__ = ["H. Payno"]
27
+ __license__ = "MIT"
28
+ __date__ = "25/09/2017"
29
+
30
+ import re
31
+ import numpy
32
+
33
+ SELECTION_PATTERN = re.compile(r"\d?[:]?\d?")
34
+
35
+
36
+ def selectionIsValid(selection):
37
+ """
38
+ Return true if the given selection as a string is valid
39
+
40
+ :return: bool
41
+ """
42
+ assert type(selection) is str
43
+ _selection = selection.replace(" ", "")
44
+ selections = _selection.split(";")
45
+ for sel in selections:
46
+ if not re.match(SELECTION_PATTERN, sel):
47
+ return False
48
+ return True
49
+
50
+
51
+ def getSelection(projections, selection):
52
+ """
53
+
54
+ :param str selection:
55
+ :return numpy.ndarray:
56
+ """
57
+
58
+ def evalSelection(projections, sel):
59
+ assert type(projections) is numpy.ndarray
60
+ return eval("projections[" + sel + "]")
61
+
62
+ assert type(selection) is str
63
+ if selection == "":
64
+ return projections
65
+ _selection = selection.replace(" ", "")
66
+ selections = _selection.split(";")
67
+ if len(selections) == 1:
68
+ return evalSelection(projections, selection)
69
+ else:
70
+ res = None
71
+ for iSel, sel in enumerate(range(len(selections))):
72
+ if iSel == 0:
73
+ res = evalSelection(projections, selections[iSel])
74
+ else:
75
+ res = numpy.append(res, evalSelection(projections, selections[iSel]))
76
+ return res
@@ -29,12 +29,13 @@ __license__ = "MIT"
29
29
  __date__ = "15/09/2017"
30
30
 
31
31
  import logging
32
- from silx.gui import qt
33
- from silx.gui.plot import PlotWidget
34
- from typing import Union, Optional
35
- from collections.abc import Iterable
36
32
  from collections import OrderedDict
33
+ from collections.abc import Iterable
34
+ from typing import Optional, Union
35
+
37
36
  import numpy
37
+ from silx.gui import qt
38
+ from silx.gui.plot import PlotWidget
38
39
 
39
40
  logger = logging.getLogger(__name__)
40
41
 
@@ -76,10 +77,7 @@ class QSliceSelectorDialog(qt.QDialog):
76
77
  """
77
78
  if self.nRequiredSlice() is not None and len(selection) > self.nRequiredSlice():
78
79
  raise ValueError(
79
- "you provide a selection of {} elements when "
80
- "the user should select {}".format(
81
- len(selection), self._n_required_slice
82
- )
80
+ f"you provide a selection of {len(selection)} elements when the user should select {self._n_required_slice}"
83
81
  )
84
82
  if type(selection) is str:
85
83
  selection = selection.replace("(", "")
@@ -1,4 +1,5 @@
1
1
  from contextlib import contextmanager
2
+
2
3
  from silx.gui import qt
3
4
 
4
5
 
@@ -28,7 +28,9 @@ __date__ = "04/02/2020"
28
28
 
29
29
 
30
30
  from typing import Optional
31
+
31
32
  from silx.gui import qt
33
+
32
34
  from tomwer.core.scan.scanbase import TomwerScanBase
33
35
 
34
36
 
@@ -32,8 +32,8 @@ try:
32
32
  from silx.gui import qt
33
33
  except ImportError:
34
34
  raise ImportError("Can't found silx modules")
35
- from tomwer.gui import icons
36
35
  import tomwer.version
36
+ from tomwer.gui import icons
37
37
 
38
38
 
39
39
  def getMainSplashScreen():
@@ -32,10 +32,12 @@ __license__ = "MIT"
32
32
  __date__ = "21/09/2018"
33
33
 
34
34
 
35
+ import logging
36
+
35
37
  from silx.gui import qt
36
38
  from tomoscan.unitsystem import metricsystem
39
+
37
40
  from tomwer.core.utils.char import MU_CHAR
38
- import logging
39
41
 
40
42
  _logger = logging.getLogger(__name__)
41
43
 
@@ -35,15 +35,15 @@ __license__ = "MIT"
35
35
  __date__ = "26/02/2021"
36
36
 
37
37
 
38
+ import logging
39
+ from typing import Iterable, Union
40
+
41
+ import numpy
38
42
  from silx.gui import qt
39
- from silx.io.url import DataUrl
40
43
  from silx.gui.plot import PlotWindow
41
- from typing import Union
42
- from typing import Iterable
43
- from tomoscan.esrf.scan.utils import get_data
44
44
  from silx.gui.plot.utils.axis import SyncAxes
45
- import numpy
46
- import logging
45
+ from silx.io.url import DataUrl
46
+ from tomoscan.esrf.scan.utils import get_data
47
47
 
48
48
  from tomwer.core.process.reconstruction.scores.scores import ComputedScore
49
49
 
@@ -380,13 +380,13 @@ class ValueLabel(qt.QWidget):
380
380
  str_value = value_format.format(value)
381
381
  else:
382
382
  str_value = str(value)
383
- txt = "{}: {}".format(value_name, str_value)
383
+ txt = f"{value_name}: {str_value}"
384
384
  self._valueLabel = qt.QLabel(txt, self)
385
385
  self.layout().addWidget(self._valueLabel)
386
386
  if score_format is not None:
387
387
  str_score = score_format.format(score)
388
388
  else:
389
389
  str_score = str(score)
390
- txt = "({}: {})".format(score_name, str_score)
390
+ txt = f"({score_name}: {str_score})"
391
391
  self._scoreLabel = qt.QLabel(txt, self)
392
392
  self.layout().addWidget(self._scoreLabel)
@@ -33,9 +33,10 @@ __license__ = "MIT"
33
33
  __date__ = "09/02/2017"
34
34
 
35
35
 
36
- from silx.gui import qt
37
36
  import time
38
37
 
38
+ from silx.gui import qt
39
+
39
40
 
40
41
  class QWaiterThread(qt.QThread):
41
42
  """simple thread wich wait for waitingTime to be finished"""