tomwer 1.4.4__py3-none-any.whl → 1.4.6__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.
- orangecontrib/tomwer/__init__.py +4 -0
- orangecontrib/tomwer/widgets/__init__.py +3 -23
- orangecontrib/tomwer/widgets/cluster/__init__.py +3 -23
- orangecontrib/tomwer/widgets/control/__init__.py +4 -23
- orangecontrib/tomwer/widgets/dataportal/__init__.py +5 -0
- orangecontrib/tomwer/widgets/debugtools/__init__.py +3 -23
- orangecontrib/tomwer/widgets/edit/__init__.py +3 -23
- orangecontrib/tomwer/widgets/other/__init__.py +3 -23
- orangecontrib/tomwer/widgets/reconstruction/__init__.py +3 -23
- orangecontrib/tomwer/widgets/stitching/__init__.py +4 -0
- orangecontrib/tomwer/widgets/visualization/__init__.py +3 -23
- tomwer/__init__.py +2 -1
- tomwer/core/process/reconstruction/nabu/nabucommon.py +48 -24
- tomwer/core/process/reconstruction/nabu/utils.py +2 -14
- tomwer/core/resourcemanager.py +33 -0
- tomwer/core/utils/image.py +2 -2
- tomwer/gui/reconstruction/axis/ControlWidget.py +1 -1
- tomwer/gui/reconstruction/nabu/nabuconfig/reconstruction.py +3 -2
- tomwer/gui/reconstruction/nabu/slices.py +3 -3
- tomwer/gui/visualization/volumeviewer.py +19 -3
- tomwer/tasks/reconstruction/cleardarkflat.py +38 -0
- tomwer/version.py +1 -1
- {tomwer-1.4.4.dist-info → tomwer-1.4.6.dist-info}/METADATA +2 -2
- {tomwer-1.4.4.dist-info → tomwer-1.4.6.dist-info}/RECORD +28 -26
- {tomwer-1.4.4.dist-info → tomwer-1.4.6.dist-info}/WHEEL +1 -1
- {tomwer-1.4.4.dist-info → tomwer-1.4.6.dist-info}/LICENSE +0 -0
- {tomwer-1.4.4.dist-info → tomwer-1.4.6.dist-info}/entry_points.txt +0 -0
- {tomwer-1.4.4.dist-info → tomwer-1.4.6.dist-info}/top_level.txt +0 -0
orangecontrib/tomwer/__init__.py
CHANGED
@@ -1,26 +1,6 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
#
|
5
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
-
# of this software and associated documentation files (the "Software"), to deal
|
7
|
-
# in the Software without restriction, including without limitation the rights
|
8
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
-
# copies of the Software, and to permit persons to whom the Software is
|
10
|
-
# furnished to do so, subject to the following conditions:
|
11
|
-
#
|
12
|
-
# The above copyright notice and this permission notice shall be included in
|
13
|
-
# all copies or substantial portions of the Software.
|
14
|
-
#
|
15
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
-
# THE SOFTWARE.
|
22
|
-
#
|
23
|
-
#############################################################################
|
1
|
+
"""
|
2
|
+
(Ewoks)Orange Widgets dedicated for tomography
|
3
|
+
"""
|
24
4
|
|
25
5
|
from ewoksorange.pkg_meta import get_distribution
|
26
6
|
|
@@ -1,26 +1,6 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
#
|
5
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
-
# of this software and associated documentation files (the "Software"), to deal
|
7
|
-
# in the Software without restriction, including without limitation the rights
|
8
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
-
# copies of the Software, and to permit persons to whom the Software is
|
10
|
-
# furnished to do so, subject to the following conditions:
|
11
|
-
#
|
12
|
-
# The above copyright notice and this permission notice shall be included in
|
13
|
-
# all copies or substantial portions of the Software.
|
14
|
-
#
|
15
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
-
# THE SOFTWARE.
|
22
|
-
#
|
23
|
-
#############################################################################
|
1
|
+
"""
|
2
|
+
(Ewoks)Orange Widgets for remote processing through slurm
|
3
|
+
"""
|
24
4
|
|
25
5
|
NAME = "compute cluster"
|
26
6
|
|
@@ -1,26 +1,7 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
-
# of this software and associated documentation files (the "Software"), to deal
|
7
|
-
# in the Software without restriction, including without limitation the rights
|
8
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
-
# copies of the Software, and to permit persons to whom the Software is
|
10
|
-
# furnished to do so, subject to the following conditions:
|
11
|
-
#
|
12
|
-
# The above copyright notice and this permission notice shall be included in
|
13
|
-
# all copies or substantial portions of the Software.
|
14
|
-
#
|
15
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
-
# THE SOFTWARE.
|
22
|
-
#
|
23
|
-
#############################################################################
|
1
|
+
"""
|
2
|
+
(Ewoks)Orange Widgets to 'control' the flow. Like defining input / output, stacking scans...
|
3
|
+
Those widget are not doing any 'core' processing.
|
4
|
+
"""
|
24
5
|
|
25
6
|
NAME = "control"
|
26
7
|
|
@@ -1,26 +1,6 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
#
|
5
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
-
# of this software and associated documentation files (the "Software"), to deal
|
7
|
-
# in the Software without restriction, including without limitation the rights
|
8
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
-
# copies of the Software, and to permit persons to whom the Software is
|
10
|
-
# furnished to do so, subject to the following conditions:
|
11
|
-
#
|
12
|
-
# The above copyright notice and this permission notice shall be included in
|
13
|
-
# all copies or substantial portions of the Software.
|
14
|
-
#
|
15
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
-
# THE SOFTWARE.
|
22
|
-
#
|
23
|
-
#############################################################################
|
1
|
+
"""
|
2
|
+
(Ewoks)Orange Widgets for debugging. To be used at your own risk and peril
|
3
|
+
"""
|
24
4
|
|
25
5
|
NAME = "debug tools"
|
26
6
|
|
@@ -1,26 +1,6 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
#
|
5
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
-
# of this software and associated documentation files (the "Software"), to deal
|
7
|
-
# in the Software without restriction, including without limitation the rights
|
8
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
-
# copies of the Software, and to permit persons to whom the Software is
|
10
|
-
# furnished to do so, subject to the following conditions:
|
11
|
-
#
|
12
|
-
# The above copyright notice and this permission notice shall be included in
|
13
|
-
# all copies or substantial portions of the Software.
|
14
|
-
#
|
15
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
-
# THE SOFTWARE.
|
22
|
-
#
|
23
|
-
#############################################################################
|
1
|
+
"""
|
2
|
+
(Ewoks)Orange Widgets for NXtomo edition
|
3
|
+
"""
|
24
4
|
|
25
5
|
NAME = "edit HDF5 - NXTomo"
|
26
6
|
|
@@ -1,26 +1,6 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
#
|
5
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
-
# of this software and associated documentation files (the "Software"), to deal
|
7
|
-
# in the Software without restriction, including without limitation the rights
|
8
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
-
# copies of the Software, and to permit persons to whom the Software is
|
10
|
-
# furnished to do so, subject to the following conditions:
|
11
|
-
#
|
12
|
-
# The above copyright notice and this permission notice shall be included in
|
13
|
-
# all copies or substantial portions of the Software.
|
14
|
-
#
|
15
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
-
# THE SOFTWARE.
|
22
|
-
#
|
23
|
-
#############################################################################
|
1
|
+
"""
|
2
|
+
(Ewoks)Orange Widgets for tomography not matching any other category
|
3
|
+
"""
|
24
4
|
|
25
5
|
NAME = "other"
|
26
6
|
|
@@ -1,26 +1,6 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
#
|
5
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
-
# of this software and associated documentation files (the "Software"), to deal
|
7
|
-
# in the Software without restriction, including without limitation the rights
|
8
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
-
# copies of the Software, and to permit persons to whom the Software is
|
10
|
-
# furnished to do so, subject to the following conditions:
|
11
|
-
#
|
12
|
-
# The above copyright notice and this permission notice shall be included in
|
13
|
-
# all copies or substantial portions of the Software.
|
14
|
-
#
|
15
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
-
# THE SOFTWARE.
|
22
|
-
#
|
23
|
-
#############################################################################
|
1
|
+
"""
|
2
|
+
(Ewoks)Orange Widgets for tomography core processing
|
3
|
+
"""
|
24
4
|
|
25
5
|
NAME = "reconstruction"
|
26
6
|
|
@@ -1,26 +1,6 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
#
|
5
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
-
# of this software and associated documentation files (the "Software"), to deal
|
7
|
-
# in the Software without restriction, including without limitation the rights
|
8
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
-
# copies of the Software, and to permit persons to whom the Software is
|
10
|
-
# furnished to do so, subject to the following conditions:
|
11
|
-
#
|
12
|
-
# The above copyright notice and this permission notice shall be included in
|
13
|
-
# all copies or substantial portions of the Software.
|
14
|
-
#
|
15
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
-
# THE SOFTWARE.
|
22
|
-
#
|
23
|
-
#############################################################################
|
1
|
+
"""
|
2
|
+
(Ewoks)Orange Widgets for tomography raw and processed data visualization
|
3
|
+
"""
|
24
4
|
|
25
5
|
NAME = "visualization"
|
26
6
|
|
tomwer/__init__.py
CHANGED
@@ -15,6 +15,8 @@ import sys
|
|
15
15
|
import numpy
|
16
16
|
from silx.io.url import DataUrl
|
17
17
|
from silx.io.utils import open as open_hdf5
|
18
|
+
from silx.gui.utils import concurrent
|
19
|
+
|
18
20
|
from sluurp.executor import submit as submit_to_slurm_cluster
|
19
21
|
from sluurp.job import SBatchScriptJob
|
20
22
|
from tomoscan.io import HDF5File
|
@@ -41,6 +43,8 @@ from tomwer.core.scan.nxtomoscan import NXtomoScan
|
|
41
43
|
from tomwer.core.scan.scanbase import TomwerScanBase
|
42
44
|
from tomwer.core.utils.slurm import get_slurm_script_name, is_slurm_available
|
43
45
|
from tomwer.core.volume.volumefactory import VolumeFactory
|
46
|
+
from tomwer.core.resourcemanager import HDF5VolumeManager
|
47
|
+
from tomwer.core.volume.hdf5volume import HDF5VolumeIdentifier
|
44
48
|
|
45
49
|
from . import settings, utils
|
46
50
|
|
@@ -279,25 +283,43 @@ class _NabuBaseReconstructor:
|
|
279
283
|
success=True,
|
280
284
|
config=config_to_dump,
|
281
285
|
)
|
282
|
-
elif self.target
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
286
|
+
elif self.target in (Target.LOCAL, Target.SLURM):
|
287
|
+
axis = config_to_dump["reconstruction"].get("slice_plane", "XY")
|
288
|
+
if file_format in ("hdf5", "h5", "hdf"):
|
289
|
+
vol_identifiers = utils.get_recons_volume_identifier(
|
290
|
+
file_prefix=config_to_dump["output"]["file_prefix"],
|
291
|
+
location=config_to_dump["output"]["location"],
|
292
|
+
slice_index=None,
|
293
|
+
scan=self.scan,
|
294
|
+
file_format=file_format,
|
295
|
+
axis=axis,
|
296
|
+
)
|
297
|
+
# release potential resource lockers (like the HDF5 volume viewer)
|
298
|
+
for vol_identifier in vol_identifiers:
|
299
|
+
if isinstance(vol_identifier, HDF5VolumeIdentifier):
|
300
|
+
concurrent.submitToQtMainThread(
|
301
|
+
HDF5VolumeManager.release_resource,
|
302
|
+
vol_identifier.file_path,
|
303
|
+
)
|
304
|
+
if self.target is Target.LOCAL:
|
305
|
+
_logger.info(f"run {info} for {self.scan} with {config_to_dump}")
|
306
|
+
return self._run_nabu_locally(
|
307
|
+
conf_file=config_file,
|
308
|
+
file_format=file_format,
|
309
|
+
config_to_dump=config_to_dump,
|
310
|
+
axis=axis,
|
311
|
+
)
|
312
|
+
elif self.target is Target.SLURM:
|
313
|
+
_logger.info(
|
314
|
+
f"run {info} on slurm for {self.scan.path} with {config_to_dump}"
|
315
|
+
)
|
316
|
+
return self._run_nabu_on_slurm(
|
317
|
+
conf_file=config_file,
|
318
|
+
config_to_dump=config_to_dump,
|
319
|
+
cluster_config=self.cluster_config.to_dict(),
|
320
|
+
process_name=process_name,
|
321
|
+
info=info,
|
322
|
+
)
|
301
323
|
else:
|
302
324
|
raise ValueError(f"{self.target} is not recognized as a valid target")
|
303
325
|
|
@@ -362,7 +384,7 @@ class _NabuBaseReconstructor:
|
|
362
384
|
self._process.kill()
|
363
385
|
outs, errs = self._process.communicate()
|
364
386
|
|
365
|
-
|
387
|
+
recons_vol_identifiers = utils.get_recons_volume_identifier(
|
366
388
|
file_prefix=config_to_dump["output"]["file_prefix"],
|
367
389
|
location=config_to_dump["output"]["location"],
|
368
390
|
slice_index=None,
|
@@ -372,7 +394,7 @@ class _NabuBaseReconstructor:
|
|
372
394
|
)
|
373
395
|
return ResultsLocalRun(
|
374
396
|
success=not nabu_std_err_has_error(errs),
|
375
|
-
results_identifiers=
|
397
|
+
results_identifiers=recons_vol_identifiers,
|
376
398
|
std_out=outs,
|
377
399
|
std_err=errs,
|
378
400
|
config=config_to_dump, # config_slices,
|
@@ -392,10 +414,12 @@ class _NabuBaseReconstructor:
|
|
392
414
|
:return: results of the slurm run
|
393
415
|
"""
|
394
416
|
if not isinstance(conf_file, str):
|
395
|
-
raise TypeError(
|
417
|
+
raise TypeError(
|
418
|
+
f"conf_file is expected to be a string not {type(conf_file)}"
|
419
|
+
)
|
396
420
|
if not isinstance(config_to_dump, dict):
|
397
421
|
raise TypeError(
|
398
|
-
f"config_to_dump is expected to be a
|
422
|
+
f"config_to_dump is expected to be a string not {type(config_to_dump)}"
|
399
423
|
)
|
400
424
|
if not is_slurm_available():
|
401
425
|
raise RuntimeError("slurm not available")
|
@@ -428,7 +452,7 @@ class _NabuBaseReconstructor:
|
|
428
452
|
job = SBatchScriptJob(
|
429
453
|
slurm_config=cluster_config,
|
430
454
|
script=(
|
431
|
-
f"python3 -m {settings.NABU_FULL_FIELD_APP_PATH} {conf_file} --gpu_mem_fraction {gpu_mem_fraction} --cpu_mem_fraction {cpu_mem_fraction}",
|
455
|
+
f"python3 -m {settings.NABU_FULL_FIELD_APP_PATH} '{conf_file}' --gpu_mem_fraction {gpu_mem_fraction} --cpu_mem_fraction {cpu_mem_fraction}",
|
432
456
|
),
|
433
457
|
script_path=os.path.join(self.scan.path, "slurm_scripts", script_name),
|
434
458
|
clean_script=False,
|
@@ -12,6 +12,7 @@ from nabu.pipeline.fullfield.nabu_config import (
|
|
12
12
|
)
|
13
13
|
from silx.utils.enum import Enum as _Enum
|
14
14
|
|
15
|
+
from tomoscan.identifier import VolumeIdentifier
|
15
16
|
import tomwer.version
|
16
17
|
from tomwer.core.process.reconstruction.nabu.plane import NabuPlane
|
17
18
|
from tomwer.core.scan.edfscan import EDFTomoScan
|
@@ -100,7 +101,7 @@ def get_recons_volume_identifier(
|
|
100
101
|
scan: TomwerScanBase,
|
101
102
|
slice_index: int | None,
|
102
103
|
axis: NabuPlane,
|
103
|
-
) -> tuple:
|
104
|
+
) -> tuple[VolumeIdentifier]:
|
104
105
|
"""
|
105
106
|
return tuple of DataUrl for existings slices
|
106
107
|
"""
|
@@ -160,19 +161,6 @@ def get_recons_volume_identifier(
|
|
160
161
|
),
|
161
162
|
)
|
162
163
|
|
163
|
-
# case of the multitiff. Not handled by tomwer
|
164
|
-
# elif file_format == "tiff":
|
165
|
-
# # for single frame tiff nabu uses another convention by saving it 'directly'.
|
166
|
-
# volumes = (
|
167
|
-
# MultiTIFFVolume(
|
168
|
-
# file_path=os.path.join(
|
169
|
-
# location,
|
170
|
-
# file_prefix,
|
171
|
-
# ".".join([file_prefix, file_format]),
|
172
|
-
# ),
|
173
|
-
# ),
|
174
|
-
# )
|
175
|
-
|
176
164
|
else:
|
177
165
|
raise ValueError(f"file format not managed: {file_format}")
|
178
166
|
|
@@ -0,0 +1,33 @@
|
|
1
|
+
class BaseResourceObserver:
|
2
|
+
"""base class of the resource observer"""
|
3
|
+
|
4
|
+
def release_resource(self, resource):
|
5
|
+
raise NotImplementedError("Base class")
|
6
|
+
|
7
|
+
|
8
|
+
class _DummyResourceManager:
|
9
|
+
"""
|
10
|
+
Simple resource manager. It holds a set of observer tha must release a resource when requested
|
11
|
+
Observers must implement the 'BaseResourceObserver'
|
12
|
+
"""
|
13
|
+
|
14
|
+
def __init__(self):
|
15
|
+
self._observers = set()
|
16
|
+
|
17
|
+
def register(self, observer):
|
18
|
+
"""Register a process to be notified when the resource should be released."""
|
19
|
+
if observer not in self._observers:
|
20
|
+
self._observers.add(observer)
|
21
|
+
|
22
|
+
def unregister(self, observer):
|
23
|
+
"""Unregister a process so it won't be notified anymore."""
|
24
|
+
if observer in self._observers:
|
25
|
+
self._observers.remove(observer)
|
26
|
+
|
27
|
+
def release_resource(self, resource: str):
|
28
|
+
"""Force all observer to release the given resource"""
|
29
|
+
for observer in self._observers:
|
30
|
+
observer.release_resource(resource)
|
31
|
+
|
32
|
+
|
33
|
+
HDF5VolumeManager = _DummyResourceManager()
|
tomwer/core/utils/image.py
CHANGED
@@ -116,8 +116,8 @@ def scale_img2_to_img1(
|
|
116
116
|
else:
|
117
117
|
raise ValueError("method not managed", method)
|
118
118
|
|
119
|
-
vec0 = numpy.
|
120
|
-
matr = numpy.
|
119
|
+
vec0 = numpy.asmatrix([[min0], [me0], [max0]])
|
120
|
+
matr = numpy.asmatrix(
|
121
121
|
[[min1 * min1, min1, 1.0], [me1 * me1, me1, 1.0], [max1 * max1, max1, 1.0]]
|
122
122
|
)
|
123
123
|
vec1 = inv(matr) * vec0
|
@@ -211,7 +211,7 @@ class _PositionInfoWidget(qt.QWidget):
|
|
211
211
|
else:
|
212
212
|
value = float(self._relativePositionQLE.text())
|
213
213
|
# make sure we only emit the signal if the value changed (and when the Qline has been edited).
|
214
|
-
if self._axis_params.relative_cor_value
|
214
|
+
if isinstance(self._axis_params.relative_cor_value, (type(None), str)) or (
|
215
215
|
self._axis_params is not None
|
216
216
|
and not numpy.isclose(
|
217
217
|
value, self._axis_params.relative_cor_value, atol=1e-3
|
@@ -10,6 +10,7 @@ from silx.gui.dialog.DataFileDialog import DataFileDialog
|
|
10
10
|
from silx.utils.enum import Enum as _Enum
|
11
11
|
|
12
12
|
from nxtomomill.io.utils import convert_str_to_tuple
|
13
|
+
from tomwer.core.utils.char import DEGREE_CHAR
|
13
14
|
from tomwer.core.process.reconstruction.nabu.plane import NabuPlane
|
14
15
|
from tomwer.core.process.reconstruction.nabu.nabuslices import NabuSliceMode
|
15
16
|
from tomwer.core.process.reconstruction.nabu.utils import (
|
@@ -449,11 +450,11 @@ class _NabuReconstructionConfig(qt.QWidget, _NabuStageConfigBase):
|
|
449
450
|
self.registerWidget(self._anglesFileWidget, "advanced")
|
450
451
|
|
451
452
|
# exclude projections: [A, B] (if user want's to skip projection from degree A to degree B (included))
|
452
|
-
self._excludeProjectionsQCB = qt.QCheckBox("exclude
|
453
|
+
self._excludeProjectionsQCB = qt.QCheckBox("exclude proj angles", self)
|
453
454
|
self.layout().addWidget(self._excludeProjectionsQCB, 24, 0, 1, 1)
|
454
455
|
self._excludeProjectionsWidget = RangeWidget(self)
|
455
456
|
self._excludeProjectionsWidget.setRange(0.0, 360.0)
|
456
|
-
self._excludeProjectionsWidget.setSuffix(
|
457
|
+
self._excludeProjectionsWidget.setSuffix(DEGREE_CHAR)
|
457
458
|
self._excludeProjectionsWidget.setToolTip(
|
458
459
|
"Projections with a rotation in [a, b] range will be ignored."
|
459
460
|
)
|
@@ -520,10 +520,10 @@ class NabuWidget(qt.QWidget):
|
|
520
520
|
# signal / slot connections
|
521
521
|
self._flow.sigConfigurationChanged.connect(self._processSelectionChanged)
|
522
522
|
self._flow.sigResetConfiguration.connect(self._processSelectionChanged)
|
523
|
-
self._configuration.sigConfChanged.connect(self.
|
524
|
-
self._nabuModeCB.currentIndexChanged.connect(self.
|
523
|
+
self._configuration.sigConfChanged.connect(self._triggerConfigChanged)
|
524
|
+
self._nabuModeCB.currentIndexChanged.connect(self._triggerConfigChanged)
|
525
525
|
|
526
|
-
def
|
526
|
+
def _triggerConfigChanged(self, *args, **kwargs):
|
527
527
|
self.sigConfigChanged.emit()
|
528
528
|
|
529
529
|
def isModeLocked(self) -> True:
|
@@ -6,6 +6,8 @@ import h5py
|
|
6
6
|
|
7
7
|
import numpy
|
8
8
|
import numpy.lib.npyio
|
9
|
+
|
10
|
+
import os
|
9
11
|
import silx
|
10
12
|
from silx.gui import qt
|
11
13
|
from silx.gui.colors import Colormap
|
@@ -18,6 +20,7 @@ from tomwer.core.volume.volumefactory import VolumeFactory
|
|
18
20
|
from tomwer.core.scan.scanbase import TomwerScanBase
|
19
21
|
from tomwer.gui.visualization.reconstructionparameters import ReconstructionParameters
|
20
22
|
from tomwer.core.volume.hdf5volume import HDF5Volume
|
23
|
+
from tomwer.core.resourcemanager import BaseResourceObserver, HDF5VolumeManager
|
21
24
|
from tomoscan.identifier import VolumeIdentifier
|
22
25
|
|
23
26
|
from silx.gui.widgets.WaitingOverlay import WaitingOverlay
|
@@ -215,9 +218,9 @@ class _TomoApplicationContext(DataViewHooks):
|
|
215
218
|
return self.__defaultColormapDialog
|
216
219
|
|
217
220
|
|
218
|
-
class VolumeViewer(qt.QMainWindow):
|
221
|
+
class VolumeViewer(qt.QMainWindow, BaseResourceObserver):
|
219
222
|
def __init__(self, parent):
|
220
|
-
|
223
|
+
super().__init__(parent)
|
221
224
|
|
222
225
|
self._volume_loaded_in_background = (None, None)
|
223
226
|
# store the volume loaded in the background and the thread used for it as (volume_identifier, thread)
|
@@ -259,6 +262,8 @@ class VolumeViewer(qt.QMainWindow):
|
|
259
262
|
loading data on the fly and avoid loading everything into memory for
|
260
263
|
hdf5."""
|
261
264
|
self.__last_mode = None
|
265
|
+
# register the viewer as observer of the HDF5 volume (handle resource conflict)
|
266
|
+
HDF5VolumeManager.register(self)
|
262
267
|
|
263
268
|
def _close_h5_file(self):
|
264
269
|
if self._h5_file is not None:
|
@@ -266,9 +271,21 @@ class VolumeViewer(qt.QMainWindow):
|
|
266
271
|
self._h5_file = None
|
267
272
|
|
268
273
|
def close(self):
|
274
|
+
HDF5VolumeManager.unregister(self)
|
269
275
|
self._close_h5_file()
|
270
276
|
super().close()
|
271
277
|
|
278
|
+
def release_resource(self, resource: str):
|
279
|
+
if self._h5_file is not None and resource in (
|
280
|
+
self._h5_file.filename,
|
281
|
+
os.path.abspath(self._h5_file.filename),
|
282
|
+
):
|
283
|
+
_logger.warning(
|
284
|
+
f"{resource} about to be overwrite. Closing resource and cleaning plot."
|
285
|
+
)
|
286
|
+
self._close_h5_file()
|
287
|
+
self.clear()
|
288
|
+
|
272
289
|
def setScan(self, scan):
|
273
290
|
self.clear()
|
274
291
|
if scan is None:
|
@@ -276,7 +293,6 @@ class VolumeViewer(qt.QMainWindow):
|
|
276
293
|
|
277
294
|
elif len(scan.latest_vol_reconstructions) == 0:
|
278
295
|
_logger.warning(f"No reconstructed volume for {scan}")
|
279
|
-
self.clear()
|
280
296
|
self._infoWidget.setScan(scan)
|
281
297
|
else:
|
282
298
|
self._set_volumes(volumes=scan.latest_vol_reconstructions)
|
@@ -0,0 +1,38 @@
|
|
1
|
+
"""
|
2
|
+
Contains task to clear reduced dark and flat frames
|
3
|
+
"""
|
4
|
+
from __future__ import annotations
|
5
|
+
|
6
|
+
from tomoscan.scanbase import TomoScanBase as TomoscanScanBase
|
7
|
+
|
8
|
+
from processview.core.manager import DatasetState, ProcessManager
|
9
|
+
from processview.core.superviseprocess import SuperviseProcess
|
10
|
+
|
11
|
+
from tomwer.tasks.task import Task
|
12
|
+
from tomwer.core.scan.scanbase import TomwerScanBase
|
13
|
+
from tomwer.core.scan.scanfactory import ScanFactory
|
14
|
+
from tomwer.core.utils.scanutils import data_identifier_to_scan
|
15
|
+
from tomwer.core.reconstruction.darkflat import params as dkrf_reconsparams
|
16
|
+
from tomwer.utils import docstring
|
17
|
+
|
18
|
+
|
19
|
+
class ClearReducedDarkAndFlat(
|
20
|
+
Task,
|
21
|
+
SuperviseProcess,
|
22
|
+
input_names=("data",),
|
23
|
+
output_names=("data",),
|
24
|
+
):
|
25
|
+
"""
|
26
|
+
Task to clear reduced darks and flats. Both on disk and on the object cache.
|
27
|
+
th goal of this task is to make sure the scan is cleared of any reduced frames to reprocess it later.
|
28
|
+
"""
|
29
|
+
def run(self):
|
30
|
+
scan = self.inputs.data
|
31
|
+
if not isinstance(scan, TomoscanScanBase):
|
32
|
+
raise TypeError(f"scan should be an instance of {TomoscanScanBase}. Got {type(scan)}")
|
33
|
+
scan.set_reduced_flats(None)
|
34
|
+
scan.reduced_flats_infos = None
|
35
|
+
scan.set_reduced_darks(None)
|
36
|
+
scan.reduced_darks_infos = None
|
37
|
+
|
38
|
+
self.outputs.data = scan
|
tomwer/version.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
Metadata-Version: 2.
|
1
|
+
Metadata-Version: 2.2
|
2
2
|
Name: tomwer
|
3
|
-
Version: 1.4.
|
3
|
+
Version: 1.4.6
|
4
4
|
Summary: "tomography workflow tools"
|
5
5
|
Home-page: https://gitlab.esrf.fr/tomotools/tomwer
|
6
6
|
Author: Henri Payno, Pierre Paleo, Pierre-Olivier Autran, Jérôme Lesaint, Alessandro Mirone
|
@@ -1,4 +1,4 @@
|
|
1
|
-
orangecontrib/tomwer/__init__.py,sha256=
|
1
|
+
orangecontrib/tomwer/__init__.py,sha256=E5i2PjCEuhPROPQU9zg7CMXhxpcgtBuYlIwk1KFLCrM,186
|
2
2
|
orangecontrib/tomwer/state_summary.py,sha256=5_dPzweL3r0ye4ZfJo6IV2ThJI8fQhWoO2ySdJJajj8,1711
|
3
3
|
orangecontrib/tomwer/orange/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
4
4
|
orangecontrib/tomwer/orange/managedprocess.py,sha256=0OMlOYnNq5hC-t6CWtDaERQ9k0bNMGaLzVT9fDyM1LE,3512
|
@@ -25,11 +25,11 @@ orangecontrib/tomwer/tutorials/id16b/ID16b_full_volume.ows,sha256=eSxYxrZ-0WKsmD
|
|
25
25
|
orangecontrib/tomwer/tutorials/id16b/ID16b_insitu.ows,sha256=lmn7C0LQIzJpxVJjHajyPKfJZZSHSNBG2x8uxnv6Zg8,29566
|
26
26
|
orangecontrib/tomwer/tutorials/id16b/ID16b_normalization.ows,sha256=kFGXGxc3eW7iG5TcAxaOwEwh1cvsKZEO3T_cA3mrd1k,22602
|
27
27
|
orangecontrib/tomwer/tutorials/id16b/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
28
|
-
orangecontrib/tomwer/widgets/__init__.py,sha256=
|
28
|
+
orangecontrib/tomwer/widgets/__init__.py,sha256=dX_TpkBh3mVsrj3EeGglEESsnZAEVq7V0Nb9bnBrb-8,1214
|
29
29
|
orangecontrib/tomwer/widgets/utils.py,sha256=yq1wZfpfY3iVAhwMRBls57q02lhljO89WRKN7MxMMNg,983
|
30
30
|
orangecontrib/tomwer/widgets/cluster/FutureSupervisorOW.py,sha256=uvtstSQ3rRB_T0f734zPEZEelUQRe9btkjP7PJfj8zk,8176
|
31
31
|
orangecontrib/tomwer/widgets/cluster/SlurmClusterOW.py,sha256=L_fX3EFyyx71Fg-FI8ab34ZPSUzrwKGJLcS2FnYCY_c,2565
|
32
|
-
orangecontrib/tomwer/widgets/cluster/__init__.py,sha256=
|
32
|
+
orangecontrib/tomwer/widgets/cluster/__init__.py,sha256=vOOJnIIaLWAj8tnxD9MRzWDyYgk-cyuBsN7QQ5FrIoQ,385
|
33
33
|
orangecontrib/tomwer/widgets/cluster/icons/slurm.png,sha256=C-YBLwXCnh0oo4nvEt80WxX_jKYGUAFpWMUSlzt6ke0,1995
|
34
34
|
orangecontrib/tomwer/widgets/cluster/icons/slurm.svg,sha256=9LqiU88NH3ACxtZ8A7gTm-C_0ACR8iq0k_N2W1IFf9Q,9790
|
35
35
|
orangecontrib/tomwer/widgets/cluster/icons/slurmobserver.png,sha256=sxH1V20s0JZPTCq82Fizz8Q9RHXwviapdStgZT8GBIM,3212
|
@@ -54,7 +54,7 @@ orangecontrib/tomwer/widgets/control/SingleTomoObjOW.py,sha256=suxOdSAzqKKY3jTCe
|
|
54
54
|
orangecontrib/tomwer/widgets/control/TimerOW.py,sha256=nN5IXfNRmiZkcxVUYtmaifFqEBZlsPxuChPaEW6GvCo,3442
|
55
55
|
orangecontrib/tomwer/widgets/control/TomoObjSeriesOW.py,sha256=Db15EPVFPXxkIoEye2NbpyD_hAWmg1OkZVaeON7shVM,1905
|
56
56
|
orangecontrib/tomwer/widgets/control/VolumeSelector.py,sha256=2wDvqpmlHmmG2svlJd0oSTbXYbFv3xBKU63gp3LjoCg,4013
|
57
|
-
orangecontrib/tomwer/widgets/control/__init__.py,sha256=
|
57
|
+
orangecontrib/tomwer/widgets/control/__init__.py,sha256=F_-1j8jKiR-F4EU63uH4GwdOSypOVprH5VmLDvXxc6o,406
|
58
58
|
orangecontrib/tomwer/widgets/control/icons/advancement.png,sha256=Uv_Eb1nzkb6IVj0u4btrz5_DD126aYPZcls7U40jIEw,729
|
59
59
|
orangecontrib/tomwer/widgets/control/icons/advancement.svg,sha256=tNLbRofd2oT1bHov49X3q-YVNwtHEgrW3HfPc5i80js,5781
|
60
60
|
orangecontrib/tomwer/widgets/control/icons/concatenate_nxtomos.png,sha256=TzB-Npgual5npoBsUXt4QWfCCJA8nD8hLf3C-BjMRXs,768
|
@@ -97,12 +97,12 @@ orangecontrib/tomwer/widgets/control/icons/volumesymlink.png,sha256=Gf9qmYvxpnGM
|
|
97
97
|
orangecontrib/tomwer/widgets/control/icons/volumesymlink.svg,sha256=jVIt49I_7VeN9OQF1GeSujP_KwegQD4YFmIqOA-Jv9c,5786
|
98
98
|
orangecontrib/tomwer/widgets/control/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
99
99
|
orangecontrib/tomwer/widgets/dataportal/PublishProcessedDataOW.py,sha256=Sj2rRS_RKnDXLTbtxBprB51uV3_G4rbD-Sy5h75iQ_U,5724
|
100
|
-
orangecontrib/tomwer/widgets/dataportal/__init__.py,sha256=
|
100
|
+
orangecontrib/tomwer/widgets/dataportal/__init__.py,sha256=TXA_tTnf6PadfdG3gBi5hD6RvfcrIH2FWRHM2splEMQ,444
|
101
101
|
orangecontrib/tomwer/widgets/dataportal/icons/publish_processed_data.png,sha256=ZfThE_Or-fxNtnZnztNmLZ9XAS5sLTkOTpviE4xJN_s,2866
|
102
102
|
orangecontrib/tomwer/widgets/dataportal/icons/publish_processed_data.svg,sha256=RWwPD-d9NRdV5vRjE_STgC1v4hH0nEo7aeBtfKFhUH4,22489
|
103
103
|
orangecontrib/tomwer/widgets/debugtools/DatasetGeneratorOW.py,sha256=gqtZw3UXtsdQQXz4uesIhwM3QdvGyTnxV35luybZ2As,5045
|
104
104
|
orangecontrib/tomwer/widgets/debugtools/ObjectInspectorOW.py,sha256=KEu0I4Y7EyZ6iKIBji-0nrg1qUXDGiJCcdTASymUc54,1106
|
105
|
-
orangecontrib/tomwer/widgets/debugtools/__init__.py,sha256=
|
105
|
+
orangecontrib/tomwer/widgets/debugtools/__init__.py,sha256=xtFgCF5BKyhxSOP7Xsg2aYtKD80qUnOX7iTSt34sYfo,346
|
106
106
|
orangecontrib/tomwer/widgets/debugtools/icons/hammer.png,sha256=5z_sXTWfAMCYhKbvLdiOmil8BpSxUICI_Y1BW9NL0Co,2034
|
107
107
|
orangecontrib/tomwer/widgets/debugtools/icons/hammer.svg,sha256=7uovCO-33EP_A6sjGzQMkvF59hdF_Aj1hzr5yIAfDjk,3191
|
108
108
|
orangecontrib/tomwer/widgets/debugtools/icons/inspector.png,sha256=sNTPrEEDGQHwU-O6hXBZfdmXeUWUarZPsL3s6l9opSE,1020
|
@@ -112,7 +112,7 @@ orangecontrib/tomwer/widgets/edit/DarkFlatPatchOW.py,sha256=fJuVlzd5mBRWOwKxRltl
|
|
112
112
|
orangecontrib/tomwer/widgets/edit/ImageKeyEditorOW.py,sha256=qTI6B3cA-THpW3I7GJsP808vMCGX2XoQ-LzUqBeyvtY,3506
|
113
113
|
orangecontrib/tomwer/widgets/edit/ImageKeyUpgraderOW.py,sha256=X9IXgm65Nq1TeDnYYIuyo8KlYfda2LQ38MtX_9rLQj8,3672
|
114
114
|
orangecontrib/tomwer/widgets/edit/NXtomoEditorOW.py,sha256=PPSP8kqnkmHeeY4RW9IjH9n848W5MkCEQp4Emw8D17U,3744
|
115
|
-
orangecontrib/tomwer/widgets/edit/__init__.py,sha256=
|
115
|
+
orangecontrib/tomwer/widgets/edit/__init__.py,sha256=PpGNkRtMR-DnYWKixSHpvNqO8K2I9jpgeJ4NR_Gg5i0,314
|
116
116
|
orangecontrib/tomwer/widgets/edit/icons/image_key_editor.png,sha256=Fl6PEgzY9Gjs6Sh_vMWHCXVtNJ_wiQ5e9g58rZI64ng,878
|
117
117
|
orangecontrib/tomwer/widgets/edit/icons/image_key_editor.svg,sha256=9viXpjZxrXDx6qgWbRByvvqbBLcleUS1viFpSVDdFgg,7396
|
118
118
|
orangecontrib/tomwer/widgets/edit/icons/image_key_upgrader.png,sha256=jHnMOdF8A2H5KTZ0oG64OlKWA9MDhLW8L-mYS3HH4UA,998
|
@@ -143,7 +143,7 @@ orangecontrib/tomwer/widgets/icons/tomwer_visu.png,sha256=RuUI1bQwURe8iGkKhN3QzP
|
|
143
143
|
orangecontrib/tomwer/widgets/icons/tomwer_visu.svg,sha256=KGi42uPMqTtLtj5pYc6slvCPN53MOOI8b0iRQx2sSBM,18818
|
144
144
|
orangecontrib/tomwer/widgets/other/PythonScriptOW.py,sha256=49xYuqFsNZicGLX4hLHzQXsEwLr8v2CvrI43I4BL3o0,28273
|
145
145
|
orangecontrib/tomwer/widgets/other/TomoObjsHub.py,sha256=WMbqQO2LB7tFtzaeQirPt8ylKVvE4zxMvClsyImOGN8,886
|
146
|
-
orangecontrib/tomwer/widgets/other/__init__.py,sha256=
|
146
|
+
orangecontrib/tomwer/widgets/other/__init__.py,sha256=Y4LoexhNGqw5oKNHJ6yxQliPNPeQSAY6C9MQBULNg50,299
|
147
147
|
orangecontrib/tomwer/widgets/other/icons/PythonScript.svg,sha256=-8O2mNwRmyVdFvpcJsXLlOPcn50Sbv_qFHet1IF9T6A,5501
|
148
148
|
orangecontrib/tomwer/widgets/other/icons/hub.png,sha256=wnKSaxw2WnBkSQjI86aLZfdmKvV31Vputq1zukQIrXk,1122
|
149
149
|
orangecontrib/tomwer/widgets/other/icons/hub.svg,sha256=9EYoBKY-P-cO17nM48OPA9VDZSCbyGtrMRc80BGHflk,3735
|
@@ -157,7 +157,7 @@ orangecontrib/tomwer/widgets/reconstruction/NabuVolumeOW.py,sha256=j-jDhgv6jvNOB
|
|
157
157
|
orangecontrib/tomwer/widgets/reconstruction/SAAxisOW.py,sha256=6v57MWWDejzf5tcU3RqwQOIIsYyZn4lzP_JUq5WcElQ,17488
|
158
158
|
orangecontrib/tomwer/widgets/reconstruction/SADeltaBetaOW.py,sha256=3-JUMNswoAVcycHLZBfZJGWyVDNKx6ZSz3ZgxxV1q2I,14005
|
159
159
|
orangecontrib/tomwer/widgets/reconstruction/SinoNormOW.py,sha256=HVia_JxLIpk6oP-6fza4wYhXsG3i2dLvA5XxrWfQpac,8843
|
160
|
-
orangecontrib/tomwer/widgets/reconstruction/__init__.py,sha256=
|
160
|
+
orangecontrib/tomwer/widgets/reconstruction/__init__.py,sha256=uMWYU54-b_YyVIpUrXus-BZd-3-7BHToTB-yFu5zbC0,372
|
161
161
|
orangecontrib/tomwer/widgets/reconstruction/icons/axis.png,sha256=aR8oqTY-fJVnlitEuiJmFIYSeRfZmbrEBO2InrwHHOk,1286
|
162
162
|
orangecontrib/tomwer/widgets/reconstruction/icons/axis.svg,sha256=JpLrZlH3IiAC7Ea53PwFIWZCPTY-BnlduJ_FEnY6sG8,5426
|
163
163
|
orangecontrib/tomwer/widgets/reconstruction/icons/bricks.png,sha256=nAVSPm14Ym1-nyGjSjw70x74WXto0AtzzoCBB0m80_Y,8121
|
@@ -187,7 +187,7 @@ orangecontrib/tomwer/widgets/reconstruction/icons/tomwer.png,sha256=M9IWm_TDKlSA
|
|
187
187
|
orangecontrib/tomwer/widgets/reconstruction/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
188
188
|
orangecontrib/tomwer/widgets/stitching/StitcherOW.py,sha256=j4UQPKYlGVcp2b5C9qntenKUltc9z-nMopjdE1SZMpw,2351
|
189
189
|
orangecontrib/tomwer/widgets/stitching/ZStitchingConfigOW.py,sha256=IMYeOLCxPEF6XVGljWochfKvPsyaYW0jRF8foP51BpU,3271
|
190
|
-
orangecontrib/tomwer/widgets/stitching/__init__.py,sha256=
|
190
|
+
orangecontrib/tomwer/widgets/stitching/__init__.py,sha256=3M-zKPHcJMwqiaY3gck-D6I0M4CuHOuV0eRyiXYgVl8,330
|
191
191
|
orangecontrib/tomwer/widgets/stitching/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
192
192
|
orangecontrib/tomwer/widgets/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
193
193
|
orangecontrib/tomwer/widgets/visualization/DataViewerOW.py,sha256=pONhuu2Uu0FX2cbgWl3R_HT6OLh-vXRrKFKYrMPOsD8,4059
|
@@ -198,7 +198,7 @@ orangecontrib/tomwer/widgets/visualization/SampleMovedOW.py,sha256=5uoA6SST3S-oU
|
|
198
198
|
orangecontrib/tomwer/widgets/visualization/SinogramViewerOW.py,sha256=hwBO0OXArhHSRPGAXK4E8FxWB90Ox_2xMYuEeNahdMs,1876
|
199
199
|
orangecontrib/tomwer/widgets/visualization/SliceStackOW.py,sha256=4z0GBlIMQB5mBwOoToWKTSt014EWmuV7-QvBI6KW0oc,2756
|
200
200
|
orangecontrib/tomwer/widgets/visualization/VolumeViewerOW.py,sha256=63lyoHyxRtdk7_jeLRVgj9ZDzRtac4-o9ZuqrmEHJ00,1865
|
201
|
-
orangecontrib/tomwer/widgets/visualization/__init__.py,sha256=
|
201
|
+
orangecontrib/tomwer/widgets/visualization/__init__.py,sha256=tMH57IHTUAp0kCNtubCZsmhy7fL_SvAx003jRY72O5k,396
|
202
202
|
orangecontrib/tomwer/widgets/visualization/icons/diff.png,sha256=2U0kPm-BhgDJsUAmBLCBSkJOkG2s3uSE5egegbwxrOU,378
|
203
203
|
orangecontrib/tomwer/widgets/visualization/icons/diff.svg,sha256=ylAT_OgqRhiC81w06XCaE2lVUOYOW8XtuU3Hb_IV5UI,7693
|
204
204
|
orangecontrib/tomwer/widgets/visualization/icons/esrf.png,sha256=keM4tfcuTQ3k3IGxx3tOW5sHiyegJgmbvYklo6e2M5U,105862
|
@@ -217,10 +217,10 @@ orangecontrib/tomwer/widgets/visualization/icons/tomwer.png,sha256=M9IWm_TDKlSA6
|
|
217
217
|
orangecontrib/tomwer/widgets/visualization/icons/volumeviewer.png,sha256=8XwGE5maqQdjmU7_EWcqiuOG7xsf7ycNUJ_40UvpYeA,4372
|
218
218
|
orangecontrib/tomwer/widgets/visualization/icons/volumeviewer.svg,sha256=2uT9_px6VBxkC6RxD0QrQVzcBusDlNVKwekh551EF0A,8454
|
219
219
|
orangecontrib/tomwer/widgets/visualization/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
220
|
-
tomwer/__init__.py,sha256=
|
220
|
+
tomwer/__init__.py,sha256=cMIyH-uRxpa9WVnAuWjiBD7k9TK57WO21RzP_S-Mb8I,460
|
221
221
|
tomwer/__main__.py,sha256=7tCADiS4u7k1PCxFhlRAcYSIOpxQTGUTx8sCEQ-hi1E,8707
|
222
222
|
tomwer/utils.py,sha256=7h7dEgKAEUmQ43jkULvC1B9Adl55nkCty-SEKUKCl4U,7008
|
223
|
-
tomwer/version.py,sha256=
|
223
|
+
tomwer/version.py,sha256=69GoZku3KcVoMi8E2-7j4OrMNv9ytmND71aPCf4NsY8,4386
|
224
224
|
tomwer/app/__init__.py,sha256=RYMB2YhbQaoMXC8W-oOyfZ_Y1vmHD7L13YkKeAMuShM,85
|
225
225
|
tomwer/app/axis.py,sha256=OhDgMj_gS-45PnjKBTyOCOkmZ1Iy-Tb6Dj66mzQg0sU,5827
|
226
226
|
tomwer/app/canvas.py,sha256=sM368nniUwbQXLA-oNCg1iNwMMol_ZGTKbiw8WsC4yw,1539
|
@@ -256,6 +256,7 @@ tomwer/app/stitching/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
|
|
256
256
|
tomwer/app/stitching/common.py,sha256=TCXNnAz2MSJrrogB5iWptktxq-g5ED2FUt_jMnDXpnQ,14723
|
257
257
|
tomwer/core/__init__.py,sha256=ry3BZxaZzsbjymW1wqPcKROzJO9ePkiiqWp1JRVOrS8,72
|
258
258
|
tomwer/core/futureobject.py,sha256=YQE6zROyDFu2PYBI7hxZKpn-K_FqZQ9xGSIyqMErK5U,5114
|
259
|
+
tomwer/core/resourcemanager.py,sha256=VLNnVodMa-HOMZhN2qpUR_L6phJ8IHPUEPYMxuW6VHg,1067
|
259
260
|
tomwer/core/settings.py,sha256=57qD44LU_3eB50rD7RHdg5nBweiHerzWbXHcBUna6gY,4089
|
260
261
|
tomwer/core/signal.py,sha256=I5TUcyeBZzrEh1SFGs-ylJSL1aBs41ZFb3IJo3O_55c,6115
|
261
262
|
tomwer/core/tomwer_object.py,sha256=rIaD1QlN3Q0cR5h9Sap1Whn4lawu5z9zZ1KspdhYbg0,2023
|
@@ -334,14 +335,14 @@ tomwer/core/process/reconstruction/darkref/settings.py,sha256=35jliuOIjMKTOJjgn4
|
|
334
335
|
tomwer/core/process/reconstruction/nabu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
335
336
|
tomwer/core/process/reconstruction/nabu/castvolume.py,sha256=4VEVnJxWfG8_Ku2uhUSQAgGfvP_08mXswmC3bHU7E4M,9317
|
336
337
|
tomwer/core/process/reconstruction/nabu/helical.py,sha256=gauUkoPiShvnvMQrCQXv28g0yLe-GceML5kYMSXmNIg,1997
|
337
|
-
tomwer/core/process/reconstruction/nabu/nabucommon.py,sha256=
|
338
|
+
tomwer/core/process/reconstruction/nabu/nabucommon.py,sha256=fMMplu59iuh5bh_06JIVtSWRPXpThL4NJD_JRl8NVNk,24555
|
338
339
|
tomwer/core/process/reconstruction/nabu/nabuscores.py,sha256=e5tRG1QtmVAdXb8KHMTMtBXA3KQXqKKcqipY2HzMURg,25275
|
339
340
|
tomwer/core/process/reconstruction/nabu/nabuslices.py,sha256=WAmNlfyRWL0zhEE8jMjMg7WyzPM4BcBA6bWpaH8O53A,32101
|
340
341
|
tomwer/core/process/reconstruction/nabu/nabuvolume.py,sha256=Fn0tkPDTDJQaMEJA4LzpPp0ZtG4MIu9YN82-jesxRKo,20052
|
341
342
|
tomwer/core/process/reconstruction/nabu/plane.py,sha256=366gWprWw8Rlob8jsMn753CqgudruvvVauU0ihH2lU4,400
|
342
343
|
tomwer/core/process/reconstruction/nabu/settings.py,sha256=3AJpxVQbJziw4v6F26Ppz8Q9vc9ZNepTWygqpCAbIEM,955
|
343
344
|
tomwer/core/process/reconstruction/nabu/target.py,sha256=59BbpzpBRVKEpZowcZVgdAj1GLKZGVJ52s3XA7ouLPs,122
|
344
|
-
tomwer/core/process/reconstruction/nabu/utils.py,sha256=
|
345
|
+
tomwer/core/process/reconstruction/nabu/utils.py,sha256=ymORZjJR7YkQ0VBujDyptF0xXzkj1dCwo29NjXvhA2E,16140
|
345
346
|
tomwer/core/process/reconstruction/nabu/test/test_castvolume.py,sha256=v7USCU3z0zeW4TPs-slNJJei6t6B_UeqeJG5MV9qRII,3881
|
346
347
|
tomwer/core/process/reconstruction/nabu/test/test_nabu_utils.py,sha256=8HpR_1iLkE32GYYaOyS84SR7_5nh1e48E3W4N34666g,15347
|
347
348
|
tomwer/core/process/reconstruction/nabu/test/test_nabunormalization.py,sha256=5rHDwUROEBlsEFsZoy8mmcdRpziEetF9g_oFyxlvS6k,6010
|
@@ -426,7 +427,7 @@ tomwer/core/utils/deprecation.py,sha256=D3hS_ZzBQgjYG5UmZW5KaPPlHaH1OZVXePGCdIVt
|
|
426
427
|
tomwer/core/utils/dictutils.py,sha256=9BEwERAYGL4tW06jTNGhgsJ2f4dojtYMmNixHoRF3XA,466
|
427
428
|
tomwer/core/utils/ftseriesutils.py,sha256=HIiUzEPO9k3dRAYr0WB4LYqEifQ624r1HqMi3TaVHMA,1064
|
428
429
|
tomwer/core/utils/gpu.py,sha256=4s0A3DViEKBvUtfKl0GzddZJyLCLeRJgKZpnIjihvyE,458
|
429
|
-
tomwer/core/utils/image.py,sha256=
|
430
|
+
tomwer/core/utils/image.py,sha256=vjUGRSFEn8WdlZ_2jpHHgVQjx4ac1Qa_0Cgspo-bR1c,3527
|
430
431
|
tomwer/core/utils/lbsram.py,sha256=MOhgaDUBsIt2fU2KVPBy9lsJ7BGwXZCc0VDKK3tH2HI,988
|
431
432
|
tomwer/core/utils/logconfig.py,sha256=p3ggqsukcsksEFhLztYjX8tRcUD3VMn9JVCvFpSUplM,85
|
432
433
|
tomwer/core/utils/normalization.py,sha256=078TPG4wY9JhUOAqKZmN50w2j-7-cEs30UmiXNlYKOs,1548
|
@@ -545,7 +546,7 @@ tomwer/gui/reconstruction/axis/AxisSettingsWidget.py,sha256=7GpHteE2j9RUo-jUQoJd
|
|
545
546
|
tomwer/gui/reconstruction/axis/AxisWidget.py,sha256=nkORZHLo8D3Sk8j-8QVr9l3Qse66s-Nv-tB6kCkSMTY,19794
|
546
547
|
tomwer/gui/reconstruction/axis/CalculationWidget.py,sha256=E9zwJ2dNnc7KGH1QHRZE2eElIzj_r4GbPCIG_hn2yhw,8628
|
547
548
|
tomwer/gui/reconstruction/axis/CompareImages.py,sha256=jqzlMBU_tfIdR1yHuZa8Avt8Te0EPBkjI6R4TY6kIlw,11425
|
548
|
-
tomwer/gui/reconstruction/axis/ControlWidget.py,sha256=
|
549
|
+
tomwer/gui/reconstruction/axis/ControlWidget.py,sha256=w2kNLuIhQhGT3KpEYWWq4XJks3Kr7R2aOPCTKz4je4U,10709
|
549
550
|
tomwer/gui/reconstruction/axis/EstimatedCORWidget.py,sha256=dL9SCjPEZ7MQLGZP0gZARb-rxD8YYSl-gcFyuN14jwg,17081
|
550
551
|
tomwer/gui/reconstruction/axis/EstimatedCorComboBox.py,sha256=Hq8o6X5-iVMqltGcpy2E5OpCP5nNV353Mepsf_R7zVY,4434
|
551
552
|
tomwer/gui/reconstruction/axis/InputWidget.py,sha256=UhEWL3aJG56PfkI7DKw-sBd6hDsRJ2NnQ0XN0nBmM6g,13052
|
@@ -560,7 +561,7 @@ tomwer/gui/reconstruction/nabu/check.py,sha256=5DYLlVCyXm3ax5VgogX79n1Oyl3O_JUvZ
|
|
560
561
|
tomwer/gui/reconstruction/nabu/helical.py,sha256=TAVPcuZdgtZSz37ESqi_yuLhYuNnGde_0drvjTntahs,3708
|
561
562
|
tomwer/gui/reconstruction/nabu/nabuflow.py,sha256=1qen0DnEDMAM1lqNaJJL_QT_h0VeRz_KxN7GDG9G0Iw,15508
|
562
563
|
tomwer/gui/reconstruction/nabu/platform.py,sha256=eSPs2yUfBSHsqZ8bYY_BJ7zuRXc5sxXA4lRxlQaFBz0,3859
|
563
|
-
tomwer/gui/reconstruction/nabu/slices.py,sha256=
|
564
|
+
tomwer/gui/reconstruction/nabu/slices.py,sha256=cGfdtvpTqJ0sujMIxjf0xyTgSl6YlRRAGcPGlTkVRaw,24380
|
564
565
|
tomwer/gui/reconstruction/nabu/slurm.py,sha256=yfJD8KgX45Be5CUi6bn2CdocrQemJPxDYBBqoLoXqn0,1268
|
565
566
|
tomwer/gui/reconstruction/nabu/volume.py,sha256=nqJvoj4dIMbLGNxXzxHngM5V0PBoyPOMvwbNGPAXSas,17837
|
566
567
|
tomwer/gui/reconstruction/nabu/nabuconfig/__init__.py,sha256=WgEFXIrUDhX0vpBNlKiymHEY9p1DMdk4QZkvnXIC8yk,77
|
@@ -570,7 +571,7 @@ tomwer/gui/reconstruction/nabu/nabuconfig/nabuconfig.py,sha256=rJXFMr_dlTekd0mCb
|
|
570
571
|
tomwer/gui/reconstruction/nabu/nabuconfig/output.py,sha256=0SShYqvFj-motxTw20e3I1Z0WiierSqgOsN15qwe-TY,11907
|
571
572
|
tomwer/gui/reconstruction/nabu/nabuconfig/phase.py,sha256=h4F0qtKXOeligVuqKa-pBAvP2ol2EgfSRHjxvsQkvAQ,16293
|
572
573
|
tomwer/gui/reconstruction/nabu/nabuconfig/preprocessing.py,sha256=lmL2UTL7gt20nbDv921SFIAnVoJkumafSCjqTE4zGlY,32608
|
573
|
-
tomwer/gui/reconstruction/nabu/nabuconfig/reconstruction.py,sha256=
|
574
|
+
tomwer/gui/reconstruction/nabu/nabuconfig/reconstruction.py,sha256=O1h59xVaDr0TDmP7hia_1nQQ01uNyos2oqVYLCpIkfk,41198
|
574
575
|
tomwer/gui/reconstruction/nabu/test/test_cast_volume.py,sha256=kup5JVKNN4QZOXYGco1ZRb_4TWrXAQOtfuQcqTpraA0,2764
|
575
576
|
tomwer/gui/reconstruction/nabu/test/test_check.py,sha256=KXg1Gg4FVjQ9GkBOgb0ZJh6_c3JMeJTtyX5UVY6vdms,2318
|
576
577
|
tomwer/gui/reconstruction/nabu/test/test_ctf.py,sha256=uiJznrY6ScH51xaaSUFfplg9XJcFacczIV8_7k9tuRg,1554
|
@@ -668,7 +669,7 @@ tomwer/gui/visualization/scanoverview.py,sha256=boXasH759jc8p9v43nFqq6oxFGDMn8gg
|
|
668
669
|
tomwer/gui/visualization/sinogramviewer.py,sha256=M91xw63ptfG1erPt6jvFH5uqmV6KUm1B4xreco6Ixto,8380
|
669
670
|
tomwer/gui/visualization/tomoobjoverview.py,sha256=8tsVhTZw0upDSYzE1W8VXCWMBmSFcEP7SlcGA6Nl6ig,1995
|
670
671
|
tomwer/gui/visualization/volumeoverview.py,sha256=k0OLdw5dvbDlWFnk6I8TlrJu03dmKToCZVEtmAh_U9M,2496
|
671
|
-
tomwer/gui/visualization/volumeviewer.py,sha256=
|
672
|
+
tomwer/gui/visualization/volumeviewer.py,sha256=CVfRj_azmrfoSztjX3l6nnQ9Yoyk9yhNbREoXRRq7eY,17648
|
672
673
|
tomwer/gui/visualization/diffviewer/__init__.py,sha256=rZ7qOTfAChU3FouCdkZllXT9ZZqTdo1XhLZMfmOqUAE,39
|
673
674
|
tomwer/gui/visualization/diffviewer/diffviewer.py,sha256=_MOApAnImO7cYg0-Oz8EKfJt0hWeDqusYLZ_gBrRRdk,20556
|
674
675
|
tomwer/gui/visualization/diffviewer/shiftwidget.py,sha256=7gD_mo9P7HXklD416BScUnrQNDDqXkItgkzehqBam00,19608
|
@@ -847,6 +848,7 @@ tomwer/synctools/tests/test_darkRefs.py,sha256=1OgWaV-hgDmi4rkh0hxjCW_codBAnxNhp
|
|
847
848
|
tomwer/synctools/tests/test_foldertransfer.py,sha256=ZFIJWSjgYAWw3ktzamid5DJZNnMkAV6Pj72dKG69cJc,12024
|
848
849
|
tomwer/synctools/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
849
850
|
tomwer/synctools/utils/scanstages.py,sha256=vIUKVDSfM2UwPjjmZTiIN1tNg4antnGcSPv1aYapJCY,7830
|
851
|
+
tomwer/tasks/reconstruction/cleardarkflat.py,sha256=NW7xtaxF8-VRz0fFOUyotnyG5514YamwPtX6r2SZ-0s,1329
|
850
852
|
tomwer/tests/__init__.py,sha256=dPPaIvpzHssjwxsMzYJM_gxQ2e0cnRyQHXxi9ux6ZOY,19
|
851
853
|
tomwer/tests/conftest.py,sha256=0XlKfOrVtPg8VmyQn4BoK_mzcliFUtacDGLlZ5wD_PM,1912
|
852
854
|
tomwer/tests/datasets.py,sha256=QXQ3jSwgWzfq4CaELOSrk9kHg5GmrP7kGHsdOlNSEIE,336
|
@@ -903,9 +905,9 @@ tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_volume_viewer
|
|
903
905
|
tomwer/tests/test_ewoks/test_conversion.py,sha256=a8cEWbErXiFCAkaapi0jeEoRKYxcFQCoa-Jr_u77_OM,3656
|
904
906
|
tomwer/tests/test_ewoks/test_single_node_execution.py,sha256=YBUHfiAnkciv_kjj7biC5fOs7c7ofNImM_azGMn4LZM,2813
|
905
907
|
tomwer/tests/test_ewoks/test_workflows.py,sha256=Eq80eexf5NVL7SzvwctLOaUeuQ8V3vDiFiHgbJA4Yb8,4871
|
906
|
-
tomwer-1.4.
|
907
|
-
tomwer-1.4.
|
908
|
-
tomwer-1.4.
|
909
|
-
tomwer-1.4.
|
910
|
-
tomwer-1.4.
|
911
|
-
tomwer-1.4.
|
908
|
+
tomwer-1.4.6.dist-info/LICENSE,sha256=62p1wL0n9WMTu8x2YDv0odYgTqeSvTd9mQ0v6Mq7lzE,1876
|
909
|
+
tomwer-1.4.6.dist-info/METADATA,sha256=TQPiVdXJJAx3zhFXOq4jRbjX0WSafNX2ZmOyrDeTQWk,13377
|
910
|
+
tomwer-1.4.6.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
911
|
+
tomwer-1.4.6.dist-info/entry_points.txt,sha256=py3ZUWvGnWGc5c7Yhw_uBTm8Fmew0BDw3aQZnWMBNZI,500
|
912
|
+
tomwer-1.4.6.dist-info/top_level.txt,sha256=Yz5zKh0FPiImtzHYcPuztG1AO8-6KEpUWgoChGbA0Ys,21
|
913
|
+
tomwer-1.4.6.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|