tomwer 1.3.0.dev2__py3-none-any.whl → 1.3.0rc10__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 (156) hide show
  1. orangecontrib/tomwer/widgets/__init__.py +11 -12
  2. orangecontrib/tomwer/widgets/control/DataListenerOW.py +6 -6
  3. orangecontrib/tomwer/widgets/control/DataValidatorOW.py +6 -6
  4. orangecontrib/tomwer/widgets/control/NXTomomillMixIn.py +3 -3
  5. orangecontrib/tomwer/widgets/control/NXTomomillOW.py +10 -8
  6. orangecontrib/tomwer/widgets/control/SingleTomoObjOW.py +6 -6
  7. orangecontrib/tomwer/widgets/debugtools/DatasetGeneratorOW.py +1 -1
  8. orangecontrib/tomwer/widgets/icat/RawDataScreenshotCreatorOW.py +98 -98
  9. orangecontrib/tomwer/widgets/icat/SaveToGalleryAndPublishOW.py +129 -129
  10. orangecontrib/tomwer/widgets/reconstruction/AxisOW.py +13 -12
  11. orangecontrib/tomwer/widgets/reconstruction/SAAxisOW.py +11 -9
  12. orangecontrib/tomwer/widgets/reconstruction/SADeltaBetaOW.py +11 -9
  13. orangecontrib/tomwer/widgets/reconstruction/SinoNormOW.py +12 -15
  14. orangecontrib/tomwer/widgets/visualization/DataViewerOW.py +9 -9
  15. orangecontrib/tomwer/widgets/visualization/DiffViewerOW.py +1 -1
  16. orangecontrib/tomwer/widgets/visualization/SinogramViewerOW.py +0 -1
  17. tomwer/__main__.py +0 -10
  18. tomwer/app/canvas_launcher/config.py +3 -3
  19. tomwer/app/canvas_launcher/environ.py +1 -0
  20. tomwer/app/intensitynormalization.py +12 -11
  21. tomwer/app/nabuapp.py +0 -11
  22. tomwer/app/zstitching.py +11 -1
  23. tomwer/core/process/control/datalistener/datalistener.py +15 -10
  24. tomwer/core/process/control/nxtomomill.py +1 -1
  25. tomwer/core/process/control/scantransfer.py +8 -32
  26. tomwer/core/process/edit/darkflatpatch.py +8 -9
  27. tomwer/core/process/edit/imagekeyeditor.py +20 -22
  28. tomwer/core/process/icat/screenshots.py +1 -0
  29. tomwer/core/process/reconstruction/axis/axis.py +263 -59
  30. tomwer/core/process/reconstruction/axis/mode.py +161 -50
  31. tomwer/core/process/reconstruction/axis/params.py +23 -20
  32. tomwer/core/process/reconstruction/darkref/darkrefs.py +12 -13
  33. tomwer/core/process/reconstruction/nabu/castvolume.py +3 -3
  34. tomwer/core/process/reconstruction/nabu/nabucommon.py +43 -19
  35. tomwer/core/process/reconstruction/nabu/nabuscores.py +34 -7
  36. tomwer/core/process/reconstruction/nabu/nabuslices.py +81 -26
  37. tomwer/core/process/reconstruction/nabu/nabuvolume.py +31 -26
  38. tomwer/core/process/reconstruction/nabu/plane.py +9 -0
  39. tomwer/core/process/reconstruction/nabu/utils.py +32 -9
  40. tomwer/core/process/reconstruction/saaxis/saaxis.py +4 -1
  41. tomwer/core/process/reconstruction/sadeltabeta/sadeltabeta.py +9 -1
  42. tomwer/core/process/reconstruction/scores/params.py +3 -3
  43. tomwer/core/process/reconstruction/test/test_darkref_copy.py +4 -4
  44. tomwer/core/process/stitching/nabustitcher.py +11 -10
  45. tomwer/core/process/task.py +33 -27
  46. tomwer/core/process/test/test_axis.py +7 -6
  47. tomwer/core/process/test/test_data_transfer.py +3 -3
  48. tomwer/core/process/test/test_nabu.py +10 -2
  49. tomwer/core/process/test/test_normalization.py +2 -2
  50. tomwer/core/scan/blissscan.py +3 -3
  51. tomwer/core/scan/edfscan.py +9 -9
  52. tomwer/core/scan/nxtomoscan.py +11 -11
  53. tomwer/core/scan/scanbase.py +31 -24
  54. tomwer/core/scan/test/test_future_scan.py +1 -1
  55. tomwer/core/scan/test/test_h5.py +4 -4
  56. tomwer/core/scan/test/test_process_registration.py +2 -2
  57. tomwer/core/scan/test/test_scan.py +1 -75
  58. tomwer/core/settings.py +3 -3
  59. tomwer/core/test/test_utils.py +2 -2
  60. tomwer/core/volume/edfvolume.py +6 -6
  61. tomwer/core/volume/hdf5volume.py +6 -6
  62. tomwer/core/volume/jp2kvolume.py +6 -6
  63. tomwer/core/volume/rawvolume.py +6 -6
  64. tomwer/core/volume/tiffvolume.py +12 -12
  65. tomwer/gui/cluster/slurm.py +14 -9
  66. tomwer/gui/cluster/supervisor.py +12 -0
  67. tomwer/gui/cluster/test/test_cluster.py +1 -2
  68. tomwer/gui/cluster/test/test_supervisor.py +1 -1
  69. tomwer/gui/control/datalist.py +5 -0
  70. tomwer/gui/control/datawatcher/controlwidget.py +2 -4
  71. tomwer/gui/control/reducedarkflatselector.py +8 -8
  72. tomwer/gui/control/test/test_single_tomo_obj.py +1 -1
  73. tomwer/gui/edit/dkrfpatch.py +4 -4
  74. tomwer/gui/edit/nxtomowarmer.py +2 -2
  75. tomwer/gui/edit/test/test_dkrf_patch.py +6 -6
  76. tomwer/gui/imagefromfile.py +2 -2
  77. tomwer/gui/qfolderdialog.py +5 -0
  78. tomwer/gui/reconstruction/axis/CompareImages.py +94 -168
  79. tomwer/gui/reconstruction/axis/radioaxis.py +58 -182
  80. tomwer/gui/reconstruction/darkref/darkrefwidget.py +2 -1
  81. tomwer/gui/reconstruction/nabu/castvolume.py +8 -1
  82. tomwer/gui/reconstruction/nabu/nabuconfig/reconstruction.py +54 -21
  83. tomwer/gui/reconstruction/normalization/intensity.py +3 -25
  84. tomwer/gui/reconstruction/saaxis/corrangeselector.py +1 -1
  85. tomwer/gui/reconstruction/saaxis/saaxis.py +1 -11
  86. tomwer/gui/reconstruction/sadeltabeta/saadeltabeta.py +0 -10
  87. tomwer/gui/reconstruction/scores/scoreplot.py +1 -6
  88. tomwer/gui/reconstruction/test/test_axis.py +18 -4
  89. tomwer/gui/reconstruction/test/test_nabu.py +3 -0
  90. tomwer/gui/stitching/stitching.py +2 -2
  91. tomwer/gui/stitching/stitching_preview.py +7 -53
  92. tomwer/gui/stitching/stitching_raw.py +3 -3
  93. tomwer/gui/utils/inputwidget.py +12 -2
  94. tomwer/gui/utils/lineselector/lineselector.py +1 -1
  95. tomwer/gui/visualization/dataviewer.py +47 -17
  96. tomwer/gui/visualization/sinogramviewer.py +19 -26
  97. tomwer/gui/visualization/test/test_volumeviewer.py +64 -66
  98. tomwer/gui/visualization/volumeviewer.py +105 -105
  99. tomwer/io/utils/h5pyutils.py +7 -3
  100. tomwer/io/utils/utils.py +3 -3
  101. tomwer/resources/gui/icons/parameters.svg +1 -1
  102. tomwer/resources/gui/illustrations/no_rot.svg +1 -1
  103. tomwer/synctools/stacks/edit/darkflatpatch.py +17 -12
  104. tomwer/tests/test_scripts.py +0 -3
  105. tomwer/third_part/WaitingOverlay.py +110 -0
  106. tomwer/third_part/__init__.py +0 -0
  107. tomwer/version.py +2 -2
  108. {tomwer-1.3.0.dev2.dist-info → tomwer-1.3.0rc10.dist-info}/METADATA +32 -31
  109. {tomwer-1.3.0.dev2.dist-info → tomwer-1.3.0rc10.dist-info}/RECORD +115 -153
  110. {tomwer-1.3.0.dev2.dist-info → tomwer-1.3.0rc10.dist-info}/WHEEL +1 -1
  111. orangecontrib/tomwer/widgets/reconstruction/TofuOW.py +0 -197
  112. orangecontrib/tomwer/widgets/reconstruction/icons/XY_lamino.svg +0 -168
  113. orangecontrib/tomwer/widgets/reconstruction/icons/XZ_lamino.svg +0 -275
  114. orangecontrib/tomwer/widgets/reconstruction/icons/YZ_lamino.svg +0 -182
  115. tomwer/app/lamino.py +0 -143
  116. tomwer/core/process/reconstruction/lamino/__init__.py +0 -1
  117. tomwer/core/process/reconstruction/lamino/tofu.py +0 -1000
  118. tomwer/core/process/test/test_lamino.py +0 -76
  119. tomwer/core/test/test_lamino.py +0 -92
  120. tomwer/gui/reconstruction/lamino/__init__.py +0 -31
  121. tomwer/gui/reconstruction/lamino/tofu/TofuOptionLoader.py +0 -107
  122. tomwer/gui/reconstruction/lamino/tofu/__init__.py +0 -1
  123. tomwer/gui/reconstruction/lamino/tofu/misc.py +0 -148
  124. tomwer/gui/reconstruction/lamino/tofu/projections.py +0 -896
  125. tomwer/gui/reconstruction/lamino/tofu/settings.py +0 -75
  126. tomwer/gui/reconstruction/lamino/tofu/tofu.py +0 -432
  127. tomwer/gui/reconstruction/lamino/tofu/tofuexpert.py +0 -567
  128. tomwer/gui/reconstruction/lamino/tofu/tofuoutput.py +0 -757
  129. tomwer/gui/reconstruction/test/test_lamino.py +0 -194
  130. tomwer/resources/gui/icons/lamino_parameters.svg +0 -70
  131. tomwer/resources/gui/illustrations/lamino_angle.png +0 -0
  132. tomwer/resources/gui/illustrations/lamino_angle.svg +0 -509
  133. tomwer/resources/gui/illustrations/lamino_beta_angle.png +0 -0
  134. tomwer/resources/gui/illustrations/lamino_beta_angle.svg +0 -97
  135. tomwer/resources/gui/illustrations/lamino_theta_angle.png +0 -0
  136. tomwer/resources/gui/illustrations/lamino_theta_angle.svg +0 -368
  137. tomwer/resources/gui/illustrations/manual_slice.png +0 -0
  138. tomwer/resources/gui/illustrations/manual_slice.svg +0 -221
  139. tomwer/resources/gui/illustrations/psi_angle.png +0 -0
  140. tomwer/resources/gui/illustrations/psi_angle.svg +0 -479
  141. tomwer/resources/gui/illustrations/rotation_center.png +0 -0
  142. tomwer/resources/gui/illustrations/rotation_center.svg +0 -276
  143. tomwer/resources/gui/illustrations/slice_stack.png +0 -0
  144. tomwer/resources/gui/illustrations/slice_stack.svg +0 -266
  145. tomwer/resources/gui/illustrations/xy_slice.png +0 -0
  146. tomwer/resources/gui/illustrations/xy_slice.svg +0 -269
  147. tomwer/resources/gui/illustrations/xz_slice.png +0 -0
  148. tomwer/resources/gui/illustrations/xz_slice.svg +0 -270
  149. tomwer/resources/gui/illustrations/yz_slice.png +0 -0
  150. tomwer/resources/gui/illustrations/yz_slice.svg +0 -270
  151. tomwer/synctools/stacks/reconstruction/lamino.py +0 -233
  152. /tomwer-1.3.0.dev2-py3.11-nspkg.pth → /tomwer-1.3.0rc10-py3.11-nspkg.pth +0 -0
  153. {tomwer-1.3.0.dev2.dist-info → tomwer-1.3.0rc10.dist-info}/LICENSE +0 -0
  154. {tomwer-1.3.0.dev2.dist-info → tomwer-1.3.0rc10.dist-info}/entry_points.txt +0 -0
  155. {tomwer-1.3.0.dev2.dist-info → tomwer-1.3.0rc10.dist-info}/namespace_packages.txt +0 -0
  156. {tomwer-1.3.0.dev2.dist-info → tomwer-1.3.0rc10.dist-info}/top_level.txt +0 -0
@@ -1,76 +0,0 @@
1
- # coding: utf-8
2
- # /*##########################################################################
3
- #
4
- # Copyright (c) 2016-2017 European Synchrotron Radiation Facility
5
- #
6
- # Permission is hereby granted, free of charge, to any person obtaining a copy
7
- # of this software and associated documentation files (the "Software"), to deal
8
- # in the Software without restriction, including without limitation the rights
9
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
- # copies of the Software, and to permit persons to whom the Software is
11
- # furnished to do so, subject to the following conditions:
12
- #
13
- # The above copyright notice and this permission notice shall be included in
14
- # all copies or substantial portions of the Software.
15
- #
16
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
- # THE SOFTWARE.
23
- #
24
- # ###########################################################################*/
25
-
26
- __authors__ = ["H. Payno"]
27
- __license__ = "MIT"
28
- __date__ = "05/04/2019"
29
-
30
-
31
- import shutil
32
- import tempfile
33
- import unittest
34
-
35
- from tomwer.core.scan.scanbase import TomwerScanBase
36
- from tomwer.core.utils.scanutils import MockEDF
37
-
38
- from ..reconstruction.lamino import LaminoReconstructionTask
39
-
40
-
41
- class TestLaminoIO(unittest.TestCase):
42
- """Test inputs and outputs types of the handler functions"""
43
-
44
- def setUp(self):
45
- self.scan_folder = tempfile.mkdtemp()
46
-
47
- self.scan = MockEDF.mockScan(
48
- scanID=self.scan_folder, nRadio=10, nRecons=1, nPagRecons=4, dim=10
49
- )
50
-
51
- def tearDown(self):
52
- shutil.rmtree(self.scan_folder)
53
-
54
- def testInputOutput(self):
55
- for input_type in (dict, TomwerScanBase):
56
- for serialize_output_data in (True, False):
57
- with self.subTest(
58
- serialize_output_data=serialize_output_data,
59
- input_type=input_type,
60
- ):
61
- input_obj = self.scan
62
- if input_obj is dict:
63
- input_obj = input_obj.to_dict()
64
- lamino_process = LaminoReconstructionTask(
65
- inputs={
66
- "dry_run": True,
67
- "data": input_obj,
68
- "serialize_output_data": serialize_output_data,
69
- }
70
- )
71
- lamino_process.run()
72
- out = lamino_process.outputs.data
73
- if serialize_output_data:
74
- self.assertTrue(isinstance(out, dict))
75
- else:
76
- self.assertTrue(isinstance(out, TomwerScanBase))
@@ -1,92 +0,0 @@
1
- # coding: utf-8
2
- # /*##########################################################################
3
- #
4
- # Copyright (c) 2016-2017 European Synchrotron Radiation Facility
5
- #
6
- # Permission is hereby granted, free of charge, to any person obtaining a copy
7
- # of this software and associated documentation files (the "Software"), to deal
8
- # in the Software without restriction, including without limitation the rights
9
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
- # copies of the Software, and to permit persons to whom the Software is
11
- # furnished to do so, subject to the following conditions:
12
- #
13
- # The above copyright notice and this permission notice shall be included in
14
- # all copies or substantial portions of the Software.
15
- #
16
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
- # THE SOFTWARE.
23
- #
24
- # ###########################################################################*/
25
-
26
- __authors__ = ["H. Payno"]
27
- __license__ = "MIT"
28
- __date__ = "19/07/2018"
29
-
30
- import shutil
31
- import tempfile
32
- import unittest
33
-
34
- from tomwer.core.process.reconstruction.lamino import tofu
35
- from tomwer.core.scan.edfscan import EDFTomoScan
36
-
37
-
38
- class TestTofuReconstruction(unittest.TestCase):
39
- """Simple test of the Lamino reconstruction API"""
40
-
41
- def tearDown(self):
42
- shutil.rmtree(self._scan_path)
43
-
44
- def setUp(self):
45
- self._scan_path = tempfile.mkdtemp()
46
- self.scan = EDFTomoScan(self._scan_path)
47
- self.reconstruction = tofu.LaminoReconstructionTask(
48
- inputs={
49
- "dry_run": True,
50
- "data": self.scan,
51
- "lamino_params": {
52
- "center-position-x": 5.0,
53
- "projections": "tata-yoyo",
54
- "output": "output_dir",
55
- },
56
- "serialize_output_data": False,
57
- }
58
- )
59
-
60
- def testProcessAPI(self):
61
- self.reconstruction.run()
62
-
63
- def testPreProcessAPI(self):
64
- self.assertFalse(
65
- self.reconstruction.is_ffc_has_been_preprocessed(
66
- scan=self.scan, x_center=5.0, method=None, darks=None, ff=[None, None]
67
- )
68
- )
69
- self.reconstruction.preprocess_ff(self.scan)
70
- self.assertTrue(
71
- self.reconstruction.is_ffc_has_been_preprocessed(
72
- scan=self.scan, x_center=5.0, method=None, darks=None, ff=[None, None]
73
- )
74
- )
75
- self.reconstruction.run()
76
- self.assertTrue(
77
- self.reconstruction.is_ffc_has_been_preprocessed(
78
- scan=self.scan, x_center=5.0, method=None, darks=None, ff=[None, None]
79
- )
80
- )
81
- self.reconstruction.reconstruction_parameters["center-position-x"] = 2.0
82
- self.assertFalse(
83
- self.reconstruction.is_ffc_has_been_preprocessed(
84
- scan=self.scan, x_center=2.0, method=None, darks=None, ff=[None, None]
85
- )
86
- )
87
- self.reconstruction.preprocess_ff(self.scan)
88
- self.assertTrue(
89
- self.reconstruction.is_ffc_has_been_preprocessed(
90
- scan=self.scan, x_center=2.0, method=None, darks=None, ff=[None, None]
91
- )
92
- )
@@ -1,31 +0,0 @@
1
- # coding: utf-8
2
- # /*##########################################################################
3
- #
4
- # Copyright (c) 2016-2017 European Synchrotron Radiation Facility
5
- #
6
- # Permission is hereby granted, free of charge, to any person obtaining a copy
7
- # of this software and associated documentation files (the "Software"), to deal
8
- # in the Software without restriction, including without limitation the rights
9
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
- # copies of the Software, and to permit persons to whom the Software is
11
- # furnished to do so, subject to the following conditions:
12
- #
13
- # The above copyright notice and this permission notice shall be included in
14
- # all copies or substantial portions of the Software.
15
- #
16
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
- # THE SOFTWARE.
23
- #
24
- # ###########################################################################*/
25
- """This package contains all the widget which are not inheriting from
26
- WidgetOW (orange widgets)
27
- """
28
-
29
- __authors__ = ["H. Payno"]
30
- __license__ = "MIT"
31
- __date__ = "01/06/2018"
@@ -1,107 +0,0 @@
1
- # coding: utf-8
2
- # /*##########################################################################
3
- #
4
- # Copyright (c) 2016-2017 European Synchrotron Radiation Facility
5
- #
6
- # Permission is hereby granted, free of charge, to any person obtaining a copy
7
- # of this software and associated documentation files (the "Software"), to deal
8
- # in the Software without restriction, including without limitation the rights
9
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
- # copies of the Software, and to permit persons to whom the Software is
11
- # furnished to do so, subject to the following conditions:
12
- #
13
- # The above copyright notice and this permission notice shall be included in
14
- # all copies or substantial portions of the Software.
15
- #
16
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
- # THE SOFTWARE.
23
- #
24
- # ###########################################################################*/
25
-
26
- __authors__ = ["H. Payno"]
27
- __license__ = "MIT"
28
- __date__ = "01/06/2018"
29
-
30
-
31
- from collections import namedtuple
32
-
33
- _getterSetter = namedtuple("_getterSetter", ["getter", "setter"])
34
-
35
-
36
- class _TofuOptionLoader(object):
37
- """Simple class used to register the options managed by a TofuXWidget"""
38
-
39
- def __init__(self, options, childs=None):
40
- self._options = options
41
- self._childs = childs or []
42
- # expose API
43
- self._addChild = self._childs.append
44
-
45
- def _hasOption(self, option):
46
- return option in self._options
47
-
48
- def _setOption(self, option, value):
49
- assert option in self._options
50
- if value == "":
51
- self._options[option].setter()
52
- else:
53
- self._options[option].setter(value)
54
-
55
- def getParameters(self):
56
- """Add the value of the detain options + some extra parameters to be
57
- passed as 'free string'
58
-
59
- :return:
60
- :rtype: tuple (dict, list)
61
- """
62
- _ddict, extraParams = self._getNodeParameters()
63
- for child in self._childs:
64
- _childDict = child.getParameters()
65
- _ddict.update(_childDict)
66
- return _ddict
67
-
68
- def _getNodeParameters(self):
69
- """Add the value of the detain options + some extra parameters to be
70
- passed as 'free string'
71
-
72
- :return:
73
- :rtype: tuple (dict, list)
74
- """
75
- _ddict = {}
76
- for option in self._options:
77
- _ddict[option] = self._options[option].getter()
78
- return _ddict, []
79
-
80
- def setParameters(self, _ddict):
81
- """
82
-
83
- :param _ddict:
84
- :return: initial dictionary less the parameters managed by this option
85
- loader
86
- :rtype dict:
87
- """
88
- _lddict = _ddict.copy()
89
- for child in self._childs:
90
- _lddict = child.setParameters(_lddict)
91
- _lddict = self._setNodeParameters(_lddict)
92
- return _lddict
93
-
94
- def _setNodeParameters(self, _ddict):
95
- """
96
-
97
- :param _ddict:
98
- :return: initial dictionary less the parameters managed by this option
99
- loader
100
- :rtype dict:
101
- """
102
- updatedDict = _ddict.copy()
103
- for param, value in _ddict.items():
104
- if param in self._options:
105
- self._options[param].setter(value)
106
- del updatedDict[param]
107
- return updatedDict
@@ -1 +0,0 @@
1
- from .tofu import TofuWidget, TofuWindow # noqa F401
@@ -1,148 +0,0 @@
1
- # coding: utf-8
2
- # /*##########################################################################
3
- #
4
- # Copyright (c) 2016-2017 European Synchrotron Radiation Facility
5
- #
6
- # Permission is hereby granted, free of charge, to any person obtaining a copy
7
- # of this software and associated documentation files (the "Software"), to deal
8
- # in the Software without restriction, including without limitation the rights
9
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
- # copies of the Software, and to permit persons to whom the Software is
11
- # furnished to do so, subject to the following conditions:
12
- #
13
- # The above copyright notice and this permission notice shall be included in
14
- # all copies or substantial portions of the Software.
15
- #
16
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
- # THE SOFTWARE.
23
- #
24
- # ###########################################################################*/
25
-
26
- __authors__ = ["H. Payno"]
27
- __license__ = "MIT"
28
- __date__ = "01/06/2018"
29
-
30
-
31
- import logging
32
-
33
- from silx.gui import qt
34
-
35
- from tomwer.gui import icons
36
- from tomwer.gui.utils.buttons import PadlockButton
37
-
38
- _logger = logging.getLogger()
39
-
40
-
41
- class _AngleWidget(qt.QWidget):
42
- """Simple widget used to defined an angle"""
43
-
44
- def __init__(self, parent, name, defaultVal=0, lockable=False, information=None):
45
- """
46
-
47
- :param parent:
48
- :param name:
49
- :param defaultVal:
50
- :param lockable: if True then add a push button to lock / unlock the
51
- variable
52
- :param information: callabak to display some information. If not None
53
- then add a QPushButton calling this callback
54
- """
55
- assert type(defaultVal) in (int, float)
56
- self._lockable = lockable
57
- qt.QWidget.__init__(self, parent=parent)
58
- self.setLayout(qt.QHBoxLayout())
59
- self.layout().setContentsMargins(0, 0, 0, 0)
60
- self.layout().addWidget(qt.QLabel(name + ":", parent=self))
61
- self._angleLE = qt.QLineEdit(str(defaultVal), parent=self)
62
- validator = qt.QDoubleValidator(self._angleLE)
63
- self._angleLE.setValidator(validator)
64
- self.layout().addWidget(self._angleLE)
65
-
66
- self._infoCallback = information
67
- if self._infoCallback is not None:
68
- icon = icons.getQIcon("information")
69
- self._infoPB = qt.QPushButton(parent=self, icon=icon)
70
- self._infoPB.pressed.connect(self._infoCallback)
71
- self._infoPB.setCheckable(False)
72
- self.layout().addWidget(self._infoPB)
73
-
74
- self._lockButton = PadlockButton(parent=self)
75
- self.layout().addWidget(self._lockButton)
76
- self._lockButton.setVisible(self.isLockable())
77
-
78
- self.sigEdited = self._angleLE.textEdited
79
- """Signal emitted when the angle is edited"""
80
-
81
- def getAngle(self):
82
- return float(self._angleLE.text())
83
-
84
- def setAngle(self, val):
85
- if not type(val) is str:
86
- assert type(val) in (float, int)
87
- self._angleLE.setText(str(val))
88
-
89
- def isLockable(self):
90
- return self._lockable
91
-
92
- def isLocked(self):
93
- return self._lockable and self._lockButton.isLocked()
94
-
95
- def lock(self):
96
- if self._lockable is False:
97
- _logger.warning(
98
- "unable to lock the _AngleWidget cause not defined " "as lockable"
99
- )
100
- self._lockButton.setChecked(True)
101
-
102
-
103
- class _RegionLE(qt.QWidget):
104
- """Widget used to defined a region as (start, end, step)"""
105
-
106
- def __init__(self, parent, name):
107
- super().__init__(parent)
108
- self.setLayout(qt.QHBoxLayout())
109
- self.layout().setContentsMargins(0, 0, 0, 0)
110
- self.layout().addWidget(qt.QLabel(name, parent=self))
111
- self._regionLE = qt.QLineEdit(parent=self)
112
- self.layout().addWidget(self._regionLE)
113
- self.setToolTip("region should be defined as: start, end, step")
114
-
115
- def getRegion(self):
116
- """
117
-
118
- :return: start voxel, end voxel, step voxel
119
- :rtype: tuple of int
120
- """
121
-
122
- def _getParam(regions, index, default):
123
- try:
124
- # if len(regions) > index and regions[index].isdigit():
125
- # try to avoid failure if regions[index] is a negative
126
- return int(regions[index])
127
- except Exception:
128
- return default
129
-
130
- if self._regionLE.text() == "":
131
- return None
132
- regions = self._regionLE.text().replace(" ", "").split(",")
133
- sv = _getParam(regions, 0, 0)
134
- se = _getParam(regions, 1, -1)
135
- ss = _getParam(regions, 2, 1)
136
- return (sv, se, ss)
137
-
138
- def setRegion(self, startVox, endVox, stepVox):
139
- self.setRegionFromStr(",".join([str(startVox), str(endVox), str(stepVox)]))
140
-
141
- def setRegionFromStr(self, _str):
142
- if _str is None:
143
- self._regionLE.clear()
144
- else:
145
- assert type(_str) is str
146
- _str = _str.lstrip("(")
147
- _str = _str.rstrip(")")
148
- self._regionLE.setText(_str)