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,76 +0,0 @@
|
|
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__ = "05/04/2019"
|
29
|
-
|
30
|
-
|
31
|
-
import shutil
|
32
|
-
import tempfile
|
33
|
-
import unittest
|
34
|
-
|
35
|
-
from tomwer.core.scan.scanbase import TomwerScanBase
|
36
|
-
from tomwer.core.utils.scanutils import MockEDF
|
37
|
-
|
38
|
-
from ..reconstruction.lamino import LaminoReconstructionTask
|
39
|
-
|
40
|
-
|
41
|
-
class TestLaminoIO(unittest.TestCase):
|
42
|
-
"""Test inputs and outputs types of the handler functions"""
|
43
|
-
|
44
|
-
def setUp(self):
|
45
|
-
self.scan_folder = tempfile.mkdtemp()
|
46
|
-
|
47
|
-
self.scan = MockEDF.mockScan(
|
48
|
-
scanID=self.scan_folder, nRadio=10, nRecons=1, nPagRecons=4, dim=10
|
49
|
-
)
|
50
|
-
|
51
|
-
def tearDown(self):
|
52
|
-
shutil.rmtree(self.scan_folder)
|
53
|
-
|
54
|
-
def testInputOutput(self):
|
55
|
-
for input_type in (dict, TomwerScanBase):
|
56
|
-
for serialize_output_data in (True, False):
|
57
|
-
with self.subTest(
|
58
|
-
serialize_output_data=serialize_output_data,
|
59
|
-
input_type=input_type,
|
60
|
-
):
|
61
|
-
input_obj = self.scan
|
62
|
-
if input_obj is dict:
|
63
|
-
input_obj = input_obj.to_dict()
|
64
|
-
lamino_process = LaminoReconstructionTask(
|
65
|
-
inputs={
|
66
|
-
"dry_run": True,
|
67
|
-
"data": input_obj,
|
68
|
-
"serialize_output_data": serialize_output_data,
|
69
|
-
}
|
70
|
-
)
|
71
|
-
lamino_process.run()
|
72
|
-
out = lamino_process.outputs.data
|
73
|
-
if serialize_output_data:
|
74
|
-
self.assertTrue(isinstance(out, dict))
|
75
|
-
else:
|
76
|
-
self.assertTrue(isinstance(out, TomwerScanBase))
|
tomwer/core/test/test_lamino.py
DELETED
@@ -1,92 +0,0 @@
|
|
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__ = "19/07/2018"
|
29
|
-
|
30
|
-
import shutil
|
31
|
-
import tempfile
|
32
|
-
import unittest
|
33
|
-
|
34
|
-
from tomwer.core.process.reconstruction.lamino import tofu
|
35
|
-
from tomwer.core.scan.edfscan import EDFTomoScan
|
36
|
-
|
37
|
-
|
38
|
-
class TestTofuReconstruction(unittest.TestCase):
|
39
|
-
"""Simple test of the Lamino reconstruction API"""
|
40
|
-
|
41
|
-
def tearDown(self):
|
42
|
-
shutil.rmtree(self._scan_path)
|
43
|
-
|
44
|
-
def setUp(self):
|
45
|
-
self._scan_path = tempfile.mkdtemp()
|
46
|
-
self.scan = EDFTomoScan(self._scan_path)
|
47
|
-
self.reconstruction = tofu.LaminoReconstructionTask(
|
48
|
-
inputs={
|
49
|
-
"dry_run": True,
|
50
|
-
"data": self.scan,
|
51
|
-
"lamino_params": {
|
52
|
-
"center-position-x": 5.0,
|
53
|
-
"projections": "tata-yoyo",
|
54
|
-
"output": "output_dir",
|
55
|
-
},
|
56
|
-
"serialize_output_data": False,
|
57
|
-
}
|
58
|
-
)
|
59
|
-
|
60
|
-
def testProcessAPI(self):
|
61
|
-
self.reconstruction.run()
|
62
|
-
|
63
|
-
def testPreProcessAPI(self):
|
64
|
-
self.assertFalse(
|
65
|
-
self.reconstruction.is_ffc_has_been_preprocessed(
|
66
|
-
scan=self.scan, x_center=5.0, method=None, darks=None, ff=[None, None]
|
67
|
-
)
|
68
|
-
)
|
69
|
-
self.reconstruction.preprocess_ff(self.scan)
|
70
|
-
self.assertTrue(
|
71
|
-
self.reconstruction.is_ffc_has_been_preprocessed(
|
72
|
-
scan=self.scan, x_center=5.0, method=None, darks=None, ff=[None, None]
|
73
|
-
)
|
74
|
-
)
|
75
|
-
self.reconstruction.run()
|
76
|
-
self.assertTrue(
|
77
|
-
self.reconstruction.is_ffc_has_been_preprocessed(
|
78
|
-
scan=self.scan, x_center=5.0, method=None, darks=None, ff=[None, None]
|
79
|
-
)
|
80
|
-
)
|
81
|
-
self.reconstruction.reconstruction_parameters["center-position-x"] = 2.0
|
82
|
-
self.assertFalse(
|
83
|
-
self.reconstruction.is_ffc_has_been_preprocessed(
|
84
|
-
scan=self.scan, x_center=2.0, method=None, darks=None, ff=[None, None]
|
85
|
-
)
|
86
|
-
)
|
87
|
-
self.reconstruction.preprocess_ff(self.scan)
|
88
|
-
self.assertTrue(
|
89
|
-
self.reconstruction.is_ffc_has_been_preprocessed(
|
90
|
-
scan=self.scan, x_center=2.0, method=None, darks=None, ff=[None, None]
|
91
|
-
)
|
92
|
-
)
|
@@ -1,31 +0,0 @@
|
|
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
|
-
"""This package contains all the widget which are not inheriting from
|
26
|
-
WidgetOW (orange widgets)
|
27
|
-
"""
|
28
|
-
|
29
|
-
__authors__ = ["H. Payno"]
|
30
|
-
__license__ = "MIT"
|
31
|
-
__date__ = "01/06/2018"
|
@@ -1,107 +0,0 @@
|
|
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__ = "01/06/2018"
|
29
|
-
|
30
|
-
|
31
|
-
from collections import namedtuple
|
32
|
-
|
33
|
-
_getterSetter = namedtuple("_getterSetter", ["getter", "setter"])
|
34
|
-
|
35
|
-
|
36
|
-
class _TofuOptionLoader(object):
|
37
|
-
"""Simple class used to register the options managed by a TofuXWidget"""
|
38
|
-
|
39
|
-
def __init__(self, options, childs=None):
|
40
|
-
self._options = options
|
41
|
-
self._childs = childs or []
|
42
|
-
# expose API
|
43
|
-
self._addChild = self._childs.append
|
44
|
-
|
45
|
-
def _hasOption(self, option):
|
46
|
-
return option in self._options
|
47
|
-
|
48
|
-
def _setOption(self, option, value):
|
49
|
-
assert option in self._options
|
50
|
-
if value == "":
|
51
|
-
self._options[option].setter()
|
52
|
-
else:
|
53
|
-
self._options[option].setter(value)
|
54
|
-
|
55
|
-
def getParameters(self):
|
56
|
-
"""Add the value of the detain options + some extra parameters to be
|
57
|
-
passed as 'free string'
|
58
|
-
|
59
|
-
:return:
|
60
|
-
:rtype: tuple (dict, list)
|
61
|
-
"""
|
62
|
-
_ddict, extraParams = self._getNodeParameters()
|
63
|
-
for child in self._childs:
|
64
|
-
_childDict = child.getParameters()
|
65
|
-
_ddict.update(_childDict)
|
66
|
-
return _ddict
|
67
|
-
|
68
|
-
def _getNodeParameters(self):
|
69
|
-
"""Add the value of the detain options + some extra parameters to be
|
70
|
-
passed as 'free string'
|
71
|
-
|
72
|
-
:return:
|
73
|
-
:rtype: tuple (dict, list)
|
74
|
-
"""
|
75
|
-
_ddict = {}
|
76
|
-
for option in self._options:
|
77
|
-
_ddict[option] = self._options[option].getter()
|
78
|
-
return _ddict, []
|
79
|
-
|
80
|
-
def setParameters(self, _ddict):
|
81
|
-
"""
|
82
|
-
|
83
|
-
:param _ddict:
|
84
|
-
:return: initial dictionary less the parameters managed by this option
|
85
|
-
loader
|
86
|
-
:rtype dict:
|
87
|
-
"""
|
88
|
-
_lddict = _ddict.copy()
|
89
|
-
for child in self._childs:
|
90
|
-
_lddict = child.setParameters(_lddict)
|
91
|
-
_lddict = self._setNodeParameters(_lddict)
|
92
|
-
return _lddict
|
93
|
-
|
94
|
-
def _setNodeParameters(self, _ddict):
|
95
|
-
"""
|
96
|
-
|
97
|
-
:param _ddict:
|
98
|
-
:return: initial dictionary less the parameters managed by this option
|
99
|
-
loader
|
100
|
-
:rtype dict:
|
101
|
-
"""
|
102
|
-
updatedDict = _ddict.copy()
|
103
|
-
for param, value in _ddict.items():
|
104
|
-
if param in self._options:
|
105
|
-
self._options[param].setter(value)
|
106
|
-
del updatedDict[param]
|
107
|
-
return updatedDict
|
@@ -1 +0,0 @@
|
|
1
|
-
from .tofu import TofuWidget, TofuWindow # noqa F401
|
@@ -1,148 +0,0 @@
|
|
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__ = "01/06/2018"
|
29
|
-
|
30
|
-
|
31
|
-
import logging
|
32
|
-
|
33
|
-
from silx.gui import qt
|
34
|
-
|
35
|
-
from tomwer.gui import icons
|
36
|
-
from tomwer.gui.utils.buttons import PadlockButton
|
37
|
-
|
38
|
-
_logger = logging.getLogger()
|
39
|
-
|
40
|
-
|
41
|
-
class _AngleWidget(qt.QWidget):
|
42
|
-
"""Simple widget used to defined an angle"""
|
43
|
-
|
44
|
-
def __init__(self, parent, name, defaultVal=0, lockable=False, information=None):
|
45
|
-
"""
|
46
|
-
|
47
|
-
:param parent:
|
48
|
-
:param name:
|
49
|
-
:param defaultVal:
|
50
|
-
:param lockable: if True then add a push button to lock / unlock the
|
51
|
-
variable
|
52
|
-
:param information: callabak to display some information. If not None
|
53
|
-
then add a QPushButton calling this callback
|
54
|
-
"""
|
55
|
-
assert type(defaultVal) in (int, float)
|
56
|
-
self._lockable = lockable
|
57
|
-
qt.QWidget.__init__(self, parent=parent)
|
58
|
-
self.setLayout(qt.QHBoxLayout())
|
59
|
-
self.layout().setContentsMargins(0, 0, 0, 0)
|
60
|
-
self.layout().addWidget(qt.QLabel(name + ":", parent=self))
|
61
|
-
self._angleLE = qt.QLineEdit(str(defaultVal), parent=self)
|
62
|
-
validator = qt.QDoubleValidator(self._angleLE)
|
63
|
-
self._angleLE.setValidator(validator)
|
64
|
-
self.layout().addWidget(self._angleLE)
|
65
|
-
|
66
|
-
self._infoCallback = information
|
67
|
-
if self._infoCallback is not None:
|
68
|
-
icon = icons.getQIcon("information")
|
69
|
-
self._infoPB = qt.QPushButton(parent=self, icon=icon)
|
70
|
-
self._infoPB.pressed.connect(self._infoCallback)
|
71
|
-
self._infoPB.setCheckable(False)
|
72
|
-
self.layout().addWidget(self._infoPB)
|
73
|
-
|
74
|
-
self._lockButton = PadlockButton(parent=self)
|
75
|
-
self.layout().addWidget(self._lockButton)
|
76
|
-
self._lockButton.setVisible(self.isLockable())
|
77
|
-
|
78
|
-
self.sigEdited = self._angleLE.textEdited
|
79
|
-
"""Signal emitted when the angle is edited"""
|
80
|
-
|
81
|
-
def getAngle(self):
|
82
|
-
return float(self._angleLE.text())
|
83
|
-
|
84
|
-
def setAngle(self, val):
|
85
|
-
if not type(val) is str:
|
86
|
-
assert type(val) in (float, int)
|
87
|
-
self._angleLE.setText(str(val))
|
88
|
-
|
89
|
-
def isLockable(self):
|
90
|
-
return self._lockable
|
91
|
-
|
92
|
-
def isLocked(self):
|
93
|
-
return self._lockable and self._lockButton.isLocked()
|
94
|
-
|
95
|
-
def lock(self):
|
96
|
-
if self._lockable is False:
|
97
|
-
_logger.warning(
|
98
|
-
"unable to lock the _AngleWidget cause not defined " "as lockable"
|
99
|
-
)
|
100
|
-
self._lockButton.setChecked(True)
|
101
|
-
|
102
|
-
|
103
|
-
class _RegionLE(qt.QWidget):
|
104
|
-
"""Widget used to defined a region as (start, end, step)"""
|
105
|
-
|
106
|
-
def __init__(self, parent, name):
|
107
|
-
super().__init__(parent)
|
108
|
-
self.setLayout(qt.QHBoxLayout())
|
109
|
-
self.layout().setContentsMargins(0, 0, 0, 0)
|
110
|
-
self.layout().addWidget(qt.QLabel(name, parent=self))
|
111
|
-
self._regionLE = qt.QLineEdit(parent=self)
|
112
|
-
self.layout().addWidget(self._regionLE)
|
113
|
-
self.setToolTip("region should be defined as: start, end, step")
|
114
|
-
|
115
|
-
def getRegion(self):
|
116
|
-
"""
|
117
|
-
|
118
|
-
:return: start voxel, end voxel, step voxel
|
119
|
-
:rtype: tuple of int
|
120
|
-
"""
|
121
|
-
|
122
|
-
def _getParam(regions, index, default):
|
123
|
-
try:
|
124
|
-
# if len(regions) > index and regions[index].isdigit():
|
125
|
-
# try to avoid failure if regions[index] is a negative
|
126
|
-
return int(regions[index])
|
127
|
-
except Exception:
|
128
|
-
return default
|
129
|
-
|
130
|
-
if self._regionLE.text() == "":
|
131
|
-
return None
|
132
|
-
regions = self._regionLE.text().replace(" ", "").split(",")
|
133
|
-
sv = _getParam(regions, 0, 0)
|
134
|
-
se = _getParam(regions, 1, -1)
|
135
|
-
ss = _getParam(regions, 2, 1)
|
136
|
-
return (sv, se, ss)
|
137
|
-
|
138
|
-
def setRegion(self, startVox, endVox, stepVox):
|
139
|
-
self.setRegionFromStr(",".join([str(startVox), str(endVox), str(stepVox)]))
|
140
|
-
|
141
|
-
def setRegionFromStr(self, _str):
|
142
|
-
if _str is None:
|
143
|
-
self._regionLE.clear()
|
144
|
-
else:
|
145
|
-
assert type(_str) is str
|
146
|
-
_str = _str.lstrip("(")
|
147
|
-
_str = _str.rstrip(")")
|
148
|
-
self._regionLE.setText(_str)
|