tomwer 1.2.1__py3-none-any.whl → 1.3.12__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 (334) hide show
  1. orangecontrib/tomwer/tutorials/icat_publication.ows +58 -0
  2. orangecontrib/tomwer/widgets/__init__.py +11 -11
  3. orangecontrib/tomwer/widgets/control/DataDiscoveryOW.py +2 -2
  4. orangecontrib/tomwer/widgets/control/DataListOW.py +9 -7
  5. orangecontrib/tomwer/widgets/control/DataListenerOW.py +6 -6
  6. orangecontrib/tomwer/widgets/control/DataSelectorOW.py +21 -10
  7. orangecontrib/tomwer/widgets/control/DataValidatorOW.py +6 -6
  8. orangecontrib/tomwer/widgets/control/EDF2NXTomomillOW.py +24 -7
  9. orangecontrib/tomwer/widgets/control/EmailOW.py +4 -4
  10. orangecontrib/tomwer/widgets/control/NXTomomillMixIn.py +3 -3
  11. orangecontrib/tomwer/widgets/control/NXTomomillOW.py +64 -23
  12. orangecontrib/tomwer/widgets/control/NXtomoConcatenate.py +20 -8
  13. orangecontrib/tomwer/widgets/control/NotifierOW.py +1 -0
  14. orangecontrib/tomwer/widgets/control/SingleTomoObjOW.py +6 -6
  15. orangecontrib/tomwer/widgets/control/VolumeSelector.py +7 -4
  16. orangecontrib/tomwer/widgets/control/VolumeSymLinkOW.py +182 -182
  17. orangecontrib/tomwer/widgets/debugtools/DatasetGeneratorOW.py +5 -5
  18. orangecontrib/tomwer/widgets/edit/DarkFlatPatchOW.py +4 -4
  19. orangecontrib/tomwer/widgets/edit/ImageKeyEditorOW.py +3 -3
  20. orangecontrib/tomwer/widgets/edit/ImageKeyUpgraderOW.py +8 -1
  21. orangecontrib/tomwer/widgets/edit/NXtomoEditorOW.py +3 -3
  22. orangecontrib/tomwer/widgets/edit/test/test_nxtomo_editor.py +3 -3
  23. orangecontrib/tomwer/widgets/icat/PublishProcessedDataOW.py +115 -0
  24. orangecontrib/tomwer/widgets/icat/RawDataScreenshotCreatorOW.py +98 -0
  25. orangecontrib/tomwer/widgets/icat/SaveToGalleryAndPublishOW.py +129 -0
  26. orangecontrib/tomwer/widgets/icat/__init__.py +13 -0
  27. orangecontrib/tomwer/widgets/icat/icons/add_gallery.png +0 -0
  28. orangecontrib/tomwer/widgets/icat/icons/add_gallery.svg +82 -0
  29. orangecontrib/tomwer/widgets/icat/icons/publish_processed_data.png +0 -0
  30. orangecontrib/tomwer/widgets/icat/icons/publish_processed_data.svg +95 -0
  31. orangecontrib/tomwer/widgets/icat/icons/raw_screenshots.png +0 -0
  32. orangecontrib/tomwer/widgets/icat/icons/raw_screenshots.svg +143 -0
  33. orangecontrib/tomwer/widgets/icons/tomwer_data_portal.png +0 -0
  34. orangecontrib/tomwer/widgets/icons/tomwer_data_portal.svg +76 -0
  35. orangecontrib/tomwer/widgets/reconstruction/AxisOW.py +22 -20
  36. orangecontrib/tomwer/widgets/reconstruction/CastNabuVolumeOW.py +19 -3
  37. orangecontrib/tomwer/widgets/reconstruction/NabuHelicalPrepareWeightsDoubleOW.py +184 -169
  38. orangecontrib/tomwer/widgets/reconstruction/NabuOW.py +23 -0
  39. orangecontrib/tomwer/widgets/reconstruction/NabuVolumeOW.py +39 -5
  40. orangecontrib/tomwer/widgets/reconstruction/SAAxisOW.py +18 -22
  41. orangecontrib/tomwer/widgets/reconstruction/SADeltaBetaOW.py +18 -26
  42. orangecontrib/tomwer/widgets/reconstruction/SinoNormOW.py +15 -19
  43. orangecontrib/tomwer/widgets/visualization/DataViewerOW.py +9 -9
  44. orangecontrib/tomwer/widgets/visualization/DiffViewerOW.py +1 -1
  45. orangecontrib/tomwer/widgets/visualization/LivesliceOW.py +1 -1
  46. orangecontrib/tomwer/widgets/visualization/NXtomoMetadataViewerOW.py +3 -3
  47. orangecontrib/tomwer/widgets/visualization/SinogramViewerOW.py +0 -1
  48. orangecontrib/tomwer/widgets/visualization/VolumeViewerOW.py +3 -29
  49. tomwer/__main__.py +7 -64
  50. tomwer/app/axis.py +3 -3
  51. tomwer/app/canvas.py +8 -0
  52. tomwer/app/canvas_launcher/config.py +16 -14
  53. tomwer/app/canvas_launcher/environ.py +1 -0
  54. tomwer/app/canvas_launcher/mainwindow.py +4 -1
  55. tomwer/app/darkref.py +1 -1
  56. tomwer/app/darkrefpatch.py +1 -1
  57. tomwer/app/diffframe.py +3 -3
  58. tomwer/app/imagekeyeditor.py +5 -5
  59. tomwer/app/imagekeyupgrader.py +5 -5
  60. tomwer/app/intensitynormalization.py +14 -13
  61. tomwer/app/{saaxis.py → multicor.py} +3 -3
  62. tomwer/app/{sadeltabeta.py → multipag.py} +3 -3
  63. tomwer/app/nabuapp.py +0 -11
  64. tomwer/app/radiostack.py +6 -4
  65. tomwer/app/samplemoved.py +3 -2
  66. tomwer/app/scanviewer.py +4 -2
  67. tomwer/app/sinogramviewer.py +3 -2
  68. tomwer/app/slicestack.py +3 -2
  69. tomwer/app/zstitching.py +88 -6
  70. tomwer/core/cluster/cluster.py +26 -0
  71. tomwer/core/log/logger.py +7 -5
  72. tomwer/core/process/conditions/filters.py +1 -1
  73. tomwer/core/process/control/datalistener/datalistener.py +19 -14
  74. tomwer/core/process/control/datawatcher/edfdwprocess.py +0 -9
  75. tomwer/core/process/control/nxtomoconcatenate.py +13 -13
  76. tomwer/core/process/control/nxtomomill.py +92 -34
  77. tomwer/core/process/control/scantransfer.py +20 -43
  78. tomwer/core/process/control/scanvalidator.py +3 -2
  79. tomwer/core/process/control/test/test_concatenate_nxtomos.py +9 -9
  80. tomwer/core/process/control/test/test_email.py +4 -4
  81. tomwer/core/process/control/test/test_h52nx_process.py +59 -7
  82. tomwer/core/process/control/test/test_volume_link.py +64 -64
  83. tomwer/core/process/control/timer.py +1 -1
  84. tomwer/core/process/control/volumesymlink.py +200 -200
  85. tomwer/core/process/edit/darkflatpatch.py +14 -15
  86. tomwer/core/process/edit/imagekeyeditor.py +41 -39
  87. tomwer/core/process/icat/__init__.py +0 -0
  88. tomwer/core/process/icat/createscreenshots.py +100 -0
  89. tomwer/core/process/icat/gallery.py +377 -0
  90. tomwer/core/process/icat/icatbase.py +36 -0
  91. tomwer/core/process/icat/publish.py +228 -0
  92. tomwer/core/process/icat/screenshots.py +27 -0
  93. tomwer/core/process/output.py +52 -0
  94. tomwer/core/process/reconstruction/axis/axis.py +280 -69
  95. tomwer/core/process/reconstruction/axis/mode.py +163 -48
  96. tomwer/core/process/reconstruction/axis/params.py +29 -21
  97. tomwer/core/process/reconstruction/darkref/darkrefs.py +41 -127
  98. tomwer/core/process/reconstruction/darkref/darkrefscopy.py +4 -3
  99. tomwer/core/process/reconstruction/darkref/params.py +1 -1
  100. tomwer/core/process/reconstruction/nabu/castvolume.py +4 -4
  101. tomwer/core/process/reconstruction/nabu/helical.py +9 -5
  102. tomwer/core/process/reconstruction/nabu/nabucommon.py +71 -78
  103. tomwer/core/process/reconstruction/nabu/nabuscores.py +425 -53
  104. tomwer/core/process/reconstruction/nabu/nabuslices.py +114 -93
  105. tomwer/core/process/reconstruction/nabu/nabuvolume.py +54 -27
  106. tomwer/core/process/reconstruction/nabu/plane.py +9 -0
  107. tomwer/core/process/reconstruction/nabu/settings.py +2 -2
  108. tomwer/core/process/reconstruction/nabu/utils.py +164 -26
  109. tomwer/core/process/reconstruction/output.py +108 -0
  110. tomwer/core/process/reconstruction/saaxis/saaxis.py +238 -264
  111. tomwer/core/process/reconstruction/sadeltabeta/sadeltabeta.py +151 -87
  112. tomwer/core/process/reconstruction/scores/params.py +7 -4
  113. tomwer/core/process/reconstruction/scores/scores.py +13 -0
  114. tomwer/core/process/reconstruction/test/test_axis_params.py +2 -2
  115. tomwer/core/process/reconstruction/test/test_darkref.py +3 -3
  116. tomwer/core/process/reconstruction/test/test_darkref_copy.py +7 -7
  117. tomwer/core/process/reconstruction/test/test_saaxis.py +3 -4
  118. tomwer/core/process/reconstruction/test/test_sadeltabeta.py +2 -2
  119. tomwer/core/process/stitching/nabustitcher.py +13 -12
  120. tomwer/core/process/task.py +34 -26
  121. tomwer/core/process/test/test_axis.py +13 -12
  122. tomwer/core/process/test/test_dark_and_flat.py +10 -7
  123. tomwer/core/process/test/test_data_transfer.py +10 -8
  124. tomwer/core/process/test/test_nabu.py +14 -6
  125. tomwer/core/process/test/test_normalization.py +4 -4
  126. tomwer/core/scan/blissscan.py +3 -3
  127. tomwer/core/scan/edfscan.py +13 -10
  128. tomwer/core/scan/hdf5scan.py +19 -530
  129. tomwer/core/scan/nxtomoscan.py +534 -0
  130. tomwer/core/scan/scanbase.py +72 -44
  131. tomwer/core/scan/scanfactory.py +13 -13
  132. tomwer/core/scan/test/test_edf.py +2 -2
  133. tomwer/core/scan/test/test_future_scan.py +3 -3
  134. tomwer/core/scan/test/test_h5.py +18 -16
  135. tomwer/core/scan/test/test_process_registration.py +4 -40
  136. tomwer/core/scan/test/test_scan.py +5 -78
  137. tomwer/core/settings.py +22 -2
  138. tomwer/core/test/test_scanutils.py +8 -7
  139. tomwer/core/test/test_utils.py +35 -28
  140. tomwer/core/tomwer_object.py +1 -1
  141. tomwer/core/utils/__init__.py +0 -466
  142. tomwer/core/utils/deprecation.py +1 -1
  143. tomwer/core/utils/dictutils.py +14 -0
  144. tomwer/core/utils/lbsram.py +35 -0
  145. tomwer/core/utils/nxtomoutils.py +1 -1
  146. tomwer/core/utils/scanutils.py +6 -6
  147. tomwer/core/utils/spec.py +263 -0
  148. tomwer/core/volume/edfvolume.py +6 -6
  149. tomwer/core/volume/hdf5volume.py +6 -6
  150. tomwer/core/volume/jp2kvolume.py +6 -6
  151. tomwer/core/volume/rawvolume.py +6 -6
  152. tomwer/core/volume/tiffvolume.py +12 -12
  153. tomwer/core/volume/volumefactory.py +2 -2
  154. tomwer/gui/cluster/slurm.py +274 -65
  155. tomwer/gui/cluster/supervisor.py +12 -0
  156. tomwer/gui/cluster/test/test_cluster.py +14 -2
  157. tomwer/gui/cluster/test/test_supervisor.py +3 -3
  158. tomwer/gui/configuration/__init__.py +0 -0
  159. tomwer/gui/{reconstruction/nabu → configuration}/action.py +1 -32
  160. tomwer/gui/configuration/level.py +22 -0
  161. tomwer/gui/control/actions.py +54 -0
  162. tomwer/gui/control/datalist.py +83 -16
  163. tomwer/gui/control/datalistener.py +4 -16
  164. tomwer/gui/control/datawatcher/controlwidget.py +2 -4
  165. tomwer/gui/control/datawatcher/datawatcher.py +1 -24
  166. tomwer/gui/control/{email.py → emailnotifier.py} +9 -18
  167. tomwer/gui/control/history.py +2 -2
  168. tomwer/gui/control/observations.py +2 -2
  169. tomwer/gui/control/reducedarkflatselector.py +9 -9
  170. tomwer/gui/control/selectorwidgetbase.py +36 -9
  171. tomwer/gui/control/serie/seriecreator.py +5 -22
  172. tomwer/gui/control/test/test_email.py +1 -1
  173. tomwer/gui/control/test/test_scanvalidator.py +6 -5
  174. tomwer/gui/control/test/test_single_tomo_obj.py +3 -3
  175. tomwer/gui/control/tomoobjdisplaymode.py +8 -0
  176. tomwer/gui/debugtools/datasetgenerator.py +3 -3
  177. tomwer/gui/edit/dkrfpatch.py +20 -26
  178. tomwer/gui/edit/imagekeyeditor.py +11 -12
  179. tomwer/gui/edit/nxtomoeditor.py +111 -44
  180. tomwer/gui/edit/nxtomowarmer.py +7 -6
  181. tomwer/gui/edit/test/test_dkrf_patch.py +13 -13
  182. tomwer/gui/edit/test/test_image_key_editor.py +3 -3
  183. tomwer/gui/edit/test/test_nx_editor.py +40 -16
  184. tomwer/gui/icat/__init__.py +0 -0
  185. tomwer/gui/icat/createscreenshots.py +80 -0
  186. tomwer/gui/icat/gallery.py +214 -0
  187. tomwer/gui/icat/publish.py +187 -0
  188. tomwer/gui/imagefromfile.py +2 -2
  189. tomwer/gui/qfolderdialog.py +24 -1
  190. tomwer/gui/reconstruction/axis/CompareImages.py +88 -168
  191. tomwer/gui/reconstruction/axis/axis.py +171 -57
  192. tomwer/gui/reconstruction/axis/radioaxis.py +122 -257
  193. tomwer/gui/reconstruction/darkref/darkrefcopywidget.py +3 -2
  194. tomwer/gui/reconstruction/darkref/darkrefwidget.py +2 -1
  195. tomwer/gui/reconstruction/nabu/castvolume.py +14 -3
  196. tomwer/gui/reconstruction/nabu/check.py +9 -9
  197. tomwer/gui/reconstruction/nabu/helical.py +29 -12
  198. tomwer/gui/reconstruction/nabu/nabuconfig/base.py +2 -4
  199. tomwer/gui/reconstruction/nabu/nabuconfig/nabuconfig.py +2 -1
  200. tomwer/gui/reconstruction/nabu/nabuconfig/output.py +126 -35
  201. tomwer/gui/reconstruction/nabu/nabuconfig/phase.py +39 -32
  202. tomwer/gui/reconstruction/nabu/nabuconfig/preprocessing.py +222 -31
  203. tomwer/gui/reconstruction/nabu/nabuconfig/reconstruction.py +57 -27
  204. tomwer/gui/reconstruction/nabu/nabuflow.py +12 -20
  205. tomwer/gui/reconstruction/nabu/slices.py +10 -11
  206. tomwer/gui/reconstruction/nabu/volume.py +22 -10
  207. tomwer/gui/reconstruction/normalization/intensity.py +18 -48
  208. tomwer/gui/reconstruction/saaxis/corrangeselector.py +8 -24
  209. tomwer/gui/reconstruction/saaxis/dimensionwidget.py +1 -1
  210. tomwer/gui/reconstruction/saaxis/saaxis.py +9 -21
  211. tomwer/gui/reconstruction/sadeltabeta/saadeltabeta.py +45 -12
  212. tomwer/gui/reconstruction/scores/control.py +2 -9
  213. tomwer/gui/reconstruction/scores/scoreplot.py +13 -11
  214. tomwer/gui/reconstruction/test/test_axis.py +41 -16
  215. tomwer/gui/reconstruction/test/test_nabu.py +31 -9
  216. tomwer/gui/reconstruction/test/test_saaxis.py +3 -3
  217. tomwer/gui/reconstruction/test/test_sadeltabeta.py +12 -2
  218. tomwer/gui/settings.py +5 -28
  219. tomwer/gui/stackplot.py +2 -5
  220. tomwer/gui/stitching/action.py +49 -0
  221. tomwer/gui/stitching/config/axisparams.py +7 -24
  222. tomwer/gui/stitching/config/output.py +10 -8
  223. tomwer/gui/stitching/config/positionoveraxis.py +22 -23
  224. tomwer/gui/stitching/normalization.py +117 -0
  225. tomwer/gui/stitching/stitchandbackground.py +4 -6
  226. tomwer/gui/stitching/stitching.py +267 -45
  227. tomwer/gui/stitching/stitching_preview.py +62 -55
  228. tomwer/gui/stitching/stitching_raw.py +13 -12
  229. tomwer/gui/stitching/z_stitching/fineestimation.py +0 -60
  230. tomwer/gui/utils/buttons.py +112 -29
  231. tomwer/gui/utils/inputwidget.py +43 -25
  232. tomwer/gui/utils/lineselector/lineselector.py +1 -1
  233. tomwer/gui/utils/scandescription.py +4 -0
  234. tomwer/gui/utils/step.py +144 -0
  235. tomwer/gui/utils/unitsystem.py +2 -5
  236. tomwer/gui/utils/vignettes.py +176 -15
  237. tomwer/gui/visualization/dataviewer.py +48 -35
  238. tomwer/gui/visualization/diffviewer/diffviewer.py +7 -16
  239. tomwer/gui/visualization/diffviewer/shiftwidget.py +2 -5
  240. tomwer/gui/visualization/scanoverview.py +1 -1
  241. tomwer/gui/visualization/sinogramviewer.py +20 -36
  242. tomwer/gui/visualization/test/test_diffviewer.py +3 -3
  243. tomwer/gui/visualization/test/test_nx_tomo_metadata_viewer.py +4 -4
  244. tomwer/gui/visualization/test/test_sinogramviewer.py +2 -2
  245. tomwer/gui/visualization/test/test_stacks.py +3 -3
  246. tomwer/gui/visualization/test/test_volumeviewer.py +65 -67
  247. tomwer/gui/visualization/volumeviewer.py +114 -113
  248. tomwer/io/utils/h5pyutils.py +3 -3
  249. tomwer/io/utils/raw_and_processed_data.py +84 -0
  250. tomwer/io/utils/tomoobj.py +4 -6
  251. tomwer/io/utils/utils.py +7 -7
  252. tomwer/resources/gui/icons/parameters.svg +1 -1
  253. tomwer/resources/gui/icons/ruler.png +0 -0
  254. tomwer/resources/gui/icons/ruler.svg +273 -0
  255. tomwer/resources/gui/icons/short_description.png +0 -0
  256. tomwer/resources/gui/icons/short_description.svg +58 -0
  257. tomwer/resources/gui/icons/url.png +0 -0
  258. tomwer/resources/gui/icons/url.svg +58 -0
  259. tomwer/resources/gui/illustrations/no_rot.svg +1 -1
  260. tomwer/synctools/stacks/edit/darkflatpatch.py +19 -14
  261. tomwer/synctools/stacks/edit/imagekeyeditor.py +2 -2
  262. tomwer/synctools/stacks/reconstruction/axis.py +4 -4
  263. tomwer/synctools/stacks/reconstruction/castvolume.py +22 -7
  264. tomwer/synctools/stacks/reconstruction/dkrefcopy.py +25 -20
  265. tomwer/synctools/stacks/reconstruction/nabu.py +2 -2
  266. tomwer/synctools/stacks/reconstruction/normalization.py +2 -2
  267. tomwer/synctools/stacks/reconstruction/saaxis.py +2 -2
  268. tomwer/synctools/stacks/reconstruction/sadeltabeta.py +2 -2
  269. tomwer/synctools/test/test_darkRefs.py +7 -58
  270. tomwer/synctools/test/test_foldertransfer.py +6 -6
  271. tomwer/synctools/utils/scanstages.py +6 -6
  272. tomwer/tests/conftest.py +34 -0
  273. tomwer/tests/datasets.py +13 -0
  274. tomwer/tests/test_scripts.py +91 -41
  275. tomwer/tests/utils.py +5 -0
  276. tomwer/third_part/WaitingOverlay.py +110 -0
  277. tomwer/third_part/__init__.py +0 -0
  278. tomwer/version.py +2 -2
  279. tomwer-1.3.12-py3.11-nspkg.pth +1 -0
  280. {tomwer-1.2.1.dist-info → tomwer-1.3.12.dist-info}/METADATA +73 -58
  281. {tomwer-1.2.1.dist-info → tomwer-1.3.12.dist-info}/RECORD +287 -286
  282. {tomwer-1.2.1.dist-info → tomwer-1.3.12.dist-info}/WHEEL +1 -1
  283. orangecontrib/tomwer/widgets/reconstruction/TofuOW.py +0 -197
  284. orangecontrib/tomwer/widgets/reconstruction/icons/XY_lamino.svg +0 -168
  285. orangecontrib/tomwer/widgets/reconstruction/icons/XZ_lamino.svg +0 -275
  286. orangecontrib/tomwer/widgets/reconstruction/icons/YZ_lamino.svg +0 -182
  287. tomwer/app/lamino.py +0 -143
  288. tomwer/core/process/reconstruction/lamino/__init__.py +0 -1
  289. tomwer/core/process/reconstruction/lamino/tofu.py +0 -1000
  290. tomwer/core/process/test/test_lamino.py +0 -76
  291. tomwer/core/test/test_lamino.py +0 -92
  292. tomwer/gui/reconstruction/lamino/__init__.py +0 -31
  293. tomwer/gui/reconstruction/lamino/tofu/TofuOptionLoader.py +0 -107
  294. tomwer/gui/reconstruction/lamino/tofu/__init__.py +0 -1
  295. tomwer/gui/reconstruction/lamino/tofu/misc.py +0 -148
  296. tomwer/gui/reconstruction/lamino/tofu/projections.py +0 -896
  297. tomwer/gui/reconstruction/lamino/tofu/settings.py +0 -75
  298. tomwer/gui/reconstruction/lamino/tofu/tofu.py +0 -432
  299. tomwer/gui/reconstruction/lamino/tofu/tofuexpert.py +0 -567
  300. tomwer/gui/reconstruction/lamino/tofu/tofuoutput.py +0 -760
  301. tomwer/gui/reconstruction/test/test_lamino.py +0 -189
  302. tomwer/resources/gui/icons/esrf_1.svg +0 -307
  303. tomwer/resources/gui/icons/lamino_parameters.svg +0 -70
  304. tomwer/resources/gui/icons/triangle.svg +0 -80
  305. tomwer/resources/gui/illustrations/lamino_angle.png +0 -0
  306. tomwer/resources/gui/illustrations/lamino_angle.svg +0 -509
  307. tomwer/resources/gui/illustrations/lamino_beta_angle.png +0 -0
  308. tomwer/resources/gui/illustrations/lamino_beta_angle.svg +0 -97
  309. tomwer/resources/gui/illustrations/lamino_theta_angle.png +0 -0
  310. tomwer/resources/gui/illustrations/lamino_theta_angle.svg +0 -368
  311. tomwer/resources/gui/illustrations/manual_slice.png +0 -0
  312. tomwer/resources/gui/illustrations/manual_slice.svg +0 -221
  313. tomwer/resources/gui/illustrations/psi_angle.png +0 -0
  314. tomwer/resources/gui/illustrations/psi_angle.svg +0 -479
  315. tomwer/resources/gui/illustrations/rotation_center.png +0 -0
  316. tomwer/resources/gui/illustrations/rotation_center.svg +0 -276
  317. tomwer/resources/gui/illustrations/slice_stack.png +0 -0
  318. tomwer/resources/gui/illustrations/slice_stack.svg +0 -266
  319. tomwer/resources/gui/illustrations/xy_slice.png +0 -0
  320. tomwer/resources/gui/illustrations/xy_slice.svg +0 -269
  321. tomwer/resources/gui/illustrations/xz_slice.png +0 -0
  322. tomwer/resources/gui/illustrations/xz_slice.svg +0 -270
  323. tomwer/resources/gui/illustrations/yz_slice.png +0 -0
  324. tomwer/resources/gui/illustrations/yz_slice.svg +0 -270
  325. tomwer/synctools/stacks/reconstruction/lamino.py +0 -233
  326. tomwer/synctools/test/test_scanstages.py +0 -162
  327. tomwer/tests/utils/__init__.py +0 -247
  328. tomwer/tests/utils/utilstest.py +0 -220
  329. tomwer-1.2.1-py3.11-nspkg.pth +0 -1
  330. /tomwer/core/process/control/{email.py → emailnotifier.py} +0 -0
  331. {tomwer-1.2.1.dist-info → tomwer-1.3.12.dist-info}/LICENSE +0 -0
  332. {tomwer-1.2.1.dist-info → tomwer-1.3.12.dist-info}/entry_points.txt +0 -0
  333. {tomwer-1.2.1.dist-info → tomwer-1.3.12.dist-info}/namespace_packages.txt +0 -0
  334. {tomwer-1.2.1.dist-info → tomwer-1.3.12.dist-info}/top_level.txt +0 -0
@@ -9,10 +9,10 @@ from nxtomomill.nexus.nxtomo import NXtomo
9
9
  from orangecanvas.scheme.readwrite import literal_dumps
10
10
  from silx.gui import qt
11
11
  from silx.gui.utils.testutils import SignalListener, TestCaseQt
12
- from tomoscan.esrf.scan.hdf5scan import ImageKey
12
+ from nxtomo.nxobject.nxdetector import ImageKey
13
13
 
14
14
  from orangecontrib.tomwer.widgets.edit.NXtomoEditorOW import NXtomoEditorOW
15
- from tomwer.core.scan.hdf5scan import HDF5TomoScan
15
+ from tomwer.core.scan.nxtomoscan import NXtomoScan
16
16
  from tomwer.tests.utils import skip_gui_test
17
17
 
18
18
 
@@ -100,7 +100,7 @@ class TestNXtomoEditorOW(TestCaseQt):
100
100
  data_path=entry,
101
101
  )
102
102
  # 2.0 set scan to the nxtomo-editor
103
- scan = HDF5TomoScan(file_path, entry)
103
+ scan = NXtomoScan(file_path, entry)
104
104
  self._window._setScan(scan=scan)
105
105
  self.qapp.processEvents()
106
106
  # 3.0 check results are as expected
@@ -0,0 +1,115 @@
1
+ import weakref
2
+ from typing import Optional
3
+ from silx.gui import qt
4
+ from ewoksorange.bindings.owwidgets import OWEwoksWidgetOneThreadPerRun
5
+ from orangewidget import gui
6
+ from orangewidget.settings import Setting
7
+
8
+ import tomwer.core.process.icat.publish
9
+ from tomwer.core.scan.scanbase import TomwerScanBase
10
+ from tomwer.gui.icat.publish import PublishProcessedDataWidget
11
+
12
+ from processview.core.superviseprocess import SuperviseProcess
13
+
14
+
15
+ class PublishProcessedDataOW(
16
+ OWEwoksWidgetOneThreadPerRun,
17
+ SuperviseProcess,
18
+ ewokstaskclass=tomwer.core.process.icat.publish.PublishReconstructedVolumeFromScanTask,
19
+ ):
20
+ """
21
+ This widget can receive 'data' (scan) and but some screenshot to be pushed on GALLERY.
22
+ """
23
+
24
+ name = "Publish processed data to icat"
25
+ id = "orangecontrib.widgets.tomwer.icat.PublishProcessedDataOW.PublishProcessedDataOW"
26
+ description = "Publish processed data to icat. \n For now we expect processed data to be reconstructed volume"
27
+ icon = "icons/publish.svg"
28
+ priority = 64
29
+ keywords = [
30
+ "tomography",
31
+ "tomwer",
32
+ "tomo_obj",
33
+ "processed data",
34
+ "PROCESSED_DATA",
35
+ "publish",
36
+ "icat",
37
+ "icatplus",
38
+ "pyicatplus",
39
+ "pyicat-plus",
40
+ ]
41
+
42
+ want_main_area = True
43
+ want_control_area = False
44
+ resizing_enabled = True
45
+
46
+ _ewoks_default_inputs = Setting({})
47
+
48
+ _ewoks_inputs_to_hide_from_orange = (
49
+ "__process__",
50
+ "beamline",
51
+ "proposal",
52
+ "dataset",
53
+ "dry_run",
54
+ "path",
55
+ )
56
+
57
+ def __init__(self, parent=None):
58
+ super().__init__(parent)
59
+ SuperviseProcess.__init__(self)
60
+ self._widget = PublishProcessedDataWidget(parent=self)
61
+ layout = gui.vBox(self.mainArea, self.name).layout()
62
+ layout.addWidget(self._widget)
63
+ self._scan = None
64
+
65
+ # load settings
66
+ self._widget.setConfiguration(self._ewoks_default_inputs)
67
+
68
+ # connect signal / slot
69
+ self._widget.sigConfigChanged.connect(self._updateSettings)
70
+
71
+ def _updateSettings(self):
72
+ self._ewoks_default_inputs = self._widget.getConfiguration()
73
+
74
+ def setScan(self, scan: TomwerScanBase):
75
+ self._scan = weakref.ref(scan)
76
+ self._widget.setScan(scan=scan)
77
+
78
+ def getScan(self) -> Optional[TomwerScanBase]:
79
+ if self._scan is None:
80
+ return None
81
+ else:
82
+ return self._scan()
83
+
84
+ def handleNewSignals(self) -> None:
85
+ """Invoked by the workflow signal propagation manager after all
86
+ signals handlers have been called.
87
+ """
88
+ # update the widget when receive the scan (proposal, dataset...)
89
+ scan = self.get_task_input_value("data", None)
90
+ if scan is None:
91
+ return
92
+ elif scan != self.getScan():
93
+ self._widget.setScan(scan)
94
+ super().handleNewSignals()
95
+ else:
96
+ super().handleNewSignals()
97
+
98
+ def get_task_inputs(self):
99
+ task_inputs = super().get_task_inputs()
100
+ configuration = self._widget.getConfiguration()
101
+
102
+ task_inputs["beamline"] = configuration["beamline"]
103
+ task_inputs["proposal"] = configuration["proposal"]
104
+ task_inputs["dataset"] = configuration["dataset"]
105
+ task_inputs["__process__"] = weakref.ref(self)
106
+
107
+ print("get task inputs")
108
+ from pprint import pprint
109
+
110
+ pprint(task_inputs)
111
+
112
+ return task_inputs
113
+
114
+ def sizeHint(self):
115
+ return qt.QSize(500, 200)
@@ -0,0 +1,98 @@
1
+ # from orangewidget import gui
2
+ # from orangewidget.settings import Setting
3
+
4
+ # from silx.gui import qt
5
+ # import weakref
6
+ # from ewoksorange.bindings.owwidgets import OWEwoksWidgetOneThreadPerRun
7
+
8
+ # import tomwer.core.process.icat.createscreenshots
9
+ # from tomwer.gui.icat.createscreenshots import CreateRawDataScreenshotsWidget
10
+ # from processview.core.superviseprocess import SuperviseProcess
11
+
12
+
13
+ # class RawDataScreenshotCreatorOW(
14
+ # OWEwoksWidgetOneThreadPerRun,
15
+ # SuperviseProcess,
16
+ # ewokstaskclass=tomwer.core.process.icat.createscreenshots.CreateRawDataScreenshotsTask,
17
+ # ):
18
+ # """
19
+ # This widget can receive 'data' (scan) and but some screenshot to be pushed on GALLERY.
20
+ # """
21
+
22
+ # name = "Create raw data screenshots"
23
+ # id = "orangecontrib.widgets.tomwer.icat.RawDataScreenshotCreatorOW.RawDataScreenshotCreatorOW"
24
+ # description = "Create screenshot of the raw data from user wishes. \n"
25
+ # icon = "icons/raw_screenshots.svg"
26
+ # priority = 63
27
+ # keywords = [
28
+ # "tomography",
29
+ # "tomwer",
30
+ # "tomo_obj",
31
+ # "screenshot",
32
+ # "raw data",
33
+ # ]
34
+
35
+ # want_main_area = True
36
+ # want_control_area = False
37
+ # resizing_enabled = True
38
+
39
+ # _ewoks_default_inputs = Setting(
40
+ # {
41
+ # "raw_projections_required": True,
42
+ # "raw_projections_each": 90,
43
+ # "raw_darks_required": True,
44
+ # "raw_flats_required": True,
45
+ # }
46
+ # )
47
+
48
+ # _ewoks_inputs_to_hide_from_orange = (
49
+ # "__process__",
50
+ # "raw_projections_required",
51
+ # "raw_projections_each",
52
+ # "raw_darks_required",
53
+ # "raw_flats_required",
54
+ # )
55
+
56
+ # def __init__(self, *args, **kwargs):
57
+ # super().__init__(*args, **kwargs)
58
+ # SuperviseProcess.__init__(self)
59
+ # self._widget = CreateRawDataScreenshotsWidget(parent=self)
60
+
61
+ # self._box = gui.vBox(self.mainArea, self.name)
62
+ # layout = self._box.layout()
63
+ # layout.addWidget(self._widget)
64
+
65
+ # # load settings
66
+ # self._widget.setConfiguration(self._ewoks_default_inputs)
67
+
68
+ # # connect signal / slot
69
+ # self._widget.sigConfigChanged.connect(self._updateSettings)
70
+
71
+ # def _updateSettings(self):
72
+ # self._ewoks_default_inputs = self._widget.getConfiguration()
73
+
74
+ # def handleNewSignals(self) -> None:
75
+ # """Invoked by the workflow signal propagation manager after all
76
+ # signals handlers have been called.
77
+ # """
78
+ # # for now we want to avoid propagation any processing.
79
+ # # task will be executed only when the user validates the dialog
80
+ # if self.get_task_input_value("data", None) is None:
81
+ # return
82
+ # else:
83
+ # super().handleNewSignals()
84
+
85
+ # def get_task_inputs(self):
86
+ # task_inputs = super().get_task_inputs()
87
+ # configuration = self._widget.getConfiguration()
88
+ # task_inputs["raw_projections_required"] = configuration[
89
+ # "raw_projections_required"
90
+ # ]
91
+ # task_inputs["raw_projections_each"] = configuration["raw_projections_each"]
92
+ # task_inputs["raw_darks_required"] = configuration["raw_darks_required"]
93
+ # task_inputs["raw_flats_required"] = configuration["raw_flats_required"]
94
+ # task_inputs["__process__"] = weakref.ref(self)
95
+ # return task_inputs
96
+
97
+ # def sizeHint(self):
98
+ # return qt.QSize(500, 200)
@@ -0,0 +1,129 @@
1
+ # from typing import Optional
2
+ # from orangewidget import gui
3
+ # from orangewidget.settings import Setting
4
+
5
+ # from silx.gui import qt
6
+ # import weakref
7
+ # from ewoksorange.bindings.owwidgets import OWEwoksWidgetOneThreadPerRun
8
+
9
+ # from tomwer.core.scan.scanbase import TomwerScanBase
10
+ # import tomwer.core.process.icat.gallery
11
+ # from tomwer.gui.icat.gallery import GalleryWidget, _GalleryOutputDir
12
+ # from processview.core.superviseprocess import SuperviseProcess
13
+
14
+
15
+ # class SaveToGalleryAndPublishOW(
16
+ # OWEwoksWidgetOneThreadPerRun,
17
+ # SuperviseProcess,
18
+ # ewokstaskclass=tomwer.core.process.icat.gallery.SaveToGalleryAndPublishTask,
19
+ # ):
20
+ # """
21
+ # This widget can receive 'screenshots' signal (expected as a tuple (source, screenshots_dict)
22
+ # source is the tomo obj associated (so we can automate deduction of the output dir)
23
+ # screenshots_dict is a dict of str: DataUrl
24
+ # """
25
+
26
+ # name = "Save to gallery and publish"
27
+ # id = "orangecontrib.widgets.tomwer.icat.MoveToGalleryOW.SaveToGalleryAndPublishOW"
28
+ # description = "This widget will save screenshot of reconstruction to a specific location (acquisition gallery as the default end point) \n"
29
+ # icon = "icons/add_gallery.svg"
30
+ # priority = 63
31
+ # keywords = [
32
+ # "tomography",
33
+ # "tomwer",
34
+ # "tomo_obj",
35
+ # "screenshot",
36
+ # "acquisition",
37
+ # "gallery",
38
+ # ]
39
+
40
+ # want_main_area = True
41
+ # want_control_area = False
42
+ # resizing_enabled = True
43
+
44
+ # _ewoks_default_inputs = Setting(
45
+ # {
46
+ # "format": "png",
47
+ # "output_location_mode": "default",
48
+ # "custom_output": None,
49
+ # "screenshots": None,
50
+ # "overwrite": False,
51
+ # }
52
+ # )
53
+
54
+ # _ewoks_inputs_to_hide_from_orange = (
55
+ # "proposal",
56
+ # "dataset",
57
+ # "beamline",
58
+ # "dry_run",
59
+ # "__process__",
60
+ # )
61
+
62
+ # def __init__(self, *args, **kwargs):
63
+ # super().__init__(*args, **kwargs)
64
+ # SuperviseProcess.__init__(self)
65
+ # self._scan = None
66
+ # self._widget = GalleryWidget(parent=self)
67
+
68
+ # self._box = gui.vBox(self.mainArea, self.name)
69
+ # layout = self._box.layout()
70
+ # layout.addWidget(self._widget)
71
+
72
+ # # load settings
73
+ # self._widget.setConfiguration(self._ewoks_default_inputs)
74
+
75
+ # # connect signal / slot
76
+ # self._widget.sigConfigChanged.connect(self._updateSettings)
77
+
78
+ # def _updateSettings(self):
79
+ # self._ewoks_default_inputs = self._widget.getConfiguration()
80
+
81
+ # def setScan(self, scan: TomwerScanBase):
82
+ # self._scan = weakref.ref(scan)
83
+ # self._widget._publishConfig.setScan(scan=scan)
84
+
85
+ # def getScan(self) -> Optional[TomwerScanBase]:
86
+ # if self._scan is None:
87
+ # return None
88
+ # else:
89
+ # return self._scan()
90
+
91
+ # def handleNewSignals(self) -> None:
92
+ # """Invoked by the workflow signal propagation manager after all
93
+ # signals handlers have been called.
94
+ # """
95
+ # # update the widget when receive the scan (proposal, dataset...)
96
+ # screenshots = self.get_task_input_value("screenshots", None)
97
+ # if screenshots is None:
98
+ # return
99
+ # else:
100
+ # scan = screenshots.scan
101
+ # if scan != self.getScan():
102
+ # self.setScan(scan)
103
+
104
+ # if self.get_task_input_value("screenshots", None) is None:
105
+ # return
106
+ # else:
107
+ # super().handleNewSignals()
108
+
109
+ # def get_task_inputs(self):
110
+ # task_inputs = super().get_task_inputs()
111
+ # configuration = self._widget.getConfiguration()
112
+
113
+ # use_custom_output_dir = _GalleryOutputDir.OutputDirMode.from_value(
114
+ # configuration.get("output_location_mode", "default")
115
+ # )
116
+ # # if user requested to overwrite the output directory
117
+ # if use_custom_output_dir is _GalleryOutputDir.OutputDirMode.PROPOSAL_GALLERY:
118
+ # task_inputs["screenshots"]["output_dir"] = configuration["custom_output"]
119
+
120
+ # task_inputs["overwrite"] = configuration["overwrite"]
121
+ # task_inputs["format"] = configuration["output_format"]
122
+ # task_inputs["beamline"] = configuration["beamline"]
123
+ # task_inputs["dataset"] = configuration["dataset"]
124
+ # task_inputs["proposal"] = configuration["proposal"]
125
+ # task_inputs["__process__"] = weakref.ref(self)
126
+ # return task_inputs
127
+
128
+ # def sizeHint(self):
129
+ # return qt.QSize(500, 200)
@@ -0,0 +1,13 @@
1
+ NAME = "data portal"
2
+
3
+ ID = "orangecontrib.tomwer.widgets.icat"
4
+
5
+ DESCRIPTION = "widgets for icat"
6
+
7
+ LONG_DESCRIPTION = "Contains widget to publish data to the esrf data portal"
8
+
9
+ ICON = "../../widgets/icons/tomwer_data_portal.png"
10
+
11
+ BACKGROUND = "#C0CCFF"
12
+
13
+ PRIORITY = 13
@@ -0,0 +1,82 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
+
4
+ <svg
5
+ width="48"
6
+ height="48"
7
+ viewBox="0 0 12.7 12.7"
8
+ version="1.1"
9
+ id="svg5"
10
+ xml:space="preserve"
11
+ inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
12
+ sodipodi:docname="add_gallery.svg"
13
+ inkscape:export-filename="add_gallery.png"
14
+ inkscape:export-xdpi="96"
15
+ inkscape:export-ydpi="96"
16
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
17
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
18
+ xmlns="http://www.w3.org/2000/svg"
19
+ xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
20
+ id="namedview7"
21
+ pagecolor="#ffffff"
22
+ bordercolor="#000000"
23
+ borderopacity="0.25"
24
+ inkscape:showpageshadow="2"
25
+ inkscape:pageopacity="0.0"
26
+ inkscape:pagecheckerboard="0"
27
+ inkscape:deskcolor="#d1d1d1"
28
+ inkscape:document-units="mm"
29
+ showgrid="false"
30
+ inkscape:zoom="3.3638608"
31
+ inkscape:cx="39.686541"
32
+ inkscape:cy="-16.052983"
33
+ inkscape:window-width="1920"
34
+ inkscape:window-height="1163"
35
+ inkscape:window-x="1920"
36
+ inkscape:window-y="0"
37
+ inkscape:window-maximized="1"
38
+ inkscape:current-layer="layer1" /><defs
39
+ id="defs2" /><g
40
+ inkscape:label="Layer 1"
41
+ inkscape:groupmode="layer"
42
+ id="layer1"><g
43
+ id="g4751"><g
44
+ style="fill:#000000"
45
+ id="g4283"
46
+ transform="matrix(0.41325003,0,0,0.41325003,-101.88959,-99.064801)"><g
47
+ id="g4271"
48
+ transform="translate(-0.06729249)">
49
+ <g
50
+ id="g4269"
51
+ transform="translate(0.03643071,-2.3462263)">
52
+ <g
53
+ id="g4267"
54
+ transform="translate(-0.60682232,-1.2808254)">
55
+
56
+ <g
57
+ id="g4755"
58
+ transform="matrix(1.5285023,0,0,1.4160667,-145.25282,-110.18557)"><path
59
+ d="m 275.7632,253.56366 h -12.04292 c -0.27638,0 -0.50277,0.24169 -0.50277,0.54381 v 0.54382 h -0.50277 c -0.27638,0 -0.50277,0.2417 -0.50277,0.54382 v 0.54381 h -0.50277 c -0.27637,0 -0.50276,0.2417 -0.50276,0.54382 v 10.58374 c 0,0.29894 0.22345,0.54382 0.50276,0.54382 h 12.04293 c 0.27637,0 0.50277,-0.2417 0.50277,-0.54382 v -0.54381 h 0.50276 c 0.27638,0 0.50277,-0.2417 0.50277,-0.54382 v -0.54382 h 0.50277 c 0.27638,0 0.50277,-0.24169 0.50277,-0.54381 v -10.58375 c 0,-0.30212 -0.22345,-0.54381 -0.50277,-0.54381 z m -2.00813,8.77738 -1.31426,-1.62827 c -0.1,-0.12403 -0.27637,-0.12403 -0.37928,0 l -1.58769,1.96537 -4.32792,-4.15971 c -0.0941,-0.0922 -0.23816,-0.0922 -0.33224,0 l -4.0986,3.94028 v -5.90883 c 0,-0.14947 0.11173,-0.27032 0.24992,-0.27032 h 11.54015 c 0.13819,0 0.24992,0.12085 0.24992,0.27032 z m 0.75562,3.43463 h -0.24991 v -9.49929 c 0,-0.29894 -0.22346,-0.54382 -0.50277,-0.54382 h -11.04033 v -0.27032 c 0,-0.14947 0.11173,-0.27031 0.24992,-0.27031 h 11.54015 c 0.13819,0 0.24991,0.12084 0.24991,0.27031 l 0.003,10.04311 c 0,0.14947 -0.11173,0.27032 -0.24992,0.27032 z m 1.0026,-1.08763 h -0.24992 v -9.49611 c 0,-0.29894 -0.22345,-0.54382 -0.50276,-0.54382 h -11.04033 v -0.27032 c 0,-0.14947 0.11172,-0.27032 0.24991,-0.27032 h 11.54016 c 0.13818,0 0.24991,0.12085 0.24991,0.27032 v 10.03993 h 0.003 c 0,0.14947 -0.11173,0.27032 -0.24992,0.27032 z"
60
+ id="path4263"
61
+ style="stroke-width:0.0305784" /><path
62
+ d="m 270.9828,256.84862 c -0.89752,0 -1.62795,0.65441 -1.62795,1.45853 0,0.80412 0.73043,1.45853 1.62795,1.45853 0.89752,0 1.62795,-0.65441 1.62795,-1.45853 0,-0.80412 -0.73043,-1.45853 -1.62795,-1.45853 z"
63
+ id="path4265"
64
+ style="stroke-width:0.045188" /></g>
65
+ </g>
66
+ </g>
67
+ </g></g></g><g
68
+ id="path247"><path
69
+ style="color:#000000;fill:#ff0024;stroke-width:0.358462;stroke-linecap:round;stroke-miterlimit:3.5;-inkscape-stroke:none"
70
+ d="M 4.643707,8.3859317 C 2.1750238,7.950608 0.67964637,6.4708257 1.2349597,2.7904385 1.2880879,5.7018088 2.768268,7.2247632 4.643707,8.3859317 Z"
71
+ id="path313" /><path
72
+ style="color:#000000;fill:#ff0024;stroke-linecap:round;stroke-miterlimit:3.5;-inkscape-stroke:none"
73
+ d="m 1.0585937,2.7636719 c -0.0017,0.011289 0.00167,0.018046 0,0.029297 h -0.00195 c 5.41e-5,0.00296 0.0019,0.00485 0.00195,0.00781 C 0.78686884,4.6456784 1.015877,5.9795537 1.6582031,6.90625 2.3054863,7.8400979 3.350832,8.3398817 4.6132812,8.5625 l 0.125,-0.328125 C 2.886594,7.0879123 1.4661034,5.6388982 1.4140625,2.7871094 Z M 1.3691406,4.8046875 C 1.8214201,6.2384674 2.8100791,7.1583758 3.90625,7.9589844 3.0927927,7.7018012 2.3925042,7.3370258 1.953125,6.703125 1.6233935,6.227415 1.445312,5.5737767 1.3691406,4.8046875 Z"
74
+ id="path315" /><g
75
+ id="g303"><g
76
+ id="path305"><path
77
+ style="color:#000000;fill:#ff0024;fill-rule:evenodd;stroke-width:0.358462;-inkscape-stroke:none"
78
+ d="M 5.5229814,8.9303299 3.7330828,8.8761405 4.6765807,7.3522681 Z"
79
+ id="path309" /><path
80
+ style="color:#000000;fill:#ff0024;fill-rule:evenodd;-inkscape-stroke:none"
81
+ d="M 4.6875,6.9941406 3.4179688,9.0449219 5.828125,9.1191406 5.6816406,8.8457031 Z M 4.6660156,7.7089844 5.21875,8.7421875 4.0488281,8.7070313 Z"
82
+ id="path311" /></g></g></g></g></svg>
@@ -0,0 +1,95 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
+
4
+ <svg
5
+ width="48"
6
+ height="48"
7
+ viewBox="0 0 12.7 12.7"
8
+ version="1.1"
9
+ id="svg5"
10
+ inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
11
+ sodipodi:docname="publish_processed_data.svg"
12
+ inkscape:export-filename="publish_processed_data.png"
13
+ inkscape:export-xdpi="96"
14
+ inkscape:export-ydpi="96"
15
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
16
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
17
+ xmlns:xlink="http://www.w3.org/1999/xlink"
18
+ xmlns="http://www.w3.org/2000/svg"
19
+ xmlns:svg="http://www.w3.org/2000/svg">
20
+ <sodipodi:namedview
21
+ id="namedview7"
22
+ pagecolor="#ffffff"
23
+ bordercolor="#000000"
24
+ borderopacity="0.25"
25
+ inkscape:showpageshadow="2"
26
+ inkscape:pageopacity="0.0"
27
+ inkscape:pagecheckerboard="0"
28
+ inkscape:deskcolor="#d1d1d1"
29
+ inkscape:document-units="mm"
30
+ showgrid="false"
31
+ inkscape:zoom="6.7277216"
32
+ inkscape:cx="9.5871981"
33
+ inkscape:cy="20.809422"
34
+ inkscape:window-width="1920"
35
+ inkscape:window-height="1131"
36
+ inkscape:window-x="0"
37
+ inkscape:window-y="32"
38
+ inkscape:window-maximized="1"
39
+ inkscape:current-layer="layer1" />
40
+ <defs
41
+ id="defs2" />
42
+ <g
43
+ inkscape:label="Layer 1"
44
+ inkscape:groupmode="layer"
45
+ id="layer1">
46
+ <g
47
+ id="path583"
48
+ style="opacity:0.907409">
49
+ <path
50
+ style="color:#000000;fill:#666666;stroke-width:0.9;stroke-miterlimit:3.5;-inkscape-stroke:none"
51
+ d="M 6.052739,12.319691 6.0810425,6.1877951"
52
+ id="path257" />
53
+ <path
54
+ style="color:#000000;fill:#000000;stroke-miterlimit:3.5;-inkscape-stroke:none"
55
+ d="m 5.6308594,6.1855469 -0.027344,6.1328121 0.8984375,0.0039 0.029297,-6.1328129 z"
56
+ id="path259" />
57
+ <g
58
+ id="g249">
59
+ <path
60
+ style="color:#000000;fill:#000000;stroke-linecap:round;-inkscape-stroke:none"
61
+ d="M 6.0859375,5.3261719 3.0527344,8.3300781 a 0.44999999,0.44999999 0 0 0 -0.00195,0.6367188 0.44999999,0.44999999 0 0 0 0.6347656,0.00391 L 6.078125,6.5996094 8.4492188,8.9921875 a 0.44999999,0.44999999 0 0 0 0.6367187,0.00195 0.44999999,0.44999999 0 0 0 0.00391,-0.6347656 z"
62
+ id="path251" />
63
+ </g>
64
+ </g>
65
+ <g
66
+ inkscape:label="Layer 1"
67
+ id="layer1-36"
68
+ transform="matrix(0.11758372,0,0,0.14023511,2.0038417,-0.69808084)">
69
+ <g
70
+ inkscape:export-ydpi="200"
71
+ inkscape:export-xdpi="200"
72
+ inkscape:export-filename="/nobackup/linazimov/payno/dev/esrf/ID06/id06workflow/resources/gui/icons/parameters.png"
73
+ transform="matrix(0.91430392,0,0,0.88285849,0.42325717,3.0002197)"
74
+ id="surface1">
75
+ <g
76
+ transform="matrix(2.7869502,0,0,2.6849752,-125.41844,-861.31264)"
77
+ id="layer1-3"
78
+ inkscape:label="Layer 1">
79
+ <g
80
+ transform="matrix(5.2986592,0,0,3.9918944,42.609171,-787.71546)"
81
+ id="g872">
82
+ <image
83
+ width="4.6438637"
84
+ height="5.2361312"
85
+ preserveAspectRatio="none"
86
+ xlink:href="data:image/png;base64,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 RU5ErkJggg== "
87
+ id="image23483"
88
+ x="0.71037143"
89
+ y="278.56134" />
90
+ </g>
91
+ </g>
92
+ </g>
93
+ </g>
94
+ </g>
95
+ </svg>