tomwer 1.3.12__py3-none-any.whl → 1.3.14__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- orangecontrib/tomwer/widgets/reconstruction/DarkRefAndCopyOW.py +1 -0
- tomwer/core/process/reconstruction/darkref/darkrefscopy.py +34 -6
- tomwer/gui/control/selectorwidgetbase.py +3 -1
- tomwer/gui/edit/nxtomoeditor.py +28 -20
- tomwer/gui/edit/test/test_nx_editor.py +58 -1
- tomwer/gui/reconstruction/axis/axis.py +14 -13
- tomwer/gui/reconstruction/darkref/darkrefcopywidget.py +11 -0
- tomwer/synctools/stacks/reconstruction/dkrefcopy.py +10 -0
- tomwer/version.py +1 -1
- {tomwer-1.3.12.dist-info → tomwer-1.3.14.dist-info}/METADATA +2 -2
- {tomwer-1.3.12.dist-info → tomwer-1.3.14.dist-info}/RECORD +17 -17
- /tomwer-1.3.12-py3.11-nspkg.pth → /tomwer-1.3.14-py3.11-nspkg.pth +0 -0
- {tomwer-1.3.12.dist-info → tomwer-1.3.14.dist-info}/LICENSE +0 -0
- {tomwer-1.3.12.dist-info → tomwer-1.3.14.dist-info}/WHEEL +0 -0
- {tomwer-1.3.12.dist-info → tomwer-1.3.14.dist-info}/entry_points.txt +0 -0
- {tomwer-1.3.12.dist-info → tomwer-1.3.14.dist-info}/namespace_packages.txt +0 -0
- {tomwer-1.3.12.dist-info → tomwer-1.3.14.dist-info}/top_level.txt +0 -0
@@ -152,6 +152,7 @@ class DarkRefAndCopyOW(SuperviseOW, WidgetLongProcessing):
|
|
152
152
|
self.widget.recons_params.sigChanged.connect(self._updateSettingsVals)
|
153
153
|
self.widget.sigModeAutoChanged.connect(self._updateSettingsVals)
|
154
154
|
self.widget.sigCopyActivationChanged.connect(self._updateSettingsVals)
|
155
|
+
self.widget.sigClearCache.connect(self._processing_stack.clear_cache)
|
155
156
|
self._processing_stack.sigComputationStarted.connect(self._startProcessing)
|
156
157
|
self._processing_stack.sigComputationEnded.connect(self._endProcessing)
|
157
158
|
self._processing_stack.sigRefSetted.connect(self.widget.setRefSetBy)
|
@@ -34,6 +34,7 @@ __date__ = "17/08/2021"
|
|
34
34
|
|
35
35
|
import logging
|
36
36
|
import os
|
37
|
+
import h5py
|
37
38
|
import tempfile
|
38
39
|
from typing import Union
|
39
40
|
|
@@ -198,10 +199,37 @@ class DarkRefsCopy(DarkRefsTask):
|
|
198
199
|
update_mode="replace",
|
199
200
|
)
|
200
201
|
|
202
|
+
def clear_cache(self):
|
203
|
+
"""
|
204
|
+
remove the file used to cache the reduced darks / flats.
|
205
|
+
This can be used in the case it contain unrelevant data. Like frame with another shape...
|
206
|
+
"""
|
207
|
+
cache_file = DarkRefsCopy.get_save_file(self._savedir)
|
208
|
+
if os.path.exists(cache_file):
|
209
|
+
os.remove(cache_file)
|
210
|
+
|
211
|
+
def _clear_cache_data_path(self, file_path: str, data_path: str):
|
212
|
+
if not os.path.exists(file_path):
|
213
|
+
return
|
214
|
+
with h5py.File(file_path, mode="a") as h5f:
|
215
|
+
if data_path in h5f:
|
216
|
+
del h5f[data_path]
|
217
|
+
|
201
218
|
def set_darks_and_flats_from_scan(self, scan: TomwerScanBase) -> bool:
|
202
|
-
|
219
|
+
has_flats = scan.reduced_flats not in (None, {})
|
220
|
+
has_darks = scan.reduced_darks not in (None, {})
|
221
|
+
if has_flats and has_darks:
|
222
|
+
# if the scan has darks and flats remove directly the cache file
|
223
|
+
# else in append mode HDF5 is not removing the dataset and
|
224
|
+
# the cache size will continue to increase
|
225
|
+
self.clear_cache()
|
226
|
+
if not has_flats:
|
203
227
|
logger.warning(f"No flat found for {scan}. Unable to copy them")
|
204
228
|
else:
|
229
|
+
self._clear_cache_data_path(
|
230
|
+
file_path=self._flats_url.file_path(),
|
231
|
+
data_path=self._flats_url.data_path(),
|
232
|
+
)
|
205
233
|
dicttoh5(
|
206
234
|
scan.reduced_flats,
|
207
235
|
h5file=self._flats_url.file_path(),
|
@@ -209,9 +237,13 @@ class DarkRefsCopy(DarkRefsTask):
|
|
209
237
|
mode="a",
|
210
238
|
update_mode="replace",
|
211
239
|
)
|
212
|
-
if
|
240
|
+
if not has_darks:
|
213
241
|
logger.warning(f"No dark found for {scan}. Unable to copy them")
|
214
242
|
else:
|
243
|
+
self._clear_cache_data_path(
|
244
|
+
file_path=self._darks_url.file_path(),
|
245
|
+
data_path=self._darks_url.data_path(),
|
246
|
+
)
|
215
247
|
dicttoh5(
|
216
248
|
scan.reduced_darks,
|
217
249
|
h5file=self._darks_url.file_path(),
|
@@ -247,10 +279,6 @@ class DarkRefsCopy(DarkRefsTask):
|
|
247
279
|
overwrite=True,
|
248
280
|
)
|
249
281
|
|
250
|
-
def clean_save_files(self):
|
251
|
-
if os.path.exists(self._save_file):
|
252
|
-
os.remove(self._save_file)
|
253
|
-
|
254
282
|
def run(self):
|
255
283
|
"""
|
256
284
|
This is function triggered when a new scan / data is received.
|
@@ -156,7 +156,9 @@ class _SelectorWidget(qt.QMainWindow):
|
|
156
156
|
|
157
157
|
def removeSelectedDatasets(self):
|
158
158
|
sItem = self.dataList.selectedItems()
|
159
|
-
selection = [
|
159
|
+
selection = [
|
160
|
+
_item.data(qt.Qt.UserRole).get_identifier().to_str() for _item in sItem
|
161
|
+
]
|
160
162
|
|
161
163
|
with block_signals(self):
|
162
164
|
# make sure sigUpdated is called only once.
|
tomwer/gui/edit/nxtomoeditor.py
CHANGED
@@ -574,28 +574,36 @@ class NXtomoEditor(qt.QWidget):
|
|
574
574
|
),
|
575
575
|
solve_empty_dependency=True,
|
576
576
|
)
|
577
|
-
|
578
|
-
|
579
|
-
|
580
|
-
|
581
|
-
|
582
|
-
|
583
|
-
|
584
|
-
|
585
|
-
|
586
|
-
|
587
|
-
|
588
|
-
|
577
|
+
if nexus_paths.nx_detector_paths.NX_TRANSFORMATIONS is not None:
|
578
|
+
# old NXtomo are not handling NX_TRANSFORMATIONS
|
579
|
+
detector_transformation_path = "/".join(
|
580
|
+
(
|
581
|
+
nexus_paths.INSTRUMENT_PATH,
|
582
|
+
nexus_paths.nx_instrument_paths.DETECTOR_PATH,
|
583
|
+
nexus_paths.nx_detector_paths.NX_TRANSFORMATIONS,
|
584
|
+
),
|
585
|
+
)
|
586
|
+
if detector_transformation_path in entry:
|
587
|
+
del entry[detector_transformation_path]
|
588
|
+
|
589
|
+
detector_transformation_path = "/".join(
|
590
|
+
(scan.entry, detector_transformation_path)
|
591
|
+
)
|
592
|
+
else:
|
593
|
+
_logger.debug(
|
594
|
+
"Old version of NXtomo found. No information about transformation will be saved"
|
595
|
+
)
|
596
|
+
detector_transformation_path = None
|
597
|
+
|
598
|
+
if detector_transformation_path is not None:
|
599
|
+
dicttonx(
|
600
|
+
nx_dict,
|
601
|
+
h5file=scan.master_file,
|
602
|
+
h5path=detector_transformation_path,
|
603
|
+
update_mode="replace",
|
604
|
+
mode="a",
|
589
605
|
)
|
590
606
|
|
591
|
-
dicttonx(
|
592
|
-
nx_dict,
|
593
|
-
h5file=scan.master_file,
|
594
|
-
h5path=detector_transformation_path,
|
595
|
-
update_mode="replace",
|
596
|
-
mode="a",
|
597
|
-
)
|
598
|
-
|
599
607
|
# clear caches to make sure all modifications will be considered
|
600
608
|
scan.clear_caches()
|
601
609
|
scan.clear_frames_caches()
|
@@ -1,4 +1,5 @@
|
|
1
1
|
import os
|
2
|
+
import h5py
|
2
3
|
|
3
4
|
import numpy
|
4
5
|
import pytest
|
@@ -252,7 +253,7 @@ def test_nx_editor_lock(
|
|
252
253
|
# 3.0 save the nxtomo
|
253
254
|
widget.overwriteNXtomo()
|
254
255
|
|
255
|
-
# 4.0 check save went
|
256
|
+
# 4.0 check save went well
|
256
257
|
overwrite_nx_tomo = NXtomo().load(
|
257
258
|
file_path=file_path,
|
258
259
|
data_path=entry,
|
@@ -305,3 +306,59 @@ def test_nx_editor_lock(
|
|
305
306
|
"instrument.detector.x_flipped": (False, False),
|
306
307
|
"instrument.detector.y_flipped": (True, False),
|
307
308
|
}
|
309
|
+
|
310
|
+
|
311
|
+
def test_nxtomo_editor_with_missing_paths(
|
312
|
+
tmp_path,
|
313
|
+
qtapp, # noqa F811
|
314
|
+
):
|
315
|
+
"""
|
316
|
+
test widget behavior in the case some nxtomo path don't exist
|
317
|
+
"""
|
318
|
+
|
319
|
+
# create nx tomo with raw data
|
320
|
+
nx_tomo = NXtomo()
|
321
|
+
nx_tomo.instrument.detector.image_key_control = [ImageKey.PROJECTION.value] * 12
|
322
|
+
nx_tomo.instrument.detector.data = numpy.empty(shape=(12, 10, 10))
|
323
|
+
nx_tomo.sample.rotation_angle = numpy.linspace(0, 20, num=12)
|
324
|
+
|
325
|
+
file_path = os.path.join(tmp_path, "nxtomo.nx")
|
326
|
+
entry = "entry0000"
|
327
|
+
nx_tomo.save(
|
328
|
+
file_path=file_path,
|
329
|
+
data_path=entry,
|
330
|
+
)
|
331
|
+
# delete some path that can be missing in some case
|
332
|
+
with h5py.File(file_path, mode="a") as h5f:
|
333
|
+
assert "entry0000" in h5f
|
334
|
+
assert "entry0000/beam" not in h5f
|
335
|
+
assert "entry0000/instrument/beam" not in h5f
|
336
|
+
assert "entry0000/instrument/detector/distance" not in h5f
|
337
|
+
assert "entry0000/instrument/detector/x_pixel_size" not in h5f
|
338
|
+
assert "entry0000/instrument/detector/y_pixel_size" not in h5f
|
339
|
+
assert "entry0000/instrument/detector/transformations" not in h5f
|
340
|
+
|
341
|
+
scan = NXtomoScan(file_path, entry)
|
342
|
+
|
343
|
+
# create the widget and do the edition
|
344
|
+
widget = NXtomoEditor()
|
345
|
+
|
346
|
+
widget.setScan(scan=scan)
|
347
|
+
|
348
|
+
widget._distanceMetricEntry.setValue(0.05)
|
349
|
+
widget._energyEntry.setValue(50)
|
350
|
+
widget._xPixelSizeMetricEntry.setValue(0.02)
|
351
|
+
widget._yPixelSizeMetricEntry.setValue(0.03)
|
352
|
+
|
353
|
+
# overwrite the NXtomo
|
354
|
+
widget.overwriteNXtomo()
|
355
|
+
|
356
|
+
# check save went well
|
357
|
+
overwrite_nx_tomo = NXtomo().load(
|
358
|
+
file_path=file_path,
|
359
|
+
data_path=entry,
|
360
|
+
)
|
361
|
+
assert overwrite_nx_tomo.instrument.detector.x_pixel_size.value == 0.02
|
362
|
+
assert overwrite_nx_tomo.instrument.detector.y_pixel_size.value == 0.03
|
363
|
+
assert overwrite_nx_tomo.energy.value == 50
|
364
|
+
assert overwrite_nx_tomo.instrument.detector.distance.value == 0.05
|
@@ -31,6 +31,7 @@ __license__ = "MIT"
|
|
31
31
|
__date__ = "14/10/2019"
|
32
32
|
|
33
33
|
|
34
|
+
import numpy
|
34
35
|
import logging
|
35
36
|
from typing import Optional
|
36
37
|
|
@@ -272,6 +273,7 @@ class _AxisWidget(qt.QMainWindow):
|
|
272
273
|
self._axis_params.relative_cor_value,
|
273
274
|
self._axis_params.absolute_cor_value,
|
274
275
|
)
|
276
|
+
self._controlWidget._positionInfo.setAxis(self._axis_params)
|
275
277
|
|
276
278
|
# connect signal / slots
|
277
279
|
self._controlWidget.sigComputationRequest.connect(self.sigComputationRequested)
|
@@ -663,7 +665,12 @@ class _PositionInfoWidget(qt.QWidget):
|
|
663
665
|
if self._relativePositionQLE.text().startswith((".", "?")):
|
664
666
|
return
|
665
667
|
else:
|
666
|
-
|
668
|
+
value = float(self._relativePositionQLE.text())
|
669
|
+
# make sure we only emit the signal if the value changed (and when the Qline has been edited).
|
670
|
+
if self._axis is not None and not numpy.isclose(
|
671
|
+
value, self._axis.relative_cor_value, atol=1e-3
|
672
|
+
):
|
673
|
+
self.sigRelativeValueSet.emit(value)
|
667
674
|
|
668
675
|
def _userUpdatedAbsolutePosition(self, *args, **kwargs):
|
669
676
|
palette = self.palette()
|
@@ -675,24 +682,18 @@ class _PositionInfoWidget(qt.QWidget):
|
|
675
682
|
if self._absolutePositionQLE.text().startswith((".", "?")):
|
676
683
|
return
|
677
684
|
else:
|
678
|
-
|
685
|
+
value = float(self._absolutePositionQLE.text())
|
686
|
+
# make sure we only emit the signal if the value changed (and when the Qline has been edited).
|
687
|
+
if self._axis is not None and not numpy.isclose(
|
688
|
+
value, self._axis.absolute_cor_value, atol=1e-3
|
689
|
+
):
|
690
|
+
self.sigAbsolueValueSet.emit(value)
|
679
691
|
|
680
692
|
def setAxis(self, axis):
|
681
693
|
assert isinstance(axis, QAxisRP)
|
682
694
|
if axis == self._axis:
|
683
695
|
return
|
684
|
-
if self._axis is not None:
|
685
|
-
self._axis.sigChanged.disconnect(self._updatePosition)
|
686
696
|
self._axis = axis
|
687
|
-
self._axis.sigChanged.connect(self._updatePosition)
|
688
|
-
self._updatePosition()
|
689
|
-
|
690
|
-
def _updatePosition(self):
|
691
|
-
if self._axis:
|
692
|
-
self.setPosition(
|
693
|
-
relative_cor=self._axis.relative_cor_value,
|
694
|
-
abs_cor=self._axis.absolute_cor_value,
|
695
|
-
)
|
696
697
|
|
697
698
|
def getPosition(self):
|
698
699
|
return float(self._relativePositionQLE.text())
|
@@ -54,6 +54,7 @@ class DarkRefAndCopyWidget(DarkRefWidget):
|
|
54
54
|
"""Signal emitted when the mode auto change"""
|
55
55
|
sigCopyActivationChanged = qt.Signal()
|
56
56
|
"""Signal emitted when the copy is activated or deactivated"""
|
57
|
+
sigClearCache = qt.Signal()
|
57
58
|
|
58
59
|
def __init__(self, save_dir: str, parent=None, reconsparams=None, process_id=None):
|
59
60
|
DarkRefWidget.__init__(
|
@@ -79,6 +80,7 @@ class DarkRefAndCopyWidget(DarkRefWidget):
|
|
79
80
|
self._refCopyWidget.sigCopyActivationChanged.connect(
|
80
81
|
self._triggerCopyActivation
|
81
82
|
)
|
83
|
+
self._refCopyWidget.sigClearCache.connect(self.sigClearCache)
|
82
84
|
|
83
85
|
def setRefSetBy(self, scan_id: str):
|
84
86
|
self._refCopyWidget._statusBar.showMessage(f"ref set from {scan_id}")
|
@@ -155,6 +157,8 @@ class RefCopyWidget(qt.QGroupBox):
|
|
155
157
|
"""Signal emitted when the mode auto change"""
|
156
158
|
sigCopyActivationChanged = qt.Signal()
|
157
159
|
"""Signal emitted when the copy is activated or deactivated"""
|
160
|
+
sigClearCache = qt.Signal()
|
161
|
+
"""Signal when the cache needs to be cleared"""
|
158
162
|
|
159
163
|
_DEFAULT_DIRECTORY = "/lbsram/data/visitor"
|
160
164
|
"""Default directory used when the user need to set path to references"""
|
@@ -190,6 +194,12 @@ class RefCopyWidget(qt.QGroupBox):
|
|
190
194
|
spacer = qt.QWidget(self)
|
191
195
|
spacer.setSizePolicy(qt.QSizePolicy.Minimum, qt.QSizePolicy.Expanding)
|
192
196
|
self.layout().addWidget(spacer)
|
197
|
+
self._removeCacheFile = qt.QPushButton("clear cache")
|
198
|
+
self._removeCacheFile.setToolTip(
|
199
|
+
"Remove the file used for cacheing reduce dark / flat."
|
200
|
+
)
|
201
|
+
self.layout().addWidget(self._removeCacheFile)
|
202
|
+
|
193
203
|
self.layout().addWidget(self.__createStatusBarGUI())
|
194
204
|
|
195
205
|
self.setModeAuto(True)
|
@@ -201,6 +211,7 @@ class RefCopyWidget(qt.QGroupBox):
|
|
201
211
|
# connect signal / slot
|
202
212
|
self.toggled.connect(self._triggerCopyActivated)
|
203
213
|
self._qcbAutoMode.toggled.connect(self._triggerModeAutoChanged)
|
214
|
+
self._removeCacheFile.released.connect(self.sigClearCache)
|
204
215
|
|
205
216
|
def _triggerCopyActivated(self, *args, **kwargs):
|
206
217
|
self.sigCopyActivationChanged.emit()
|
@@ -30,6 +30,7 @@ import functools
|
|
30
30
|
import logging
|
31
31
|
import shutil
|
32
32
|
import tempfile
|
33
|
+
import os
|
33
34
|
|
34
35
|
from processview.core.manager import DatasetState, ProcessManager
|
35
36
|
from processview.core.superviseprocess import SuperviseProcess
|
@@ -132,6 +133,15 @@ class DarkRefCopyProcessStack(FIFO, qt.QObject):
|
|
132
133
|
def _create_processing_thread(self, process_id=None) -> qt.QThread:
|
133
134
|
return _ProcessingThread(process_id=process_id, save_dir=self._save_dir)
|
134
135
|
|
136
|
+
def clear_cache(self):
|
137
|
+
"""
|
138
|
+
remove the file used to cache the reduced darks / flats.
|
139
|
+
This can be used in the case it contain unrelevant data. Like frame with another shape...
|
140
|
+
"""
|
141
|
+
cache_file = DarkRefsCopy.get_save_file(self._save_dir)
|
142
|
+
if os.path.exists(cache_file):
|
143
|
+
os.remove(cache_file)
|
144
|
+
|
135
145
|
|
136
146
|
class _ProcessingThread(ProcessingThread, SuperviseProcess):
|
137
147
|
"""
|
tomwer/version.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: tomwer
|
3
|
-
Version: 1.3.
|
3
|
+
Version: 1.3.14
|
4
4
|
Summary: "tomography workflow tools"
|
5
5
|
Home-page: https://gitlab.esrf.fr/tomotools/tomwer
|
6
6
|
Author: data analysis unit
|
@@ -18,7 +18,7 @@ Classifier: Operating System :: POSIX
|
|
18
18
|
Classifier: Natural Language :: English
|
19
19
|
Classifier: Topic :: Scientific/Engineering :: Physics
|
20
20
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
21
|
-
Requires-Python: >=3.
|
21
|
+
Requires-Python: >=3.8
|
22
22
|
Description-Content-Type: text/markdown
|
23
23
|
License-File: LICENSE
|
24
24
|
Requires-Dist: numpy
|
@@ -1,4 +1,4 @@
|
|
1
|
-
tomwer-1.3.
|
1
|
+
tomwer-1.3.14-py3.11-nspkg.pth,sha256=UYCZtLWueceGiAlmXKRJUZ0TWQEubpPoQ1pVnAAsME0,502
|
2
2
|
orangecontrib/tomwer/__init__.py,sha256=B4DXy1gY_wXmNYa2aOfapmJb2mEuCAjoaNEGnpBs70g,148
|
3
3
|
orangecontrib/tomwer/state_summary.py,sha256=5_dPzweL3r0ye4ZfJo6IV2ThJI8fQhWoO2ySdJJajj8,1711
|
4
4
|
orangecontrib/tomwer/orange/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -151,7 +151,7 @@ orangecontrib/tomwer/widgets/other/icons/hub.png,sha256=wnKSaxw2WnBkSQjI86aLZfdm
|
|
151
151
|
orangecontrib/tomwer/widgets/other/icons/hub.svg,sha256=9EYoBKY-P-cO17nM48OPA9VDZSCbyGtrMRc80BGHflk,3735
|
152
152
|
orangecontrib/tomwer/widgets/reconstruction/AxisOW.py,sha256=ffbMYzHWALir19bZhpXjYIgMfJjyyaeov9Uxp5tNyGs,22342
|
153
153
|
orangecontrib/tomwer/widgets/reconstruction/CastNabuVolumeOW.py,sha256=Ev-TrwZ-HxmdMfZMsz512vhCOgXpGImVsdNdlPSnQIM,9604
|
154
|
-
orangecontrib/tomwer/widgets/reconstruction/DarkRefAndCopyOW.py,sha256=
|
154
|
+
orangecontrib/tomwer/widgets/reconstruction/DarkRefAndCopyOW.py,sha256=nToQw3tj9Wm8s3wPsVBeMYh_F6FBtCsAKLsc2Dic4kk,11066
|
155
155
|
orangecontrib/tomwer/widgets/reconstruction/NabuHelicalPrepareWeightsDoubleOW.py,sha256=aI8VcCK7m518xjjjvE8l3kpTQFEwjWF-hCKua4bBkJM,5967
|
156
156
|
orangecontrib/tomwer/widgets/reconstruction/NabuOW.py,sha256=LzHxCuLrEQIVeGaYmcEO7rwxaT98mbXPdpMc6dCaAHE,12673
|
157
157
|
orangecontrib/tomwer/widgets/reconstruction/NabuVolumeOW.py,sha256=B4iZdYHmbsim4qQD5UaMCg2lcJa3ZAim3_AZQC7bYIk,19195
|
@@ -220,7 +220,7 @@ orangecontrib/tomwer/widgets/visualization/icons/volumeviewer.svg,sha256=2uT9_px
|
|
220
220
|
tomwer/__init__.py,sha256=82Jp1abyG4UWdGuT4nNU7LxaUV6xxkOte5pIz3w69Do,1745
|
221
221
|
tomwer/__main__.py,sha256=jsDfWA2yl5am0dHQVkYwlKLxxqKNont6VDF-LusuawE,8575
|
222
222
|
tomwer/utils.py,sha256=EgVwJ5CQVjoBvcKNwyVoXv_P4ciI11oxb8fNyy82Lck,8465
|
223
|
-
tomwer/version.py,sha256=
|
223
|
+
tomwer/version.py,sha256=x8jsewPb2ljshg5rFK4miHGjNsGSt3FPoRBsXH_cfI4,4387
|
224
224
|
tomwer/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
225
225
|
tomwer/app/axis.py,sha256=Ax0wlTp9u0Ll_3ax23QP5Ck16_M9Kop7wx0hAbXrXyM,6004
|
226
226
|
tomwer/app/canvas.py,sha256=RbQqgE7DuNjv4nGG6BNfnSevQO5_lCl7N71hGcLoxwE,1561
|
@@ -318,7 +318,7 @@ tomwer/core/process/reconstruction/axis/params.py,sha256=y1RgFAk1wiJMeueSNJH5enU
|
|
318
318
|
tomwer/core/process/reconstruction/axis/projectiontype.py,sha256=0w_NZ0N95iInHuEQCIxJIxt7K-YpCUo2fZ-_vhZ6D7Q,1543
|
319
319
|
tomwer/core/process/reconstruction/darkref/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
320
320
|
tomwer/core/process/reconstruction/darkref/darkrefs.py,sha256=gbRq1IJ-9fxD71684wajQj3D_M9G6chm7ahZsjxTmpM,20862
|
321
|
-
tomwer/core/process/reconstruction/darkref/darkrefscopy.py,sha256=
|
321
|
+
tomwer/core/process/reconstruction/darkref/darkrefscopy.py,sha256=Oe65TZUS0XZ-5IuuuFMFGuu4aGxKChREPvVa_Ti85EU,14451
|
322
322
|
tomwer/core/process/reconstruction/darkref/params.py,sha256=Pnl8XJ4et-u169wzUdhB8_woBEXPXtrGPLZEbXSwZDQ,10080
|
323
323
|
tomwer/core/process/reconstruction/darkref/settings.py,sha256=35jliuOIjMKTOJjgn4uiotcDEr6RskpLHfRWWLm76dc,188
|
324
324
|
tomwer/core/process/reconstruction/nabu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -461,7 +461,7 @@ tomwer/gui/control/nxtomomill.py,sha256=DI7DsO98O8h9mFcJ_1y1Kb8nD6w09at8YvJZNHR_
|
|
461
461
|
tomwer/gui/control/observations.py,sha256=oj2OqWYwiewgsZ5vNjzrMjB-YPopYyJmaBE5df09L7c,7735
|
462
462
|
tomwer/gui/control/reducedarkflatselector.py,sha256=hW2D69B2THZn8lIOaUQJHJ6aGIn-tHjcynEfIn4DftA,20536
|
463
463
|
tomwer/gui/control/scanselectorwidget.py,sha256=m3uxkoG4aNPPwamiI14l82PNS8tvIiOXmKhBJiwHgjU,2356
|
464
|
-
tomwer/gui/control/selectorwidgetbase.py,sha256=
|
464
|
+
tomwer/gui/control/selectorwidgetbase.py,sha256=faMzMHM4KDZ9L8irDnwSdGhwg2EjErbLPfXSNUqU9ko,5607
|
465
465
|
tomwer/gui/control/singletomoobj.py,sha256=5R_Uwgp5wdDQudxG2vyyq4Nj1GjhqH0HCeo_cFS7WuI,6777
|
466
466
|
tomwer/gui/control/tomoobjdisplaymode.py,sha256=u7JPqTD_stisI3ouckVr60yEqZuYWkpF_FI9rKhxPzo,159
|
467
467
|
tomwer/gui/control/volumeselectorwidget.py,sha256=mpbofAawBpzdc46IEkucTuiFJRDP18gWGdZjf5wUaTg,2082
|
@@ -494,12 +494,12 @@ tomwer/gui/debugtools/objectinspector.py,sha256=Mva9iK4bIxHvs3CcuHboWa4kiUEMoBeu
|
|
494
494
|
tomwer/gui/edit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
495
495
|
tomwer/gui/edit/dkrfpatch.py,sha256=UCXfEq3wV1x3OzEdzIzi6YxRN6SaEIZb-Yudt2YwnUs,17533
|
496
496
|
tomwer/gui/edit/imagekeyeditor.py,sha256=NjnPdKJif9bhfPXejJuRrj2TqTTMlOxlk4mb6mSBoHw,29728
|
497
|
-
tomwer/gui/edit/nxtomoeditor.py,sha256=
|
497
|
+
tomwer/gui/edit/nxtomoeditor.py,sha256=Bf2dVU73pV8oJXdS9Zms-L2e7KJTzfLdlwZeeKerPTk,28586
|
498
498
|
tomwer/gui/edit/nxtomowarmer.py,sha256=Vmsg8oUSzHpIvJVqF6xZd0aYKzPi_DDoNrGOIQbqBwU,2349
|
499
499
|
tomwer/gui/edit/test/__init__.py,sha256=OLK9ip_LryBfM_L40MReqjvJS3wdbWP_CpnBeD1NQTA,1368
|
500
500
|
tomwer/gui/edit/test/test_dkrf_patch.py,sha256=578ZPdVGOHls236XQqId7QqRrpdN5h3Hh8BePTlV03g,8001
|
501
501
|
tomwer/gui/edit/test/test_image_key_editor.py,sha256=hkeiB5plRR17YD499j6_yQatuIgKLa4F4NfjWVMzhY4,5965
|
502
|
-
tomwer/gui/edit/test/test_nx_editor.py,sha256=
|
502
|
+
tomwer/gui/edit/test/test_nx_editor.py,sha256=KMpptfEURWAKGwuPxRtrOpNYlbxSxu0Tulla2uLXVmw,13201
|
503
503
|
tomwer/gui/icat/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
504
504
|
tomwer/gui/icat/createscreenshots.py,sha256=IeKBF-urVsEsjDH2gXpt3oG5Sx_OstC1mNJB7zFeWkk,3123
|
505
505
|
tomwer/gui/icat/gallery.py,sha256=puBAkqlwgV1Orki_g2IVXjssCn_PCPjNGJtC0RIPpxI,8700
|
@@ -507,10 +507,10 @@ tomwer/gui/icat/publish.py,sha256=E1DwyABMZeIHDcy88YFtLpg2GpvN_AFHn4aAJbcK13c,62
|
|
507
507
|
tomwer/gui/reconstruction/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
508
508
|
tomwer/gui/reconstruction/axis/CompareImages.py,sha256=mrlXPCgq71lzmA_XACqrjdzRTK1iYJQBMrJMaeKZAq8,12870
|
509
509
|
tomwer/gui/reconstruction/axis/__init__.py,sha256=fUKWiRiG2o4Y-9RN-41VZMMM8L9Srl6QCn942VL5szY,94
|
510
|
-
tomwer/gui/reconstruction/axis/axis.py,sha256=
|
510
|
+
tomwer/gui/reconstruction/axis/axis.py,sha256=AasGGK9wjnn9l6ryo9biptcDKxRTQG7KFHIHnMZd70o,27489
|
511
511
|
tomwer/gui/reconstruction/axis/radioaxis.py,sha256=hTweuwS-X32ZlpkHvP5X910zJ8p4fiJMsn_oUVtfvXM,92755
|
512
512
|
tomwer/gui/reconstruction/darkref/__init__.py,sha256=g9LASP8OJjxCPEHXO14hN0OLjLkeUve6etaPm1LIz4c,1373
|
513
|
-
tomwer/gui/reconstruction/darkref/darkrefcopywidget.py,sha256=
|
513
|
+
tomwer/gui/reconstruction/darkref/darkrefcopywidget.py,sha256=cfU2EJv_9LfCrKTHwnYwt2Kj4G6lMPbw0lbD-yjyT-Y,12053
|
514
514
|
tomwer/gui/reconstruction/darkref/darkrefwidget.py,sha256=O33udHaezaanZD9L5D525KrB4FD77g_Spr7gAUxGEag,16468
|
515
515
|
tomwer/gui/reconstruction/nabu/__init__.py,sha256=v2WxaBpu2zpGu7DEV96zaKAtHgRlcpORuAG2S0iF9O0,44
|
516
516
|
tomwer/gui/reconstruction/nabu/castvolume.py,sha256=4lrfdBt_24p9_kb9qmytEtIfzPXFPzYVdV57wgMLVWQ,15003
|
@@ -758,7 +758,7 @@ tomwer/synctools/stacks/edit/imagekeyeditor.py,sha256=NNDQWMJEuE50zBk_2zJAWbf6hC
|
|
758
758
|
tomwer/synctools/stacks/reconstruction/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
759
759
|
tomwer/synctools/stacks/reconstruction/axis.py,sha256=9Gqh0isvLYupypOq3P7XM_lU4Hcni4l3V2aUZsAVLrc,8876
|
760
760
|
tomwer/synctools/stacks/reconstruction/castvolume.py,sha256=PaoMuTxcj4Ms6N2MFnrCzmaCCC3wEZItYAwQ8NApe_o,8282
|
761
|
-
tomwer/synctools/stacks/reconstruction/dkrefcopy.py,sha256=
|
761
|
+
tomwer/synctools/stacks/reconstruction/dkrefcopy.py,sha256=cHkvyOtbaqtaftnCyIhDF3oXRM-lXMWqBf-CVTqF198,7402
|
762
762
|
tomwer/synctools/stacks/reconstruction/nabu.py,sha256=dDqw74kobhkawquJIwLDQH--PN6LbbthlqZ9MQUBJi4,7816
|
763
763
|
tomwer/synctools/stacks/reconstruction/normalization.py,sha256=wcw-tHjKUQMcija0bCExDl0InYsKHZNTeTk4w_hnaDI,5362
|
764
764
|
tomwer/synctools/stacks/reconstruction/saaxis.py,sha256=N5LM4QPE1H06WXjEH-PGIMfWgCHkwR02QR3PENZ_JzE,7126
|
@@ -776,10 +776,10 @@ tomwer/tests/test_utils.py,sha256=D0rNDSK6csEOYBY_7gD-4A3jp8rYAm8L1_Xg34A9I2s,30
|
|
776
776
|
tomwer/tests/utils.py,sha256=RAXx5A99WD4Vyuv_wjHBdr-Xu7UiThHRKw2eiB5GX10,107
|
777
777
|
tomwer/third_part/WaitingOverlay.py,sha256=GnqiytcJDp_24Cmz_2nZAP5HfpL3Yh7AzR2ATIusGsg,3906
|
778
778
|
tomwer/third_part/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
779
|
-
tomwer-1.3.
|
780
|
-
tomwer-1.3.
|
781
|
-
tomwer-1.3.
|
782
|
-
tomwer-1.3.
|
783
|
-
tomwer-1.3.
|
784
|
-
tomwer-1.3.
|
785
|
-
tomwer-1.3.
|
779
|
+
tomwer-1.3.14.dist-info/LICENSE,sha256=yR_hIZ1MfDh9x2_s23uFqBH7m5DgrBl9nJKkE37YChM,1877
|
780
|
+
tomwer-1.3.14.dist-info/METADATA,sha256=yc29gleRofOwWWwjUVeO8n0RbmTjEblhC5rSondwT2o,11460
|
781
|
+
tomwer-1.3.14.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
782
|
+
tomwer-1.3.14.dist-info/entry_points.txt,sha256=fIcDnCxjgwzfIylLYhUsFyiNZjZMxsfRQBxi4f-cJg8,440
|
783
|
+
tomwer-1.3.14.dist-info/namespace_packages.txt,sha256=Iut-JTfT11SZHHm77_ZeszD7pZDWXcTweCbvrJpqDyQ,14
|
784
|
+
tomwer-1.3.14.dist-info/top_level.txt,sha256=Yz5zKh0FPiImtzHYcPuztG1AO8-6KEpUWgoChGbA0Ys,21
|
785
|
+
tomwer-1.3.14.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|