tomwer 1.5.0rc3__py3-none-any.whl → 1.5.2__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/tutorials/id16b/ID16b_insitu.ows +1 -1
  2. orangecontrib/tomwer/tutorials/id16b/ID16b_normalization.ows +1 -1
  3. orangecontrib/tomwer/tutorials/untitled.ows +15 -0
  4. orangecontrib/tomwer/widgets/cluster/FutureSupervisorOW.py +2 -0
  5. tomwer/app/canvas_launcher/config.py +6 -2
  6. tomwer/core/process/reconstruction/nabu/nabuslices.py +18 -5
  7. tomwer/core/process/reconstruction/nabu/utils.py +1 -0
  8. tomwer/core/process/reconstruction/saaxis/saaxis.py +4 -0
  9. tomwer/core/process/reconstruction/tests/test_saaxis.py +56 -66
  10. tomwer/gui/reconstruction/nabu/nabuconfig/ctf.py +0 -10
  11. tomwer/gui/reconstruction/nabu/nabuconfig/preprocessing.py +3 -3
  12. tomwer/gui/reconstruction/nabu/nabuconfig/tests/test_NabuConfiguration.py +42 -0
  13. tomwer/gui/reconstruction/nabu/slices.py +1 -1
  14. tomwer/gui/reconstruction/nabu/test/test_ctf.py +0 -2
  15. tomwer/gui/reconstruction/sacommon.py +1 -1
  16. tomwer/gui/reconstruction/tests/test_nabu.py +2 -4
  17. tomwer/gui/utils/buttons.py +1 -1
  18. tomwer/synctools/stacks/processingstack.py +19 -3
  19. tomwer/synctools/stacks/reconstruction/nabu.py +5 -0
  20. tomwer/version.py +3 -3
  21. {tomwer-1.5.0rc3.dist-info → tomwer-1.5.2.dist-info}/METADATA +10 -51
  22. {tomwer-1.5.0rc3.dist-info → tomwer-1.5.2.dist-info}/RECORD +27 -26
  23. tomwer/tasks/reconstruction/cleardarkflat.py +0 -42
  24. /tomwer/{model/dataset.py → gui/reconstruction/nabu/nabuconfig/tests/__init__.py} +0 -0
  25. {tomwer-1.5.0rc3.dist-info → tomwer-1.5.2.dist-info}/WHEEL +0 -0
  26. {tomwer-1.5.0rc3.dist-info → tomwer-1.5.2.dist-info}/entry_points.txt +0 -0
  27. {tomwer-1.5.0rc3.dist-info → tomwer-1.5.2.dist-info}/licenses/LICENSE +0 -0
  28. {tomwer-1.5.0rc3.dist-info → tomwer-1.5.2.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, 'double_flatfield_enabled': 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>
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, 'double_flatfield_enabled': 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>
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
@@ -0,0 +1,15 @@
1
+ <?xml version='1.0' encoding='utf-8'?>
2
+ <scheme version="2.0" title="" description="">
3
+ <nodes>
4
+ <node id="0" name="nabu slice reconstruction" qualified_name="orangecontrib.tomwer.widgets.reconstruction.NabuOW.NabuOW" project_name="tomwer" version="" title="nabu slice reconstruction" position="(234.0, 102.0)" />
5
+ </nodes>
6
+ <links />
7
+ <annotations />
8
+ <thumbnail />
9
+ <node_properties>
10
+ <properties node_id="0" 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, 'rotate_projections_center': '', 'flat_distortion_correction_enabled': True, 'flat_distortion_params': "tile_size=100; interpolation_kind='linear'; padding_mode='edge'; correction_spike_threshold=None", 'detector_distortion_correction': False, 'detector_distortion_correction_options': {'map_x': '', 'map_z': ''}}, '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, 'exclude_projections': ''}, 'tomwer_slices': 'middle', 'output': {'file_format': 'hdf5', 'location': '', 'output_dir_mode': 'same folder as scan'}, 'phase': {'method': 'None', 'unsharp_coeff': 0, 'unsharp_sigma': 0, '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'}, 'gpu_mem_fraction': 0.9, 'cpu_mem_fraction': 0.9, 'configuration_level': 'advanced', 'mode_locked': False, 'cluster_config': None}}, 'controlAreaVisible': True, 'savedWidgetGeometry': b'\x01\xd9\xd0\xcb\x00\x03\x00\x00\x00\x00\t\xb8\x00\x00\x00\xdb\x00\x00\x0c\xb4\x00\x00\x03!\x00\x00\t\xb8\x00\x00\x00\xdb\x00\x00\x0c\xb4\x00\x00\x03!\x00\x00\x00\x01\x00\x00\x00\x00\x07\x80\x00\x00\t\xb8\x00\x00\x00\xdb\x00\x00\x0c\xb4\x00\x00\x03!', '__version__': 1}</properties>
11
+ </node_properties>
12
+ <session_state>
13
+ <window_groups />
14
+ </session_state>
15
+ </scheme>
@@ -206,6 +206,8 @@ class FutureTomwerObjectObserverWidget(
206
206
  return
207
207
  elif future_tomo_obj.status == "error":
208
208
  state = DatasetState.FAILED
209
+ if future_tomo_obj.job_id is None:
210
+ details = "Job submission to Slurm has failed. This is likely due to an invalid configuration request, such as requesting a GPU on a partition that does not support GPUs. Please review your configuration and try again."
209
211
  elif future_tomo_obj.status == "pending":
210
212
  details = "\n".join([details, "pending"])
211
213
  state = DatasetState.PENDING
@@ -9,7 +9,11 @@ import logging
9
9
  import tomwer.version
10
10
  from tomwer.gui import icons
11
11
 
12
- from ewoksorange.pkg_meta import iter_entry_points
12
+ try:
13
+ from ewoksorange.pkg_meta import entry_points
14
+ except ImportError:
15
+ # ewoksorange < 2.0
16
+ from ewoksorange.pkg_meta import iter_entry_points as entry_points
13
17
  from . import environ
14
18
  from .splash import getIcon, splash_screen
15
19
  from .widgetsscheme import WidgetsScheme
@@ -82,7 +86,7 @@ class TomwerConfig(config.Config):
82
86
  return entry.name.lower() not in ("ewoks demo",)
83
87
 
84
88
  try:
85
- all_eps = filter(accept_extension, iter_entry_points(group=WIDGETS_ENTRY))
89
+ all_eps = filter(accept_extension, entry_points(group=WIDGETS_ENTRY))
86
90
  except Exception as e:
87
91
  _logger.error(f"fail to find add-ons. Error is {e}")
88
92
  return iter(all_eps)
@@ -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(config, scan=scan)
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(config: dict, scan: TomwerScanBase | None) -> tuple:
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
- _logger.error(
475
- f"slice index {slice_index} requested. But slice index must be in 0-{index_max} - ignore this request"
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
 
@@ -342,6 +342,7 @@ class _NabuPhaseMethod(Enum):
342
342
  PAGANIN = "Paganin"
343
343
  CTF = "CTF"
344
344
  NONE = "None"
345
+ CONE = "cone"
345
346
 
346
347
  @classmethod
347
348
  def from_value(cls, value):
@@ -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 shutil
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
- class TestScoreFunctions(unittest.TestCase):
22
- """Test all the score functions"""
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
- def test_method_to_function(self):
30
- """Test the dictionary used to for linking the score method to the
31
- callback function"""
32
- data = numpy.random.random(100 * 100).reshape(100, 100)
33
- for method_name, fct in _METHOD_TO_FCT.items():
34
- with self.subTest(method_name=method_name, fct=fct):
35
- res = fct(data)
36
- self.assertFalse(res is None)
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
- class TestSAAxisProcess(unittest.TestCase):
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
- def setUp(self) -> None:
44
- self.tempdir = tempfile.mkdtemp()
45
- dim = 10
46
- mock = MockNXtomo(
47
- scan_path=self.tempdir, n_proj=10, n_ini_proj=10, scan_range=180, dim=dim
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
- self._default_saaxis_params = SAAxisParams()
54
- self._default_saaxis_params.output_dir = os.path.join(
55
- self.tempdir, "output_dir"
56
- )
57
- self._default_saaxis_params.slice_indexes = {"slice": 4}
58
- self._default_saaxis_params.nabu_config = {}
59
- self._default_saaxis_params.dry_run = True
60
- self._default_saaxis_params.file_format = "hdf5"
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
- def tearDown(self) -> None:
63
- shutil.rmtree(self.tempdir)
64
-
65
- def test(self):
66
- process = SAAxisTask(
67
- inputs={
68
- "data": self.scan,
69
- "sa_axis_params": self._default_saaxis_params.to_dict(),
70
- "serialize_output_data": False,
71
- }
72
- )
73
-
74
- self._default_saaxis_params.estimated_cor = 11
75
- self._default_saaxis_params.research_width = 2
76
- process = SAAxisTask(
77
- inputs={
78
- "data": self.scan,
79
- "sa_axis_params": self._default_saaxis_params.to_dict(),
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()
@@ -9,8 +9,6 @@ from tomwer.gui.reconstruction.nabu.nabuconfig import base
9
9
  from tomwer.gui.utils.illustrations import _IllustrationWidget
10
10
  from tomwer.gui.utils.scrollarea import QComboBoxIgnoreWheel
11
11
 
12
- from .reconstruction import AnglesFileWidget as Filewidget
13
-
14
12
 
15
13
  def nabu_param_ligne_to_dict(str_ligne: str) -> dict:
16
14
  ddict = {}
@@ -324,10 +322,6 @@ class CTFConfig(qt.QGroupBox, base._NabuStageConfigBase):
324
322
  self._geometryWidget = CTFGeometry(parent=self, title="geometry")
325
323
  self.layout().addRow(self._geometryWidget)
326
324
  self.registerWidget(self._geometryWidget, "optional")
327
- # translation file
328
- self._translationFile = Filewidget(self)
329
- self.layout().addRow("translation file", self._translationFile)
330
- self.registerWidget(self._translationFile, "optional")
331
325
  # advanced parameters
332
326
  self._advancedParamsWidget = CTFAdvancedParams(
333
327
  parent=self, title="advanced parameters"
@@ -338,7 +332,6 @@ class CTFConfig(qt.QGroupBox, base._NabuStageConfigBase):
338
332
  # connect signal / slot
339
333
  self._geometryWidget.sigConfChanged.connect(self._confChanged)
340
334
  self._advancedParamsWidget.sigConfChanged.connect(self._confChanged)
341
- self._translationFile._qle.textEdited.connect(self._confChanged)
342
335
 
343
336
  def _confChanged(self, *args, **kwargs):
344
337
  self.sigConfChanged.emit("phase")
@@ -346,11 +339,8 @@ class CTFConfig(qt.QGroupBox, base._NabuStageConfigBase):
346
339
  def getConfiguration(self) -> dict:
347
340
  ddict = self._geometryWidget.getConfiguration()
348
341
  ddict.update(self._advancedParamsWidget.getConfiguration())
349
- ddict["ctf_translations_file"] = self._translationFile.getFile()
350
342
  return ddict
351
343
 
352
344
  def setConfiguration(self, ddict):
353
345
  self._geometryWidget.setConfiguration(ddict=ddict)
354
346
  self._advancedParamsWidget.setConfiguration(ddict=ddict)
355
- if "ctf_translations_file" in ddict:
356
- self._translationFile.setFile(ddict["ctf_translations_file"])
@@ -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("double_flatfield_enabled")
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
- "double_flatfield_enabled": int(self.isDoubleFlatFieldActivate()),
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("double_flatfield_enabled", None)
368
+ dff = conf.get("double_flatfield", None)
369
369
  if dff is not None:
370
370
  self._dffCB.setChecked(bool(dff))
371
371
 
@@ -0,0 +1,42 @@
1
+ from __future__ import annotations
2
+
3
+ from tomwer.tests.conftest import qtapp # noqa F401
4
+ from tomwer.gui.reconstruction.nabu.nabuconfig.nabuconfig import (
5
+ NabuConfiguration,
6
+ )
7
+ from nabu.pipeline.config import _extract_nabuconfig_keyvals
8
+ from nabu.pipeline.fullfield.nabu_config import (
9
+ nabu_config as nabu_fullfield_default_config,
10
+ )
11
+
12
+
13
+ def test_NabuConfiguration(
14
+ qtapp, # noqa F811
15
+ ):
16
+ """Test that the 'NabuConfiguration' produce only keys understandable by nabu"""
17
+ widget = NabuConfiguration(parent=None)
18
+
19
+ tomwer_config = widget.getConfiguration()
20
+ nabu_config = _extract_nabuconfig_keyvals(nabu_fullfield_default_config)
21
+
22
+ tomwer_section_keys = set(tomwer_config.keys())
23
+ nabu_section_keys = set(nabu_config.keys())
24
+ tomwer_section_keys.remove("tomwer_slices")
25
+ assert tomwer_section_keys.issubset(
26
+ nabu_section_keys
27
+ ), f"tomwer provide sections undefined by nabu: {tomwer_section_keys - nabu_section_keys}"
28
+
29
+ for section_key in nabu_config.keys():
30
+ if section_key in tomwer_config:
31
+ nabu_sub_section_keys = set(nabu_config[section_key].keys())
32
+ tomwer_sub_section_keys = set(tomwer_config[section_key].keys())
33
+ if section_key == "phase":
34
+ # this key is pop by tomwer before calling nabu. It is used internally only
35
+ tomwer_sub_section_keys.remove("beam_shape")
36
+ elif section_key == "reconstruction":
37
+ tomwer_sub_section_keys.remove("slice_plane")
38
+ elif section_key == "output":
39
+ tomwer_sub_section_keys.remove("output_dir_mode")
40
+ assert tomwer_sub_section_keys.issubset(
41
+ nabu_sub_section_keys
42
+ ), f"tomwer provides keys undefined by nabu: {tomwer_sub_section_keys - nabu_sub_section_keys}"
@@ -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"]["double_flatfield_enabled"] = False
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)
@@ -29,12 +29,10 @@ class TestFutureSupervisorOW(TestCaseQt):
29
29
  assert config == {
30
30
  "ctf_geometry": " z1_v=None; z1_h=None; detec_pixel_size=None; magnification=True",
31
31
  "ctf_advanced_params": " length_scale=1e-05; lim1=1e-05; lim2=0.2; normalize_by_mean=True",
32
- "ctf_translations_file": "",
33
32
  "beam_shape": "parallel",
34
33
  }
35
34
 
36
35
  config["beam_shape"] = "cone"
37
- config["ctf_translations_file"] = "my_file.txt"
38
36
  config["ctf_geometry"] = (
39
37
  " z1_v=10.2; z1_h=3.6; detec_pixel_size=1e-05; magnification=False"
40
38
  )
@@ -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"]["double_flatfield_enabled"] = False
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
- "double_flatfield_enabled": 0,
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
- "double_flatfield_enabled": 1,
113
+ "double_flatfield": 1,
114
114
  "dff_sigma": 2.0,
115
115
  "ccd_filter_enabled": 1,
116
116
  "ccd_filter_threshold": 0.98,
@@ -150,7 +150,6 @@ class TestNabuPhaseConfig(TestCaseQt):
150
150
  "beam_shape": "parallel",
151
151
  "ctf_advanced_params": " length_scale=1e-05; lim1=1e-05; lim2=0.2; normalize_by_mean=True",
152
152
  "ctf_geometry": " z1_v=None; z1_h=None; detec_pixel_size=None; magnification=True",
153
- "ctf_translations_file": "",
154
153
  }
155
154
  self.assertEqual(self.nabuWidget.getConfiguration(), ini_conf)
156
155
 
@@ -165,7 +164,6 @@ class TestNabuPhaseConfig(TestCaseQt):
165
164
  "beam_shape": "cone",
166
165
  "ctf_advanced_params": " length_scale=1e-05; lim1=1e-05; lim2=0.2; normalize_by_mean=True",
167
166
  "ctf_geometry": " z1_v=0.0; z1_h=0.0; detec_pixel_size=None; magnification=True",
168
- "ctf_translations_file": "",
169
167
  }
170
168
  self.nabuWidget.setConfiguration(conf)
171
169
  self.nabuWidget.show()
@@ -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
- self.TapeMeasureROI,
114
+ TapeMeasureROI,
115
115
  self,
116
116
  )
117
117
  self.__interactiveModeStarted(self._roiManager)
@@ -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
- self._computationThread.sigComputationStarted.connect(
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
@@ -77,9 +77,9 @@ RELEASE_LEVEL_VALUE = {
77
77
 
78
78
  MAJOR = 1
79
79
  MINOR = 5
80
- MICRO = 0
81
- RELEV = "rc" # <16
82
- SERIAL = 3 # <16
80
+ MICRO = 2
81
+ RELEV = "final" # <16
82
+ SERIAL = 0 # <16
83
83
 
84
84
  date = __date__
85
85
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tomwer
3
- Version: 1.5.0rc3
3
+ Version: 1.5.2
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
@@ -25,12 +25,11 @@ Requires-Dist: numpy
25
25
  Requires-Dist: setuptools
26
26
  Requires-Dist: psutil
27
27
  Requires-Dist: silx[full]>=2.1.1
28
- Requires-Dist: tomoscan>=2.2.0a6
28
+ Requires-Dist: tomoscan[full_no_compression_plugins]>=2.2.0a6
29
29
  Requires-Dist: nxtomo>=2.0.0dev2
30
30
  Requires-Dist: nxtomomill>=1.2.0dev1
31
31
  Requires-Dist: processview>=1.5.0
32
32
  Requires-Dist: ewoks>=0.1.1
33
- Requires-Dist: ewokscore<1.1.0
34
33
  Requires-Dist: sluurp>=0.4.1
35
34
  Requires-Dist: packaging
36
35
  Requires-Dist: pint
@@ -39,83 +38,63 @@ Provides-Extra: full-base
39
38
  Requires-Dist: orange-canvas-core; extra == "full-base"
40
39
  Requires-Dist: orange-widget-base; extra == "full-base"
41
40
  Requires-Dist: ewoks[orange]>=0.1.1; extra == "full-base"
42
- Requires-Dist: ewoksorange>=0.7.0rc0; extra == "full-base"
41
+ Requires-Dist: ewoksorange==1.1; extra == "full-base"
43
42
  Requires-Dist: rsyncmanager; extra == "full-base"
44
43
  Requires-Dist: fabio; extra == "full-base"
45
- Requires-Dist: h5py>=3; extra == "full-base"
46
- Requires-Dist: lxml; extra == "full-base"
47
44
  Requires-Dist: werkzeug; extra == "full-base"
48
45
  Requires-Dist: json-rpc; extra == "full-base"
49
46
  Requires-Dist: scipy; extra == "full-base"
50
47
  Requires-Dist: Pillow; extra == "full-base"
51
- Requires-Dist: glymur<0.14; extra == "full-base"
52
48
  Requires-Dist: resource; extra == "full-base"
53
- Requires-Dist: tifffile; extra == "full-base"
54
49
  Requires-Dist: hdf5plugin; extra == "full-base"
55
50
  Requires-Dist: pyicat_plus; extra == "full-base"
56
51
  Requires-Dist: ewoksnotify[full]; extra == "full-base"
57
- Requires-Dist: pyicat_plus; extra == "full-base"
58
52
  Provides-Extra: full-no-nabu
59
53
  Requires-Dist: orange-canvas-core; extra == "full-no-nabu"
60
54
  Requires-Dist: orange-widget-base; extra == "full-no-nabu"
61
55
  Requires-Dist: ewoks[orange]>=0.1.1; extra == "full-no-nabu"
62
- Requires-Dist: ewoksorange>=0.7.0rc0; extra == "full-no-nabu"
56
+ Requires-Dist: ewoksorange==1.1; extra == "full-no-nabu"
63
57
  Requires-Dist: rsyncmanager; extra == "full-no-nabu"
64
58
  Requires-Dist: fabio; extra == "full-no-nabu"
65
- Requires-Dist: h5py>=3; extra == "full-no-nabu"
66
- Requires-Dist: lxml; extra == "full-no-nabu"
67
59
  Requires-Dist: werkzeug; extra == "full-no-nabu"
68
60
  Requires-Dist: json-rpc; extra == "full-no-nabu"
69
61
  Requires-Dist: scipy; extra == "full-no-nabu"
70
62
  Requires-Dist: Pillow; extra == "full-no-nabu"
71
- Requires-Dist: glymur<0.14; extra == "full-no-nabu"
72
63
  Requires-Dist: resource; extra == "full-no-nabu"
73
- Requires-Dist: tifffile; extra == "full-no-nabu"
74
64
  Requires-Dist: hdf5plugin; extra == "full-no-nabu"
75
65
  Requires-Dist: pyicat_plus; extra == "full-no-nabu"
76
66
  Requires-Dist: ewoksnotify[full]; extra == "full-no-nabu"
77
- Requires-Dist: pyicat_plus; extra == "full-no-nabu"
78
67
  Provides-Extra: full-no-cuda
79
68
  Requires-Dist: orange-canvas-core; extra == "full-no-cuda"
80
69
  Requires-Dist: orange-widget-base; extra == "full-no-cuda"
81
70
  Requires-Dist: ewoks[orange]>=0.1.1; extra == "full-no-cuda"
82
- Requires-Dist: ewoksorange>=0.7.0rc0; extra == "full-no-cuda"
71
+ Requires-Dist: ewoksorange==1.1; extra == "full-no-cuda"
83
72
  Requires-Dist: rsyncmanager; extra == "full-no-cuda"
84
73
  Requires-Dist: fabio; extra == "full-no-cuda"
85
- Requires-Dist: h5py>=3; extra == "full-no-cuda"
86
- Requires-Dist: lxml; extra == "full-no-cuda"
87
74
  Requires-Dist: werkzeug; extra == "full-no-cuda"
88
75
  Requires-Dist: json-rpc; extra == "full-no-cuda"
89
76
  Requires-Dist: scipy; extra == "full-no-cuda"
90
77
  Requires-Dist: Pillow; extra == "full-no-cuda"
91
- Requires-Dist: glymur<0.14; extra == "full-no-cuda"
92
78
  Requires-Dist: resource; extra == "full-no-cuda"
93
- Requires-Dist: tifffile; extra == "full-no-cuda"
94
79
  Requires-Dist: hdf5plugin; extra == "full-no-cuda"
95
80
  Requires-Dist: pyicat_plus; extra == "full-no-cuda"
96
81
  Requires-Dist: ewoksnotify[full]; extra == "full-no-cuda"
97
- Requires-Dist: pyicat_plus; extra == "full-no-cuda"
98
82
  Requires-Dist: nabu>=2023.3.1dev; extra == "full-no-cuda"
99
83
  Provides-Extra: full
100
84
  Requires-Dist: orange-canvas-core; extra == "full"
101
85
  Requires-Dist: orange-widget-base; extra == "full"
102
86
  Requires-Dist: ewoks[orange]>=0.1.1; extra == "full"
103
- Requires-Dist: ewoksorange>=0.7.0rc0; extra == "full"
87
+ Requires-Dist: ewoksorange==1.1; extra == "full"
104
88
  Requires-Dist: rsyncmanager; extra == "full"
105
89
  Requires-Dist: fabio; extra == "full"
106
- Requires-Dist: h5py>=3; extra == "full"
107
- Requires-Dist: lxml; extra == "full"
108
90
  Requires-Dist: werkzeug; extra == "full"
109
91
  Requires-Dist: json-rpc; extra == "full"
110
92
  Requires-Dist: scipy; extra == "full"
111
93
  Requires-Dist: Pillow; extra == "full"
112
- Requires-Dist: glymur<0.14; extra == "full"
113
94
  Requires-Dist: resource; extra == "full"
114
- Requires-Dist: tifffile; extra == "full"
115
95
  Requires-Dist: hdf5plugin; extra == "full"
116
96
  Requires-Dist: pyicat_plus; extra == "full"
117
97
  Requires-Dist: ewoksnotify[full]; extra == "full"
118
- Requires-Dist: pyicat_plus; extra == "full"
119
98
  Requires-Dist: nabu[full]>=2023.3.1dev; extra == "full"
120
99
  Requires-Dist: pycuda<2024.1.1; extra == "full"
121
100
  Requires-Dist: scikit-cuda; extra == "full"
@@ -123,22 +102,17 @@ Provides-Extra: doc
123
102
  Requires-Dist: orange-canvas-core; extra == "doc"
124
103
  Requires-Dist: orange-widget-base; extra == "doc"
125
104
  Requires-Dist: ewoks[orange]>=0.1.1; extra == "doc"
126
- Requires-Dist: ewoksorange>=0.7.0rc0; extra == "doc"
105
+ Requires-Dist: ewoksorange==1.1; extra == "doc"
127
106
  Requires-Dist: rsyncmanager; extra == "doc"
128
107
  Requires-Dist: fabio; extra == "doc"
129
- Requires-Dist: h5py>=3; extra == "doc"
130
- Requires-Dist: lxml; extra == "doc"
131
108
  Requires-Dist: werkzeug; extra == "doc"
132
109
  Requires-Dist: json-rpc; extra == "doc"
133
110
  Requires-Dist: scipy; extra == "doc"
134
111
  Requires-Dist: Pillow; extra == "doc"
135
- Requires-Dist: glymur<0.14; extra == "doc"
136
112
  Requires-Dist: resource; extra == "doc"
137
- Requires-Dist: tifffile; extra == "doc"
138
113
  Requires-Dist: hdf5plugin; extra == "doc"
139
114
  Requires-Dist: pyicat_plus; extra == "doc"
140
115
  Requires-Dist: ewoksnotify[full]; extra == "doc"
141
- Requires-Dist: pyicat_plus; extra == "doc"
142
116
  Requires-Dist: nabu>=2023.3.1dev; extra == "doc"
143
117
  Requires-Dist: Sphinx>=4.0.0; extra == "doc"
144
118
  Requires-Dist: nbsphinx; extra == "doc"
@@ -157,22 +131,17 @@ Provides-Extra: dev
157
131
  Requires-Dist: orange-canvas-core; extra == "dev"
158
132
  Requires-Dist: orange-widget-base; extra == "dev"
159
133
  Requires-Dist: ewoks[orange]>=0.1.1; extra == "dev"
160
- Requires-Dist: ewoksorange>=0.7.0rc0; extra == "dev"
134
+ Requires-Dist: ewoksorange==1.1; extra == "dev"
161
135
  Requires-Dist: rsyncmanager; extra == "dev"
162
136
  Requires-Dist: fabio; extra == "dev"
163
- Requires-Dist: h5py>=3; extra == "dev"
164
- Requires-Dist: lxml; extra == "dev"
165
137
  Requires-Dist: werkzeug; extra == "dev"
166
138
  Requires-Dist: json-rpc; extra == "dev"
167
139
  Requires-Dist: scipy; extra == "dev"
168
140
  Requires-Dist: Pillow; extra == "dev"
169
- Requires-Dist: glymur<0.14; extra == "dev"
170
141
  Requires-Dist: resource; extra == "dev"
171
- Requires-Dist: tifffile; extra == "dev"
172
142
  Requires-Dist: hdf5plugin; extra == "dev"
173
143
  Requires-Dist: pyicat_plus; extra == "dev"
174
144
  Requires-Dist: ewoksnotify[full]; extra == "dev"
175
- Requires-Dist: pyicat_plus; extra == "dev"
176
145
  Requires-Dist: nabu[full]>=2023.3.1dev; extra == "dev"
177
146
  Requires-Dist: pycuda<2024.1.1; extra == "dev"
178
147
  Requires-Dist: scikit-cuda; extra == "dev"
@@ -184,22 +153,17 @@ Provides-Extra: dev-no-cuda
184
153
  Requires-Dist: orange-canvas-core; extra == "dev-no-cuda"
185
154
  Requires-Dist: orange-widget-base; extra == "dev-no-cuda"
186
155
  Requires-Dist: ewoks[orange]>=0.1.1; extra == "dev-no-cuda"
187
- Requires-Dist: ewoksorange>=0.7.0rc0; extra == "dev-no-cuda"
156
+ Requires-Dist: ewoksorange==1.1; extra == "dev-no-cuda"
188
157
  Requires-Dist: rsyncmanager; extra == "dev-no-cuda"
189
158
  Requires-Dist: fabio; extra == "dev-no-cuda"
190
- Requires-Dist: h5py>=3; extra == "dev-no-cuda"
191
- Requires-Dist: lxml; extra == "dev-no-cuda"
192
159
  Requires-Dist: werkzeug; extra == "dev-no-cuda"
193
160
  Requires-Dist: json-rpc; extra == "dev-no-cuda"
194
161
  Requires-Dist: scipy; extra == "dev-no-cuda"
195
162
  Requires-Dist: Pillow; extra == "dev-no-cuda"
196
- Requires-Dist: glymur<0.14; extra == "dev-no-cuda"
197
163
  Requires-Dist: resource; extra == "dev-no-cuda"
198
- Requires-Dist: tifffile; extra == "dev-no-cuda"
199
164
  Requires-Dist: hdf5plugin; extra == "dev-no-cuda"
200
165
  Requires-Dist: pyicat_plus; extra == "dev-no-cuda"
201
166
  Requires-Dist: ewoksnotify[full]; extra == "dev-no-cuda"
202
- Requires-Dist: pyicat_plus; extra == "dev-no-cuda"
203
167
  Requires-Dist: nabu>=2023.3.1dev; extra == "dev-no-cuda"
204
168
  Requires-Dist: black; extra == "dev-no-cuda"
205
169
  Requires-Dist: flake8; extra == "dev-no-cuda"
@@ -209,22 +173,17 @@ Provides-Extra: test
209
173
  Requires-Dist: orange-canvas-core; extra == "test"
210
174
  Requires-Dist: orange-widget-base; extra == "test"
211
175
  Requires-Dist: ewoks[orange]>=0.1.1; extra == "test"
212
- Requires-Dist: ewoksorange>=0.7.0rc0; extra == "test"
176
+ Requires-Dist: ewoksorange==1.1; extra == "test"
213
177
  Requires-Dist: rsyncmanager; extra == "test"
214
178
  Requires-Dist: fabio; extra == "test"
215
- Requires-Dist: h5py>=3; extra == "test"
216
- Requires-Dist: lxml; extra == "test"
217
179
  Requires-Dist: werkzeug; extra == "test"
218
180
  Requires-Dist: json-rpc; extra == "test"
219
181
  Requires-Dist: scipy; extra == "test"
220
182
  Requires-Dist: Pillow; extra == "test"
221
- Requires-Dist: glymur<0.14; extra == "test"
222
183
  Requires-Dist: resource; extra == "test"
223
- Requires-Dist: tifffile; extra == "test"
224
184
  Requires-Dist: hdf5plugin; extra == "test"
225
185
  Requires-Dist: pyicat_plus; extra == "test"
226
186
  Requires-Dist: ewoksnotify[full]; extra == "test"
227
- Requires-Dist: pyicat_plus; extra == "test"
228
187
  Requires-Dist: nabu>=2023.3.1dev; extra == "test"
229
188
  Requires-Dist: pytest-asyncio; extra == "test"
230
189
  Requires-Dist: tomoscan[test]>=2.2.0a6; extra == "test"
@@ -18,15 +18,16 @@ orangecontrib/tomwer/tutorials/simple_slice_reconstruction.ows,sha256=O9Bnunjh0Q
18
18
  orangecontrib/tomwer/tutorials/simple_slice_reconstruction_on_slurm.ows,sha256=t-fwTMCvqQV17AIZWM0lSCmjC6loLEHNZSFmAADF9xY,6584
19
19
  orangecontrib/tomwer/tutorials/simple_volume_local_reconstruction.ows,sha256=mhvCyFqXnFznRPaTG6wgjpxkte8n_SOzg3W8yJkWy1s,7025
20
20
  orangecontrib/tomwer/tutorials/simple_volume_to_slurm_reconstruction.ows,sha256=jHOERmyBFo7NmmmOUO6KroAfvyAD8ds92lkl0g73C-8,9830
21
+ orangecontrib/tomwer/tutorials/untitled.ows,sha256=dBokmKHOdqZqHTrZqrZgjBg7xzQacKWUXBjY7lTaYVU,2731
21
22
  orangecontrib/tomwer/tutorials/using_saaxis_to_find_cor.ows,sha256=TUZNkXEsQyj7Qra1GEb4IhGFDWv3uJzqXbp3P04jwbs,5192
22
23
  orangecontrib/tomwer/tutorials/volume_casting_on_slurm.ows,sha256=yKa6pvd4UB6XDDlj_o7T8Md6bI8aQJXMCUnxyecdXbc,7568
23
24
  orangecontrib/tomwer/tutorials/id16b/ID16b_full_volume.ows,sha256=eSxYxrZ-0WKsmDqXivsHxND7SR2dSwdgG6Wcjbr06Ew,1727
24
- orangecontrib/tomwer/tutorials/id16b/ID16b_insitu.ows,sha256=lmn7C0LQIzJpxVJjHajyPKfJZZSHSNBG2x8uxnv6Zg8,29566
25
- orangecontrib/tomwer/tutorials/id16b/ID16b_normalization.ows,sha256=kFGXGxc3eW7iG5TcAxaOwEwh1cvsKZEO3T_cA3mrd1k,22602
25
+ orangecontrib/tomwer/tutorials/id16b/ID16b_insitu.ows,sha256=sdo7YmzVUSBf61hsMUg7zOiGtDa21eitCx08fYY93LI,29558
26
+ orangecontrib/tomwer/tutorials/id16b/ID16b_normalization.ows,sha256=eufyC3wPbnzpUIQyno4mTrGXGtRayRFQbo0OAyYCds8,22594
26
27
  orangecontrib/tomwer/tutorials/id16b/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
28
  orangecontrib/tomwer/widgets/__init__.py,sha256=dX_TpkBh3mVsrj3EeGglEESsnZAEVq7V0Nb9bnBrb-8,1214
28
29
  orangecontrib/tomwer/widgets/utils.py,sha256=yq1wZfpfY3iVAhwMRBls57q02lhljO89WRKN7MxMMNg,983
29
- orangecontrib/tomwer/widgets/cluster/FutureSupervisorOW.py,sha256=zXjddYmkhyBnoRCstZ6AYN1mG84xiOKaIntg5tqe4jw,9927
30
+ orangecontrib/tomwer/widgets/cluster/FutureSupervisorOW.py,sha256=JodqMVgu2krTWmrPEPze0E_SinOyX7UghDDbbsN8dSE,10210
30
31
  orangecontrib/tomwer/widgets/cluster/SlurmClusterOW.py,sha256=O44AZGt7cC1KaAl4U9f78OuzKKMXOSm22voUodyvqnk,3003
31
32
  orangecontrib/tomwer/widgets/cluster/__init__.py,sha256=vOOJnIIaLWAj8tnxD9MRzWDyYgk-cyuBsN7QQ5FrIoQ,385
32
33
  orangecontrib/tomwer/widgets/cluster/icons/slurm.png,sha256=C-YBLwXCnh0oo4nvEt80WxX_jKYGUAFpWMUSlzt6ke0,1995
@@ -219,7 +220,7 @@ orangecontrib/tomwer/widgets/visualization/tests/__init__.py,sha256=47DEQpj8HBSa
219
220
  tomwer/__init__.py,sha256=cMIyH-uRxpa9WVnAuWjiBD7k9TK57WO21RzP_S-Mb8I,460
220
221
  tomwer/__main__.py,sha256=7tCADiS4u7k1PCxFhlRAcYSIOpxQTGUTx8sCEQ-hi1E,8707
221
222
  tomwer/utils.py,sha256=7h7dEgKAEUmQ43jkULvC1B9Adl55nkCty-SEKUKCl4U,7008
222
- tomwer/version.py,sha256=IOZpFmn_ZYCZdQ7uWHxTD8i-UUzpUH1YscQBAfHyqpY,4383
223
+ tomwer/version.py,sha256=DKeug4r2Q7g-Ny4eovdPe5bCCM6RkITFNm8wikj1IUE,4386
223
224
  tomwer/app/__init__.py,sha256=h1FKED7Tw5f99yikygt7ruXsdrxQhcJxO7kagLGxhJg,84
224
225
  tomwer/app/axis.py,sha256=1TZU27QPhq6Sa5-1kRMr4VDv2Qntg4ZHTQOjwucXf4I,5842
225
226
  tomwer/app/canvas.py,sha256=y8rYOiwmv6ug7JcjgkOzEiGQnNXjKWNNmKofT0n8TFg,1538
@@ -245,7 +246,7 @@ tomwer/app/stopdatalistener.py,sha256=WADEHM5LHHjWP2HM-ru-RinXWzvV3PQv72E5Y1Xeio
245
246
  tomwer/app/ystitching.py,sha256=QvXUHBnmr3R--lTvd_RkjpXMAedbnpiC01bSD99_BPE,562
246
247
  tomwer/app/zstitching.py,sha256=pTV_ESnARpabvo038pSCuUoV0DjrPxKubIKfhjyIZZ0,562
247
248
  tomwer/app/canvas_launcher/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
248
- tomwer/app/canvas_launcher/config.py,sha256=sLlsp7iy1s2IyxqvSohGbaOpPUP6syuj5P-8bvyPNzI,3952
249
+ tomwer/app/canvas_launcher/config.py,sha256=vzpYdoPI0zP3uogwU5TLggDGQrSpw2ew-Fvs0-wjinU,4066
249
250
  tomwer/app/canvas_launcher/environ.py,sha256=ljQyPL_u9ai1CWmmq8uGHbn437CZWyX4uJtrDIyabGk,2453
250
251
  tomwer/app/canvas_launcher/mainwindow.py,sha256=KZzbY3AuHITdaS8K4jG2QomD5DEgQqHRYcIe9hymC9g,22283
251
252
  tomwer/app/canvas_launcher/splash.py,sha256=cpUuZVKwlQbeAWfAqjpjP4q1v1MmkfxU6WWllLSVZo8,508
@@ -336,12 +337,12 @@ tomwer/core/process/reconstruction/nabu/castvolume.py,sha256=yTdVMGjG8gnByNi7D1X
336
337
  tomwer/core/process/reconstruction/nabu/helical.py,sha256=twqUNAatBAAK2K0cTmqcWb4py_nHif6Vsr3ms6Pqbag,2051
337
338
  tomwer/core/process/reconstruction/nabu/nabucommon.py,sha256=GGhM3jl2OVbI2mr4-bMlMOyON2Ss0dEOU_v9SmixhTo,24532
338
339
  tomwer/core/process/reconstruction/nabu/nabuscores.py,sha256=fjOtWxPOoVHq5E1mkbpfVglWNq5HfP1VAzhaLu1jd1M,25291
339
- tomwer/core/process/reconstruction/nabu/nabuslices.py,sha256=CybiZOf0qATMeLkYyC_UuYVfReJku_-2BS0BQbq7xxs,32084
340
+ tomwer/core/process/reconstruction/nabu/nabuslices.py,sha256=9w_DPooYn8l9rSGZJhYFmWlPO0L-DkuEKvKmb-Q9Sao,32648
340
341
  tomwer/core/process/reconstruction/nabu/nabuvolume.py,sha256=Fn0tkPDTDJQaMEJA4LzpPp0ZtG4MIu9YN82-jesxRKo,20052
341
342
  tomwer/core/process/reconstruction/nabu/plane.py,sha256=1SFNJgl1_cDYVW6gq7zjw2jpvRjiEmzzEQEBCxUseGM,380
342
343
  tomwer/core/process/reconstruction/nabu/settings.py,sha256=3AJpxVQbJziw4v6F26Ppz8Q9vc9ZNepTWygqpCAbIEM,955
343
344
  tomwer/core/process/reconstruction/nabu/target.py,sha256=I_7X2Nfr5VC4doaodtCzTeg7JVG1Lnbv123uI8AKEeU,111
344
- tomwer/core/process/reconstruction/nabu/utils.py,sha256=VLyF3JUBSCDOfOB4gtKuQoFr0ZwpbgeuJ1wZL5NZ4wM,16253
345
+ tomwer/core/process/reconstruction/nabu/utils.py,sha256=YtcEj3pLYKjArklZD7cREsuafeNMjQ203VIR8Oeo-i4,16271
345
346
  tomwer/core/process/reconstruction/nabu/test/test_castvolume.py,sha256=yEqVFrmp8vVpiIuhASMR9bWLF3Cgnag2u8S_SaI8BSo,3985
346
347
  tomwer/core/process/reconstruction/nabu/test/test_nabu_utils.py,sha256=vmB02KUGcP_AyUEWuDByGm0UAOCDIHEhePfRV1UGQQg,15608
347
348
  tomwer/core/process/reconstruction/nabu/test/test_nabunormalization.py,sha256=5rHDwUROEBlsEFsZoy8mmcdRpziEetF9g_oFyxlvS6k,6010
@@ -350,7 +351,7 @@ tomwer/core/process/reconstruction/normalization/normalization.py,sha256=8rW9D6e
350
351
  tomwer/core/process/reconstruction/normalization/params.py,sha256=BqZPnaAeCi0CVkNxVKcS188oCb2y6RUxY-c5pLdOIDk,3374
351
352
  tomwer/core/process/reconstruction/saaxis/__init__.py,sha256=ZEOu0nZWlMyBoX_A64yeEjVflE5x4iWSpYLTgs45g0o,137
352
353
  tomwer/core/process/reconstruction/saaxis/params.py,sha256=tCV5QLu7jqLwmoRnUGCNxXgdXZ_WRRuuIxbmXG18mH0,4171
353
- tomwer/core/process/reconstruction/saaxis/saaxis.py,sha256=FDzM-N_kHvCbTe7rvt6tMYuC6slCG45t5ptadLcpfd8,30154
354
+ tomwer/core/process/reconstruction/saaxis/saaxis.py,sha256=g3p8_cI1KTasAc4183pXKa22jwml-CfAbhwF8dvZLlo,30282
354
355
  tomwer/core/process/reconstruction/sadeltabeta/__init__.py,sha256=WDYJxfqPnz5IeLPCX5W8UEO8-Z-NSH79gkqp2DZn1bM,162
355
356
  tomwer/core/process/reconstruction/sadeltabeta/params.py,sha256=ziAlTtQLy4EItIprFxDOm2Td1emHpSpnQb58niF1tI0,2691
356
357
  tomwer/core/process/reconstruction/sadeltabeta/sadeltabeta.py,sha256=bAO0dYSnMdgbBHlcU-roRC7sGqLIpi_rlC7cMXFInLI,29075
@@ -364,7 +365,7 @@ tomwer/core/process/reconstruction/tests/test_darkref.py,sha256=KkdZ4epw9fYOPT3e
364
365
  tomwer/core/process/reconstruction/tests/test_darkref_copy.py,sha256=Cl8qLAMZxLHDJp2oMDusr6q2WfALIg6mpbvuGyJJY7M,6090
365
366
  tomwer/core/process/reconstruction/tests/test_params_cache.py,sha256=mNqWbOLr4mo06mwF3KhFpQPRvGgFxsCTPhLlK-fF2Ro,1238
366
367
  tomwer/core/process/reconstruction/tests/test_paramsbase.py,sha256=n9x9BZV4I9uF7DM5QjCelfxaAzWQ6vx9N9BsjysW6RU,1505
367
- tomwer/core/process/reconstruction/tests/test_saaxis.py,sha256=yaxm2Iob6jhSxMdiHP-B093HOoKb6rfBoqPVxOsGMgU,2972
368
+ tomwer/core/process/reconstruction/tests/test_saaxis.py,sha256=iuDJW3Wr5vbS19UZO49a7ohcJBX5vhQytzvOEPUusIQ,2362
368
369
  tomwer/core/process/reconstruction/tests/test_sadeltabeta.py,sha256=24JRMIocNYLMdX_xFgOCUUo_VA61BPzz3HTaRTzDFhE,1232
369
370
  tomwer/core/process/reconstruction/tests/test_utils.py,sha256=o_w8Bkk3T0btLCAan2UPq9U45y9vfh8ihyaHnZ7fEb0,1006
370
371
  tomwer/core/process/reconstruction/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -539,7 +540,7 @@ tomwer/gui/edit/tests/test_dkrf_patch.py,sha256=L0fO2nqqK74EOIZTPQKjO03qsAiXbqjj
539
540
  tomwer/gui/edit/tests/test_image_key_editor.py,sha256=6sIGM_DjU_KjspnVKB2UDhWh_BLDhYP8rS6U1fAZXkk,4647
540
541
  tomwer/gui/edit/tests/test_nx_editor.py,sha256=y4_-g1-8rj0NkhAZ9HeebH-CIcUrvrH3q-s2RnBRQMo,17501
541
542
  tomwer/gui/reconstruction/__init__.py,sha256=Ozf9bYay5hVhe1clExeM_MLhcAuu624i5BP1xonWlB0,95
542
- tomwer/gui/reconstruction/sacommon.py,sha256=8-xaFjmtvxzJSWRLl985IcaCYVXQ_Kq-Rp91nYoW0Pc,5990
543
+ tomwer/gui/reconstruction/sacommon.py,sha256=1ZT51WRkajkWsyaJmnH1Fi2QxHzyEa8Pqf7DAyF47lQ,5982
543
544
  tomwer/gui/reconstruction/axis/AxisMainWindow.py,sha256=7w2LhdQ1pa8vU9U-XTA3ohGQfYKk5ETZ79s_xl4Zxx8,9641
544
545
  tomwer/gui/reconstruction/axis/AxisOptionsWidget.py,sha256=M47xflZ68KkTDg8tksFt8n7ZFVIr8tJxstlPyG4Odq0,12168
545
546
  tomwer/gui/reconstruction/axis/AxisSettingsWidget.py,sha256=7GpHteE2j9RUo-jUQoJdXJ-GnIi9VnY13Lveq3mvd1M,28120
@@ -561,20 +562,22 @@ tomwer/gui/reconstruction/nabu/check.py,sha256=5DYLlVCyXm3ax5VgogX79n1Oyl3O_JUvZ
561
562
  tomwer/gui/reconstruction/nabu/helical.py,sha256=TAVPcuZdgtZSz37ESqi_yuLhYuNnGde_0drvjTntahs,3708
562
563
  tomwer/gui/reconstruction/nabu/nabuflow.py,sha256=mnFFd9z7IC9FFZ3xcOr-6g2hvY0R7PtnFI-AMgWqHhI,14977
563
564
  tomwer/gui/reconstruction/nabu/platform.py,sha256=eSPs2yUfBSHsqZ8bYY_BJ7zuRXc5sxXA4lRxlQaFBz0,3859
564
- tomwer/gui/reconstruction/nabu/slices.py,sha256=fnWfbF2O7f5D4WOVcx4L1pu9WVRN_4A_122b8R-R_48,24291
565
+ tomwer/gui/reconstruction/nabu/slices.py,sha256=fDvYrDDvwYmXFmjEKU4zv3NdkUciPYM4rqteSb9pQD8,24283
565
566
  tomwer/gui/reconstruction/nabu/slurm.py,sha256=yfJD8KgX45Be5CUi6bn2CdocrQemJPxDYBBqoLoXqn0,1268
566
567
  tomwer/gui/reconstruction/nabu/volume.py,sha256=OGstMDOd7DHY0PVUJdPRxOtSH7SaJyy7VNWU1F6ci6g,17826
567
568
  tomwer/gui/reconstruction/nabu/nabuconfig/__init__.py,sha256=WgEFXIrUDhX0vpBNlKiymHEY9p1DMdk4QZkvnXIC8yk,77
568
569
  tomwer/gui/reconstruction/nabu/nabuconfig/base.py,sha256=7jB8VKVk5zt2QP4z1Vx2k7vLfPN5jjeGnCL_dLXr1J4,2133
569
- tomwer/gui/reconstruction/nabu/nabuconfig/ctf.py,sha256=_2eDt-Y5LaJ5J0Q2wm0sIFQuSHXYjPqQGYC28Iqr4LE,13095
570
+ tomwer/gui/reconstruction/nabu/nabuconfig/ctf.py,sha256=6zFiWhaJcJAWsZS0-djZ3HUROxUGHKa0Zw_XTsDvN10,12559
570
571
  tomwer/gui/reconstruction/nabu/nabuconfig/nabuconfig.py,sha256=5tCkwvgCv_Rdt7yP4ZUrq9ZGKE7Yy9Ht-n7XvCGIoTw,9048
571
572
  tomwer/gui/reconstruction/nabu/nabuconfig/output.py,sha256=0SShYqvFj-motxTw20e3I1Z0WiierSqgOsN15qwe-TY,11907
572
573
  tomwer/gui/reconstruction/nabu/nabuconfig/phase.py,sha256=t4rVi6DCwRkrfGv_9hD1SWMwu9CMpzxjAwyH_YmC3Gw,16238
573
- tomwer/gui/reconstruction/nabu/nabuconfig/preprocessing.py,sha256=3FME_SNO-cvek-hzuhh87cesuH3cdfqBI8w-fgwBO4U,32556
574
+ tomwer/gui/reconstruction/nabu/nabuconfig/preprocessing.py,sha256=utJgcburzX_WNdXItAKuENd97oLIs4QzFmLrNUF0n3c,32532
574
575
  tomwer/gui/reconstruction/nabu/nabuconfig/reconstruction.py,sha256=W0EXvvEgtlOtxgg7CjsSj2aTjfpRwYfQ_I1fDX0cPxE,42571
576
+ tomwer/gui/reconstruction/nabu/nabuconfig/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
577
+ tomwer/gui/reconstruction/nabu/nabuconfig/tests/test_NabuConfiguration.py,sha256=xORtyJ9I4UDC_COEA2RMqvEAARLLorZFkwZoeuDa67c,1811
575
578
  tomwer/gui/reconstruction/nabu/test/test_cast_volume.py,sha256=Gtz_LduqKQNiVuVYrvtoPkE-DgG9QotS1mK-siSl8HU,3451
576
579
  tomwer/gui/reconstruction/nabu/test/test_check.py,sha256=KXg1Gg4FVjQ9GkBOgb0ZJh6_c3JMeJTtyX5UVY6vdms,2318
577
- tomwer/gui/reconstruction/nabu/test/test_ctf.py,sha256=uiJznrY6ScH51xaaSUFfplg9XJcFacczIV8_7k9tuRg,1554
580
+ tomwer/gui/reconstruction/nabu/test/test_ctf.py,sha256=9LaonqdG7kp1Tst_kzTnVp9HCCGQjxo1vIKWj1zCFiY,1457
578
581
  tomwer/gui/reconstruction/nabu/test/test_helical.py,sha256=6vB_xXJOuNPHbXKLw8JWUtl-BB-Ntm8xkNEMV08ocEM,754
579
582
  tomwer/gui/reconstruction/nabu/test/test_nabu_preprocessing.py,sha256=OcTJ6-GQrIMETlezvJ7HlWE7_eWMKdfbfueohl_lZ-c,2258
580
583
  tomwer/gui/reconstruction/normalization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -592,7 +595,7 @@ tomwer/gui/reconstruction/scores/control.py,sha256=SVWMruB--sa_LSM1oZhjoFM5ci1oQ
592
595
  tomwer/gui/reconstruction/scores/scoreplot.py,sha256=_mHvuc8EoSgEFiQkDJM9p21CLkgLe3c3d-bvPfQ0mFc,31166
593
596
  tomwer/gui/reconstruction/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
594
597
  tomwer/gui/reconstruction/tests/test_axis.py,sha256=h0u_tTnQp57rg4oFtwjGSYNw5IujoxydOpnvNd98INA,7498
595
- tomwer/gui/reconstruction/tests/test_nabu.py,sha256=MRSxOYRbiZQ4P3jvSj_YMQofK5y_IgHNIb6TmuLFqAc,13644
598
+ tomwer/gui/reconstruction/tests/test_nabu.py,sha256=MbyaQcRYGOs20fO3sUY-KPHhOoRzXpEPrx_jCjKwLiA,13546
596
599
  tomwer/gui/reconstruction/tests/test_saaxis.py,sha256=dQjhULF913WMevo0ePIy6JQbnrP6zGVnde9XLRLBtFM,6792
597
600
  tomwer/gui/reconstruction/tests/test_sadeltabeta.py,sha256=96tE_gxIcmp0qDXQmIwSEkYl3Js7dT2CyUH1doyjGc0,4491
598
601
  tomwer/gui/samplemoved/__init__.py,sha256=jNA03mYWfP3_S1MRet6ijYe5DNCTK3Br7-5yrW3oEG4,8240
@@ -635,7 +638,7 @@ tomwer/gui/tests/test_axis_gui.py,sha256=7Sz7LKTADuRCxaPYFGes22-0AItYwfrcd6kgk4X
635
638
  tomwer/gui/tests/test_qfolder_dialog.py,sha256=hwN7uEDUYoGsHeJgjTvgMLV21umt_LTIemDsUTU2UvA,352
636
639
  tomwer/gui/utils/RangeWidget.py,sha256=HERjGePh_LxkJEELt2ZVOL_D8G_0xmaP4OotZlASPEo,1327
637
640
  tomwer/gui/utils/__init__.py,sha256=zRGvzYC0R676iDAjHIERQJlV4YgTcsXc3G34f6cUCK8,66
638
- tomwer/gui/utils/buttons.py,sha256=SAkd82M7jLYeSnUZ1E5IyIqQKfSKc18UcEEFFXzodjA,7366
641
+ tomwer/gui/utils/buttons.py,sha256=czf14thj6yC9oqrSga77pBDFUtizuAlsIG39GSfpIss,7361
639
642
  tomwer/gui/utils/completer.py,sha256=XQGVSiUdLa1MfgXPDY5qfcTxtjVerxmVKXmWDb-kQ-I,3606
640
643
  tomwer/gui/utils/flow.py,sha256=DO9QhS_0dOxMArowqDGU5yZ_a36CsvwQUoFPwuxjxkE,10646
641
644
  tomwer/gui/utils/gpu.py,sha256=R2sRA77zyxdy5bVYGNltQpKS_9wuaj9eIn6rglsWGWg,2223
@@ -689,7 +692,6 @@ tomwer/io/utils/tomoobj.py,sha256=PGcTc2nMDMzKGvL7u5LgIMc9MYhJwLN9yecA1gttmzE,28
689
692
  tomwer/io/utils/utils.py,sha256=BGXWRMl0l0VNHJDo5EA33gs9IHLiVCYbc4ThtU8-xPU,9292
690
693
  tomwer/io/utils/test/test_raw_and_processed_data.py,sha256=2TgR3GZZ1PJ2wlyCqRU4qxh6XrQF-thvSqLZFMSV5es,552
691
694
  tomwer/io/utils/test/test_utils.py,sha256=1EVY_N0vryUJYAe-l_CM0HbqQr-8tf7DAM6XyVy_4-U,1922
692
- tomwer/model/dataset.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
693
695
  tomwer/resources/__init__.py,sha256=yGvSUNzqb_1F2qvcXARl3m6yqZYagpeUWjOayUY4B8s,4613
694
696
  tomwer/resources/gui/icons/Imagej_icon.png,sha256=JFDzPw20pzRrf6wLBnScXEcmTVt6orXPzwPwniKeVss,1618960
695
697
  tomwer/resources/gui/icons/a.png,sha256=YrYFndLl3SUcsYNJDloU9YeJLBUkiMmgvDjDNJCMipI,3858
@@ -833,14 +835,14 @@ tomwer/synctools/rsyncmanager.py,sha256=4SvN0Bk_D_WavBWFvF64Vxmll5kXeOrhmgOI4k0g
833
835
  tomwer/synctools/saaxis.py,sha256=hvsJ3g189fA3FWZUdUFrqPLDRh5T-V7ptWY2YhJJ13I,669
834
836
  tomwer/synctools/sadeltabeta.py,sha256=WCrBx-2lBlQUuoZlbR_HQaBAH8owsghh2j1TQXiBMIw,694
835
837
  tomwer/synctools/stacks/__init__.py,sha256=wWN09X2qRXzBSekl5nkpEx1WDAcU2LQLxO9NpmW3bDU,165
836
- tomwer/synctools/stacks/processingstack.py,sha256=egB5kg5DesKkfzGhfcM9_ffozPFwBYupdPiebSQMQXU,5472
838
+ tomwer/synctools/stacks/processingstack.py,sha256=3FE7Z_dHvPS6k3HoYr1WJSkdOk4mM_R8OgFylw2tTc4,5959
837
839
  tomwer/synctools/stacks/control/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
838
840
  tomwer/synctools/stacks/control/datalistener.py,sha256=XN40esWfSQPgsy9HHrjvd3imSg7gcTzZ2OJgAFEtbEs,3785
839
841
  tomwer/synctools/stacks/reconstruction/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
840
842
  tomwer/synctools/stacks/reconstruction/axis.py,sha256=yq36BFGUGq0dtrDYE581nA2kMomMex6Nl7JSF2EVa_U,6088
841
843
  tomwer/synctools/stacks/reconstruction/castvolume.py,sha256=hyLW_M6uR81nUAk1ZvyyYMd3gvIcWfqKF7RSdUgVzmQ,6795
842
844
  tomwer/synctools/stacks/reconstruction/dkrefcopy.py,sha256=bemmlZajyoT7hAvGeEfhEXuxIN1IwhgEwnYSe1htXKA,6171
843
- tomwer/synctools/stacks/reconstruction/nabu.py,sha256=sSrxcUdn3B6u4gKtevlw5Vc5wI9Qf-mzCbOowT2W0zM,6495
845
+ tomwer/synctools/stacks/reconstruction/nabu.py,sha256=fr86pc9XJahx3tel1lRoZU1GQZ64px3R11W4IMWhLAE,6661
844
846
  tomwer/synctools/stacks/reconstruction/normalization.py,sha256=WSlx-aad8OhKI-2wZDe2pKzu9ht-446Yrwo0Z0cUaE0,4044
845
847
  tomwer/synctools/stacks/reconstruction/saaxis.py,sha256=6HHfNfT4n6podzB_X88AjC7simiFAHpoi520nt3OexY,5808
846
848
  tomwer/synctools/stacks/reconstruction/sadeltabeta.py,sha256=Oo0mczxv3-DxedpOybyMSUZAlcf65W8ZiCeTvPMHEas,5796
@@ -849,7 +851,6 @@ tomwer/synctools/tests/test_darkRefs.py,sha256=1OgWaV-hgDmi4rkh0hxjCW_codBAnxNhp
849
851
  tomwer/synctools/tests/test_foldertransfer.py,sha256=ZFIJWSjgYAWw3ktzamid5DJZNnMkAV6Pj72dKG69cJc,12024
850
852
  tomwer/synctools/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
851
853
  tomwer/synctools/utils/scanstages.py,sha256=xd27Y1mIcL9YGTHER7MX7oS_ky12R_y2fjIznT6p2rg,7797
852
- tomwer/tasks/reconstruction/cleardarkflat.py,sha256=_V_x7W8vp1_AqqtQ9xk2VRgwlivn4IPTLEpWySjSZRE,1353
853
854
  tomwer/tests/__init__.py,sha256=dPPaIvpzHssjwxsMzYJM_gxQ2e0cnRyQHXxi9ux6ZOY,19
854
855
  tomwer/tests/conftest.py,sha256=0XlKfOrVtPg8VmyQn4BoK_mzcliFUtacDGLlZ5wD_PM,1912
855
856
  tomwer/tests/datasets.py,sha256=QXQ3jSwgWzfq4CaELOSrk9kHg5GmrP7kGHsdOlNSEIE,336
@@ -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.0rc3.dist-info/licenses/LICENSE,sha256=62p1wL0n9WMTu8x2YDv0odYgTqeSvTd9mQ0v6Mq7lzE,1876
910
- tomwer-1.5.0rc3.dist-info/METADATA,sha256=Kd1h0AEyK9dV1mG7iP5DfNXBkabmhYXMM9b6QJyHcik,13459
911
- tomwer-1.5.0rc3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
912
- tomwer-1.5.0rc3.dist-info/entry_points.txt,sha256=py3ZUWvGnWGc5c7Yhw_uBTm8Fmew0BDw3aQZnWMBNZI,500
913
- tomwer-1.5.0rc3.dist-info/top_level.txt,sha256=Yz5zKh0FPiImtzHYcPuztG1AO8-6KEpUWgoChGbA0Ys,21
914
- tomwer-1.5.0rc3.dist-info/RECORD,,
910
+ tomwer-1.5.2.dist-info/licenses/LICENSE,sha256=62p1wL0n9WMTu8x2YDv0odYgTqeSvTd9mQ0v6Mq7lzE,1876
911
+ tomwer-1.5.2.dist-info/METADATA,sha256=GIxAXiLuueEJjDNgHpJLxxSxCWI3nXYdkWvtn9wWo88,11636
912
+ tomwer-1.5.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
913
+ tomwer-1.5.2.dist-info/entry_points.txt,sha256=py3ZUWvGnWGc5c7Yhw_uBTm8Fmew0BDw3aQZnWMBNZI,500
914
+ tomwer-1.5.2.dist-info/top_level.txt,sha256=Yz5zKh0FPiImtzHYcPuztG1AO8-6KEpUWgoChGbA0Ys,21
915
+ tomwer-1.5.2.dist-info/RECORD,,
@@ -1,42 +0,0 @@
1
- """
2
- Contains task to clear reduced dark and flat frames
3
- """
4
-
5
- from __future__ import annotations
6
-
7
- from tomoscan.scanbase import TomoScanBase as TomoscanScanBase
8
-
9
- from processview.core.manager import DatasetState, ProcessManager
10
- from processview.core.superviseprocess import SuperviseProcess
11
-
12
- from tomwer.tasks.task import Task
13
- from tomwer.core.scan.scanbase import TomwerScanBase
14
- from tomwer.core.scan.scanfactory import ScanFactory
15
- from tomwer.core.utils.scanutils import data_identifier_to_scan
16
- from tomwer.core.reconstruction.darkflat import params as dkrf_reconsparams
17
- from tomwer.utils import docstring
18
-
19
-
20
- class ClearReducedDarkAndFlat(
21
- Task,
22
- SuperviseProcess,
23
- input_names=("data",),
24
- output_names=("data",),
25
- ):
26
- """
27
- Task to clear reduced darks and flats. Both on disk and on the object cache.
28
- th goal of this task is to make sure the scan is cleared of any reduced frames to reprocess it later.
29
- """
30
-
31
- def run(self):
32
- scan = self.inputs.data
33
- if not isinstance(scan, TomoscanScanBase):
34
- raise TypeError(
35
- f"scan should be an instance of {TomoscanScanBase}. Got {type(scan)}"
36
- )
37
- scan.set_reduced_flats(None)
38
- scan.reduced_flats_infos = None
39
- scan.set_reduced_darks(None)
40
- scan.reduced_darks_infos = None
41
-
42
- self.outputs.data = scan