tomwer 1.5.0rc3__py3-none-any.whl → 1.5.1__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/tutorials/id16b/ID16b_insitu.ows +1 -1
- orangecontrib/tomwer/tutorials/id16b/ID16b_normalization.ows +1 -1
- tomwer/core/process/reconstruction/nabu/nabuslices.py +18 -5
- tomwer/core/process/reconstruction/saaxis/saaxis.py +4 -0
- tomwer/core/process/reconstruction/tests/test_saaxis.py +56 -66
- tomwer/gui/reconstruction/nabu/nabuconfig/preprocessing.py +3 -3
- tomwer/gui/reconstruction/nabu/slices.py +1 -1
- tomwer/gui/reconstruction/sacommon.py +1 -1
- tomwer/gui/reconstruction/tests/test_nabu.py +2 -2
- tomwer/gui/utils/buttons.py +1 -1
- tomwer/resources/gui/icons/borders.png +0 -0
- tomwer/synctools/stacks/processingstack.py +19 -3
- tomwer/synctools/stacks/reconstruction/nabu.py +5 -0
- tomwer/version.py +3 -3
- {tomwer-1.5.0rc3.dist-info → tomwer-1.5.1.dist-info}/METADATA +1 -1
- {tomwer-1.5.0rc3.dist-info → tomwer-1.5.1.dist-info}/RECORD +20 -19
- {tomwer-1.5.0rc3.dist-info → tomwer-1.5.1.dist-info}/WHEEL +0 -0
- {tomwer-1.5.0rc3.dist-info → tomwer-1.5.1.dist-info}/entry_points.txt +0 -0
- {tomwer-1.5.0rc3.dist-info → tomwer-1.5.1.dist-info}/licenses/LICENSE +0 -0
- {tomwer-1.5.0rc3.dist-info → tomwer-1.5.1.dist-info}/top_level.txt +0 -0
@@ -31,7 +31,7 @@
|
|
31
31
|
<thumbnail />
|
32
32
|
<node_properties>
|
33
33
|
<properties node_id="0" format="literal">{'_muted': False, 'controlAreaVisible': False, 'savedWidgetGeometry': b'\x01\xd9\xd0\xcb\x00\x03\x00\x00\x00\x00\x04n\x00\x00\x01\xfe\x00\x00\x05\xc1\x00\x00\x03-\x00\x00\x04n\x00\x00\x02#\x00\x00\x05\xc1\x00\x00\x03-\x00\x00\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x04n\x00\x00\x02#\x00\x00\x05\xc1\x00\x00\x03-', '__version__': 1}</properties>
|
34
|
-
<properties node_id="1" format="literal">{'_ewoks_default_inputs': {'data': None, 'nabu_params': {'preproc': {'flatfield': 1, '
|
34
|
+
<properties node_id="1" format="literal">{'_ewoks_default_inputs': {'data': None, 'nabu_params': {'preproc': {'flatfield': 1, 'double_flatfield': 0, 'dff_sigma': 0.0, 'ccd_filter_enabled': 0, 'ccd_filter_threshold': 0.04, 'take_logarithm': True, 'log_min_clip': 1e-06, 'log_max_clip': 10.0, 'sino_rings_correction': 'None', 'sino_rings_options': 'sigma=1.0 ; levels=10 ; padding=False', 'tilt_correction': '', 'autotilt_options': '', 'normalize_srcurrent': 1}, 'reconstruction': {'method': 'FBP', 'slice_plane': 'XY', 'angles_file': '', 'axis_correction_file': '', 'angle_offset': 0.0, 'fbp_filter_type': 'ramlak', 'padding_type': 'edges', 'iterations': 200, 'optim_algorithm': 'chambolle-pock', 'weight_tv': 0.01, 'preconditioning_filter': 1, 'positivity_constraint': 1, 'rotation_axis_position': '', 'translation_movements_file': '', 'clip_outer_circle': 1, 'centered_axis': 1, 'start_x': 0, 'end_x': -1, 'start_y': 0, 'end_y': -1, 'start_z': 0, 'end_z': -1, 'enable_halftomo': 0}, 'dataset': {'binning': 1, 'binning_z': 1, 'projections_subsampling': 1}, 'tomwer_slices': 'middle', 'output': {'file_format': 'vol', 'location': '', 'output_dir_mode': 'same folder as scan'}, 'phase': {'method': 'Paganin', 'delta_beta': '180', 'padding_type': 'edge', 'unsharp_coeff': 3.0, 'unsharp_sigma': 0.8, 'ctf_geometry': ' z1_v=None; z1_h=None; detec_pixel_size=None; magnification=True', 'beam_shape': 'parallel', 'ctf_advanced_params': ' length_scale=1e-05; lim1=1e-05; lim2=0.2; normalize_by_mean=True', 'ctf_translations_file': ''}, 'configuration_level': 'optional', 'mode_locked': True, 'cluster_config': None}}, 'controlAreaVisible': True, 'savedWidgetGeometry': b'\x01\xd9\xd0\xcb\x00\x03\x00\x00\x00\x00\x02\xaa\x00\x00\x00\xb4\x00\x00\x083\x00\x00\x04\x12\x00\x00\x02\xaa\x00\x00\x00\xb4\x00\x00\x083\x00\x00\x04\x12\x00\x00\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x02\xaa\x00\x00\x00\xb4\x00\x00\x083\x00\x00\x04\x12', '__version__': 1}</properties>
|
35
35
|
<properties node_id="2" format="pickle">gASVPgEAAAAAAAB9lCiMDl92aWV3ZXJfY29uZmlnlH2UKIwEbW9kZZSMI3RvbXdlci5ndWkudmlz
|
36
36
|
dWFsaXphdGlvbi5kYXRhdmlld2VylIwMX0Rpc3BsYXlNb2RllJOUjAZzbGljZXOUhZRSlIwJc2xp
|
37
37
|
Y2Vfb3B0lGgEjApfU2xpY2VNb2RllJOUjAZsYXRlc3SUhZRSlIwJcmFkaW9fb3B0lGgEjApfUmFk
|
@@ -33,7 +33,7 @@
|
|
33
33
|
<properties node_id="1" format="literal">{'_ewoks_default_inputs': {'data': None, 'dark_ref_params': {'DOWHEN': 'before', 'DARKCAL': 'Average', 'DARKOVE': 1, 'DARKRMV': 0, 'DKFILE': 'darkend[0-9]{3,4}', 'REFSCAL': 'Median', 'REFSOVE': 1, 'REFSRMV': 0, 'RFFILE': 'ref*.*[0-9]{3,4}_[0-9]{3,4}'}}, 'controlAreaVisible': True, 'savedWidgetGeometry': b'\x01\xd9\xd0\xcb\x00\x03\x00\x00\x00\x00\x00H\x00\x00\x00\x1b\x00\x00\x03\xef\x00\x00\x02\x1f\x00\x00\x00H\x00\x00\x00@\x00\x00\x03\xef\x00\x00\x02\x1f\x00\x00\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x00H\x00\x00\x00@\x00\x00\x03\xef\x00\x00\x02\x1f', '__version__': 1}</properties>
|
34
34
|
<properties node_id="2" format="literal">{'_scanIDs': [], 'controlAreaVisible': True, 'savedWidgetGeometry': b'\x01\xd9\xd0\xcb\x00\x03\x00\x00\x00\x00\x02\x80\x00\x00\x01C\x00\x00\x04\xff\x00\x00\x03G\x00\x00\x02\x80\x00\x00\x01h\x00\x00\x04\xff\x00\x00\x03G\x00\x00\x00\x00\x00\x00\x00\x00\x07\x80\x00\x00\x02\x80\x00\x00\x01h\x00\x00\x04\xff\x00\x00\x03G', '__version__': 1}</properties>
|
35
35
|
<properties node_id="3" format="literal">{'_muted': False, 'controlAreaVisible': True, 'savedWidgetGeometry': None, '__version__': 1}</properties>
|
36
|
-
<properties node_id="4" format="literal">{'_ewoks_default_inputs': {'data': None, 'nabu_params': {'preproc': {'flatfield': 1, '
|
36
|
+
<properties node_id="4" format="literal">{'_ewoks_default_inputs': {'data': None, 'nabu_params': {'preproc': {'flatfield': 1, 'double_flatfield': 0, 'dff_sigma': 0.0, 'ccd_filter_enabled': 0, 'ccd_filter_threshold': 0.04, 'take_logarithm': True, 'log_min_clip': 1e-06, 'log_max_clip': 10.0, 'sino_rings_correction': 'None', 'sino_rings_options': 'sigma=1.0 ; levels=10', 'tilt_correction': '', 'autotilt_options': ''}, 'reconstruction': {'method': 'FBP', 'angles_file': '', 'axis_correction_file': '', 'angle_offset': 0.0, 'fbp_filter_type': 'ramlak', 'padding_type': 'edges', 'iterations': 200, 'optim_algorithm': 'chambolle-pock', 'weight_tv': 0.01, 'preconditioning_filter': 1, 'positivity_constraint': 1, 'rotation_axis_position': '', 'translation_movements_file': '', 'clip_outer_circle': 1, 'start_x': 0, 'end_x': -1, 'start_y': 0, 'end_y': -1, 'start_z': 0, 'end_z': -1, 'enable_halftomo': 0}, 'dataset': {'binning': 1, 'binning_z': 1, 'projections_subsampling': 1}, 'tomwer_slices': 'middle', 'output': {'file_format': 'vol', 'location': ''}, 'phase': {'method': 'Paganin', 'delta_beta': '500', 'padding_type': 'edge', 'unsharp_coeff': 3.0, 'unsharp_sigma': 0.65}, 'configuration_level': 'optional', 'mode_locked': False, 'cluster_config': None}}, 'controlAreaVisible': True, 'savedWidgetGeometry': b'\x01\xd9\xd0\xcb\x00\x03\x00\x00\x00\x00\x00H\x00\x00\x00@\x00\x00\x05\xd1\x00\x00\x03\x9e\x00\x00\x00H\x00\x00\x00@\x00\x00\x05\xd1\x00\x00\x03\x9e\x00\x00\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x00H\x00\x00\x00@\x00\x00\x05\xd1\x00\x00\x03\x9e', '__version__': 1}</properties>
|
37
37
|
<properties node_id="5" format="pickle">gASVWQEAAAAAAAB9lCiMDl92aWV3ZXJfY29uZmlnlH2UKIwEbW9kZZSMCGJ1aWx0aW5zlIwHZ2V0
|
38
38
|
YXR0cpSTlIwjdG9td2VyLmd1aS52aXN1YWxpemF0aW9uLmRhdGF2aWV3ZXKUjAxfRGlzcGxheU1v
|
39
39
|
ZGWUk5SMBlNMSUNFU5SGlFKUjAlzbGljZV9vcHSUaAZoB4wKX1NsaWNlTW9kZZSTlIwGTEFURVNU
|
@@ -5,6 +5,7 @@ import functools
|
|
5
5
|
import logging
|
6
6
|
import os
|
7
7
|
import gc
|
8
|
+
from collections.abc import Callable
|
8
9
|
from tomwer.io.utils import format_stderr_stdout
|
9
10
|
from silx.utils.deprecation import deprecated, deprecated_warning
|
10
11
|
from silx.io.utils import open as open_hdf5
|
@@ -85,6 +86,7 @@ def run_slices_reconstruction(
|
|
85
86
|
advancement=None,
|
86
87
|
process_id: int | None = None,
|
87
88
|
instantiate_classes_only: bool = False,
|
89
|
+
invalid_slice_callback: Callable[[str], None] | None = None,
|
88
90
|
) -> tuple:
|
89
91
|
"""
|
90
92
|
call nabu for a reconstruction on scan with the given configuration
|
@@ -142,7 +144,9 @@ def run_slices_reconstruction(
|
|
142
144
|
scan.nabu_recons_params = sc_config
|
143
145
|
|
144
146
|
# handle special cases like several db...
|
145
|
-
nabu_configurations = interpret_tomwer_configuration(
|
147
|
+
nabu_configurations = interpret_tomwer_configuration(
|
148
|
+
config, scan=scan, invalid_slice_callback=invalid_slice_callback
|
149
|
+
)
|
146
150
|
output_urls = []
|
147
151
|
stderrs = []
|
148
152
|
stdouts = []
|
@@ -227,6 +231,7 @@ class NabuSlicesTask(
|
|
227
231
|
optional_input_names=(
|
228
232
|
"dry_run",
|
229
233
|
"serialize_output_data",
|
234
|
+
"invalid_slice_callback",
|
230
235
|
),
|
231
236
|
output_names=("data", "nabu_params", "future_tomo_obj"),
|
232
237
|
):
|
@@ -288,6 +293,9 @@ class NabuSlicesTask(
|
|
288
293
|
dry_run=self._dry_run,
|
289
294
|
process_id=self.process_id,
|
290
295
|
instantiate_classes_only=True,
|
296
|
+
invalid_slice_callback=self.get_input_value(
|
297
|
+
"invalid_slice_callback", None
|
298
|
+
),
|
291
299
|
)
|
292
300
|
except Exception as e:
|
293
301
|
mess = f"Fail to instantiate slice reconstructor for {str(scan)}. Reason is {e}."
|
@@ -425,7 +433,11 @@ class NabuSlicesTask(
|
|
425
433
|
self._current_processing.cancel()
|
426
434
|
|
427
435
|
|
428
|
-
def interpret_tomwer_configuration(
|
436
|
+
def interpret_tomwer_configuration(
|
437
|
+
config: dict,
|
438
|
+
scan: TomwerScanBase | None,
|
439
|
+
invalid_slice_callback: Callable[[str], None] | None = None,
|
440
|
+
) -> tuple:
|
429
441
|
"""
|
430
442
|
tomwer can 'mock' the nabu reconstruction to request more feature.
|
431
443
|
Typical use case is that we can ask for reconstruction of several
|
@@ -471,9 +483,10 @@ def interpret_tomwer_configuration(config: dict, scan: TomwerScanBase | None) ->
|
|
471
483
|
index_max = index_max - 1
|
472
484
|
|
473
485
|
if slice_index > index_max:
|
474
|
-
|
475
|
-
|
476
|
-
|
486
|
+
error_message = f"{scan.get_identifier().short_description()}\n\nCannot reconstruct slice {slice_index} along plane {axis.value}. Must be in [0-{index_max}]"
|
487
|
+
_logger.error(error_message)
|
488
|
+
if invalid_slice_callback is not None:
|
489
|
+
invalid_slice_callback(error_message)
|
477
490
|
return False
|
478
491
|
return True
|
479
492
|
|
@@ -628,6 +628,10 @@ class SAAxisTask(
|
|
628
628
|
|
629
629
|
saaxis_results_url = SAAxisTask.get_results_url(scan=scan)
|
630
630
|
|
631
|
+
if not os.path.exists(saaxis_results_url.file_path()):
|
632
|
+
_logger.error("no result saved")
|
633
|
+
return
|
634
|
+
|
631
635
|
# save it to the file
|
632
636
|
with HDF5File(saaxis_results_url.file_path(), mode="a") as h5f:
|
633
637
|
nx_process = h5f.require_group(saaxis_results_url.data_path())
|
@@ -3,9 +3,7 @@ from __future__ import annotations
|
|
3
3
|
|
4
4
|
|
5
5
|
import os
|
6
|
-
import
|
7
|
-
import tempfile
|
8
|
-
import unittest
|
6
|
+
import pytest
|
9
7
|
|
10
8
|
import numpy
|
11
9
|
|
@@ -18,74 +16,66 @@ from tomwer.core.process.reconstruction.scores.scores import (
|
|
18
16
|
from tomwer.core.utils.scanutils import MockNXtomo
|
19
17
|
|
20
18
|
|
21
|
-
|
22
|
-
"""
|
19
|
+
def test_img_contrast_std_score():
|
20
|
+
"""simple test of the API to call compute_score_contrast_std"""
|
21
|
+
data = numpy.random.random(100 * 100).reshape(100, 100)
|
22
|
+
compute_score_contrast_std(data)
|
23
23
|
|
24
|
-
def test_img_contrast_std_score(self):
|
25
|
-
"""simple test of the API to call compute_score_contrast_std"""
|
26
|
-
data = numpy.random.random(100 * 100).reshape(100, 100)
|
27
|
-
compute_score_contrast_std(data)
|
28
24
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
self.assertTrue(isinstance(res, float))
|
25
|
+
@pytest.mark.parametrize("fct", _METHOD_TO_FCT.values())
|
26
|
+
def test_method_to_function(fct):
|
27
|
+
"""Test the dictionary used to for linking the score method to the
|
28
|
+
callback function"""
|
29
|
+
data = numpy.random.random(100 * 100).reshape(100, 100)
|
30
|
+
res = fct(data)
|
31
|
+
assert res is not None
|
32
|
+
assert isinstance(res, float)
|
38
33
|
|
39
34
|
|
40
|
-
|
35
|
+
def testSAAxisProcess(tmp_path):
|
41
36
|
"""Test the SAAxisProcess class"""
|
37
|
+
scan_path = tmp_path / "mock_nxtomo"
|
38
|
+
scan_path.mkdir()
|
39
|
+
# set up
|
40
|
+
dim = 10
|
41
|
+
mock = MockNXtomo(
|
42
|
+
scan_path=scan_path, n_proj=10, n_ini_proj=10, scan_range=180, dim=dim
|
43
|
+
)
|
44
|
+
mock.add_alignment_radio(index=10, angle=90)
|
45
|
+
mock.add_alignment_radio(index=10, angle=0)
|
46
|
+
scan = mock.scan
|
42
47
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
mock.add_alignment_radio(index=10, angle=90)
|
50
|
-
mock.add_alignment_radio(index=10, angle=0)
|
51
|
-
self.scan = mock.scan
|
48
|
+
default_saaxis_params = SAAxisParams()
|
49
|
+
default_saaxis_params.output_dir = os.path.join(scan_path, "output_dir")
|
50
|
+
default_saaxis_params.slice_indexes = {"slice": 4}
|
51
|
+
default_saaxis_params.nabu_config = {}
|
52
|
+
default_saaxis_params.dry_run = True
|
53
|
+
default_saaxis_params.file_format = "hdf5"
|
52
54
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
55
|
+
# test processing
|
56
|
+
process = SAAxisTask(
|
57
|
+
inputs={
|
58
|
+
"data": scan,
|
59
|
+
"sa_axis_params": default_saaxis_params.to_dict(),
|
60
|
+
"serialize_output_data": False,
|
61
|
+
}
|
62
|
+
)
|
61
63
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
"serialize_output_data": False,
|
81
|
-
},
|
82
|
-
)
|
83
|
-
process.run()
|
84
|
-
process = SAAxisTask(
|
85
|
-
inputs={
|
86
|
-
"data": self.scan,
|
87
|
-
"sa_axis_params": self._default_saaxis_params.to_dict(),
|
88
|
-
"serialize_output_data": False,
|
89
|
-
},
|
90
|
-
)
|
91
|
-
process.run()
|
64
|
+
default_saaxis_params.estimated_cor = 11
|
65
|
+
default_saaxis_params.research_width = 2
|
66
|
+
process = SAAxisTask(
|
67
|
+
inputs={
|
68
|
+
"data": scan,
|
69
|
+
"sa_axis_params": default_saaxis_params.to_dict(),
|
70
|
+
"serialize_output_data": False,
|
71
|
+
},
|
72
|
+
)
|
73
|
+
process.run()
|
74
|
+
process = SAAxisTask(
|
75
|
+
inputs={
|
76
|
+
"data": scan,
|
77
|
+
"sa_axis_params": default_saaxis_params.to_dict(),
|
78
|
+
"serialize_output_data": False,
|
79
|
+
},
|
80
|
+
)
|
81
|
+
process.run()
|
@@ -221,7 +221,7 @@ class _NabuPreProcessingConfig(_NabuStageConfigBase, qt.QWidget):
|
|
221
221
|
self._signalConfChanged("flatfield")
|
222
222
|
|
223
223
|
def _dffChanged(self, *args, **kwargs):
|
224
|
-
self._signalConfChanged("
|
224
|
+
self._signalConfChanged("double_flatfield")
|
225
225
|
|
226
226
|
def _dffSigmaChanged(self, *args, **kwargs):
|
227
227
|
self._signalConfChanged("dff_sigma")
|
@@ -337,7 +337,7 @@ class _NabuPreProcessingConfig(_NabuStageConfigBase, qt.QWidget):
|
|
337
337
|
tilt_correction, autotilt_opts = self._tiltCorrection.getTiltCorrection()
|
338
338
|
return {
|
339
339
|
"flatfield": int(self.isFlatFieldActivate()),
|
340
|
-
"
|
340
|
+
"double_flatfield": int(self.isDoubleFlatFieldActivate()),
|
341
341
|
"dff_sigma": self.getDFFSigma(),
|
342
342
|
"ccd_filter_enabled": int(self.isCCDFilterActivate()),
|
343
343
|
"ccd_filter_threshold": self.getCCDThreshold(),
|
@@ -365,7 +365,7 @@ class _NabuPreProcessingConfig(_NabuStageConfigBase, qt.QWidget):
|
|
365
365
|
if ff is not None:
|
366
366
|
self._flatFieldCB.setChecked(bool(ff))
|
367
367
|
|
368
|
-
dff = conf.get("
|
368
|
+
dff = conf.get("double_flatfield", None)
|
369
369
|
if dff is not None:
|
370
370
|
self._dffCB.setChecked(bool(dff))
|
371
371
|
|
@@ -323,7 +323,7 @@ class NabuWindow(qt.QMainWindow):
|
|
323
323
|
self._mainWidget.nabuSettingsWidget._configuration._preProcessingWidget._sinoRingsOpts.resetConfiguration()
|
324
324
|
default_config["tomwer_slices"] = "middle"
|
325
325
|
default_config["preproc"]["ccd_filter_enabled"] = False
|
326
|
-
default_config["preproc"]["
|
326
|
+
default_config["preproc"]["double_flatfield"] = False
|
327
327
|
default_config["preproc"]["flatfield"] = True
|
328
328
|
default_config["preproc"]["take_logarithm"] = True
|
329
329
|
self.setConfiguration(default_config)
|
@@ -87,7 +87,7 @@ class NabuWidgetWithToolbar(qt.QMainWindow):
|
|
87
87
|
self._nabuSettings._configuration._preProcessingWidget._sinoRingsOpts.resetConfiguration()
|
88
88
|
default_config["tomwer_slices"] = "middle"
|
89
89
|
default_config["preproc"]["ccd_filter_enabled"] = False
|
90
|
-
default_config["preproc"]["
|
90
|
+
default_config["preproc"]["double_flatfield"] = False
|
91
91
|
default_config["preproc"]["flatfield"] = True
|
92
92
|
default_config["preproc"]["take_logarithm"] = True
|
93
93
|
self._nabuSettings.setConfiguration(default_config)
|
@@ -90,7 +90,7 @@ class TestNabuPreProcConfig(TestCaseQt):
|
|
90
90
|
"""Test that the get configuration is working"""
|
91
91
|
ini_conf = {
|
92
92
|
"flatfield": 1,
|
93
|
-
"
|
93
|
+
"double_flatfield": 0,
|
94
94
|
"dff_sigma": 0.0,
|
95
95
|
"ccd_filter_enabled": 0,
|
96
96
|
"ccd_filter_threshold": 0.04,
|
@@ -110,7 +110,7 @@ class TestNabuPreProcConfig(TestCaseQt):
|
|
110
110
|
"""Test that the set configuration is working"""
|
111
111
|
conf = {
|
112
112
|
"flatfield": 0,
|
113
|
-
"
|
113
|
+
"double_flatfield": 1,
|
114
114
|
"dff_sigma": 2.0,
|
115
115
|
"ccd_filter_enabled": 1,
|
116
116
|
"ccd_filter_threshold": 0.98,
|
tomwer/gui/utils/buttons.py
CHANGED
@@ -111,7 +111,7 @@ class TapeMeasureToolButton(PlotToolButton):
|
|
111
111
|
self._lastRoiCreated.setVisible(self.isChecked())
|
112
112
|
if self.isChecked():
|
113
113
|
self._roiManager.start(
|
114
|
-
|
114
|
+
TapeMeasureROI,
|
115
115
|
self,
|
116
116
|
)
|
117
117
|
self.__interactiveModeStarted(self._roiManager)
|
Binary file
|
@@ -17,6 +17,9 @@ class ProcessingThread(qt.QThread):
|
|
17
17
|
sigComputationStarted = qt.Signal()
|
18
18
|
"""Signal emitted when a computation is started"""
|
19
19
|
|
20
|
+
sigError = qt.Signal(str)
|
21
|
+
"""Error found during processing. Parameter is the error raised"""
|
22
|
+
|
20
23
|
|
21
24
|
class FIFO(SuperviseProcess):
|
22
25
|
"""Processing Queue with a First In, First Out behavior"""
|
@@ -29,17 +32,22 @@ class FIFO(SuperviseProcess):
|
|
29
32
|
|
30
33
|
def __init__(self, process_id=None):
|
31
34
|
SuperviseProcess.__init__(self, process_id=process_id)
|
35
|
+
self._errors: list[qt.QErrorMessage] = []
|
32
36
|
self._deque = deque()
|
33
37
|
self._computationThread = self._create_processing_thread(process_id=process_id)
|
34
38
|
assert isinstance(self._computationThread, ProcessingThread)
|
35
|
-
|
36
|
-
self._start_threaded_computation
|
37
|
-
)
|
39
|
+
|
38
40
|
"""scan process by the thread"""
|
39
41
|
self._data_currently_computed = None
|
40
42
|
"""Scan computed currently"""
|
41
43
|
self._processing = False
|
42
44
|
|
45
|
+
# connect signal / slot
|
46
|
+
self._computationThread.sigComputationStarted.connect(
|
47
|
+
self._start_threaded_computation
|
48
|
+
)
|
49
|
+
self._computationThread.sigError.connect(self._displayError)
|
50
|
+
|
43
51
|
@property
|
44
52
|
def data_currently_computed(self) -> TomwerObject | None:
|
45
53
|
return self._data_currently_computed
|
@@ -146,6 +154,14 @@ class FIFO(SuperviseProcess):
|
|
146
154
|
self._processing = False
|
147
155
|
self._data_currently_computed = None
|
148
156
|
|
157
|
+
def _displayError(self, error_msg: str):
|
158
|
+
err = qt.QMessageBox()
|
159
|
+
err.setText(error_msg)
|
160
|
+
err.setIcon(qt.QMessageBox.Warning)
|
161
|
+
self._errors.append(err)
|
162
|
+
err.setModal(False)
|
163
|
+
err.show()
|
164
|
+
|
149
165
|
# expose deque API
|
150
166
|
def append(self, value):
|
151
167
|
self._deque.append(value)
|
@@ -6,6 +6,7 @@ import logging
|
|
6
6
|
|
7
7
|
from processview.core.manager import DatasetState, ProcessManager
|
8
8
|
from processview.core.superviseprocess import SuperviseProcess
|
9
|
+
|
9
10
|
from silx.gui import qt
|
10
11
|
from silx.gui.utils import blockSignals
|
11
12
|
|
@@ -138,6 +139,7 @@ class _SliceProcessingThread(ProcessingThread, SuperviseProcess):
|
|
138
139
|
"nabu_params": self._configuration,
|
139
140
|
"dry_run": self._dry_run,
|
140
141
|
"serialize_output_data": False,
|
142
|
+
"invalid_slice_callback": self.showErrorSliceInvalid,
|
141
143
|
},
|
142
144
|
)
|
143
145
|
self._task.run()
|
@@ -148,6 +150,9 @@ class _SliceProcessingThread(ProcessingThread, SuperviseProcess):
|
|
148
150
|
self._task.cancel()
|
149
151
|
self.quit()
|
150
152
|
|
153
|
+
def showErrorSliceInvalid(self, error_message):
|
154
|
+
self.sigError.emit(error_message)
|
155
|
+
|
151
156
|
|
152
157
|
class _VolumeProcessingThread(_SliceProcessingThread):
|
153
158
|
"""
|
tomwer/version.py
CHANGED
@@ -21,8 +21,8 @@ orangecontrib/tomwer/tutorials/simple_volume_to_slurm_reconstruction.ows,sha256=
|
|
21
21
|
orangecontrib/tomwer/tutorials/using_saaxis_to_find_cor.ows,sha256=TUZNkXEsQyj7Qra1GEb4IhGFDWv3uJzqXbp3P04jwbs,5192
|
22
22
|
orangecontrib/tomwer/tutorials/volume_casting_on_slurm.ows,sha256=yKa6pvd4UB6XDDlj_o7T8Md6bI8aQJXMCUnxyecdXbc,7568
|
23
23
|
orangecontrib/tomwer/tutorials/id16b/ID16b_full_volume.ows,sha256=eSxYxrZ-0WKsmDqXivsHxND7SR2dSwdgG6Wcjbr06Ew,1727
|
24
|
-
orangecontrib/tomwer/tutorials/id16b/ID16b_insitu.ows,sha256=
|
25
|
-
orangecontrib/tomwer/tutorials/id16b/ID16b_normalization.ows,sha256=
|
24
|
+
orangecontrib/tomwer/tutorials/id16b/ID16b_insitu.ows,sha256=sdo7YmzVUSBf61hsMUg7zOiGtDa21eitCx08fYY93LI,29558
|
25
|
+
orangecontrib/tomwer/tutorials/id16b/ID16b_normalization.ows,sha256=eufyC3wPbnzpUIQyno4mTrGXGtRayRFQbo0OAyYCds8,22594
|
26
26
|
orangecontrib/tomwer/tutorials/id16b/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
27
27
|
orangecontrib/tomwer/widgets/__init__.py,sha256=dX_TpkBh3mVsrj3EeGglEESsnZAEVq7V0Nb9bnBrb-8,1214
|
28
28
|
orangecontrib/tomwer/widgets/utils.py,sha256=yq1wZfpfY3iVAhwMRBls57q02lhljO89WRKN7MxMMNg,983
|
@@ -219,7 +219,7 @@ orangecontrib/tomwer/widgets/visualization/tests/__init__.py,sha256=47DEQpj8HBSa
|
|
219
219
|
tomwer/__init__.py,sha256=cMIyH-uRxpa9WVnAuWjiBD7k9TK57WO21RzP_S-Mb8I,460
|
220
220
|
tomwer/__main__.py,sha256=7tCADiS4u7k1PCxFhlRAcYSIOpxQTGUTx8sCEQ-hi1E,8707
|
221
221
|
tomwer/utils.py,sha256=7h7dEgKAEUmQ43jkULvC1B9Adl55nkCty-SEKUKCl4U,7008
|
222
|
-
tomwer/version.py,sha256=
|
222
|
+
tomwer/version.py,sha256=K5a0x_MIZk2c2KnjS9jTsWtptvB-LYnkQQEw0IH9mdc,4386
|
223
223
|
tomwer/app/__init__.py,sha256=h1FKED7Tw5f99yikygt7ruXsdrxQhcJxO7kagLGxhJg,84
|
224
224
|
tomwer/app/axis.py,sha256=1TZU27QPhq6Sa5-1kRMr4VDv2Qntg4ZHTQOjwucXf4I,5842
|
225
225
|
tomwer/app/canvas.py,sha256=y8rYOiwmv6ug7JcjgkOzEiGQnNXjKWNNmKofT0n8TFg,1538
|
@@ -336,7 +336,7 @@ tomwer/core/process/reconstruction/nabu/castvolume.py,sha256=yTdVMGjG8gnByNi7D1X
|
|
336
336
|
tomwer/core/process/reconstruction/nabu/helical.py,sha256=twqUNAatBAAK2K0cTmqcWb4py_nHif6Vsr3ms6Pqbag,2051
|
337
337
|
tomwer/core/process/reconstruction/nabu/nabucommon.py,sha256=GGhM3jl2OVbI2mr4-bMlMOyON2Ss0dEOU_v9SmixhTo,24532
|
338
338
|
tomwer/core/process/reconstruction/nabu/nabuscores.py,sha256=fjOtWxPOoVHq5E1mkbpfVglWNq5HfP1VAzhaLu1jd1M,25291
|
339
|
-
tomwer/core/process/reconstruction/nabu/nabuslices.py,sha256=
|
339
|
+
tomwer/core/process/reconstruction/nabu/nabuslices.py,sha256=9w_DPooYn8l9rSGZJhYFmWlPO0L-DkuEKvKmb-Q9Sao,32648
|
340
340
|
tomwer/core/process/reconstruction/nabu/nabuvolume.py,sha256=Fn0tkPDTDJQaMEJA4LzpPp0ZtG4MIu9YN82-jesxRKo,20052
|
341
341
|
tomwer/core/process/reconstruction/nabu/plane.py,sha256=1SFNJgl1_cDYVW6gq7zjw2jpvRjiEmzzEQEBCxUseGM,380
|
342
342
|
tomwer/core/process/reconstruction/nabu/settings.py,sha256=3AJpxVQbJziw4v6F26Ppz8Q9vc9ZNepTWygqpCAbIEM,955
|
@@ -350,7 +350,7 @@ tomwer/core/process/reconstruction/normalization/normalization.py,sha256=8rW9D6e
|
|
350
350
|
tomwer/core/process/reconstruction/normalization/params.py,sha256=BqZPnaAeCi0CVkNxVKcS188oCb2y6RUxY-c5pLdOIDk,3374
|
351
351
|
tomwer/core/process/reconstruction/saaxis/__init__.py,sha256=ZEOu0nZWlMyBoX_A64yeEjVflE5x4iWSpYLTgs45g0o,137
|
352
352
|
tomwer/core/process/reconstruction/saaxis/params.py,sha256=tCV5QLu7jqLwmoRnUGCNxXgdXZ_WRRuuIxbmXG18mH0,4171
|
353
|
-
tomwer/core/process/reconstruction/saaxis/saaxis.py,sha256=
|
353
|
+
tomwer/core/process/reconstruction/saaxis/saaxis.py,sha256=g3p8_cI1KTasAc4183pXKa22jwml-CfAbhwF8dvZLlo,30282
|
354
354
|
tomwer/core/process/reconstruction/sadeltabeta/__init__.py,sha256=WDYJxfqPnz5IeLPCX5W8UEO8-Z-NSH79gkqp2DZn1bM,162
|
355
355
|
tomwer/core/process/reconstruction/sadeltabeta/params.py,sha256=ziAlTtQLy4EItIprFxDOm2Td1emHpSpnQb58niF1tI0,2691
|
356
356
|
tomwer/core/process/reconstruction/sadeltabeta/sadeltabeta.py,sha256=bAO0dYSnMdgbBHlcU-roRC7sGqLIpi_rlC7cMXFInLI,29075
|
@@ -364,7 +364,7 @@ tomwer/core/process/reconstruction/tests/test_darkref.py,sha256=KkdZ4epw9fYOPT3e
|
|
364
364
|
tomwer/core/process/reconstruction/tests/test_darkref_copy.py,sha256=Cl8qLAMZxLHDJp2oMDusr6q2WfALIg6mpbvuGyJJY7M,6090
|
365
365
|
tomwer/core/process/reconstruction/tests/test_params_cache.py,sha256=mNqWbOLr4mo06mwF3KhFpQPRvGgFxsCTPhLlK-fF2Ro,1238
|
366
366
|
tomwer/core/process/reconstruction/tests/test_paramsbase.py,sha256=n9x9BZV4I9uF7DM5QjCelfxaAzWQ6vx9N9BsjysW6RU,1505
|
367
|
-
tomwer/core/process/reconstruction/tests/test_saaxis.py,sha256=
|
367
|
+
tomwer/core/process/reconstruction/tests/test_saaxis.py,sha256=iuDJW3Wr5vbS19UZO49a7ohcJBX5vhQytzvOEPUusIQ,2362
|
368
368
|
tomwer/core/process/reconstruction/tests/test_sadeltabeta.py,sha256=24JRMIocNYLMdX_xFgOCUUo_VA61BPzz3HTaRTzDFhE,1232
|
369
369
|
tomwer/core/process/reconstruction/tests/test_utils.py,sha256=o_w8Bkk3T0btLCAan2UPq9U45y9vfh8ihyaHnZ7fEb0,1006
|
370
370
|
tomwer/core/process/reconstruction/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -539,7 +539,7 @@ tomwer/gui/edit/tests/test_dkrf_patch.py,sha256=L0fO2nqqK74EOIZTPQKjO03qsAiXbqjj
|
|
539
539
|
tomwer/gui/edit/tests/test_image_key_editor.py,sha256=6sIGM_DjU_KjspnVKB2UDhWh_BLDhYP8rS6U1fAZXkk,4647
|
540
540
|
tomwer/gui/edit/tests/test_nx_editor.py,sha256=y4_-g1-8rj0NkhAZ9HeebH-CIcUrvrH3q-s2RnBRQMo,17501
|
541
541
|
tomwer/gui/reconstruction/__init__.py,sha256=Ozf9bYay5hVhe1clExeM_MLhcAuu624i5BP1xonWlB0,95
|
542
|
-
tomwer/gui/reconstruction/sacommon.py,sha256=
|
542
|
+
tomwer/gui/reconstruction/sacommon.py,sha256=1ZT51WRkajkWsyaJmnH1Fi2QxHzyEa8Pqf7DAyF47lQ,5982
|
543
543
|
tomwer/gui/reconstruction/axis/AxisMainWindow.py,sha256=7w2LhdQ1pa8vU9U-XTA3ohGQfYKk5ETZ79s_xl4Zxx8,9641
|
544
544
|
tomwer/gui/reconstruction/axis/AxisOptionsWidget.py,sha256=M47xflZ68KkTDg8tksFt8n7ZFVIr8tJxstlPyG4Odq0,12168
|
545
545
|
tomwer/gui/reconstruction/axis/AxisSettingsWidget.py,sha256=7GpHteE2j9RUo-jUQoJdXJ-GnIi9VnY13Lveq3mvd1M,28120
|
@@ -561,7 +561,7 @@ tomwer/gui/reconstruction/nabu/check.py,sha256=5DYLlVCyXm3ax5VgogX79n1Oyl3O_JUvZ
|
|
561
561
|
tomwer/gui/reconstruction/nabu/helical.py,sha256=TAVPcuZdgtZSz37ESqi_yuLhYuNnGde_0drvjTntahs,3708
|
562
562
|
tomwer/gui/reconstruction/nabu/nabuflow.py,sha256=mnFFd9z7IC9FFZ3xcOr-6g2hvY0R7PtnFI-AMgWqHhI,14977
|
563
563
|
tomwer/gui/reconstruction/nabu/platform.py,sha256=eSPs2yUfBSHsqZ8bYY_BJ7zuRXc5sxXA4lRxlQaFBz0,3859
|
564
|
-
tomwer/gui/reconstruction/nabu/slices.py,sha256=
|
564
|
+
tomwer/gui/reconstruction/nabu/slices.py,sha256=fDvYrDDvwYmXFmjEKU4zv3NdkUciPYM4rqteSb9pQD8,24283
|
565
565
|
tomwer/gui/reconstruction/nabu/slurm.py,sha256=yfJD8KgX45Be5CUi6bn2CdocrQemJPxDYBBqoLoXqn0,1268
|
566
566
|
tomwer/gui/reconstruction/nabu/volume.py,sha256=OGstMDOd7DHY0PVUJdPRxOtSH7SaJyy7VNWU1F6ci6g,17826
|
567
567
|
tomwer/gui/reconstruction/nabu/nabuconfig/__init__.py,sha256=WgEFXIrUDhX0vpBNlKiymHEY9p1DMdk4QZkvnXIC8yk,77
|
@@ -570,7 +570,7 @@ tomwer/gui/reconstruction/nabu/nabuconfig/ctf.py,sha256=_2eDt-Y5LaJ5J0Q2wm0sIFQu
|
|
570
570
|
tomwer/gui/reconstruction/nabu/nabuconfig/nabuconfig.py,sha256=5tCkwvgCv_Rdt7yP4ZUrq9ZGKE7Yy9Ht-n7XvCGIoTw,9048
|
571
571
|
tomwer/gui/reconstruction/nabu/nabuconfig/output.py,sha256=0SShYqvFj-motxTw20e3I1Z0WiierSqgOsN15qwe-TY,11907
|
572
572
|
tomwer/gui/reconstruction/nabu/nabuconfig/phase.py,sha256=t4rVi6DCwRkrfGv_9hD1SWMwu9CMpzxjAwyH_YmC3Gw,16238
|
573
|
-
tomwer/gui/reconstruction/nabu/nabuconfig/preprocessing.py,sha256=
|
573
|
+
tomwer/gui/reconstruction/nabu/nabuconfig/preprocessing.py,sha256=utJgcburzX_WNdXItAKuENd97oLIs4QzFmLrNUF0n3c,32532
|
574
574
|
tomwer/gui/reconstruction/nabu/nabuconfig/reconstruction.py,sha256=W0EXvvEgtlOtxgg7CjsSj2aTjfpRwYfQ_I1fDX0cPxE,42571
|
575
575
|
tomwer/gui/reconstruction/nabu/test/test_cast_volume.py,sha256=Gtz_LduqKQNiVuVYrvtoPkE-DgG9QotS1mK-siSl8HU,3451
|
576
576
|
tomwer/gui/reconstruction/nabu/test/test_check.py,sha256=KXg1Gg4FVjQ9GkBOgb0ZJh6_c3JMeJTtyX5UVY6vdms,2318
|
@@ -592,7 +592,7 @@ tomwer/gui/reconstruction/scores/control.py,sha256=SVWMruB--sa_LSM1oZhjoFM5ci1oQ
|
|
592
592
|
tomwer/gui/reconstruction/scores/scoreplot.py,sha256=_mHvuc8EoSgEFiQkDJM9p21CLkgLe3c3d-bvPfQ0mFc,31166
|
593
593
|
tomwer/gui/reconstruction/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
594
594
|
tomwer/gui/reconstruction/tests/test_axis.py,sha256=h0u_tTnQp57rg4oFtwjGSYNw5IujoxydOpnvNd98INA,7498
|
595
|
-
tomwer/gui/reconstruction/tests/test_nabu.py,sha256=
|
595
|
+
tomwer/gui/reconstruction/tests/test_nabu.py,sha256=JI3GFzUXR_SsDMQfj2joVv6ToEqS-QdMyB12y14OvdI,13628
|
596
596
|
tomwer/gui/reconstruction/tests/test_saaxis.py,sha256=dQjhULF913WMevo0ePIy6JQbnrP6zGVnde9XLRLBtFM,6792
|
597
597
|
tomwer/gui/reconstruction/tests/test_sadeltabeta.py,sha256=96tE_gxIcmp0qDXQmIwSEkYl3Js7dT2CyUH1doyjGc0,4491
|
598
598
|
tomwer/gui/samplemoved/__init__.py,sha256=jNA03mYWfP3_S1MRet6ijYe5DNCTK3Br7-5yrW3oEG4,8240
|
@@ -635,7 +635,7 @@ tomwer/gui/tests/test_axis_gui.py,sha256=7Sz7LKTADuRCxaPYFGes22-0AItYwfrcd6kgk4X
|
|
635
635
|
tomwer/gui/tests/test_qfolder_dialog.py,sha256=hwN7uEDUYoGsHeJgjTvgMLV21umt_LTIemDsUTU2UvA,352
|
636
636
|
tomwer/gui/utils/RangeWidget.py,sha256=HERjGePh_LxkJEELt2ZVOL_D8G_0xmaP4OotZlASPEo,1327
|
637
637
|
tomwer/gui/utils/__init__.py,sha256=zRGvzYC0R676iDAjHIERQJlV4YgTcsXc3G34f6cUCK8,66
|
638
|
-
tomwer/gui/utils/buttons.py,sha256=
|
638
|
+
tomwer/gui/utils/buttons.py,sha256=czf14thj6yC9oqrSga77pBDFUtizuAlsIG39GSfpIss,7361
|
639
639
|
tomwer/gui/utils/completer.py,sha256=XQGVSiUdLa1MfgXPDY5qfcTxtjVerxmVKXmWDb-kQ-I,3606
|
640
640
|
tomwer/gui/utils/flow.py,sha256=DO9QhS_0dOxMArowqDGU5yZ_a36CsvwQUoFPwuxjxkE,10646
|
641
641
|
tomwer/gui/utils/gpu.py,sha256=R2sRA77zyxdy5bVYGNltQpKS_9wuaj9eIn6rglsWGWg,2223
|
@@ -704,6 +704,7 @@ tomwer/resources/gui/icons/background.png,sha256=o4479aVkI5oI6LyiHVbRnFtnfwXP-wS
|
|
704
704
|
tomwer/resources/gui/icons/background.svg,sha256=ydyBCNZy_uQK7ro1L-e03qJyACmOb1GoB9OuFwlcIzg,10778
|
705
705
|
tomwer/resources/gui/icons/basic_user.png,sha256=9bHI9dU-6SVbVGxokRZTq4XyK8lNDwTd1HU2tSseM4w,4694
|
706
706
|
tomwer/resources/gui/icons/basic_user.svg,sha256=KOk8j33FLmie4cGpD4wJN9UYIKQfXOyK9_5_id6Iaa4,9246
|
707
|
+
tomwer/resources/gui/icons/borders.png,sha256=E8rkw2TiZSgBzSiuLz6DdFw6cyKOI7K5bIAcIz85J5k,1541
|
707
708
|
tomwer/resources/gui/icons/cfg_file_active.png,sha256=XA80Ltn7y9I5MlQHTrjKi-WO5RpI2_z-zrIgHUG0GO8,2150
|
708
709
|
tomwer/resources/gui/icons/cfg_file_active.svg,sha256=ExCvTt8QZ99q3B9WqfsMTqfylv_hjvvZjSB615GWkro,7344
|
709
710
|
tomwer/resources/gui/icons/cfg_file_inactive.png,sha256=9ezxJCR6jIQhFbJ8kOGSQ_klpwjp-rKiU135ddvtywo,1979
|
@@ -833,14 +834,14 @@ tomwer/synctools/rsyncmanager.py,sha256=4SvN0Bk_D_WavBWFvF64Vxmll5kXeOrhmgOI4k0g
|
|
833
834
|
tomwer/synctools/saaxis.py,sha256=hvsJ3g189fA3FWZUdUFrqPLDRh5T-V7ptWY2YhJJ13I,669
|
834
835
|
tomwer/synctools/sadeltabeta.py,sha256=WCrBx-2lBlQUuoZlbR_HQaBAH8owsghh2j1TQXiBMIw,694
|
835
836
|
tomwer/synctools/stacks/__init__.py,sha256=wWN09X2qRXzBSekl5nkpEx1WDAcU2LQLxO9NpmW3bDU,165
|
836
|
-
tomwer/synctools/stacks/processingstack.py,sha256=
|
837
|
+
tomwer/synctools/stacks/processingstack.py,sha256=3FE7Z_dHvPS6k3HoYr1WJSkdOk4mM_R8OgFylw2tTc4,5959
|
837
838
|
tomwer/synctools/stacks/control/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
838
839
|
tomwer/synctools/stacks/control/datalistener.py,sha256=XN40esWfSQPgsy9HHrjvd3imSg7gcTzZ2OJgAFEtbEs,3785
|
839
840
|
tomwer/synctools/stacks/reconstruction/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
840
841
|
tomwer/synctools/stacks/reconstruction/axis.py,sha256=yq36BFGUGq0dtrDYE581nA2kMomMex6Nl7JSF2EVa_U,6088
|
841
842
|
tomwer/synctools/stacks/reconstruction/castvolume.py,sha256=hyLW_M6uR81nUAk1ZvyyYMd3gvIcWfqKF7RSdUgVzmQ,6795
|
842
843
|
tomwer/synctools/stacks/reconstruction/dkrefcopy.py,sha256=bemmlZajyoT7hAvGeEfhEXuxIN1IwhgEwnYSe1htXKA,6171
|
843
|
-
tomwer/synctools/stacks/reconstruction/nabu.py,sha256=
|
844
|
+
tomwer/synctools/stacks/reconstruction/nabu.py,sha256=fr86pc9XJahx3tel1lRoZU1GQZ64px3R11W4IMWhLAE,6661
|
844
845
|
tomwer/synctools/stacks/reconstruction/normalization.py,sha256=WSlx-aad8OhKI-2wZDe2pKzu9ht-446Yrwo0Z0cUaE0,4044
|
845
846
|
tomwer/synctools/stacks/reconstruction/saaxis.py,sha256=6HHfNfT4n6podzB_X88AjC7simiFAHpoi520nt3OexY,5808
|
846
847
|
tomwer/synctools/stacks/reconstruction/sadeltabeta.py,sha256=Oo0mczxv3-DxedpOybyMSUZAlcf65W8ZiCeTvPMHEas,5796
|
@@ -906,9 +907,9 @@ tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_volume_viewer
|
|
906
907
|
tomwer/tests/test_ewoks/test_conversion.py,sha256=a8cEWbErXiFCAkaapi0jeEoRKYxcFQCoa-Jr_u77_OM,3656
|
907
908
|
tomwer/tests/test_ewoks/test_single_node_execution.py,sha256=YBUHfiAnkciv_kjj7biC5fOs7c7ofNImM_azGMn4LZM,2813
|
908
909
|
tomwer/tests/test_ewoks/test_workflows.py,sha256=Eq80eexf5NVL7SzvwctLOaUeuQ8V3vDiFiHgbJA4Yb8,4871
|
909
|
-
tomwer-1.5.
|
910
|
-
tomwer-1.5.
|
911
|
-
tomwer-1.5.
|
912
|
-
tomwer-1.5.
|
913
|
-
tomwer-1.5.
|
914
|
-
tomwer-1.5.
|
910
|
+
tomwer-1.5.1.dist-info/licenses/LICENSE,sha256=62p1wL0n9WMTu8x2YDv0odYgTqeSvTd9mQ0v6Mq7lzE,1876
|
911
|
+
tomwer-1.5.1.dist-info/METADATA,sha256=hQC84pwhh-IbdRxuVIaVjU_GixxKgGbcVX4dywQxhwU,13456
|
912
|
+
tomwer-1.5.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
913
|
+
tomwer-1.5.1.dist-info/entry_points.txt,sha256=py3ZUWvGnWGc5c7Yhw_uBTm8Fmew0BDw3aQZnWMBNZI,500
|
914
|
+
tomwer-1.5.1.dist-info/top_level.txt,sha256=Yz5zKh0FPiImtzHYcPuztG1AO8-6KEpUWgoChGbA0Ys,21
|
915
|
+
tomwer-1.5.1.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|