tomwer 1.1.0rc6__py3-none-any.whl → 1.1.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.
Files changed (34) hide show
  1. orangecontrib/tomwer/widgets/cluster/__init__.py +1 -1
  2. orangecontrib/tomwer/widgets/control/EDF2NXTomomillOW.py +0 -1
  3. orangecontrib/tomwer/widgets/reconstruction/SAAxisOW.py +5 -4
  4. orangecontrib/tomwer/widgets/reconstruction/SADeltaBetaOW.py +3 -1
  5. orangecontrib/tomwer/widgets/visualization/DiffViewerOW.py +1 -1
  6. tomwer/app/canvas_launcher/mainwindow.py +62 -0
  7. tomwer/core/process/reconstruction/nabu/nabucommon.py +10 -5
  8. tomwer/core/process/reconstruction/nabu/nabuscores.py +13 -7
  9. tomwer/core/process/reconstruction/nabu/nabuslices.py +15 -3
  10. tomwer/core/process/reconstruction/nabu/nabuvolume.py +4 -1
  11. tomwer/core/process/reconstruction/nabu/utils.py +1 -0
  12. tomwer/core/process/reconstruction/saaxis/saaxis.py +14 -6
  13. tomwer/core/process/reconstruction/sadeltabeta/sadeltabeta.py +6 -1
  14. tomwer/core/scan/edfscan.py +4 -0
  15. tomwer/core/scan/test/test_scan.py +31 -29
  16. tomwer/core/utils/char.py +2 -0
  17. tomwer/gui/edit/imagekeyeditor.py +10 -7
  18. tomwer/gui/edit/nxtomoeditor.py +4 -2
  19. tomwer/gui/reconstruction/nabu/castvolume.py +29 -25
  20. tomwer/gui/reconstruction/nabu/nabuconfig/phase.py +1 -1
  21. tomwer/gui/utils/unitsystem.py +4 -1
  22. tomwer/gui/visualization/dataviewer.py +3 -1
  23. tomwer/gui/visualization/diffviewer/diffviewer.py +2 -11
  24. tomwer/resources/gui/illustrations/ctf_z1.png +0 -0
  25. tomwer/resources/gui/illustrations/ctf_z1.svg +36 -63
  26. tomwer/version.py +3 -3
  27. {tomwer-1.1.0rc6.dist-info → tomwer-1.1.1.dist-info}/METADATA +1 -1
  28. {tomwer-1.1.0rc6.dist-info → tomwer-1.1.1.dist-info}/RECORD +34 -34
  29. /tomwer-1.1.0rc6-py3.8-nspkg.pth → /tomwer-1.1.1-py3.8-nspkg.pth +0 -0
  30. {tomwer-1.1.0rc6.dist-info → tomwer-1.1.1.dist-info}/LICENSE +0 -0
  31. {tomwer-1.1.0rc6.dist-info → tomwer-1.1.1.dist-info}/WHEEL +0 -0
  32. {tomwer-1.1.0rc6.dist-info → tomwer-1.1.1.dist-info}/entry_points.txt +0 -0
  33. {tomwer-1.1.0rc6.dist-info → tomwer-1.1.1.dist-info}/namespace_packages.txt +0 -0
  34. {tomwer-1.1.0rc6.dist-info → tomwer-1.1.1.dist-info}/top_level.txt +0 -0
@@ -22,7 +22,7 @@
22
22
  #
23
23
  #############################################################################
24
24
 
25
- NAME = "cluster"
25
+ NAME = "compute cluster"
26
26
 
27
27
  ID = "orangecontrib.tomwer.widgets.cluster"
28
28
 
@@ -115,7 +115,6 @@ class EDF2NXOW(
115
115
  self._loadSettings()
116
116
 
117
117
  def _updateSettings(self):
118
- super()._updateSettings()
119
118
  self._ewoks_default_inputs[ # pylint: disable=E1137
120
119
  "convert_auto_edfscan_channel"
121
120
  ] = self.convertAutoEDFScanReceivedFromChannel()
@@ -190,7 +190,8 @@ class SAAxisWindow(_SAAxisWindow):
190
190
  if scan is None:
191
191
  return
192
192
  assert isinstance(scan, TomwerScanBase)
193
- selected_cor_value = self.getCurrentCorValue()
193
+ selected_cor_value = self.getCurrentCorValue() or scan.saaxis_params.autofocus
194
+ # if validate is done manually then pick current cor value; else we are in 'auto mode' and get it from the autofocus.
194
195
  details = ProcessManager().get_dataset_details(
195
196
  dataset_id=scan.get_identifier(), process=self._processing_stack
196
197
  )
@@ -453,9 +454,9 @@ class SAAxisOW(SuperviseOW, WidgetLongProcessing):
453
454
  "data": None,
454
455
  "sa_axis_params": self._widget.getConfiguration(),
455
456
  }
456
- self._ewoks_default_inputs["sa_axis_params"][
457
- "autofocus_lock"
458
- ] = self._widget.isAutoFocusLock()
457
+ self._ewoks_default_inputs["sa_axis_params"]["workflow"] = {
458
+ "autofocus_lock": self._widget.isAutoFocusLock(),
459
+ }
459
460
 
460
461
  def _raiseResults(self):
461
462
  if not self.isAutoFocusLock():
@@ -125,7 +125,9 @@ class SADeltaBetaWindow(_SADeltaBetaWindow):
125
125
  if scan is None:
126
126
  return
127
127
  assert isinstance(scan, TomwerScanBase)
128
- selected_db_value = self.getCurrentDeltaBetaValue()
128
+ selected_db_value = (
129
+ self.getCurrentDeltaBetaValue() or scan.sa_delta_beta_params.autofocus
130
+ )
129
131
  if selected_db_value is None:
130
132
  infos = "no selected delta / beta value. {} skip SADeltaBetaParams".format(
131
133
  scan
@@ -74,4 +74,4 @@ class DiffViewerOW(widget.OWBaseWidget, openclass=True):
74
74
  self.viewer.addScan(scan)
75
75
 
76
76
  def sizeHint(self):
77
- return qt.QSize(400, 500)
77
+ return qt.QSize(500, 700)
@@ -16,6 +16,7 @@ from orangecanvas.application.outputview import (
16
16
  ExceptHook,
17
17
  TerminalTextDocument,
18
18
  )
19
+ from xml.sax.saxutils import escape
19
20
  import logging
20
21
  import os
21
22
  import shutil
@@ -26,6 +27,19 @@ from .config import TomwerConfig, TomwerSplashScreen
26
27
  import tomwer.version
27
28
  from urllib.request import urlopen
28
29
 
30
+ try:
31
+ import nabu
32
+ except ImportError:
33
+ has_nabu = False
34
+ else:
35
+ has_nabu = True
36
+ try:
37
+ import nxtomomill.version
38
+ except ImportError:
39
+ has_nxtomomill = False
40
+ else:
41
+ has_nxtomomill = True
42
+
29
43
  _logger = logging.getLogger(__file__)
30
44
 
31
45
  MAX_LOG_FILE = 10
@@ -68,6 +82,13 @@ class MainWindow(_MainWindow):
68
82
  super().setup_menu()
69
83
  self.view_menu.addAction(self.show_processes_manager_action)
70
84
 
85
+ def open_about(self):
86
+ # type: () -> None
87
+ """Open the about dialog."""
88
+ dlg = AboutDialog(self)
89
+ dlg.setAttribute(qt.Qt.WA_DeleteOnClose)
90
+ dlg.exec()
91
+
71
92
 
72
93
  log = logging.getLogger(__name__)
73
94
 
@@ -175,6 +196,47 @@ def widget_settings_dir():
175
196
  return os.path.join(data_dir(), "widgets")
176
197
 
177
198
 
199
+ ABOUT_TEMPLATE = """\
200
+ <center>
201
+ <h4>{name}</h4>
202
+ <p>tomwer version: {tomwer_version}</p>
203
+ <p>nabu version: {nabu_version}</p>
204
+ <p>nxtomomill version: {nxtomomill_version}</p>
205
+ </center>
206
+ """
207
+
208
+
209
+ class AboutDialog(qt.QDialog):
210
+ def __init__(self, parent=None, **kwargs) -> None:
211
+ super().__init__(parent, **kwargs)
212
+ layout = qt.QVBoxLayout()
213
+ label = qt.QLabel(self)
214
+
215
+ pixmap, _ = TomwerConfig.splash_screen()
216
+ pixmap = pixmap.scaled(150, 150)
217
+
218
+ label.setPixmap(pixmap)
219
+
220
+ layout.addWidget(label, qt.Qt.AlignCenter)
221
+
222
+ text = ABOUT_TEMPLATE.format(
223
+ name=escape("tomwer"),
224
+ tomwer_version=escape(tomwer.version.version),
225
+ nabu_version=escape(nabu.version if has_nabu else "not installed"),
226
+ nxtomomill_version=escape(
227
+ nxtomomill.version.version if has_nxtomomill else "not installed"
228
+ ),
229
+ )
230
+ text_label = qt.QLabel(text)
231
+ layout.addWidget(text_label, qt.Qt.AlignCenter)
232
+
233
+ buttons = qt.QDialogButtonBox(qt.QDialogButtonBox.Close, qt.Qt.Horizontal, self)
234
+ layout.addWidget(buttons)
235
+ buttons.rejected.connect(self.accept)
236
+ layout.setSizeConstraint(qt.QVBoxLayout.SetFixedSize)
237
+ self.setLayout(layout)
238
+
239
+
178
240
  class OMain(_OMain):
179
241
  config: TomwerConfig
180
242
  DefaultConfig = "tomwer.app.canvas_launcher.config.TomwerConfig"
@@ -453,13 +453,18 @@ class _NabuBaseReconstructor:
453
453
  """
454
454
  # handle phase
455
455
  pag = False
456
+ ctf = False
456
457
  db = None
457
458
  if "phase" in config:
458
- if (
459
+ pag = (
459
460
  "method" in config["phase"]
460
461
  and config["phase"]["method"] == _NabuPhaseMethod.PAGANIN.value
461
- ):
462
- pag = True
462
+ )
463
+ ctf = (
464
+ "method" in config["phase"]
465
+ and config["phase"]["method"] == _NabuPhaseMethod.CTF.value
466
+ )
467
+ if pag or ctf:
463
468
  if "delta_beta" in config["phase"]:
464
469
  if not numpy.isscalar(config["phase"]["delta_beta"]):
465
470
  if len(config["phase"]["delta_beta"]) > 1:
@@ -473,7 +478,7 @@ class _NabuBaseReconstructor:
473
478
  db = round(float(config["phase"]["delta_beta"]))
474
479
  # handle output
475
480
  if "output" in config:
476
- _file_name = self._get_file_basename_reconstruction(pag=pag, db=db)
481
+ _file_name = self._get_file_basename_reconstruction(pag=pag, db=db, ctf=ctf)
477
482
  config["output"]["file_prefix"] = _file_name
478
483
  location = config["output"].get("location", None)
479
484
  if location not in ("", None):
@@ -565,7 +570,7 @@ class _NabuBaseReconstructor:
565
570
 
566
571
  return config
567
572
 
568
- def _get_file_basename_reconstruction(self, pag, db):
573
+ def _get_file_basename_reconstruction(self, pag, db, ctf):
569
574
  """return created file base name"""
570
575
  raise NotImplementedError("Base class")
571
576
 
@@ -235,18 +235,24 @@ class _Reconstructor(_NabuBaseReconstructor):
235
235
  - create the output directory if does not exist
236
236
  """
237
237
  pag = False
238
+ ctf = False
238
239
  db = None
239
240
  if "phase" in _config:
240
- if "method" in _config["phase"] and _config["phase"]["method"] not in (
241
- "",
242
- utils._NabuPhaseMethod.NONE.value,
243
- ):
241
+ phase_method = _config["phase"].get("method", "").lower()
242
+ if phase_method in ("pag", "paganin"):
244
243
  pag = True
245
- if "delta_beta" in _config["phase"]:
246
- db = round(float(_config["phase"]["delta_beta"]))
244
+ elif phase_method in ("ctf",):
245
+ ctf = True
246
+
247
+ if "delta_beta" in _config["phase"]:
248
+ db = round(float(_config["phase"]["delta_beta"]))
247
249
  if "output" in _config:
248
250
  _file_name = SingleSliceRunner.get_file_basename_reconstruction(
249
- scan=self.scan, slice_index=self.slice_index, pag=pag, db=db
251
+ scan=self.scan,
252
+ slice_index=self.slice_index,
253
+ pag=pag,
254
+ db=db,
255
+ ctf=ctf,
250
256
  )
251
257
  _config["output"]["file_prefix"] = "cor_{}_{}".format(_file_name, cor)
252
258
  if _config["output"]["location"] not in ("", None):
@@ -643,7 +643,9 @@ class SingleSliceRunner(_NabuBaseReconstructor):
643
643
  return super()._get_futures_slurm_callback(config_to_dump)
644
644
 
645
645
  @staticmethod
646
- def get_file_basename_reconstruction(scan, pag, db, slice_index: Union[str, int]):
646
+ def get_file_basename_reconstruction(
647
+ scan, pag, ctf, db, slice_index: Union[str, int]
648
+ ):
647
649
  if pag:
648
650
  assert db is not None, "if paganin defined, db should not be None"
649
651
  if slice_index == "middle":
@@ -657,6 +659,8 @@ class SingleSliceRunner(_NabuBaseReconstructor):
657
659
  if slice_index is None:
658
660
  if pag:
659
661
  return "_".join((basename + "pag", "db" + str(db).zfill(4)))
662
+ elif ctf:
663
+ return "_".join((basename + "ctf", "db" + str(db).zfill(4)))
660
664
  else:
661
665
  return basename
662
666
  else:
@@ -668,11 +672,19 @@ class SingleSliceRunner(_NabuBaseReconstructor):
668
672
  "db" + str(db).zfill(4),
669
673
  )
670
674
  )
675
+ elif ctf:
676
+ return "_".join(
677
+ (
678
+ basename + "slice_ctf",
679
+ str(slice_index).zfill(4),
680
+ "db" + str(db).zfill(4),
681
+ )
682
+ )
671
683
  else:
672
684
  return "_".join((basename + "slice", str(slice_index).zfill(4)))
673
685
 
674
686
  @docstring(_NabuBaseReconstructor)
675
- def _get_file_basename_reconstruction(self, pag, db):
687
+ def _get_file_basename_reconstruction(self, pag, db, ctf):
676
688
  """
677
689
 
678
690
  :param TomwerScanBase scan: scan reconstructed
@@ -684,7 +696,7 @@ class SingleSliceRunner(_NabuBaseReconstructor):
684
696
  :return: basename of the file reconstructed (without any extension)
685
697
  """
686
698
  return self.get_file_basename_reconstruction(
687
- scan=self.scan, db=db, pag=pag, slice_index=self.slice_index
699
+ scan=self.scan, db=db, pag=pag, slice_index=self.slice_index, ctf=ctf
688
700
  )
689
701
 
690
702
 
@@ -340,7 +340,7 @@ class VolumeRunner(_NabuBaseReconstructor):
340
340
  return config_s, extra_opts
341
341
 
342
342
  @docstring(_NabuBaseReconstructor)
343
- def _get_file_basename_reconstruction(self, pag, db):
343
+ def _get_file_basename_reconstruction(self, pag, db, ctf):
344
344
  """
345
345
 
346
346
  :param TomwerScanBase scan: scan reconstructed
@@ -352,6 +352,7 @@ class VolumeRunner(_NabuBaseReconstructor):
352
352
  :return: basename of the file reconstructed (without any extension)
353
353
  """
354
354
  assert type(db) in (int, type(None))
355
+ assert not pag == ctf == True, "cannot ask for both pag and ctf active"
355
356
  if isinstance(self.scan, HDF5TomoScan):
356
357
  basename, _ = os.path.splitext(self.scan.master_file)
357
358
  basename = os.path.basename(basename)
@@ -359,6 +360,8 @@ class VolumeRunner(_NabuBaseReconstructor):
359
360
  basename = os.path.basename(self.scan.path)
360
361
  if pag:
361
362
  return "_".join((basename + "pag", "db" + str(db).zfill(4), "vol"))
363
+ elif ctf:
364
+ return "_".join((basename + "ctf", "db" + str(db).zfill(4), "vol"))
362
365
  else:
363
366
  return "_".join((basename, "vol"))
364
367
 
@@ -413,6 +413,7 @@ def nabu_std_err_has_error(errs: typing.Optional[bytes]):
413
413
  return (
414
414
  "warning" in line
415
415
  or "Warning" in line
416
+ or "deprecated" in line
416
417
  or line.replace(" ", "") == ""
417
418
  or "unable to load" in line
418
419
  )
@@ -149,12 +149,16 @@ def one_slice_several_cor(
149
149
  output_dir = os.path.join(scan.path, DEFAULT_RECONS_FOLDER)
150
150
 
151
151
  db = None
152
- pag = None
152
+ pag = False
153
+ ctf = False
153
154
  if "phase" in nabu_config:
154
- if "method" in nabu_config["phase"] and nabu_config["phase"]["method"] != "":
155
- if "delta_beta" in nabu_config["phase"]:
156
- pag = True
157
- db = round(float(nabu_config["phase"]["delta_beta"]))
155
+ phase_method = nabu_config["phase"].get("method", "").lower()
156
+ if phase_method in ("pag", "paganin"):
157
+ pag = True
158
+ elif phase_method in ("ctf",):
159
+ ctf = True
160
+ if "delta_beta" in nabu_config["phase"]:
161
+ db = round(float(nabu_config["phase"]["delta_beta"]))
158
162
 
159
163
  for cor, future_tomo_obj in future_tomo_objs.items():
160
164
  future_tomo_obj.results()
@@ -163,7 +167,11 @@ def one_slice_several_cor(
163
167
  continue
164
168
  else:
165
169
  _file_name = SingleSliceRunner.get_file_basename_reconstruction(
166
- scan=scan, slice_index=slice_index, pag=pag, db=db
170
+ scan=scan,
171
+ slice_index=slice_index,
172
+ pag=pag,
173
+ db=db,
174
+ ctf=ctf,
167
175
  )
168
176
  file_prefix = "cor_{}_{}".format(_file_name, cor)
169
177
 
@@ -192,9 +192,13 @@ def one_slice_several_db(
192
192
  advancement.increaseAdvancement(1)
193
193
 
194
194
  pag = False
195
+ ctf = False
195
196
  if "phase" in config:
196
- if "method" in config["phase"] and config["phase"]["method"] != "":
197
+ phase_method = config["phase"].get("method", "").lower()
198
+ if phase_method in ("pag", "paganin"):
197
199
  pag = True
200
+ elif phase_method in ("ctf",):
201
+ ctf = True
198
202
 
199
203
  # treat future.
200
204
  for db, future_tomo_obj_list in future_tomo_objs.items():
@@ -210,6 +214,7 @@ def one_slice_several_db(
210
214
  slice_index=slice_index,
211
215
  pag=pag,
212
216
  db=int(db) if db is not None else None,
217
+ ctf=ctf,
213
218
  )
214
219
  # retrieve url
215
220
  volume_identifier = nabu_utils.get_recons_volume_identifier(
@@ -256,6 +256,10 @@ class EDFTomoScan(_tsEDFTomoScan, TomwerScanBase):
256
256
  indexStr = local_str.split("slice_pag_")[-1].split("_")[
257
257
  0
258
258
  ]
259
+ elif "slice_ctf_" in local_str:
260
+ indexStr = local_str.split("slice_ctf_")[-1].split("_")[
261
+ 0
262
+ ]
259
263
  else:
260
264
  indexStr = local_str.split("slice_")[-1].split("_")[0]
261
265
  if containsDigits(indexStr):
@@ -90,38 +90,40 @@ class TestScanValidatorFindNabuFiles(unittest.TestCase):
90
90
 
91
91
  def test(self) -> None:
92
92
  for slice_index in (None, 1, 15):
93
- for pag_db in (None, 100, 500):
94
- file_name = (
95
- nabuslices.SingleSliceRunner.get_file_basename_reconstruction(
96
- slice_index=slice_index,
97
- scan=self.scan,
98
- pag=pag_db is not None,
99
- db=pag_db,
100
- )
101
- )
102
- for file_extension in ("npy", "npz", "hdf5"):
103
- with self.subTest(
104
- slice_index=slice_index,
105
- pag_db=pag_db,
106
- file_extension=file_extension,
107
- ):
108
- file_path = os.path.join(
109
- self.scan.path, file_name + "." + file_extension
93
+ for delta_beta in (None, 100, 500):
94
+ for pag in (True, False):
95
+ for ctf in (True, False):
96
+ file_name = nabuslices.SingleSliceRunner.get_file_basename_reconstruction(
97
+ slice_index=slice_index,
98
+ scan=self.scan,
99
+ pag=pag if delta_beta is not None else False,
100
+ ctf=ctf if delta_beta is not None else False,
101
+ db=delta_beta,
110
102
  )
111
-
112
- # simple context Manager which create the file
113
- # and remove it when leave
114
- with TestScanValidatorFindNabuFiles.FileCreator(file_path):
115
- n_to_discover = 1
116
- if slice_index is None:
117
- n_to_discover = 0
118
- self.assertEqual(
119
- len(
120
- self.scan.get_reconstructions_paths(self.scan.path)
121
- ),
122
- n_to_discover,
103
+ print("file_name is", file_name)
104
+ with self.subTest(
105
+ slice_index=slice_index,
106
+ pag_db=delta_beta,
107
+ ):
108
+ file_path = os.path.join(
109
+ self.scan.path, file_name + ".hdf5"
123
110
  )
124
111
 
112
+ # simple context Manager which create the file
113
+ # and remove it when leave
114
+ with TestScanValidatorFindNabuFiles.FileCreator(file_path):
115
+ n_to_discover = 1
116
+ if slice_index is None:
117
+ n_to_discover = 0
118
+ self.assertEqual(
119
+ len(
120
+ self.scan.get_reconstructions_paths(
121
+ self.scan.path
122
+ )
123
+ ),
124
+ n_to_discover,
125
+ )
126
+
125
127
 
126
128
  class TestScanValidatorFindPyHSTFiles(unittest.TestCase):
127
129
  """Function testing the getReconstructionsPaths function is correctly
tomwer/core/utils/char.py CHANGED
@@ -39,3 +39,5 @@ DELTA_CHAR = (b"\xce\xb4").decode("utf-8")
39
39
  PSI_CHAR = (b"\xcf\x88").decode("utf-8")
40
40
 
41
41
  THETA_CHAR = (b"\xce\xb8").decode("utf-8")
42
+
43
+ MU_CHAR = (b"\xce\xbc").decode("utf-8")
@@ -171,7 +171,7 @@ class _ImageKeyEditor(qt.QDialog):
171
171
  # mode selection
172
172
  self.layout().addWidget(qt.QLabel("selection mode"), 1, 0, 1, 1)
173
173
  self._selectionModeCB = qt.QComboBox(self)
174
- for mode in ("slice", "list"):
174
+ for mode in ("range", "list"):
175
175
  self._selectionModeCB.addItem(mode)
176
176
  self._selectionModeCB.setCurrentIndex(self._selectionModeCB.findText("list"))
177
177
  self.layout().addWidget(self._selectionModeCB, 1, 1, 1, 1)
@@ -224,7 +224,7 @@ class _ImageKeyEditor(qt.QDialog):
224
224
  def getSelectionMode(self) -> str:
225
225
  """
226
226
 
227
- :return: frame indexes selection mode. Can be 'slice' or 'list'
227
+ :return: frame indexes selection mode. Can be 'range' or 'list'
228
228
  """
229
229
  return self._selectionModeCB.currentText()
230
230
 
@@ -234,7 +234,7 @@ class _ImageKeyEditor(qt.QDialog):
234
234
  :return: list of indexes to be modified
235
235
  :rtype: list
236
236
  """
237
- if self.getSelectionMode() == "slice":
237
+ if self.getSelectionMode() == "range":
238
238
  return self._selectionWidget.getSlice()
239
239
  elif self.getSelectionMode() == "list":
240
240
  return self._selectionWidget.getList()
@@ -321,7 +321,7 @@ class _ListSelection(qt.QWidget):
321
321
  def _selectFrames(self):
322
322
  if self._scan is None or self._scan() is None:
323
323
  _logger.warning(
324
- "No scan set or has been moved. Unable to select " "slices from it."
324
+ "No scan set or has been moved. Unable to select slices from it."
325
325
  )
326
326
  return
327
327
  scan = self._scan()
@@ -375,11 +375,14 @@ class _EditionSelection(qt.QWidget):
375
375
  def setSelectionMode(self, mode: str) -> None:
376
376
  """
377
377
 
378
- :param str mode: define indexes selection mode. Can be 'slice' or
378
+ :param str mode: define indexes selection mode. Can be 'range' or
379
379
  'list'
380
380
  """
381
- assert mode in ("slice", "list")
382
- self._sliceSelection.setVisible(mode == "slice")
381
+ if mode == "slice":
382
+ # for backward compatibility (user can have .ows with old name)
383
+ mode = "range"
384
+ assert mode in ("range", "list")
385
+ self._sliceSelection.setVisible(mode == "range")
383
386
  self._listSelection.setVisible(mode == "list")
384
387
 
385
388
  def getList(self) -> list:
@@ -225,8 +225,10 @@ class NXtomoEditor(qt.QWidget):
225
225
  self._fieldOfViewCB.setCurrentIndex(idx)
226
226
 
227
227
  def _updateFlipped(self, scan):
228
- self._xFlippedCB.setChecked(scan.x_flipped)
229
- self._yFlippedCB.setChecked(scan.y_flipped)
228
+ if scan.x_flipped is not None:
229
+ self._xFlippedCB.setChecked(scan.x_flipped)
230
+ if scan.y_flipped is not None:
231
+ self._yFlippedCB.setChecked(scan.y_flipped)
230
232
 
231
233
  def _updateDistance(self, scan):
232
234
  self._distanceMetricEntry.setValue(scan.distance)
@@ -66,30 +66,17 @@ class CastVolumeWidget(qt.QWidget):
66
66
  self.layout().addWidget(self._outputFileformatLabel, 1, 0, 1, 1)
67
67
  self._outputFileformatCB = QNabuFileFormatComboBox(self)
68
68
  self.layout().addWidget(self._outputFileformatCB, 1, 1, 1, 3)
69
- # rescale percentiles
70
- self._percentilesLabel = qt.QLabel("rescale percentiles")
71
- self.layout().addWidget(self._percentilesLabel, 2, 0, 1, 1)
72
- self._lowPercentileQSB = qt.QSpinBox(self)
73
- self._lowPercentileQSB.setRange(0, 100)
74
- self._lowPercentileQSB.setPrefix("min:")
75
- self._lowPercentileQSB.setSuffix("%")
76
- self._lowPercentileQSB.setValue(RESCALE_MIN_PERCENTILE)
77
- self.layout().addWidget(self._lowPercentileQSB, 2, 1, 1, 1)
78
- self._highPercentileQSB = qt.QSpinBox(self)
79
- self._highPercentileQSB.setRange(0, 100)
80
- self._highPercentileQSB.setPrefix("max:")
81
- self._highPercentileQSB.setSuffix("%")
82
- self._highPercentileQSB.setValue(RESCALE_MAX_PERCENTILE)
83
- self.layout().addWidget(self._highPercentileQSB, 2, 2, 1, 1)
69
+
84
70
  # let the user provide min and max manually
85
71
  self._minMaxLabel = qt.QLabel("min max values")
86
- self.layout().addWidget(self._minMaxLabel, 3, 0, 1, 1)
87
- self._minMaxAuto = qt.QCheckBox("auto")
72
+ self.layout().addWidget(self._minMaxLabel, 2, 0, 1, 1)
73
+ self._minMaxAuto = qt.QCheckBox("auto with rescale from percentiles")
88
74
  self._minMaxAuto.setChecked(True)
89
75
  self._minMaxAuto.setToolTip(
90
76
  "If set to auto will try to get min/max pixel values from nabu histogram else will compute it. Otherwise will values provided by the user"
91
77
  )
92
- self.layout().addWidget(self._minMaxAuto, 3, 1, 1, 1)
78
+ self.layout().addWidget(self._minMaxAuto, 2, 1, 1, 1)
79
+
93
80
  self._minPixValue = qt.QLineEdit("", self)
94
81
  self._minPixValue.setPlaceholderText("min")
95
82
  self._maxPixValue = qt.QLineEdit("", self)
@@ -98,14 +85,28 @@ class CastVolumeWidget(qt.QWidget):
98
85
  validator.setNotation(qt.QDoubleValidator.ScientificNotation)
99
86
  self._minPixValue.setValidator(validator)
100
87
  self._maxPixValue.setValidator(validator)
101
- self.layout().addWidget(self._minPixValue, 3, 2, 1, 1)
102
- self.layout().addWidget(self._maxPixValue, 3, 3, 1, 1)
88
+ self.layout().addWidget(self._minPixValue, 4, 2, 1, 1)
89
+ self.layout().addWidget(self._maxPixValue, 4, 3, 1, 1)
103
90
  self._minPixValue.setVisible(False)
104
91
  self._maxPixValue.setVisible(False)
105
-
92
+ # or from percentiles
93
+ self._percentilesLabel = qt.QLabel("rescale percentiles")
94
+ self.layout().addWidget(self._percentilesLabel, 3, 1, 1, 1)
95
+ self._lowPercentileQSB = qt.QSpinBox(self)
96
+ self._lowPercentileQSB.setRange(0, 100)
97
+ self._lowPercentileQSB.setPrefix("min:")
98
+ self._lowPercentileQSB.setSuffix("%")
99
+ self._lowPercentileQSB.setValue(RESCALE_MIN_PERCENTILE)
100
+ self.layout().addWidget(self._lowPercentileQSB, 3, 2, 1, 1)
101
+ self._highPercentileQSB = qt.QSpinBox(self)
102
+ self._highPercentileQSB.setRange(0, 100)
103
+ self._highPercentileQSB.setPrefix("max:")
104
+ self._highPercentileQSB.setSuffix("%")
105
+ self._highPercentileQSB.setValue(RESCALE_MAX_PERCENTILE)
106
+ self.layout().addWidget(self._highPercentileQSB, 3, 3, 1, 1)
106
107
  # save dir
107
108
  self._saveDirLabel = qt.QLabel("output directory", self)
108
- self.layout().addWidget(self._saveDirLabel, 4, 0, 1, 1)
109
+ self.layout().addWidget(self._saveDirLabel, 5, 0, 1, 1)
109
110
  self._useDefaultSaveDirQCB = qt.QCheckBox("default", self)
110
111
  self._useDefaultSaveDirQCB.setToolTip(
111
112
  f"Default directory is: {DEFAULT_OUTPUT_DIR}"
@@ -114,7 +115,7 @@ class CastVolumeWidget(qt.QWidget):
114
115
  qt.QSizePolicy.Minimum, qt.QSizePolicy.Minimum
115
116
  )
116
117
  self._useDefaultSaveDirQCB.setChecked(True)
117
- self.layout().addWidget(self._useDefaultSaveDirQCB, 4, 1, 1, 1)
118
+ self.layout().addWidget(self._useDefaultSaveDirQCB, 5, 1, 1, 1)
118
119
  self._saveDirQLE = QLFileSystem(text=DEFAULT_OUTPUT_DIR, parent=self)
119
120
  # force text because this is not a valid path
120
121
  self._saveDirQLE.setText(DEFAULT_OUTPUT_DIR)
@@ -125,11 +126,11 @@ class CastVolumeWidget(qt.QWidget):
125
126
  """
126
127
  )
127
128
  self._saveDirQLE.setVisible(False)
128
- self.layout().addWidget(self._saveDirQLE, 4, 2, 1, 2)
129
+ self.layout().addWidget(self._saveDirQLE, 5, 2, 1, 2)
129
130
  # overwrite
130
131
  self._overwriteCB = qt.QCheckBox("overwrite", self)
131
132
  self._overwriteCB.setChecked(True)
132
- self.layout().addWidget(self._overwriteCB, 5, 0, 1, 1)
133
+ self.layout().addWidget(self._overwriteCB, 6, 0, 1, 1)
133
134
  # spacer
134
135
  self._spacer = qt.QWidget(self)
135
136
  self._spacer.setSizePolicy(
@@ -275,3 +276,6 @@ class CastVolumeWidget(qt.QWidget):
275
276
  def _updatePixMinMaxVis(self, *args, **kwargs):
276
277
  self._minPixValue.setVisible(not self._minMaxAuto.isChecked())
277
278
  self._maxPixValue.setVisible(not self._minMaxAuto.isChecked())
279
+ self._percentilesLabel.setVisible(self._minMaxAuto.isChecked())
280
+ self._lowPercentileQSB.setVisible(self._minMaxAuto.isChecked())
281
+ self._highPercentileQSB.setVisible(self._minMaxAuto.isChecked())
@@ -147,7 +147,7 @@ class _NabuPhaseConfig(qt.QWidget, base._NabuStageConfigBase):
147
147
  @docstring(base._NabuStageConfigBase)
148
148
  def getConfiguration(self) -> dict:
149
149
  configuration = {"method": self.getMethod().value}
150
- if self.getMethod() is _NabuPhaseMethod.PAGANIN:
150
+ if self.getMethod() in (_NabuPhaseMethod.PAGANIN, _NabuPhaseMethod.CTF):
151
151
  configuration.update(self._paganinOpts.getConfiguration())
152
152
  configuration.update(self._unsharpOpts.getConfiguration())
153
153
  configuration.update(self._ctfOpts.getConfiguration())
@@ -34,6 +34,7 @@ __date__ = "21/09/2018"
34
34
 
35
35
  from silx.gui import qt
36
36
  from tomoscan.unitsystem import metricsystem
37
+ from tomwer.core.utils.char import MU_CHAR
37
38
  import logging
38
39
 
39
40
  _logger = logging.getLogger(__name__)
@@ -61,6 +62,7 @@ class MetricEntry(qt.QWidget):
61
62
 
62
63
  _CONVERSION = {
63
64
  "nm": metricsystem.nanometer.value,
65
+ f"{MU_CHAR}m": metricsystem.micrometer.value,
64
66
  "mm": metricsystem.millimeter.value,
65
67
  "cm": metricsystem.centimeter.value,
66
68
  "m": metricsystem.meter.value,
@@ -69,7 +71,7 @@ class MetricEntry(qt.QWidget):
69
71
  def __init__(self, name, default_unit="m", parent=None):
70
72
  qt.QWidget.__init__(self, parent)
71
73
  assert type(default_unit) is str
72
- assert default_unit in ("nm", "mm", "cm", "m")
74
+ assert default_unit in ("nm", "mm", "cm", "m", f"{MU_CHAR}m")
73
75
  self._base_unit = default_unit
74
76
 
75
77
  self.setLayout(qt.QHBoxLayout())
@@ -81,6 +83,7 @@ class MetricEntry(qt.QWidget):
81
83
 
82
84
  self._qcbUnit = qt.QComboBox(parent=self)
83
85
  self._qcbUnit.addItem("nm")
86
+ self._qcbUnit.addItem(f"{MU_CHAR}m")
84
87
  self._qcbUnit.addItem("mm")
85
88
  self._qcbUnit.addItem("cm")
86
89
  self._qcbUnit.addItem("m")
@@ -97,8 +97,10 @@ class DataViewer(qt.QMainWindow):
97
97
  self._controls = DisplayControl(parent=self)
98
98
  self._controlsDW = qt.QDockWidget(self)
99
99
  self._controlsDW.setWidget(self._controls)
100
- self._controlsDW.setFeatures(qt.QDockWidget.DockWidgetMovable)
100
+ self._controlsDW.setWindowTitle("infos")
101
101
  self.addDockWidget(qt.Qt.TopDockWidgetArea, self._controlsDW)
102
+ self._controlsDW.setTitleBarWidget(qt.QWidget(self))
103
+ self._controlsDW.setFloating(False)
102
104
 
103
105
  # connect signal / slot
104
106
  self._controls.sigDisplayModeChanged.connect(self._updateDisplay)
@@ -358,6 +358,7 @@ class DiffFrameViewer(qt.QMainWindow):
358
358
  self._framesSelector.setContentsMargins(0, 0, 0, 0)
359
359
  self._framesSelector.layout().setContentsMargins(0, 0, 0, 0)
360
360
  self._framesSelectorDW = qt.QDockWidget(parent=self)
361
+ self._framesSelectorDW.setWindowTitle("inputs")
361
362
  self._framesSelectorDW.setWidget(self._framesSelector)
362
363
  self._framesSelectorDW.setFeatures(qt.QDockWidget.DockWidgetMovable)
363
364
  self.addDockWidget(qt.Qt.TopDockWidgetArea, self._framesSelectorDW)
@@ -369,6 +370,7 @@ class DiffFrameViewer(qt.QMainWindow):
369
370
  self._shiftDW = qt.QDockWidget(parent=self)
370
371
  self._shiftDW.setWidget(self._shiftsWidget)
371
372
  self._shiftDW.setFeatures(qt.QDockWidget.DockWidgetMovable)
373
+ self._shiftDW.setWindowTitle("shifts")
372
374
  self.addDockWidget(qt.Qt.BottomDockWidgetArea, self._shiftDW)
373
375
 
374
376
  # define central widget
@@ -387,13 +389,6 @@ class DiffFrameViewer(qt.QMainWindow):
387
389
  toolbar.setFloatable(False)
388
390
  self.addToolBar(qt.Qt.TopToolBarArea, toolbar)
389
391
 
390
- # add filtering
391
- style = qt.QApplication.instance().style()
392
- icon = style.standardIcon(qt.QStyle.SP_DialogResetButton)
393
- self._clearAction = qt.QAction(icon, "Clear", toolbar)
394
- toolbar.addAction(self._clearAction)
395
- self._clearAction.triggered.connect(self.clear)
396
-
397
392
  # set up
398
393
  self._mainWidget.setAutoResetZoom(False)
399
394
  self._shiftsWidget.setFocus(qt.Qt.OtherFocusReason)
@@ -492,10 +487,6 @@ class DiffFrameViewer(qt.QMainWindow):
492
487
  )
493
488
  self._mainWidget.setImage2(shifted_image)
494
489
 
495
- def clear(self):
496
- self._framesSelector.clear()
497
- self._mainWidget.getPlot().clear()
498
-
499
490
  def _frameShiftsChanged(self):
500
491
  self._resetLeftFrame()
501
492
  self._resetRightFrame()
@@ -1,6 +1,4 @@
1
1
  <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
- <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
-
4
2
  <svg
5
3
  xmlns:dc="http://purl.org/dc/elements/1.1/"
6
4
  xmlns:cc="http://creativecommons.org/ns#"
@@ -14,9 +12,9 @@
14
12
  viewBox="0 0 52.916667 23.8125"
15
13
  version="1.1"
16
14
  id="svg8"
17
- inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
15
+ inkscape:version="1.0.2 (e86c870879, 2021-01-15)"
18
16
  sodipodi:docname="ctf_z1.svg"
19
- inkscape:export-filename="/media/payno/830add5c-f5d7-4db2-875e-03be4f0a67f0/dev/tomography/tomwer/tomwer/resources/gui/illustrations/ctf_z1.png"
17
+ inkscape:export-filename="/home/payno/dev/tomo/tomwer/tomwer/resources/gui/illustrations/ctf_z1.png"
20
18
  inkscape:export-xdpi="134.50999"
21
19
  inkscape:export-ydpi="134.50999">
22
20
  <defs
@@ -172,18 +170,19 @@
172
170
  inkscape:pageopacity="0.0"
173
171
  inkscape:pageshadow="2"
174
172
  inkscape:zoom="3.959798"
175
- inkscape:cx="30.247427"
176
- inkscape:cy="65.732653"
173
+ inkscape:cx="57.456907"
174
+ inkscape:cy="67.584462"
177
175
  inkscape:document-units="mm"
178
- inkscape:current-layer="text845-1"
176
+ inkscape:current-layer="layer1"
179
177
  showgrid="false"
180
178
  units="px"
181
179
  width="200px"
182
- inkscape:window-width="1848"
183
- inkscape:window-height="1136"
184
- inkscape:window-x="72"
180
+ inkscape:window-width="1920"
181
+ inkscape:window-height="1016"
182
+ inkscape:window-x="0"
185
183
  inkscape:window-y="27"
186
- inkscape:window-maximized="1" />
184
+ inkscape:window-maximized="1"
185
+ inkscape:document-rotation="0" />
187
186
  <metadata
188
187
  id="metadata5">
189
188
  <rdf:RDF>
@@ -284,27 +283,27 @@
284
283
  </g>
285
284
  <g
286
285
  aria-label="z1_h"
287
- style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#c20000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
286
+ style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#c20000;fill-opacity:1;stroke:none;stroke-width:0.264583"
288
287
  id="text845"
289
- transform="translate(0,14.287503)">
288
+ transform="translate(-4.118294,14.1495)">
290
289
  <path
291
290
  d="m 11.789953,272.74838 h 1.204405 v 0.23151 l -0.953602,1.10932 h 0.953602 v 0.20257 h -1.238856 v -0.23151 l 0.953602,-1.10932 h -0.919151 z"
292
- style="font-size:2.82222223px;fill:#c20000;fill-opacity:1;stroke-width:0.26458332"
291
+ style="font-size:2.82222px;fill:#c20000;fill-opacity:1;stroke-width:0.264583"
293
292
  id="path6960"
294
293
  inkscape:connector-curvature="0" />
295
294
  <path
296
295
  d="M 13.465647,274.05751 H 13.9204 v -1.56958 l -0.494716,0.0992 v -0.25356 l 0.49196,-0.0992 h 0.278363 v 1.82314 h 0.454753 v 0.23427 h -1.185113 z"
297
- style="font-size:2.82222223px;fill:#c20000;fill-opacity:1;stroke-width:0.26458332"
296
+ style="font-size:2.82222px;fill:#c20000;fill-opacity:1;stroke-width:0.264583"
298
297
  id="path6962"
299
298
  inkscape:connector-curvature="0" />
300
299
  <path
301
300
  d="m 16.349881,274.76031 v 0.19706 h -1.466233 v -0.19706 z"
302
- style="font-size:2.82222223px;fill:#c20000;fill-opacity:1;stroke-width:0.26458332"
301
+ style="font-size:2.82222px;fill:#c20000;fill-opacity:1;stroke-width:0.264583"
303
302
  id="path6964"
304
303
  inkscape:connector-curvature="0" />
305
304
  <path
306
305
  d="m 17.871235,273.36022 v 0.93156 h -0.253559 v -0.92329 q 0,-0.21911 -0.08544,-0.32797 -0.08544,-0.10887 -0.256315,-0.10887 -0.205328,0 -0.323839,0.13092 -0.118511,0.13091 -0.118511,0.35691 v 0.8723 h -0.254937 v -2.14423 h 0.254937 v 0.8406 q 0.09095,-0.13918 0.213596,-0.20808 0.124023,-0.0689 0.285253,-0.0689 0.265962,0 0.402388,0.16536 0.136425,0.16399 0.136425,0.48369 z"
307
- style="font-size:2.82222223px;fill:#c20000;fill-opacity:1;stroke-width:0.26458332"
306
+ style="font-size:2.82222px;fill:#c20000;fill-opacity:1;stroke-width:0.264583"
308
307
  id="path6966"
309
308
  inkscape:connector-curvature="0" />
310
309
  </g>
@@ -411,43 +410,24 @@
411
410
  id="path7001"
412
411
  inkscape:connector-curvature="0" />
413
412
  </g>
414
- <g
415
- id="g7037"
416
- transform="translate(0,14.287503)">
417
- <path
418
- style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.265, 0.265;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
419
- d="m 22.207031,271.45703 -0.265625,0.002 0.002,0.26563 0.265625,-0.002 z m -0.53125,0.004 -0.263672,0.004 0.002,0.26368 0.263672,-0.002 z m -0.529297,0.006 -0.265625,0.002 0.002,0.26367 0.265626,-0.002 z m -0.529296,0.004 -0.265626,0.002 0.002,0.26367 0.265625,-0.002 z m -0.53125,0.004 -0.263672,0.002 0.002,0.26367 0.263672,-0.002 z m -0.529297,0.004 -0.265625,0.002 0.002,0.26367 0.265625,-0.002 z m -0.529297,0.004 -0.265625,0.002 0.002,0.26367 0.265625,-0.002 z m -0.53125,0.004 -0.263672,0.002 0.002,0.26367 0.263672,-0.002 z m -0.529297,0.004 -0.265625,0.002 0.002,0.26367 0.265625,-0.002 z m -0.529297,0.004 -0.265625,0.002 0.002,0.26368 0.265625,-0.002 z m -0.53125,0.004 -0.263672,0.002 0.002,0.26367 0.263672,-0.002 z m -0.529297,0.004 -0.265625,0.002 0.002,0.26367 0.265625,-0.002 z m -0.529297,0.004 -0.265625,0.002 0.002,0.26367 0.265625,-0.002 z m -0.53125,0.004 -0.265625,0.002 0.002,0.26367 0.265625,-0.002 z m -0.529297,0.004 -0.265625,0.002 0.002,0.26563 0.265624,-0.002 z m -0.53125,0.004 -0.263671,0.002 0.002,0.26563 0.263671,-0.002 z m -0.529297,0.004 -0.265624,0.002 0.002,0.26562 0.265625,-0.002 z m -0.529296,0.004 -0.265625,0.002 0.002,0.26563 0.265625,-0.002 z m -0.53125,0.004 -0.263672,0.002 0.002,0.26563 0.263672,-0.002 z m -0.529297,0.004 -0.265625,0.002 0.002,0.26562 0.265625,-0.002 z m -0.529297,0.004 -0.265625,0.002 0.002,0.26563 0.265625,-0.002 z m -0.53125,0.004 -0.263672,0.002 0.002,0.26562 0.263672,-0.002 z m -0.529297,0.004 -0.265625,0.002 0.002,0.26562 0.265625,-0.002 z m -0.529297,0.004 -0.2656249,0.002 0.00195,0.26563 0.2656249,-0.002 z m -0.5312499,0.004 -0.2636719,0.002 0.00195,0.26562 0.2636718,-0.002 z m -0.5292969,0.004 -0.265625,0.002 0.00195,0.26563 0.265625,-0.002 z m -0.5292968,0.004 -0.265625,0.002 0.00195,0.26562 0.265625,-0.002 z m -0.53125,0.004 -0.2636719,0.002 0.00195,0.26562 0.2636719,-0.002 z m -0.5292969,0.004 -0.265625,0.002 0.00195,0.26563 0.265625,-0.002 z m -0.5292969,0.004 -0.265625,0.002 0.00195,0.26562 0.265625,-0.002 z m -0.53125,0.004 -0.265625,0.002 0.00195,0.26563 0.265625,-0.002 z m -0.5292968,0.004 -0.1972657,0.002 0.00195,0.26563 0.1972657,-0.002 z"
420
- id="path1697"
421
- inkscape:connector-curvature="0" />
422
- <path
423
- id="path7043"
424
- d="m 21.889502,271.59281 -0.263015,0.26697 0.925496,-0.27191 -0.929452,-0.25807 z"
425
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.053pt;stroke-opacity:1"
426
- inkscape:connector-curvature="0" />
427
- <path
428
- d="m 6.0945214,272.03141 -0.8709673,-0.31291 0.8661987,-0.32589 c -0.1373555,0.18961 -0.13463,0.44761 0.00477,0.6388 z"
429
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.0496875;stroke-linejoin:round;stroke-opacity:1"
430
- id="path7045"
431
- inkscape:connector-curvature="0" />
432
- </g>
433
413
  <g
434
414
  aria-label="z2_h"
435
- transform="rotate(0.14442311,-5668.1585,7.1450173)"
436
- style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#c20000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
415
+ transform="rotate(0.14442311,-7482.3839,-3692.9939)"
416
+ style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#c20000;fill-opacity:1;stroke:none;stroke-width:0.264583"
437
417
  id="text845-1">
438
418
  <path
439
419
  d="m 25.261291,268.26325 h 0.903304 v 0.17364 l -0.715201,0.83199 h 0.715201 v 0.15193 h -0.929142 v -0.17364 l 0.715202,-0.83199 h -0.689364 z"
440
- style="font-size:2.11666656px;fill:#c20000;fill-opacity:1;stroke-width:0.26458332"
420
+ style="font-size:2.11667px;fill:#c20000;fill-opacity:1;stroke-width:0.264583"
441
421
  id="path7004"
442
422
  inkscape:connector-curvature="0" />
443
423
  <path
444
424
  d="M 28.681237,269.77221 V 269.92 h -1.099674 v -0.14779 z"
445
- style="font-size:2.11666656px;fill:#c20000;fill-opacity:1;stroke-width:0.26458332"
425
+ style="font-size:2.11667px;fill:#c20000;fill-opacity:1;stroke-width:0.264583"
446
426
  id="path7008"
447
427
  inkscape:connector-curvature="0" />
448
428
  <text
449
429
  xml:space="preserve"
450
- style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#c20000;fill-opacity:1;stroke:none;stroke-width:0.07000434"
430
+ style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#c20000;fill-opacity:1;stroke:none;stroke-width:0.0700043"
451
431
  x="25.452368"
452
432
  y="269.54578"
453
433
  id="text896"
@@ -456,10 +436,10 @@
456
436
  id="tspan894"
457
437
  x="25.452368"
458
438
  y="269.54578"
459
- style="font-size:2.46944444px;fill:#c20000;fill-opacity:1;stroke-width:0.07000434">1</tspan></text>
439
+ style="font-size:2.46944px;fill:#c20000;fill-opacity:1;stroke-width:0.0700043">1</tspan></text>
460
440
  <text
461
441
  xml:space="preserve"
462
- style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#c20000;fill-opacity:1;stroke:none;stroke-width:0.07000434"
442
+ style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#c20000;fill-opacity:1;stroke:none;stroke-width:0.0700043"
463
443
  x="27.967733"
464
444
  y="269.59308"
465
445
  id="text900"
@@ -468,31 +448,24 @@
468
448
  id="tspan898"
469
449
  x="27.967733"
470
450
  y="269.59308"
471
- style="font-size:2.46944451px;fill:#c20000;fill-opacity:1;stroke-width:0.07000434">v</tspan></text>
472
- </g>
473
- <g
474
- id="g7027"
475
- transform="translate(0,14.287503)">
476
- <path
477
- style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.22576801;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.22576802, 0.22576802;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
478
- d="m 23.59375,266.20898 -0.002,0.22657 h 0.226562 v -0.22461 z m -0.0039,0.45118 v 0.22656 l 0.224609,0.002 0.002,-0.22656 z m -0.002,0.45117 -0.002,0.22656 0.226562,0.002 v -0.22656 z m -0.0039,0.45312 v 0.22461 l 0.22461,0.002 0.002,-0.22657 z m -0.002,0.45117 -0.002,0.22461 0.226563,0.002 v -0.22461 z m -0.0039,0.45118 v 0.22656 h 0.224609 l 0.002,-0.22461 z m -0.002,0.45117 -0.002,0.22656 0.226562,0.002 v -0.22656 z m -0.0039,0.45117 v 0.22656 l 0.224609,0.002 0.002,-0.22657 z m -0.002,0.45313 -0.002,0.22461 0.226563,0.002 v -0.22656 z m -0.0039,0.45117 v 0.22461 l 0.22461,0.002 0.002,-0.22461 z"
479
- id="path1697-9-9"
480
- inkscape:connector-curvature="0" />
481
- <path
482
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.0451536pt;stroke-opacity:1"
483
- d="m 23.704372,266.48087 0.224311,0.22721 -0.220678,-0.79162 -0.230849,0.78872 z"
484
- id="path7033"
485
- inkscape:connector-curvature="0" />
486
- <path
487
- d="m 23.953985,270.14784 -0.276879,0.73825 -0.267354,-0.74175 c 0.159897,0.11926 0.379708,0.11999 0.544233,0.003 z"
488
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.0423315;stroke-linejoin:round;stroke-opacity:1"
489
- id="path7035"
490
- inkscape:connector-curvature="0" />
451
+ style="font-size:2.46944px;fill:#c20000;fill-opacity:1;stroke-width:0.0700043">v</tspan></text>
491
452
  </g>
492
453
  <path
493
454
  style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.722;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#d3e01c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
494
455
  d="m 46.638672,285.19579 -41.5371095,0.0996 0.00195,0.20117 41.5351565,-0.10156 z"
495
456
  id="path5601"
496
457
  inkscape:connector-curvature="0" />
458
+ <text
459
+ xml:space="preserve"
460
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.15364px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.128841"
461
+ x="12.465504"
462
+ y="316.67355"
463
+ id="text962"
464
+ transform="scale(1.095049,0.91320115)"><tspan
465
+ sodipodi:role="line"
466
+ id="tspan960"
467
+ x="12.465504"
468
+ y="316.67355"
469
+ style="stroke-width:0.128841">/</tspan></text>
497
470
  </g>
498
471
  </svg>
tomwer/version.py CHANGED
@@ -77,9 +77,9 @@ RELEASE_LEVEL_VALUE = {
77
77
 
78
78
  MAJOR = 1
79
79
  MINOR = 1
80
- MICRO = 0
81
- RELEV = "rc" # <16
82
- SERIAL = 6 # <16
80
+ MICRO = 1
81
+ RELEV = "final" # <16
82
+ SERIAL = 7 # <16
83
83
 
84
84
  date = __date__
85
85
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tomwer
3
- Version: 1.1.0rc6
3
+ Version: 1.1.1
4
4
  Summary: "tomography workflow tools"
5
5
  Home-page: https://gitlab.esrf.fr/tomotools/tomwer
6
6
  Author: data analysis unit
@@ -1,4 +1,4 @@
1
- tomwer-1.1.0rc6-py3.8-nspkg.pth,sha256=xeeGR3TjdoVxdFeF6T-zSwZWh6Et--EYuPWu67LxL_c,574
1
+ tomwer-1.1.1-py3.8-nspkg.pth,sha256=xeeGR3TjdoVxdFeF6T-zSwZWh6Et--EYuPWu67LxL_c,574
2
2
  orangecontrib/tomwer/__init__.py,sha256=B3VLqV-jCha0MgRp-9_W6EbAjEFnFz6FvgtqHGA6EoQ,147
3
3
  orangecontrib/tomwer/state_summary.py,sha256=3wnJdLg9jiXSM8iTP8SxL1a92bnntxO9RhBZ71z5dY4,1710
4
4
  orangecontrib/tomwer/orange/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -15,7 +15,7 @@ orangecontrib/tomwer/widgets/__init__.py,sha256=IwY85ur-TZUdRH1igCEfMiUKFvu9cmbd
15
15
  orangecontrib/tomwer/widgets/utils.py,sha256=zGfY5XfrLdD2awrtItLYJjFRE-FCCwhPs_QJaEA73X0,2339
16
16
  orangecontrib/tomwer/widgets/cluster/FutureSupervisorOW.py,sha256=IyP11MMwbwC3BO3gWTEqwizqIqKBnOni96rxlxuUPYQ,8957
17
17
  orangecontrib/tomwer/widgets/cluster/SlurmClusterOW.py,sha256=T9koZYPIEvx6HOOSP-tn-bHN6vMDmIWHYesIUcvwPTE,4010
18
- orangecontrib/tomwer/widgets/cluster/__init__.py,sha256=nlIBw2R2J6EBiB5tuMb6BbCxxej-bSqVkqVlPqhG0vY,1606
18
+ orangecontrib/tomwer/widgets/cluster/__init__.py,sha256=HyTijuJFHFyl5n94nCWREgTxbE3olYsYLAFshjTMNN4,1614
19
19
  orangecontrib/tomwer/widgets/cluster/icons/slurm.png,sha256=C-YBLwXCnh0oo4nvEt80WxX_jKYGUAFpWMUSlzt6ke0,1995
20
20
  orangecontrib/tomwer/widgets/cluster/icons/slurm.svg,sha256=9LqiU88NH3ACxtZ8A7gTm-C_0ACR8iq0k_N2W1IFf9Q,9790
21
21
  orangecontrib/tomwer/widgets/cluster/icons/slurmobserver.png,sha256=sxH1V20s0JZPTCq82Fizz8Q9RHXwviapdStgZT8GBIM,3212
@@ -27,7 +27,7 @@ orangecontrib/tomwer/widgets/control/DataSelectorOW.py,sha256=22_DCUPiFCWoA27Mg6
27
27
  orangecontrib/tomwer/widgets/control/DataTransfertOW.py,sha256=K2LVVDACO2hDXFmX43DxUOBqxiHdFYVKvxEC1PxKgoo,7302
28
28
  orangecontrib/tomwer/widgets/control/DataValidatorOW.py,sha256=-bgP7ArsSN77LECJjjuEIdplmmwaC5Fx16pVx-fQLEI,7197
29
29
  orangecontrib/tomwer/widgets/control/DataWatcherOW.py,sha256=IoDoXy1unewG6UmvMwa2U24pQjy6VSVep7bYtLDEEjo,7326
30
- orangecontrib/tomwer/widgets/control/EDF2NXTomomillOW.py,sha256=sWPEvFEZdzSHQtj6sNKVzF3iAL1pcwDOo88lCqlDfvA,9133
30
+ orangecontrib/tomwer/widgets/control/EDF2NXTomomillOW.py,sha256=Tb0ux5BqNvgIcPzeVo8Owx5hno5p4KggO5bUXJQg4EM,9099
31
31
  orangecontrib/tomwer/widgets/control/FilterOW.py,sha256=vSDr8u3_oR8xl6s5jQGt-DmyJwFOxtq72rBvBqlJA7U,4577
32
32
  orangecontrib/tomwer/widgets/control/NXTomomillMixIn.py,sha256=kJPFQBHiqbi05U62UzDFgu6b5vPJZbO79XeAu_PyoIM,3323
33
33
  orangecontrib/tomwer/widgets/control/NXTomomillOW.py,sha256=CalszjDcaSjYv0GMAl6YrMAQUtGJXf8nGBmeAo44FB4,12259
@@ -118,8 +118,8 @@ orangecontrib/tomwer/widgets/reconstruction/CastNabuVolumeOW.py,sha256=02qpJUdjr
118
118
  orangecontrib/tomwer/widgets/reconstruction/DarkRefAndCopyOW.py,sha256=IvE4-yDaktCUOnq8NnQB6jHsjddynHlOHSkh_1504Gk,10518
119
119
  orangecontrib/tomwer/widgets/reconstruction/NabuOW.py,sha256=OHVqsEr48vIbpNLNaQZrgL3pEn_FvEQJ5uryajzQon0,10884
120
120
  orangecontrib/tomwer/widgets/reconstruction/NabuVolumeOW.py,sha256=ZtKVU804Aj9RdZLYsNzOylCo02bQNJ1mFt8lEu1QsB8,17622
121
- orangecontrib/tomwer/widgets/reconstruction/SAAxisOW.py,sha256=s4zFYBalUQ642_2-B-4IuQn34JqCuSpwm1fyk9czebs,17679
122
- orangecontrib/tomwer/widgets/reconstruction/SADeltaBetaOW.py,sha256=3y1rdfIsRGmwYVqX6frQvIiHtrWWOFPspjnjk5I5bjw,14573
121
+ orangecontrib/tomwer/widgets/reconstruction/SAAxisOW.py,sha256=GPMR0dbv3t0FdlCXM_gLNxZDto-QULjlOEiDgqu3KYE,17852
122
+ orangecontrib/tomwer/widgets/reconstruction/SADeltaBetaOW.py,sha256=tmLBFWa9oBT1335t-Ta2otM5ndhxoLo3AtSO2nW1zqo,14636
123
123
  orangecontrib/tomwer/widgets/reconstruction/SinoNormOW.py,sha256=Tx6rXjjrYN8JawMNZFr-AGr1upa0GX_-aIuoU6s5XMM,10845
124
124
  orangecontrib/tomwer/widgets/reconstruction/TofuOW.py,sha256=X889aNXwB-h5mTa9XuXSX35j15LZvr7DCnP8nfjuCsk,7820
125
125
  orangecontrib/tomwer/widgets/reconstruction/__init__.py,sha256=lgfP-eyIPCwy2R5FVl7uBcO17ESpLbkB1YSvieFRqq4,1601
@@ -151,7 +151,7 @@ orangecontrib/tomwer/widgets/reconstruction/icons/sadeltabeta.svg,sha256=gQQFb5U
151
151
  orangecontrib/tomwer/widgets/reconstruction/icons/tomogui.png,sha256=qg7SZMRY3QjK-tteyoN0ToU5gNs1ZflkwzUK5kVVVQI,6846
152
152
  orangecontrib/tomwer/widgets/reconstruction/icons/tomwer.png,sha256=M9IWm_TDKlSA6PZ-FPblo2k6PH-kkT2d0ASRvZ-pM_8,8992
153
153
  orangecontrib/tomwer/widgets/visualization/DataViewerOW.py,sha256=T8rse9FIWbM6LPOZvkcKDuwlD1aSZYGrKIwg3S-3Xuw,5199
154
- orangecontrib/tomwer/widgets/visualization/DiffViewerOW.py,sha256=H7lrvVkh3RrHXKHClt9e9GZNeZJ2vumWnEaxKXy5SZg,2874
154
+ orangecontrib/tomwer/widgets/visualization/DiffViewerOW.py,sha256=6XQ7i8XmrbKeB1iodyHzQlhahHHfOUngPevrh608ohU,2874
155
155
  orangecontrib/tomwer/widgets/visualization/LivesliceOW.py,sha256=g2QQNI2hfcN0w2YCTOd4VjNwqMiOG3UcIUGtJkrJnXo,3171
156
156
  orangecontrib/tomwer/widgets/visualization/NXtomoMetadataViewerOW.py,sha256=KelMKYUL-rIq_Vi_1sylUu8P3EWsnY0HLilJcZdiwLE,1949
157
157
  orangecontrib/tomwer/widgets/visualization/RadioStackOW.py,sha256=_FYjyXCLnfBnEPSEvYzyktpC3XT_thIte9Y6dF3dhn8,3392
@@ -182,7 +182,7 @@ orangecontrib/tomwer/widgets/visualization/icons/volumeviewer.svg,sha256=2uT9_px
182
182
  tomwer/__init__.py,sha256=UkYK_aDTsg7Qfv3IbRaQZ8lm9hRD93U7fLzbvXoLwn4,1745
183
183
  tomwer/__main__.py,sha256=r6aj9eSuARnS6tFeDalCx5EM6L5RsD4iW2qfleUQi-k,5962
184
184
  tomwer/utils.py,sha256=UVEewsSmUpPXkUSP0zwg-sHZ5HfU9AZNPxKdwYjL7h0,8544
185
- tomwer/version.py,sha256=8019ZsqIRlrfOSMifHvznxOfcsXzeeci-Ra9cUOeSX0,4383
185
+ tomwer/version.py,sha256=hOyRtOJbmMFuNlxcmKfH4yrrayUl0Bc87Qj59p5r6gM,4386
186
186
  tomwer/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
187
187
  tomwer/app/axis.py,sha256=m8-fOYcX8dRWHa-EjOO9cKiW9nBl7Z5nhOi5d4YovSQ,6473
188
188
  tomwer/app/canvas.py,sha256=TVh-E_LnCzfDVYL_r0Hy5KC47nJ4Bk_L6XVurXaab4s,1377
@@ -207,7 +207,7 @@ tomwer/app/stopdatalistener.py,sha256=zuVIEkfXVrBnKf8cmpUBUg0xrsdnQ2fjuJwUk_FnyK
207
207
  tomwer/app/canvas_launcher/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
208
208
  tomwer/app/canvas_launcher/config.py,sha256=aF9VlavqSKgImpFOKSdazfaWzzhY6LfjYn_HWgmEygU,7251
209
209
  tomwer/app/canvas_launcher/environ.py,sha256=pOJzQ612T0AA4mtGmCoB_YGo9fnxpDOBRuMEFiaMQl8,2501
210
- tomwer/app/canvas_launcher/mainwindow.py,sha256=YMiPIFQNPbvm50IzBBXXRexJ4j4Kn5sGun6T6OMYYv8,10617
210
+ tomwer/app/canvas_launcher/mainwindow.py,sha256=Tw6k1epW48D-WD8VEsHzIhjRSKMQPpS8rNpEqxP0O6c,12322
211
211
  tomwer/app/canvas_launcher/splash.py,sha256=a2s9UwfEu4qenTUn9z-2g-tcAQNFOAgidmeUPFM70Gs,559
212
212
  tomwer/app/canvas_launcher/widgetsscheme.py,sha256=ynznd04N5RteRLWPC9kNVJifM_-WV1yTelIT0LqzmjI,2816
213
213
  tomwer/core/__init__.py,sha256=lLfviCLw9VdT6SQ_9eYhqFe8QtUA-Dv-JDGpgxQ8Yzs,1373
@@ -271,23 +271,23 @@ tomwer/core/process/reconstruction/lamino/__init__.py,sha256=EH-YNlONEw1v6UU5ByD
271
271
  tomwer/core/process/reconstruction/lamino/tofu.py,sha256=0x3v2QB7nzPAVjBqFrPpYh4MiZQlkiUv3BD6E-Gs_BM,34544
272
272
  tomwer/core/process/reconstruction/nabu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
273
273
  tomwer/core/process/reconstruction/nabu/castvolume.py,sha256=LuJ-wlXi0LXgC9aFYfnGl1P-CWGHxEH7j2qHyNJYQww,10072
274
- tomwer/core/process/reconstruction/nabu/nabucommon.py,sha256=wm0sKpjXy4_HmJX4KSyFAEjBnkbCGBIxSfgydpreCtM,21491
275
- tomwer/core/process/reconstruction/nabu/nabuscores.py,sha256=iuR86dFSasPWrR3hygTm5bcO446FcId0b1kIMuEEOIQ,11186
276
- tomwer/core/process/reconstruction/nabu/nabuslices.py,sha256=Ym7EglO0OseHHssuxNgPBVqgCcBwkoqqVwL4CIO4mX0,29024
277
- tomwer/core/process/reconstruction/nabu/nabuvolume.py,sha256=V2cQhIifxySApAwXl8pmo0D-Ht0p6b91Z-18XRQ9mZs,16124
274
+ tomwer/core/process/reconstruction/nabu/nabucommon.py,sha256=t9FnjhHLbYKizpG2mgFxHsvp0qTQyFgXAmRqjyRUh9g,21681
275
+ tomwer/core/process/reconstruction/nabu/nabuscores.py,sha256=1cNBEElw_XDoYQueh882la62QWEdn7WLjAQxN-Ualy8,11294
276
+ tomwer/core/process/reconstruction/nabu/nabuslices.py,sha256=x1EyvTKQYuCSMLSex-yI1GVLPE5-_fXMm3_OrzEjZUU,29421
277
+ tomwer/core/process/reconstruction/nabu/nabuvolume.py,sha256=p9yKpCMA2uF7IULnU0zvSwDUauc7qqfD8p1GxMWEr4U,16307
278
278
  tomwer/core/process/reconstruction/nabu/settings.py,sha256=bH5bW88tikwGQXIBNVznefXNldlClhKk-LhhU3qOcO0,2264
279
279
  tomwer/core/process/reconstruction/nabu/slurm.py,sha256=MXcQY9z1PZXr0x7Aj8brp1f6wFPV6jzECEQLEjEDBQU,921
280
280
  tomwer/core/process/reconstruction/nabu/target.py,sha256=_Z4gViprjR3Vm4KASqsASStLA9GM1wTyoi3Pg0PUSeg,1481
281
- tomwer/core/process/reconstruction/nabu/utils.py,sha256=GtRZiJ114l_5yWRbeVvkAKS_VdUk-2Wrxul6pd_ERlY,13909
281
+ tomwer/core/process/reconstruction/nabu/utils.py,sha256=qcsxxc63uBoq7pO2uNChgtI6LB2_9PoJxDOGmdOVRV8,13945
282
282
  tomwer/core/process/reconstruction/normalization/__init__.py,sha256=iyTlaMg14Q1eXFr8ICZovTjNd8gt6oe4e3T-6Ldo25k,128
283
283
  tomwer/core/process/reconstruction/normalization/normalization.py,sha256=uS8ueUfwbyIW8k6boHlJ7UOWiJhLTubac0cXci1N7SQ,13088
284
284
  tomwer/core/process/reconstruction/normalization/params.py,sha256=EwYypv75SkqnqPRIZqnm7k8VdwpBmaJszYI5qaCpG5Y,4790
285
285
  tomwer/core/process/reconstruction/saaxis/__init__.py,sha256=qCVB1LY-XBlWNEJDB5Lxy2zCV3mrhX6frr2QCcWHLw0,93
286
286
  tomwer/core/process/reconstruction/saaxis/params.py,sha256=vGSIc41Ve-cHdCQBsV0vsOyuO9ZoXrZq_keSu-tOEOI,5624
287
- tomwer/core/process/reconstruction/saaxis/saaxis.py,sha256=JdJNDgNLBYXl8QvQhzRkRNRtsgnHJcXGsnKFPqe6EMw,28417
287
+ tomwer/core/process/reconstruction/saaxis/saaxis.py,sha256=W58ubkdI0U1LhyW_WoJFGzDqkWLAPwbn1dGm0f9YxIw,28589
288
288
  tomwer/core/process/reconstruction/sadeltabeta/__init__.py,sha256=WY0sluyFXKiq8QeD3KvnGSpl0is7GL4F2JuBaBZNMYY,108
289
289
  tomwer/core/process/reconstruction/sadeltabeta/params.py,sha256=DEE4ObLtCJ76QrhD4pisXecAdqELI0OtN_B-zm2RMHs,4106
290
- tomwer/core/process/reconstruction/sadeltabeta/sadeltabeta.py,sha256=70bCjPhG1zSyYNSLz3lupULiwmPwvSRQHSTS5jw7R50,22964
290
+ tomwer/core/process/reconstruction/sadeltabeta/sadeltabeta.py,sha256=Npx7_Sv2oZWK7FKT3zzmitxzdMI72LyX9p8lbDygVAc,23099
291
291
  tomwer/core/process/reconstruction/scores/__init__.py,sha256=T7RRLNV0Zk6xK1WRlTP8XtyLkGkS16H_PJi82T5QePw,282
292
292
  tomwer/core/process/reconstruction/scores/params.py,sha256=2ZCoe-0ME3t40tOGqStuqcwLZIgd09eoVax0d5Ib3bk,6963
293
293
  tomwer/core/process/reconstruction/scores/scores.py,sha256=o3HyUpS_iwwbCwWOANITgx9WaF2LYK-8Gv37Oj80qHg,6994
@@ -326,7 +326,7 @@ tomwer/core/process/visualization/slicestack.py,sha256=wKxjS7oFLbC0PRXtQuBHRjs4H
326
326
  tomwer/core/process/visualization/volumeviewer.py,sha256=9Y3z--FDPm_LBPgbFywGOxqve3vz9UHoV-gXZ6b9-rg,1520
327
327
  tomwer/core/scan/__init__.py,sha256=V1TPi41mS3b6jskdiNqgnKYvRHZg1x1KmEClQ3hUmu8,1392
328
328
  tomwer/core/scan/blissscan.py,sha256=hQi91vaQCg-uZBhYQ6mSooLkB2e9k0refqR-Xiyd51Q,8271
329
- tomwer/core/scan/edfscan.py,sha256=gG22uRLU3V2nyMqpZC_obf5GW6OjQ9BXDVm5OhQxXUc,22072
329
+ tomwer/core/scan/edfscan.py,sha256=5bkNzPQhJLbEJf4tdikeRs7KEou2sEsWGAST3uZbqhA,22293
330
330
  tomwer/core/scan/futurescan.py,sha256=uTcEa3BR2Tb3pMct9Ve7TeeUL9AEOjdKNejL4-uR1Tk,212
331
331
  tomwer/core/scan/hdf5scan.py,sha256=RMRphkCW90wUdvBt7gByww8VtocstjWT5hmqTc5BaJw,18707
332
332
  tomwer/core/scan/scanbase.py,sha256=ynplFca9w70SEvBF8jcpWkLpyC8jkwihJS0Roqe4WXo,31415
@@ -336,14 +336,14 @@ tomwer/core/scan/test/test_edf.py,sha256=VbgL6fMKccU9Ca2RuE0jc8iP8rIgHL_N0nCV8ay
336
336
  tomwer/core/scan/test/test_future_scan.py,sha256=vXzjfsRY0m3_zZmdl7X-GfHjCbn-JF1vsTZe__tCpjw,2165
337
337
  tomwer/core/scan/test/test_h5.py,sha256=AriX-b_vSOBkGWhWDEzLRjxyvNRN1Re7ILNzF_1OynQ,4388
338
338
  tomwer/core/scan/test/test_process_registration.py,sha256=_-tCc8Y3v6eC-Pmw45ihMk0yTEkTafmDv35QadaP5sc,5194
339
- tomwer/core/scan/test/test_scan.py,sha256=u6pHuMRYzuyUZbGspsM_itc-HjRXnc9M1qEoCWQ81Zk,14684
339
+ tomwer/core/scan/test/test_scan.py,sha256=y_YY2QvKqKnYslHqti6NRvP-ZQH6Zft0Raqw7QNkfM4,14957
340
340
  tomwer/core/test/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
341
341
  tomwer/core/test/test_lamino.py,sha256=2-uCBIBiKldMHY5gkDnVSECKhDbwb6yiVgLOo0ooMCQ,3489
342
342
  tomwer/core/test/test_scanutils.py,sha256=Dg9dIGxjqpo42zV7or-gnaUVcTf2x8BvtrKNME4uekA,2151
343
343
  tomwer/core/test/test_utils.py,sha256=q_IPM_1NCyVoFDI96Tzpy6YMIxHqGYMT0XBrogZD3lA,10673
344
344
  tomwer/core/utils/Singleton.py,sha256=57g7-B2eqyrneT8DQ2Tzqha0bg-mcdSdaPtOjhsGWVc,1559
345
345
  tomwer/core/utils/__init__.py,sha256=0xymzqHO1oEdOnLkzeRCyeILhKI6hcIrM0rMh-fbxmc,13486
346
- tomwer/core/utils/char.py,sha256=efnwozk0NThJ_dOieytB9aCVXe0wOQ5KwAEer8kTeXE,1632
346
+ tomwer/core/utils/char.py,sha256=VxNJ6Les9hZzVQz-gkPexWjn2h_J-XY3FiikwdgdGd0,1673
347
347
  tomwer/core/utils/deprecation.py,sha256=2eIFwhOR08afzhF8dolSoM5M8ScPAj_JB9CT-QXN954,4714
348
348
  tomwer/core/utils/ftseriesutils.py,sha256=urIZfVN0j0PAD3RHVAzBMaMNAN-sFudxFKNZ8cCKWXs,2382
349
349
  tomwer/core/utils/gpu.py,sha256=7s1LpN7e5ZTf1lqx0OLo-R45oE1L0JWmnLe2Hmhph6M,1812
@@ -421,8 +421,8 @@ tomwer/gui/debugtools/datasetgenerator.py,sha256=2ZOFTz0nBh6ar7QZYHpytDJq8IqFrdq
421
421
  tomwer/gui/debugtools/objectinspector.py,sha256=-RO_DSCnIYJ1BTSXEhgrbztmiag6TM6jFG2Z8RSnJMY,2978
422
422
  tomwer/gui/edit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
423
423
  tomwer/gui/edit/dkrfpatch.py,sha256=_TAmUGEshF-Z_EzwDHtgs5whLPoc321IURwJxahmSog,17728
424
- tomwer/gui/edit/imagekeyeditor.py,sha256=03DIefWobiKMRnUezngFLeiAPPfhPii3G58s1c7DB0k,29564
425
- tomwer/gui/edit/nxtomoeditor.py,sha256=QRKneDleZ9v8TxNT32gvyjEh0mjTUmXIvR002TD1NEs,17411
424
+ tomwer/gui/edit/imagekeyeditor.py,sha256=TEanI9q-f_F724KlK0mDZV1u0RWdp4MvgnnEC9nky2E,29692
425
+ tomwer/gui/edit/nxtomoeditor.py,sha256=Gb2_dfVbQwgT2lm1OWjp28TxrTNn72NwMjwGc2OLd60,17497
426
426
  tomwer/gui/edit/test/__init__.py,sha256=OLK9ip_LryBfM_L40MReqjvJS3wdbWP_CpnBeD1NQTA,1368
427
427
  tomwer/gui/edit/test/test_dkrf_patch.py,sha256=1U7FnhAsRJ4raM0pinA1BxdtqSdpdUTHiUY5ddTcKH8,8025
428
428
  tomwer/gui/edit/test/test_image_key_editor.py,sha256=0621Zuft7KD2d5VLjQOm4JWMRER0FXP-m2RfHURoh0s,5960
@@ -446,7 +446,7 @@ tomwer/gui/reconstruction/lamino/tofu/tofuexpert.py,sha256=0TNajtIKAdRj7Y_oK5d8r
446
446
  tomwer/gui/reconstruction/lamino/tofu/tofuoutput.py,sha256=0DFuSMFU983LNwEnWXqEEvjjwIsih6n67-KqrEvRjr8,29446
447
447
  tomwer/gui/reconstruction/nabu/__init__.py,sha256=v2WxaBpu2zpGu7DEV96zaKAtHgRlcpORuAG2S0iF9O0,44
448
448
  tomwer/gui/reconstruction/nabu/action.py,sha256=t_L_sOkNYApqLGCNmbucq9IVd1XijycKhZdh262vO88,3889
449
- tomwer/gui/reconstruction/nabu/castvolume.py,sha256=4qs1R6JVJxZkk_-SrCCwuZ09qqcZ8HjayRhhi-x1eAk,12295
449
+ tomwer/gui/reconstruction/nabu/castvolume.py,sha256=DWoubbxvHYf6FeOswWLix84BbUMjeHpIQvn0L4Q2O2I,12543
450
450
  tomwer/gui/reconstruction/nabu/check.py,sha256=4m1zbiak462UxKlKz_rKa1xarK-_VVC4p6ZE8JKYh9Y,4731
451
451
  tomwer/gui/reconstruction/nabu/nabuflow.py,sha256=EqiBtxfXqOE7umcWw7kShbfs0Be12XbBzdTSQEyWX-0,17194
452
452
  tomwer/gui/reconstruction/nabu/slices.py,sha256=Ndqn_f9vf83tdPh2x1ucaR7Xl5HIwpxpZNNvSnFE2BM,23443
@@ -457,7 +457,7 @@ tomwer/gui/reconstruction/nabu/nabuconfig/base.py,sha256=X8aF0_DVPfyVf19kgjpyjcC
457
457
  tomwer/gui/reconstruction/nabu/nabuconfig/ctf.py,sha256=yCJ-R3QHvplaqyTE10trEQHCDK_VgWIjZ6fZ2U__LtE,13082
458
458
  tomwer/gui/reconstruction/nabu/nabuconfig/nabuconfig.py,sha256=euetzzztzrcTSG6jsPyQgdY6O5tWWRVqasVka8bgBjU,11490
459
459
  tomwer/gui/reconstruction/nabu/nabuconfig/output.py,sha256=x3z3yj1OySj8aoeG4VqwaxVi2hWvfMVs44Ms4AyVzOw,9865
460
- tomwer/gui/reconstruction/nabu/nabuconfig/phase.py,sha256=qIs2VTm-3kTBWEjfXUi8GWcuAV4-ARmNs6ubIFeSRAk,15229
460
+ tomwer/gui/reconstruction/nabu/nabuconfig/phase.py,sha256=z-qM-dbofF0xl_Cl7CMIpOPCNnL67UiH2U75PwWoDjM,15253
461
461
  tomwer/gui/reconstruction/nabu/nabuconfig/preprocessing.py,sha256=hPk49mkuI8En4BIc70O8R9vDE9JuExsWQ1BtWdt_TqA,22714
462
462
  tomwer/gui/reconstruction/nabu/nabuconfig/reconstruction.py,sha256=w_SosHK8Bp1iIiwOJ5KRAQMmYKYxUsQKoPewX9q8mkk,37357
463
463
  tomwer/gui/reconstruction/normalization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -495,14 +495,14 @@ tomwer/gui/utils/scandescription.py,sha256=KZfRm57UIqFgP3xJgpHFifJETQKN_0TuWv8Wi
495
495
  tomwer/gui/utils/scrollarea.py,sha256=TDWSb_xsqX1vWaeWYl-yNB_-ok5QkYs9bjIOm2vL1qk,2954
496
496
  tomwer/gui/utils/slider.py,sha256=TJK_IMnBst5evDky26YeSDI0ns4mXBNoXHiQW-K_9Yc,3467
497
497
  tomwer/gui/utils/splashscreen.py,sha256=7g33O-V1QqpU4cu-ki4ZJxdchTpWC15bKSGepfmteBQ,1857
498
- tomwer/gui/utils/unitsystem.py,sha256=t1DW3PHaHG987s8X2Fp_evp3a5XzHyV2vximv_Sbo8E,6162
498
+ tomwer/gui/utils/unitsystem.py,sha256=wRZ_T1tFTAXqaGuffcFksAWey5qk2Ggi2WD-oJcsjc4,6319
499
499
  tomwer/gui/utils/vignettes.py,sha256=Y8aqnanN5U5syXs0MPoyYt_tCfflybCyC2hSxDEePSw,12980
500
500
  tomwer/gui/utils/waiterthread.py,sha256=-3rgoIV461MnsXH0xCFLaYOWhPWOkFm-oD2ybfBde1Q,1843
501
501
  tomwer/gui/utils/lineselector/__init__.py,sha256=GZ847ef5X2wk_sAHxg6h24TarPYmb4NZjQI3jjkc7jE,75
502
502
  tomwer/gui/utils/lineselector/lineselection.py,sha256=q9yrpH6cpDEKqgOhJL5Mvq46ifFlgNil5kyikgC936E,2614
503
503
  tomwer/gui/utils/lineselector/lineselector.py,sha256=VueUHAiLB87uVCYkDyybDGWJs3ajLQdfj4KeznD8Z1Q,8228
504
504
  tomwer/gui/visualization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
505
- tomwer/gui/visualization/dataviewer.py,sha256=8p4BK7VWbchxZdIowee6Yr25LnYiGlYSQdGKwlCZ37g,24528
505
+ tomwer/gui/visualization/dataviewer.py,sha256=tpEHUDMPqW3fNBa7Suhos_hbIBDPBlZo7lXDBXcmhxk,24611
506
506
  tomwer/gui/visualization/nxtomometadata.py,sha256=XSmTvYm3PBbWnP4ux89p1jclqoFYmylATXGZfljHsQE,682
507
507
  tomwer/gui/visualization/reconstructionparameters.py,sha256=AQt-uogaxsxXd9ooOWGolOUDsmVOVxsfKBd0MAPuMco,15392
508
508
  tomwer/gui/visualization/scanoverview.py,sha256=zV9JGadh1NWjSbOMI-cMSkFj9MCJWjXkOt9JWR46Fbc,8421
@@ -511,7 +511,7 @@ tomwer/gui/visualization/tomoobjoverview.py,sha256=X98Dg0Sml8ifTG7oYgWGuCDBBH4Hl
511
511
  tomwer/gui/visualization/volumeoverview.py,sha256=KyCPM0b4StOTCqvyHfCwf8_eC__xFtekdyY6w_pPZkc,2489
512
512
  tomwer/gui/visualization/volumeviewer.py,sha256=fi-rElfWlqyBYvi02iURZEJLb_xflnY_pr3VgzZtEhM,16074
513
513
  tomwer/gui/visualization/diffviewer/__init__.py,sha256=rZ7qOTfAChU3FouCdkZllXT9ZZqTdo1XhLZMfmOqUAE,39
514
- tomwer/gui/visualization/diffviewer/diffviewer.py,sha256=pbTzyUo82mCAigJi8wrFQ9y5RYepyd9brNQRsYKHJEg,21381
514
+ tomwer/gui/visualization/diffviewer/diffviewer.py,sha256=5tZ9sTy9MwVlCuUryN03wQOWEzWddpshiYkaiuDFPLY,21076
515
515
  tomwer/gui/visualization/diffviewer/shiftwidget.py,sha256=--JvNXU3Si-fWtO1SfzhQKY8YVCymNez-yn47SrFsA4,20938
516
516
  tomwer/gui/visualization/test/__init__.py,sha256=nRVmFmNtdzN5PElEurDCb9pDulWIha-fLu-VX8hNn5A,1368
517
517
  tomwer/gui/visualization/test/test_dataviewer.py,sha256=NuYVFMX1yBncrcUI4jMCvj-VOcZO8_1uMz3uNW2SSXY,2444
@@ -622,8 +622,8 @@ tomwer/resources/gui/icons/vignettes.png,sha256=IrRLh0W4kr6qIfbAgMxE7B4UKvbG5zAg
622
622
  tomwer/resources/gui/icons/vignettes.svg,sha256=qn_jgL_q4P0Hzo2jODmSxmZNzN8eQMoQ3yyagCWM904,3252
623
623
  tomwer/resources/gui/icons/warning.png,sha256=6uxDzFf5QSf5BBVBrBL_VAOzaFzV-9Ext52lsue6HPs,2348
624
624
  tomwer/resources/gui/icons/warning.svg,sha256=YjFMio-qMTmEJTnJzj3twnuGErvqK0LSj5x44YIdEBw,1462
625
- tomwer/resources/gui/illustrations/ctf_z1.png,sha256=uHJDWZ7KSr2-kVqZ72CoDUjwy_udIUTQsIoQiYhfcd8,8247
626
- tomwer/resources/gui/illustrations/ctf_z1.svg,sha256=RQ_rBtWwjgjK9mNv_lz2gyFebVDwk6U_cTsfzvi2Ifg,42716
625
+ tomwer/resources/gui/illustrations/ctf_z1.png,sha256=UckofrAS4A_I8OI2zu7T_wNHO-Vj8Jp1nHJy8oqMROE,7752
626
+ tomwer/resources/gui/illustrations/ctf_z1.svg,sha256=NgbH8MgXda4ywt5c6j162BDOMDvKUK6oGDJY_M9AWaU,36320
627
627
  tomwer/resources/gui/illustrations/flow_down.png,sha256=lWv8HaEaiQ2JSjF0tS1IlcyoWOJD_J0TcTVhzENACno,551
628
628
  tomwer/resources/gui/illustrations/flow_down.svg,sha256=WNLyBbTnJqohneGt6bP5W1UafYxTGdtSR16KpwwMBDk,3987
629
629
  tomwer/resources/gui/illustrations/flow_right.png,sha256=1tuAYv7EDKtZNAssdEGuHZMJC2kWDvVVGVT030q9hHc,531
@@ -698,10 +698,10 @@ tomwer/web/client.py,sha256=Ldu_rsW5O53QBH3iJ_gDlo9ip2d1-GQuVYo0KX_fzUU,1807
698
698
  tomwer/web/config.py,sha256=K-mGjde07maay9arYdfx3DHIEdFfeRBZX6IuxUL5UlA,1623
699
699
  tomwer/web/test/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
700
700
  tomwer/web/test/test_graylog_connection.py,sha256=SUNOC2mKEINGQMZkHzFgCPFpx7feDUCvhaJ83xb2thc,2220
701
- tomwer-1.1.0rc6.dist-info/LICENSE,sha256=yR_hIZ1MfDh9x2_s23uFqBH7m5DgrBl9nJKkE37YChM,1877
702
- tomwer-1.1.0rc6.dist-info/METADATA,sha256=Hjyq5fUHbKNiOZM8_I4Egc7_Xi8KaPqYHLCkRiQth68,11644
703
- tomwer-1.1.0rc6.dist-info/WHEEL,sha256=OqRkF0eY5GHssMorFjlbTIq072vpHpF60fIQA6lS9xA,92
704
- tomwer-1.1.0rc6.dist-info/entry_points.txt,sha256=aDZTIsXRj1SgQ0tixWsmYGjM4y6gcYK7ykK6z7XlLjw,368
705
- tomwer-1.1.0rc6.dist-info/namespace_packages.txt,sha256=Iut-JTfT11SZHHm77_ZeszD7pZDWXcTweCbvrJpqDyQ,14
706
- tomwer-1.1.0rc6.dist-info/top_level.txt,sha256=Yz5zKh0FPiImtzHYcPuztG1AO8-6KEpUWgoChGbA0Ys,21
707
- tomwer-1.1.0rc6.dist-info/RECORD,,
701
+ tomwer-1.1.1.dist-info/LICENSE,sha256=yR_hIZ1MfDh9x2_s23uFqBH7m5DgrBl9nJKkE37YChM,1877
702
+ tomwer-1.1.1.dist-info/METADATA,sha256=RtIELVb6JZ5GgBrzavoySzYTOzk9oNWxxbbkPj6dgMo,11641
703
+ tomwer-1.1.1.dist-info/WHEEL,sha256=OqRkF0eY5GHssMorFjlbTIq072vpHpF60fIQA6lS9xA,92
704
+ tomwer-1.1.1.dist-info/entry_points.txt,sha256=aDZTIsXRj1SgQ0tixWsmYGjM4y6gcYK7ykK6z7XlLjw,368
705
+ tomwer-1.1.1.dist-info/namespace_packages.txt,sha256=Iut-JTfT11SZHHm77_ZeszD7pZDWXcTweCbvrJpqDyQ,14
706
+ tomwer-1.1.1.dist-info/top_level.txt,sha256=Yz5zKh0FPiImtzHYcPuztG1AO8-6KEpUWgoChGbA0Ys,21
707
+ tomwer-1.1.1.dist-info/RECORD,,