tomwer 1.2.9__py3-none-any.whl → 1.3.0a0__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/tutorials/icat_publication.ows +58 -0
- orangecontrib/tomwer/widgets/__init__.py +1 -0
- orangecontrib/tomwer/widgets/control/DataDiscoveryOW.py +2 -2
- orangecontrib/tomwer/widgets/control/DataListOW.py +9 -7
- orangecontrib/tomwer/widgets/control/DataSelectorOW.py +21 -10
- orangecontrib/tomwer/widgets/control/EDF2NXTomomillOW.py +11 -5
- orangecontrib/tomwer/widgets/control/EmailOW.py +4 -4
- orangecontrib/tomwer/widgets/control/NXTomomillOW.py +31 -18
- orangecontrib/tomwer/widgets/control/NXtomoConcatenate.py +14 -7
- orangecontrib/tomwer/widgets/control/NotifierOW.py +1 -0
- orangecontrib/tomwer/widgets/control/VolumeSelector.py +7 -4
- orangecontrib/tomwer/widgets/control/VolumeSymLinkOW.py +182 -182
- orangecontrib/tomwer/widgets/debugtools/DatasetGeneratorOW.py +4 -4
- orangecontrib/tomwer/widgets/edit/DarkFlatPatchOW.py +4 -4
- orangecontrib/tomwer/widgets/edit/ImageKeyEditorOW.py +3 -3
- orangecontrib/tomwer/widgets/edit/ImageKeyUpgraderOW.py +2 -0
- orangecontrib/tomwer/widgets/edit/NXtomoEditorOW.py +3 -3
- orangecontrib/tomwer/widgets/edit/test/test_nxtomo_editor.py +3 -3
- orangecontrib/tomwer/widgets/icat/PublishProcessedDataOW.py +115 -0
- orangecontrib/tomwer/widgets/icat/RawDataScreenshotCreatorOW.py +98 -0
- orangecontrib/tomwer/widgets/icat/SaveToGalleryAndPublishOW.py +129 -0
- orangecontrib/tomwer/widgets/icat/__init__.py +13 -0
- orangecontrib/tomwer/widgets/icat/icons/add_gallery.png +0 -0
- orangecontrib/tomwer/widgets/icat/icons/add_gallery.svg +82 -0
- orangecontrib/tomwer/widgets/icat/icons/publish_processed_data.png +0 -0
- orangecontrib/tomwer/widgets/icat/icons/publish_processed_data.svg +95 -0
- orangecontrib/tomwer/widgets/icat/icons/raw_screenshots.png +0 -0
- orangecontrib/tomwer/widgets/icat/icons/raw_screenshots.svg +143 -0
- orangecontrib/tomwer/widgets/icons/tomwer_data_portal.png +0 -0
- orangecontrib/tomwer/widgets/icons/tomwer_data_portal.svg +76 -0
- orangecontrib/tomwer/widgets/reconstruction/AxisOW.py +9 -8
- orangecontrib/tomwer/widgets/reconstruction/CastNabuVolumeOW.py +3 -3
- orangecontrib/tomwer/widgets/reconstruction/NabuHelicalPrepareWeightsDoubleOW.py +179 -169
- orangecontrib/tomwer/widgets/reconstruction/NabuOW.py +23 -0
- orangecontrib/tomwer/widgets/reconstruction/NabuVolumeOW.py +39 -5
- orangecontrib/tomwer/widgets/reconstruction/SAAxisOW.py +7 -13
- orangecontrib/tomwer/widgets/reconstruction/SADeltaBetaOW.py +7 -17
- orangecontrib/tomwer/widgets/reconstruction/SinoNormOW.py +3 -4
- orangecontrib/tomwer/widgets/visualization/LivesliceOW.py +1 -1
- orangecontrib/tomwer/widgets/visualization/NXtomoMetadataViewerOW.py +3 -3
- orangecontrib/tomwer/widgets/visualization/VolumeViewerOW.py +3 -29
- tomwer/__main__.py +11 -58
- tomwer/app/canvas.py +8 -0
- tomwer/app/canvas_launcher/config.py +13 -11
- tomwer/app/darkref.py +1 -1
- tomwer/app/darkrefpatch.py +1 -1
- tomwer/app/imagekeyeditor.py +5 -5
- tomwer/app/imagekeyupgrader.py +5 -5
- tomwer/app/intensitynormalization.py +2 -2
- tomwer/app/radiostack.py +2 -2
- tomwer/app/zstitching.py +74 -3
- tomwer/core/cluster/cluster.py +26 -0
- tomwer/core/log/logger.py +7 -5
- tomwer/core/process/conditions/filters.py +1 -1
- tomwer/core/process/control/datalistener/datalistener.py +3 -3
- tomwer/core/process/control/nxtomoconcatenate.py +13 -13
- tomwer/core/process/control/nxtomomill.py +83 -25
- tomwer/core/process/control/scantransfer.py +11 -10
- tomwer/core/process/control/scanvalidator.py +3 -2
- tomwer/core/process/control/test/test_concatenate_nxtomos.py +9 -9
- tomwer/core/process/control/test/test_email.py +4 -4
- tomwer/core/process/control/test/test_h52nx_process.py +59 -7
- tomwer/core/process/control/test/test_volume_link.py +64 -64
- tomwer/core/process/control/timer.py +1 -1
- tomwer/core/process/control/volumesymlink.py +200 -200
- tomwer/core/process/edit/darkflatpatch.py +6 -6
- tomwer/core/process/edit/imagekeyeditor.py +17 -18
- tomwer/core/process/icat/__init__.py +0 -0
- tomwer/core/process/icat/createscreenshots.py +100 -0
- tomwer/core/process/icat/gallery.py +377 -0
- tomwer/core/process/icat/icatbase.py +36 -0
- tomwer/core/process/icat/publish.py +228 -0
- tomwer/core/process/icat/screenshots.py +26 -0
- tomwer/core/process/output.py +52 -0
- tomwer/core/process/reconstruction/axis/axis.py +17 -10
- tomwer/core/process/reconstruction/axis/mode.py +4 -0
- tomwer/core/process/reconstruction/axis/params.py +9 -4
- tomwer/core/process/reconstruction/darkref/darkrefs.py +8 -6
- tomwer/core/process/reconstruction/darkref/darkrefscopy.py +1 -1
- tomwer/core/process/reconstruction/darkref/params.py +1 -1
- tomwer/core/process/reconstruction/lamino/tofu.py +4 -4
- tomwer/core/process/reconstruction/nabu/castvolume.py +1 -1
- tomwer/core/process/reconstruction/nabu/helical.py +9 -5
- tomwer/core/process/reconstruction/nabu/nabucommon.py +32 -62
- tomwer/core/process/reconstruction/nabu/nabuscores.py +387 -61
- tomwer/core/process/reconstruction/nabu/nabuslices.py +33 -21
- tomwer/core/process/reconstruction/nabu/nabuvolume.py +37 -14
- tomwer/core/process/reconstruction/nabu/settings.py +2 -2
- tomwer/core/process/reconstruction/nabu/utils.py +129 -24
- tomwer/core/process/reconstruction/output.py +108 -0
- tomwer/core/process/reconstruction/saaxis/saaxis.py +233 -263
- tomwer/core/process/reconstruction/sadeltabeta/sadeltabeta.py +140 -86
- tomwer/core/process/reconstruction/scores/params.py +4 -1
- tomwer/core/process/reconstruction/scores/scores.py +13 -0
- tomwer/core/process/reconstruction/test/test_axis_params.py +2 -2
- tomwer/core/process/reconstruction/test/test_darkref.py +3 -3
- tomwer/core/process/reconstruction/test/test_darkref_copy.py +3 -3
- tomwer/core/process/reconstruction/test/test_saaxis.py +3 -4
- tomwer/core/process/reconstruction/test/test_sadeltabeta.py +2 -2
- tomwer/core/process/stitching/nabustitcher.py +2 -2
- tomwer/core/process/test/test_axis.py +6 -6
- tomwer/core/process/test/test_dark_and_flat.py +10 -7
- tomwer/core/process/test/test_data_transfer.py +7 -6
- tomwer/core/process/test/test_nabu.py +4 -4
- tomwer/core/process/test/test_normalization.py +2 -2
- tomwer/core/scan/edfscan.py +4 -1
- tomwer/core/scan/hdf5scan.py +19 -500
- tomwer/core/scan/nxtomoscan.py +532 -0
- tomwer/core/scan/scanbase.py +42 -20
- tomwer/core/scan/scanfactory.py +13 -13
- tomwer/core/scan/test/test_future_scan.py +2 -2
- tomwer/core/scan/test/test_h5.py +12 -10
- tomwer/core/scan/test/test_process_registration.py +2 -2
- tomwer/core/scan/test/test_scan.py +4 -3
- tomwer/core/settings.py +20 -0
- tomwer/core/test/test_scanutils.py +8 -7
- tomwer/core/test/test_utils.py +33 -26
- tomwer/core/utils/__init__.py +0 -466
- tomwer/core/utils/deprecation.py +1 -1
- tomwer/core/utils/dictutils.py +14 -0
- tomwer/core/utils/lbsram.py +35 -0
- tomwer/core/utils/nxtomoutils.py +1 -1
- tomwer/core/utils/scanutils.py +6 -6
- tomwer/core/utils/spec.py +263 -0
- tomwer/core/volume/volumefactory.py +2 -2
- tomwer/gui/cluster/slurm.py +260 -60
- tomwer/gui/cluster/test/test_cluster.py +13 -0
- tomwer/gui/cluster/test/test_supervisor.py +2 -2
- tomwer/gui/configuration/__init__.py +0 -0
- tomwer/gui/{reconstruction/nabu → configuration}/action.py +1 -32
- tomwer/gui/configuration/level.py +22 -0
- tomwer/gui/control/actions.py +54 -0
- tomwer/gui/control/datalist.py +78 -16
- tomwer/gui/control/datalistener.py +4 -16
- tomwer/gui/control/{email.py → emailnotifier.py} +9 -18
- tomwer/gui/control/history.py +2 -2
- tomwer/gui/control/observations.py +2 -2
- tomwer/gui/control/reducedarkflatselector.py +1 -1
- tomwer/gui/control/selectorwidgetbase.py +36 -9
- tomwer/gui/control/serie/seriecreator.py +5 -22
- tomwer/gui/control/test/test_email.py +1 -1
- tomwer/gui/control/test/test_scanvalidator.py +6 -5
- tomwer/gui/control/test/test_single_tomo_obj.py +2 -2
- tomwer/gui/control/tomoobjdisplaymode.py +8 -0
- tomwer/gui/debugtools/datasetgenerator.py +3 -3
- tomwer/gui/edit/dkrfpatch.py +16 -22
- tomwer/gui/edit/imagekeyeditor.py +8 -11
- tomwer/gui/edit/nxtomoeditor.py +111 -44
- tomwer/gui/edit/nxtomowarmer.py +4 -4
- tomwer/gui/edit/test/test_dkrf_patch.py +7 -7
- tomwer/gui/edit/test/test_image_key_editor.py +3 -3
- tomwer/gui/edit/test/test_nx_editor.py +40 -16
- tomwer/gui/icat/__init__.py +0 -0
- tomwer/gui/icat/createscreenshots.py +80 -0
- tomwer/gui/icat/gallery.py +214 -0
- tomwer/gui/icat/publish.py +187 -0
- tomwer/gui/reconstruction/axis/axis.py +171 -57
- tomwer/gui/reconstruction/axis/radioaxis.py +80 -95
- tomwer/gui/reconstruction/darkref/darkrefcopywidget.py +3 -2
- tomwer/gui/reconstruction/lamino/tofu/projections.py +1 -1
- tomwer/gui/reconstruction/lamino/tofu/tofuoutput.py +3 -6
- tomwer/gui/reconstruction/nabu/castvolume.py +1 -1
- tomwer/gui/reconstruction/nabu/check.py +9 -9
- tomwer/gui/reconstruction/nabu/helical.py +29 -12
- tomwer/gui/reconstruction/nabu/nabuconfig/base.py +2 -4
- tomwer/gui/reconstruction/nabu/nabuconfig/output.py +110 -33
- tomwer/gui/reconstruction/nabu/nabuconfig/phase.py +9 -12
- tomwer/gui/reconstruction/nabu/nabuconfig/preprocessing.py +219 -29
- tomwer/gui/reconstruction/nabu/nabuconfig/reconstruction.py +3 -6
- tomwer/gui/reconstruction/nabu/nabuflow.py +12 -20
- tomwer/gui/reconstruction/nabu/slices.py +6 -7
- tomwer/gui/reconstruction/nabu/volume.py +22 -10
- tomwer/gui/reconstruction/normalization/intensity.py +15 -23
- tomwer/gui/reconstruction/saaxis/corrangeselector.py +7 -23
- tomwer/gui/reconstruction/saaxis/dimensionwidget.py +1 -1
- tomwer/gui/reconstruction/saaxis/saaxis.py +7 -9
- tomwer/gui/reconstruction/sadeltabeta/saadeltabeta.py +2 -1
- tomwer/gui/reconstruction/scores/control.py +2 -9
- tomwer/gui/reconstruction/scores/scoreplot.py +11 -5
- tomwer/gui/reconstruction/test/test_axis.py +23 -12
- tomwer/gui/reconstruction/test/test_lamino.py +8 -3
- tomwer/gui/reconstruction/test/test_nabu.py +28 -9
- tomwer/gui/reconstruction/test/test_saaxis.py +3 -3
- tomwer/gui/reconstruction/test/test_sadeltabeta.py +2 -2
- tomwer/gui/settings.py +5 -28
- tomwer/gui/stackplot.py +2 -5
- tomwer/gui/stitching/action.py +49 -0
- tomwer/gui/stitching/config/axisparams.py +7 -24
- tomwer/gui/stitching/config/output.py +10 -8
- tomwer/gui/stitching/config/positionoveraxis.py +22 -23
- tomwer/gui/stitching/normalization.py +117 -0
- tomwer/gui/stitching/stitchandbackground.py +4 -6
- tomwer/gui/stitching/stitching.py +265 -43
- tomwer/gui/stitching/stitching_preview.py +62 -5
- tomwer/gui/stitching/stitching_raw.py +2 -5
- tomwer/gui/stitching/z_stitching/fineestimation.py +0 -60
- tomwer/gui/utils/buttons.py +112 -29
- tomwer/gui/utils/inputwidget.py +33 -25
- tomwer/gui/utils/scandescription.py +4 -0
- tomwer/gui/utils/step.py +144 -0
- tomwer/gui/utils/unitsystem.py +2 -5
- tomwer/gui/utils/vignettes.py +176 -15
- tomwer/gui/visualization/dataviewer.py +1 -4
- tomwer/gui/visualization/diffviewer/diffviewer.py +7 -16
- tomwer/gui/visualization/diffviewer/shiftwidget.py +2 -5
- tomwer/gui/visualization/scanoverview.py +1 -1
- tomwer/gui/visualization/sinogramviewer.py +1 -10
- tomwer/gui/visualization/test/test_diffviewer.py +3 -3
- tomwer/gui/visualization/test/test_nx_tomo_metadata_viewer.py +4 -4
- tomwer/gui/visualization/test/test_sinogramviewer.py +2 -2
- tomwer/gui/visualization/test/test_stacks.py +3 -3
- tomwer/gui/visualization/test/test_volumeviewer.py +2 -2
- tomwer/io/utils/raw_and_processed_data.py +84 -0
- tomwer/io/utils/tomoobj.py +4 -6
- tomwer/resources/gui/icons/ruler.png +0 -0
- tomwer/resources/gui/icons/ruler.svg +273 -0
- tomwer/resources/gui/icons/short_description.png +0 -0
- tomwer/resources/gui/icons/short_description.svg +58 -0
- tomwer/resources/gui/icons/url.png +0 -0
- tomwer/resources/gui/icons/url.svg +58 -0
- tomwer/synctools/stacks/edit/darkflatpatch.py +2 -2
- tomwer/synctools/stacks/edit/imagekeyeditor.py +2 -2
- tomwer/synctools/stacks/reconstruction/axis.py +4 -4
- tomwer/synctools/stacks/reconstruction/castvolume.py +2 -2
- tomwer/synctools/stacks/reconstruction/dkrefcopy.py +4 -10
- tomwer/synctools/stacks/reconstruction/nabu.py +2 -2
- tomwer/synctools/stacks/reconstruction/normalization.py +2 -2
- tomwer/synctools/stacks/reconstruction/saaxis.py +2 -2
- tomwer/synctools/stacks/reconstruction/sadeltabeta.py +2 -2
- tomwer/synctools/test/test_darkRefs.py +7 -58
- tomwer/synctools/test/test_foldertransfer.py +6 -6
- tomwer/synctools/utils/scanstages.py +6 -6
- tomwer/tests/conftest.py +34 -0
- tomwer/tests/datasets.py +13 -0
- tomwer/tests/test_scripts.py +92 -39
- tomwer/tests/utils.py +5 -0
- tomwer/version.py +3 -3
- {tomwer-1.2.9.dist-info → tomwer-1.3.0a0.dist-info}/METADATA +39 -39
- {tomwer-1.2.9.dist-info → tomwer-1.3.0a0.dist-info}/RECORD +248 -209
- tomwer/resources/gui/icons/esrf_1.svg +0 -307
- tomwer/resources/gui/icons/triangle.svg +0 -80
- tomwer/synctools/test/test_scanstages.py +0 -162
- tomwer/tests/utils/__init__.py +0 -247
- tomwer/tests/utils/utilstest.py +0 -220
- /tomwer/app/{saaxis.py → multicor.py} +0 -0
- /tomwer/app/{sadeltabeta.py → multipag.py} +0 -0
- /tomwer/core/process/control/{email.py → emailnotifier.py} +0 -0
- /tomwer-1.2.9-py3.11-nspkg.pth → /tomwer-1.3.0a0-py3.11-nspkg.pth +0 -0
- {tomwer-1.2.9.dist-info → tomwer-1.3.0a0.dist-info}/LICENSE +0 -0
- {tomwer-1.2.9.dist-info → tomwer-1.3.0a0.dist-info}/WHEEL +0 -0
- {tomwer-1.2.9.dist-info → tomwer-1.3.0a0.dist-info}/entry_points.txt +0 -0
- {tomwer-1.2.9.dist-info → tomwer-1.3.0a0.dist-info}/namespace_packages.txt +0 -0
- {tomwer-1.2.9.dist-info → tomwer-1.3.0a0.dist-info}/top_level.txt +0 -0
@@ -45,6 +45,11 @@ from orangecontrib.tomwer.widgets.utils import WidgetLongProcessing
|
|
45
45
|
from tomwer.core import settings
|
46
46
|
from tomwer.core.cluster import SlurmClusterConfiguration
|
47
47
|
from tomwer.core.futureobject import FutureTomwerObject
|
48
|
+
from tomwer.core.process.icat.gallery import (
|
49
|
+
IcatScreenshots,
|
50
|
+
deduce_dataset_gallery_location,
|
51
|
+
select_screenshot_from_volume,
|
52
|
+
)
|
48
53
|
from tomwer.core.process.reconstruction.nabu import utils as nabu_utils
|
49
54
|
from tomwer.core.process.reconstruction.nabu.nabuvolume import NabuVolumeTask
|
50
55
|
from tomwer.core.scan.scanbase import TomwerScanBase
|
@@ -123,6 +128,11 @@ class NabuVolumeOW(WidgetLongProcessing, SuperviseOW):
|
|
123
128
|
volume_urls = Output(
|
124
129
|
name="volume urls", type=tuple, doc="url of the volume(s) reconstructed"
|
125
130
|
)
|
131
|
+
screenshots = Output(
|
132
|
+
name="screenshots",
|
133
|
+
type=IcatScreenshots,
|
134
|
+
doc="screenshots that can be saved",
|
135
|
+
)
|
126
136
|
|
127
137
|
class DialogCM(AbstractContextManager):
|
128
138
|
"""Simple context manager to hida / show button dialogs"""
|
@@ -172,7 +182,7 @@ class NabuVolumeOW(WidgetLongProcessing, SuperviseOW):
|
|
172
182
|
|
173
183
|
if nabu_volume_params not in (dict(), None):
|
174
184
|
try:
|
175
|
-
self.
|
185
|
+
self.setConfiguration(nabu_volume_params)
|
176
186
|
except Exception:
|
177
187
|
_logger.warning("fail to load reconstruction settings")
|
178
188
|
|
@@ -213,14 +223,19 @@ class NabuVolumeOW(WidgetLongProcessing, SuperviseOW):
|
|
213
223
|
config = scan.nabu_recons_params
|
214
224
|
# update output format if requested
|
215
225
|
if self._nabuWidget._mainWidget.redefineNabuFileFormat():
|
216
|
-
config
|
226
|
+
config["output"][
|
217
227
|
"file_format"
|
218
228
|
] = self._nabuWidget._mainWidget.getNabuFileFormat()
|
219
229
|
# update output location if requested
|
220
230
|
if self._nabuWidget._mainWidget.redefineOutputLocation():
|
221
|
-
|
222
|
-
|
223
|
-
scan=scan
|
231
|
+
location = self._nabuWidget._mainWidget.getNabuOutputLocation()
|
232
|
+
if location is not None:
|
233
|
+
location = format_output_location(location=location, scan=scan)
|
234
|
+
config["output"]["location"] = location
|
235
|
+
config["output"][
|
236
|
+
"output_dir_mode"
|
237
|
+
] = (
|
238
|
+
self._nabuWidget._mainWidget._outputLocationWidget.getOutputDirMode().value
|
224
239
|
)
|
225
240
|
|
226
241
|
if "phase" in config and "delta_beta" in config["phase"]:
|
@@ -314,7 +329,26 @@ class NabuVolumeOW(WidgetLongProcessing, SuperviseOW):
|
|
314
329
|
assert isinstance(volume_id, VolumeIdentifier)
|
315
330
|
volume_urls.extend(VolumeFactory.from_identifier_to_vol_urls(volume_id))
|
316
331
|
if len(volume_urls) > 0:
|
332
|
+
# send list of reconcstructed volume
|
317
333
|
self.Outputs.volume_urls.send(tuple(volume_urls))
|
334
|
+
# send list of screenshots
|
335
|
+
screenshots = {}
|
336
|
+
[
|
337
|
+
screenshots.update(
|
338
|
+
select_screenshot_from_volume(
|
339
|
+
VolumeFactory.create_tomo_object_from_identifier(volume_id)
|
340
|
+
)
|
341
|
+
)
|
342
|
+
for volume_id in scan.latest_vol_reconstructions
|
343
|
+
]
|
344
|
+
self.Outputs.screenshots.send(
|
345
|
+
IcatScreenshots(
|
346
|
+
data_dir=deduce_dataset_gallery_location(scan),
|
347
|
+
screenshots=screenshots,
|
348
|
+
scan=scan,
|
349
|
+
),
|
350
|
+
)
|
351
|
+
|
318
352
|
# send volume identifier(s) # only one expected
|
319
353
|
n_rec_volumes = len(scan.latest_vol_reconstructions)
|
320
354
|
if n_rec_volumes > 0:
|
@@ -43,9 +43,9 @@ from silx.gui import qt
|
|
43
43
|
import tomwer.core.process.reconstruction.saaxis.saaxis
|
44
44
|
from orangecontrib.tomwer.orange.managedprocess import SuperviseOW
|
45
45
|
from orangecontrib.tomwer.orange.settings import CallbackSettingsHandler
|
46
|
-
from tomwer.core import settings
|
46
|
+
from tomwer.core import settings
|
47
|
+
from tomwer.core.utils.lbsram import is_low_on_memory
|
47
48
|
from tomwer.core.cluster import SlurmClusterConfiguration
|
48
|
-
from tomwer.core.futureobject import FutureTomwerObject
|
49
49
|
from tomwer.core.process.reconstruction.axis import AxisTask
|
50
50
|
from tomwer.core.process.reconstruction.saaxis.saaxis import SAAxisTask
|
51
51
|
from tomwer.core.scan.scanbase import TomwerScanBase, _TomwerBaseDock
|
@@ -270,12 +270,14 @@ class SAAxisOW(SuperviseOW, WidgetLongProcessing):
|
|
270
270
|
Details about :ref:`saaxis score calculation`
|
271
271
|
"""
|
272
272
|
|
273
|
-
name = "
|
273
|
+
name = "multi-cor (sa-axis)"
|
274
274
|
id = "orange.widgets.tomwer.sa_axis"
|
275
|
-
description = "
|
275
|
+
description = "Reconstruct a slice with different center of rotation (cor) values"
|
276
276
|
icon = "icons/saaxis.png"
|
277
277
|
priority = 21
|
278
278
|
keywords = [
|
279
|
+
"multi",
|
280
|
+
"multi-cor",
|
279
281
|
"tomography",
|
280
282
|
"semi automatic",
|
281
283
|
"half automatic",
|
@@ -322,12 +324,6 @@ class SAAxisOW(SuperviseOW, WidgetLongProcessing):
|
|
322
324
|
class Outputs:
|
323
325
|
data = Output(name="data", type=TomwerScanBase, doc="one scan to be process")
|
324
326
|
|
325
|
-
future_out = Output(
|
326
|
-
name="future_tomo_obj",
|
327
|
-
type=FutureTomwerObject,
|
328
|
-
doc="data with some remote processing",
|
329
|
-
)
|
330
|
-
|
331
327
|
def __init__(self, parent=None):
|
332
328
|
"""
|
333
329
|
|
@@ -404,9 +400,7 @@ class SAAxisOW(SuperviseOW, WidgetLongProcessing):
|
|
404
400
|
scan.saaxis_params = QSAAxisParams()
|
405
401
|
self._skipCurrentScan(new_scan=scan)
|
406
402
|
|
407
|
-
if settings.isOnLbsram(scan) and
|
408
|
-
settings.get_lbsram_path()
|
409
|
-
):
|
403
|
+
if settings.isOnLbsram(scan) and is_low_on_memory(settings.get_lbsram_path()):
|
410
404
|
self.notify_skip(
|
411
405
|
scan=scan,
|
412
406
|
details=f"saaxis has been skiped for {scan} because of low space in lbsram",
|
@@ -41,9 +41,9 @@ from silx.gui import qt
|
|
41
41
|
import tomwer.core.process.reconstruction.sadeltabeta.sadeltabeta
|
42
42
|
from orangecontrib.tomwer.orange.managedprocess import SuperviseOW
|
43
43
|
from orangecontrib.tomwer.orange.settings import CallbackSettingsHandler
|
44
|
-
from tomwer.core import settings
|
44
|
+
from tomwer.core import settings
|
45
|
+
from tomwer.core.utils.lbsram import is_low_on_memory
|
45
46
|
from tomwer.core.cluster import SlurmClusterConfiguration
|
46
|
-
from tomwer.core.futureobject import FutureTomwerObject
|
47
47
|
from tomwer.core.process.reconstruction.sadeltabeta import SADeltaBetaTask
|
48
48
|
from tomwer.core.scan.scanbase import TomwerScanBase, _TomwerBaseDock
|
49
49
|
from tomwer.gui.reconstruction.sadeltabeta import (
|
@@ -198,16 +198,14 @@ class SADeltaBetaOW(SuperviseOW, WidgetLongProcessing):
|
|
198
198
|
Details about :ref:`sadeltabeta score calculation`
|
199
199
|
"""
|
200
200
|
|
201
|
-
name = "
|
201
|
+
name = "multi-pag (sa-delta/beta calculation)"
|
202
202
|
id = "orange.widgets.tomwer.sa_delta_beta"
|
203
|
-
description =
|
204
|
-
"compute several delta / beta value to get the optimal "
|
205
|
-
"delta / beta value (before reconstructing a volume for "
|
206
|
-
"example."
|
207
|
-
)
|
203
|
+
description = "Reconstruct a slice with several delta / beta values."
|
208
204
|
icon = "icons/delta_beta_range.png"
|
209
205
|
priority = 22
|
210
206
|
keywords = [
|
207
|
+
"multi",
|
208
|
+
"multi-pag",
|
211
209
|
"tomography",
|
212
210
|
"semi automatic",
|
213
211
|
"half automatic",
|
@@ -257,12 +255,6 @@ class SADeltaBetaOW(SuperviseOW, WidgetLongProcessing):
|
|
257
255
|
class Outputs:
|
258
256
|
data = Output(name="data", type=TomwerScanBase)
|
259
257
|
|
260
|
-
future_out = Output(
|
261
|
-
name="future_tomo_obj",
|
262
|
-
type=FutureTomwerObject,
|
263
|
-
doc="data with some remote processing",
|
264
|
-
)
|
265
|
-
|
266
258
|
def __init__(self, parent=None):
|
267
259
|
"""
|
268
260
|
|
@@ -336,9 +328,7 @@ class SADeltaBetaOW(SuperviseOW, WidgetLongProcessing):
|
|
336
328
|
scan.sa_delta_beta_params = QSADeltaBetaParams()
|
337
329
|
self._skipCurrentScan(new_scan=scan)
|
338
330
|
|
339
|
-
if settings.isOnLbsram(scan) and
|
340
|
-
settings.get_lbsram_path()
|
341
|
-
):
|
331
|
+
if settings.isOnLbsram(scan) and is_low_on_memory(settings.get_lbsram_path()):
|
342
332
|
self.notify_skip(
|
343
333
|
scan=scan,
|
344
334
|
details=f"sa-delta-beta has been skiped for {scan} because of low space in lbsram",
|
@@ -42,7 +42,8 @@ from tomoscan.normalization import Method as NormMethod
|
|
42
42
|
|
43
43
|
from orangecontrib.tomwer.widgets.utils import WidgetLongProcessing
|
44
44
|
|
45
|
-
from tomwer.core import settings
|
45
|
+
from tomwer.core import settings
|
46
|
+
from tomwer.core.utils.lbsram import is_low_on_memory
|
46
47
|
from tomwer.core.process.reconstruction.normalization import SinoNormalizationTask
|
47
48
|
from tomwer.core.process.reconstruction.normalization.params import _ValueSource
|
48
49
|
from tomwer.core.scan.scanbase import TomwerScanBase
|
@@ -197,9 +198,7 @@ class SinoNormOW(WidgetLongProcessing, SuperviseOW):
|
|
197
198
|
return
|
198
199
|
|
199
200
|
self._skipCurrentScan(new_scan=scan)
|
200
|
-
if settings.isOnLbsram(scan) and
|
201
|
-
settings.get_lbsram_path()
|
202
|
-
):
|
201
|
+
if settings.isOnLbsram(scan) and is_low_on_memory(settings.get_lbsram_path()):
|
203
202
|
details = f"skip {scan} because low memory on lbsram"
|
204
203
|
self.notify_skip(scan=scan, details=details)
|
205
204
|
self.Outputs.data_out.send(scan)
|
@@ -32,7 +32,7 @@ from orangewidget.widget import Input
|
|
32
32
|
|
33
33
|
import tomwer.core.process.visualization.liveslice
|
34
34
|
from tomwer.core.scan.scanbase import TomwerScanBase
|
35
|
-
from tomwer.core.utils import getFirstProjFile
|
35
|
+
from tomwer.core.utils.spec import getFirstProjFile
|
36
36
|
|
37
37
|
try:
|
38
38
|
from liveslice.gui.liveslice_gui import ReconstructionApp
|
@@ -2,7 +2,7 @@ from orangewidget import gui, widget
|
|
2
2
|
from orangewidget.widget import Input, Output
|
3
3
|
from silx.gui import qt
|
4
4
|
|
5
|
-
from tomwer.core.scan.
|
5
|
+
from tomwer.core.scan.nxtomoscan import NXtomoScan
|
6
6
|
from tomwer.core.scan.scanbase import TomwerScanBase
|
7
7
|
from tomwer.gui.visualization.nxtomometadata import NXtomoMetadataViewer
|
8
8
|
|
@@ -56,9 +56,9 @@ class NXtomoMetadataViewerOW(widget.OWBaseWidget, openclass=True):
|
|
56
56
|
def setScan(self, scan):
|
57
57
|
if scan is None:
|
58
58
|
pass
|
59
|
-
elif not isinstance(scan,
|
59
|
+
elif not isinstance(scan, NXtomoScan):
|
60
60
|
raise TypeError(
|
61
|
-
f"expect to have an instance of {
|
61
|
+
f"expect to have an instance of {NXtomoScan}. {type(scan)} provided."
|
62
62
|
)
|
63
63
|
else:
|
64
64
|
self.widget.setScan(scan)
|
@@ -1,32 +1,3 @@
|
|
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__ = "21/07/2020"
|
29
|
-
|
30
1
|
import pytest
|
31
2
|
from orangewidget import gui, widget
|
32
3
|
from orangewidget.widget import Input
|
@@ -79,6 +50,9 @@ class VolumeViewerOW(widget.OWBaseWidget, openclass=True):
|
|
79
50
|
self.viewer.setScan(scan)
|
80
51
|
|
81
52
|
@Inputs.volume
|
53
|
+
def _volumeReceived(self, volume, *args, **kwargs):
|
54
|
+
self.addVolume(volume)
|
55
|
+
|
82
56
|
def addVolume(self, volume):
|
83
57
|
if volume is None:
|
84
58
|
return
|
tomwer/__main__.py
CHANGED
@@ -36,21 +36,16 @@ __date__ = "10/11/2020"
|
|
36
36
|
|
37
37
|
|
38
38
|
import sys
|
39
|
-
import logging
|
40
|
-
import traceback
|
41
39
|
from collections import namedtuple
|
42
40
|
import tomwer.version
|
43
41
|
from tomwer.utils import Launcher as _Launcher
|
44
|
-
|
42
|
+
from tomwer.core.utils.deprecation import deprecated_warning
|
45
43
|
|
46
44
|
DeprecationWarning = namedtuple(
|
47
45
|
"DeprecationWarning", ["since", "reason", "replacement"]
|
48
46
|
)
|
49
47
|
|
50
48
|
|
51
|
-
depreclog = logging.getLogger("nxtomomill.DEPRECATION")
|
52
|
-
|
53
|
-
|
54
49
|
class Launcher(_Launcher):
|
55
50
|
"""
|
56
51
|
Manage launch of module.
|
@@ -115,48 +110,6 @@ class Launcher(_Launcher):
|
|
115
110
|
super().execute(argv=argv)
|
116
111
|
|
117
112
|
|
118
|
-
def deprecated_warning(
|
119
|
-
type_,
|
120
|
-
name,
|
121
|
-
reason=None,
|
122
|
-
replacement=None,
|
123
|
-
since_version=None,
|
124
|
-
skip_backtrace_count=0,
|
125
|
-
):
|
126
|
-
"""
|
127
|
-
Function to log a deprecation warning
|
128
|
-
|
129
|
-
:param str type_: Nature of the object to be deprecated:
|
130
|
-
"Module", "Function", "Class" ...
|
131
|
-
:param name: Object name.
|
132
|
-
:param str reason: Reason for deprecating this function
|
133
|
-
(e.g. "feature no longer provided",
|
134
|
-
:param str replacement: Name of replacement function (if the reason for
|
135
|
-
deprecating was to rename the function)
|
136
|
-
:param str since_version: First *silx* version for which the function was
|
137
|
-
deprecated (e.g. "0.5.0").
|
138
|
-
:param int skip_backtrace_count: Amount of last backtrace to ignore when
|
139
|
-
logging the backtrace
|
140
|
-
"""
|
141
|
-
if not depreclog.isEnabledFor(logging.WARNING):
|
142
|
-
# Avoid computation when it is not logged
|
143
|
-
return
|
144
|
-
|
145
|
-
msg = "%s %s is deprecated"
|
146
|
-
if since_version is not None:
|
147
|
-
msg += " since silx version %s" % since_version
|
148
|
-
msg += "."
|
149
|
-
if reason is not None:
|
150
|
-
msg += " Reason: %s." % reason
|
151
|
-
if replacement is not None:
|
152
|
-
msg += " Use '%s' instead." % replacement
|
153
|
-
msg += "\n%s"
|
154
|
-
limit = 2 + skip_backtrace_count
|
155
|
-
backtrace = "".join(traceback.format_stack(limit=limit)[0])
|
156
|
-
backtrace = backtrace.rstrip()
|
157
|
-
depreclog.warning(msg, type_, name, backtrace)
|
158
|
-
|
159
|
-
|
160
113
|
def main():
|
161
114
|
"""Main function of the launcher
|
162
115
|
|
@@ -225,6 +178,16 @@ def main():
|
|
225
178
|
module_name="tomwer.app.liveslice",
|
226
179
|
description="Run liveslice application",
|
227
180
|
)
|
181
|
+
launcher.add_command(
|
182
|
+
"multi-cor",
|
183
|
+
module_name="tomwer.app.multicor",
|
184
|
+
description="Compute a slice with different values of cor",
|
185
|
+
)
|
186
|
+
launcher.add_command(
|
187
|
+
"multi-pag",
|
188
|
+
module_name="tomwer.app.multipag",
|
189
|
+
description="compute a slice with different values of delta / beta values",
|
190
|
+
)
|
228
191
|
launcher.add_command(
|
229
192
|
"nabu",
|
230
193
|
module_name="tomwer.app.nabuapp",
|
@@ -273,16 +236,6 @@ def main():
|
|
273
236
|
module_name="tomwer.app.sinogramviewer",
|
274
237
|
description="Allows to compute on the fly sinogram " "and display them",
|
275
238
|
)
|
276
|
-
launcher.add_command(
|
277
|
-
"sa-axis",
|
278
|
-
module_name="tomwer.app.saaxis",
|
279
|
-
description="Semi-automatic center of rotation research",
|
280
|
-
)
|
281
|
-
launcher.add_command(
|
282
|
-
"sa-delta-beta",
|
283
|
-
module_name="tomwer.app.sadeltabeta",
|
284
|
-
description="Semi-automatic delta/beta Paganin parameter research",
|
285
|
-
)
|
286
239
|
launcher.add_command(
|
287
240
|
"scan-viewer",
|
288
241
|
module_name="tomwer.app.scanviewer",
|
tomwer/app/canvas.py
CHANGED
@@ -23,11 +23,19 @@ except ImportError:
|
|
23
23
|
has_nabu = False
|
24
24
|
else:
|
25
25
|
has_nabu = True
|
26
|
+
try:
|
27
|
+
import nxtomo.version
|
28
|
+
except ImportError:
|
29
|
+
has_nxtomo = False
|
30
|
+
else:
|
31
|
+
has_nxtomo = True
|
26
32
|
|
27
33
|
|
28
34
|
def print_versions():
|
29
35
|
print(f"tomwer version is {tomwer.version.version}")
|
30
36
|
print(f"tomoscan version is {tomoscan.version.version}")
|
37
|
+
if has_nxtomo:
|
38
|
+
print(f"nxtomo version is {nxtomo.version.version}")
|
31
39
|
if has_nxtomomill:
|
32
40
|
print(f"nxtomomill version is {nxtomomill.version.version}")
|
33
41
|
if has_nabu:
|
@@ -185,17 +185,19 @@ class TerminalTextDocument(_TerminalTextDocument):
|
|
185
185
|
def writeWithFormat(self, string: str, charformat) -> None:
|
186
186
|
assert qt.QThread.currentThread() is self.thread()
|
187
187
|
# remove linux reset sequence
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
188
|
+
from tomwer.core.log import logger as tomwer_logger
|
189
|
+
|
190
|
+
for sequence in (
|
191
|
+
tomwer_logger._RESET_SEQ,
|
192
|
+
tomwer_logger._BOLD_SEQ,
|
193
|
+
tomwer_logger._BLACK,
|
194
|
+
tomwer_logger._RED,
|
195
|
+
tomwer_logger._GREEN,
|
196
|
+
tomwer_logger._YELLOW,
|
197
|
+
tomwer_logger._BLUE,
|
198
|
+
tomwer_logger._MAGENTA,
|
199
|
+
):
|
200
|
+
string = string.replace(sequence, "")
|
199
201
|
|
200
202
|
color = self.get_log_level(string) or qt.Qt.red
|
201
203
|
charformat.setForeground(color)
|
tomwer/app/darkref.py
CHANGED
tomwer/app/darkrefpatch.py
CHANGED
tomwer/app/imagekeyeditor.py
CHANGED
@@ -8,7 +8,7 @@ import sys
|
|
8
8
|
|
9
9
|
from silx.gui import qt
|
10
10
|
|
11
|
-
from tomwer.core.scan.
|
11
|
+
from tomwer.core.scan.nxtomoscan import NXtomoScan
|
12
12
|
from tomwer.core.utils.resource import increase_max_number_file
|
13
13
|
from tomwer.core.process.edit.imagekeyeditor import ImageKeyEditorTask
|
14
14
|
from tomwer.gui import icons
|
@@ -25,8 +25,8 @@ class ImageKeyDialog(_ImageKeyDialog):
|
|
25
25
|
self._scan = None
|
26
26
|
|
27
27
|
def setScan(self, scan):
|
28
|
-
if not isinstance(scan,
|
29
|
-
raise TypeError("This only manage
|
28
|
+
if not isinstance(scan, NXtomoScan):
|
29
|
+
raise TypeError("This only manage NXtomoScan")
|
30
30
|
self._scan = scan
|
31
31
|
_ImageKeyDialog.setScan(self, scan)
|
32
32
|
|
@@ -65,8 +65,8 @@ def main(argv):
|
|
65
65
|
parser.add_argument("entry", default=None, help="Entry to treat")
|
66
66
|
options = parser.parse_args(argv[1:])
|
67
67
|
|
68
|
-
# image key can only handle
|
69
|
-
scan =
|
68
|
+
# image key can only handle NXtomoScan for now
|
69
|
+
scan = NXtomoScan(scan=options.scan_path, entry=options.entry)
|
70
70
|
increase_max_number_file()
|
71
71
|
|
72
72
|
app = qt.QApplication.instance() or qt.QApplication(["tomwer"])
|
tomwer/app/imagekeyupgrader.py
CHANGED
@@ -9,7 +9,7 @@ import sys
|
|
9
9
|
from silx.gui import qt
|
10
10
|
|
11
11
|
from tomwer.core.process.edit.imagekeyeditor import ImageKeyUpgraderTask
|
12
|
-
from tomwer.core.scan.
|
12
|
+
from tomwer.core.scan.nxtomoscan import NXtomoScan
|
13
13
|
from tomwer.core.utils.resource import increase_max_number_file
|
14
14
|
from tomwer.gui import icons
|
15
15
|
from tomwer.gui.edit.imagekeyeditor import (
|
@@ -40,8 +40,8 @@ class ImageKeyUpgraderDialog(qt.QDialog):
|
|
40
40
|
self._buttons.button(qt.QDialogButtonBox.Cancel).released.connect(self.close)
|
41
41
|
|
42
42
|
def setScan(self, scan):
|
43
|
-
if not isinstance(scan,
|
44
|
-
raise TypeError("This only manage
|
43
|
+
if not isinstance(scan, NXtomoScan):
|
44
|
+
raise TypeError("This only manage NXtomoScan")
|
45
45
|
self._scan = scan
|
46
46
|
|
47
47
|
def validate(self):
|
@@ -74,8 +74,8 @@ def main(argv):
|
|
74
74
|
parser.add_argument("entry", default=None, help="Entry to treat")
|
75
75
|
options = parser.parse_args(argv[1:])
|
76
76
|
|
77
|
-
# image key can only handle
|
78
|
-
scan =
|
77
|
+
# image key can only handle NXtomoScan for now
|
78
|
+
scan = NXtomoScan(scan=options.scan_path, entry=options.entry)
|
79
79
|
increase_max_number_file()
|
80
80
|
|
81
81
|
app = qt.QApplication.instance() or qt.QApplication(["tomwer"])
|
@@ -10,7 +10,7 @@ import sys
|
|
10
10
|
from silx.gui import qt
|
11
11
|
|
12
12
|
from tomwer.core.process.reconstruction.normalization import SinoNormalizationTask
|
13
|
-
from tomwer.core.scan.
|
13
|
+
from tomwer.core.scan.nxtomoscan import NXtomoScan
|
14
14
|
from tomwer.core.scan.scanbase import TomwerScanBase
|
15
15
|
from tomwer.core.scan.scanfactory import ScanFactory
|
16
16
|
from tomwer.gui import icons
|
@@ -175,7 +175,7 @@ def main(argv):
|
|
175
175
|
)
|
176
176
|
if options.entry is None:
|
177
177
|
raise ValueError("entry in the master file should be specify")
|
178
|
-
scan =
|
178
|
+
scan = NXtomoScan(scan=options.scan_path, entry=options.entry)
|
179
179
|
else:
|
180
180
|
scan = ScanFactory.mock_scan()
|
181
181
|
# define the process_index is any tomwer_processes_existing
|
tomwer/app/radiostack.py
CHANGED
@@ -9,7 +9,7 @@ import sys
|
|
9
9
|
|
10
10
|
from silx.gui import qt
|
11
11
|
|
12
|
-
from tomwer.core.scan.
|
12
|
+
from tomwer.core.scan.nxtomoscan import NXtomoScan
|
13
13
|
from tomwer.core.utils.resource import increase_max_number_file
|
14
14
|
from tomwer.gui import icons
|
15
15
|
from tomwer.gui.stacks import RadioStack
|
@@ -29,7 +29,7 @@ def addFolderAndSubFolder(stack, path):
|
|
29
29
|
_path = os.path.join(path, f)
|
30
30
|
if os.path.isdir(_path) is True:
|
31
31
|
addFolderAndSubFolder(stack, _path)
|
32
|
-
elif os.path.isfile(_path) and
|
32
|
+
elif os.path.isfile(_path) and NXtomoScan.is_nexus_nxtomo_file(_path):
|
33
33
|
stack.addLeafScan(_path)
|
34
34
|
|
35
35
|
|