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
@@ -28,16 +28,16 @@ __license__ = "MIT"
28
28
  __date__ = "11/01/2023"
29
29
 
30
30
 
31
- from tomoscan.esrf.volume.rawvolume import RawVolume as _RawVolume
32
- from tomwer.core.volume.volumebase import TomwerVolumeBase
31
+ from urllib.parse import urlparse
32
+
33
+ from processview.core.dataset import Dataset, DatasetIdentifier
33
34
  from tomoscan.esrf.identifier.rawidentifier import (
34
35
  RawVolumeIdentifier as _RawVolumeIdentifier,
35
36
  )
36
- from processview.core.dataset import DatasetIdentifier, Dataset
37
- from urllib.parse import urlparse
38
- from tomoscan.esrf.identifier.url_utils import (
39
- split_path,
40
- )
37
+ from tomoscan.esrf.identifier.url_utils import split_path
38
+ from tomoscan.esrf.volume.rawvolume import RawVolume as _RawVolume
39
+
40
+ from tomwer.core.volume.volumebase import TomwerVolumeBase
41
41
 
42
42
 
43
43
  class RawVolumeIdentifier(_RawVolumeIdentifier, DatasetIdentifier):
@@ -29,16 +29,18 @@ __date__ = "05/07/2022"
29
29
 
30
30
 
31
31
  import os
32
- from tomoscan.esrf.volume.tiffvolume import (
33
- TIFFVolume as _TIFFVolume,
34
- MultiTIFFVolume as _MultiTIFFVolume,
35
- )
36
- from tomwer.core.volume.volumebase import TomwerVolumeBase
32
+
33
+ from processview.core.dataset import Dataset, DatasetIdentifier
37
34
  from tomoscan.esrf.identifier.tiffidentifier import (
38
35
  MultiTiffVolumeIdentifier as _MultiTiffVolumeIdentifier,
36
+ )
37
+ from tomoscan.esrf.identifier.tiffidentifier import (
39
38
  TIFFVolumeIdentifier as _TIFFVolumeIdentifier,
40
39
  )
41
- from processview.core.dataset import DatasetIdentifier, Dataset
40
+ from tomoscan.esrf.volume.tiffvolume import MultiTIFFVolume as _MultiTIFFVolume
41
+ from tomoscan.esrf.volume.tiffvolume import TIFFVolume as _TIFFVolume
42
+
43
+ from tomwer.core.volume.volumebase import TomwerVolumeBase
42
44
 
43
45
 
44
46
  class TIFFVolumeIdentifier(_TIFFVolumeIdentifier, DatasetIdentifier):
@@ -1,4 +1,5 @@
1
1
  import os
2
+
2
3
  from tomwer.core.tomwer_object import TomwerObject
3
4
 
4
5
 
@@ -28,34 +28,34 @@ __license__ = "MIT"
28
28
  __date__ = "13/07/2022"
29
29
 
30
30
 
31
- from typing import Optional
31
+ import logging
32
+ from typing import Optional, Union
32
33
  from urllib.parse import urlparse
33
- from typing import Union
34
- from tomoscan.factory import Factory as _oVolumeFactory
34
+
35
+ from tomoscan import identifier as _identifier_mod
35
36
  from tomoscan.esrf.identifier.url_utils import split_path
37
+ from tomoscan.factory import Factory as _oVolumeFactory
36
38
  from tomoscan.identifier import BaseIdentifier, ScanIdentifier, VolumeIdentifier
37
- from tomoscan import identifier as _identifier_mod
39
+
40
+ from tomwer.core.scan.edfscan import EDFTomoScan, EDFTomoScanIdentifier
41
+ from tomwer.core.scan.hdf5scan import HDF5TomoScan
42
+ from tomwer.core.volume import (
43
+ EDFVolume,
44
+ HDF5Volume,
45
+ JP2KVolume,
46
+ MultiTIFFVolume,
47
+ RawVolume,
48
+ TIFFVolume,
49
+ )
38
50
  from tomwer.core.volume.edfvolume import EDFVolumeIdentifier
39
- from tomwer.core.scan.edfscan import EDFTomoScanIdentifier
40
51
  from tomwer.core.volume.hdf5volume import HDF5VolumeIdentifier
41
52
  from tomwer.core.volume.jp2kvolume import JP2KVolumeIdentifier
53
+ from tomwer.core.volume.rawvolume import RawVolumeIdentifier
42
54
  from tomwer.core.volume.tiffvolume import (
43
- TIFFVolumeIdentifier,
44
55
  MultiTiffVolumeIdentifier,
56
+ TIFFVolumeIdentifier,
45
57
  )
46
- from tomwer.core.volume.rawvolume import RawVolumeIdentifier
47
- from tomwer.core.volume import (
48
- HDF5Volume,
49
- EDFVolume,
50
- MultiTIFFVolume,
51
- TIFFVolume,
52
- JP2KVolume,
53
- RawVolume,
54
- )
55
- from tomwer.core.scan.edfscan import EDFTomoScan
56
- from tomwer.core.scan.hdf5scan import HDF5TomoScan
57
58
  from tomwer.utils import docstring
58
- import logging
59
59
 
60
60
  _logger = logging.getLogger(__name__)
61
61
 
@@ -29,7 +29,9 @@ __date__ = "11/10/2021"
29
29
 
30
30
 
31
31
  from typing import Optional
32
+
32
33
  from silx.gui import qt
34
+
33
35
  from tomwer.core.settings import SlurmSettings
34
36
 
35
37
 
@@ -28,10 +28,12 @@ __license__ = "MIT"
28
28
  __date__ = "14/10/2021"
29
29
 
30
30
 
31
+ import functools
32
+ from collections import OrderedDict
33
+
31
34
  from silx.gui import qt
35
+
32
36
  from tomwer.core.futureobject import FutureTomwerObject
33
- from collections import OrderedDict
34
- import functools
35
37
 
36
38
 
37
39
  class FutureTomwerScanObserverWidget(qt.QWidget):
@@ -27,12 +27,13 @@ __license__ = "MIT"
27
27
  __date__ = "19/10/2021"
28
28
 
29
29
 
30
- from tomwer.gui.reconstruction.nabu.slurm import SlurmSettingsWidget
31
- from tomwer.core.settings import SlurmSettings
32
- from silx.gui.utils.testutils import TestCaseQt
30
+ import pytest
33
31
  from silx.gui import qt
32
+ from silx.gui.utils.testutils import TestCaseQt
33
+
34
+ from tomwer.core.settings import SlurmSettings
35
+ from tomwer.gui.reconstruction.nabu.slurm import SlurmSettingsWidget
34
36
  from tomwer.tests.utils import skip_gui_test
35
- import pytest
36
37
 
37
38
 
38
39
  @pytest.mark.skipif(skip_gui_test(), reason="skip gui test")
@@ -30,11 +30,13 @@ __date__ = "08/11/2021"
30
30
  import asyncio
31
31
  import os
32
32
  import shutil
33
+ import tempfile
34
+
33
35
  from silx.gui import qt
34
36
  from silx.gui.utils.testutils import TestCaseQt
35
- import tempfile
36
- from tomwer.core.utils.scanutils import MockHDF5
37
+
37
38
  from tomwer.core.futureobject import FutureTomwerObject
39
+ from tomwer.core.utils.scanutils import MockHDF5
38
40
  from tomwer.gui.cluster.supervisor import FutureTomwerScanObserverWidget
39
41
 
40
42
 
@@ -33,12 +33,13 @@ __date__ = "19/07/2018"
33
33
 
34
34
 
35
35
  from silx.gui import qt
36
+
37
+ from tomwer.core.process.conditions.filters import FileNameFilter
36
38
  from tomwer.gui import icons
37
39
  from tomwer.gui.utils.sandboxes import (
38
40
  RegularExpressionSandBox,
39
41
  RegularExpressionSandBoxDialog,
40
42
  )
41
- from tomwer.core.process.conditions.filters import FileNameFilter
42
43
 
43
44
 
44
45
  class FileNameFilterWidget(qt.QWidget):
@@ -126,14 +127,14 @@ class FileNameFilterWidget(qt.QWidget):
126
127
  mess.setModal(False)
127
128
  mess.show()
128
129
 
129
- def setActiveFilter(self, filter):
130
+ def setActiveFilter(self, filter_):
130
131
  valid_fiters = ("regular expression", "unix file name pattern")
131
- if filter not in valid_fiters:
132
+ if filter_ not in valid_fiters:
132
133
  raise ValueError(
133
- f"filter is expected to be one of {valid_fiters}. Not {filter}"
134
+ f"filter is expected to be one of {valid_fiters}. Not {filter_}"
134
135
  )
135
- self._sandBoxPB.setVisible(filter == "regular expression")
136
- self._filterTypeCB.setCurrentText(filter)
136
+ self._sandBoxPB.setVisible(filter_ == "regular expression")
137
+ self._filterTypeCB.setCurrentText(filter_)
137
138
 
138
139
  def getActiveFilter(self):
139
140
  return self._filterTypeCB.currentText()
@@ -29,6 +29,7 @@ __date__ = "23/03/2021"
29
29
 
30
30
 
31
31
  from silx.gui import qt
32
+
32
33
  from tomwer.gui import icons as tomwer_icons
33
34
 
34
35
 
@@ -0,0 +1,168 @@
1
+ from typing import Optional
2
+
3
+ from silx.gui import qt
4
+
5
+ from tomwer.core.scan.scantype import ScanType
6
+ from tomwer.gui.control import datareacheractions
7
+ from tomwer.gui.control.datawatcher.controlwidget import ControlWidget
8
+
9
+
10
+ class ScanDiscoveryConfigWidget(qt.QGroupBox):
11
+ sigScanTypeChanged = qt.Signal()
12
+
13
+ def __init__(self, *args, **kwargs):
14
+ super().__init__(*args, **kwargs)
15
+ self.setLayout(qt.QVBoxLayout())
16
+ self._nxtomoQRB = qt.QRadioButton(ScanType.NX_TOMO.value, parent=self)
17
+ self.layout().addWidget(self._nxtomoQRB)
18
+
19
+ self._blissQRB = qt.QRadioButton(ScanType.BLISS.value, parent=self)
20
+ self.layout().addWidget(self._blissQRB)
21
+
22
+ self._specQRB = qt.QRadioButton(ScanType.SPEC.value, parent=self)
23
+ self.layout().addWidget(self._specQRB)
24
+
25
+ # set up
26
+ self._nxtomoQRB.setChecked(True)
27
+ # connect signal / slot
28
+ self._nxtomoQRB.toggled.connect(self._configChanged)
29
+ self._blissQRB.toggled.connect(self._configChanged)
30
+ self._specQRB.toggled.connect(self._configChanged)
31
+
32
+ def _configChanged(self, *args, **kwargs):
33
+ self.sigScanTypeChanged.emit()
34
+
35
+ def getScanType(self) -> ScanType:
36
+ if self._specQRB.isChecked():
37
+ return ScanType.SPEC
38
+ elif self._blissQRB.isChecked():
39
+ return ScanType.BLISS
40
+ elif self._nxtomoQRB.isChecked():
41
+ return ScanType.NX_TOMO
42
+ else:
43
+ raise NotImplementedError
44
+
45
+ def setScanType(self, mode: ScanType):
46
+ mode = ScanType.from_value(mode)
47
+ if mode is ScanType.SPEC:
48
+ self._specQRB.setChecked(True)
49
+ elif mode is ScanType.BLISS:
50
+ self._blissQRB.setChecked(True)
51
+ elif mode is ScanType.NX_TOMO:
52
+ self._nxtomoQRB.setChecked(True)
53
+ else:
54
+ raise NotImplementedError
55
+
56
+
57
+ class _MainWidget(qt.QWidget):
58
+ sigStart = qt.Signal()
59
+
60
+ def __init__(self, parent=None) -> None:
61
+ super().__init__(parent)
62
+ self.setLayout(qt.QVBoxLayout())
63
+ self.controlWidget = ControlWidget()
64
+ self.layout().addWidget(self.controlWidget)
65
+ self.configWidget = ScanDiscoveryConfigWidget(parent=self)
66
+ self.layout().addWidget(self.configWidget)
67
+
68
+ # set up
69
+ self.configWidget.setVisible(False)
70
+ self.controlWidget.setVisible(False)
71
+ self.controlWidget._qpbstartstop.setText("start discovery")
72
+ # connect signal / slot
73
+ self.controlWidget._qpbstartstop.released.connect(self._startDiscovery)
74
+ # expose api
75
+ self.sigScanTypeChanged = self.configWidget.sigScanTypeChanged
76
+
77
+ def getConfigWindow(self):
78
+ return self.configWidget
79
+
80
+ def _startDiscovery(self):
81
+ self.sigStart.emit()
82
+
83
+ def getFolderObserved(self):
84
+ return self.controlWidget._qteFolderSelected.text()
85
+
86
+ def setFolderObserved(self, dir_):
87
+ return self.controlWidget._qteFolderSelected.setText(dir_)
88
+
89
+ def getLinuxFilePattern(self) -> Optional[str]:
90
+ text = self.controlWidget._filterQLE.text()
91
+ if text.replace(" ", "") == "":
92
+ return None
93
+ else:
94
+ return text
95
+
96
+ def setLinuxFilePattern(self, pattern: Optional[str]):
97
+ if pattern is None:
98
+ pattern = ""
99
+ self.controlWidget._filterQLE.setText(pattern)
100
+
101
+ def setSearchScanType(self, scan_type):
102
+ self.configWidget.setScanType(scan_type)
103
+
104
+ def getSearchScqnType(self):
105
+ return self.configWidget.getScanType()
106
+
107
+
108
+ class DataDiscoveryWidget(qt.QMainWindow):
109
+ sigTMStatusChanged = qt.Signal(str)
110
+ """Signal emitted when the state changed"""
111
+ sigScanReady = qt.Signal(object)
112
+ """Signal emitted when a scan is considered as ready"""
113
+ sigFolderObservedChanged = qt.Signal()
114
+ """Signal emitted when the user change the observed folder"""
115
+ sigObservationStart = qt.Signal()
116
+ """Signal emitted when the observation starts"""
117
+ sigObservationEnd = qt.Signal()
118
+ """Signal emitted when the observation end"""
119
+ sigFilterFileNamePatternChanged = qt.Signal(str)
120
+ """Signal emut when the filter pattern change"""
121
+
122
+ def __init__(self, parent=None, **kwargs) -> None:
123
+ super().__init__(parent, **kwargs)
124
+ self.setWindowFlags(qt.Qt.Widget)
125
+ self._mainWidget = _MainWidget(parent=self)
126
+ self.setCentralWidget(self.widget)
127
+ # create toolbar
128
+ toolbar = qt.QToolBar("", parent=self)
129
+ toolbar.setIconSize(qt.QSize(32, 32))
130
+ self._controlAction = datareacheractions.ControlAction(parent=self)
131
+ self._configurationAction = datareacheractions.ConfigurationAction(parent=self)
132
+ toolbar.addAction(self._controlAction)
133
+ toolbar.addAction(self._configurationAction)
134
+
135
+ self._actionGroup = qt.QActionGroup(self)
136
+ self._actionGroup.addAction(self._controlAction)
137
+ self._actionGroup.addAction(self._configurationAction)
138
+
139
+ self.addToolBar(qt.Qt.LeftToolBarArea, toolbar)
140
+ toolbar.setMovable(False)
141
+ # connect signal / slot
142
+ self._controlAction.toggled[bool].connect(
143
+ self._mainWidget.controlWidget.setVisible
144
+ )
145
+ self._configurationAction.toggled[bool].connect(
146
+ self._mainWidget.configWidget.setVisible
147
+ )
148
+ self._controlAction.setChecked(True)
149
+
150
+ def getConfiguration(self) -> dict:
151
+ return {
152
+ "start_folder": self.widget.getFolderObserved(),
153
+ "file_filter": self.widget.getLinuxFilePattern(),
154
+ "scan_type_searched": self.widget.getConfigWindow().getScanType().value,
155
+ }
156
+
157
+ def setConfiguration(self, config: dict):
158
+ if "start_folder" in config:
159
+ self.widget.setFolderObserved(config["start_folder"])
160
+ if "file_filter" in config:
161
+ self.widget.setLinuxFilePattern(config["file_filter"])
162
+ type_searched = config.get("scan_type_searched", None)
163
+ if type_searched is not None:
164
+ self.widget.getConfigWindow().setScanType(type_searched)
165
+
166
+ @property
167
+ def widget(self) -> qt.QWidget:
168
+ return self._mainWidget
@@ -30,42 +30,45 @@ __date__ = "12/07/2022"
30
30
  import logging
31
31
  import os
32
32
  from collections import OrderedDict
33
+ from typing import Any, Optional, Union
34
+
35
+ from nxtomomill import converter as nxtomomill_converter
36
+ from nxtomomill.io import generate_default_edf_config, generate_default_h5_config
37
+ from nxtomomill.io.config import TomoEDFConfig as EDFConfig
38
+ from nxtomomill.io.config import TomoHDF5Config as HDF5Config
33
39
  from silx.gui import qt
34
40
  from tomoscan.esrf.identifier.edfidentifier import EDFVolumeIdentifier
35
41
  from tomoscan.esrf.identifier.hdf5Identifier import (
36
- HDF5VolumeIdentifier,
37
42
  HDF5TomoScanIdentifier,
43
+ HDF5VolumeIdentifier,
38
44
  )
45
+ from tomoscan.esrf.identifier.jp2kidentifier import JP2KVolumeIdentifier
46
+ from tomoscan.esrf.identifier.rawidentifier import RawVolumeIdentifier
39
47
  from tomoscan.esrf.identifier.tiffidentifier import (
40
- TIFFVolumeIdentifier,
41
48
  MultiTiffVolumeIdentifier,
49
+ TIFFVolumeIdentifier,
42
50
  )
43
- from tomoscan.esrf.identifier.jp2kidentifier import JP2KVolumeIdentifier
44
- from tomoscan.esrf.identifier.rawidentifier import RawVolumeIdentifier
51
+ from tomoscan.esrf.volume.utils import guess_volumes
52
+ from tomoscan.identifier import BaseIdentifier
53
+
54
+ from tomwer.core.scan.blissscan import BlissScan
45
55
  from tomwer.core.scan.edfscan import EDFTomoScan
56
+ from tomwer.core.scan.hdf5scan import HDF5TomoScan
46
57
  from tomwer.core.scan.scanfactory import ScanFactory
47
58
  from tomwer.core.tomwer_object import TomwerObject
48
59
  from tomwer.core.volume.edfvolume import EDFVolume
49
60
  from tomwer.core.volume.hdf5volume import HDF5Volume
50
- from tomwer.core.volume.tiffvolume import MultiTIFFVolume, TIFFVolume
51
- from tomwer.core.volume.rawvolume import RawVolume
52
61
  from tomwer.core.volume.jp2kvolume import JP2KVolume
53
- from tomwer.gui.qfolderdialog import QDataDialog, QVolumeDialog
54
- from tomwer.gui.control.actions import NXTomomillParamsAction
55
- from tomwer.gui.control.actions import CFGFileActiveLabel
56
- from tomwer.gui.utils.inputwidget import EDFConfigFileSelector, HDF5ConfigFileSelector
57
- from tomwer.gui.utils.inputwidget import NXTomomillOutputDirSelector
62
+ from tomwer.core.volume.rawvolume import RawVolume
63
+ from tomwer.core.volume.tiffvolume import MultiTIFFVolume, TIFFVolume
58
64
  from tomwer.core.volume.volumefactory import VolumeFactory
59
- from tomoscan.esrf.volume.utils import guess_volumes
60
- from nxtomomill import converter as nxtomomill_converter
61
- from tomwer.core.scan.hdf5scan import HDF5TomoScan
62
- from tomwer.core.scan.blissscan import BlissScan
63
- from tomoscan.identifier import BaseIdentifier
64
- from typing import Any, Optional, Union
65
- from nxtomomill.io.config import TomoHDF5Config as HDF5Config
66
- from nxtomomill.io.config import TomoEDFConfig as EDFConfig
67
- from nxtomomill.io import generate_default_edf_config
68
- from nxtomomill.io import generate_default_h5_config
65
+ from tomwer.gui.control.actions import CFGFileActiveLabel, NXTomomillParamsAction
66
+ from tomwer.gui.qfolderdialog import QDataDialog, QVolumeDialog
67
+ from tomwer.gui.utils.inputwidget import (
68
+ EDFConfigFileSelector,
69
+ HDF5ConfigFileSelector,
70
+ NXTomomillOutputDirSelector,
71
+ )
69
72
  from tomwer.gui.utils.qt_utils import block_signals
70
73
 
71
74
  logger = logging.getLogger(__name__)
@@ -851,17 +854,15 @@ class BlissScanList(_TomwerObjectList):
851
854
 
852
855
  if HDF5TomoScan.is_nexus_nxtomo_file(data):
853
856
  text = (
854
- "The input file `{}` seems to contain `NXTomo` entries. "
857
+ f"The input file `{data}` seems to contain `NXTomo` entries. "
855
858
  "and no valid `Bliss` valid entry. \n"
856
- "This is probably not a Bliss file. Do you still want to "
857
- "translate ?".format(data)
859
+ "This is probably not a Bliss file. Do you still want to translate ?"
858
860
  )
859
861
  else:
860
862
  text = (
861
- "The input file `{}` does not seems to contain any "
863
+ f"The input file `{data}` does not seems to contain any "
862
864
  "valid `Bliss` entry. \n"
863
- "This is probably not a Bliss file. Do you still want to "
864
- "translate ?".format(data)
865
+ "This is probably not a Bliss file. Do you still want to translate ?"
865
866
  )
866
867
  msg.setText(text)
867
868
  if msg.exec_() != qt.QMessageBox.Ok:
@@ -873,7 +874,7 @@ class BlissScanList(_TomwerObjectList):
873
874
  ):
874
875
  possible_entries.append(entry)
875
876
  except Exception:
876
- logger.error("Faild to find entries for {}".format(data))
877
+ logger.error(f"Faild to find entries for {data}")
877
878
  return
878
879
  else:
879
880
  file_path = data
@@ -29,19 +29,23 @@ __date__ = "16/03/2020"
29
29
 
30
30
 
31
31
  import os
32
- import weakref
33
32
  import socket
33
+ import weakref
34
+
34
35
  from silx.gui import qt
36
+
35
37
  from tomwer.core import settings
36
38
  from tomwer.core.process.utils import LastReceivedScansDict
39
+ from tomwer.core.scan.blissscan import BlissScan
37
40
  from tomwer.gui import icons as tomwericons
38
41
  from tomwer.gui.control import datareacheractions as actions
39
42
  from tomwer.gui.control.history import ScanHistory
40
43
  from tomwer.gui.control.observations import ScanObservation
41
- from tomwer.core.scan.blissscan import BlissScan
44
+ from tomwer.gui.utils.inputwidget import (
45
+ HDF5ConfigFileSelector,
46
+ NXTomomillOutputDirSelector,
47
+ )
42
48
  from tomwer.synctools.rsyncmanager import BlissSequenceRSyncWorker
43
- from tomwer.gui.utils.inputwidget import HDF5ConfigFileSelector
44
- from tomwer.gui.utils.inputwidget import NXTomomillOutputDirSelector
45
49
 
46
50
 
47
51
  class DataListenerWidget(qt.QMainWindow):
@@ -28,9 +28,10 @@ __license__ = "MIT"
28
28
  __date__ = "18/02/2018"
29
29
 
30
30
 
31
- from tomwer.gui import icons as tomwericons
32
31
  from silx.gui import qt
33
32
 
33
+ from tomwer.gui import icons as tomwericons
34
+
34
35
 
35
36
  class HistoryAction(qt.QAction):
36
37
  """
@@ -28,9 +28,11 @@ __license__ = "MIT"
28
28
  __date__ = "08/02/2019"
29
29
 
30
30
 
31
- from silx.gui import qt
32
31
  import logging
33
32
  import os
33
+
34
+ from silx.gui import qt
35
+
34
36
  from tomwer.io.utils import get_default_directory
35
37
 
36
38
  _logger = logging.getLogger(__file__)
@@ -28,18 +28,19 @@ __license__ = "MIT"
28
28
  __date__ = "23/07/2020"
29
29
 
30
30
 
31
+ import logging
32
+ import time
33
+ import weakref
34
+ from contextlib import AbstractContextManager
35
+
31
36
  from silx.gui import qt
32
- from tomwer.gui.visualization.dataviewer import DataViewer
37
+
33
38
  from tomwer.core.process.control.scanvalidator import ScanValidator as BaseDataValidator
34
- from tomwer.gui.utils.waiterthread import QWaiterThread
35
- from tomwer.core.scan.scanbase import TomwerScanBase
36
- from tomwer.core.scan.scanbase import _TomwerBaseDock
37
- from tomwer.gui.qfolderdialog import QDataDialog
39
+ from tomwer.core.scan.scanbase import TomwerScanBase, _TomwerBaseDock
38
40
  from tomwer.core.scan.scanfactory import ScanFactory
39
- import weakref
40
- from contextlib import AbstractContextManager
41
- import logging
42
- import time
41
+ from tomwer.gui.qfolderdialog import QDataDialog
42
+ from tomwer.gui.utils.waiterthread import QWaiterThread
43
+ from tomwer.gui.visualization.dataviewer import DataViewer
43
44
 
44
45
  _logger = logging.getLogger(__file__)
45
46
 
@@ -240,9 +241,7 @@ class DataValidator(qt.QMainWindow, BaseDataValidator):
240
241
  scans = ScanFactory.create_scan_objects(scan_path=folder)
241
242
  except Exception as e:
242
243
  _logger.error(
243
- "cannot create scan instances from {}. Error is {}".format(
244
- folder, e
245
- )
244
+ f"cannot create scan instances from {folder}. Error is {e}"
246
245
  )
247
246
  else:
248
247
  for scan in scans:
@@ -29,10 +29,11 @@ __date__ = "18/02/2018"
29
29
 
30
30
 
31
31
  import functools
32
+
32
33
  from silx.gui import qt
33
34
 
34
- from tomwer.core.process.control.datawatcher.datawatcher import _DataWatcher
35
35
  from tomwer.core.process.control.datawatcher import status
36
+ from tomwer.core.process.control.datawatcher.datawatcher import _DataWatcher
36
37
 
37
38
 
38
39
  class _DWConfigurationWidget(qt.QWidget):
@@ -157,6 +158,8 @@ class _SpecEDFObservationMethodSelector(qt.QGroupBox):
157
158
  self.layout().addWidget(self._qrbXml)
158
159
  self._qrbInfo = qt.QRadioButton(status.PARSE_INFO_FILE, parent=self)
159
160
  self.layout().addWidget(self._qrbInfo)
161
+ self._qrbAnyEDF = qt.QRadioButton(status.EDF_SCAN_END, parent=self)
162
+ self.layout().addWidget(self._qrbAnyEDF)
160
163
 
161
164
  self._qwUserEntry = qt.QWidget(parent=self)
162
165
  self.layout().addWidget(self._qwUserEntry)
@@ -188,10 +191,14 @@ class _SpecEDFObservationMethodSelector(qt.QGroupBox):
188
191
  spacer.setSizePolicy(qt.QSizePolicy.Minimum, qt.QSizePolicy.Expanding)
189
192
  self.layout().addWidget(spacer)
190
193
 
194
+ # set up
195
+ self._qrbAnyEDF.hide() # by default for the DataWatcher compatibility this one is hidded
196
+
191
197
  # deal with connections
192
198
  self._qrbUserEntry.toggled.connect(self.widgetFilePtrn.setVisible)
193
199
  self._qrbXml.toggled.connect(self._selectionChanged)
194
200
  self._qrbInfo.toggled.connect(self._selectionChanged)
201
+ self._qrbAnyEDF.toggled.connect(self._selectionChanged)
195
202
  self._qrbUserEntry.toggled.connect(self._selectionChanged)
196
203
  self._qleFilePattern.editingFinished.connect(self._selectionChanged)
197
204
 
@@ -223,6 +230,8 @@ class _SpecEDFObservationMethodSelector(qt.QGroupBox):
223
230
  return (status.DET_END_XML,)
224
231
  elif self._qrbInfo.isChecked():
225
232
  return (status.PARSE_INFO_FILE,)
233
+ elif self._qrbAnyEDF.isChecked():
234
+ return (status.EDF_SCAN_END,)
226
235
  elif self._qrbUserEntry.isChecked():
227
236
  return (status.DET_END_USER_ENTRY, {"pattern": self._qleFilePattern.text()})
228
237
  else:
@@ -233,6 +242,8 @@ class _SpecEDFObservationMethodSelector(qt.QGroupBox):
233
242
  self._qrbXml.setChecked(True)
234
243
  elif mode[0] == status.PARSE_INFO_FILE:
235
244
  self._qrbInfo.setChecked(True)
245
+ elif mode[0] == status.EDF_SCAN_END:
246
+ self._qrbAnyEDF.setChecked(True)
236
247
  elif mode[0] == status.DET_END_USER_ENTRY:
237
248
  self._qrbUserEntry.setChecked(True)
238
249
  if mode[1] not in (None, ""):