tomwer 1.3.26__py3-none-any.whl → 1.4.0__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 +51 -60
- 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 +41 -84
- 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 -10
- 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 +16 -5
- 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 +47 -804
- tomwer/core/process/reconstruction/axis/mode.py +89 -25
- tomwer/core/process/reconstruction/axis/params.py +131 -283
- tomwer/core/process/reconstruction/axis/projectiontype.py +0 -28
- tomwer/core/process/reconstruction/axis/side.py +8 -0
- 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 +64 -68
- tomwer/core/process/reconstruction/nabu/nabuslices.py +63 -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 +22 -51
- tomwer/core/process/reconstruction/sadeltabeta/params.py +2 -31
- tomwer/core/process/reconstruction/sadeltabeta/sadeltabeta.py +18 -46
- 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/reconstruction/{test → tests}/test_utils.py +4 -4
- tomwer/core/process/reconstruction/utils/cor.py +8 -4
- 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_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 +2 -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 +48 -54
- tomwer/core/scan/scanbase.py +107 -203
- 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/tests/test_process_registration.py +64 -0
- 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/fonts.py +5 -0
- 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 +275 -0
- tomwer/gui/reconstruction/axis/AxisOptionsWidget.py +313 -0
- tomwer/gui/reconstruction/axis/AxisSettingsWidget.py +797 -0
- tomwer/gui/reconstruction/axis/AxisWidget.py +534 -0
- tomwer/gui/reconstruction/axis/CalculationWidget.py +218 -0
- tomwer/gui/reconstruction/axis/CompareImages.py +11 -44
- tomwer/gui/reconstruction/axis/ControlWidget.py +285 -0
- tomwer/gui/reconstruction/axis/EstimatedCORWidget.py +394 -0
- tomwer/gui/reconstruction/axis/EstimatedCorComboBox.py +118 -0
- tomwer/gui/reconstruction/axis/InputWidget.py +347 -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 +32 -56
- 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 +23 -49
- 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 +16 -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 +25 -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 +5 -33
- 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 +43 -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 +6 -53
- tomwer/synctools/stacks/reconstruction/castvolume.py +12 -43
- tomwer/synctools/stacks/reconstruction/dkrefcopy.py +4 -27
- tomwer/synctools/stacks/reconstruction/nabu.py +3 -28
- tomwer/synctools/stacks/reconstruction/normalization.py +2 -27
- tomwer/synctools/stacks/reconstruction/saaxis.py +2 -27
- tomwer/synctools/stacks/reconstruction/sadeltabeta.py +2 -27
- 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 +199 -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 +2 -2
- {tomwer-1.3.26.dist-info → tomwer-1.4.0.dist-info}/LICENSE +3 -3
- tomwer-1.4.0.dist-info/METADATA +337 -0
- tomwer-1.4.0.dist-info/RECORD +912 -0
- {tomwer-1.3.26.dist-info → tomwer-1.4.0.dist-info}/WHEEL +1 -1
- {tomwer-1.3.26.dist-info → tomwer-1.4.0.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/test/test_axis.py +0 -309
- 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/scan/test/test_process_registration.py +0 -109
- 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 -1392
- 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.26-py3.11-nspkg.pth +0 -1
- tomwer-1.3.26.dist-info/METADATA +0 -292
- tomwer-1.3.26.dist-info/RECORD +0 -785
- tomwer-1.3.26.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/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.26.dist-info → tomwer-1.4.0.dist-info}/top_level.txt +0 -0
@@ -1,35 +1,6 @@
|
|
1
|
-
|
2
|
-
# /*##########################################################################
|
3
|
-
#
|
4
|
-
# Copyright (c) 2016-2017 European Synchrotron Radiation Facility
|
5
|
-
#
|
6
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
-
# of this software and associated documentation files (the "Software"), to deal
|
8
|
-
# in the Software without restriction, including without limitation the rights
|
9
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
-
# copies of the Software, and to permit persons to whom the Software is
|
11
|
-
# furnished to do so, subject to the following conditions:
|
12
|
-
#
|
13
|
-
# The above copyright notice and this permission notice shall be included in
|
14
|
-
# all copies or substantial portions of the Software.
|
15
|
-
#
|
16
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
|
-
# THE SOFTWARE.
|
23
|
-
#
|
24
|
-
# ###########################################################################*/
|
25
|
-
|
26
|
-
__authors__ = ["H. Payno"]
|
27
|
-
__license__ = "MIT"
|
28
|
-
__date__ = "15/12/2021"
|
29
|
-
|
1
|
+
from __future__ import annotations
|
30
2
|
|
31
3
|
import logging
|
32
|
-
from typing import Optional
|
33
4
|
|
34
5
|
from silx.gui import qt
|
35
6
|
from silx.gui.utils import blockSignals
|
@@ -90,9 +61,9 @@ class CastVolumeWidget(qt.QWidget):
|
|
90
61
|
)
|
91
62
|
self.layout().addWidget(self._minMaxAuto, 2, 1, 1, 1)
|
92
63
|
|
93
|
-
self._minPixValue = qt.QLineEdit("", self)
|
64
|
+
self._minPixValue = qt.QLineEdit("0.0", self)
|
94
65
|
self._minPixValue.setPlaceholderText("min")
|
95
|
-
self._maxPixValue = qt.QLineEdit("", self)
|
66
|
+
self._maxPixValue = qt.QLineEdit("0.0", self)
|
96
67
|
self._maxPixValue.setPlaceholderText("max")
|
97
68
|
validator = qt.QDoubleValidator(self)
|
98
69
|
validator.setNotation(qt.QDoubleValidator.ScientificNotation)
|
@@ -181,6 +152,10 @@ class CastVolumeWidget(qt.QWidget):
|
|
181
152
|
self._useDefaultSaveDirQCB.toggled.connect(self._updateOutputDirVis)
|
182
153
|
self._minMaxAuto.toggled.connect(self._configChanged)
|
183
154
|
self._minMaxAuto.toggled.connect(self._updatePixMinMaxVis)
|
155
|
+
self._minPixValue.textChanged.connect(self._configChanged)
|
156
|
+
self._maxPixValue.textChanged.connect(self._configChanged)
|
157
|
+
self._lowPercentileQSB.valueChanged.connect(self._configChanged)
|
158
|
+
self._highPercentileQSB.valueChanged.connect(self._configChanged)
|
184
159
|
|
185
160
|
def _updateCRatiosVis(self, *args, **kwargs):
|
186
161
|
self._cRatiosLabel.setVisible(
|
@@ -225,7 +200,7 @@ class CastVolumeWidget(qt.QWidget):
|
|
225
200
|
def setOverwrite(self, remove) -> None:
|
226
201
|
self._overwriteCB.setChecked(remove)
|
227
202
|
|
228
|
-
def getDataMin(self) ->
|
203
|
+
def getDataMin(self) -> float | None:
|
229
204
|
if (
|
230
205
|
self._minMaxAuto.isChecked()
|
231
206
|
or self._minPixValue.text().replace(" ", "") == ""
|
@@ -234,14 +209,15 @@ class CastVolumeWidget(qt.QWidget):
|
|
234
209
|
else:
|
235
210
|
return float(self._minPixValue.text())
|
236
211
|
|
237
|
-
def setDataMin(self, value:
|
212
|
+
def setDataMin(self, value: float | None) -> None:
|
238
213
|
with blockSignals(self._minMaxAuto):
|
239
214
|
self._minMaxAuto.setChecked(value is None)
|
240
215
|
if value is not None:
|
241
216
|
with blockSignals(self._minPixValue):
|
242
217
|
self._minPixValue.setText(str(value))
|
218
|
+
self._updatePixMinMaxVis()
|
243
219
|
|
244
|
-
def getDataMax(self) ->
|
220
|
+
def getDataMax(self) -> float | None:
|
245
221
|
if (
|
246
222
|
self._minMaxAuto.isChecked()
|
247
223
|
or self._maxPixValue.text().replace(" ", "") == ""
|
@@ -250,14 +226,15 @@ class CastVolumeWidget(qt.QWidget):
|
|
250
226
|
else:
|
251
227
|
return float(self._maxPixValue.text())
|
252
228
|
|
253
|
-
def setDataMax(self, value:
|
229
|
+
def setDataMax(self, value: float | None) -> None:
|
254
230
|
with blockSignals(self._minMaxAuto):
|
255
231
|
self._minMaxAuto.setChecked(value is None)
|
256
232
|
if value is not None:
|
257
233
|
with blockSignals(self._maxPixValue):
|
258
234
|
self._maxPixValue.setText(str(value))
|
235
|
+
self._updatePixMinMaxVis()
|
259
236
|
|
260
|
-
def setCompressionRatios(self, c_ratios:
|
237
|
+
def setCompressionRatios(self, c_ratios: list | None):
|
261
238
|
if c_ratios in (None, tuple(), list()):
|
262
239
|
c_ratios = ""
|
263
240
|
self._cRatiosQLE.setText(str(c_ratios))
|
@@ -271,29 +248,41 @@ class CastVolumeWidget(qt.QWidget):
|
|
271
248
|
else:
|
272
249
|
return None
|
273
250
|
|
251
|
+
def getRescalePercentiles(self) -> tuple[int | None, int | None]:
|
252
|
+
if self._minMaxAuto.isChecked():
|
253
|
+
return self._lowPercentileQSB.value(), self._highPercentileQSB.value()
|
254
|
+
else:
|
255
|
+
return None, None
|
256
|
+
|
257
|
+
def setRescalePercentiles(self, low: int | None, high: int | None) -> tuple:
|
258
|
+
if low is not None:
|
259
|
+
with blockSignals(self._minMaxAuto):
|
260
|
+
self._minMaxAuto.setChecked(True)
|
261
|
+
self._lowPercentileQSB.setValue(low)
|
262
|
+
if high is not None:
|
263
|
+
with blockSignals(self._minMaxAuto):
|
264
|
+
self._minMaxAuto.setChecked(True)
|
265
|
+
self._highPercentileQSB.setValue(high)
|
266
|
+
self._updatePixMinMaxVis()
|
267
|
+
|
274
268
|
def getConfiguration(self) -> dict:
|
275
269
|
rescale_min_percentile, rescale_max_percentile = self.getRescalePercentiles()
|
270
|
+
if (rescale_min_percentile, rescale_max_percentile) == (None, None):
|
271
|
+
data_min, data_max = self.getDataMin(), self.getDataMax()
|
272
|
+
else:
|
273
|
+
data_min, data_max = None, None
|
276
274
|
return {
|
277
275
|
"output_data_type": self.getOutputDataType(),
|
278
|
-
"
|
276
|
+
"output_file_format": self.getOutputFileFormat().value,
|
279
277
|
"output_dir": self.getOutputDir(),
|
280
278
|
"overwrite": self.getOverwrite(),
|
281
279
|
"rescale_min_percentile": rescale_min_percentile,
|
282
280
|
"rescale_max_percentile": rescale_max_percentile,
|
283
|
-
"data_min":
|
284
|
-
"data_max":
|
281
|
+
"data_min": data_min,
|
282
|
+
"data_max": data_max,
|
285
283
|
"compression_ratios": self.getCompressionRatios(),
|
286
284
|
}
|
287
285
|
|
288
|
-
def getRescalePercentiles(self) -> tuple:
|
289
|
-
return self._lowPercentileQSB.value(), self._highPercentileQSB.value()
|
290
|
-
|
291
|
-
def setRescalePercentiles(self, low, high) -> tuple:
|
292
|
-
if low is not None:
|
293
|
-
self._lowPercentileQSB.setValue(low)
|
294
|
-
if high is not None:
|
295
|
-
self._highPercentileQSB.setValue(high)
|
296
|
-
|
297
286
|
def setConfiguration(self, config: dict) -> None:
|
298
287
|
output_data_type = config.get("output_data_type", None)
|
299
288
|
if output_data_type is not None:
|
@@ -307,16 +296,8 @@ class CastVolumeWidget(qt.QWidget):
|
|
307
296
|
overwrite = config.get("overwrite", None)
|
308
297
|
if overwrite is not None:
|
309
298
|
self.setOverwrite(overwrite)
|
310
|
-
|
311
|
-
|
312
|
-
"rescale_percentiles"
|
313
|
-
]
|
314
|
-
_logger.warning(
|
315
|
-
"'rescale_percentiles' is deprecated. Please use 'rescale_min_percentile' and 'rescale_max_percentile' instead"
|
316
|
-
)
|
317
|
-
else:
|
318
|
-
rescale_min_percentile = config.get("rescale_min_percentile", None)
|
319
|
-
rescale_max_percentile = config.get("rescale_max_percentile", None)
|
299
|
+
rescale_min_percentile = config.get("rescale_min_percentile", None)
|
300
|
+
rescale_max_percentile = config.get("rescale_max_percentile", None)
|
320
301
|
|
321
302
|
self.setRescalePercentiles(rescale_min_percentile, rescale_max_percentile)
|
322
303
|
if "data_min" in config:
|
@@ -1,31 +1,5 @@
|
|
1
1
|
# coding: utf-8
|
2
|
-
|
3
|
-
#
|
4
|
-
# Copyright (c) 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__ = "02/12/2021"
|
2
|
+
from __future__ import annotations
|
29
3
|
|
30
4
|
|
31
5
|
from silx.gui import qt
|
@@ -39,12 +13,12 @@ def check_dark_series(scan: NXtomoScan, logger=None, user_input: bool = True) ->
|
|
39
13
|
"""
|
40
14
|
check:
|
41
15
|
- if scan has computed_dark attached. If there is more than one then ask confirmation to the user to process the dataset
|
42
|
-
- else if the NXTomo has more than one
|
16
|
+
- else if the NXTomo has more than one series of dark. Otherwise ask confirmation to the user to process the dataset
|
43
17
|
|
44
18
|
ask confirmation for processing is done by a pop up dialog.
|
45
19
|
|
46
|
-
:param
|
47
|
-
:param
|
20
|
+
:param scan: scan to check
|
21
|
+
:param user_input: if True and if n series of flat is invalid then ask the user to confirm the processing. Else print a warning and refuse processing
|
48
22
|
|
49
23
|
:return: True if processing can be done else False
|
50
24
|
:note: user can 'force' the processing to be done
|
@@ -62,9 +36,9 @@ def check_dark_series(scan: NXtomoScan, logger=None, user_input: bool = True) ->
|
|
62
36
|
image_key_values=image_keys, image_key_type=ImageKey.DARK_FIELD
|
63
37
|
)
|
64
38
|
if n_series != 1:
|
65
|
-
text = f"{n_series}
|
39
|
+
text = f"{n_series} series of dark found when one expected. Nabu won't be able to run reconstruction (flat field will fail)."
|
66
40
|
if n_series > 1:
|
67
|
-
text += "\nYou can edit image_keys from the `image-key-editor` to ignore a
|
41
|
+
text += "\nYou can edit image_keys from the `image-key-editor` to ignore a series (invalid all keys of series you want to ignore)."
|
68
42
|
if user_input is False:
|
69
43
|
text += "\n skip processing"
|
70
44
|
if logger is not None:
|
@@ -84,7 +58,7 @@ def check_dark_series(scan: NXtomoScan, logger=None, user_input: bool = True) ->
|
|
84
58
|
|
85
59
|
def check_flat_series(scan: NXtomoScan, logger, user_input: bool = True) -> bool:
|
86
60
|
"""
|
87
|
-
Insure the scan contains at least one
|
61
|
+
Insure the scan contains at least one series of flat. Otherwise warn the user nabu will not be able to process
|
88
62
|
"""
|
89
63
|
if not isinstance(scan, NXtomoScan):
|
90
64
|
raise TypeError(
|
@@ -1,34 +1,4 @@
|
|
1
|
-
|
2
|
-
# /*##########################################################################
|
3
|
-
#
|
4
|
-
# Copyright (c) 2016-2020 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__ = "11/02/2020"
|
29
|
-
|
30
|
-
|
31
|
-
from typing import Union
|
1
|
+
from __future__ import annotations
|
32
2
|
|
33
3
|
from tomwer.core.process.reconstruction.nabu.utils import _NabuStages
|
34
4
|
from tomwer.gui.configuration.level import ConfigurationLevel
|
@@ -64,8 +34,11 @@ class _NabuStageConfigBase:
|
|
64
34
|
(or a part of the stage configuration)
|
65
35
|
"""
|
66
36
|
|
67
|
-
def __init__(self, stage:
|
68
|
-
|
37
|
+
def __init__(self, stage: _NabuStages | str | None):
|
38
|
+
if stage is None:
|
39
|
+
self.__stage = None
|
40
|
+
else:
|
41
|
+
self.__stage = _NabuStages.from_value(stage)
|
69
42
|
self._registeredWidgets = {}
|
70
43
|
# list required widgets. Key is widget, value is the configuration
|
71
44
|
# level
|
@@ -87,7 +60,7 @@ class _NabuStageConfigBase:
|
|
87
60
|
def setConfiguration(self, config) -> None:
|
88
61
|
raise NotImplementedError("Base class")
|
89
62
|
|
90
|
-
def getStage(self) -> _NabuStages:
|
63
|
+
def getStage(self) -> _NabuStages | None:
|
91
64
|
return self.__stage
|
92
65
|
|
93
66
|
def setConfigurationLevel(self, level):
|
@@ -1,4 +1,4 @@
|
|
1
|
-
from
|
1
|
+
from __future__ import annotations
|
2
2
|
|
3
3
|
from silx.gui import qt
|
4
4
|
from silx.gui.utils import blockSignals
|
@@ -7,6 +7,7 @@ from silx.utils.enum import Enum as _Enum
|
|
7
7
|
from tomwer.core.process.reconstruction.nabu.utils import _NabuStages
|
8
8
|
from tomwer.gui.reconstruction.nabu.nabuconfig import base
|
9
9
|
from tomwer.gui.utils.illustrations import _IllustrationWidget
|
10
|
+
from tomwer.gui.utils.scrollarea import QComboBoxIgnoreWheel
|
10
11
|
|
11
12
|
from .reconstruction import AnglesFileWidget as Filewidget
|
12
13
|
|
@@ -69,13 +70,13 @@ class OptionalDouble(qt.QWidget):
|
|
69
70
|
def _changed(self, *args, **kwargs):
|
70
71
|
self.sigChanged.emit()
|
71
72
|
|
72
|
-
def value(self) ->
|
73
|
+
def value(self) -> float | None:
|
73
74
|
if self._cb.isChecked():
|
74
75
|
return self._dsb.value()
|
75
76
|
else:
|
76
77
|
return None
|
77
78
|
|
78
|
-
def setValue(self, value:
|
79
|
+
def setValue(self, value: float | None):
|
79
80
|
if value in (None, "None"):
|
80
81
|
self._cb.setChecked(False)
|
81
82
|
else:
|
@@ -157,7 +158,7 @@ class CTFGeometry(qt.QGroupBox):
|
|
157
158
|
def __init__(self, parent=None, title="ctf-geometry") -> None:
|
158
159
|
super().__init__(parent, title=title)
|
159
160
|
self.setLayout(qt.QFormLayout())
|
160
|
-
self._beamShapeCB =
|
161
|
+
self._beamShapeCB = QComboBoxIgnoreWheel(self)
|
161
162
|
for shape in _BeamShape.values():
|
162
163
|
self._beamShapeCB.addItem(shape)
|
163
164
|
self.layout().addRow("shape", self._beamShapeCB)
|
@@ -189,7 +190,7 @@ class CTFGeometry(qt.QGroupBox):
|
|
189
190
|
def getBeamShape(self):
|
190
191
|
return _BeamShape.from_value(self._beamShapeCB.currentText())
|
191
192
|
|
192
|
-
def setBeamShape(self, shape:
|
193
|
+
def setBeamShape(self, shape: str | _BeamShape):
|
193
194
|
shape = _BeamShape.from_value(shape)
|
194
195
|
self._beamShapeCB.setCurrentText(shape.value)
|
195
196
|
|
@@ -1,31 +1,5 @@
|
|
1
1
|
# coding: utf-8
|
2
|
-
|
3
|
-
#
|
4
|
-
# Copyright (c) 2016-2020 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__ = "11/02/2020"
|
2
|
+
from __future__ import annotations
|
29
3
|
|
30
4
|
|
31
5
|
from silx.gui import qt
|
@@ -51,7 +25,7 @@ class NabuConfiguration(qt.QWidget):
|
|
51
25
|
(stage, index option modified)
|
52
26
|
"""
|
53
27
|
|
54
|
-
def __init__(self, parent
|
28
|
+
def __init__(self, parent):
|
55
29
|
qt.QWidget.__init__(self, parent=parent)
|
56
30
|
self._stageHided = []
|
57
31
|
# list of hided stage. Not taking into account the filter
|
@@ -62,9 +36,7 @@ class NabuConfiguration(qt.QWidget):
|
|
62
36
|
self._preProcessingGB = qt.QGroupBox("pre processing", self)
|
63
37
|
self._preProcessingGB.setLayout(qt.QVBoxLayout())
|
64
38
|
|
65
|
-
self._preProcessingWidget = _NabuPreProcessingConfig(
|
66
|
-
parent=self, scrollArea=scrollArea
|
67
|
-
)
|
39
|
+
self._preProcessingWidget = _NabuPreProcessingConfig(parent=self)
|
68
40
|
self._preProcessingGB.layout().addWidget(self._preProcessingWidget)
|
69
41
|
self.layout().addWidget(self._preProcessingGB)
|
70
42
|
|
@@ -72,18 +44,15 @@ class NabuConfiguration(qt.QWidget):
|
|
72
44
|
self._phaseGB = qt.QGroupBox("phase", self)
|
73
45
|
self._phaseGB.setLayout(qt.QVBoxLayout())
|
74
46
|
|
75
|
-
self._phaseWidget = _NabuPhaseConfig(parent=self
|
47
|
+
self._phaseWidget = _NabuPhaseConfig(parent=self)
|
76
48
|
self._phaseGB.layout().addWidget(self._phaseWidget)
|
77
|
-
self._phaseGB.setCheckable(True)
|
78
49
|
self.layout().addWidget(self._phaseGB)
|
79
50
|
|
80
51
|
# reconstruction opts
|
81
52
|
self._reconstructionGB = qt.QGroupBox("reconstruction", self)
|
82
53
|
self._reconstructionGB.setLayout(qt.QVBoxLayout())
|
83
54
|
|
84
|
-
self._reconstructionWidget = _NabuReconstructionConfig(
|
85
|
-
parent=self, scrollArea=scrollArea
|
86
|
-
)
|
55
|
+
self._reconstructionWidget = _NabuReconstructionConfig(parent=self)
|
87
56
|
self._reconstructionGB.layout().addWidget(self._reconstructionWidget)
|
88
57
|
self.layout().addWidget(self._reconstructionGB)
|
89
58
|
|
@@ -95,14 +64,10 @@ class NabuConfiguration(qt.QWidget):
|
|
95
64
|
self._outputGB.layout().addWidget(self._outputWidget)
|
96
65
|
self.layout().addWidget(self._outputGB)
|
97
66
|
|
98
|
-
# set up
|
99
|
-
self._phaseGB.setChecked(True)
|
100
|
-
|
101
67
|
# connect signal / slot
|
102
68
|
self._preProcessingWidget.sigConfChanged.connect(
|
103
69
|
self._signalConfChangedPreProcessing
|
104
70
|
)
|
105
|
-
self._phaseGB.toggled.connect(self._signalPhaseActivationChanged)
|
106
71
|
self._phaseWidget.sigConfChanged.connect(self._signalConfChangedPhase)
|
107
72
|
self._reconstructionWidget.sigConfChanged.connect(
|
108
73
|
self._signalConfChangedReconstruction
|
@@ -123,9 +88,6 @@ class NabuConfiguration(qt.QWidget):
|
|
123
88
|
self._stageHided.append(self._phaseGB)
|
124
89
|
self._phaseGB.hide()
|
125
90
|
|
126
|
-
def _signalPhaseActivationChanged(self, *args, **kwargs):
|
127
|
-
self.sigConfChanged.emit(self._phaseWidget.getStage().value, "method")
|
128
|
-
|
129
91
|
def _signalConfChangedPhase(self, param):
|
130
92
|
self.sigConfChanged.emit(self._phaseWidget.getStage().value, param)
|
131
93
|
|
@@ -147,8 +109,6 @@ class NabuConfiguration(qt.QWidget):
|
|
147
109
|
"output": self._outputWidget.getConfiguration(),
|
148
110
|
"phase": self._phaseWidget.getConfiguration(),
|
149
111
|
}
|
150
|
-
if not self._phaseGB.isChecked():
|
151
|
-
config["phase"]["method"] = ""
|
152
112
|
return config
|
153
113
|
|
154
114
|
def setConfiguration(self, config):
|
@@ -156,13 +116,6 @@ class NabuConfiguration(qt.QWidget):
|
|
156
116
|
self._preProcessingWidget.setConfiguration(config["preproc"])
|
157
117
|
if "phase" in config:
|
158
118
|
self._phaseWidget.setConfiguration(config["phase"])
|
159
|
-
paganin = config["phase"].get("method", "")
|
160
|
-
if paganin == "":
|
161
|
-
self._phaseGB.setChecked(False)
|
162
|
-
else:
|
163
|
-
self._phaseGB.setChecked(True)
|
164
|
-
else:
|
165
|
-
self._phaseGB.setChecked(False)
|
166
119
|
if "reconstruction" in config:
|
167
120
|
self._reconstructionWidget.setConfiguration(config["reconstruction"])
|
168
121
|
if "tomwer_slices" in config:
|
@@ -219,37 +172,29 @@ class NabuConfigurationTab(qt.QTabWidget):
|
|
219
172
|
(stage, index option modified)
|
220
173
|
"""
|
221
174
|
|
222
|
-
def __init__(self, parent
|
175
|
+
def __init__(self, parent):
|
223
176
|
qt.QTabWidget.__init__(self, parent=parent)
|
224
177
|
|
225
178
|
# pre processing options
|
226
|
-
self._preProcessingWidget = _NabuPreProcessingConfig(
|
227
|
-
parent=self, scrollArea=scrollArea
|
228
|
-
)
|
179
|
+
self._preProcessingWidget = _NabuPreProcessingConfig(parent=self)
|
229
180
|
self.addTab(self._preProcessingWidget, "pre processing")
|
230
181
|
|
231
182
|
# phase options
|
232
183
|
self._phaseGB = qt.QGroupBox("apply phase", self)
|
233
184
|
self._phaseGB.setLayout(qt.QVBoxLayout())
|
234
185
|
|
235
|
-
self._phaseWidget = _NabuPhaseConfig(parent=self
|
186
|
+
self._phaseWidget = _NabuPhaseConfig(parent=self)
|
236
187
|
self._phaseGB.layout().addWidget(self._phaseWidget)
|
237
|
-
self._phaseGB.setCheckable(True)
|
238
188
|
self.addTab(self._phaseGB, "phase")
|
239
189
|
|
240
190
|
# reconstruction opts
|
241
|
-
self._reconstructionWidget = _NabuReconstructionConfig(
|
242
|
-
parent=self, scrollArea=scrollArea
|
243
|
-
)
|
191
|
+
self._reconstructionWidget = _NabuReconstructionConfig(parent=self)
|
244
192
|
self.addTab(self._reconstructionWidget, "reconstruction")
|
245
193
|
|
246
194
|
# output information
|
247
195
|
self._outputWidget = _NabuOutputConfig(parent=self)
|
248
196
|
self.addTab(self._outputWidget, "output")
|
249
197
|
|
250
|
-
# set up
|
251
|
-
self._phaseGB.setChecked(True)
|
252
|
-
|
253
198
|
# connect signal / slot
|
254
199
|
self._preProcessingWidget.sigConfChanged.connect(
|
255
200
|
self._signalConfChangedPreProcessing
|
@@ -279,8 +224,7 @@ class NabuConfigurationTab(qt.QTabWidget):
|
|
279
224
|
"tomwer_slices": self.getSlices(),
|
280
225
|
"output": self._outputWidget.getConfiguration(),
|
281
226
|
}
|
282
|
-
|
283
|
-
config["phase"] = self._phaseWidget.getConfiguration()
|
227
|
+
config["phase"] = self._phaseWidget.getConfiguration()
|
284
228
|
return config
|
285
229
|
|
286
230
|
def setConfiguration(self, config):
|
@@ -288,9 +232,6 @@ class NabuConfigurationTab(qt.QTabWidget):
|
|
288
232
|
self._preProcessingWidget.setConfiguration(config["preproc"])
|
289
233
|
if "phase" in config:
|
290
234
|
self._phaseWidget.setConfiguration(config["phase"])
|
291
|
-
self._phaseGB.setChecked(True)
|
292
|
-
else:
|
293
|
-
self._phaseGB.setChecked(False)
|
294
235
|
if "reconstruction" in config:
|
295
236
|
self._reconstructionWidget.setConfiguration(config["reconstruction"])
|
296
237
|
if "tomwer_slices" in config:
|
@@ -1,36 +1,9 @@
|
|
1
1
|
# coding: utf-8
|
2
|
-
|
3
|
-
#
|
4
|
-
# Copyright (c) 2016-2020 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__ = "11/02/2020"
|
2
|
+
from __future__ import annotations
|
29
3
|
|
30
4
|
|
31
5
|
import logging
|
32
6
|
import os
|
33
|
-
import typing
|
34
7
|
|
35
8
|
from silx.gui import qt
|
36
9
|
|
@@ -52,9 +25,7 @@ _logger = logging.getLogger(__name__)
|
|
52
25
|
|
53
26
|
|
54
27
|
class QNabuFileFormatComboBox(qt.QComboBox):
|
55
|
-
def __init__(
|
56
|
-
self, parent: typing.Optional[qt.QWidget] = ..., filter_formats=tuple()
|
57
|
-
) -> None:
|
28
|
+
def __init__(self, parent: qt.QWidget | None = ..., filter_formats=tuple()) -> None:
|
58
29
|
"""
|
59
30
|
:param filter_format: if provided the given file format won't have an item on the ComboBox
|
60
31
|
"""
|
@@ -122,14 +93,6 @@ class NabuOutputLocationWidget(qt.QGroupBox):
|
|
122
93
|
"Reconstruction will be saved under the PROCESSED_DATA/dataset folder. if exists else under the scan folder."
|
123
94
|
)
|
124
95
|
self.layout().addWidget(self._processedDataDirRB, 2, 0, 1, 1)
|
125
|
-
# raw data dir
|
126
|
-
self._rawDataDirRB = qt.QRadioButton(
|
127
|
-
ProcessDataOutputDirMode.RAW_DATA_FOLDER.value, self
|
128
|
-
)
|
129
|
-
self._rawDataDirRB.setToolTip(
|
130
|
-
"Reconstruction will be saved under the RAW_DATA/dataset folder. if exists else under the scan folder."
|
131
|
-
)
|
132
|
-
self.layout().addWidget(self._rawDataDirRB, 3, 0, 1, 1)
|
133
96
|
# other dir
|
134
97
|
self._otherDirRB = qt.QRadioButton(ProcessDataOutputDirMode.OTHER.value, self)
|
135
98
|
self._otherDirRB.setToolTip(
|
@@ -161,7 +124,6 @@ class NabuOutputLocationWidget(qt.QGroupBox):
|
|
161
124
|
# connect signal / slot
|
162
125
|
self._inScanFolderRB.toggled.connect(self._outputModeChanged)
|
163
126
|
self._processedDataDirRB.toggled.connect(self._outputModeChanged)
|
164
|
-
self._rawDataDirRB.toggled.connect(self._outputModeChanged)
|
165
127
|
self._otherDirRB.toggled.connect(self._outputModeChanged)
|
166
128
|
self._selectOutputPB.released.connect(self._selectOutput)
|
167
129
|
self._inScanFolderRB.setChecked(True)
|
@@ -172,21 +134,15 @@ class NabuOutputLocationWidget(qt.QGroupBox):
|
|
172
134
|
return ProcessDataOutputDirMode.IN_SCAN_FOLDER
|
173
135
|
elif self._processedDataDirRB.isChecked():
|
174
136
|
return ProcessDataOutputDirMode.PROCESSED_DATA_FOLDER
|
175
|
-
elif self._rawDataDirRB.isChecked():
|
176
|
-
return ProcessDataOutputDirMode.RAW_DATA_FOLDER
|
177
137
|
elif self._otherDirRB.isChecked():
|
178
138
|
return ProcessDataOutputDirMode.OTHER
|
179
139
|
|
180
|
-
def setOutputDirMode(
|
181
|
-
self, mode: typing.Union[ProcessDataOutputDirMode, str]
|
182
|
-
) -> None:
|
140
|
+
def setOutputDirMode(self, mode: ProcessDataOutputDirMode | str) -> None:
|
183
141
|
mode = ProcessDataOutputDirMode.from_value(mode)
|
184
142
|
if mode is ProcessDataOutputDirMode.IN_SCAN_FOLDER:
|
185
143
|
self._inScanFolderRB.setChecked(True)
|
186
144
|
elif mode is ProcessDataOutputDirMode.PROCESSED_DATA_FOLDER:
|
187
145
|
self._processedDataDirRB.setChecked(True)
|
188
|
-
elif mode is ProcessDataOutputDirMode.RAW_DATA_FOLDER:
|
189
|
-
self._rawDataDirRB.setChecked(True)
|
190
146
|
elif mode is ProcessDataOutputDirMode.OTHER:
|
191
147
|
self._otherDirRB.setChecked(True)
|
192
148
|
|