tomwer 1.4.8__py3-none-any.whl → 1.4.9__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/cluster/FutureSupervisorOW.py +76 -35
- tomwer/app/canvas_launcher/utils.py +11 -2
- tomwer/core/process/control/datalistener/rpcserver.py +2 -2
- tomwer/core/process/reconstruction/nabu/castvolume.py +1 -1
- tomwer/core/scan/tests/test_process_registration.py +64 -0
- tomwer/core/settings.py +13 -15
- tomwer/tasks/reconstruction/cleardarkflat.py +42 -0
- tomwer/version.py +1 -1
- {tomwer-1.4.8.dist-info → tomwer-1.4.9.dist-info}/METADATA +1 -1
- {tomwer-1.4.8.dist-info → tomwer-1.4.9.dist-info}/RECORD +14 -12
- {tomwer-1.4.8.dist-info → tomwer-1.4.9.dist-info}/LICENSE +0 -0
- {tomwer-1.4.8.dist-info → tomwer-1.4.9.dist-info}/WHEEL +0 -0
- {tomwer-1.4.8.dist-info → tomwer-1.4.9.dist-info}/entry_points.txt +0 -0
- {tomwer-1.4.8.dist-info → tomwer-1.4.9.dist-info}/top_level.txt +0 -0
@@ -1,30 +1,54 @@
|
|
1
|
-
|
1
|
+
# coding: utf-8
|
2
|
+
# /*##########################################################################
|
3
|
+
#
|
4
|
+
# Copyright (c) 2016-2017 European Synchrotron Radiation Facility
|
5
|
+
#
|
6
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
# of this software and associated documentation files (the "Software"), to deal
|
8
|
+
# in the Software without restriction, including without limitation the rights
|
9
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
# copies of the Software, and to permit persons to whom the Software is
|
11
|
+
# furnished to do so, subject to the following conditions:
|
12
|
+
#
|
13
|
+
# The above copyright notice and this permission notice shall be included in
|
14
|
+
# all copies or substantial portions of the Software.
|
15
|
+
#
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
|
+
# THE SOFTWARE.
|
23
|
+
#
|
24
|
+
# ###########################################################################*/
|
25
|
+
|
26
|
+
__authors__ = ["H. Payno"]
|
27
|
+
__license__ = "MIT"
|
28
|
+
__date__ = "14/10/2021"
|
29
|
+
|
2
30
|
|
3
31
|
import time
|
4
32
|
|
5
33
|
from orangewidget import gui
|
6
|
-
|
7
|
-
|
8
|
-
from orangecontrib.tomwer.orange.managedprocess import TomwerWithStackStack
|
9
|
-
from ewokscore.missing_data import MISSING_DATA
|
10
|
-
from ewoksorange.gui.orange_imports import Input
|
11
|
-
|
34
|
+
from orangewidget.settings import Setting
|
35
|
+
from orangewidget.widget import Input, Output, OWBaseWidget
|
12
36
|
from processview.core.manager import DatasetState, ProcessManager
|
13
37
|
from processview.core.superviseprocess import SuperviseProcess
|
14
38
|
from silx.gui import qt
|
15
39
|
from silx.gui.utils.concurrent import submitToQtMainThread
|
16
40
|
|
17
41
|
from tomwer.core.futureobject import FutureTomwerObject
|
42
|
+
from tomwer.core.scan.scanbase import TomwerScanBase
|
43
|
+
from tomwer.core.volume.volumebase import TomwerVolumeBase
|
18
44
|
from tomwer.gui.cluster.supervisor import (
|
19
45
|
FutureTomwerScanObserverWidget as _FutureTomwerScanObserverWidget,
|
20
46
|
)
|
21
|
-
from tomwer.core.process.
|
47
|
+
from tomwer.core.process.drac.processeddataset import DracReconstructedVolumeDataset
|
48
|
+
from tomwer.core.volume.volumefactory import VolumeFactory
|
22
49
|
|
23
50
|
|
24
|
-
class FutureSupervisorOW(
|
25
|
-
TomwerWithStackStack,
|
26
|
-
ewokstaskclass=FutureSupervisorTask,
|
27
|
-
):
|
51
|
+
class FutureSupervisorOW(OWBaseWidget, openclass=True):
|
28
52
|
"""
|
29
53
|
Orange widget to define a slurm cluster as input of other
|
30
54
|
widgets (based on nabu for now)
|
@@ -51,9 +75,10 @@ class FutureSupervisorOW(
|
|
51
75
|
want_control_area = False
|
52
76
|
resizing_enabled = True
|
53
77
|
|
78
|
+
_ewoks_default_inputs = Setting(dict())
|
79
|
+
|
54
80
|
class Inputs:
|
55
|
-
|
56
|
-
future_tomo_obj = Input(
|
81
|
+
future_in = Input(
|
57
82
|
name="future_tomo_obj",
|
58
83
|
type=FutureTomwerObject,
|
59
84
|
doc="data with some remote processing",
|
@@ -61,6 +86,15 @@ class FutureSupervisorOW(
|
|
61
86
|
default=True,
|
62
87
|
)
|
63
88
|
|
89
|
+
class Outputs:
|
90
|
+
data = Output(name="data", type=TomwerScanBase)
|
91
|
+
volume = Output(name="volume", type=TomwerVolumeBase)
|
92
|
+
data_portal_processed_datasets = Output(
|
93
|
+
name="data_portal_processed_datasets",
|
94
|
+
type=tuple,
|
95
|
+
doc="data portal processed data to be saved",
|
96
|
+
)
|
97
|
+
|
64
98
|
def __init__(self, parent=None):
|
65
99
|
super().__init__(parent)
|
66
100
|
# gui
|
@@ -92,29 +126,36 @@ class FutureSupervisorOW(
|
|
92
126
|
raise TypeError(
|
93
127
|
f"future_tomo_obj is expected to be an instance of {FutureTomwerObject} and not {type(future_tomo_obj)}"
|
94
128
|
)
|
95
|
-
self.
|
96
|
-
self.execute_ewoks_task()
|
97
|
-
|
98
|
-
def handleNewSignals(self) -> None:
|
99
|
-
"""Invoked by the workflow signal propagation manager after all
|
100
|
-
signals handlers have been called.
|
101
|
-
|
102
|
-
note: this widget can receive two signals: 'dataset' and 'colormap'. The 'colormap' is handled by
|
103
|
-
orange directly while the 'dataset' signal is handled by the ewoks task.
|
104
|
-
This function will be only triggered when the 'dataset' signal is send
|
105
|
-
"""
|
106
|
-
# update GUI from received future_tomo_obj
|
107
|
-
# warning: this code will work because the task has only one input.
|
108
|
-
# so we can pass it directly to the widget.
|
109
|
-
# this won't be the case the task can have several input.
|
110
|
-
future_tomo_obj = self.get_task_input_value("future_tomo_obj", MISSING_DATA)
|
111
|
-
if future_tomo_obj is not MISSING_DATA:
|
112
|
-
self._widget.addFutureTomoObj(future_tomo_obj=future_tomo_obj)
|
129
|
+
self._futureHasBeenConverted(future_tomo_obj, future_tomo_obj.tomo_obj)
|
113
130
|
|
114
|
-
@Inputs.
|
131
|
+
@Inputs.future_in
|
115
132
|
def add(self, future_tomo_obj, signal_id=None):
|
116
|
-
|
117
|
-
|
133
|
+
if future_tomo_obj is not None:
|
134
|
+
self._widget.addFutureTomoObj(future_tomo_obj=future_tomo_obj)
|
135
|
+
|
136
|
+
def _futureHasBeenConverted(self, future_tomo_obj, tomo_obj):
|
137
|
+
# clean client to free resources
|
138
|
+
self._widget.removeFutureTomoObj(future_tomo_obj=future_tomo_obj)
|
139
|
+
if tomo_obj is not None:
|
140
|
+
if isinstance(tomo_obj, TomwerScanBase):
|
141
|
+
self.Outputs.data.send(tomo_obj)
|
142
|
+
|
143
|
+
def build_drac_dataset(vol_id):
|
144
|
+
volume = VolumeFactory.create_tomo_object_from_identifier(vol_id)
|
145
|
+
return DracReconstructedVolumeDataset(
|
146
|
+
tomo_obj=volume,
|
147
|
+
source_scan=tomo_obj,
|
148
|
+
)
|
149
|
+
|
150
|
+
self.Outputs.data_portal_processed_datasets = tuple(
|
151
|
+
[
|
152
|
+
build_drac_dataset(vol_id=vol_id)
|
153
|
+
for vol_id in tomo_obj.latest_vol_reconstructions
|
154
|
+
]
|
155
|
+
)
|
156
|
+
|
157
|
+
elif isinstance(tomo_obj, TomwerVolumeBase):
|
158
|
+
self.Outputs.volume.send(tomo_obj)
|
118
159
|
|
119
160
|
|
120
161
|
class FutureTomwerObjectObserverWidget(
|
@@ -1,5 +1,6 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
|
+
from importlib.metadata import version as get_version
|
3
4
|
import tomoscan.version
|
4
5
|
|
5
6
|
import ewokscore
|
@@ -7,6 +8,7 @@ import ewoksorange
|
|
7
8
|
import tomwer.version
|
8
9
|
import sluurp
|
9
10
|
|
11
|
+
|
10
12
|
try:
|
11
13
|
import nxtomomill.version
|
12
14
|
except ImportError:
|
@@ -40,8 +42,15 @@ def get_tomotools_stack_versions() -> dict[str, str]:
|
|
40
42
|
if has_nxtomomill:
|
41
43
|
stack["nxtomomill"] = nxtomomill.version.version
|
42
44
|
stack["tomoscan"] = tomoscan.version.version
|
43
|
-
|
44
|
-
|
45
|
+
try:
|
46
|
+
stack["ewokscore"] = ewokscore.__version__
|
47
|
+
except AttributeError:
|
48
|
+
stack["ewokscore"] = get_version("ewokscore")
|
49
|
+
|
50
|
+
try:
|
51
|
+
stack["ewoksorange"] = ewoksorange.__version__
|
52
|
+
except AttributeError:
|
53
|
+
stack["ewoksorange"] = get_version("ewoksorange")
|
45
54
|
stack["sluurp"] = sluurp.__version__
|
46
55
|
|
47
56
|
return stack
|
@@ -257,7 +257,7 @@ def send_signal_to_local_rpc_servers(signal, port: int, extended_find: bool = Tr
|
|
257
257
|
proc.send_signal(signal)
|
258
258
|
found = True
|
259
259
|
return
|
260
|
-
except (
|
260
|
+
except (PermissionError, psutil.AccessDenied):
|
261
261
|
pass
|
262
262
|
if not extended_find:
|
263
263
|
return
|
@@ -272,5 +272,5 @@ def send_signal_to_local_rpc_servers(signal, port: int, extended_find: bool = Tr
|
|
272
272
|
f"process pid: {proc.pid} - {proc.name()} seems to be one occupying port {port}"
|
273
273
|
)
|
274
274
|
return
|
275
|
-
except (
|
275
|
+
except (PermissionError, psutil.AccessDenied):
|
276
276
|
pass
|
@@ -194,7 +194,7 @@ class CastVolumeTask(
|
|
194
194
|
)
|
195
195
|
if overwrite:
|
196
196
|
command += " --overwrite"
|
197
|
-
command += f" --
|
197
|
+
command += f" --output-data-type={str(output_data_type)}"
|
198
198
|
if data_min is not None:
|
199
199
|
command += f" --data_min={data_min}"
|
200
200
|
if data_max is not None:
|
@@ -0,0 +1,64 @@
|
|
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)
|
tomwer/core/settings.py
CHANGED
@@ -90,7 +90,7 @@ class SlurmSettingsMode(_Enum):
|
|
90
90
|
class SlurmSettings:
|
91
91
|
# Default slurm cluster configuration
|
92
92
|
|
93
|
-
N_CORES_PER_TASK =
|
93
|
+
N_CORES_PER_TASK = 16
|
94
94
|
"""Number of CPU per worker"""
|
95
95
|
|
96
96
|
N_TASKS = 1
|
@@ -130,13 +130,13 @@ class DefaultSlurmSettingsCastVolume(SlurmSettings):
|
|
130
130
|
default proposed configuration for casting a volume remotely
|
131
131
|
"""
|
132
132
|
|
133
|
-
|
133
|
+
N_JOBS = 1
|
134
134
|
|
135
|
-
|
135
|
+
N_GPUS_PER_WORKER = 0
|
136
136
|
|
137
137
|
MEMORY_PER_WORKER = 128 # memory in GB
|
138
138
|
|
139
|
-
PARTITION = "nice
|
139
|
+
PARTITION = "nice"
|
140
140
|
|
141
141
|
|
142
142
|
class DefaultSlurmSettingsSliceReconstruction(SlurmSettings):
|
@@ -144,19 +144,15 @@ class DefaultSlurmSettingsSliceReconstruction(SlurmSettings):
|
|
144
144
|
default proposed configuration for reconstructing a single slice remotely
|
145
145
|
"""
|
146
146
|
|
147
|
-
|
148
|
-
|
149
|
-
PARTITION = None
|
147
|
+
N_JOBS = 1
|
150
148
|
|
149
|
+
N_GPUS_PER_WORKER = 1
|
151
150
|
|
152
|
-
|
153
|
-
"""
|
154
|
-
default proposed configuration for reconstructing a full volume remotely
|
155
|
-
"""
|
151
|
+
MEMORY_PER_WORKER = 220 # memory in GB
|
156
152
|
|
157
|
-
MEMORY_PER_WORKER = 256 # memory in GB
|
158
153
|
|
159
|
-
|
154
|
+
class DefaultSlurmSettingsVolumeReconstruction(DefaultSlurmSettingsSliceReconstruction):
|
155
|
+
pass
|
160
156
|
|
161
157
|
|
162
158
|
class DefaultSlurmSettingsStitching(SlurmSettings):
|
@@ -164,8 +160,10 @@ class DefaultSlurmSettingsStitching(SlurmSettings):
|
|
164
160
|
default proposed configuration for stitching
|
165
161
|
"""
|
166
162
|
|
167
|
-
|
163
|
+
N_CORES_PER_TASK = 8
|
168
164
|
|
169
|
-
|
165
|
+
N_JOBS = 16
|
170
166
|
|
171
167
|
N_GPUS_PER_WORKER = 0
|
168
|
+
|
169
|
+
PARTITION = "nice"
|
@@ -0,0 +1,42 @@
|
|
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
|
tomwer/version.py
CHANGED
@@ -26,7 +26,7 @@ orangecontrib/tomwer/tutorials/id16b/ID16b_normalization.ows,sha256=kFGXGxc3eW7i
|
|
26
26
|
orangecontrib/tomwer/tutorials/id16b/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
27
27
|
orangecontrib/tomwer/widgets/__init__.py,sha256=dX_TpkBh3mVsrj3EeGglEESsnZAEVq7V0Nb9bnBrb-8,1214
|
28
28
|
orangecontrib/tomwer/widgets/utils.py,sha256=yq1wZfpfY3iVAhwMRBls57q02lhljO89WRKN7MxMMNg,983
|
29
|
-
orangecontrib/tomwer/widgets/cluster/FutureSupervisorOW.py,sha256=
|
29
|
+
orangecontrib/tomwer/widgets/cluster/FutureSupervisorOW.py,sha256=iFbgx5SeztXfxomL488rnR2MQJIS1OGSOTmsEKuEMa4,9865
|
30
30
|
orangecontrib/tomwer/widgets/cluster/SlurmClusterOW.py,sha256=L_fX3EFyyx71Fg-FI8ab34ZPSUzrwKGJLcS2FnYCY_c,2565
|
31
31
|
orangecontrib/tomwer/widgets/cluster/__init__.py,sha256=vOOJnIIaLWAj8tnxD9MRzWDyYgk-cyuBsN7QQ5FrIoQ,385
|
32
32
|
orangecontrib/tomwer/widgets/cluster/icons/slurm.png,sha256=C-YBLwXCnh0oo4nvEt80WxX_jKYGUAFpWMUSlzt6ke0,1995
|
@@ -219,7 +219,7 @@ orangecontrib/tomwer/widgets/visualization/tests/__init__.py,sha256=47DEQpj8HBSa
|
|
219
219
|
tomwer/__init__.py,sha256=cMIyH-uRxpa9WVnAuWjiBD7k9TK57WO21RzP_S-Mb8I,460
|
220
220
|
tomwer/__main__.py,sha256=7tCADiS4u7k1PCxFhlRAcYSIOpxQTGUTx8sCEQ-hi1E,8707
|
221
221
|
tomwer/utils.py,sha256=7h7dEgKAEUmQ43jkULvC1B9Adl55nkCty-SEKUKCl4U,7008
|
222
|
-
tomwer/version.py,sha256=
|
222
|
+
tomwer/version.py,sha256=2tlKJNuy_7mdqerRMwrXUS210Pm2p0BxM-HwT3_tfsU,4386
|
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
|
@@ -249,14 +249,14 @@ tomwer/app/canvas_launcher/config.py,sha256=sLlsp7iy1s2IyxqvSohGbaOpPUP6syuj5P-8
|
|
249
249
|
tomwer/app/canvas_launcher/environ.py,sha256=ljQyPL_u9ai1CWmmq8uGHbn437CZWyX4uJtrDIyabGk,2453
|
250
250
|
tomwer/app/canvas_launcher/mainwindow.py,sha256=KZzbY3AuHITdaS8K4jG2QomD5DEgQqHRYcIe9hymC9g,22283
|
251
251
|
tomwer/app/canvas_launcher/splash.py,sha256=cpUuZVKwlQbeAWfAqjpjP4q1v1MmkfxU6WWllLSVZo8,508
|
252
|
-
tomwer/app/canvas_launcher/utils.py,sha256=
|
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
255
|
tomwer/app/stitching/common.py,sha256=TCXNnAz2MSJrrogB5iWptktxq-g5ED2FUt_jMnDXpnQ,14723
|
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
|
259
|
-
tomwer/core/settings.py,sha256=
|
259
|
+
tomwer/core/settings.py,sha256=xMlOdWeNJxNsi0_qfMXZI8lrzjeRRDftGtT3lFpjFL8,3992
|
260
260
|
tomwer/core/signal.py,sha256=I5TUcyeBZzrEh1SFGs-ylJSL1aBs41ZFb3IJo3O_55c,6115
|
261
261
|
tomwer/core/tomwer_object.py,sha256=rIaD1QlN3Q0cR5h9Sap1Whn4lawu5z9zZ1KspdhYbg0,2023
|
262
262
|
tomwer/core/cluster/__init__.py,sha256=w58VJZaGwC-8hwHLADeJrW9-rs-PrVz6few3AqpScqQ,116
|
@@ -286,7 +286,7 @@ tomwer/core/process/control/tomoobjseries.py,sha256=_fiVup4ugH5BAC6HwkIziA0QweEu
|
|
286
286
|
tomwer/core/process/control/volumeselector.py,sha256=0uv1Q8k5Ms1h_iU-ldhb-Y35xsy1kHwQrbUQguV5M_A,370
|
287
287
|
tomwer/core/process/control/datalistener/__init__.py,sha256=gSEeJEDX8E-8HzY7tmPc32QKfqSZHG4Ad06IxDrzOWo,52
|
288
288
|
tomwer/core/process/control/datalistener/datalistener.py,sha256=kNDTIeMhJ6n019b2XWoGoB8zDCv-zpVxE7YDzZR9KBM,9606
|
289
|
-
tomwer/core/process/control/datalistener/rpcserver.py,sha256=
|
289
|
+
tomwer/core/process/control/datalistener/rpcserver.py,sha256=JkEmWB1kRzjaXPqzEu-tWN87SlK3uuk3gN7la42wSF0,9555
|
290
290
|
tomwer/core/process/control/datawatcher/__init__.py,sha256=F9d_bGOr5iAPEfnKaf5XOEwQSR1wZp_wkzcDYNSuin4,50
|
291
291
|
tomwer/core/process/control/datawatcher/datawatcher.py,sha256=UmOEW9vA3jJ93R1QcVRisknB_S2j0Nfsc7477VjwThE,15265
|
292
292
|
tomwer/core/process/control/datawatcher/datawatcherobserver.py,sha256=q7ZB9WMWSyeEUtuU9SKuvJ80eBlFzLUC31NlLIYfWfk,24197
|
@@ -332,7 +332,7 @@ tomwer/core/process/reconstruction/darkref/darkrefscopy.py,sha256=D0i__aTsEvfJg_
|
|
332
332
|
tomwer/core/process/reconstruction/darkref/params.py,sha256=vrDN8bZu28E4zLuHJzNvIIyyZq-4yhX9k9itXYCJ2iM,8756
|
333
333
|
tomwer/core/process/reconstruction/darkref/settings.py,sha256=35jliuOIjMKTOJjgn4uiotcDEr6RskpLHfRWWLm76dc,188
|
334
334
|
tomwer/core/process/reconstruction/nabu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
335
|
-
tomwer/core/process/reconstruction/nabu/castvolume.py,sha256
|
335
|
+
tomwer/core/process/reconstruction/nabu/castvolume.py,sha256=-tz0Kmf-3oJbWxPkFEZnvXTeF7dkiQKPaZ9qgcgD7MU,9950
|
336
336
|
tomwer/core/process/reconstruction/nabu/helical.py,sha256=gauUkoPiShvnvMQrCQXv28g0yLe-GceML5kYMSXmNIg,1997
|
337
337
|
tomwer/core/process/reconstruction/nabu/nabucommon.py,sha256=6jOdKpUW5MbRkf53evu4-ZBkQaNWMfl799-f0zQ9-1Q,24554
|
338
338
|
tomwer/core/process/reconstruction/nabu/nabuscores.py,sha256=e5tRG1QtmVAdXb8KHMTMtBXA3KQXqKKcqipY2HzMURg,25275
|
@@ -416,6 +416,7 @@ 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
|
419
420
|
tomwer/core/scan/tests/test_scan.py,sha256=mHFPi2Tc7Z2_5rWvAp3YmObVSTB5yi-sTkHm1iOJlDo,12228
|
420
421
|
tomwer/core/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
421
422
|
tomwer/core/tests/test_scanutils.py,sha256=xWwd1nycVDWmFaIaL2gQ_xxrUMhVCARaNHI2SxT9NOI,844
|
@@ -847,6 +848,7 @@ tomwer/synctools/tests/test_darkRefs.py,sha256=1OgWaV-hgDmi4rkh0hxjCW_codBAnxNhp
|
|
847
848
|
tomwer/synctools/tests/test_foldertransfer.py,sha256=ZFIJWSjgYAWw3ktzamid5DJZNnMkAV6Pj72dKG69cJc,12024
|
848
849
|
tomwer/synctools/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
849
850
|
tomwer/synctools/utils/scanstages.py,sha256=vIUKVDSfM2UwPjjmZTiIN1tNg4antnGcSPv1aYapJCY,7830
|
851
|
+
tomwer/tasks/reconstruction/cleardarkflat.py,sha256=_V_x7W8vp1_AqqtQ9xk2VRgwlivn4IPTLEpWySjSZRE,1353
|
850
852
|
tomwer/tests/__init__.py,sha256=dPPaIvpzHssjwxsMzYJM_gxQ2e0cnRyQHXxi9ux6ZOY,19
|
851
853
|
tomwer/tests/conftest.py,sha256=0XlKfOrVtPg8VmyQn4BoK_mzcliFUtacDGLlZ5wD_PM,1912
|
852
854
|
tomwer/tests/datasets.py,sha256=QXQ3jSwgWzfq4CaELOSrk9kHg5GmrP7kGHsdOlNSEIE,336
|
@@ -903,9 +905,9 @@ tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_volume_viewer
|
|
903
905
|
tomwer/tests/test_ewoks/test_conversion.py,sha256=a8cEWbErXiFCAkaapi0jeEoRKYxcFQCoa-Jr_u77_OM,3656
|
904
906
|
tomwer/tests/test_ewoks/test_single_node_execution.py,sha256=YBUHfiAnkciv_kjj7biC5fOs7c7ofNImM_azGMn4LZM,2813
|
905
907
|
tomwer/tests/test_ewoks/test_workflows.py,sha256=Eq80eexf5NVL7SzvwctLOaUeuQ8V3vDiFiHgbJA4Yb8,4871
|
906
|
-
tomwer-1.4.
|
907
|
-
tomwer-1.4.
|
908
|
-
tomwer-1.4.
|
909
|
-
tomwer-1.4.
|
910
|
-
tomwer-1.4.
|
911
|
-
tomwer-1.4.
|
908
|
+
tomwer-1.4.9.dist-info/LICENSE,sha256=62p1wL0n9WMTu8x2YDv0odYgTqeSvTd9mQ0v6Mq7lzE,1876
|
909
|
+
tomwer-1.4.9.dist-info/METADATA,sha256=NPzI78ud1GOKO6eFvOqUWdAr3uUtZ7h0VdJdWAVFy3c,13415
|
910
|
+
tomwer-1.4.9.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
911
|
+
tomwer-1.4.9.dist-info/entry_points.txt,sha256=py3ZUWvGnWGc5c7Yhw_uBTm8Fmew0BDw3aQZnWMBNZI,500
|
912
|
+
tomwer-1.4.9.dist-info/top_level.txt,sha256=Yz5zKh0FPiImtzHYcPuztG1AO8-6KEpUWgoChGbA0Ys,21
|
913
|
+
tomwer-1.4.9.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|