tomwer 1.3.27__py3-none-any.whl → 1.4.0rc0__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/orange/managedprocess.py +1 -29
- orangecontrib/tomwer/orange/settings.py +2 -28
- orangecontrib/tomwer/tests/TestAcquisition.py +220 -0
- orangecontrib/tomwer/tutorials/append_raw_darks_and_flats_frames_to_NXtomos.ows +2 -2
- orangecontrib/tomwer/tutorials/copy_reduced_darks_and_flats_meth1.ows +1 -1
- orangecontrib/tomwer/tutorials/{icat_publication.ows → drac_publication.ows} +7 -21
- orangecontrib/tomwer/tutorials/id16b/ID16b_full_volume.ows +22 -0
- orangecontrib/tomwer/tutorials/id16b/ID16b_insitu.ows +302 -0
- orangecontrib/tomwer/tutorials/id16b/ID16b_normalization.ows +218 -0
- orangecontrib/tomwer/tutorials/simple_volume_to_slurm_reconstruction.ows +29 -24
- orangecontrib/tomwer/tutorials/test_cor.ows +19 -0
- orangecontrib/tomwer/tutorials/volume_casting_on_slurm.ows +54 -0
- orangecontrib/tomwer/widgets/__init__.py +3 -5
- orangecontrib/tomwer/widgets/cluster/FutureSupervisorOW.py +35 -54
- orangecontrib/tomwer/widgets/cluster/SlurmClusterOW.py +1 -31
- orangecontrib/tomwer/widgets/control/AdvancementOW.py +1 -29
- orangecontrib/tomwer/widgets/control/DataDiscoveryOW.py +5 -4
- orangecontrib/tomwer/widgets/control/DataListenerOW.py +1 -29
- orangecontrib/tomwer/widgets/control/DataSelectorOW.py +11 -30
- orangecontrib/tomwer/widgets/control/DataTransfertOW.py +2 -28
- orangecontrib/tomwer/widgets/control/DataValidatorOW.py +1 -28
- orangecontrib/tomwer/widgets/control/DataWatcherOW.py +1 -28
- orangecontrib/tomwer/widgets/control/EDF2NXTomomillOW.py +48 -51
- orangecontrib/tomwer/widgets/control/EmailOW.py +12 -2
- orangecontrib/tomwer/widgets/control/FilterOW.py +1 -28
- orangecontrib/tomwer/widgets/control/NXTomomillOW.py +37 -53
- orangecontrib/tomwer/widgets/control/NXtomoConcatenate.py +21 -20
- orangecontrib/tomwer/widgets/control/NotifierOW.py +9 -28
- orangecontrib/tomwer/widgets/control/ReduceDarkFlatSelectorOW.py +3 -2
- orangecontrib/tomwer/widgets/control/SingleTomoObjOW.py +1 -27
- orangecontrib/tomwer/widgets/control/TimerOW.py +9 -28
- orangecontrib/tomwer/widgets/control/TomoObjSeriesOW.py +58 -0
- orangecontrib/tomwer/widgets/control/VolumeSelector.py +8 -30
- orangecontrib/tomwer/widgets/control/icons/nxtomomill.svg +173 -119
- orangecontrib/tomwer/widgets/control/icons/reduced_darkflat_selector.png +0 -0
- orangecontrib/tomwer/widgets/control/icons/reduced_darkflat_selector.svg +55 -195
- orangecontrib/tomwer/widgets/control/icons/{tomoobjserie.svg → tomoobjseries.svg} +2 -2
- orangecontrib/tomwer/widgets/dataportal/PublishProcessedDataOW.py +172 -0
- orangecontrib/tomwer/widgets/{icat → dataportal}/__init__.py +2 -2
- orangecontrib/tomwer/widgets/debugtools/DatasetGeneratorOW.py +2 -29
- orangecontrib/tomwer/widgets/debugtools/ObjectInspectorOW.py +1 -29
- orangecontrib/tomwer/widgets/edit/DarkFlatPatchOW.py +48 -73
- orangecontrib/tomwer/widgets/edit/ImageKeyEditorOW.py +48 -75
- orangecontrib/tomwer/widgets/edit/ImageKeyUpgraderOW.py +5 -30
- orangecontrib/tomwer/widgets/edit/NXtomoEditorOW.py +51 -52
- orangecontrib/tomwer/widgets/other/PythonScriptOW.py +22 -10
- orangecontrib/tomwer/widgets/reconstruction/AxisOW.py +48 -49
- orangecontrib/tomwer/widgets/reconstruction/CastNabuVolumeOW.py +22 -68
- orangecontrib/tomwer/widgets/reconstruction/DarkRefAndCopyOW.py +3 -30
- orangecontrib/tomwer/widgets/reconstruction/NabuHelicalPrepareWeightsDoubleOW.py +21 -19
- orangecontrib/tomwer/widgets/reconstruction/NabuOW.py +7 -70
- orangecontrib/tomwer/widgets/reconstruction/NabuVolumeOW.py +40 -85
- orangecontrib/tomwer/widgets/reconstruction/SAAxisOW.py +15 -40
- orangecontrib/tomwer/widgets/reconstruction/SADeltaBetaOW.py +13 -35
- orangecontrib/tomwer/widgets/reconstruction/SinoNormOW.py +2 -30
- orangecontrib/tomwer/widgets/stitching/ZStitchingConfigOW.py +11 -11
- orangecontrib/tomwer/widgets/utils.py +2 -29
- orangecontrib/tomwer/widgets/visualization/DataViewerOW.py +1 -27
- orangecontrib/tomwer/widgets/visualization/DiffViewerOW.py +1 -27
- orangecontrib/tomwer/widgets/visualization/NXtomoMetadataViewerOW.py +1 -1
- orangecontrib/tomwer/widgets/visualization/RadioStackOW.py +2 -28
- orangecontrib/tomwer/widgets/visualization/SampleMovedOW.py +1 -27
- orangecontrib/tomwer/widgets/visualization/SinogramViewerOW.py +1 -27
- orangecontrib/tomwer/widgets/visualization/SliceStackOW.py +2 -28
- tomwer/__init__.py +3 -28
- tomwer/__main__.py +8 -4
- tomwer/app/__init__.py +2 -0
- tomwer/app/axis.py +8 -7
- tomwer/app/canvas.py +23 -29
- tomwer/app/canvas_launcher/config.py +14 -102
- tomwer/app/canvas_launcher/environ.py +5 -8
- tomwer/app/canvas_launcher/mainwindow.py +175 -69
- tomwer/app/canvas_launcher/splash.py +1 -3
- tomwer/app/canvas_launcher/utils.py +47 -0
- tomwer/app/canvas_launcher/widgetsscheme.py +3 -10
- tomwer/app/diffframe.py +2 -0
- tomwer/app/imagekeyeditor.py +2 -1
- tomwer/app/imagekeyupgrader.py +2 -0
- tomwer/app/multicor.py +5 -2
- tomwer/app/multipag.py +7 -4
- tomwer/app/nabuapp.py +2 -1
- tomwer/app/nxtomoeditor.py +17 -12
- tomwer/app/patchrawdarkflat.py +2 -0
- tomwer/app/radiostack.py +3 -2
- tomwer/app/reducedarkflat.py +3 -0
- tomwer/app/samplemoved.py +2 -0
- tomwer/app/scanviewer.py +2 -0
- tomwer/app/sinogramviewer.py +2 -0
- tomwer/app/slicestack.py +11 -13
- tomwer/app/stitching/common.py +431 -0
- tomwer/app/stopdatalistener.py +3 -0
- tomwer/app/ystitching.py +26 -0
- tomwer/app/zstitching.py +8 -363
- tomwer/core/__init__.py +2 -28
- tomwer/core/cluster/__init__.py +3 -0
- tomwer/core/cluster/cluster.py +10 -26
- tomwer/core/futureobject.py +17 -43
- tomwer/core/log/__init__.py +2 -0
- tomwer/core/log/processlog.py +0 -28
- tomwer/core/process/cluster/supervisor.py +52 -34
- tomwer/core/process/conditions/filters.py +3 -28
- tomwer/core/process/control/datalistener/datalistener.py +7 -75
- tomwer/core/process/control/datalistener/rpcserver.py +8 -38
- tomwer/core/process/control/datawatcher/datawatcher.py +11 -40
- tomwer/core/process/control/datawatcher/datawatcherobserver.py +30 -64
- tomwer/core/process/control/datawatcher/datawatcherprocess.py +11 -32
- tomwer/core/process/control/datawatcher/edfdwprocess.py +2 -27
- tomwer/core/process/control/datawatcher/hdf5dwprocess.py +1 -26
- tomwer/core/process/control/datawatcher/status.py +1 -26
- tomwer/core/process/control/emailnotifier.py +11 -23
- tomwer/core/process/control/nxtomoconcatenate.py +20 -18
- tomwer/core/process/control/nxtomomill.py +9 -44
- tomwer/core/process/control/scanlist.py +0 -27
- tomwer/core/process/control/scantransfer.py +15 -13
- tomwer/core/process/control/scanvalidator.py +4 -30
- tomwer/core/process/control/{test → tests}/test_concatenate_nxtomos.py +5 -5
- tomwer/core/process/control/timer.py +1 -27
- tomwer/core/process/control/tomoobjseries.py +12 -0
- tomwer/core/process/drac/binning.py +37 -0
- tomwer/core/process/drac/dracbase.py +170 -0
- tomwer/core/process/drac/gallery.py +109 -0
- tomwer/core/process/drac/output.py +12 -0
- tomwer/core/process/drac/processeddataset.py +147 -0
- tomwer/core/process/drac/publish.py +118 -0
- tomwer/core/process/drac/rawdataset.py +142 -0
- tomwer/core/process/drac/tests/test_gallery.py +71 -0
- tomwer/core/process/drac/tests/test_icat_processed_dataset.py +80 -0
- tomwer/core/process/drac/tests/test_icat_raw_dataset.py +90 -0
- tomwer/core/process/edit/darkflatpatch.py +1 -28
- tomwer/core/process/edit/imagekeyeditor.py +4 -32
- tomwer/core/process/edit/nxtomoeditor.py +307 -0
- tomwer/core/process/edit/tests/test_darkflatpatch.py +243 -0
- tomwer/core/process/edit/tests/test_imagekey_editor.py +99 -0
- tomwer/core/process/output.py +9 -2
- tomwer/core/process/reconstruction/__init__.py +0 -26
- tomwer/core/process/reconstruction/axis/anglemode.py +1 -29
- tomwer/core/process/reconstruction/axis/axis.py +63 -111
- tomwer/core/process/reconstruction/axis/mode.py +5 -3
- tomwer/core/process/reconstruction/axis/params.py +5 -146
- tomwer/core/process/reconstruction/axis/projectiontype.py +0 -28
- tomwer/core/process/reconstruction/darkref/darkrefs.py +14 -39
- tomwer/core/process/reconstruction/darkref/darkrefscopy.py +7 -39
- tomwer/core/process/reconstruction/darkref/params.py +1 -28
- tomwer/core/process/reconstruction/nabu/castvolume.py +19 -34
- tomwer/core/process/reconstruction/nabu/nabucommon.py +18 -43
- tomwer/core/process/reconstruction/nabu/nabuscores.py +47 -48
- tomwer/core/process/reconstruction/nabu/nabuslices.py +59 -105
- tomwer/core/process/reconstruction/nabu/nabuvolume.py +44 -70
- tomwer/core/process/reconstruction/nabu/plane.py +10 -0
- tomwer/core/process/reconstruction/nabu/settings.py +1 -28
- tomwer/core/process/reconstruction/nabu/target.py +0 -28
- tomwer/core/process/reconstruction/nabu/test/test_castvolume.py +116 -0
- tomwer/core/process/reconstruction/nabu/test/test_nabu_utils.py +277 -0
- tomwer/core/process/reconstruction/nabu/test/test_nabunormalization.py +199 -0
- tomwer/core/process/reconstruction/nabu/utils.py +11 -60
- tomwer/core/process/reconstruction/normalization/normalization.py +2 -32
- tomwer/core/process/reconstruction/normalization/params.py +3 -35
- tomwer/core/process/reconstruction/output.py +14 -19
- tomwer/core/process/reconstruction/paramsbase.py +4 -33
- tomwer/core/process/reconstruction/saaxis/params.py +5 -33
- tomwer/core/process/reconstruction/saaxis/saaxis.py +18 -47
- tomwer/core/process/reconstruction/sadeltabeta/params.py +2 -31
- tomwer/core/process/reconstruction/sadeltabeta/sadeltabeta.py +16 -44
- tomwer/core/process/reconstruction/scores/params.py +9 -39
- tomwer/core/process/reconstruction/scores/scores.py +10 -42
- tomwer/core/process/reconstruction/tests/__init__.py +0 -0
- tomwer/core/process/reconstruction/tests/test_axis.py +46 -0
- tomwer/core/process/reconstruction/tests/test_darkref.py +33 -0
- tomwer/core/process/reconstruction/{test → tests}/test_saaxis.py +1 -27
- tomwer/core/process/reconstruction/tests/test_sadeltabeta.py +48 -0
- tomwer/core/process/script/python.py +1 -27
- tomwer/core/process/script/tests/test_script.py +41 -0
- tomwer/core/process/stitching/metadataholder.py +5 -4
- tomwer/core/process/stitching/nabustitcher.py +35 -5
- tomwer/core/process/stitching/tests/test_metadataholder.py +17 -0
- tomwer/core/process/task.py +20 -63
- tomwer/core/process/tests/__init__.py +0 -0
- tomwer/core/process/{test → tests}/test_axis.py +1 -79
- tomwer/core/process/{test → tests}/test_conditions.py +1 -28
- tomwer/core/process/{test → tests}/test_dark_and_flat.py +1 -27
- tomwer/core/process/{test → tests}/test_data_listener.py +1 -27
- tomwer/core/process/{test → tests}/test_data_transfer.py +2 -28
- tomwer/core/process/{test → tests}/test_data_watcher.py +1 -27
- tomwer/core/process/{test → tests}/test_nabu.py +4 -33
- tomwer/core/process/{test → tests}/test_normalization.py +1 -26
- tomwer/core/process/{test → tests}/test_timer.py +1 -27
- tomwer/core/process/utils.py +2 -31
- tomwer/core/process/visualization/dataviewer.py +1 -26
- tomwer/core/process/visualization/diffviewer.py +1 -26
- tomwer/core/process/visualization/imagestackviewer.py +0 -26
- tomwer/core/process/visualization/radiostack.py +0 -26
- tomwer/core/process/visualization/samplemoved.py +0 -28
- tomwer/core/process/visualization/sinogramviewer.py +0 -27
- tomwer/core/process/visualization/slicestack.py +0 -28
- tomwer/core/process/visualization/tests/test_data_viewer.py +12 -0
- tomwer/core/process/visualization/tests/test_diff_viewer.py +12 -0
- tomwer/core/process/visualization/tests/test_image_stack_viewer.py +14 -0
- tomwer/core/process/visualization/tests/test_radio_stack.py +12 -0
- tomwer/core/process/visualization/tests/test_sample_moved.py +14 -0
- tomwer/core/process/visualization/tests/test_sinogram_viewer.py +13 -0
- tomwer/core/process/visualization/tests/test_slice_stack.py +13 -0
- tomwer/core/process/visualization/tests/test_volume_viewer.py +12 -0
- tomwer/core/process/visualization/volumeviewer.py +0 -29
- tomwer/core/scan/__init__.py +3 -27
- tomwer/core/scan/blissscan.py +5 -34
- tomwer/core/scan/edfscan.py +19 -53
- tomwer/core/scan/hdf5scan.py +2 -2
- tomwer/core/scan/nxtomoscan.py +46 -54
- tomwer/core/scan/scanbase.py +104 -200
- tomwer/core/scan/scanfactory.py +11 -41
- tomwer/core/scan/tests/__init__.py +0 -0
- tomwer/core/scan/tests/test_edf.py +25 -0
- tomwer/core/scan/tests/test_future_scan.py +35 -0
- tomwer/core/scan/tests/test_nxtomoscan.py +143 -0
- tomwer/core/scan/{test → tests}/test_process_registration.py +1 -28
- tomwer/core/settings.py +18 -40
- tomwer/core/tests/__init__.py +0 -0
- tomwer/core/tests/test_scanutils.py +26 -0
- tomwer/core/{test → tests}/test_utils.py +1 -28
- tomwer/core/tomwer_object.py +4 -0
- tomwer/core/utils/__init__.py +2 -0
- tomwer/core/utils/char.py +0 -28
- tomwer/core/utils/deprecation.py +12 -38
- tomwer/core/utils/dictutils.py +1 -3
- tomwer/core/utils/ftseriesutils.py +1 -27
- tomwer/core/utils/gpu.py +0 -28
- tomwer/core/utils/image.py +8 -39
- tomwer/core/utils/locker.py +1 -28
- tomwer/core/utils/logconfig.py +0 -27
- tomwer/core/utils/normalization.py +4 -31
- tomwer/core/utils/nxtomoutils.py +8 -38
- tomwer/core/utils/resource.py +0 -26
- tomwer/core/utils/scanutils.py +23 -52
- tomwer/core/utils/slurm.py +7 -30
- tomwer/core/utils/spec.py +6 -6
- tomwer/core/utils/tests/__init__.py +0 -0
- tomwer/core/utils/tests/test_image.py +30 -0
- tomwer/core/utils/tests/test_nxtomo.py +38 -0
- tomwer/core/utils/tests/test_scan_utils.py +46 -0
- tomwer/core/utils/tests/test_time.py +6 -0
- tomwer/core/utils/threads.py +0 -26
- tomwer/core/utils/time.py +0 -27
- tomwer/core/volume/__init__.py +4 -0
- tomwer/core/volume/edfvolume.py +1 -28
- tomwer/core/volume/hdf5volume.py +1 -28
- tomwer/core/volume/jp2kvolume.py +1 -27
- tomwer/core/volume/rawvolume.py +1 -28
- tomwer/core/volume/tests/test_volumes.py +21 -0
- tomwer/core/volume/tiffvolume.py +1 -28
- tomwer/core/volume/volumebase.py +5 -0
- tomwer/core/volume/volumefactory.py +7 -33
- tomwer/gui/__init__.py +0 -28
- tomwer/gui/cluster/__init__.py +2 -0
- tomwer/gui/cluster/slurm.py +297 -95
- tomwer/gui/cluster/supervisor.py +1 -27
- tomwer/gui/cluster/tests/__init__.py +0 -0
- tomwer/gui/cluster/{test → tests}/test_cluster.py +21 -26
- tomwer/gui/cluster/{test → tests}/test_supervisor.py +1 -27
- tomwer/gui/conditions/__init__.py +2 -0
- tomwer/gui/conditions/filter.py +1 -26
- tomwer/gui/configuration/__init__.py +2 -0
- tomwer/gui/control/__init__.py +2 -0
- tomwer/gui/control/actions.py +2 -28
- tomwer/gui/control/datadiscovery.py +4 -3
- tomwer/gui/control/datalist.py +64 -69
- tomwer/gui/control/datalistener.py +1 -39
- tomwer/gui/control/datareacheractions.py +1 -28
- tomwer/gui/control/datatransfert.py +2 -29
- tomwer/gui/control/datavalidator.py +3 -37
- tomwer/gui/control/datawatcher/__init__.py +0 -28
- tomwer/gui/control/datawatcher/configuration.py +1 -28
- tomwer/gui/control/datawatcher/datawatcher.py +3 -32
- tomwer/gui/control/datawatcher/datawatcherobserver.py +2 -28
- tomwer/gui/control/history.py +5 -35
- tomwer/gui/control/nxtomomill.py +3 -30
- tomwer/gui/control/observations.py +61 -55
- tomwer/gui/control/reducedarkflatselector.py +24 -20
- tomwer/gui/control/scanselectorwidget.py +2 -28
- tomwer/gui/control/selectorwidgetbase.py +17 -17
- tomwer/gui/control/series/__init__.py +0 -0
- tomwer/gui/control/{serie/seriecreator.py → series/seriescreator.py} +214 -235
- tomwer/gui/control/series/serieswaiter.py +0 -0
- tomwer/gui/control/series/test/test_creator.py +424 -0
- tomwer/gui/control/series/test/test_nxtomo_concatenate.py +21 -0
- tomwer/gui/control/singletomoobj.py +1 -1
- tomwer/gui/control/tests/__init__.py +0 -0
- tomwer/gui/control/tests/test_datalist.py +47 -0
- tomwer/gui/control/{test → tests}/test_datalistener.py +1 -28
- tomwer/gui/control/tests/test_datavalidator.py +27 -0
- tomwer/gui/control/{test → tests}/test_inputwidget.py +1 -27
- tomwer/gui/control/tests/test_process_manager.py +38 -0
- tomwer/gui/control/tests/test_scan_observations.py +23 -0
- tomwer/gui/control/tests/test_scanselector.py +42 -0
- tomwer/gui/control/{test → tests}/test_scanvalidator.py +1 -27
- tomwer/gui/control/{test → tests}/test_volume_dialog.py +2 -30
- tomwer/gui/control/{test → tests}/test_volumeselector.py +1 -27
- tomwer/gui/control/volumeselectorwidget.py +2 -30
- tomwer/gui/dataportal/__init__.py +2 -0
- tomwer/gui/{icat → dataportal}/createscreenshots.py +3 -2
- tomwer/gui/dataportal/gallery.py +133 -0
- tomwer/gui/dataportal/outputformat.py +0 -0
- tomwer/gui/dataportal/publish.py +96 -0
- tomwer/gui/dataportal/tests/test_create_screenshots_gui.py +23 -0
- tomwer/gui/dataportal/tests/test_gallery_gui.py +21 -0
- tomwer/gui/debugtools/__init__.py +2 -0
- tomwer/gui/debugtools/datasetgenerator.py +1 -30
- tomwer/gui/debugtools/objectinspector.py +1 -29
- tomwer/gui/dialog/QDataDialog.py +89 -0
- tomwer/gui/{qfolderdialog.py → dialog/QVolumeDialog.py} +8 -107
- tomwer/gui/dialog/__init__.py +1 -0
- tomwer/gui/edit/__init__.py +2 -0
- tomwer/gui/edit/dkrfpatch.py +52 -87
- tomwer/gui/edit/imagekeyeditor.py +18 -54
- tomwer/gui/edit/nxtomoeditor.py +113 -300
- tomwer/gui/edit/nxtomowarmer.py +3 -2
- tomwer/gui/edit/tests/__init__.py +0 -0
- tomwer/gui/edit/{test → tests}/test_dkrf_patch.py +3 -29
- tomwer/gui/edit/{test → tests}/test_image_key_editor.py +1 -27
- tomwer/gui/edit/{test → tests}/test_nx_editor.py +45 -23
- tomwer/gui/icons.py +28 -66
- tomwer/gui/illustrations.py +4 -34
- tomwer/gui/imagefromfile.py +5 -30
- tomwer/gui/metadataloader.py +36 -0
- tomwer/gui/qconfigfile.py +3 -0
- tomwer/gui/qlefilesystem.py +3 -0
- tomwer/gui/reconstruction/__init__.py +2 -0
- tomwer/gui/reconstruction/axis/AxisMainWindow.py +264 -0
- tomwer/gui/reconstruction/axis/AxisOptionsWidget.py +153 -0
- tomwer/gui/reconstruction/axis/AxisSettingsWidget.py +776 -0
- tomwer/gui/reconstruction/axis/AxisWidget.py +526 -0
- tomwer/gui/reconstruction/axis/CalculationWidget.py +374 -0
- tomwer/gui/reconstruction/axis/CompareImages.py +11 -44
- tomwer/gui/reconstruction/axis/ControlWidget.py +277 -0
- tomwer/gui/reconstruction/axis/InputWidget.py +491 -0
- tomwer/gui/reconstruction/axis/ManualFramesSelection.py +168 -0
- tomwer/gui/reconstruction/axis/__init__.py +2 -2
- tomwer/gui/reconstruction/darkref/__init__.py +0 -27
- tomwer/gui/reconstruction/darkref/darkrefcopywidget.py +5 -34
- tomwer/gui/reconstruction/darkref/darkrefwidget.py +1 -27
- tomwer/gui/reconstruction/nabu/castvolume.py +40 -59
- tomwer/gui/reconstruction/nabu/check.py +7 -33
- tomwer/gui/reconstruction/nabu/nabuconfig/base.py +7 -34
- tomwer/gui/reconstruction/nabu/nabuconfig/ctf.py +6 -5
- tomwer/gui/reconstruction/nabu/nabuconfig/nabuconfig.py +10 -69
- tomwer/gui/reconstruction/nabu/nabuconfig/output.py +3 -47
- tomwer/gui/reconstruction/nabu/nabuconfig/phase.py +54 -36
- tomwer/gui/reconstruction/nabu/nabuconfig/preprocessing.py +103 -54
- tomwer/gui/reconstruction/nabu/nabuconfig/reconstruction.py +116 -65
- tomwer/gui/reconstruction/nabu/nabuflow.py +31 -61
- tomwer/gui/reconstruction/nabu/platform.py +94 -0
- tomwer/gui/reconstruction/nabu/slices.py +81 -45
- tomwer/gui/reconstruction/nabu/slurm.py +1 -27
- tomwer/gui/reconstruction/nabu/test/test_cast_volume.py +82 -0
- tomwer/gui/reconstruction/nabu/test/test_check.py +66 -0
- tomwer/gui/reconstruction/nabu/test/test_ctf.py +46 -0
- tomwer/gui/reconstruction/nabu/test/test_helical.py +21 -0
- tomwer/gui/reconstruction/nabu/test/test_nabu_preprocessing.py +81 -0
- tomwer/gui/reconstruction/nabu/volume.py +62 -90
- tomwer/gui/reconstruction/normalization/intensity.py +5 -32
- tomwer/gui/reconstruction/normalization/test/test_intensity.py +89 -0
- tomwer/gui/reconstruction/saaxis/corrangeselector.py +16 -49
- tomwer/gui/reconstruction/saaxis/dimensionwidget.py +56 -96
- tomwer/gui/reconstruction/saaxis/saaxis.py +17 -38
- tomwer/gui/reconstruction/saaxis/sliceselector.py +8 -39
- tomwer/gui/reconstruction/sadeltabeta/saadeltabeta.py +19 -37
- tomwer/gui/reconstruction/scores/control.py +2 -30
- tomwer/gui/reconstruction/scores/scoreplot.py +19 -48
- tomwer/gui/reconstruction/tests/__init__.py +0 -0
- tomwer/gui/reconstruction/{test → tests}/test_axis.py +23 -49
- tomwer/gui/reconstruction/{test → tests}/test_nabu.py +8 -31
- tomwer/gui/reconstruction/{test → tests}/test_saaxis.py +10 -37
- tomwer/gui/reconstruction/{test → tests}/test_sadeltabeta.py +1 -26
- tomwer/gui/samplemoved/__init__.py +2 -30
- tomwer/gui/samplemoved/selectiontable.py +3 -33
- tomwer/gui/settings.py +7 -0
- tomwer/gui/stackplot.py +33 -661
- tomwer/gui/stacks.py +261 -135
- tomwer/gui/stitching/SingleAxisStitchingWidget.py +326 -0
- tomwer/gui/stitching/StitchingOptionsWidget.py +438 -0
- tomwer/gui/stitching/StitchingWindow.py +586 -0
- tomwer/gui/stitching/__init__.py +2 -0
- tomwer/gui/stitching/alignment.py +90 -0
- tomwer/gui/stitching/axisorderedlist.py +44 -34
- tomwer/gui/stitching/config/axisparams.py +23 -11
- tomwer/gui/stitching/config/output.py +6 -5
- tomwer/gui/stitching/config/positionoveraxis.py +313 -51
- tomwer/gui/stitching/config/stitchingstrategies.py +22 -16
- tomwer/gui/stitching/config/tests/test_axisparams.py +25 -0
- tomwer/gui/stitching/config/tomoobjdetails.py +3 -5
- tomwer/gui/stitching/normalization.py +1 -0
- tomwer/gui/stitching/preview.py +59 -0
- tomwer/gui/stitching/singleaxis.py +57 -0
- tomwer/gui/stitching/stitchandbackground.py +3 -2
- tomwer/gui/stitching/stitching_preview.py +44 -36
- tomwer/gui/stitching/stitching_raw.py +5 -3
- tomwer/gui/stitching/tests/test_ZStitchingWindow.py +88 -0
- tomwer/gui/stitching/tests/test_axis_ordered_list.py +21 -0
- tomwer/gui/stitching/tests/test_normalization.py +27 -0
- tomwer/gui/stitching/tests/test_preview.py +68 -0
- tomwer/gui/stitching/tests/test_stitching_raw.py +110 -0
- tomwer/gui/stitching/tests/utils.py +92 -0
- tomwer/gui/stitching/utils.py +14 -0
- tomwer/gui/stitching/z_stitching/fineestimation.py +4 -32
- tomwer/gui/stitching/z_stitching/tests/test_fine_estimation.py +35 -0
- tomwer/gui/stitching/z_stitching/tests/test_raw_estimation.py +215 -0
- tomwer/gui/stitching/z_stitching/tests/test_stitching_window.py +51 -0
- tomwer/gui/tests/__init__.py +0 -0
- tomwer/gui/tests/test_axis_gui.py +27 -0
- tomwer/gui/{test → tests}/test_qfolder_dialog.py +1 -1
- tomwer/gui/utils/RangeWidget.py +44 -0
- tomwer/gui/utils/buttons.py +4 -3
- tomwer/gui/utils/completer.py +2 -33
- tomwer/gui/utils/flow.py +11 -40
- tomwer/gui/utils/gpu.py +60 -0
- tomwer/gui/utils/illustrations.py +1 -26
- tomwer/gui/utils/inputwidget.py +35 -73
- tomwer/gui/utils/lineselector/lineselector.py +9 -46
- tomwer/gui/utils/loadingmode.py +81 -0
- tomwer/gui/utils/qt_utils.py +9 -0
- tomwer/gui/utils/sandboxes.py +1 -26
- tomwer/gui/utils/scandescription.py +2 -31
- tomwer/gui/utils/scrollarea.py +6 -55
- tomwer/gui/utils/slider.py +4 -28
- tomwer/gui/utils/splashscreen.py +0 -28
- tomwer/gui/utils/step.py +14 -13
- tomwer/gui/utils/tests/test_completer.py +41 -0
- tomwer/gui/utils/tests/test_line_selector.py +21 -0
- tomwer/gui/utils/tests/test_splashscreen.py +8 -0
- tomwer/gui/utils/tests/test_vignettes.py +68 -0
- tomwer/gui/utils/unitsystem.py +15 -69
- tomwer/gui/utils/utils.py +4 -5
- tomwer/gui/utils/vignettes.py +10 -41
- tomwer/gui/utils/waiterthread.py +0 -26
- tomwer/gui/visualization/__init__.py +2 -0
- tomwer/gui/visualization/dataviewer.py +68 -421
- tomwer/gui/visualization/diffviewer/diffviewer.py +2 -30
- tomwer/gui/visualization/diffviewer/shiftwidget.py +4 -29
- tomwer/gui/visualization/fullscreenplot.py +5 -5
- tomwer/gui/visualization/imagestack.py +403 -0
- tomwer/gui/visualization/nxtomometadata.py +0 -4
- tomwer/gui/visualization/reconstructionparameters.py +14 -32
- tomwer/gui/visualization/scanoverview.py +33 -66
- tomwer/gui/visualization/sinogramviewer.py +2 -28
- tomwer/gui/visualization/test/__init__.py +0 -28
- tomwer/gui/visualization/test/test_dataviewer.py +1 -28
- tomwer/gui/visualization/test/test_diffviewer.py +1 -28
- tomwer/gui/visualization/test/test_nx_tomo_metadata_viewer.py +0 -5
- tomwer/gui/visualization/test/test_reconstruction_parameters.py +1 -27
- tomwer/gui/visualization/test/test_sinogramviewer.py +1 -28
- tomwer/gui/visualization/test/test_stacks.py +184 -115
- tomwer/gui/visualization/test/test_volumeviewer.py +3 -2
- tomwer/gui/visualization/tomoobjoverview.py +2 -2
- tomwer/gui/visualization/volumeoverview.py +3 -2
- tomwer/gui/visualization/volumeviewer.py +47 -43
- tomwer/io/__init__.py +2 -0
- tomwer/io/utils/h5pyutils.py +1 -27
- tomwer/io/utils/test/test_raw_and_processed_data.py +10 -0
- tomwer/io/utils/test/test_utils.py +67 -0
- tomwer/io/utils/utils.py +2 -31
- tomwer/resources/__init__.py +13 -33
- tomwer/resources/gui/icons/edit_downstream.svg +114 -0
- tomwer/resources/gui/icons/edit_upstream.svg +112 -0
- tomwer/resources/gui/icons/free_edition.svg +23 -0
- tomwer/resources/gui/icons/icat_gallery_opts.png +0 -0
- tomwer/resources/gui/icons/icat_gallery_opts.svg +80 -0
- tomwer/resources/gui/icons/search.png +0 -0
- tomwer/resources/gui/icons/search.svg +23 -0
- tomwer/resources/gui/icons/warning.png +0 -0
- tomwer/synctools/__init__.py +2 -0
- tomwer/synctools/axis.py +1 -27
- tomwer/synctools/darkref.py +1 -26
- tomwer/synctools/datalistener.py +1 -27
- tomwer/synctools/datatransfert.py +2 -27
- tomwer/synctools/imageloaderthread.py +1 -28
- tomwer/synctools/rsyncmanager.py +1 -25
- tomwer/synctools/saaxis.py +1 -26
- tomwer/synctools/sadeltabeta.py +1 -26
- tomwer/synctools/stacks/control/datalistener.py +1 -26
- tomwer/synctools/stacks/processingstack.py +4 -33
- tomwer/synctools/stacks/reconstruction/axis.py +2 -31
- tomwer/synctools/stacks/reconstruction/castvolume.py +12 -43
- tomwer/synctools/stacks/reconstruction/dkrefcopy.py +3 -26
- tomwer/synctools/stacks/reconstruction/nabu.py +1 -26
- tomwer/synctools/stacks/reconstruction/normalization.py +1 -26
- tomwer/synctools/stacks/reconstruction/saaxis.py +1 -26
- tomwer/synctools/stacks/reconstruction/sadeltabeta.py +1 -26
- tomwer/synctools/tests/__init__.py +0 -0
- tomwer/synctools/{test → tests}/test_darkRefs.py +16 -40
- tomwer/synctools/{test → tests}/test_foldertransfer.py +2 -33
- tomwer/synctools/utils/scanstages.py +2 -31
- tomwer/tests/__init__.py +1 -0
- tomwer/tests/app/test_stitching.py +95 -0
- tomwer/tests/datasets.py +1 -5
- tomwer/tests/orangecontrib/tomwer/widgets/cluster/tests/test_future_supervisorow.py +48 -0
- tomwer/tests/orangecontrib/tomwer/widgets/cluster/tests/test_slurm_clusterow.py +40 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_advancement.py +8 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_data_validator.py +55 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_datadiscovery.py +129 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_datalistener.py +111 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_dataselector.py +69 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_datawatcher.py +411 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_emailow.py +29 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_notifier.py +24 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_nxtomo_concatenate_ow.py +64 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_nxtomomill.py +133 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_reduce_dark_flat_selector.py +40 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_singletomoobj.py +40 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_timerow.py +25 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_tomoobj_series.py +96 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_volume_selector.py +69 -0
- orangecontrib/tomwer/widgets/edit/test/test_image_key_editor.py → tomwer/tests/orangecontrib/tomwer/widgets/debugtools/tests/test_dataset_generator.py +17 -16
- tomwer/tests/orangecontrib/tomwer/widgets/debugtools/tests/test_object_inspector.py +36 -0
- {orangecontrib/tomwer/widgets/edit/test → tomwer/tests/orangecontrib/tomwer/widgets/edit/tests}/test_dark_flat_patch.py +1 -27
- tomwer/tests/orangecontrib/tomwer/widgets/edit/tests/test_image_key_editor.py +30 -0
- tomwer/tests/orangecontrib/tomwer/widgets/edit/tests/test_nxtomo_editor.py +138 -0
- tomwer/tests/orangecontrib/tomwer/widgets/other/tests/test_pythonscript.py +31 -0
- tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_axis.py +215 -0
- tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_cast_volumeow.py +58 -0
- tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_dark_refs_widget.py +136 -0
- tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_delta_beta_selector.py +15 -0
- tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_i_norm.py +200 -0
- tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_nabu_helical_prepare_weights_double.py +20 -0
- tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_nabu_volume.py +74 -0
- tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_nabu_widget.py +107 -0
- tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_sa_delta_beta.py +194 -0
- tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_saaxis.py +194 -0
- tomwer/tests/orangecontrib/tomwer/widgets/stitching/tests/test_zstitching.py +313 -0
- tomwer/tests/orangecontrib/tomwer/widgets/tests/test_conditions.py +85 -0
- tomwer/tests/orangecontrib/tomwer/widgets/tests/test_darkref.py +225 -0
- tomwer/tests/orangecontrib/tomwer/widgets/tests/test_foldertransfert.py +105 -0
- tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_dataviewerow.py +57 -0
- tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_diffviewerow.py +39 -0
- tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_nxtomo_metadata_viewer.py +29 -0
- tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_radio_stackow.py +31 -0
- tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_sample_movedow.py +46 -0
- tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_sinogram_viewerow.py +31 -0
- tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_slice_stackow.py +31 -0
- tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_volume_viewerow.py +32 -0
- tomwer/tests/test_ewoks/test_conversion.py +104 -0
- tomwer/tests/test_ewoks/test_single_node_execution.py +87 -0
- tomwer/tests/test_ewoks/test_workflows.py +138 -0
- tomwer/utils.py +11 -39
- tomwer/version.py +3 -3
- {tomwer-1.3.27.dist-info → tomwer-1.4.0rc0.dist-info}/LICENSE +3 -3
- tomwer-1.4.0rc0.dist-info/METADATA +337 -0
- tomwer-1.4.0rc0.dist-info/RECORD +909 -0
- {tomwer-1.3.27.dist-info → tomwer-1.4.0rc0.dist-info}/WHEEL +1 -1
- {tomwer-1.3.27.dist-info → tomwer-1.4.0rc0.dist-info}/entry_points.txt +1 -0
- orangecontrib/tomwer/widgets/control/DataListOW.py +0 -129
- orangecontrib/tomwer/widgets/control/TomoObjSerieOW.py +0 -86
- orangecontrib/tomwer/widgets/control/VolumeSymLinkOW.py +0 -182
- orangecontrib/tomwer/widgets/edit/test/test_nxtomo_editor.py +0 -141
- orangecontrib/tomwer/widgets/icat/PublishProcessedDataOW.py +0 -115
- orangecontrib/tomwer/widgets/icat/RawDataScreenshotCreatorOW.py +0 -98
- orangecontrib/tomwer/widgets/icat/SaveToGalleryAndPublishOW.py +0 -129
- orangecontrib/tomwer/widgets/icat/icons/add_gallery.png +0 -0
- orangecontrib/tomwer/widgets/icat/icons/add_gallery.svg +0 -82
- orangecontrib/tomwer/widgets/icat/icons/raw_screenshots.png +0 -0
- orangecontrib/tomwer/widgets/icat/icons/raw_screenshots.svg +0 -143
- orangecontrib/tomwer/widgets/visualization/LivesliceOW.py +0 -87
- orangecontrib/tomwer/widgets/visualization/icons/liveslice.png +0 -0
- orangecontrib/tomwer/widgets/visualization/icons/liveslice.svg +0 -110
- tomwer/core/log/logger.py +0 -130
- tomwer/core/process/control/test/test_volume_link.py +0 -74
- tomwer/core/process/control/tomoobjserie.py +0 -12
- tomwer/core/process/control/volumesymlink.py +0 -200
- tomwer/core/process/icat/createscreenshots.py +0 -100
- tomwer/core/process/icat/gallery.py +0 -377
- tomwer/core/process/icat/icatbase.py +0 -36
- tomwer/core/process/icat/publish.py +0 -228
- tomwer/core/process/icat/screenshots.py +0 -27
- tomwer/core/process/reconstruction/test/test_darkref.py +0 -60
- tomwer/core/process/reconstruction/test/test_sadeltabeta.py +0 -74
- tomwer/core/process/visualization/liveslice.py +0 -6
- tomwer/core/progress.py +0 -100
- tomwer/core/scan/test/test_edf.py +0 -53
- tomwer/core/scan/test/test_future_scan.py +0 -61
- tomwer/core/scan/test/test_h5.py +0 -96
- tomwer/core/test/test_scanutils.py +0 -53
- tomwer/gui/control/emailnotifier.py +0 -174
- tomwer/gui/control/serie/seriewaiter.py +0 -28
- tomwer/gui/control/test/__init__.py +0 -28
- tomwer/gui/control/test/test_datalist.py +0 -96
- tomwer/gui/control/test/test_datavalidator.py +0 -54
- tomwer/gui/control/test/test_email.py +0 -35
- tomwer/gui/control/test/test_process_manager.py +0 -65
- tomwer/gui/control/test/test_scanselector.py +0 -67
- tomwer/gui/edit/test/__init__.py +0 -28
- tomwer/gui/icat/gallery.py +0 -214
- tomwer/gui/icat/publish.py +0 -187
- tomwer/gui/reconstruction/axis/axis.py +0 -733
- tomwer/gui/reconstruction/axis/radioaxis.py +0 -2467
- tomwer/gui/stitching/stitching.py +0 -1388
- tomwer/gui/test/__init__.py +0 -28
- tomwer/gui/test/test_axis_gui.py +0 -34
- tomwer/synctools/stacks/edit/darkflatpatch.py +0 -169
- tomwer/synctools/stacks/edit/imagekeyeditor.py +0 -135
- tomwer/third_part/WaitingOverlay.py +0 -110
- tomwer-1.3.27-py3.11-nspkg.pth +0 -1
- tomwer-1.3.27.dist-info/METADATA +0 -292
- tomwer-1.3.27.dist-info/RECORD +0 -785
- tomwer-1.3.27.dist-info/namespace_packages.txt +0 -1
- /orangecontrib/tomwer/{widgets/edit/test → tests}/__init__.py +0 -0
- {tomwer/core/process/control/test → orangecontrib/tomwer/tutorials/id16b}/__init__.py +0 -0
- {tomwer/core/process/icat → orangecontrib/tomwer/widgets/cluster/tests}/__init__.py +0 -0
- /orangecontrib/tomwer/widgets/control/icons/{tomoobjserie.png → tomoobjseries.png} +0 -0
- {tomwer/core/process/reconstruction/test → orangecontrib/tomwer/widgets/control/tests}/__init__.py +0 -0
- /orangecontrib/tomwer/widgets/{icat → dataportal}/icons/publish_processed_data.png +0 -0
- /orangecontrib/tomwer/widgets/{icat → dataportal}/icons/publish_processed_data.svg +0 -0
- {tomwer/core/process/test → orangecontrib/tomwer/widgets/debugtools/tests}/__init__.py +0 -0
- {tomwer/core/scan/test → orangecontrib/tomwer/widgets/edit/tests}/__init__.py +0 -0
- {tomwer/core/test → orangecontrib/tomwer/widgets/other/tests}/__init__.py +0 -0
- {tomwer/gui/cluster/test → orangecontrib/tomwer/widgets/reconstruction/tests}/__init__.py +0 -0
- {tomwer/gui/control/serie → orangecontrib/tomwer/widgets/stitching/tests}/__init__.py +0 -0
- {tomwer/gui/icat → orangecontrib/tomwer/widgets/tests}/__init__.py +0 -0
- {tomwer/gui/reconstruction/test → orangecontrib/tomwer/widgets/visualization/tests}/__init__.py +0 -0
- /tomwer/{synctools/stacks/edit → app/stitching}/__init__.py +0 -0
- /tomwer/{synctools/test → core/process/control/tests}/__init__.py +0 -0
- /tomwer/core/process/control/{test → tests}/test_email.py +0 -0
- /tomwer/core/process/control/{test → tests}/test_h52nx_process.py +0 -0
- /tomwer/{third_part → core/process/drac}/__init__.py +0 -0
- /tomwer/core/process/reconstruction/{test → tests}/test_axis_params.py +0 -0
- /tomwer/core/process/reconstruction/{test → tests}/test_darkref_copy.py +0 -0
- /tomwer/core/process/reconstruction/{test → tests}/test_paramsbase.py +0 -0
- /tomwer/core/process/reconstruction/{test → tests}/test_utils.py +0 -0
- /tomwer/core/scan/{test → tests}/test_scan.py +0 -0
- /tomwer/gui/control/{serie → series}/nxtomoconcatenate.py +0 -0
- /tomwer/gui/control/{test → tests}/test_datadiscovery.py +0 -0
- /tomwer/gui/control/{test → tests}/test_reducedarkflat_selector.py +0 -0
- /tomwer/gui/control/{test → tests}/test_single_tomo_obj.py +0 -0
- {orangecontrib/tomwer/widgets/edit/test → tomwer/tests/orangecontrib/tomwer/widgets/edit/tests}/test_image_key_upgrader.py +0 -0
- {tomwer-1.3.27.dist-info → tomwer-1.4.0rc0.dist-info}/top_level.txt +0 -0
@@ -1,34 +1,6 @@
|
|
1
1
|
# coding: utf-8
|
2
|
-
|
3
|
-
|
4
|
-
# Copyright (c) 2016-2017 European Synchrotron Radiation Facility
|
5
|
-
#
|
6
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
-
# of this software and associated documentation files (the "Software"), to deal
|
8
|
-
# in the Software without restriction, including without limitation the rights
|
9
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
-
# copies of the Software, and to permit persons to whom the Software is
|
11
|
-
# furnished to do so, subject to the following conditions:
|
12
|
-
#
|
13
|
-
# The above copyright notice and this permission notice shall be included in
|
14
|
-
# all copies or substantial portions of the Software.
|
15
|
-
#
|
16
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
|
-
# THE SOFTWARE.
|
23
|
-
#
|
24
|
-
# ###########################################################################*/
|
25
|
-
|
26
|
-
__authors__ = ["H. Payno"]
|
27
|
-
__license__ = "MIT"
|
28
|
-
__date__ = "04/08/2020"
|
29
|
-
|
30
|
-
|
31
|
-
import typing
|
2
|
+
from __future__ import annotations
|
3
|
+
|
32
4
|
from asyncio.log import logger
|
33
5
|
|
34
6
|
from silx.gui import qt
|
@@ -36,6 +8,7 @@ from silx.gui import qt
|
|
36
8
|
from tomwer.core.process.reconstruction.nabu.utils import (
|
37
9
|
_NabuStages,
|
38
10
|
)
|
11
|
+
from tomwer.core.utils.dictutils import concatenate_dict
|
39
12
|
from tomwer.gui import icons
|
40
13
|
from tomwer.gui.configuration.action import (
|
41
14
|
BasicConfigurationAction,
|
@@ -48,6 +21,11 @@ from tomwer.gui.reconstruction.nabu.nabuconfig.output import (
|
|
48
21
|
NabuOutputLocationWidget,
|
49
22
|
QNabuFileFormatComboBox,
|
50
23
|
)
|
24
|
+
from tomwer.gui.reconstruction.nabu.platform import NabuPlatformSettings
|
25
|
+
from tomwer.gui.settings import (
|
26
|
+
TAB_LABEL_RECONSTRUCTION_SETTINGS,
|
27
|
+
TAB_LABEL_PLATFORM_SETTINGS,
|
28
|
+
)
|
51
29
|
|
52
30
|
|
53
31
|
class SliceSelector(qt.QWidget):
|
@@ -57,6 +35,7 @@ class SliceSelector(qt.QWidget):
|
|
57
35
|
"""
|
58
36
|
|
59
37
|
valueChanged = qt.Signal()
|
38
|
+
"""emit when the slice value change"""
|
60
39
|
|
61
40
|
def __init__(
|
62
41
|
self, label, auto_alias, is_end, grid_layout, index_layout, parent=None
|
@@ -184,10 +163,10 @@ class NabuVolumeWidget(_NabuStageConfigBase, qt.QWidget):
|
|
184
163
|
)
|
185
164
|
self._redefineNabuFileFormat.setCheckable(True)
|
186
165
|
self._redefineNabuFileFormat.setLayout(qt.QVBoxLayout())
|
187
|
-
self.
|
188
|
-
self._redefineNabuFileFormat.layout().addWidget(self.
|
166
|
+
self._fileFormatCB = QNabuFileFormatComboBox(self._redefineNabuFileFormat)
|
167
|
+
self._redefineNabuFileFormat.layout().addWidget(self._fileFormatCB)
|
189
168
|
self.layout().addWidget(self._redefineNabuFileFormat, 4, 0, 1, 2)
|
190
|
-
self.registerWidget(self.
|
169
|
+
self.registerWidget(self._fileFormatCB, "advanced")
|
191
170
|
self.registerWidget(self._redefineNabuFileFormat, "advanced")
|
192
171
|
|
193
172
|
# redefine output location
|
@@ -202,35 +181,9 @@ class NabuVolumeWidget(_NabuStageConfigBase, qt.QWidget):
|
|
202
181
|
self.registerWidget(self._redefineNabuOutputLocation, "advanced")
|
203
182
|
self.registerWidget(self._outputLocationWidget, "advanced")
|
204
183
|
|
205
|
-
#
|
206
|
-
self.
|
207
|
-
self.layout().addWidget(self.
|
208
|
-
self.registerWidget(self._labelGPUFract, "advanced")
|
209
|
-
self._spbGPUFract = qt.QSpinBox(self)
|
210
|
-
self._spbGPUFract.setSingleStep(10)
|
211
|
-
self._spbGPUFract.setSuffix("%")
|
212
|
-
self._spbGPUFract.setMinimum(1)
|
213
|
-
self._spbGPUFract.setMaximum(100)
|
214
|
-
self.layout().addWidget(self._spbGPUFract, 50, 1, 1, 1)
|
215
|
-
self._spbGPUFract.setToolTip("Which fraction of GPU memory to use.")
|
216
|
-
self.registerWidget(self._spbGPUFract, "advanced")
|
217
|
-
|
218
|
-
# cpu percentage
|
219
|
-
self._labelCPUFract = qt.QLabel("CPU percentage usage", self)
|
220
|
-
self.layout().addWidget(self._labelCPUFract, 51, 0, 1, 1)
|
221
|
-
self.registerWidget(self._labelCPUFract, "advanced")
|
222
|
-
self._spbCPUFract = qt.QSpinBox(self)
|
223
|
-
self._spbCPUFract.setSingleStep(10)
|
224
|
-
self._spbCPUFract.setSuffix("%")
|
225
|
-
self._spbCPUFract.setMinimum(1)
|
226
|
-
self._spbCPUFract.setMaximum(100)
|
227
|
-
self.layout().addWidget(self._spbCPUFract, 52, 1, 1, 1)
|
228
|
-
self._spbCPUFract.setToolTip("Which fraction of CPU memory to use.")
|
229
|
-
self.registerWidget(self._spbCPUFract, "advanced")
|
230
|
-
|
231
|
-
# opt use phase paganin
|
232
|
-
self._usePhaseQCB = qt.QCheckBox("Use phase paganin")
|
233
|
-
self.layout().addWidget(self._usePhaseQCB, 53, 0, 1, 2)
|
184
|
+
# opt use phase Paganin
|
185
|
+
self._usePhaseQCB = qt.QCheckBox("Use phase Paganin")
|
186
|
+
self.layout().addWidget(self._usePhaseQCB, 52, 0, 1, 2)
|
234
187
|
self.registerWidget(self._usePhaseQCB, "advanced")
|
235
188
|
self._usePhaseQCB.setToolTip(
|
236
189
|
"Whether to use a margin when " "performing phase retrieval."
|
@@ -243,8 +196,6 @@ class NabuVolumeWidget(_NabuStageConfigBase, qt.QWidget):
|
|
243
196
|
|
244
197
|
# set up
|
245
198
|
self._histogramCB.setChecked(True)
|
246
|
-
self._spbGPUFract.setValue(90)
|
247
|
-
self._spbCPUFract.setValue(90)
|
248
199
|
self._usePhaseQCB.setChecked(True)
|
249
200
|
self._redefineNabuFileFormat.setChecked(False)
|
250
201
|
self._redefineNabuOutputLocation.setChecked(False)
|
@@ -253,8 +204,6 @@ class NabuVolumeWidget(_NabuStageConfigBase, qt.QWidget):
|
|
253
204
|
# connect signal / slot
|
254
205
|
self._fromSlice.valueChanged.connect(self._triggerSigConfChanged)
|
255
206
|
self._toSlice.valueChanged.connect(self._triggerSigConfChanged)
|
256
|
-
self._spbGPUFract.valueChanged.connect(self._triggerSigConfChanged)
|
257
|
-
self._spbCPUFract.valueChanged.connect(self._triggerSigConfChanged)
|
258
207
|
self._usePhaseQCB.toggled.connect(self._triggerSigConfChanged)
|
259
208
|
self._outputLocationWidget._outputDirQLE.editingFinished.connect(
|
260
209
|
self._triggerSigConfChanged
|
@@ -274,7 +223,7 @@ class NabuVolumeWidget(_NabuStageConfigBase, qt.QWidget):
|
|
274
223
|
else:
|
275
224
|
return None
|
276
225
|
|
277
|
-
def setNabuOutputLocation(self, location:
|
226
|
+
def setNabuOutputLocation(self, location: str | None):
|
278
227
|
if location is None:
|
279
228
|
self._redefineNabuOutputLocation.setChecked(False)
|
280
229
|
else:
|
@@ -287,37 +236,25 @@ class NabuVolumeWidget(_NabuStageConfigBase, qt.QWidget):
|
|
287
236
|
|
288
237
|
def getNabuFileFormat(self):
|
289
238
|
if self.redefineNabuFileFormat():
|
290
|
-
return self.
|
239
|
+
return self._fileFormatCB.currentText()
|
291
240
|
else:
|
292
241
|
return None
|
293
242
|
|
294
|
-
def setNabuFileFormat(self, file_format:
|
243
|
+
def setNabuFileFormat(self, file_format: str | None):
|
295
244
|
if file_format is None:
|
296
245
|
self._redefineNabuFileFormat.setChecked(False)
|
297
246
|
else:
|
298
247
|
assert isinstance(file_format, str)
|
299
248
|
self._redefineNabuFileFormat.setChecked(True)
|
300
|
-
idx = self.
|
249
|
+
idx = self._fileFormatCB.findText(file_format)
|
301
250
|
if idx < 0:
|
302
251
|
logger.error(f"unable to find file format {file_format}")
|
303
252
|
else:
|
304
|
-
self.
|
253
|
+
self._fileFormatCB.setCurrentIndex(idx)
|
305
254
|
|
306
255
|
def _triggerSigConfChanged(self, *args, **kwargs):
|
307
256
|
self.sigConfigChanged.emit()
|
308
257
|
|
309
|
-
def getCPUFract(self):
|
310
|
-
return self._spbCPUFract.value() / 100.0
|
311
|
-
|
312
|
-
def setCPUFract(self, value):
|
313
|
-
return self._spbCPUFract.setValue(int(value * 100.0))
|
314
|
-
|
315
|
-
def getGPUFract(self):
|
316
|
-
return self._spbGPUFract.value() / 100.0
|
317
|
-
|
318
|
-
def setGPUFract(self, value):
|
319
|
-
return self._spbGPUFract.setValue(int(value * 100.0))
|
320
|
-
|
321
258
|
def getStartZ(self):
|
322
259
|
return self._fromSlice.value()
|
323
260
|
|
@@ -352,8 +289,6 @@ class NabuVolumeWidget(_NabuStageConfigBase, qt.QWidget):
|
|
352
289
|
return {
|
353
290
|
"start_z": self.getStartZ(),
|
354
291
|
"end_z": self.getEndZ(),
|
355
|
-
"gpu_mem_fraction": self.getGPUFract(),
|
356
|
-
"cpu_mem_fraction": self.getCPUFract(),
|
357
292
|
"use_phase_margin": self.phasePaganinRequested(),
|
358
293
|
"postproc": {
|
359
294
|
"output_histogram": int(self.isHistogramRequested()),
|
@@ -369,10 +304,6 @@ class NabuVolumeWidget(_NabuStageConfigBase, qt.QWidget):
|
|
369
304
|
self.setStartZ(config["start_z"])
|
370
305
|
if "end_z" in config:
|
371
306
|
self.setEndZ(config["end_z"])
|
372
|
-
if "gpu_mem_fraction" in config:
|
373
|
-
self.setGPUFract(config["gpu_mem_fraction"])
|
374
|
-
if "cpu_mem_fraction" in config:
|
375
|
-
self.setCPUFract(config["cpu_mem_fraction"])
|
376
307
|
if "use_phase_margin" in config:
|
377
308
|
self.setPhasePaganinRequested(config["use_phase_margin"])
|
378
309
|
if "postproc" in config:
|
@@ -406,6 +337,47 @@ class NabuVolumeWidget(_NabuStageConfigBase, qt.QWidget):
|
|
406
337
|
return self._configuration_level
|
407
338
|
|
408
339
|
|
340
|
+
class NabuVolumeTabWidget(qt.QTabWidget):
|
341
|
+
"""
|
342
|
+
Widget that integrate the reconstruction settings and the platform (local) settings
|
343
|
+
"""
|
344
|
+
|
345
|
+
sigConfigChanged = qt.Signal()
|
346
|
+
|
347
|
+
def __init__(self, parent: qt.QWidget | None = ...) -> None:
|
348
|
+
super().__init__(parent)
|
349
|
+
self._configurationLevel = ConfigurationLevel.OPTIONAL
|
350
|
+
self._nabuSettingsWidget = NabuVolumeWidget(parent=self)
|
351
|
+
self.addTab(self._nabuSettingsWidget, TAB_LABEL_RECONSTRUCTION_SETTINGS)
|
352
|
+
|
353
|
+
self._platformSettingsWidget = NabuPlatformSettings(parent=self)
|
354
|
+
self.addTab(self._platformSettingsWidget, TAB_LABEL_PLATFORM_SETTINGS)
|
355
|
+
|
356
|
+
# connect signal / slot
|
357
|
+
self._nabuSettingsWidget.sigConfigChanged.connect(self.sigConfigChanged)
|
358
|
+
self._platformSettingsWidget.sigConfigChanged.connect(self.sigConfigChanged)
|
359
|
+
|
360
|
+
def getConfiguration(self) -> dict:
|
361
|
+
return concatenate_dict(
|
362
|
+
self._nabuSettingsWidget.getConfiguration(),
|
363
|
+
self._platformSettingsWidget.getConfiguration(),
|
364
|
+
)
|
365
|
+
|
366
|
+
def setConfiguration(self, config: dict) -> None:
|
367
|
+
self._nabuSettingsWidget.setConfiguration(config=config)
|
368
|
+
self._platformSettingsWidget.setConfiguration(config=config)
|
369
|
+
|
370
|
+
def setConfigurationLevel(self, level):
|
371
|
+
self._configurationLevel = ConfigurationLevel(level)
|
372
|
+
self._nabuSettingsWidget.setConfigurationLevel(level=self._configurationLevel)
|
373
|
+
self._platformSettingsWidget.setConfigurationLevel(
|
374
|
+
level=self._configurationLevel
|
375
|
+
)
|
376
|
+
|
377
|
+
def getConfigurationLevel(self):
|
378
|
+
return self._configuration_level
|
379
|
+
|
380
|
+
|
409
381
|
class NabuVolumeWindow(qt.QMainWindow):
|
410
382
|
"""
|
411
383
|
Widget to define settings for a volume reconstruction
|
@@ -419,7 +391,7 @@ class NabuVolumeWindow(qt.QMainWindow):
|
|
419
391
|
|
420
392
|
self.setWindowFlags(qt.Qt.Widget)
|
421
393
|
|
422
|
-
self._mainWidget =
|
394
|
+
self._mainWidget = NabuVolumeTabWidget(parent=self)
|
423
395
|
self.setCentralWidget(self._mainWidget)
|
424
396
|
|
425
397
|
# add toolbar
|
@@ -1,40 +1,11 @@
|
|
1
1
|
# coding: utf-8
|
2
|
-
# /*##########################################################################
|
3
|
-
#
|
4
|
-
# Copyright (c) 2016-2017 European Synchrotron Radiation Facility
|
5
|
-
#
|
6
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
-
# of this software and associated documentation files (the "Software"), to deal
|
8
|
-
# in the Software without restriction, including without limitation the rights
|
9
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
-
# copies of the Software, and to permit persons to whom the Software is
|
11
|
-
# furnished to do so, subject to the following conditions:
|
12
|
-
#
|
13
|
-
# The above copyright notice and this permission notice shall be included in
|
14
|
-
# all copies or substantial portions of the Software.
|
15
|
-
#
|
16
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
|
-
# THE SOFTWARE.
|
23
|
-
#
|
24
|
-
# ###########################################################################*/
|
25
2
|
"""
|
26
3
|
contains gui relative to intensity normalization
|
27
4
|
"""
|
28
5
|
|
6
|
+
from __future__ import annotations
|
29
7
|
|
30
|
-
__authors__ = [
|
31
|
-
"H. Payno",
|
32
|
-
]
|
33
|
-
__license__ = "MIT"
|
34
|
-
__date__ = "23/06/2021"
|
35
8
|
|
36
|
-
|
37
|
-
import typing
|
38
9
|
import weakref
|
39
10
|
|
40
11
|
from silx.gui import qt
|
@@ -155,7 +126,7 @@ class SinoNormWindow(qt.QMainWindow):
|
|
155
126
|
else:
|
156
127
|
return None
|
157
128
|
|
158
|
-
def setScan(self, scan:
|
129
|
+
def setScan(self, scan: TomwerScanBase | None):
|
159
130
|
self._scan = weakref.ref(scan)
|
160
131
|
self._centralWidget.setScan(scan=scan)
|
161
132
|
self._optsWidget.setScan(scan=scan)
|
@@ -199,7 +170,7 @@ class _Viewer(qt.QTabWidget):
|
|
199
170
|
self._sinoView.sigSinoLoadEnded.connect(self._updateSinogramROI)
|
200
171
|
self._projView.sigROIChanged.connect(self._updateSinogramROI)
|
201
172
|
|
202
|
-
def setScan(self, scan:
|
173
|
+
def setScan(self, scan: TomwerScanBase | None):
|
203
174
|
"""
|
204
175
|
|
205
176
|
:param scan: scan to handle
|
@@ -685,6 +656,7 @@ class _NormIntensityControl(ControlWidget):
|
|
685
656
|
|
686
657
|
class _NormIntensityScalarValue(qt.QWidget):
|
687
658
|
sigValueChanged = qt.Signal(float)
|
659
|
+
"""emit when the scalar value to norm intensity change"""
|
688
660
|
|
689
661
|
def __init__(self, parent=None):
|
690
662
|
qt.QWidget.__init__(self, parent=parent)
|
@@ -711,6 +683,7 @@ class _NormIntensityDatasetWidget(qt.QWidget):
|
|
711
683
|
_FILE_PATH_LOCAL_VALUE = "scan master file"
|
712
684
|
|
713
685
|
sigConfigurationChanged = qt.Signal()
|
686
|
+
"""emit when configuration change"""
|
714
687
|
|
715
688
|
def __init__(self, parent=None):
|
716
689
|
qt.QWidget.__init__(self, parent)
|
@@ -0,0 +1,89 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
from __future__ import annotations
|
3
|
+
|
4
|
+
import os
|
5
|
+
import shutil
|
6
|
+
import tempfile
|
7
|
+
|
8
|
+
from silx.gui import qt
|
9
|
+
from silx.gui.utils.testutils import TestCaseQt
|
10
|
+
|
11
|
+
from tomwer.core.process.reconstruction.normalization.params import (
|
12
|
+
Method as NormalizationMethod,
|
13
|
+
)
|
14
|
+
from tomwer.core.process.reconstruction.normalization.params import (
|
15
|
+
_ValueSource as NormalizationSource,
|
16
|
+
)
|
17
|
+
from tomwer.core.utils.scanutils import MockNXtomo
|
18
|
+
from tomwer.gui.reconstruction.normalization.intensity import SinoNormWindow
|
19
|
+
|
20
|
+
|
21
|
+
class TestNormIntensityWindow(TestCaseQt):
|
22
|
+
def setUp(self):
|
23
|
+
super(TestNormIntensityWindow, self).setUp()
|
24
|
+
self._widget = SinoNormWindow(parent=None)
|
25
|
+
self._tmp_dir = tempfile.mkdtemp()
|
26
|
+
scan_path = os.path.join(self._tmp_dir, "my_scan_2")
|
27
|
+
self.scan = MockNXtomo(
|
28
|
+
scan_path=scan_path,
|
29
|
+
n_ini_proj=10,
|
30
|
+
n_proj=10,
|
31
|
+
n_alignement_proj=2,
|
32
|
+
create_final_flat=False,
|
33
|
+
create_ini_dark=True,
|
34
|
+
create_ini_flat=True,
|
35
|
+
n_refs=1,
|
36
|
+
).scan
|
37
|
+
|
38
|
+
def tearDown(self):
|
39
|
+
self._widget.setAttribute(qt.Qt.WA_DeleteOnClose)
|
40
|
+
self._widget.close()
|
41
|
+
self.qapp.processEvents()
|
42
|
+
self._widget = None
|
43
|
+
shutil.rmtree(self._tmp_dir)
|
44
|
+
super(TestNormIntensityWindow, self).tearDown()
|
45
|
+
|
46
|
+
def test(self):
|
47
|
+
self._widget.setScan(self.scan)
|
48
|
+
self._widget.show()
|
49
|
+
self.qWaitForWindowExposed(self._widget)
|
50
|
+
self._widget.setCurrentMethod(NormalizationMethod.NONE)
|
51
|
+
self.qapp.processEvents()
|
52
|
+
assert self._widget.getConfiguration() == {"source": "none", "method": "none"}
|
53
|
+
|
54
|
+
self._widget.setCurrentMethod(NormalizationMethod.CHEBYSHEV)
|
55
|
+
self.qapp.processEvents()
|
56
|
+
assert self._widget.getConfiguration() == {
|
57
|
+
"method": "chebyshev",
|
58
|
+
"source": "none",
|
59
|
+
}
|
60
|
+
|
61
|
+
self._widget.setCurrentMethod(NormalizationMethod.SUBTRACTION)
|
62
|
+
self.qapp.processEvents()
|
63
|
+
self._widget.setCurrentSource(NormalizationSource.MANUAL_ROI)
|
64
|
+
self.qapp.processEvents()
|
65
|
+
output_configuration = self._widget.getConfiguration()
|
66
|
+
assert output_configuration["method"] == "subtraction"
|
67
|
+
assert output_configuration["source"] == "manual ROI"
|
68
|
+
assert "start_x" in output_configuration
|
69
|
+
assert "end_x" in output_configuration
|
70
|
+
assert "start_y" in output_configuration
|
71
|
+
assert "end_y" in output_configuration
|
72
|
+
assert "calc_fct" in output_configuration
|
73
|
+
self._widget.setCurrentMethod(NormalizationMethod.DIVISION)
|
74
|
+
self.qapp.processEvents()
|
75
|
+
self._widget.setCurrentSource(NormalizationSource.DATASET)
|
76
|
+
self.qapp.processEvents()
|
77
|
+
output_configuration = self._widget.getConfiguration()
|
78
|
+
assert output_configuration["method"] == "division"
|
79
|
+
assert output_configuration["source"] == "from dataset"
|
80
|
+
assert "dataset_url" in output_configuration
|
81
|
+
|
82
|
+
self._widget.setCurrentMethod(NormalizationMethod.DIVISION)
|
83
|
+
self.qapp.processEvents()
|
84
|
+
self._widget.setCurrentSource(NormalizationSource.MANUAL_SCALAR)
|
85
|
+
self.qapp.processEvents()
|
86
|
+
output_configuration = self._widget.getConfiguration()
|
87
|
+
assert output_configuration["method"] == "division"
|
88
|
+
assert output_configuration["source"] == "scalar"
|
89
|
+
assert "value" in output_configuration
|
@@ -1,43 +1,12 @@
|
|
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
1
|
"""
|
26
2
|
contains gui relative to semi-automatic axis calculation
|
27
3
|
"""
|
28
4
|
|
29
|
-
|
30
|
-
__authors__ = [
|
31
|
-
"H. Payno",
|
32
|
-
]
|
33
|
-
__license__ = "MIT"
|
34
|
-
__date__ = "26/02/2021"
|
35
|
-
|
5
|
+
from __future__ import annotations
|
36
6
|
|
37
7
|
import functools
|
38
8
|
import logging
|
39
9
|
import weakref
|
40
|
-
from typing import Union
|
41
10
|
|
42
11
|
import numpy
|
43
12
|
from silx.gui import icons as silxicons
|
@@ -137,10 +106,10 @@ class SinogramViewer(_SinogramViewer):
|
|
137
106
|
"""
|
138
107
|
For now we can only modify the estimated cor
|
139
108
|
|
140
|
-
:param
|
141
|
-
:param
|
142
|
-
:param
|
143
|
-
:param
|
109
|
+
:param min:
|
110
|
+
:param max:
|
111
|
+
:param estimated_cor:
|
112
|
+
:param display_n_recons: the grid created by all cor observe
|
144
113
|
:return:
|
145
114
|
"""
|
146
115
|
self._min = cor_min
|
@@ -333,7 +302,7 @@ class _ReconstructionModeGB(qt.QGroupBox):
|
|
333
302
|
else:
|
334
303
|
raise ValueError("No reconstruction mode selected")
|
335
304
|
|
336
|
-
def setReconstructionMode(self, mode:
|
305
|
+
def setReconstructionMode(self, mode: ReconstructionMode | str) -> None:
|
337
306
|
mode = ReconstructionMode.from_value(mode)
|
338
307
|
if mode is ReconstructionMode.TILT_CORRECTION:
|
339
308
|
self._tiltCorrectionRB.setChecked(True)
|
@@ -354,7 +323,7 @@ class _ReconstructionModeGB(qt.QGroupBox):
|
|
354
323
|
else:
|
355
324
|
raise ValueError(f"mode {mode} is not handled")
|
356
325
|
|
357
|
-
def setReconstructionSlices(self, slice_:
|
326
|
+
def setReconstructionSlices(self, slice_: dict | int | str):
|
358
327
|
slice_name = None
|
359
328
|
if slice_ == "middle" or isinstance(slice_, int) or len(slice_) == 1:
|
360
329
|
self.setReconstructionMode(ReconstructionMode.VERTICAL)
|
@@ -450,7 +419,7 @@ class _DetectionAccuracyGB(qt.QGroupBox):
|
|
450
419
|
def setResearchWidth(self, width: float):
|
451
420
|
"""set research width
|
452
421
|
|
453
|
-
:param
|
422
|
+
:param width: center of rotation research width
|
454
423
|
"""
|
455
424
|
return self._accuracySlider.setValue(width)
|
456
425
|
|
@@ -524,7 +493,7 @@ class _EstimatedCorWidget(qt.QGroupBox):
|
|
524
493
|
return 0.0
|
525
494
|
elif mode in ("abs", "absolute"):
|
526
495
|
if self._frameWidth is not None:
|
527
|
-
return self._frameWidth / 2.0
|
496
|
+
return (self._frameWidth - 1) / 2.0
|
528
497
|
else:
|
529
498
|
return self._MIDDLE_COR_TXT
|
530
499
|
else:
|
@@ -550,7 +519,7 @@ class _EstimatedCorWidget(qt.QGroupBox):
|
|
550
519
|
old = self.blockSignals(True)
|
551
520
|
old_mcor = self._manualCORAbs.blockSignals(True)
|
552
521
|
self._manualCORAbs.setValue(
|
553
|
-
self._manualCORRel.value() + self._frameWidth / 2.0
|
522
|
+
self._manualCORRel.value() + (self._frameWidth - 1) / 2.0
|
554
523
|
)
|
555
524
|
self._manualCORAbs.blockSignals(old_mcor)
|
556
525
|
self.blockSignals(old)
|
@@ -560,26 +529,24 @@ class _EstimatedCorWidget(qt.QGroupBox):
|
|
560
529
|
old = self.blockSignals(True)
|
561
530
|
old_mcor = self._manualCORRel.blockSignals(True)
|
562
531
|
self._manualCORRel.setValue(
|
563
|
-
self._manualCORAbs.value() - self._frameWidth / 2.0
|
532
|
+
self._manualCORAbs.value() - (self._frameWidth - 1) / 2.0
|
564
533
|
)
|
565
534
|
self._manualCORRel.blockSignals(old_mcor)
|
566
535
|
self.blockSignals(old)
|
567
536
|
|
568
|
-
def setFrameWidth(self, width):
|
537
|
+
def setFrameWidth(self, width: float):
|
569
538
|
self._frameWidth = width
|
570
539
|
# if necessary auto reset of the absolute value
|
571
540
|
if self._manualCORAbs.value() == self._manualCORRel.value():
|
572
541
|
self._relativePositionChanged()
|
573
542
|
|
574
|
-
def getFrameWidth(self):
|
543
|
+
def getFrameWidth(self) -> float:
|
575
544
|
return self._frameWidth
|
576
545
|
|
577
|
-
def setCorValue(self, value):
|
546
|
+
def setCorValue(self, value: str | float) -> None:
|
578
547
|
"""
|
579
548
|
|
580
|
-
:param
|
581
|
-
relative value
|
582
|
-
:return:
|
549
|
+
:param value: if a float expected to be given as the relative value
|
583
550
|
"""
|
584
551
|
if value is None:
|
585
552
|
pass
|
@@ -590,7 +557,7 @@ class _EstimatedCorWidget(qt.QGroupBox):
|
|
590
557
|
self._manualCORRel.setValue(float(value))
|
591
558
|
self._manualCORRel.editingFinished.emit()
|
592
559
|
|
593
|
-
def setAbsoluteCorValue(self, value):
|
560
|
+
def setAbsoluteCorValue(self, value: str | float):
|
594
561
|
if value is None:
|
595
562
|
pass
|
596
563
|
elif value == self._MIDDLE_COR_TXT:
|