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
@@ -1,4 +1,5 @@
1
1
  import logging
2
+
2
3
  from . import state_summary # noqa F401
3
4
 
4
5
  fabio_logger = logging.getLogger("fabio.edfimage")
@@ -28,13 +28,15 @@ __license__ = "MIT"
28
28
  __date__ = "22/20/2020"
29
29
 
30
30
 
31
- from orangewidget.widget import OWBaseWidget
32
- from orangecontrib.tomwer.widgets.utils import WidgetLongProcessing
33
- from processview.core.superviseprocess import SuperviseProcess
34
31
  import functools
35
- from processview.core.manager import ProcessManager, DatasetState
32
+
36
33
  from ewoksorange.bindings import OWEwoksWidgetWithTaskStack
37
34
  from ewoksorange.bindings.owwidgets import invalid_data
35
+ from orangewidget.widget import OWBaseWidget
36
+ from processview.core.manager import DatasetState, ProcessManager
37
+ from processview.core.superviseprocess import SuperviseProcess
38
+
39
+ from orangecontrib.tomwer.widgets.utils import WidgetLongProcessing
38
40
 
39
41
 
40
42
  class _SuperviseMixIn(SuperviseProcess):
@@ -1,8 +1,9 @@
1
- from orangewidget.utils.signals import summarize, PartialSummary
1
+ from orangewidget.utils.signals import PartialSummary, summarize
2
+
2
3
  from tomwer.core.cluster import SlurmClusterConfiguration
4
+ from tomwer.core.futureobject import FutureTomwerObject
3
5
  from tomwer.core.scan.blissscan import BlissScan
4
6
  from tomwer.core.scan.scanbase import TomwerScanBase
5
- from tomwer.core.futureobject import FutureTomwerObject
6
7
 
7
8
 
8
9
  @summarize.register(object) # noqa F811
@@ -22,9 +22,9 @@
22
22
  #
23
23
  #############################################################################
24
24
 
25
- import pkg_resources
26
25
  import sysconfig
27
26
 
27
+ import pkg_resources
28
28
 
29
29
  ICON = "../widgets/icons/tomwer.png"
30
30
 
@@ -57,6 +57,6 @@ WIDGET_HELP_PATH = (
57
57
  # Documentation included in wheel
58
58
  # Correct DATA_FILES entry is needed in setup.py and documentation has to be built
59
59
  # # before the wheel is created.
60
- ("{}/help/tomwer/index.html".format(sysconfig.get_path("data")), None),
60
+ (f"{sysconfig.get_path('data')}/help/tomwer/index.html", None),
61
61
  ("http://www.silx.org/pub/doc/tomwer/htmlhelp/0.9/", None),
62
62
  )
@@ -28,21 +28,22 @@ __license__ = "MIT"
28
28
  __date__ = "14/10/2021"
29
29
 
30
30
 
31
+ import time
32
+
31
33
  from orangewidget import gui
32
- from orangewidget.widget import Input, Output
33
- from orangewidget.widget import OWBaseWidget
34
34
  from orangewidget.settings import Setting
35
+ from orangewidget.widget import Input, Output, OWBaseWidget
36
+ from processview.core.manager import DatasetState, ProcessManager
37
+ from processview.core.superviseprocess import SuperviseProcess
35
38
  from silx.gui import qt
36
- from tomwer.core.scan.scanbase import TomwerScanBase
39
+ from silx.gui.utils.concurrent import submitToQtMainThread
40
+
37
41
  from tomwer.core.futureobject import FutureTomwerObject
42
+ from tomwer.core.scan.scanbase import TomwerScanBase
38
43
  from tomwer.core.volume.volumebase import TomwerVolumeBase
39
44
  from tomwer.gui.cluster.supervisor import (
40
45
  FutureTomwerScanObserverWidget as _FutureTomwerScanObserverWidget,
41
46
  )
42
- from processview.core.superviseprocess import SuperviseProcess
43
- from processview.core.manager import ProcessManager, DatasetState
44
- from silx.gui.utils.concurrent import submitToQtMainThread
45
- import time
46
47
 
47
48
 
48
49
  class FutureSupervisorOW(OWBaseWidget, openclass=True):
@@ -186,6 +187,7 @@ class FutureTomwerObjectObserverWidget(
186
187
  details = "\n".join([details, "pending"])
187
188
  state = DatasetState.PENDING
188
189
  elif future_tomo_obj.status in ("finished", "completed"):
190
+ details = future_tomo_obj.logs or "no log found"
189
191
  state = DatasetState.SUCCEED
190
192
  elif future_tomo_obj.status == "running":
191
193
  details = "\n".join([details, "running"])
@@ -27,14 +27,15 @@ __authors__ = ["H. Payno"]
27
27
  __license__ = "MIT"
28
28
  __date__ = "13/10/2021"
29
29
 
30
+ import logging
31
+
30
32
  from orangewidget import gui
31
- from orangewidget.widget import Output
32
- from orangewidget.widget import OWBaseWidget
33
33
  from orangewidget.settings import Setting
34
- from tomwer.gui.cluster.slurm import SlurmSettingsWidget
35
- from tomwer.core.cluster import SlurmClusterConfiguration
34
+ from orangewidget.widget import Output, OWBaseWidget
35
+
36
36
  import tomwer.core.process.cluster.supervisor
37
- import logging
37
+ from tomwer.core.cluster import SlurmClusterConfiguration
38
+ from tomwer.gui.cluster.slurm import SlurmSettingsWidget
38
39
 
39
40
  _logger = logging.getLogger(__name__)
40
41
 
@@ -29,7 +29,8 @@ __date__ = "10/01/2018"
29
29
 
30
30
 
31
31
  import logging
32
- from orangewidget import widget, gui
32
+
33
+ from orangewidget import gui, widget
33
34
  from processview.gui.processmanager import ProcessManagerWindow
34
35
 
35
36
  logger = logging.getLogger(__name__)
@@ -0,0 +1,235 @@
1
+ import fnmatch
2
+ import logging
3
+ import os
4
+ from typing import Optional
5
+
6
+ import h5py
7
+ from orangewidget import gui, widget
8
+ from orangewidget.widget import Output
9
+ from silx.gui import qt
10
+ from orangewidget.settings import Setting
11
+
12
+ import tomwer.core.process.control.datadiscovery
13
+ from orangecontrib.tomwer.widgets.utils import WidgetLongProcessing
14
+ from tomwer.core.scan.blissscan import BlissScan
15
+ from tomwer.core.scan.edfscan import EDFTomoScan
16
+ from tomwer.core.scan.hdf5scan import HDF5TomoScan
17
+ from tomwer.core.scan.scanbase import TomwerScanBase
18
+ from tomwer.core.scan.scanfactory import ScanFactory
19
+ from tomwer.core.scan.scantype import ScanType
20
+ from tomwer.gui.control.datadiscovery import DataDiscoveryWidget
21
+
22
+ logger = logging.getLogger(__name__)
23
+
24
+
25
+ class DataDiscoveryOW(widget.OWBaseWidget, WidgetLongProcessing, openclass=True):
26
+ """
27
+ This widget will browse a folder and sub folder to find valid tomo scan project.
28
+ Contrary to the scan watcher it will parse all folder / sub folders then stop.
29
+ """
30
+
31
+ name = "scan discovery"
32
+ id = "orangecontrib.widgets.tomwer.control.DataDiscoveryOW.DataDiscoveryOW"
33
+ description = (
34
+ "This widget will browse a folder and sub folder to find valid tomo scan project. \n"
35
+ "Contrary to the scan watcher it will parse all folder / sub folders then stop."
36
+ )
37
+ icon = "icons/datadiscover.svg"
38
+ priority = 11
39
+ keywords = [
40
+ "tomography",
41
+ "tomwer",
42
+ "datadiscovery",
43
+ "data",
44
+ "discovery",
45
+ "search",
46
+ "research",
47
+ "hdf5",
48
+ "NXtomo",
49
+ ]
50
+
51
+ compress_signal = False
52
+
53
+ want_main_area = True
54
+ want_control_area = False
55
+ resizing_enabled = True
56
+
57
+ ewoksorangeclass = (
58
+ tomwer.core.process.control.datadiscovery._DataDiscoveryPlaceHolder
59
+ )
60
+
61
+ class Outputs:
62
+ data = Output(name="data", type=TomwerScanBase, doc="one scan to be process")
63
+
64
+ settings = Setting(dict())
65
+
66
+ def __init__(self, *args, **kwargs):
67
+ super().__init__(*args, **kwargs)
68
+ self._widget = DataDiscoveryWidget(parent=self)
69
+
70
+ self._box = gui.vBox(self.mainArea, self.name)
71
+ layout = self._box.layout()
72
+ layout.addWidget(self._widget)
73
+
74
+ self._widget.setConfiguration(self.settings)
75
+
76
+ # getting ready for processing
77
+ self._processingThread = _DiscoverThread()
78
+
79
+ # connect signal / slot
80
+ self._processingThread.sigDataFound.connect(self._sendData)
81
+ self._processingThread.finished.connect(self._endProcessing)
82
+ self._widget.widget.controlWidget._qpbstartstop.released.connect(
83
+ self._switchObservation
84
+ )
85
+ # dedicated one for settings
86
+ self._widget.widget.controlWidget._filterQLE.editingFinished.connect(
87
+ self._updatesettings
88
+ )
89
+ self._widget.widget.controlWidget._qteFolderSelected.editingFinished.connect(
90
+ self._updatesettings
91
+ )
92
+ self._widget.widget.configWidget.sigScanTypeChanged.connect(
93
+ self._updatesettings
94
+ )
95
+
96
+ def _updatesettings(self):
97
+ print("update settings")
98
+ self.settings = self.getConfiguration()
99
+
100
+ # expose some API
101
+ def getConfiguration(self) -> dict:
102
+ return self._widget.getConfiguration()
103
+
104
+ def setConfiguration(self, config: dict):
105
+ self._widget.setConfiguration(config)
106
+
107
+ def getProcessingThread(self) -> qt.QThread:
108
+ return self._processingThread
109
+
110
+ def setFolderObserved(self, dir_: str):
111
+ self._widget.widget.setFolderObserved(dir_)
112
+
113
+ def setSearchScanType(self, scan_type):
114
+ self._widget.widget.setSearchScanType(scan_type)
115
+
116
+ def setFilePattern(self, pattern: Optional[str]):
117
+ self._widget.widget.setLinuxFilePattern(pattern)
118
+
119
+ def _switchObservation(self, *args, **kwargs):
120
+ """stop or start the disceovery according to the thread state"""
121
+ thread = self.getProcessingThread()
122
+ if thread.isRunning():
123
+ thread.quit()
124
+ self._endProcessing()
125
+ else:
126
+ self.start_discovery()
127
+
128
+ def start_discovery(self, wait: Optional[int] = None):
129
+ """start the discovery of scans
130
+ :param int wait: optional waiting time in second
131
+ """
132
+ thread = self.getProcessingThread()
133
+ if thread.isRunning():
134
+ logger.warning("Discovery is already running")
135
+ return
136
+ self._startProcessing()
137
+ thread.setConfiguration(self.getConfiguration())
138
+ thread.start()
139
+ if wait is not None:
140
+ thread.wait(wait)
141
+
142
+ def _sendData(self, data):
143
+ if data is not None:
144
+ self.Outputs.data.send(data)
145
+
146
+ def _startProcessing(self, *args, **kwargs):
147
+ self._widget.widget.controlWidget._qpbstartstop.setText("stop discovery")
148
+ return super()._startProcessing(*args, **kwargs)
149
+
150
+ def _endProcessing(self, *args, **kwargs):
151
+ self._widget.widget.controlWidget._qpbstartstop.setText("start discovery")
152
+ return super()._endProcessing(*args, **kwargs)
153
+
154
+
155
+ class _DiscoverThread(qt.QThread):
156
+ """
157
+ Thread to browse folder and sub folder and looking for some scan
158
+ """
159
+
160
+ sigDataFound = qt.Signal(object)
161
+ """emit each time a new dataset is found"""
162
+
163
+ def __init__(self, **kwargs) -> None:
164
+ super().__init__(**kwargs)
165
+ self._root_dir = None
166
+ self._research_type = None
167
+ self._file_filter = None
168
+ self._look_for_hdf5 = False
169
+
170
+ def setConfiguration(self, config: dict):
171
+ self._root_dir = config.get("start_folder", None)
172
+ self._research_type = ScanType.from_value(config["scan_type_searched"])
173
+ self._file_filter = config.get("file_filter", None)
174
+ self._look_for_hdf5 = self._research_type in (
175
+ ScanType.BLISS,
176
+ ScanType.NX_TOMO,
177
+ )
178
+
179
+ def run(self):
180
+ if self._research_type is None:
181
+ logger.error("No reserach type defined. Cannot research scan")
182
+ elif not os.path.isdir(self._root_dir):
183
+ logger.error(f"{self._root_dir} is not a directory")
184
+ else:
185
+ self.discover_scan(file_path=self._root_dir)
186
+
187
+ def discover_scan(self, file_path):
188
+ if (
189
+ os.path.isfile(file_path)
190
+ and self._look_for_hdf5
191
+ and h5py.is_hdf5(file_path)
192
+ ) or (os.path.isdir(file_path) and not self._look_for_hdf5):
193
+ try:
194
+ name_match = self._file_filter is None or fnmatch.fnmatch(
195
+ os.path.basename(file_path), self._file_filter
196
+ )
197
+ except Exception as e:
198
+ logger.error(f"fnmatch fail. Error is {e}")
199
+ name_match = True
200
+ if name_match:
201
+ self._treat_path(file_path)
202
+ if os.path.isdir(file_path):
203
+ [
204
+ self.discover_scan(file_path=os.path.join(file_path, file_))
205
+ for file_ in os.listdir(file_path)
206
+ ]
207
+
208
+ def _treat_path(self, folder_path: str):
209
+ """treat file / folder at a specific location"""
210
+ try:
211
+ scan_objs = ScanFactory.create_scan_objects(
212
+ scan_path=folder_path,
213
+ accept_bliss_scan=(self._research_type == ScanType.BLISS),
214
+ )
215
+ except Exception as e:
216
+ logger.info(f"Fail to treat {folder_path}. Error is {e}")
217
+ else:
218
+ for scan in scan_objs:
219
+ if (
220
+ isinstance(scan, BlissScan)
221
+ and self._research_type is ScanType.BLISS
222
+ ):
223
+ self.sigDataFound.emit(scan)
224
+ elif (
225
+ isinstance(scan, HDF5TomoScan)
226
+ and self._research_type is ScanType.NX_TOMO
227
+ ):
228
+ self.sigDataFound.emit(scan)
229
+ elif (
230
+ isinstance(scan, EDFTomoScan)
231
+ and self._research_type is ScanType.SPEC
232
+ ):
233
+ self.sigDataFound.emit(scan)
234
+ else:
235
+ raise NotImplementedError("case not handled", self._research_type)
@@ -27,15 +27,17 @@ __authors__ = ["C. Nemoz", "H. Payno"]
27
27
  __license__ = "MIT"
28
28
  __date__ = "01/12/2016"
29
29
 
30
+ import logging
31
+
30
32
  from orangewidget import gui
33
+ from orangewidget.settings import Setting
34
+ from orangewidget.widget import Input, Output, OWBaseWidget
31
35
  from silx.gui import qt
32
- from tomwer.gui.control.datalist import GenericScanListDialog
36
+
37
+ import tomwer.core.process.control.scanlist
33
38
  from tomwer.core.scan.hdf5scan import HDF5TomoScan
34
39
  from tomwer.core.scan.scanbase import TomwerScanBase
35
- import tomwer.core.process.control.scanlist
36
- from orangewidget.settings import Setting
37
- from orangewidget.widget import Output, Input, OWBaseWidget
38
- import logging
40
+ from tomwer.gui.control.datalist import GenericScanListDialog
39
41
 
40
42
  logger = logging.getLogger(__name__)
41
43
 
@@ -28,36 +28,35 @@ __license__ = "MIT"
28
28
  __date__ = "06/03/2020"
29
29
 
30
30
 
31
+ from orangewidget import gui, settings, widget
32
+ from orangewidget.widget import Output
31
33
  from silx.gui import qt
32
34
 
33
35
  import tomwer.core.process.control.datalistener.datalistener
34
36
  from orangecontrib.tomwer.widgets.utils import WidgetLongProcessing
35
- from orangewidget import widget, gui
36
- from orangewidget.widget import Output
37
- from tomwer.core.scan.scanbase import TomwerScanBase
38
- from tomwer.core.scan.blissscan import BlissScan
39
37
  from tomwer.core.process.control.datalistener import DataListener
40
- from tomwer.utils import docstring
41
- from tomwer.synctools.datalistener import DataListenerQThread
42
- from tomwer.gui.control.datalistener import DataListenerWidget
43
- from tomwer.synctools.datalistener import MockDataListenerQThread
44
- from tomwer.synctools.stacks.control.datalistener import DataListenerProcessStack
45
- from tomwer.core.process.control.nxtomomill import H5ToNxProcess
46
38
  from tomwer.core.process.control.datalistener.rpcserver import (
47
39
  send_signal_to_local_rpc_servers,
48
40
  )
49
- from orangewidget import settings
41
+ from tomwer.core.process.control.nxtomomill import H5ToNxProcess
42
+ from tomwer.core.scan.blissscan import BlissScan
43
+ from tomwer.core.scan.scanbase import TomwerScanBase
44
+ from tomwer.gui.control.datalistener import DataListenerWidget
45
+ from tomwer.synctools.datalistener import DataListenerQThread, MockDataListenerQThread
46
+ from tomwer.synctools.stacks.control.datalistener import DataListenerProcessStack
47
+ from tomwer.utils import docstring
50
48
 
51
49
  try:
52
50
  # new HDF5Config class
53
51
  from nxtomomill.io.config import TomoHDF5Config as HDF5Config
54
52
  except ImportError:
55
53
  from nxtomomill.io.config import HDF5Config
56
- from typing import Iterable
54
+
57
55
  import functools
58
56
  import logging
59
57
  import signal
60
58
  import sys
59
+ from typing import Iterable
61
60
 
62
61
  logger = logging.getLogger(__name__)
63
62
 
@@ -354,10 +353,10 @@ class _PortOccupyDialog(qt.QDialog):
354
353
  self.host = host
355
354
 
356
355
  mess = (
357
- "port ({port}) of {host} already in use. \n Maybe an other "
356
+ f"port ({port}) of {host} already in use. \n Maybe an other "
358
357
  "instance of `datalistener` is running in this session or "
359
358
  "another tomwer session. \n As this widget is connecting with "
360
- "bliss we enforce it to be unique.".format(port=port, host=host)
359
+ "bliss we enforce it to be unique."
361
360
  )
362
361
  self.layout().addWidget(qt.QLabel(mess, self))
363
362
  self.setWindowTitle("Unable to launch two listener in parallel")
@@ -27,15 +27,17 @@ __authors__ = ["C. Nemoz", "H. Payno"]
27
27
  __license__ = "MIT"
28
28
  __date__ = "25/05/2018"
29
29
 
30
- from silx.gui import qt
30
+ import logging
31
+
31
32
  from orangewidget import gui
32
- from orangewidget.widget import Output, Input, OWBaseWidget
33
- from tomwer.core.scan.hdf5scan import HDF5TomoScan
34
- from tomwer.gui.control.scanselectorwidget import ScanSelectorWidget
35
- from tomwer.core.scan.scanbase import TomwerScanBase
36
33
  from orangewidget.settings import Setting
34
+ from orangewidget.widget import Input, Output, OWBaseWidget
35
+ from silx.gui import qt
36
+
37
37
  import tomwer.core.process.control.scanselector
38
- import logging
38
+ from tomwer.core.scan.hdf5scan import HDF5TomoScan
39
+ from tomwer.core.scan.scanbase import TomwerScanBase
40
+ from tomwer.gui.control.scanselectorwidget import ScanSelectorWidget
39
41
 
40
42
  logger = logging.getLogger(__name__)
41
43
 
@@ -27,21 +27,21 @@ __authors__ = ["C. Nemoz", "H. Payno"]
27
27
  __license__ = "MIT"
28
28
  __date__ = "07/12/2016"
29
29
 
30
+ import functools
30
31
  import logging
31
- from orangewidget import gui
32
- from orangewidget import settings
33
- from orangewidget.widget import Output, Input
32
+
33
+ from orangewidget import gui, settings
34
+ from orangewidget.widget import Input, Output
35
+ from processview.core.manager import DatasetState, ProcessManager
34
36
  from silx.gui import qt
35
37
 
36
38
  import tomwer.core.process.control.scantransfer
37
- from tomwer.core.process.control.scantransfer import ScanTransfer
39
+ from orangecontrib.tomwer.orange.managedprocess import SuperviseOW
38
40
  from orangecontrib.tomwer.orange.settings import CallbackSettingsHandler
39
- from tomwer.gui.control.datatransfert import DataTransfertSelector
41
+ from tomwer.core.process.control.scantransfer import ScanTransfer
40
42
  from tomwer.core.scan.scanbase import TomwerScanBase
41
- from processview.core.manager import ProcessManager, DatasetState
42
- from orangecontrib.tomwer.orange.managedprocess import SuperviseOW
43
+ from tomwer.gui.control.datatransfert import DataTransfertSelector
43
44
  from tomwer.utils import docstring
44
- import functools
45
45
 
46
46
  logger = logging.getLogger(__name__)
47
47
 
@@ -208,7 +208,7 @@ class ThreadDataTransfer(qt.QThread):
208
208
  process = ScanTransfer(inputs=self._inputs)
209
209
  process.run()
210
210
  except Exception as e:
211
- logger.error("data transfer failed. Reason is {}".format(e))
211
+ logger.error(f"data transfer failed. Reason is {e}")
212
212
  ProcessManager().notify_dataset_state(
213
213
  dataset=self._data,
214
214
  process=self._process,
@@ -27,19 +27,18 @@ __authors__ = ["H. Payno"]
27
27
  __license__ = "MIT"
28
28
  __date__ = "21/07/2020"
29
29
 
30
- from silx.gui import qt
31
- from orangewidget import gui
30
+ import logging
31
+
32
+ from orangewidget import gui, settings
32
33
  from orangewidget.widget import Input, Output
34
+ from processview.core.manager import DatasetState, ProcessManager
35
+ from silx.gui import qt
33
36
 
34
37
  import tomwer.core.process.control.scanvalidator
35
- from tomwer.gui.control.datavalidator import DataValidator
36
- from tomwer.core.scan.scanbase import TomwerScanBase
37
38
  from orangecontrib.tomwer.orange.managedprocess import SuperviseOW
38
- from processview.core.manager import ProcessManager, DatasetState
39
- from tomwer.core.scan.scanbase import _TomwerBaseDock
40
- from orangewidget import settings
39
+ from tomwer.core.scan.scanbase import TomwerScanBase, _TomwerBaseDock
40
+ from tomwer.gui.control.datavalidator import DataValidator
41
41
  from tomwer.utils import docstring
42
- import logging
43
42
 
44
43
  _logger = logging.getLogger(__name__)
45
44
 
@@ -27,16 +27,19 @@ __authors__ = ["C. Nemoz", "H. Payno"]
27
27
  __license__ = "MIT"
28
28
  __date__ = "25/10/2016"
29
29
 
30
- import tomwer.core.process.control.datawatcher.datawatcher
31
- from tomwer.core.scan.blissscan import BlissScan
32
- from ..utils import WidgetLongProcessing
33
- from orangewidget import widget, gui
30
+ import functools
31
+ import logging
32
+
33
+ from orangewidget import gui, widget
34
34
  from orangewidget.settings import Setting
35
35
  from orangewidget.widget import Output
36
+
37
+ import tomwer.core.process.control.datawatcher.datawatcher
38
+ from tomwer.core.scan.blissscan import BlissScan
36
39
  from tomwer.core.scan.scanbase import TomwerScanBase
37
40
  from tomwer.gui.control.datawatcher import DataWatcherWidget
38
- import functools
39
- import logging
41
+
42
+ from ..utils import WidgetLongProcessing
40
43
 
41
44
  logger = logging.getLogger(__name__)
42
45
 
@@ -119,31 +122,36 @@ class DataWatcherOW(widget.OWBaseWidget, WidgetLongProcessing, openclass=True):
119
122
 
120
123
  def _loadSettings(self):
121
124
  if self.acquisitionMethod != tuple():
122
- self._widget.getConfigWindow().setMode(self.acquisitionMethod)
125
+ self.widget.getConfigWindow().setMode(self.acquisitionMethod)
123
126
  if self.folderObserved != str():
124
- self._widget.setFolderObserved(self.folderObserved)
127
+ self.widget.setFolderObserved(self.folderObserved)
125
128
  if self.linuxFilePatternSetting != str():
126
129
  # for the GUI
127
- self._widget._filterQLE.setText(self.linuxFilePatternSetting)
130
+ self.widget._filterQLE.setText(self.linuxFilePatternSetting)
128
131
  # for providing it to the processing thread. Bad design but this widget shouldn't be used that
129
132
  # much and modifying internals is not the priority.
130
- self._widget.setLinuxFilePattern(self.linuxFilePatternSetting)
133
+ self.widget.setLinuxFilePattern(self.linuxFilePatternSetting)
131
134
 
132
135
  def _updateSettings(self):
133
- self.folderObserved = self._widget.getFolderObserved()
134
- mode = self._widget.getConfigWindow().getMode()
136
+ self.folderObserved = self.widget.getFolderObserved()
137
+ mode = self.widget.getConfigWindow().getMode()
135
138
  if mode is not None:
136
139
  self.acquisitionMethod = mode
140
+ self.linuxFilePatternSetting = self.widget.getLinuxFilePattern()
137
141
 
138
142
  def _saveFilterLinuxPattern(self, *args, **kwargs):
139
- linuxFilePattern = self._widget.getFilterLinuxFileNamePattern()
143
+ linuxFilePattern = self.widget.getFilterLinuxFileNamePattern()
140
144
  if linuxFilePattern is None:
141
145
  self.linuxFilePatternSetting = ""
142
146
  else:
143
147
  self.linuxFilePatternSetting = linuxFilePattern
144
148
 
145
149
  def _setObsMethod(self, mode):
146
- self._widget.setObsMethod(mode)
150
+ self.widget.setObsMethod(mode)
151
+
152
+ @property
153
+ def widget(self):
154
+ return self._widget
147
155
 
148
156
  @property
149
157
  def currentStatus(self):
@@ -169,7 +177,7 @@ class DataWatcherOW(widget.OWBaseWidget, WidgetLongProcessing, openclass=True):
169
177
  )
170
178
 
171
179
  def setFolderObserved(self, path):
172
- self._widget.setFolderObserved(path)
180
+ self.widget.setFolderObserved(path)
173
181
 
174
182
  def setObservation(self, b):
175
183
  self._widget.setObservation(b)
@@ -189,12 +197,12 @@ class DataWatcherOW(widget.OWBaseWidget, WidgetLongProcessing, openclass=True):
189
197
  self._widget.start()
190
198
 
191
199
  def stopObservation(self, succes=False):
192
- self._widget.stop(succes)
200
+ self.widget.stop(succes)
193
201
  try:
194
202
  self.Processing.clear()
195
203
  except Exception:
196
204
  pass
197
205
 
198
206
  def close(self):
199
- self._widget.close()
207
+ self.widget.close()
200
208
  super().close()
@@ -27,19 +27,19 @@ __authors__ = ["H. Payno"]
27
27
  __license__ = "MIT"
28
28
  __date__ = "11/03/2020"
29
29
 
30
+ import logging
30
31
  from copy import copy
32
+
33
+ from nxtomomill.io.config import TomoEDFConfig as EDFConfig
31
34
  from orangewidget import gui
32
- from tomwer.core.scan.edfscan import EDFTomoScan
35
+ from silx.gui import qt
36
+
33
37
  from orangecontrib.tomwer.orange.managedprocess import TomwerWithStackStack
34
- from tomwer.core.scan.hdf5scan import HDF5TomoScan
35
- from tomwer.gui.control.datalist import (
36
- EDFDataListMainWindow,
37
- )
38
- from nxtomomill.io.config import TomoEDFConfig as EDFConfig
39
38
  from orangecontrib.tomwer.widgets.control.NXTomomillMixIn import NXTomomillMixIn
40
39
  from tomwer.core.process.control.nxtomomill import EDFToNxProcess
41
- from silx.gui import qt
42
- import logging
40
+ from tomwer.core.scan.edfscan import EDFTomoScan
41
+ from tomwer.core.scan.hdf5scan import HDF5TomoScan
42
+ from tomwer.gui.control.datalist import EDFDataListMainWindow
43
43
 
44
44
  logger = logging.getLogger(__name__)
45
45