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.
Files changed (28) hide show
  1. orangecontrib/tomwer/__init__.py +4 -0
  2. orangecontrib/tomwer/widgets/__init__.py +3 -23
  3. orangecontrib/tomwer/widgets/cluster/__init__.py +3 -23
  4. orangecontrib/tomwer/widgets/control/__init__.py +4 -23
  5. orangecontrib/tomwer/widgets/dataportal/__init__.py +5 -0
  6. orangecontrib/tomwer/widgets/debugtools/__init__.py +3 -23
  7. orangecontrib/tomwer/widgets/edit/__init__.py +3 -23
  8. orangecontrib/tomwer/widgets/other/__init__.py +3 -23
  9. orangecontrib/tomwer/widgets/reconstruction/__init__.py +3 -23
  10. orangecontrib/tomwer/widgets/stitching/__init__.py +4 -0
  11. orangecontrib/tomwer/widgets/visualization/__init__.py +3 -23
  12. tomwer/__init__.py +2 -1
  13. tomwer/core/process/reconstruction/nabu/nabucommon.py +48 -24
  14. tomwer/core/process/reconstruction/nabu/utils.py +2 -14
  15. tomwer/core/resourcemanager.py +33 -0
  16. tomwer/core/utils/image.py +2 -2
  17. tomwer/gui/reconstruction/axis/ControlWidget.py +1 -1
  18. tomwer/gui/reconstruction/nabu/nabuconfig/reconstruction.py +3 -2
  19. tomwer/gui/reconstruction/nabu/slices.py +3 -3
  20. tomwer/gui/visualization/volumeviewer.py +19 -3
  21. tomwer/tasks/reconstruction/cleardarkflat.py +38 -0
  22. tomwer/version.py +1 -1
  23. {tomwer-1.4.4.dist-info → tomwer-1.4.6.dist-info}/METADATA +2 -2
  24. {tomwer-1.4.4.dist-info → tomwer-1.4.6.dist-info}/RECORD +28 -26
  25. {tomwer-1.4.4.dist-info → tomwer-1.4.6.dist-info}/WHEEL +1 -1
  26. {tomwer-1.4.4.dist-info → tomwer-1.4.6.dist-info}/LICENSE +0 -0
  27. {tomwer-1.4.4.dist-info → tomwer-1.4.6.dist-info}/entry_points.txt +0 -0
  28. {tomwer-1.4.4.dist-info → tomwer-1.4.6.dist-info}/top_level.txt +0 -0
@@ -1,3 +1,7 @@
1
+ """
2
+ Orange add-on for tomography
3
+ """
4
+
1
5
  import logging
2
6
 
3
7
  from . import state_summary # noqa F401
@@ -1,26 +1,6 @@
1
- # coding: utf-8
2
- ###########################################################################
3
- # Copyright (C) 2016 European Synchrotron Radiation Facility
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
- # coding: utf-8
2
- ###########################################################################
3
- # Copyright (C) 2016-2021 European Synchrotron Radiation Facility
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
- # coding: utf-8
2
- ###########################################################################
3
- # Copyright (C) 2016 European Synchrotron Radiation Facility
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,3 +1,8 @@
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
+ """
5
+
1
6
  NAME = "data portal"
2
7
 
3
8
  ID = "orangecontrib.tomwer.widgets.dataportal"
@@ -1,26 +1,6 @@
1
- # coding: utf-8
2
- ###########################################################################
3
- # Copyright (C) 2016 European Synchrotron Radiation Facility
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
- # coding: utf-8
2
- ###########################################################################
3
- # Copyright (C) 2016 European Synchrotron Radiation Facility
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
- # coding: utf-8
2
- ###########################################################################
3
- # Copyright (C) 2016 European Synchrotron Radiation Facility
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
- # coding: utf-8
2
- ###########################################################################
3
- # Copyright (C) 2016 European Synchrotron Radiation Facility
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,3 +1,7 @@
1
+ """
2
+ (Ewoks)Orange Widgets for pre or post processing stitching
3
+ """
4
+
1
5
  NAME = "stitching"
2
6
 
3
7
  ID = "orangecontrib.tomwer.widgets.stitching"
@@ -1,26 +1,6 @@
1
- # coding: utf-8
2
- ###########################################################################
3
- # Copyright (C) 2016 European Synchrotron Radiation Facility
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
@@ -1,6 +1,7 @@
1
1
  # coding: utf-8
2
2
  """
3
- tomwer tests
3
+ Applications and library for tomography processing.
4
+ Provides ewoks tasks, several GUI for nabu as several utils.
4
5
  """
5
6
 
6
7
  from __future__ import absolute_import, division, print_function
@@ -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 is Target.LOCAL:
283
- _logger.info(f"run {info} for {self.scan} with {config_to_dump}")
284
- return self._run_nabu_locally(
285
- conf_file=config_file,
286
- file_format=file_format,
287
- config_to_dump=config_to_dump,
288
- axis=config_to_dump["reconstruction"].get("slice_plane", "XY"),
289
- )
290
- elif self.target is Target.SLURM:
291
- _logger.info(
292
- f"run {info} on slurm for {self.scan.path} with {config_to_dump}"
293
- )
294
- return self._run_nabu_on_slurm(
295
- conf_file=config_file,
296
- config_to_dump=config_to_dump,
297
- cluster_config=self.cluster_config.to_dict(),
298
- process_name=process_name,
299
- info=info,
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
- recons_urls = utils.get_recons_volume_identifier(
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=recons_urls,
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(f"conf_file is expected to be a strg not {type(conf_file)}")
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 strg not {type(config_to_dump)}"
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()
@@ -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.mat([[min0], [me0], [max0]])
120
- matr = numpy.mat(
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 is None or (
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 projections angles", self)
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._triggerConfigchanged)
524
- self._nabuModeCB.currentIndexChanged.connect(self._triggerConfigchanged)
523
+ self._configuration.sigConfChanged.connect(self._triggerConfigChanged)
524
+ self._nabuModeCB.currentIndexChanged.connect(self._triggerConfigChanged)
525
525
 
526
- def _triggerConfigchanged(self, *args, **kwargs):
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
- qt.QMainWindow.__init__(self, parent)
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
@@ -77,7 +77,7 @@ RELEASE_LEVEL_VALUE = {
77
77
 
78
78
  MAJOR = 1
79
79
  MINOR = 4
80
- MICRO = 4
80
+ MICRO = 6
81
81
  RELEV = "final" # <16
82
82
  SERIAL = 0 # <16
83
83
 
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: tomwer
3
- Version: 1.4.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=B4DXy1gY_wXmNYa2aOfapmJb2mEuCAjoaNEGnpBs70g,148
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=opiulo6YDS3ppJAH_gqajJoKBPX4CqLXMPZiaJdXhBI,2449
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=HyTijuJFHFyl5n94nCWREgTxbE3olYsYLAFshjTMNN4,1614
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=SaP5K3r1k3BqnHyNEKKApBnfDXucbryi4HexMvokYhQ,1545
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=OrDOA9NXVUgLubiOXCJhWrhEohMk6u3ZWchQ6d0d1_k,292
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=yYF1v2MWP4g1uXZOw3qPPvDnX8KKzauVTRit6fJ9MWM,1553
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=Vi59fYTOMhrLXwQ3OkMIonmHx4rG_UUnutZPiax_rGY,1555
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=7Ca9kD-HBAYOI72go7FckSGSeBSMmZn17Wt2ZNVbK5o,1512
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=lgfP-eyIPCwy2R5FVl7uBcO17ESpLbkB1YSvieFRqq4,1601
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=TaJoeu_wSmquWmI50AzI0Vo5b3SbhxupWHtltIA_8t0,262
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=fs52099kHZdY65qClB8xci6YOpTjsWzan6SET4147_M,1604
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=GeLSeY4__z-HQZu1y4ptZ5Y1OeXFvG8kuEwWXhkeaMA,360
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=cQn0hp7H0RGoblTK9Od0_A4QCnVaVE5G-t2RThewbMg,4386
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=s1KxEzHQJ09JEWP3_EvKFe51k1boi_a8YRlbs3TppdE,23338
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=MvGMeAKrpSzScvRowe2ZbyQyNLj80vxm3jk-ldMMPEU,16519
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=YQntctscWmOcF6c5bnhS_mgMu2MHSkQmzgyAur8FsZk,3517
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=DsBPFIEZCva-JPUFxORjkAnoYfgb5udfJ71W-fCwgRY,10686
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=8xNubLOfjKvcl5rYSM2qlYW-1ULJGrtSl114JhSbGB4,24380
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=bGCF7bJBfnh0xh4zcWpqhLrzqHuG32F-Tn4xHVQny3M,41151
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=nT9GXMFZ86Hy6ppCJB_HnE8jFgIyvEmUnPPY1JZau1A,17007
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.4.dist-info/LICENSE,sha256=62p1wL0n9WMTu8x2YDv0odYgTqeSvTd9mQ0v6Mq7lzE,1876
907
- tomwer-1.4.4.dist-info/METADATA,sha256=rX-5hSdlbZ--HdznnGl7KCiDSBycJgqfzwxurDQeYFU,13377
908
- tomwer-1.4.4.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
909
- tomwer-1.4.4.dist-info/entry_points.txt,sha256=py3ZUWvGnWGc5c7Yhw_uBTm8Fmew0BDw3aQZnWMBNZI,500
910
- tomwer-1.4.4.dist-info/top_level.txt,sha256=Yz5zKh0FPiImtzHYcPuztG1AO8-6KEpUWgoChGbA0Ys,21
911
- tomwer-1.4.4.dist-info/RECORD,,
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,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.6.0)
2
+ Generator: setuptools (75.8.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5