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
@@ -3,6 +3,7 @@ import numpy
|
|
3
3
|
from silx.gui import qt
|
4
4
|
|
5
5
|
from tomwer.gui.stitching.axisorderedlist import AxisOrderedTomoObjsModel
|
6
|
+
from tomwer.gui.utils.step import StepSizeSelectorWidget
|
6
7
|
|
7
8
|
|
8
9
|
class PosEditorOverOneAxis(qt.QWidget):
|
@@ -15,7 +16,6 @@ class PosEditorOverOneAxis(qt.QWidget):
|
|
15
16
|
) -> None:
|
16
17
|
assert axis_edited in (0, 1, 2)
|
17
18
|
super().__init__(parent, *args, **kwargs)
|
18
|
-
self._stepSize = 1
|
19
19
|
self._axisEdited = axis_edited
|
20
20
|
# the axis the spin boxes are editing
|
21
21
|
self._axisOrder = axis_order if axis_order is not None else axis_edited
|
@@ -25,7 +25,13 @@ class PosEditorOverOneAxis(qt.QWidget):
|
|
25
25
|
self.__spinBoxescallback = {}
|
26
26
|
self.setLayout(qt.QVBoxLayout())
|
27
27
|
# widget to define step size
|
28
|
-
self._stepSizeWidget =
|
28
|
+
self._stepSizeWidget = StepSizeSelectorWidget(
|
29
|
+
self,
|
30
|
+
fine_value=1,
|
31
|
+
medium_value=5,
|
32
|
+
rough_value=25,
|
33
|
+
dtype=int,
|
34
|
+
)
|
29
35
|
self.layout().addWidget(self._stepSizeWidget)
|
30
36
|
|
31
37
|
# table with the different Tomo objects
|
@@ -35,22 +41,28 @@ class PosEditorOverOneAxis(qt.QWidget):
|
|
35
41
|
|
36
42
|
self.layout().addWidget(self._tomoObjsTableView)
|
37
43
|
|
44
|
+
# connect signal / slot
|
45
|
+
self._stepSizeWidget.valueChanged.connect(self._updateStepSize)
|
46
|
+
|
38
47
|
# tune table view
|
39
48
|
self._tomoObjsTableView.setColumnWidth(0, 15)
|
40
49
|
self._tomoObjsTableView.setColumnWidth(2, 120)
|
41
50
|
self._tomoObjsTableView.horizontalHeader().setSectionResizeMode(
|
42
51
|
1, qt.QHeaderView.Stretch
|
43
52
|
)
|
53
|
+
self.setStepSize(1)
|
44
54
|
|
45
|
-
|
46
|
-
self.
|
47
|
-
self.
|
55
|
+
def _updateStepSize(self):
|
56
|
+
step_size = self.getStepSize()
|
57
|
+
for sb in self._tomoObjtoSpinBoxes.values():
|
58
|
+
sb.setSingleStep(step_size)
|
48
59
|
|
49
60
|
def setStepSize(self, step_size: int):
|
50
|
-
self.
|
51
|
-
|
52
|
-
|
53
|
-
|
61
|
+
self._stepSizeWidget.setStepSize(step_size)
|
62
|
+
self._updateStepSize()
|
63
|
+
|
64
|
+
def getStepSize(self) -> int:
|
65
|
+
return self._stepSizeWidget.getStepSize()
|
54
66
|
|
55
67
|
def addTomoObj(self, tomo_obj):
|
56
68
|
if tomo_obj is None:
|
@@ -68,7 +80,7 @@ class PosEditorOverOneAxis(qt.QWidget):
|
|
68
80
|
spinBox = qt.QSpinBox(parent=self)
|
69
81
|
spinBox.setRange(numpy.iinfo(numpy.int32).min, numpy.iinfo(numpy.int32).max)
|
70
82
|
spinBox.setSuffix("px")
|
71
|
-
spinBox.setSingleStep(self.
|
83
|
+
spinBox.setSingleStep(self.getStepSize())
|
72
84
|
spinBox.setValue(
|
73
85
|
tomo_obj.stitching_metadata.get_abs_position_px(axis=self._axisEdited)
|
74
86
|
or self.DEFAULT_VALUE_WHEM_MISSING
|
@@ -154,16 +166,3 @@ class EditableAxisOrderedTomoObjsModel(AxisOrderedTomoObjsModel):
|
|
154
166
|
def __init__(self, axis: int, parent=None) -> None:
|
155
167
|
super().__init__(axis, parent)
|
156
168
|
self._headers = ["index", "tomo obj", f"axis {axis} pos (px)"]
|
157
|
-
|
158
|
-
|
159
|
-
class StepSizeWidget(qt.QWidget):
|
160
|
-
def __init__(self, parent=None) -> None:
|
161
|
-
super().__init__(parent)
|
162
|
-
self.setLayout(qt.QFormLayout())
|
163
|
-
self._stepSB = qt.QSpinBox(self)
|
164
|
-
self._stepSB.setRange(1, 9999)
|
165
|
-
self.layout().addRow("step size", self._stepSB)
|
166
|
-
|
167
|
-
@property
|
168
|
-
def stepSB(self):
|
169
|
-
return self._stepSB
|
@@ -0,0 +1,117 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
from silx.gui import qt
|
3
|
+
from nabu.stitching.sample_normalization import (
|
4
|
+
SampleSide as _SampleSide,
|
5
|
+
Method as _SampleNormalizationMethod,
|
6
|
+
)
|
7
|
+
from nabu.stitching import config as _config_stitching
|
8
|
+
from tomwer.gui.utils.qt_utils import block_signals
|
9
|
+
|
10
|
+
|
11
|
+
class NormalizationBySampleGroupBox(qt.QGroupBox):
|
12
|
+
"""
|
13
|
+
Widget to define the normalization to apply to frames"""
|
14
|
+
|
15
|
+
sigConfigChanged = qt.Signal()
|
16
|
+
"""Emit when the configuration is changed"""
|
17
|
+
|
18
|
+
def __init__(self, title: str = "normalization by sample", parent=None):
|
19
|
+
# FIXME: add a way to the user for requesting a view of the region picked ???
|
20
|
+
super().__init__(title, parent)
|
21
|
+
self.setCheckable(True)
|
22
|
+
self.setLayout(qt.QFormLayout())
|
23
|
+
|
24
|
+
# method
|
25
|
+
self._methodCB = qt.QComboBox(self)
|
26
|
+
self._methodCB.addItems(_SampleNormalizationMethod.values())
|
27
|
+
self._methodCB.setCurrentText(_SampleNormalizationMethod.MEDIAN.value)
|
28
|
+
self.layout().addRow("method", self._methodCB)
|
29
|
+
|
30
|
+
# side
|
31
|
+
self._sideCB = qt.QComboBox(self)
|
32
|
+
self._sideCB.addItems(_SampleSide.values())
|
33
|
+
self._sideCB.setCurrentText(_SampleSide.LEFT.value)
|
34
|
+
self.layout().addRow("sampling side", self._sideCB)
|
35
|
+
|
36
|
+
# width
|
37
|
+
self._widthSB = qt.QSpinBox(self)
|
38
|
+
self._widthSB.setRange(1, 9999999)
|
39
|
+
self._widthSB.setValue(30)
|
40
|
+
self._widthSB.setSingleStep(10)
|
41
|
+
self.layout().addRow("sampling width", self._widthSB)
|
42
|
+
|
43
|
+
# margin
|
44
|
+
self._marginSB = qt.QSpinBox(self)
|
45
|
+
self._marginSB.setRange(0, 999999)
|
46
|
+
self._marginSB.setValue(0)
|
47
|
+
self.layout().addRow("sampling margin", self._marginSB)
|
48
|
+
|
49
|
+
# connect signal / slot
|
50
|
+
self._methodCB.currentIndexChanged.connect(self._configChanged)
|
51
|
+
self._sideCB.currentIndexChanged.connect(self._configChanged)
|
52
|
+
self._widthSB.valueChanged.connect(self._configChanged)
|
53
|
+
self._marginSB.valueChanged.connect(self._configChanged)
|
54
|
+
|
55
|
+
def _configChanged(self, *args, **kwargs):
|
56
|
+
self.sigConfigChanged.emit()
|
57
|
+
|
58
|
+
def getMethod(self) -> _SampleNormalizationMethod:
|
59
|
+
return _SampleNormalizationMethod.from_value(self._methodCB.currentText())
|
60
|
+
|
61
|
+
def setMethod(self, method: _SampleNormalizationMethod | str):
|
62
|
+
method = _SampleNormalizationMethod.from_value(method)
|
63
|
+
self._methodCB.setCurrentText(method.value)
|
64
|
+
|
65
|
+
def getSide(self) -> _SampleSide:
|
66
|
+
return _SampleSide.from_value(self._sideCB.currentText())
|
67
|
+
|
68
|
+
def setSide(self, side: _SampleSide):
|
69
|
+
side = _SampleSide.from_value(side)
|
70
|
+
self._sideCB.setCurrentText(side.value)
|
71
|
+
|
72
|
+
def getMargin(self) -> int:
|
73
|
+
return self._marginSB.value()
|
74
|
+
|
75
|
+
def setMargin(self, margin: int):
|
76
|
+
self._marginSB.setValue(int(margin))
|
77
|
+
|
78
|
+
def getWidth(self) -> int:
|
79
|
+
return self._widthSB.value()
|
80
|
+
|
81
|
+
def setWidth(self, width: int):
|
82
|
+
self._widthSB.setValue(int(width))
|
83
|
+
|
84
|
+
def getConfiguration(self) -> dict:
|
85
|
+
return {
|
86
|
+
_config_stitching.NORMALIZATION_BY_SAMPLE_ACTIVE_FIELD: self.isChecked(),
|
87
|
+
_config_stitching.NORMALIZATION_BY_SAMPLE_METHOD: self.getMethod().value,
|
88
|
+
_config_stitching.NORMALIZATION_BY_SAMPLE_SIDE: self.getSide().value,
|
89
|
+
_config_stitching.NORMALIZATION_BY_SAMPLE_MARGIN: self.getMargin(),
|
90
|
+
_config_stitching.NORMALIZATION_BY_SAMPLE_WIDTH: self.getWidth(),
|
91
|
+
}
|
92
|
+
|
93
|
+
def setConfiguration(self, config: dict) -> None:
|
94
|
+
with block_signals(self):
|
95
|
+
method = config.get(_config_stitching.NORMALIZATION_BY_SAMPLE_METHOD, None)
|
96
|
+
if method is not None:
|
97
|
+
self.setMethod(method=method)
|
98
|
+
|
99
|
+
side = config.get(_config_stitching.NORMALIZATION_BY_SAMPLE_SIDE, None)
|
100
|
+
if side is not None:
|
101
|
+
self.setSide(side=side)
|
102
|
+
|
103
|
+
margin = config.get(_config_stitching.NORMALIZATION_BY_SAMPLE_MARGIN, None)
|
104
|
+
if margin is not None:
|
105
|
+
self.setMargin(margin=margin)
|
106
|
+
|
107
|
+
width = config.get(_config_stitching.NORMALIZATION_BY_SAMPLE_WIDTH, None)
|
108
|
+
if width is not None:
|
109
|
+
self.setWidth(width=width)
|
110
|
+
|
111
|
+
active = config.get(
|
112
|
+
_config_stitching.NORMALIZATION_BY_SAMPLE_ACTIVE_FIELD, None
|
113
|
+
)
|
114
|
+
if active is not None:
|
115
|
+
self.setChecked(active in (True, 1, "1", "True"))
|
116
|
+
|
117
|
+
self._configChanged()
|
@@ -21,11 +21,11 @@ class AlphaChannelWidget(qt.QWidget):
|
|
21
21
|
self._alphaImgSlider = qt.QSlider(qt.Qt.Horizontal, self)
|
22
22
|
self._alphaImgSlider.setMinimumWidth(40)
|
23
23
|
self._alphaImgSlider.setRange(0, 100)
|
24
|
-
self.layout().addRow(f"{ALPHA_CHAR}
|
24
|
+
self.layout().addRow(f"{ALPHA_CHAR} image", self._alphaImgSlider)
|
25
25
|
self._alphaBackgroundSlider = qt.QSlider(qt.Qt.Horizontal, self)
|
26
26
|
self._alphaBackgroundSlider.setMinimumWidth(40)
|
27
27
|
self._alphaBackgroundSlider.setRange(0, 100)
|
28
|
-
self.layout().addRow(f"{ALPHA_CHAR}
|
28
|
+
self.layout().addRow(f"{ALPHA_CHAR} overlay", self._alphaBackgroundSlider)
|
29
29
|
|
30
30
|
# connect signal / slot
|
31
31
|
self._alphaImgSlider.valueChanged.connect(self._alphaImgchanged)
|
@@ -62,8 +62,8 @@ class StitchAndBackgroundAlphaMixIn:
|
|
62
62
|
self._stitched_image = None
|
63
63
|
self._composition_background = None
|
64
64
|
# background action to show / hide the backgrounds
|
65
|
-
self._backGroundAction = qt.QAction("
|
66
|
-
self._backGroundAction.setToolTip("show / hide
|
65
|
+
self._backGroundAction = qt.QAction("overlay", self)
|
66
|
+
self._backGroundAction.setToolTip("show / hide overlay on top of image")
|
67
67
|
self._backGroundAction.setCheckable(True)
|
68
68
|
save_icon = tomwer_icons.getQIcon("background")
|
69
69
|
self._backGroundAction.setIcon(save_icon)
|
@@ -128,8 +128,6 @@ class StitchAndBackgroundAlphaMixIn:
|
|
128
128
|
)
|
129
129
|
background_data = self.getImage(legend=self.LEGEND_BACKGROUND)
|
130
130
|
background_data.setAlpha(self.getBackgroundImgAlpha())
|
131
|
-
# TODO: active image is always the image data
|
132
|
-
|
133
131
|
else:
|
134
132
|
if self.getImage(self.LEGEND_BACKGROUND) is not None:
|
135
133
|
self.removeImage(self.LEGEND_BACKGROUND)
|