tomwer 1.2.1__py3-none-any.whl → 1.3.12__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 +11 -11
- orangecontrib/tomwer/widgets/control/DataDiscoveryOW.py +2 -2
- orangecontrib/tomwer/widgets/control/DataListOW.py +9 -7
- orangecontrib/tomwer/widgets/control/DataListenerOW.py +6 -6
- orangecontrib/tomwer/widgets/control/DataSelectorOW.py +21 -10
- orangecontrib/tomwer/widgets/control/DataValidatorOW.py +6 -6
- orangecontrib/tomwer/widgets/control/EDF2NXTomomillOW.py +24 -7
- orangecontrib/tomwer/widgets/control/EmailOW.py +4 -4
- orangecontrib/tomwer/widgets/control/NXTomomillMixIn.py +3 -3
- orangecontrib/tomwer/widgets/control/NXTomomillOW.py +64 -23
- orangecontrib/tomwer/widgets/control/NXtomoConcatenate.py +20 -8
- orangecontrib/tomwer/widgets/control/NotifierOW.py +1 -0
- orangecontrib/tomwer/widgets/control/SingleTomoObjOW.py +6 -6
- orangecontrib/tomwer/widgets/control/VolumeSelector.py +7 -4
- orangecontrib/tomwer/widgets/control/VolumeSymLinkOW.py +182 -182
- orangecontrib/tomwer/widgets/debugtools/DatasetGeneratorOW.py +5 -5
- orangecontrib/tomwer/widgets/edit/DarkFlatPatchOW.py +4 -4
- orangecontrib/tomwer/widgets/edit/ImageKeyEditorOW.py +3 -3
- orangecontrib/tomwer/widgets/edit/ImageKeyUpgraderOW.py +8 -1
- 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 +22 -20
- orangecontrib/tomwer/widgets/reconstruction/CastNabuVolumeOW.py +19 -3
- orangecontrib/tomwer/widgets/reconstruction/NabuHelicalPrepareWeightsDoubleOW.py +184 -169
- orangecontrib/tomwer/widgets/reconstruction/NabuOW.py +23 -0
- orangecontrib/tomwer/widgets/reconstruction/NabuVolumeOW.py +39 -5
- orangecontrib/tomwer/widgets/reconstruction/SAAxisOW.py +18 -22
- orangecontrib/tomwer/widgets/reconstruction/SADeltaBetaOW.py +18 -26
- orangecontrib/tomwer/widgets/reconstruction/SinoNormOW.py +15 -19
- orangecontrib/tomwer/widgets/visualization/DataViewerOW.py +9 -9
- orangecontrib/tomwer/widgets/visualization/DiffViewerOW.py +1 -1
- orangecontrib/tomwer/widgets/visualization/LivesliceOW.py +1 -1
- orangecontrib/tomwer/widgets/visualization/NXtomoMetadataViewerOW.py +3 -3
- orangecontrib/tomwer/widgets/visualization/SinogramViewerOW.py +0 -1
- orangecontrib/tomwer/widgets/visualization/VolumeViewerOW.py +3 -29
- tomwer/__main__.py +7 -64
- tomwer/app/axis.py +3 -3
- tomwer/app/canvas.py +8 -0
- tomwer/app/canvas_launcher/config.py +16 -14
- tomwer/app/canvas_launcher/environ.py +1 -0
- tomwer/app/canvas_launcher/mainwindow.py +4 -1
- tomwer/app/darkref.py +1 -1
- tomwer/app/darkrefpatch.py +1 -1
- tomwer/app/diffframe.py +3 -3
- tomwer/app/imagekeyeditor.py +5 -5
- tomwer/app/imagekeyupgrader.py +5 -5
- tomwer/app/intensitynormalization.py +14 -13
- tomwer/app/{saaxis.py → multicor.py} +3 -3
- tomwer/app/{sadeltabeta.py → multipag.py} +3 -3
- tomwer/app/nabuapp.py +0 -11
- tomwer/app/radiostack.py +6 -4
- tomwer/app/samplemoved.py +3 -2
- tomwer/app/scanviewer.py +4 -2
- tomwer/app/sinogramviewer.py +3 -2
- tomwer/app/slicestack.py +3 -2
- tomwer/app/zstitching.py +88 -6
- 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 +19 -14
- tomwer/core/process/control/datawatcher/edfdwprocess.py +0 -9
- tomwer/core/process/control/nxtomoconcatenate.py +13 -13
- tomwer/core/process/control/nxtomomill.py +92 -34
- tomwer/core/process/control/scantransfer.py +20 -43
- 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 +14 -15
- tomwer/core/process/edit/imagekeyeditor.py +41 -39
- 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 +27 -0
- tomwer/core/process/output.py +52 -0
- tomwer/core/process/reconstruction/axis/axis.py +280 -69
- tomwer/core/process/reconstruction/axis/mode.py +163 -48
- tomwer/core/process/reconstruction/axis/params.py +29 -21
- tomwer/core/process/reconstruction/darkref/darkrefs.py +41 -127
- tomwer/core/process/reconstruction/darkref/darkrefscopy.py +4 -3
- tomwer/core/process/reconstruction/darkref/params.py +1 -1
- tomwer/core/process/reconstruction/nabu/castvolume.py +4 -4
- tomwer/core/process/reconstruction/nabu/helical.py +9 -5
- tomwer/core/process/reconstruction/nabu/nabucommon.py +71 -78
- tomwer/core/process/reconstruction/nabu/nabuscores.py +425 -53
- tomwer/core/process/reconstruction/nabu/nabuslices.py +114 -93
- tomwer/core/process/reconstruction/nabu/nabuvolume.py +54 -27
- tomwer/core/process/reconstruction/nabu/plane.py +9 -0
- tomwer/core/process/reconstruction/nabu/settings.py +2 -2
- tomwer/core/process/reconstruction/nabu/utils.py +164 -26
- tomwer/core/process/reconstruction/output.py +108 -0
- tomwer/core/process/reconstruction/saaxis/saaxis.py +238 -264
- tomwer/core/process/reconstruction/sadeltabeta/sadeltabeta.py +151 -87
- tomwer/core/process/reconstruction/scores/params.py +7 -4
- 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 +7 -7
- 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 +13 -12
- tomwer/core/process/task.py +34 -26
- tomwer/core/process/test/test_axis.py +13 -12
- tomwer/core/process/test/test_dark_and_flat.py +10 -7
- tomwer/core/process/test/test_data_transfer.py +10 -8
- tomwer/core/process/test/test_nabu.py +14 -6
- tomwer/core/process/test/test_normalization.py +4 -4
- tomwer/core/scan/blissscan.py +3 -3
- tomwer/core/scan/edfscan.py +13 -10
- tomwer/core/scan/hdf5scan.py +19 -530
- tomwer/core/scan/nxtomoscan.py +534 -0
- tomwer/core/scan/scanbase.py +72 -44
- tomwer/core/scan/scanfactory.py +13 -13
- tomwer/core/scan/test/test_edf.py +2 -2
- tomwer/core/scan/test/test_future_scan.py +3 -3
- tomwer/core/scan/test/test_h5.py +18 -16
- tomwer/core/scan/test/test_process_registration.py +4 -40
- tomwer/core/scan/test/test_scan.py +5 -78
- tomwer/core/settings.py +22 -2
- tomwer/core/test/test_scanutils.py +8 -7
- tomwer/core/test/test_utils.py +35 -28
- tomwer/core/tomwer_object.py +1 -1
- 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/edfvolume.py +6 -6
- tomwer/core/volume/hdf5volume.py +6 -6
- tomwer/core/volume/jp2kvolume.py +6 -6
- tomwer/core/volume/rawvolume.py +6 -6
- tomwer/core/volume/tiffvolume.py +12 -12
- tomwer/core/volume/volumefactory.py +2 -2
- tomwer/gui/cluster/slurm.py +274 -65
- tomwer/gui/cluster/supervisor.py +12 -0
- tomwer/gui/cluster/test/test_cluster.py +14 -2
- tomwer/gui/cluster/test/test_supervisor.py +3 -3
- 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 +83 -16
- tomwer/gui/control/datalistener.py +4 -16
- tomwer/gui/control/datawatcher/controlwidget.py +2 -4
- tomwer/gui/control/datawatcher/datawatcher.py +1 -24
- 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 +9 -9
- 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 +3 -3
- tomwer/gui/control/tomoobjdisplaymode.py +8 -0
- tomwer/gui/debugtools/datasetgenerator.py +3 -3
- tomwer/gui/edit/dkrfpatch.py +20 -26
- tomwer/gui/edit/imagekeyeditor.py +11 -12
- tomwer/gui/edit/nxtomoeditor.py +111 -44
- tomwer/gui/edit/nxtomowarmer.py +7 -6
- tomwer/gui/edit/test/test_dkrf_patch.py +13 -13
- 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/imagefromfile.py +2 -2
- tomwer/gui/qfolderdialog.py +24 -1
- tomwer/gui/reconstruction/axis/CompareImages.py +88 -168
- tomwer/gui/reconstruction/axis/axis.py +171 -57
- tomwer/gui/reconstruction/axis/radioaxis.py +122 -257
- tomwer/gui/reconstruction/darkref/darkrefcopywidget.py +3 -2
- tomwer/gui/reconstruction/darkref/darkrefwidget.py +2 -1
- tomwer/gui/reconstruction/nabu/castvolume.py +14 -3
- 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/nabuconfig.py +2 -1
- tomwer/gui/reconstruction/nabu/nabuconfig/output.py +126 -35
- tomwer/gui/reconstruction/nabu/nabuconfig/phase.py +39 -32
- tomwer/gui/reconstruction/nabu/nabuconfig/preprocessing.py +222 -31
- tomwer/gui/reconstruction/nabu/nabuconfig/reconstruction.py +57 -27
- tomwer/gui/reconstruction/nabu/nabuflow.py +12 -20
- tomwer/gui/reconstruction/nabu/slices.py +10 -11
- tomwer/gui/reconstruction/nabu/volume.py +22 -10
- tomwer/gui/reconstruction/normalization/intensity.py +18 -48
- tomwer/gui/reconstruction/saaxis/corrangeselector.py +8 -24
- tomwer/gui/reconstruction/saaxis/dimensionwidget.py +1 -1
- tomwer/gui/reconstruction/saaxis/saaxis.py +9 -21
- tomwer/gui/reconstruction/sadeltabeta/saadeltabeta.py +45 -12
- tomwer/gui/reconstruction/scores/control.py +2 -9
- tomwer/gui/reconstruction/scores/scoreplot.py +13 -11
- tomwer/gui/reconstruction/test/test_axis.py +41 -16
- tomwer/gui/reconstruction/test/test_nabu.py +31 -9
- tomwer/gui/reconstruction/test/test_saaxis.py +3 -3
- tomwer/gui/reconstruction/test/test_sadeltabeta.py +12 -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 +267 -45
- tomwer/gui/stitching/stitching_preview.py +62 -55
- tomwer/gui/stitching/stitching_raw.py +13 -12
- tomwer/gui/stitching/z_stitching/fineestimation.py +0 -60
- tomwer/gui/utils/buttons.py +112 -29
- tomwer/gui/utils/inputwidget.py +43 -25
- tomwer/gui/utils/lineselector/lineselector.py +1 -1
- 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 +48 -35
- 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 +20 -36
- 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 +65 -67
- tomwer/gui/visualization/volumeviewer.py +114 -113
- tomwer/io/utils/h5pyutils.py +3 -3
- tomwer/io/utils/raw_and_processed_data.py +84 -0
- tomwer/io/utils/tomoobj.py +4 -6
- tomwer/io/utils/utils.py +7 -7
- tomwer/resources/gui/icons/parameters.svg +1 -1
- 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/resources/gui/illustrations/no_rot.svg +1 -1
- tomwer/synctools/stacks/edit/darkflatpatch.py +19 -14
- tomwer/synctools/stacks/edit/imagekeyeditor.py +2 -2
- tomwer/synctools/stacks/reconstruction/axis.py +4 -4
- tomwer/synctools/stacks/reconstruction/castvolume.py +22 -7
- tomwer/synctools/stacks/reconstruction/dkrefcopy.py +25 -20
- 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 +91 -41
- tomwer/tests/utils.py +5 -0
- tomwer/third_part/WaitingOverlay.py +110 -0
- tomwer/third_part/__init__.py +0 -0
- tomwer/version.py +2 -2
- tomwer-1.3.12-py3.11-nspkg.pth +1 -0
- {tomwer-1.2.1.dist-info → tomwer-1.3.12.dist-info}/METADATA +73 -58
- {tomwer-1.2.1.dist-info → tomwer-1.3.12.dist-info}/RECORD +287 -286
- {tomwer-1.2.1.dist-info → tomwer-1.3.12.dist-info}/WHEEL +1 -1
- orangecontrib/tomwer/widgets/reconstruction/TofuOW.py +0 -197
- orangecontrib/tomwer/widgets/reconstruction/icons/XY_lamino.svg +0 -168
- orangecontrib/tomwer/widgets/reconstruction/icons/XZ_lamino.svg +0 -275
- orangecontrib/tomwer/widgets/reconstruction/icons/YZ_lamino.svg +0 -182
- tomwer/app/lamino.py +0 -143
- tomwer/core/process/reconstruction/lamino/__init__.py +0 -1
- tomwer/core/process/reconstruction/lamino/tofu.py +0 -1000
- tomwer/core/process/test/test_lamino.py +0 -76
- tomwer/core/test/test_lamino.py +0 -92
- tomwer/gui/reconstruction/lamino/__init__.py +0 -31
- tomwer/gui/reconstruction/lamino/tofu/TofuOptionLoader.py +0 -107
- tomwer/gui/reconstruction/lamino/tofu/__init__.py +0 -1
- tomwer/gui/reconstruction/lamino/tofu/misc.py +0 -148
- tomwer/gui/reconstruction/lamino/tofu/projections.py +0 -896
- tomwer/gui/reconstruction/lamino/tofu/settings.py +0 -75
- tomwer/gui/reconstruction/lamino/tofu/tofu.py +0 -432
- tomwer/gui/reconstruction/lamino/tofu/tofuexpert.py +0 -567
- tomwer/gui/reconstruction/lamino/tofu/tofuoutput.py +0 -760
- tomwer/gui/reconstruction/test/test_lamino.py +0 -189
- tomwer/resources/gui/icons/esrf_1.svg +0 -307
- tomwer/resources/gui/icons/lamino_parameters.svg +0 -70
- tomwer/resources/gui/icons/triangle.svg +0 -80
- tomwer/resources/gui/illustrations/lamino_angle.png +0 -0
- tomwer/resources/gui/illustrations/lamino_angle.svg +0 -509
- tomwer/resources/gui/illustrations/lamino_beta_angle.png +0 -0
- tomwer/resources/gui/illustrations/lamino_beta_angle.svg +0 -97
- tomwer/resources/gui/illustrations/lamino_theta_angle.png +0 -0
- tomwer/resources/gui/illustrations/lamino_theta_angle.svg +0 -368
- tomwer/resources/gui/illustrations/manual_slice.png +0 -0
- tomwer/resources/gui/illustrations/manual_slice.svg +0 -221
- tomwer/resources/gui/illustrations/psi_angle.png +0 -0
- tomwer/resources/gui/illustrations/psi_angle.svg +0 -479
- tomwer/resources/gui/illustrations/rotation_center.png +0 -0
- tomwer/resources/gui/illustrations/rotation_center.svg +0 -276
- tomwer/resources/gui/illustrations/slice_stack.png +0 -0
- tomwer/resources/gui/illustrations/slice_stack.svg +0 -266
- tomwer/resources/gui/illustrations/xy_slice.png +0 -0
- tomwer/resources/gui/illustrations/xy_slice.svg +0 -269
- tomwer/resources/gui/illustrations/xz_slice.png +0 -0
- tomwer/resources/gui/illustrations/xz_slice.svg +0 -270
- tomwer/resources/gui/illustrations/yz_slice.png +0 -0
- tomwer/resources/gui/illustrations/yz_slice.svg +0 -270
- tomwer/synctools/stacks/reconstruction/lamino.py +0 -233
- tomwer/synctools/test/test_scanstages.py +0 -162
- tomwer/tests/utils/__init__.py +0 -247
- tomwer/tests/utils/utilstest.py +0 -220
- tomwer-1.2.1-py3.11-nspkg.pth +0 -1
- /tomwer/core/process/control/{email.py → emailnotifier.py} +0 -0
- {tomwer-1.2.1.dist-info → tomwer-1.3.12.dist-info}/LICENSE +0 -0
- {tomwer-1.2.1.dist-info → tomwer-1.3.12.dist-info}/entry_points.txt +0 -0
- {tomwer-1.2.1.dist-info → tomwer-1.3.12.dist-info}/namespace_packages.txt +0 -0
- {tomwer-1.2.1.dist-info → tomwer-1.3.12.dist-info}/top_level.txt +0 -0
@@ -1,33 +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__ = "15/10/2019"
|
29
|
-
|
30
|
-
|
31
1
|
import logging
|
32
2
|
|
33
3
|
from silx.utils.enum import Enum as _Enum
|
@@ -35,6 +5,55 @@ from silx.utils.enum import Enum as _Enum
|
|
35
5
|
_logger = logging.getLogger(__name__)
|
36
6
|
|
37
7
|
|
8
|
+
class AxisModeMetadata:
|
9
|
+
"""
|
10
|
+
Util class to store metadata regarding processing of a mode.
|
11
|
+
|
12
|
+
Ease processing and display
|
13
|
+
Maybe this function should be part of nabu ?
|
14
|
+
"""
|
15
|
+
|
16
|
+
def __init__(
|
17
|
+
self,
|
18
|
+
lockable,
|
19
|
+
tooltip="",
|
20
|
+
computing_constrains=(),
|
21
|
+
allows_padding=False,
|
22
|
+
valid_inputs=(),
|
23
|
+
valid_sides=(),
|
24
|
+
) -> None:
|
25
|
+
self._lockable = lockable
|
26
|
+
self._tooltip = tooltip
|
27
|
+
self._computing_constrains = computing_constrains
|
28
|
+
self._allows_padding = allows_padding
|
29
|
+
self._valid_inputs = valid_inputs
|
30
|
+
self._valid_sides = valid_sides
|
31
|
+
|
32
|
+
@property
|
33
|
+
def is_lockable(self) -> bool:
|
34
|
+
return self._lockable
|
35
|
+
|
36
|
+
@property
|
37
|
+
def tooltip(self) -> str:
|
38
|
+
return self._tooltip
|
39
|
+
|
40
|
+
@property
|
41
|
+
def computing_constrains(self) -> tuple:
|
42
|
+
return self._computing_constrains
|
43
|
+
|
44
|
+
@property
|
45
|
+
def allows_padding(self) -> bool:
|
46
|
+
return self._allows_padding
|
47
|
+
|
48
|
+
@property
|
49
|
+
def valid_inputs(self) -> tuple:
|
50
|
+
return self._valid_inputs
|
51
|
+
|
52
|
+
@property
|
53
|
+
def valid_sides(self) -> tuple:
|
54
|
+
return self._valid_sides
|
55
|
+
|
56
|
+
|
38
57
|
class _InputType(_Enum):
|
39
58
|
SINOGRAM = "sinogram"
|
40
59
|
RADIOS_X2 = "2 radios"
|
@@ -55,7 +74,11 @@ class AxisMode(_Enum):
|
|
55
74
|
sliding_window_radios = "radios-sliding-window"
|
56
75
|
sino_coarse_to_fine = "sino-coarse-to-fine"
|
57
76
|
composite_coarse_to_fine = "composite-coarse-to-fine"
|
77
|
+
sino_fourier_angles = "sino-fourier-angles"
|
78
|
+
octave_accurate_radios = "radios-octave-accurate"
|
58
79
|
read = "read"
|
80
|
+
# alias to composite_coarse_to_fine with near mode
|
81
|
+
near = "near"
|
59
82
|
|
60
83
|
@classmethod
|
61
84
|
def from_value(cls, value):
|
@@ -74,22 +97,114 @@ class AxisMode(_Enum):
|
|
74
97
|
return super().from_value(value=value)
|
75
98
|
|
76
99
|
|
77
|
-
|
78
|
-
|
79
|
-
AxisMode.
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
100
|
+
AXIS_MODE_METADATAS = {
|
101
|
+
# manual
|
102
|
+
AxisMode.manual: AxisModeMetadata(
|
103
|
+
lockable=False,
|
104
|
+
tooltip="Enter or find manually the COR value",
|
105
|
+
computing_constrains=(),
|
106
|
+
allows_padding=False,
|
107
|
+
valid_inputs=(_InputType.RADIOS_X2,),
|
108
|
+
),
|
109
|
+
# read
|
110
|
+
AxisMode.read: AxisModeMetadata(
|
111
|
+
lockable=False,
|
112
|
+
tooltip="Read COR value from a file",
|
113
|
+
computing_constrains=(),
|
114
|
+
allows_padding=False,
|
115
|
+
valid_inputs=None,
|
116
|
+
),
|
117
|
+
# radio algorithm
|
118
|
+
AxisMode.centered: AxisModeMetadata(
|
119
|
+
lockable=True,
|
120
|
+
tooltip="Dedicated to fullfield. Previously named 'accurate'",
|
121
|
+
computing_constrains=(),
|
122
|
+
allows_padding=True,
|
123
|
+
valid_inputs=(_InputType.RADIOS_X2,),
|
124
|
+
),
|
125
|
+
AxisMode.global_: AxisModeMetadata(
|
126
|
+
lockable=True,
|
127
|
+
tooltip="Algorithm which can work for both half acquisition and standard ('full field') acquisition",
|
128
|
+
computing_constrains=(),
|
129
|
+
allows_padding=True,
|
130
|
+
valid_inputs=(_InputType.RADIOS_X2,),
|
131
|
+
),
|
132
|
+
AxisMode.growing_window_radios: AxisModeMetadata(
|
133
|
+
lockable=True,
|
134
|
+
tooltip="A auto-Cor method",
|
135
|
+
computing_constrains=(),
|
136
|
+
allows_padding=True,
|
137
|
+
valid_inputs=(_InputType.RADIOS_X2,),
|
138
|
+
valid_sides=("left", "right", "center", "all"),
|
139
|
+
),
|
140
|
+
AxisMode.sliding_window_radios: AxisModeMetadata(
|
141
|
+
lockable=True,
|
142
|
+
tooltip="A method for estimating semi-automatically the CoR position. You have to provide a hint on where the CoR is (left, center, right).",
|
143
|
+
computing_constrains=(),
|
144
|
+
allows_padding=True,
|
145
|
+
valid_inputs=(_InputType.RADIOS_X2,),
|
146
|
+
valid_sides=("left", "right", "center", "near"),
|
147
|
+
),
|
148
|
+
AxisMode.octave_accurate_radios: AxisModeMetadata(
|
149
|
+
lockable=True,
|
150
|
+
tooltip="Same method as the 'accurate' octave code",
|
151
|
+
computing_constrains=(),
|
152
|
+
allows_padding=True,
|
153
|
+
valid_inputs=(_InputType.RADIOS_X2,),
|
154
|
+
valid_sides=("center",),
|
155
|
+
),
|
156
|
+
# sinogram algorithm
|
157
|
+
AxisMode.growing_window_sinogram: AxisModeMetadata(
|
158
|
+
lockable=True,
|
159
|
+
tooltip="A auto-Cor method",
|
160
|
+
computing_constrains=(),
|
161
|
+
allows_padding=True,
|
162
|
+
valid_inputs=(_InputType.SINOGRAM,),
|
163
|
+
valid_sides=("left", "right", "center", "all"),
|
164
|
+
),
|
165
|
+
AxisMode.sliding_window_sinogram: AxisModeMetadata(
|
166
|
+
lockable=True,
|
167
|
+
tooltip="A method for estimating semi-automatically the CoR position. You have to provide a hint on where the CoR is (left, center, right).",
|
168
|
+
computing_constrains=(),
|
169
|
+
allows_padding=True,
|
170
|
+
valid_inputs=(_InputType.SINOGRAM,),
|
171
|
+
valid_sides=("left", "right", "center", "near"),
|
172
|
+
),
|
173
|
+
AxisMode.sino_coarse_to_fine: AxisModeMetadata(
|
174
|
+
lockable=True,
|
175
|
+
tooltip="Estimate CoR from sinogram. Only works for 360 degrees scans.",
|
176
|
+
computing_constrains=(_Constrain.FULL_TURN,),
|
177
|
+
allows_padding=True,
|
178
|
+
valid_inputs=(_InputType.SINOGRAM,),
|
179
|
+
),
|
180
|
+
AxisMode.sino_fourier_angles: AxisModeMetadata(
|
181
|
+
lockable=True,
|
182
|
+
tooltip="",
|
183
|
+
computing_constrains=(_Constrain.FULL_TURN,),
|
184
|
+
allows_padding=True,
|
185
|
+
valid_inputs=(_InputType.SINOGRAM,),
|
186
|
+
valid_sides=(
|
187
|
+
"left",
|
188
|
+
"right",
|
189
|
+
"center",
|
190
|
+
"near",
|
191
|
+
),
|
192
|
+
),
|
193
|
+
# coarse-to-fine algorithm
|
194
|
+
AxisMode.composite_coarse_to_fine: AxisModeMetadata(
|
195
|
+
lockable=True,
|
196
|
+
tooltip="A auto-Cor method",
|
197
|
+
computing_constrains=(_Constrain.FULL_TURN,),
|
198
|
+
allows_padding=True,
|
199
|
+
valid_inputs=(_InputType.COMPOSITE,),
|
200
|
+
valid_sides=("left", "right", "center", "near"),
|
201
|
+
),
|
202
|
+
AxisMode.near: AxisModeMetadata(
|
203
|
+
lockable=True,
|
204
|
+
tooltip="Alias to composite_coarse_to_fine",
|
205
|
+
computing_constrains=(_Constrain.FULL_TURN,),
|
206
|
+
allows_padding=True,
|
207
|
+
valid_inputs=(_InputType.COMPOSITE,),
|
208
|
+
valid_sides=("left", "right", "center", "near"),
|
209
|
+
),
|
95
210
|
}
|
@@ -42,10 +42,10 @@ from tomoscan.esrf.scan.utils import get_data
|
|
42
42
|
|
43
43
|
from tomwer.core.process.task import Task
|
44
44
|
from tomwer.core.scan.scanbase import TomwerScanBase
|
45
|
-
from tomwer.core.utils import getParametersFromParOrInfo
|
45
|
+
from tomwer.core.utils.spec import getParametersFromParOrInfo
|
46
46
|
|
47
47
|
from .anglemode import CorAngleMode
|
48
|
-
from .mode import AxisMode
|
48
|
+
from .mode import AxisMode, AXIS_MODE_METADATAS
|
49
49
|
from .projectiontype import ProjectionType
|
50
50
|
|
51
51
|
from nabu.preproc.phase import PaganinPhaseRetrieval
|
@@ -160,9 +160,9 @@ class AxisResource(object):
|
|
160
160
|
else:
|
161
161
|
self.__norme_data = scan.data_flat_field_correction(data=self.data)
|
162
162
|
if log_ is True:
|
163
|
-
self.__norme_data[
|
164
|
-
|
165
|
-
|
163
|
+
self.__norme_data[numpy.isnan(self.__norme_data)] = (
|
164
|
+
self.__norme_data.max()
|
165
|
+
)
|
166
166
|
if self.__norme_data.max() < 0:
|
167
167
|
_logger.error("max data value < 0 unable to compute log")
|
168
168
|
else:
|
@@ -173,9 +173,9 @@ class AxisResource(object):
|
|
173
173
|
except Exception as e:
|
174
174
|
_logger.error("Fail to apply log on radio" + e)
|
175
175
|
else:
|
176
|
-
self.__norme_data[
|
177
|
-
|
178
|
-
|
176
|
+
self.__norme_data[numpy.isnan(self.__norme_data)] = (
|
177
|
+
self.__norme_data.min()
|
178
|
+
)
|
179
179
|
|
180
180
|
return self.__norme_data
|
181
181
|
|
@@ -885,6 +885,9 @@ class AxisRP:
|
|
885
885
|
pass
|
886
886
|
|
887
887
|
def get_simple_str(self):
|
888
|
+
"""
|
889
|
+
special information as a str for mode able to handle both sinogram and radios
|
890
|
+
"""
|
888
891
|
results = f"{self.mode.value}"
|
889
892
|
if self.mode in (
|
890
893
|
AxisMode.growing_window_radios,
|
@@ -898,18 +901,20 @@ class AxisRP:
|
|
898
901
|
|
899
902
|
def get_nabu_cor_options_as_dict(self) -> str:
|
900
903
|
options = {}
|
901
|
-
if self.mode
|
902
|
-
|
903
|
-
|
904
|
-
|
905
|
-
|
906
|
-
|
907
|
-
|
908
|
-
|
909
|
-
|
904
|
+
if self.mode is AxisMode.near:
|
905
|
+
self.side = "near"
|
906
|
+
request_side = len(AXIS_MODE_METADATAS[self.mode].valid_sides) > 0
|
907
|
+
if request_side:
|
908
|
+
|
909
|
+
if self.side == "near":
|
910
|
+
options["side"] = self.composite_options.get(
|
911
|
+
"near_pos", self.estimated_cor
|
912
|
+
)
|
913
|
+
else:
|
914
|
+
options["side"] = self.side
|
915
|
+
|
916
|
+
if self.side == "near":
|
910
917
|
near_width = self.composite_options.get("near_width", 20.0)
|
911
|
-
options["side"] = self.side
|
912
|
-
options["near_pos"] = near_pos
|
913
918
|
options["near_width"] = near_width
|
914
919
|
|
915
920
|
# append "extra_cor_options" to already handled cor options
|
@@ -917,8 +922,11 @@ class AxisRP:
|
|
917
922
|
|
918
923
|
if extra_cor_options != "":
|
919
924
|
for opt in self.extra_cor_options.replace(" ", "").split(";"):
|
920
|
-
|
921
|
-
|
925
|
+
if len(opt.split("=")) == 2:
|
926
|
+
key, value = opt.split("=")
|
927
|
+
options[key] = value
|
928
|
+
else:
|
929
|
+
_logger.info(f"ignore option {opt}. Invalid synthax")
|
922
930
|
return options
|
923
931
|
|
924
932
|
@deprecated(replacement="get_nabu_cor_options_as_str", since_version="1.1")
|
@@ -37,17 +37,16 @@ from queue import Queue
|
|
37
37
|
|
38
38
|
from processview.core.manager import DatasetState, ProcessManager
|
39
39
|
from processview.core.superviseprocess import SuperviseProcess
|
40
|
-
from
|
41
|
-
from silx.io.utils import h5py_read_dataset
|
42
|
-
from silx.utils.deprecation import deprecated_warning
|
40
|
+
from tomwer.core.utils.deprecation import deprecated_warning
|
43
41
|
|
44
|
-
from tomoscan.
|
45
|
-
from tomoscan.
|
42
|
+
from tomoscan.framereducer.target import REDUCER_TARGET
|
43
|
+
from tomoscan.framereducer.method import ReduceMethod
|
46
44
|
|
47
45
|
import tomwer.version
|
48
|
-
from tomwer.core import settings
|
46
|
+
from tomwer.core import settings
|
47
|
+
from tomwer.core.utils.lbsram import is_low_on_memory
|
49
48
|
from tomwer.core.process.task import Task
|
50
|
-
from tomwer.core.scan.
|
49
|
+
from tomwer.core.scan.nxtomoscan import NXtomoScan
|
51
50
|
from tomwer.core.scan.scanbase import TomwerScanBase
|
52
51
|
from tomwer.core.scan.scanfactory import ScanFactory
|
53
52
|
from tomwer.core.utils.scanutils import data_identifier_to_scan
|
@@ -241,57 +240,13 @@ class DarkRefsTask(
|
|
241
240
|
:return: dictionary with index in the sequence as key and numpy array
|
242
241
|
as value (or url if as_url set to True)
|
243
242
|
"""
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
return None
|
252
|
-
elif len(entries) > 1:
|
253
|
-
raise ValueError("several entry found, entry should be " "specify")
|
254
|
-
else:
|
255
|
-
entry = list(entries.keys())[0]
|
256
|
-
logger.info("take %s as default entry" % entry)
|
257
|
-
|
258
|
-
with HDF5File(process_file, "r", swmr=True) as h5f:
|
259
|
-
if entry not in h5f.keys():
|
260
|
-
logger.info(f"no dark found for {entry}")
|
261
|
-
return {}
|
262
|
-
dark_nodes = DarkRefsTask._get_process_nodes(
|
263
|
-
root_node=h5f[entry], process=DarkRefsTask
|
264
|
-
)
|
265
|
-
index_to_path = {}
|
266
|
-
for key, index in dark_nodes.items():
|
267
|
-
index_to_path[index] = key
|
268
|
-
|
269
|
-
if len(dark_nodes) == 0:
|
270
|
-
return {}
|
271
|
-
# take the last processed dark ref
|
272
|
-
last_process_index = sorted(list(dark_nodes.values()))[-1]
|
273
|
-
last_process_dark = index_to_path[last_process_index]
|
274
|
-
if (len(index_to_path)) > 1:
|
275
|
-
logger.debug(
|
276
|
-
"several processing found for dark-ref,"
|
277
|
-
"take the last one: %s" % last_process_dark
|
278
|
-
)
|
279
|
-
|
280
|
-
res = {}
|
281
|
-
if "results" in h5f[last_process_dark].keys():
|
282
|
-
results_node = h5f[last_process_dark]["results"]
|
283
|
-
if "darks" in results_node.keys():
|
284
|
-
darks = results_node["darks"]
|
285
|
-
for index in darks:
|
286
|
-
if as_url is True:
|
287
|
-
res[int(index)] = DataUrl(
|
288
|
-
file_path=process_file,
|
289
|
-
data_path="/".join((darks.name, index)),
|
290
|
-
scheme="silx",
|
291
|
-
)
|
292
|
-
else:
|
293
|
-
res[int(index)] = h5py_read_dataset(darks[index])
|
294
|
-
return res
|
243
|
+
deprecated_warning(
|
244
|
+
name="tomwer.core.process.reconstruction.darkref.DarkRefsTask.get_darks_frm_process_file",
|
245
|
+
type_="function",
|
246
|
+
reason="removed. Reduced dark / flat are expected to be stored on didicated files and not in tomwer_processes anymore",
|
247
|
+
since_version="1.2",
|
248
|
+
)
|
249
|
+
return None
|
295
250
|
|
296
251
|
@staticmethod
|
297
252
|
def get_flats_frm_process_file(
|
@@ -305,57 +260,13 @@ class DarkRefsTask(
|
|
305
260
|
numpy.array
|
306
261
|
:return:
|
307
262
|
"""
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
return None
|
316
|
-
elif len(entries) > 1:
|
317
|
-
raise ValueError("several entry found, entry should be " "specify")
|
318
|
-
else:
|
319
|
-
entry = list(entries.keys())[0]
|
320
|
-
logger.info("take %s as default entry" % entry)
|
321
|
-
|
322
|
-
with HDF5File(process_file, "r", swmr=True) as h5f:
|
323
|
-
if entry not in h5f.keys():
|
324
|
-
logger.info(f"no flats found for {entry}")
|
325
|
-
return {}
|
326
|
-
dkref_nodes = DarkRefsTask._get_process_nodes(
|
327
|
-
root_node=h5f[entry], process=DarkRefsTask
|
328
|
-
)
|
329
|
-
index_to_path = {}
|
330
|
-
for key, index in dkref_nodes.items():
|
331
|
-
index_to_path[index] = key
|
332
|
-
|
333
|
-
if len(dkref_nodes) == 0:
|
334
|
-
return {}
|
335
|
-
# take the last processed dark ref
|
336
|
-
last_process_index = sorted(dkref_nodes.values())[-1]
|
337
|
-
last_process_dkrf = index_to_path[last_process_index]
|
338
|
-
if (len(index_to_path)) > 1:
|
339
|
-
logger.debug(
|
340
|
-
"several processing found for dark-ref,"
|
341
|
-
f"take the last one: {last_process_dkrf}"
|
342
|
-
)
|
343
|
-
|
344
|
-
res = {}
|
345
|
-
if "results" in h5f[last_process_dkrf].keys():
|
346
|
-
results_node = h5f[last_process_dkrf]["results"]
|
347
|
-
if "flats" in results_node.keys():
|
348
|
-
flats = results_node["flats"]
|
349
|
-
for index in flats:
|
350
|
-
if as_url is True:
|
351
|
-
res[int(index)] = DataUrl(
|
352
|
-
file_path=process_file,
|
353
|
-
data_path="/".join((flats.name, index)),
|
354
|
-
scheme="silx",
|
355
|
-
)
|
356
|
-
else:
|
357
|
-
res[int(index)] = h5py_read_dataset(flats[index])
|
358
|
-
return res
|
263
|
+
deprecated_warning(
|
264
|
+
name="tomwer.core.process.reconstruction.darkref.DarkRefsTask.get_flats_frm_process_file",
|
265
|
+
type_="function",
|
266
|
+
reason="removed. Reduced dark / flat are expected to be stored on didicated files and not in tomwer_processes anymore",
|
267
|
+
since_version="1.2",
|
268
|
+
)
|
269
|
+
return None
|
359
270
|
|
360
271
|
def run(self):
|
361
272
|
if isinstance(self.inputs.data, str):
|
@@ -393,7 +304,7 @@ class DarkRefsTask(
|
|
393
304
|
logger.processStarted(f"start dark and ref for {scan}")
|
394
305
|
if (
|
395
306
|
settings.isOnLbsram(scan)
|
396
|
-
and
|
307
|
+
and is_low_on_memory(settings.get_lbsram_path()) is True
|
397
308
|
):
|
398
309
|
mess = (
|
399
310
|
"low memory, do compute dark and flat field mean/median "
|
@@ -456,13 +367,14 @@ class DarkRefsTask(
|
|
456
367
|
):
|
457
368
|
# cast darks and flats keys from int (index) to str
|
458
369
|
o_darks = scan.reduced_darks
|
370
|
+
o_darks_infos = scan.reduced_darks_infos
|
459
371
|
f_darks = {}
|
460
372
|
for index, data in o_darks.items():
|
461
373
|
f_darks[str(index)] = data
|
462
374
|
interpretations["/".join(("darks", str(index)))] = "image"
|
463
375
|
results["darks"] = f_darks
|
464
376
|
|
465
|
-
scan.save_reduced_darks(f_darks, overwrite=True)
|
377
|
+
scan.save_reduced_darks(f_darks, darks_infos=o_darks_infos, overwrite=True)
|
466
378
|
if (
|
467
379
|
self.recons_params.flat_calc_method
|
468
380
|
is not dkrf_reconsparams.ReduceMethod.NONE
|
@@ -470,33 +382,33 @@ class DarkRefsTask(
|
|
470
382
|
):
|
471
383
|
results["flats"] = scan.reduced_flats
|
472
384
|
o_flats = scan.reduced_flats
|
385
|
+
o_flats_infos = scan.reduced_flats_infos
|
473
386
|
f_flats = {}
|
474
387
|
for index, data in o_flats.items():
|
475
388
|
f_flats[str(index)] = data
|
476
389
|
interpretations["/".join(("flats", str(index)))] = "image"
|
477
390
|
results["flats"] = f_flats
|
478
391
|
|
479
|
-
scan.save_reduced_flats(f_flats, overwrite=True)
|
392
|
+
scan.save_reduced_flats(f_flats, flats_infos=o_flats_infos, overwrite=True)
|
480
393
|
|
481
394
|
if len(results) > 0:
|
482
395
|
# if some processing to be registered
|
483
396
|
if scan.process_file is not None and not (
|
484
|
-
isinstance(scan,
|
397
|
+
isinstance(scan, NXtomoScan) and not self.__new_hdf5_entry_created
|
485
398
|
):
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
logger.processSucceed(f"Dark and ref succeeded for {scan}")
|
399
|
+
entry = "entry"
|
400
|
+
if hasattr(scan, "entry"):
|
401
|
+
entry = scan.entry
|
402
|
+
self.register_process(
|
403
|
+
process_file=scan.process_file,
|
404
|
+
entry=entry,
|
405
|
+
configuration=self.recons_params.to_dict(),
|
406
|
+
results=results,
|
407
|
+
interpretations=interpretations,
|
408
|
+
process_index=scan.pop_process_index(),
|
409
|
+
overwrite=True,
|
410
|
+
)
|
411
|
+
logger.processSucceed(f"Dark and flat reduction succeeded for {scan}")
|
500
412
|
self.notify_to_state_to_managed(
|
501
413
|
dataset=scan, state=DatasetState.SUCCEED, details=None
|
502
414
|
)
|
@@ -529,6 +441,7 @@ class DarkRefsTask(
|
|
529
441
|
return_info=True,
|
530
442
|
)
|
531
443
|
scan.set_reduced_darks(darks=reduced_darks, darks_infos=metadata)
|
444
|
+
|
532
445
|
try:
|
533
446
|
scan.save_reduced_darks(
|
534
447
|
darks=reduced_darks, darks_infos=metadata, overwrite=True
|
@@ -542,6 +455,7 @@ class DarkRefsTask(
|
|
542
455
|
return_info=True,
|
543
456
|
)
|
544
457
|
scan.set_reduced_flats(flats=reduced_flats, flats_infos=metadata)
|
458
|
+
|
545
459
|
try:
|
546
460
|
scan.save_reduced_flats(
|
547
461
|
flats=reduced_flats, flats_infos=metadata, overwrite=True
|
@@ -39,12 +39,13 @@ from typing import Union
|
|
39
39
|
|
40
40
|
from silx.io.dictdump import dicttoh5, h5todict
|
41
41
|
from silx.io.url import DataUrl
|
42
|
+
from silx.io.utils import open as open_hdf5
|
42
43
|
from tomoscan.esrf.scan.utils import (
|
43
44
|
copy_h5_dict_darks_to,
|
44
45
|
copy_h5_dict_flats_to,
|
45
46
|
cwd_context,
|
46
47
|
)
|
47
|
-
from tomoscan.
|
48
|
+
from tomoscan.framereducer.target import REDUCER_TARGET
|
48
49
|
from tomoscan.io import HDF5File
|
49
50
|
|
50
51
|
from tomwer.core.process.reconstruction.darkref.darkrefs import DarkRefsTask
|
@@ -297,7 +298,7 @@ class DarkRefsCopy(DarkRefsTask):
|
|
297
298
|
if not os.path.exists(self._save_file):
|
298
299
|
return False
|
299
300
|
else:
|
300
|
-
with
|
301
|
+
with open_hdf5(self._save_file) as h5f:
|
301
302
|
return self._flats_url.data_path() in h5f
|
302
303
|
|
303
304
|
def has_dark_stored(self) -> bool:
|
@@ -309,7 +310,7 @@ class DarkRefsCopy(DarkRefsTask):
|
|
309
310
|
if not os.path.exists(self._save_file):
|
310
311
|
return False
|
311
312
|
else:
|
312
|
-
with
|
313
|
+
with open_hdf5(self._save_file) as h5f:
|
313
314
|
return self._darks_url.data_path() in h5f
|
314
315
|
|
315
316
|
def contains_dark(self, scan: TomwerScanBase) -> bool:
|
@@ -31,7 +31,7 @@ __date__ = "07/03/2019"
|
|
31
31
|
import enum
|
32
32
|
|
33
33
|
from silx.utils.enum import Enum as _Enum
|
34
|
-
from tomoscan.
|
34
|
+
from tomoscan.framereducer.method import ReduceMethod
|
35
35
|
|
36
36
|
from tomwer.core.process.reconstruction.darkref.settings import (
|
37
37
|
DARKHST_PREFIX,
|
@@ -47,7 +47,7 @@ from tomoscan.volumebase import VolumeBase
|
|
47
47
|
from tomwer.core.cluster.cluster import SlurmClusterConfiguration
|
48
48
|
from tomwer.core.futureobject import FutureTomwerObject
|
49
49
|
from tomwer.core.process.reconstruction.nabu import settings
|
50
|
-
from tomwer.core.process.reconstruction.
|
50
|
+
from tomwer.core.process.reconstruction.output import NabuOutputFileFormat
|
51
51
|
from tomwer.core.process.task import Task
|
52
52
|
from tomwer.core.utils.slurm import get_slurm_script_name
|
53
53
|
from tomwer.core.utils.volumeutils import volume_identifier_to_volume
|
@@ -231,9 +231,9 @@ class CastVolumeTask(
|
|
231
231
|
working_directory, "slurm_scripts", script_name
|
232
232
|
)
|
233
233
|
# for now force job name
|
234
|
-
self._cluster_config[
|
235
|
-
"
|
236
|
-
|
234
|
+
self._cluster_config["job_name"] = (
|
235
|
+
f"tomwer-cast-volume {input_volume.get_identifier().to_str()} to {output_volume.get_identifier().to_str()}"
|
236
|
+
)
|
237
237
|
job = SBatchScriptJob(
|
238
238
|
slurm_config=self._cluster_config,
|
239
239
|
script=(get_command(),),
|