tomwer 1.4.16__py3-none-any.whl → 1.4.18__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.
tomwer/app/nabuapp.py CHANGED
@@ -95,7 +95,9 @@ class NabuWindow(NabuDialog):
95
95
 
96
96
  # add center of rotation widget
97
97
  self._corWidget = _CORWidget(parent=self)
98
- rw = self._widget._mainWidget._configuration._reconstructionWidget
98
+ rw = (
99
+ self._widget._mainWidget._nabuSettingsWidget._configuration._reconstructionWidget
100
+ )
99
101
  rw.layout().addWidget(self._corWidget, 99, 0, 1, 2)
100
102
 
101
103
  self._dataViewer = None
@@ -33,6 +33,8 @@ from tomwer.gui.cluster.slurm import SlurmSettingsWidget
33
33
  from tomwer.core.scan.scanbase import TomwerScanBase
34
34
  from tomwer.core.scan.nxtomoscan import NXtomoScan
35
35
  from tomwer.core.volume import HDF5Volume
36
+ from tomwer.core.volume.volumebase import TomwerVolumeBase
37
+ from tomwer.core.tomwer_object import TomwerObject
36
38
 
37
39
 
38
40
  class MainWidget(qt.QTabWidget):
@@ -131,6 +133,14 @@ class MainWidget(qt.QTabWidget):
131
133
  def loadSettings(self, config_file):
132
134
  self._stitchingConfigWindow._loadSettings(config_file)
133
135
 
136
+ def get_available_pre_processing_stitching_mode(self):
137
+ return self._stitchingConfigWindow.get_available_pre_processing_stitching_mode()
138
+
139
+ def get_available_post_processing_stitching_mode(self):
140
+ return (
141
+ self._stitchingConfigWindow.get_available_post_processing_stitching_mode()
142
+ )
143
+
134
144
 
135
145
  class _StitcherThread(qt.QThread):
136
146
  DEFAULT_OUTPUT_CONFIG_NAME = "stitching_conf_autosave.conf"
@@ -189,6 +199,9 @@ class _StitcherThread(qt.QThread):
189
199
 
190
200
 
191
201
  class MainWindow(qt.QDialog):
202
+
203
+ sigTomoObjAdded = qt.Signal(TomwerObject)
204
+
192
205
  def __init__(self, axis: int, parent=None) -> None:
193
206
  super().__init__(parent)
194
207
  self.setLayout(qt.QVBoxLayout())
@@ -268,7 +281,22 @@ class MainWindow(qt.QDialog):
268
281
  self._mainWindow._stitchingConfigWindow._widget._mainWidget.setCurrentWidget(
269
282
  orderedListWidget
270
283
  )
271
- orderedListWidget._callbackAddTomoObj()
284
+ tomo_objs = orderedListWidget._callbackAddTomoObj()
285
+ for tomo_obj in tomo_objs:
286
+ if len(tomo_objs) > 0:
287
+ self.__updateStitchingTypeFromObjAdded(tomo_obj=tomo_objs[0])
288
+
289
+ def __updateStitchingTypeFromObjAdded(self, tomo_obj: TomwerObject):
290
+ if isinstance(tomo_obj, TomwerScanBase):
291
+ self.setStitchingType(self.get_available_pre_processing_stitching_mode()[0])
292
+ elif isinstance(tomo_obj, TomwerVolumeBase):
293
+ self.setStitchingType(
294
+ self.get_available_post_processing_stitching_mode()[0]
295
+ )
296
+ else:
297
+ raise TypeError(
298
+ f"tomo_obj is expected to be an instance of {type(TomwerObject)}. Got {type(tomo_obj)}"
299
+ )
272
300
 
273
301
  def close(self):
274
302
  self._mainWindow.close()
@@ -330,6 +358,12 @@ class MainWindow(qt.QDialog):
330
358
  def setPostProcessingOutput(self, url: DataUrl) -> None:
331
359
  self._mainWindow._stitchingConfigWindow.setPostProcessingOutput(url=url)
332
360
 
361
+ def get_available_pre_processing_stitching_mode(self) -> tuple[StitchingType]:
362
+ return self._mainWindow.get_available_pre_processing_stitching_mode()
363
+
364
+ def get_available_post_processing_stitching_mode(self) -> tuple[StitchingType]:
365
+ return self._mainWindow.get_available_post_processing_stitching_mode()
366
+
333
367
 
334
368
  def main(argv, stitcher_name: str, stitching_axis: int, logger):
335
369
  parser = argparse.ArgumentParser(description=__doc__)
@@ -427,7 +427,7 @@ class NXtomoScan(_tsNXtomoScan, TomwerScanBase):
427
427
  )
428
428
  return {
429
429
  "hdf5_entry": self.entry,
430
- "location": os.path.basename(self.master_file),
430
+ "location": filter_esrf_mounting_points(os.path.abspath(self.master_file)),
431
431
  "binning": binning,
432
432
  "binning_z": binning_z,
433
433
  "projections_subsampling": proj_subsampling,
@@ -92,6 +92,30 @@ class SingleAxisStitchingWidget(qt.QWidget, _SingleAxisMixIn):
92
92
  if idx >= 0:
93
93
  self._stitchingTypeCB.setCurrentIndex(idx)
94
94
 
95
+ def get_available_pre_processing_stitching_mode(self):
96
+ pre_proc_modes: tuple[str] = tuple(
97
+ filter(
98
+ lambda mode: "preproc" in mode,
99
+ [
100
+ self._stitchingTypeCB.itemText(i_item)
101
+ for i_item in range(self._stitchingTypeCB.count())
102
+ ],
103
+ )
104
+ )
105
+ return tuple([StitchingType.from_value(mode) for mode in pre_proc_modes])
106
+
107
+ def get_available_post_processing_stitching_mode(self):
108
+ post_proc_modes: tuple[str] = tuple(
109
+ filter(
110
+ lambda mode: "postproc" in mode,
111
+ [
112
+ self._stitchingTypeCB.itemText(i_item)
113
+ for i_item in range(self._stitchingTypeCB.count())
114
+ ],
115
+ )
116
+ )
117
+ return tuple([StitchingType.from_value(mode) for mode in post_proc_modes])
118
+
95
119
  def addTomoObj(self, tomo_obj: TomwerObject):
96
120
  self._mainWidget.addTomoObj(tomo_obj)
97
121
  self._updatePreviewPixelSize()
@@ -438,6 +438,11 @@ class _SingleAxisStitchingWindow(
438
438
  # update to force overwrite
439
439
  config["output"]["overwrite_results"] = True
440
440
 
441
+ # avoid any recalculation of the axis position. So the preview is accurate
442
+ config["output"]["axis_0_params"] = ""
443
+ config["output"]["axis_1_params"] = ""
444
+ config["output"]["axis_2_params"] = ""
445
+
441
446
  # clean current preview to notify some calculation is going on
442
447
  preview_plot = self._widget._mainWidget._previewPlot
443
448
  preview_plot._waitingOverlay.show()
@@ -583,6 +588,12 @@ class _SingleAxisStitchingWindow(
583
588
  def setPostProcessingOutput(self, *args, **kwargs):
584
589
  self._outputWidget.setPostProcessingOutput(*args, **kwargs)
585
590
 
591
+ def get_available_pre_processing_stitching_mode(self):
592
+ return self._widget.get_available_pre_processing_stitching_mode()
593
+
594
+ def get_available_post_processing_stitching_mode(self):
595
+ return self._widget.get_available_post_processing_stitching_mode()
596
+
586
597
 
587
598
  class YStitchingWindow(_SingleAxisStitchingWindow, axis=1):
588
599
  pass
@@ -361,7 +361,7 @@ class EditableOrderedTomoObjWidget(AxisOrderedTomoObjWidget):
361
361
  [self._tomoObjsTableView.model().getTomoObj(item) for item in selection]
362
362
  )
363
363
 
364
- def _callbackAddTomoObj(self):
364
+ def _callbackAddTomoObj(self) -> tuple[TomwerObject]:
365
365
  dialog = qt.QFileDialog()
366
366
  dialog.setFileMode(qt.QFileDialog.ExistingFiles)
367
367
  dialog.setNameFilters(
@@ -372,9 +372,9 @@ class EditableOrderedTomoObjWidget(AxisOrderedTomoObjWidget):
372
372
 
373
373
  if not dialog.exec_():
374
374
  dialog.close()
375
- return
375
+ return ()
376
376
  elif len(dialog.selectedFiles()) == 0:
377
- return
377
+ return ()
378
378
  else:
379
379
  tomo_objs = []
380
380
  for file in dialog.selectedFiles():
@@ -386,6 +386,7 @@ class EditableOrderedTomoObjWidget(AxisOrderedTomoObjWidget):
386
386
  tomo_objs.extend(new_objs)
387
387
  for tomo_obj in tomo_objs:
388
388
  self.addTomoObj(tomo_obj=tomo_obj, trigger_callbacks=True)
389
+ return tuple(tomo_objs)
389
390
 
390
391
  def _callbackRemoveSelectedTomoObj(self):
391
392
  obj_to_remove = self.getSelectedTomoObjs()
@@ -333,9 +333,15 @@ class _TomoObjPosition(qt.QWidget):
333
333
  self.layout().addWidget(self._resetValueQPB)
334
334
 
335
335
  # connect signal / slot
336
- self._spinBox.valueChanged.connect(self._valueChanged)
336
+ self._spinBox.editingFinished.connect(self._sbEditingFinished)
337
337
  self._resetValueQPB.clicked.connect(self.resetOriginalValue)
338
338
 
339
+ def _sbEditingFinished(self):
340
+ sender = self.sender()
341
+ assert isinstance(sender, qt.QSpinBox)
342
+ new_value = sender.value()
343
+ self._valueChanged(new_value=new_value)
344
+
339
345
  def _valueChanged(self, new_value):
340
346
  self.sigValueChanged.emit(
341
347
  self.__lastValue,
@@ -354,10 +360,12 @@ class _TomoObjPosition(qt.QWidget):
354
360
  self._positionChanged()
355
361
 
356
362
  def _positionChanged(self):
357
- self._valueChanged(new_value=self._spinBox.value())
363
+ self._valueChanged(self._spinBox.value())
358
364
 
359
- def setValue(self, value: float) -> None:
365
+ def setValue(self, value: float, emit_editing_finished: bool = False) -> None:
360
366
  self._spinBox.setValue(value)
367
+ if emit_editing_finished:
368
+ self._spinBox.editingFinished.emit()
361
369
  self.__lastValue = value
362
370
 
363
371
  def getValue(self) -> float:
@@ -69,10 +69,10 @@ def test_ZStitchingWindow(
69
69
  )
70
70
 
71
71
  window._editTomoObjFirstAxisPositionsWidget.setEditionMode("free")
72
- widget_tomo_obj_0.setValue(10)
72
+ widget_tomo_obj_0.setValue(10, emit_editing_finished=True)
73
73
  assert window.getConfiguration()["stitching"]["axis_0_pos_px"] == [10, 0, -90]
74
74
  window._editTomoObjFirstAxisPositionsWidget.setEditionMode("downstream")
75
- widget_tomo_obj_0.setValue(30)
75
+ widget_tomo_obj_0.setValue(30, emit_editing_finished=True)
76
76
  assert window.getConfiguration()["stitching"]["axis_0_pos_px"] == [30, 20, -70]
77
77
  window._editTomoObjFirstAxisPositionsWidget.setEditionMode("upstream")
78
78
  widget_tomo_obj_2 = (
@@ -80,7 +80,7 @@ def test_ZStitchingWindow(
80
80
  scans[2].get_identifier().to_str()
81
81
  ]
82
82
  )
83
- widget_tomo_obj_2.setValue(-120)
83
+ widget_tomo_obj_2.setValue(-120, emit_editing_finished=True)
84
84
  assert window.getConfiguration()["stitching"]["axis_0_pos_px"] == [-20, -30, -120]
85
85
 
86
86
  # test reset positions to initial positions
@@ -437,7 +437,13 @@ class OutputVolumeDefinition(qt.QWidget):
437
437
  # output file or folder
438
438
  self._outputFileLabel = qt.QLabel("", self)
439
439
  self.layout().addWidget(self._outputFileLabel, 1, 0, 1, 1)
440
- self._outputFileQLE = QLFileSystem("", parent=None)
440
+ self._outputFileQLE = QLFileSystem(
441
+ os.path.join(
442
+ os.getcwd(),
443
+ "stitched_volume.hdf5",
444
+ ),
445
+ parent=None,
446
+ )
441
447
  self.layout().addWidget(self._outputFileQLE, 1, 1, 1, 1)
442
448
  self._selectPB = qt.QPushButton("select", self)
443
449
  self.layout().addWidget(self._selectPB, 1, 2, 1, 1)
tomwer/gui/utils/utils.py CHANGED
@@ -49,7 +49,7 @@ def open_url_with_image_j(url: DataUrl) -> threading.Thread:
49
49
 
50
50
  :param url: url we want to open in imagej
51
51
  """
52
- global __image_j_from
52
+ global __image_j_from # noqa: F824
53
53
  if not has_imagej():
54
54
  raise OSError("ImageJ is not installed")
55
55
  thread = ImageJthread(url=url, image_j_from=__image_j_from)
tomwer/version.py CHANGED
@@ -77,7 +77,7 @@ RELEASE_LEVEL_VALUE = {
77
77
 
78
78
  MAJOR = 1
79
79
  MINOR = 4
80
- MICRO = 16
80
+ MICRO = 18
81
81
  RELEV = "final" # <16
82
82
  SERIAL = 0 # <16
83
83
 
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: tomwer
3
- Version: 1.4.16
3
+ Version: 1.4.18
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
@@ -26,7 +26,7 @@ Requires-Dist: setuptools
26
26
  Requires-Dist: psutil
27
27
  Requires-Dist: silx[full]<2.1.1,>=2.0
28
28
  Requires-Dist: tomoscan>=2.1.0a18
29
- Requires-Dist: nxtomo>=1.3.0dev4
29
+ Requires-Dist: nxtomo<2.0,>=1.3.0dev4
30
30
  Requires-Dist: nxtomomill>=1.1.0a0
31
31
  Requires-Dist: processview>=1.5.0
32
32
  Requires-Dist: ewoks>=0.1.1
@@ -48,7 +48,7 @@ Requires-Dist: werkzeug; extra == "full-base"
48
48
  Requires-Dist: json-rpc; extra == "full-base"
49
49
  Requires-Dist: scipy; extra == "full-base"
50
50
  Requires-Dist: Pillow; extra == "full-base"
51
- Requires-Dist: glymur; extra == "full-base"
51
+ Requires-Dist: glymur<0.14; extra == "full-base"
52
52
  Requires-Dist: resource; extra == "full-base"
53
53
  Requires-Dist: tifffile; extra == "full-base"
54
54
  Requires-Dist: hdf5plugin; extra == "full-base"
@@ -68,7 +68,7 @@ Requires-Dist: werkzeug; extra == "full-no-nabu"
68
68
  Requires-Dist: json-rpc; extra == "full-no-nabu"
69
69
  Requires-Dist: scipy; extra == "full-no-nabu"
70
70
  Requires-Dist: Pillow; extra == "full-no-nabu"
71
- Requires-Dist: glymur; extra == "full-no-nabu"
71
+ Requires-Dist: glymur<0.14; extra == "full-no-nabu"
72
72
  Requires-Dist: resource; extra == "full-no-nabu"
73
73
  Requires-Dist: tifffile; extra == "full-no-nabu"
74
74
  Requires-Dist: hdf5plugin; extra == "full-no-nabu"
@@ -88,7 +88,7 @@ Requires-Dist: werkzeug; extra == "full-no-cuda"
88
88
  Requires-Dist: json-rpc; extra == "full-no-cuda"
89
89
  Requires-Dist: scipy; extra == "full-no-cuda"
90
90
  Requires-Dist: Pillow; extra == "full-no-cuda"
91
- Requires-Dist: glymur; extra == "full-no-cuda"
91
+ Requires-Dist: glymur<0.14; extra == "full-no-cuda"
92
92
  Requires-Dist: resource; extra == "full-no-cuda"
93
93
  Requires-Dist: tifffile; extra == "full-no-cuda"
94
94
  Requires-Dist: hdf5plugin; extra == "full-no-cuda"
@@ -109,7 +109,7 @@ Requires-Dist: werkzeug; extra == "full"
109
109
  Requires-Dist: json-rpc; extra == "full"
110
110
  Requires-Dist: scipy; extra == "full"
111
111
  Requires-Dist: Pillow; extra == "full"
112
- Requires-Dist: glymur; extra == "full"
112
+ Requires-Dist: glymur<0.14; extra == "full"
113
113
  Requires-Dist: resource; extra == "full"
114
114
  Requires-Dist: tifffile; extra == "full"
115
115
  Requires-Dist: hdf5plugin; extra == "full"
@@ -132,7 +132,7 @@ Requires-Dist: werkzeug; extra == "doc"
132
132
  Requires-Dist: json-rpc; extra == "doc"
133
133
  Requires-Dist: scipy; extra == "doc"
134
134
  Requires-Dist: Pillow; extra == "doc"
135
- Requires-Dist: glymur; extra == "doc"
135
+ Requires-Dist: glymur<0.14; extra == "doc"
136
136
  Requires-Dist: resource; extra == "doc"
137
137
  Requires-Dist: tifffile; extra == "doc"
138
138
  Requires-Dist: hdf5plugin; extra == "doc"
@@ -166,7 +166,7 @@ Requires-Dist: werkzeug; extra == "dev"
166
166
  Requires-Dist: json-rpc; extra == "dev"
167
167
  Requires-Dist: scipy; extra == "dev"
168
168
  Requires-Dist: Pillow; extra == "dev"
169
- Requires-Dist: glymur; extra == "dev"
169
+ Requires-Dist: glymur<0.14; extra == "dev"
170
170
  Requires-Dist: resource; extra == "dev"
171
171
  Requires-Dist: tifffile; extra == "dev"
172
172
  Requires-Dist: hdf5plugin; extra == "dev"
@@ -193,7 +193,7 @@ Requires-Dist: werkzeug; extra == "dev-no-cuda"
193
193
  Requires-Dist: json-rpc; extra == "dev-no-cuda"
194
194
  Requires-Dist: scipy; extra == "dev-no-cuda"
195
195
  Requires-Dist: Pillow; extra == "dev-no-cuda"
196
- Requires-Dist: glymur; extra == "dev-no-cuda"
196
+ Requires-Dist: glymur<0.14; extra == "dev-no-cuda"
197
197
  Requires-Dist: resource; extra == "dev-no-cuda"
198
198
  Requires-Dist: tifffile; extra == "dev-no-cuda"
199
199
  Requires-Dist: hdf5plugin; extra == "dev-no-cuda"
@@ -218,7 +218,7 @@ Requires-Dist: werkzeug; extra == "test"
218
218
  Requires-Dist: json-rpc; extra == "test"
219
219
  Requires-Dist: scipy; extra == "test"
220
220
  Requires-Dist: Pillow; extra == "test"
221
- Requires-Dist: glymur; extra == "test"
221
+ Requires-Dist: glymur<0.14; extra == "test"
222
222
  Requires-Dist: resource; extra == "test"
223
223
  Requires-Dist: tifffile; extra == "test"
224
224
  Requires-Dist: hdf5plugin; extra == "test"
@@ -231,6 +231,7 @@ Requires-Dist: tomoscan[test]>=2.1.0a18; extra == "test"
231
231
  Provides-Extra: setup-requires
232
232
  Requires-Dist: setuptools; extra == "setup-requires"
233
233
  Requires-Dist: numpy>=1.12; extra == "setup-requires"
234
+ Dynamic: license-file
234
235
 
235
236
  .. image:: doc/img/tomwer.png
236
237
  :alt: Tomwer Logo
@@ -219,7 +219,7 @@ orangecontrib/tomwer/widgets/visualization/tests/__init__.py,sha256=47DEQpj8HBSa
219
219
  tomwer/__init__.py,sha256=cMIyH-uRxpa9WVnAuWjiBD7k9TK57WO21RzP_S-Mb8I,460
220
220
  tomwer/__main__.py,sha256=7tCADiS4u7k1PCxFhlRAcYSIOpxQTGUTx8sCEQ-hi1E,8707
221
221
  tomwer/utils.py,sha256=7h7dEgKAEUmQ43jkULvC1B9Adl55nkCty-SEKUKCl4U,7008
222
- tomwer/version.py,sha256=alEn949jQ3mVKKhR8I9K3oqXSOu85M72-Ldd5-fyb7I,4387
222
+ tomwer/version.py,sha256=ZockRUONTpS2pMmqMM74e8Rvh1TysPALNWyegIXFEyE,4387
223
223
  tomwer/app/__init__.py,sha256=h1FKED7Tw5f99yikygt7ruXsdrxQhcJxO7kagLGxhJg,84
224
224
  tomwer/app/axis.py,sha256=lB-IZx1o6KTWLIelITvYCIu2flFTB9NhuIfD2MhUZZA,5826
225
225
  tomwer/app/canvas.py,sha256=y8rYOiwmv6ug7JcjgkOzEiGQnNXjKWNNmKofT0n8TFg,1538
@@ -231,7 +231,7 @@ tomwer/app/imagekeyupgrader.py,sha256=qLbfWPz68b2DxMYNd5MlIyZdQ12YQ7F-KUA92RcI01
231
231
  tomwer/app/intensitynormalization.py,sha256=5uT8xQWjjq7uV8-0jru_2Qf9SIN5ooVCPH8Ok8inMYE,5998
232
232
  tomwer/app/multicor.py,sha256=NgSYIh1CTM1ssD5fXfH4j9MM3HU_NUEx_4EIWehijMs,8900
233
233
  tomwer/app/multipag.py,sha256=LHk4-97aYqFQ9UgQb8mYW1_nkUQBbgUxee4RinloCjk,12016
234
- tomwer/app/nabuapp.py,sha256=f8mao2GprCN-CCTFHUlrCLoxFNZmMpzegrlMNnyE_XI,7643
234
+ tomwer/app/nabuapp.py,sha256=1kBQlyzkEYW-iEH6hdYlrXuvg1MPQfPLmDIA5P6oXE4,7687
235
235
  tomwer/app/nxtomoeditor.py,sha256=1Wj59ZF3QvDBmUkUosxZlxvOM-mCvs74l1YJe3tFtwQ,3012
236
236
  tomwer/app/patchrawdarkflat.py,sha256=0s4Uk7rlF6VYcwKAysxj5ncP7jTgDL9XIiMPqZUktvg,3779
237
237
  tomwer/app/radiostack.py,sha256=S6VB7BSmpfFdnGEyX_7wvLFiOtbtlEwgP7PEUAJLN4w,2640
@@ -252,7 +252,7 @@ tomwer/app/canvas_launcher/splash.py,sha256=cpUuZVKwlQbeAWfAqjpjP4q1v1MmkfxU6WWl
252
252
  tomwer/app/canvas_launcher/utils.py,sha256=WfsCHAhiiv4-TUNodgyKJenVvmFWnxsy5OBwTBK2jKE,1279
253
253
  tomwer/app/canvas_launcher/widgetsscheme.py,sha256=9Or1KMmSxIs_dJmJGV0Xhjg9HH4m8aPGbtiEuK2i6q0,2744
254
254
  tomwer/app/stitching/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
255
- tomwer/app/stitching/common.py,sha256=-DNsE3XbBBCvm-NqSTCyJMiYY5GoGHkdzC0y66jZ6Po,15779
255
+ tomwer/app/stitching/common.py,sha256=unFHRuJdzKMLlBM6znQx-KPcbJ7H__EKKe8CUw_Apfs,17293
256
256
  tomwer/core/__init__.py,sha256=-EtD8J-a7WVnCgYS7WHkisYn61iM2PpHWcXwE5BetJ8,71
257
257
  tomwer/core/futureobject.py,sha256=8Sd9gOrdhYc0PvzPeZPBNOmaHuwB5epG6RJyABRsCmQ,5113
258
258
  tomwer/core/resourcemanager.py,sha256=VLNnVodMa-HOMZhN2qpUR_L6phJ8IHPUEPYMxuW6VHg,1067
@@ -408,7 +408,7 @@ tomwer/core/scan/edfscan.py,sha256=5brP6ewiDRaT0ssSf35kAYzfWwynyTaoSPcOjmNxf0o,2
408
408
  tomwer/core/scan/futurescan.py,sha256=chXjteQ4_6cSyFBoCil-DeHkHGGzM-xb21xJRYLEfhI,213
409
409
  tomwer/core/scan/hdf5scan.py,sha256=rQ-WtbOIgNtnMxA2kC23fEAcJIJIKboAv7UQColkrBg,966
410
410
  tomwer/core/scan/helicalmetadata.py,sha256=JRBxqHkyTe5f3FDlbIeDfN31P6Ms48SqGiFRXHuZ8sw,472
411
- tomwer/core/scan/nxtomoscan.py,sha256=wfyTtgxSaazxacUyUxdESJldUTbpJ8G-NhF09xO1XGI,18413
411
+ tomwer/core/scan/nxtomoscan.py,sha256=juA5so5YpiLDC4-JMCcR5xNovCRbLmcEkWN65QfWkzk,18441
412
412
  tomwer/core/scan/scanbase.py,sha256=GO5DgYHtLZJwLW1-Y4ztHxgfdGMPUIhx1rhBG9lWBeM,25627
413
413
  tomwer/core/scan/scanfactory.py,sha256=-bF0Ru9bn8bnGk4MKXhbt5Oli19qN1WvFPDMtqw81BA,9116
414
414
  tomwer/core/scan/scantype.py,sha256=pQjWuCy_014uK5cdb8pFAkE_EPHJvPdSo3NM8aWTo58,137
@@ -416,7 +416,6 @@ tomwer/core/scan/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3
416
416
  tomwer/core/scan/tests/test_edf.py,sha256=JI7wH5emdjlYl08OhmjIO_8mui7rHa-aRCUwmkCRyys,830
417
417
  tomwer/core/scan/tests/test_future_scan.py,sha256=tsF9p57dCOmW0fPyl6BP2lLSo0rRYRF6hSF-kryLMDM,848
418
418
  tomwer/core/scan/tests/test_nxtomoscan.py,sha256=w2mNuCsfWMl1b9jP_-vkTDkCD_z9oM02yx42f6-DzY8,4751
419
- tomwer/core/scan/tests/test_process_registration.py,sha256=g4Toef92SjxCBUE82MTbjonFJpc3PQqfpF6FSCarN5U,1988
420
419
  tomwer/core/scan/tests/test_scan.py,sha256=mHFPi2Tc7Z2_5rWvAp3YmObVSTB5yi-sTkHm1iOJlDo,12228
421
420
  tomwer/core/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
422
421
  tomwer/core/tests/test_scanutils.py,sha256=xWwd1nycVDWmFaIaL2gQ_xxrUMhVCARaNHI2SxT9NOI,844
@@ -598,13 +597,13 @@ tomwer/gui/reconstruction/tests/test_saaxis.py,sha256=6lXKa5yY8pYkcBap7hyzLwhp8W
598
597
  tomwer/gui/reconstruction/tests/test_sadeltabeta.py,sha256=96tE_gxIcmp0qDXQmIwSEkYl3Js7dT2CyUH1doyjGc0,4491
599
598
  tomwer/gui/samplemoved/__init__.py,sha256=jNA03mYWfP3_S1MRet6ijYe5DNCTK3Br7-5yrW3oEG4,8240
600
599
  tomwer/gui/samplemoved/selectiontable.py,sha256=CzQnJBxfIeoZSw8aR0VvrsaIg6fozREI8YRXdzQbA7Q,7968
601
- tomwer/gui/stitching/SingleAxisStitchingWidget.py,sha256=syBzSf8yRE9poZh0UKqZcyD8ZmEt-vama8bVRsGBuDw,13023
600
+ tomwer/gui/stitching/SingleAxisStitchingWidget.py,sha256=KSAEUVpSkZ56XjnpF2RlrgenjIkfJct367kbZaYQlXA,13917
602
601
  tomwer/gui/stitching/StitchingOptionsWidget.py,sha256=c5kRZOMuGKK_CgK28IkBawaVvK2cmczbWF4TcVUZxq4,18186
603
- tomwer/gui/stitching/StitchingWindow.py,sha256=g5lurZ3rZ010PBvU4oOWqDgcF3SbDzIqgIOyBHZ-Lyw,24608
602
+ tomwer/gui/stitching/StitchingWindow.py,sha256=tm7aadWGUcmHnVXws1ifJtbb835U3dF4mLZGiP3VQSM,25103
604
603
  tomwer/gui/stitching/__init__.py,sha256=jYSG4DSAtMGm9Yuf4MVdlSdMO8JKOp_t-8NKsnR92LU,45
605
604
  tomwer/gui/stitching/action.py,sha256=7CkACYKsRt3c_6PgrmQVZwSi9UwvGrQVUymJytHbqcE,1659
606
605
  tomwer/gui/stitching/alignment.py,sha256=QGWnogvBSbx3kk8lrFDoipmhqbVHEe46WGAeOorlHQ8,4001
607
- tomwer/gui/stitching/axisorderedlist.py,sha256=2Os8cjZM9B-LCYB9p6JW7MpqXWaVd6oeWSqP4ZbSlBM,17980
606
+ tomwer/gui/stitching/axisorderedlist.py,sha256=IEJoOXlf8wpWkJijLjF-jGRMHOpQ8lGVuajvIqc670s,18045
608
607
  tomwer/gui/stitching/metadataholder.py,sha256=jeR6_DM529aEmxQLeLM3CB-49GHq6KLY2Nc24kSC-HA,913
609
608
  tomwer/gui/stitching/normalization.py,sha256=sECW3S83-eQJut2RodfxCRsTnTV4XLCL-z-pVtD1U5Y,4492
610
609
  tomwer/gui/stitching/preview.py,sha256=no74hLS4d_mDVwMXkO7k5aNn-B3Y4h-Jx0dlM20rhbE,2292
@@ -616,11 +615,11 @@ tomwer/gui/stitching/utils.py,sha256=ZgfKHLyH7l81Ry-4M5ajdwqdeos_J4g4Ee3j3yoXcJo
616
615
  tomwer/gui/stitching/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
617
616
  tomwer/gui/stitching/config/axisparams.py,sha256=1cRa9ukPvVK7AGePJsJx2M_i_5TMLJocVwrotz7uxXk,8026
618
617
  tomwer/gui/stitching/config/output.py,sha256=2kOKV5vTt1scIkmEUyhSvERRs8UvEHojRazCC0RzeE8,6176
619
- tomwer/gui/stitching/config/positionoveraxis.py,sha256=NGgjxzhxCXa3fBtHP9O9oiqLw8lpUqV_NNbhrnRGrdY,16328
618
+ tomwer/gui/stitching/config/positionoveraxis.py,sha256=3vKasddv6d--qO5Izjg6JBE1HXhgYI-RBNFBuLF-BUU,16642
620
619
  tomwer/gui/stitching/config/stitchingstrategies.py,sha256=BI5KYs0qeEp-hfFI7M9MJN8EHmoC7iaJqQ7Hf902v6Y,4598
621
620
  tomwer/gui/stitching/config/tomoobjdetails.py,sha256=GkQIqE2ArXFJFtmjrwc0txbZldNKJK-fpMEF_68S1qQ,14667
622
621
  tomwer/gui/stitching/config/tests/test_axisparams.py,sha256=btumHdTFr2xmiFZ-GbWAuRy6kjwYUilMrluhiE0repM,738
623
- tomwer/gui/stitching/tests/test_ZStitchingWindow.py,sha256=NEfL8fjcYreiAKyfojiUdhAmoQx0bPjFLZUklS2xQkk,3007
622
+ tomwer/gui/stitching/tests/test_ZStitchingWindow.py,sha256=_qywMShdazk7WekGCUA2rv8ZN-WGuQJ-v8zqCGuWYN0,3091
624
623
  tomwer/gui/stitching/tests/test_axis_ordered_list.py,sha256=ueXQ-YrP0S325PrJiPLdsM4GdzhZm8lTzb-P9hJ3TEY,700
625
624
  tomwer/gui/stitching/tests/test_normalization.py,sha256=m4anggtaZ32JSfZ5yHgis5CD0HYpjLvS6bpDitQv9ec,643
626
625
  tomwer/gui/stitching/tests/test_preview.py,sha256=sQ0fh07e1oYgWwlB4tqHlOv9Qsf_-bZS39GfsolGW3s,2349
@@ -641,7 +640,7 @@ tomwer/gui/utils/completer.py,sha256=XQGVSiUdLa1MfgXPDY5qfcTxtjVerxmVKXmWDb-kQ-I
641
640
  tomwer/gui/utils/flow.py,sha256=p9KoaXSK_YhyFrpUTXr-HI1pAoDRiCPW1F9tVgjSIbA,10668
642
641
  tomwer/gui/utils/gpu.py,sha256=R2sRA77zyxdy5bVYGNltQpKS_9wuaj9eIn6rglsWGWg,2223
643
642
  tomwer/gui/utils/illustrations.py,sha256=SoLAGBIrdYAu44qIZM8kvC74naOTJzUyAxSUkpblyEw,3134
644
- tomwer/gui/utils/inputwidget.py,sha256=s1siEQ6nBOTVRF7v8wlgCISS0bYiVmWYpFnWCqM5ueY,22376
643
+ tomwer/gui/utils/inputwidget.py,sha256=E8S4XwuIFxdm7ylBzqQVcJtEYif5CgMx5RTAyQ9Vs8E,22505
645
644
  tomwer/gui/utils/loadingmode.py,sha256=A9FeNacgnDFqhyrq5-qybCvV_NwGdXU-Skr_5vwoTZM,2928
646
645
  tomwer/gui/utils/qt_utils.py,sha256=QMXte_vdCEwr4Vybt5sopczQ_OuRd1W5h6SydqFH0F8,538
647
646
  tomwer/gui/utils/sandboxes.py,sha256=QfSRhL1KrFhS2Wr734Tzvp1OjTp82Ozc0ULr-JycFlI,6145
@@ -651,7 +650,7 @@ tomwer/gui/utils/slider.py,sha256=NLooxIa_2dMv60UAt_PV2BKcd15WuNv1EiV1JRdVcu0,21
651
650
  tomwer/gui/utils/splashscreen.py,sha256=Wt6lDby3irZn6Vc52whPRTbJOzmMA66VH6d5cIXy_dI,489
652
651
  tomwer/gui/utils/step.py,sha256=epEKQwj2byRFH_Lc2XUuMGOVcrKR0m1iFP7HPqb5iG0,5397
653
652
  tomwer/gui/utils/unitsystem.py,sha256=0g6pYemy2MpkGQJGuuR9yCwbZ9mt3nPA1dqAvAqUHRo,5994
654
- tomwer/gui/utils/utils.py,sha256=e_PA4P8GjBW17uemqSDjMy5YLYgVIy2qppmP2kYTALU,2673
653
+ tomwer/gui/utils/utils.py,sha256=FbzvEkJacSdZXe4lvrYOge9csQGx50hH-R8gbx5E0sI,2687
655
654
  tomwer/gui/utils/vignettes.py,sha256=1HoABQcreptH6GIuo5nrLZmPcsTWuQlRuSW5IHJTRT4,17792
656
655
  tomwer/gui/utils/waiterthread.py,sha256=lyRCzVDAyxquO3JbXxDhVTCv_YjzOQd7PAPsGWjKBrE,494
657
656
  tomwer/gui/utils/lineselector/__init__.py,sha256=GZ847ef5X2wk_sAHxg6h24TarPYmb4NZjQI3jjkc7jE,75
@@ -849,7 +848,6 @@ tomwer/synctools/tests/test_darkRefs.py,sha256=1OgWaV-hgDmi4rkh0hxjCW_codBAnxNhp
849
848
  tomwer/synctools/tests/test_foldertransfer.py,sha256=ZFIJWSjgYAWw3ktzamid5DJZNnMkAV6Pj72dKG69cJc,12024
850
849
  tomwer/synctools/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
851
850
  tomwer/synctools/utils/scanstages.py,sha256=vIUKVDSfM2UwPjjmZTiIN1tNg4antnGcSPv1aYapJCY,7830
852
- tomwer/tasks/reconstruction/cleardarkflat.py,sha256=_V_x7W8vp1_AqqtQ9xk2VRgwlivn4IPTLEpWySjSZRE,1353
853
851
  tomwer/tests/__init__.py,sha256=dPPaIvpzHssjwxsMzYJM_gxQ2e0cnRyQHXxi9ux6ZOY,19
854
852
  tomwer/tests/conftest.py,sha256=0XlKfOrVtPg8VmyQn4BoK_mzcliFUtacDGLlZ5wD_PM,1912
855
853
  tomwer/tests/datasets.py,sha256=QXQ3jSwgWzfq4CaELOSrk9kHg5GmrP7kGHsdOlNSEIE,336
@@ -906,9 +904,9 @@ tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_volume_viewer
906
904
  tomwer/tests/test_ewoks/test_conversion.py,sha256=a8cEWbErXiFCAkaapi0jeEoRKYxcFQCoa-Jr_u77_OM,3656
907
905
  tomwer/tests/test_ewoks/test_single_node_execution.py,sha256=YBUHfiAnkciv_kjj7biC5fOs7c7ofNImM_azGMn4LZM,2813
908
906
  tomwer/tests/test_ewoks/test_workflows.py,sha256=Eq80eexf5NVL7SzvwctLOaUeuQ8V3vDiFiHgbJA4Yb8,4871
909
- tomwer-1.4.16.dist-info/LICENSE,sha256=62p1wL0n9WMTu8x2YDv0odYgTqeSvTd9mQ0v6Mq7lzE,1876
910
- tomwer-1.4.16.dist-info/METADATA,sha256=GWby5-pOa4v9WTqx5SUKnrMkx0vYn0IGgoKLin6Q-CM,13416
911
- tomwer-1.4.16.dist-info/WHEEL,sha256=beeZ86-EfXScwlR_HKu4SllMC9wUEj_8Z_4FJ3egI2w,91
912
- tomwer-1.4.16.dist-info/entry_points.txt,sha256=py3ZUWvGnWGc5c7Yhw_uBTm8Fmew0BDw3aQZnWMBNZI,500
913
- tomwer-1.4.16.dist-info/top_level.txt,sha256=Yz5zKh0FPiImtzHYcPuztG1AO8-6KEpUWgoChGbA0Ys,21
914
- tomwer-1.4.16.dist-info/RECORD,,
907
+ tomwer-1.4.18.dist-info/licenses/LICENSE,sha256=62p1wL0n9WMTu8x2YDv0odYgTqeSvTd9mQ0v6Mq7lzE,1876
908
+ tomwer-1.4.18.dist-info/METADATA,sha256=JzR1mNQUR3mOwD1uqJNJKCE62eAa0U5Vy67pb2qNc5o,13483
909
+ tomwer-1.4.18.dist-info/WHEEL,sha256=pxyMxgL8-pra_rKaQ4drOZAegBVuX-G_4nRHjjgWbmo,91
910
+ tomwer-1.4.18.dist-info/entry_points.txt,sha256=py3ZUWvGnWGc5c7Yhw_uBTm8Fmew0BDw3aQZnWMBNZI,500
911
+ tomwer-1.4.18.dist-info/top_level.txt,sha256=Yz5zKh0FPiImtzHYcPuztG1AO8-6KEpUWgoChGbA0Ys,21
912
+ tomwer-1.4.18.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (76.1.0)
2
+ Generator: setuptools (79.0.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,64 +0,0 @@
1
- # coding: utf-8
2
- from __future__ import annotations
3
-
4
- import shutil
5
- import tempfile
6
- import unittest
7
-
8
- from tomoscan.io import HDF5File, get_swmr_mode
9
-
10
- from tomwer.core.process.task import Task
11
- from tomwer.core.utils.scanutils import MockNXtomo
12
-
13
-
14
- class TestProcessRegistration(unittest.TestCase):
15
- """
16
- Make sure utils link to the process registration are
17
- correctly working
18
- """
19
-
20
- class DummyProcess(Task):
21
- @staticmethod
22
- def program_name():
23
- """Name of the program used for this processing"""
24
- return "dummy program"
25
-
26
- @staticmethod
27
- def program_version():
28
- """version of the program used for this processing"""
29
- return "0.0.0"
30
-
31
- @staticmethod
32
- def definition():
33
- """definition of the process"""
34
- return "no definition"
35
-
36
- def setUp(self):
37
- self.tmp_dir = tempfile.mkdtemp()
38
- self.scan = MockNXtomo(scan_path=self.tmp_dir, n_proj=2).scan
39
-
40
- def tearDown(self):
41
- shutil.rmtree(self.tmp_dir)
42
-
43
- def testGetProcessNodes(self):
44
- """insure it return the last dark process based on the processing index"""
45
-
46
- for i in range(20):
47
- Task._register_process(
48
- self.scan.process_file,
49
- process=self.DummyProcess,
50
- entry=self.scan.entry,
51
- configuration=None,
52
- results={"output": i},
53
- process_index=i,
54
- )
55
-
56
- with HDF5File(self.scan.process_file, "r", swmr=get_swmr_mode()) as h5f:
57
- nodes = Task._get_process_nodes(
58
- root_node=h5f[self.scan.entry], process=self.DummyProcess
59
- )
60
- self.assertEqual(len(nodes), 20)
61
- self.assertTrue("/entry/tomwer_process_16" in nodes)
62
- self.assertEqual(nodes["/entry/tomwer_process_16"], 16)
63
- self.assertTrue("/entry/tomwer_process_1" in nodes)
64
- self.assertEqual(nodes["/entry/tomwer_process_1"], 1)
@@ -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