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,32 +1,7 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
# the ESRF by the Software group.
|
6
|
-
#
|
7
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
8
|
-
# of this software and associated documentation files (the "Software"), to deal
|
9
|
-
# in the Software without restriction, including without limitation the rights
|
10
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
11
|
-
# copies of the Software, and to permit persons to whom the Software is
|
12
|
-
# furnished to do so, subject to the following conditions:
|
13
|
-
#
|
14
|
-
# The above copyright notice and this permission notice shall be included in
|
15
|
-
# all copies or substantial portions of the Software.
|
16
|
-
#
|
17
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
18
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
19
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
20
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
21
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
22
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
23
|
-
# THE SOFTWARE.
|
24
|
-
#
|
25
|
-
#############################################################################*/
|
26
|
-
|
27
|
-
__author__ = ["H. Payno"]
|
28
|
-
__license__ = "MIT"
|
29
|
-
__date__ = "11/07/2022"
|
1
|
+
"""contains dialogs to select a Volume (reconstruction of a scan)
|
2
|
+
"""
|
3
|
+
|
4
|
+
from __future__ import annotations
|
30
5
|
|
31
6
|
import logging
|
32
7
|
import os
|
@@ -52,85 +27,11 @@ from tomwer.core.volume import (
|
|
52
27
|
)
|
53
28
|
from tomwer.core.volume.volumefactory import VolumeFactory as Factory
|
54
29
|
from tomwer.io.utils.tomoobj import DEFAULT_SCHEME_TO_VOL
|
55
|
-
|
56
|
-
|
30
|
+
from tomwer.gui.qlefilesystem import QLFileSystem
|
31
|
+
from .QDataDialog import QDataDialog
|
57
32
|
|
58
33
|
|
59
|
-
|
60
|
-
"""dialog to select a scans (aka data)"""
|
61
|
-
|
62
|
-
def __init__(self, parent, multiSelection=False):
|
63
|
-
qt.QFileDialog.__init__(self, parent)
|
64
|
-
self.setNameFilters(
|
65
|
-
[
|
66
|
-
"HDF5 files (*.h5 *.hdf5 *.nx *.nxs *.nexus)",
|
67
|
-
"Nexus files (*.nx *.nxs *.nexus)",
|
68
|
-
"Any files (*)",
|
69
|
-
]
|
70
|
-
)
|
71
|
-
self._selected_files = []
|
72
|
-
self.setFileMode(qt.QFileDialog.ExistingFiles)
|
73
|
-
|
74
|
-
# self.QDialogButtonBox
|
75
|
-
self.multiSelection = multiSelection
|
76
|
-
# check if 'TOMWER_DEFAULT_INPUT_DIR' has been set
|
77
|
-
if os.environ.get("TOMWER_DEFAULT_INPUT_DIR", None) and os.path.exists(
|
78
|
-
os.environ["TOMWER_DEFAULT_INPUT_DIR"]
|
79
|
-
):
|
80
|
-
self.setDirectory(os.environ["TOMWER_DEFAULT_INPUT_DIR"])
|
81
|
-
elif self.directory() != os.getcwd() or str(self.directory()).startswith(
|
82
|
-
"/data"
|
83
|
-
):
|
84
|
-
# if the directory as already been set by the user. Avoid redefining it
|
85
|
-
pass
|
86
|
-
elif os.path.isdir("/data"):
|
87
|
-
self.setDirectory("/data")
|
88
|
-
|
89
|
-
btns = self.findChildren(qt.QPushButton)
|
90
|
-
if len(btns) == 0:
|
91
|
-
_logger.error(
|
92
|
-
"Cannot retrieve open button. switch to none " "native QFileDialog"
|
93
|
-
)
|
94
|
-
self.setOption(qt.QFileDialog.DontUseNativeDialog)
|
95
|
-
btns = self.findChildren(qt.QPushButton)
|
96
|
-
|
97
|
-
if self.multiSelection is True:
|
98
|
-
# to make it possible to select multiple directories:
|
99
|
-
self.file_view = self.findChild(qt.QListView, "listView")
|
100
|
-
if self.file_view:
|
101
|
-
self.file_view.setSelectionMode(qt.QAbstractItemView.MultiSelection)
|
102
|
-
self.file_view.setSelectionMode(qt.QAbstractItemView.ExtendedSelection)
|
103
|
-
|
104
|
-
self.f_tree_view = self.findChild(qt.QTreeView)
|
105
|
-
if self.f_tree_view:
|
106
|
-
self.f_tree_view.setSelectionMode(qt.QAbstractItemView.MultiSelection)
|
107
|
-
self.f_tree_view.setSelectionMode(
|
108
|
-
qt.QAbstractItemView.ExtendedSelection
|
109
|
-
)
|
110
|
-
|
111
|
-
if len(btns) > 0:
|
112
|
-
self.openBtn = [x for x in btns if "open" in str(x.text()).lower()][0]
|
113
|
-
self.openBtn.clicked.disconnect()
|
114
|
-
self.openBtn.hide()
|
115
|
-
parent = self.openBtn.parent()
|
116
|
-
self.openBtn = qt.QPushButton("Select", parent=parent)
|
117
|
-
self.openBtn.clicked.connect(self.openClicked)
|
118
|
-
parent.layout().insertWidget(0, self.openBtn)
|
119
|
-
|
120
|
-
def openClicked(self):
|
121
|
-
inds = self.f_tree_view.selectionModel().selectedIndexes()
|
122
|
-
for i in inds:
|
123
|
-
if i.column() == 0:
|
124
|
-
self._selected_files.append(
|
125
|
-
os.path.join(str(self.directory().absolutePath()), str(i.data()))
|
126
|
-
)
|
127
|
-
self.accept()
|
128
|
-
self.done(1)
|
129
|
-
|
130
|
-
def files_selected(self):
|
131
|
-
for file_ in self.selectedFiles():
|
132
|
-
self._selected_files.append(file_)
|
133
|
-
return self._selected_files
|
34
|
+
_logger = logging.getLogger()
|
134
35
|
|
135
36
|
|
136
37
|
class QVolumeDialog(qt.QDialog):
|
@@ -178,7 +79,7 @@ class QVolumeDialog(qt.QDialog):
|
|
178
79
|
self.layout().addWidget(
|
179
80
|
qt.QLabel("file or folder path", parent=self), 1, 0, 1, 1
|
180
81
|
)
|
181
|
-
self._filePathQL =
|
82
|
+
self._filePathQL = QLFileSystem(text="", parent=self)
|
182
83
|
self._filePathQL.setToolTip(
|
183
84
|
"File path (for hdf5 and multi-tiff) or folder path (for edf, jp2k, tiff...)"
|
184
85
|
)
|
@@ -0,0 +1 @@
|
|
1
|
+
"""Different dialog used to select TomwerObject (like a scans - aka data or volumes)"""
|
tomwer/gui/edit/__init__.py
CHANGED
tomwer/gui/edit/dkrfpatch.py
CHANGED
@@ -1,35 +1,6 @@
|
|
1
|
-
|
2
|
-
# /*##########################################################################
|
3
|
-
#
|
4
|
-
# Copyright (c) 2016 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__ = "30/10/2020"
|
29
|
-
|
1
|
+
from __future__ import annotations
|
30
2
|
|
31
3
|
import logging
|
32
|
-
from typing import Union
|
33
4
|
|
34
5
|
import h5py
|
35
6
|
from silx.gui import qt
|
@@ -101,14 +72,14 @@ class _DarkOrFlatUrl(qt.QWidget):
|
|
101
72
|
self.blockSignals(old)
|
102
73
|
self.editingFinished.emit()
|
103
74
|
|
104
|
-
def
|
75
|
+
def setSeries(self, series):
|
105
76
|
type_name = self._type.name.lower().replace("_", " ")
|
106
|
-
item_txt = f"{type_name}
|
77
|
+
item_txt = f"{type_name} series n°{series}"
|
107
78
|
idx = self._optionsCB.findText(item_txt)
|
108
79
|
if idx >= 0:
|
109
80
|
self._optionsCB.setCurrentIndex(idx)
|
110
81
|
|
111
|
-
def
|
82
|
+
def getSeriesIndex(self):
|
112
83
|
return self._optionsCB.currentIndex()
|
113
84
|
|
114
85
|
def _redirectDataPath(self, url, logger=None):
|
@@ -164,23 +135,23 @@ class _DarkOrFlatUrl(qt.QWidget):
|
|
164
135
|
# image_key information
|
165
136
|
image_keys = self._getImageKey(url)
|
166
137
|
if image_keys is not None:
|
167
|
-
|
138
|
+
n_series = nxtomo_utils.get_n_series(
|
168
139
|
image_key_values=image_keys, image_key_type=self._type
|
169
140
|
)
|
170
|
-
if
|
141
|
+
if n_series is not None:
|
171
142
|
type_name = self._type.name.lower().replace("_", " ")
|
172
|
-
series_indexes = list(range(
|
173
|
-
for
|
174
|
-
self._optionsCB.addItem(f"{type_name}
|
143
|
+
series_indexes = list(range(n_series))
|
144
|
+
for i_series in series_indexes:
|
145
|
+
self._optionsCB.addItem(f"{type_name} series n°{i_series}")
|
175
146
|
# if this is a end url then set to the last found entry
|
176
147
|
if self._when == "end":
|
177
148
|
opt_idx = self._optionsCB.findText(
|
178
|
-
f"{type_name}
|
149
|
+
f"{type_name} series n°{series_indexes[-1]}"
|
179
150
|
)
|
180
151
|
else:
|
181
152
|
# else set it to the first entry
|
182
153
|
opt_idx = self._optionsCB.findText(
|
183
|
-
f"{type_name}
|
154
|
+
f"{type_name} series n°{series_indexes[0]}"
|
184
155
|
)
|
185
156
|
if opt_idx >= 0:
|
186
157
|
self._optionsCB.setCurrentIndex(opt_idx)
|
@@ -196,19 +167,19 @@ class _DarkOrFlatUrl(qt.QWidget):
|
|
196
167
|
return h5py_read_dataset(grp_parent["image_key"])
|
197
168
|
return None
|
198
169
|
|
199
|
-
def _getSlices(self, image_key_values,
|
200
|
-
|
170
|
+
def _getSlices(self, image_key_values, series_index):
|
171
|
+
n_series = -1
|
201
172
|
start = None
|
202
|
-
|
173
|
+
is_in_a_series = False
|
203
174
|
for i_frame, frame in enumerate(image_key_values):
|
204
|
-
if frame == self._type.value and not
|
205
|
-
|
206
|
-
|
207
|
-
if
|
175
|
+
if frame == self._type.value and not is_in_a_series:
|
176
|
+
n_series += 1
|
177
|
+
is_in_a_series = True
|
178
|
+
if n_series == series_index:
|
208
179
|
start = i_frame
|
209
|
-
elif frame != self._type.value and
|
210
|
-
|
211
|
-
if
|
180
|
+
elif frame != self._type.value and is_in_a_series:
|
181
|
+
is_in_a_series = False
|
182
|
+
if n_series == series_index:
|
212
183
|
return slice(start, i_frame)
|
213
184
|
if start is not None:
|
214
185
|
return slice(start, len(image_key_values))
|
@@ -217,16 +188,16 @@ class _DarkOrFlatUrl(qt.QWidget):
|
|
217
188
|
def getUrl(self):
|
218
189
|
try:
|
219
190
|
url_no_slices = DataUrl(path=self._qle.text())
|
220
|
-
|
221
|
-
if
|
191
|
+
series_index = self._optionsCB.currentText()
|
192
|
+
if series_index in ("", None):
|
222
193
|
return None
|
223
|
-
if
|
194
|
+
if series_index == "full dataset":
|
224
195
|
slices = None
|
225
196
|
else:
|
226
|
-
|
197
|
+
series_index = int(series_index.split("n°")[1])
|
227
198
|
slices = self._getSlices(
|
228
199
|
image_key_values=self._getImageKey(url_no_slices),
|
229
|
-
|
200
|
+
series_index=series_index,
|
230
201
|
)
|
231
202
|
data_path = url_no_slices.data_path()
|
232
203
|
url_slices = slices
|
@@ -372,11 +343,10 @@ class DarkRefPatchWidget(qt.QWidget):
|
|
372
343
|
outputQLE.blockSignals(old)
|
373
344
|
outputQLE.editingFinished.emit()
|
374
345
|
|
375
|
-
def getStartDarkUrl(self) ->
|
346
|
+
def getStartDarkUrl(self) -> DataUrl | None:
|
376
347
|
"""
|
377
348
|
|
378
349
|
:return: url defined by the user for patching the start darks
|
379
|
-
:rtype: Union[None, DataUrl]
|
380
350
|
"""
|
381
351
|
if self._sdCB.isChecked():
|
382
352
|
return self._sdQLE.getUrl()
|
@@ -384,24 +354,23 @@ class DarkRefPatchWidget(qt.QWidget):
|
|
384
354
|
return None
|
385
355
|
|
386
356
|
def getStartDarkIndex(self):
|
387
|
-
return self._sdQLE.
|
357
|
+
return self._sdQLE.getSeriesIndex()
|
388
358
|
|
389
|
-
def setStartDarkUrl(self, url,
|
359
|
+
def setStartDarkUrl(self, url: DataUrl, series_index: int | None = None) -> None:
|
390
360
|
"""
|
391
361
|
|
392
|
-
:param
|
393
|
-
:param
|
362
|
+
:param url:
|
363
|
+
:param series_index: index of the series to set
|
394
364
|
"""
|
395
365
|
self._sdCB.setChecked(True)
|
396
366
|
self._sdQLE.setUrl(url)
|
397
|
-
if
|
398
|
-
self._sdQLE.
|
367
|
+
if series_index is not None:
|
368
|
+
self._sdQLE.setSeries(series_index)
|
399
369
|
|
400
|
-
def getStartFlatUrl(self) ->
|
370
|
+
def getStartFlatUrl(self) -> DataUrl | None:
|
401
371
|
"""
|
402
372
|
|
403
373
|
:return: url defined by the user for patching the start flats
|
404
|
-
:rtype: Union[None, DataUrl]
|
405
374
|
"""
|
406
375
|
if self._sfCB.isChecked():
|
407
376
|
return self._sfQLE.getUrl()
|
@@ -409,24 +378,23 @@ class DarkRefPatchWidget(qt.QWidget):
|
|
409
378
|
return None
|
410
379
|
|
411
380
|
def getStartFlatIndex(self):
|
412
|
-
return self._sfQLE.
|
381
|
+
return self._sfQLE.getSeriesIndex()
|
413
382
|
|
414
|
-
def setStartFlatUrl(self, url,
|
383
|
+
def setStartFlatUrl(self, url: DataUrl, series_index: int | None = None) -> None:
|
415
384
|
"""
|
416
385
|
|
417
|
-
:param
|
418
|
-
:param
|
386
|
+
:param url:
|
387
|
+
:param series_index: index of the serie to set
|
419
388
|
"""
|
420
389
|
self._sfCB.setChecked(True)
|
421
390
|
self._sfQLE.setUrl(url)
|
422
|
-
if
|
423
|
-
self._sfQLE.
|
391
|
+
if series_index is not None:
|
392
|
+
self._sfQLE.setSeries(series_index)
|
424
393
|
|
425
|
-
def getEndDarkUrl(self) ->
|
394
|
+
def getEndDarkUrl(self) -> DataUrl | None:
|
426
395
|
"""
|
427
396
|
|
428
397
|
:return: url defined by the user for patching the end darks
|
429
|
-
:rtype: Union[None, DataUrl]
|
430
398
|
"""
|
431
399
|
if self._edCB.isChecked():
|
432
400
|
return self._edQLE.getUrl()
|
@@ -434,24 +402,22 @@ class DarkRefPatchWidget(qt.QWidget):
|
|
434
402
|
return None
|
435
403
|
|
436
404
|
def getEndDarkIndex(self):
|
437
|
-
return self._edQLE.
|
405
|
+
return self._edQLE.getSeriesIndex()
|
438
406
|
|
439
|
-
def setEndDarkUrl(self, url,
|
407
|
+
def setEndDarkUrl(self, url: DataUrl, series_index: int | None = None) -> None:
|
440
408
|
"""
|
441
409
|
|
442
|
-
:param
|
443
|
-
:param Union[int,None] serie_index: index of the serie to set
|
410
|
+
:param series_index: index of the serie to set
|
444
411
|
"""
|
445
412
|
self._edCB.setChecked(True)
|
446
413
|
self._edQLE.setUrl(url)
|
447
|
-
if
|
448
|
-
self._edQLE.
|
414
|
+
if series_index is not None:
|
415
|
+
self._edQLE.setSeries(series_index)
|
449
416
|
|
450
|
-
def getEndFlatUrl(self) ->
|
417
|
+
def getEndFlatUrl(self) -> DataUrl | None:
|
451
418
|
"""
|
452
419
|
|
453
420
|
:return: url defined by the user for patching the end flats
|
454
|
-
:rtype: Union[None, DataUrl]
|
455
421
|
"""
|
456
422
|
if self._efCB.isChecked():
|
457
423
|
return self._efQLE.getUrl()
|
@@ -459,18 +425,17 @@ class DarkRefPatchWidget(qt.QWidget):
|
|
459
425
|
return None
|
460
426
|
|
461
427
|
def getEndFlatIndex(self):
|
462
|
-
return self._efQLE.
|
428
|
+
return self._efQLE.getSeriesIndex()
|
463
429
|
|
464
|
-
def setEndFlatUrl(self, url,
|
430
|
+
def setEndFlatUrl(self, url: DataUrl, series_index: int | None = None) -> None:
|
465
431
|
"""
|
466
432
|
|
467
|
-
:param
|
468
|
-
:param Union[int,None] serie_index: index of the serie to set
|
433
|
+
:param series_index: index of the serie to set
|
469
434
|
"""
|
470
435
|
self._efCB.setChecked(True)
|
471
436
|
self._efQLE.setUrl(url)
|
472
|
-
if
|
473
|
-
self._efQLE.
|
437
|
+
if series_index is not None:
|
438
|
+
self._efQLE.setSeries(series_index)
|
474
439
|
|
475
440
|
def clear(self):
|
476
441
|
for cb in self._sdCB, self._edCB, self._efCB, self._sfCB:
|
@@ -1,38 +1,9 @@
|
|
1
|
-
|
2
|
-
# /*##########################################################################
|
3
|
-
#
|
4
|
-
# Copyright (c) 2016 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__ = "26/10/2020"
|
29
|
-
|
1
|
+
from __future__ import annotations
|
30
2
|
|
31
3
|
import functools
|
32
4
|
import logging
|
33
5
|
import weakref
|
34
|
-
from
|
35
|
-
from typing import Union
|
6
|
+
from typing import Iterable
|
36
7
|
|
37
8
|
from silx.gui import qt
|
38
9
|
from nxtomo.nxobject.nxdetector import ImageKey as _ImageKey
|
@@ -79,21 +50,20 @@ class ImageKeyDialog(qt.QDialog):
|
|
79
50
|
def _resetReleased(self, *args, **kwargs):
|
80
51
|
self._widget.reset()
|
81
52
|
|
82
|
-
def getModifications(self):
|
53
|
+
def getModifications(self) -> list[int]:
|
83
54
|
"""
|
84
55
|
|
85
56
|
:return: list of indexes to be modified
|
86
|
-
:rtype: list
|
87
57
|
"""
|
88
58
|
return self._widget.getModifications()
|
89
59
|
|
90
60
|
def setModifications(self, modifications):
|
91
61
|
self._widget.setModifications(modifications)
|
92
62
|
|
93
|
-
def setScan(self, scan):
|
63
|
+
def setScan(self, scan: NXtomoScan):
|
94
64
|
"""
|
95
65
|
|
96
|
-
:param
|
66
|
+
:param scan: scan to be edited
|
97
67
|
"""
|
98
68
|
self._widget.setScan(scan)
|
99
69
|
|
@@ -117,10 +87,10 @@ class ImageKeyWindow(qt.QMainWindow):
|
|
117
87
|
# signal / slot connection
|
118
88
|
self._editorControl.sigApply.connect(self._updateModifications)
|
119
89
|
|
120
|
-
def setScan(self, scan) -> None:
|
90
|
+
def setScan(self, scan: NXtomoScan) -> None:
|
121
91
|
"""
|
122
92
|
|
123
|
-
:param
|
93
|
+
:param scan: scan to be edited
|
124
94
|
"""
|
125
95
|
self._mainWindow.setScan(scan=scan)
|
126
96
|
self._editorControl.setScan(scan=scan)
|
@@ -132,11 +102,10 @@ class ImageKeyWindow(qt.QMainWindow):
|
|
132
102
|
modifications=modifications, new_image_key=to_
|
133
103
|
)
|
134
104
|
|
135
|
-
def getModifications(self):
|
105
|
+
def getModifications(self) -> list[int]:
|
136
106
|
"""
|
137
107
|
|
138
108
|
:return: list of indexes to be modified
|
139
|
-
:rtype: list
|
140
109
|
"""
|
141
110
|
return self._mainWindow.getModifications()
|
142
111
|
|
@@ -219,7 +188,6 @@ class _ImageKeyEditor(qt.QDialog):
|
|
219
188
|
"""
|
220
189
|
|
221
190
|
:return: selected image key as literal
|
222
|
-
:rtype: str
|
223
191
|
"""
|
224
192
|
return self._upgradeToCB.currentText()
|
225
193
|
|
@@ -230,11 +198,10 @@ class _ImageKeyEditor(qt.QDialog):
|
|
230
198
|
"""
|
231
199
|
return self._selectionModeCB.currentText()
|
232
200
|
|
233
|
-
def getModifications(self) -> list:
|
201
|
+
def getModifications(self) -> list[int]:
|
234
202
|
"""
|
235
203
|
|
236
204
|
:return: list of indexes to be modified
|
237
|
-
:rtype: list
|
238
205
|
"""
|
239
206
|
if self.getSelectionMode() == "range":
|
240
207
|
return self._selectionWidget.getSlice()
|
@@ -286,7 +253,6 @@ class _SliceSelection(qt.QWidget):
|
|
286
253
|
"""
|
287
254
|
|
288
255
|
:return: slice defined
|
289
|
-
:rtype: slice
|
290
256
|
"""
|
291
257
|
return slice(self._fromQLE.value(), self._toQLE.value(), self._stepsQLE.value())
|
292
258
|
|
@@ -330,11 +296,10 @@ class _ListSelection(qt.QWidget):
|
|
330
296
|
frame_indexes = dialog.getSelectedFrameIndexes()
|
331
297
|
return self.setList(frame_indexes)
|
332
298
|
|
333
|
-
def getList(self) -> list:
|
299
|
+
def getList(self) -> list[int]:
|
334
300
|
"""
|
335
301
|
|
336
302
|
:return: list of indexes selected
|
337
|
-
:rtype: list
|
338
303
|
"""
|
339
304
|
text = self._listQLE.text()
|
340
305
|
text = text.replace(" ", "")
|
@@ -343,11 +308,10 @@ class _ListSelection(qt.QWidget):
|
|
343
308
|
else:
|
344
309
|
return [int(element) for element in text.split(",")]
|
345
310
|
|
346
|
-
def setList(self, list_:
|
311
|
+
def setList(self, list_: str | Iterable[str]):
|
347
312
|
"""
|
348
313
|
|
349
|
-
:param
|
350
|
-
:return:
|
314
|
+
:param list_:
|
351
315
|
"""
|
352
316
|
if isinstance(list_, str):
|
353
317
|
txt = list_
|
@@ -374,7 +338,7 @@ class _EditionSelection(qt.QWidget):
|
|
374
338
|
def setSelectionMode(self, mode: str) -> None:
|
375
339
|
"""
|
376
340
|
|
377
|
-
:param
|
341
|
+
:param mode: define indexes selection mode. Can be 'range' or
|
378
342
|
'list'
|
379
343
|
"""
|
380
344
|
if mode == "slice":
|
@@ -434,7 +398,7 @@ class _ImageKeyList(qt.QTableWidget):
|
|
434
398
|
"""
|
435
399
|
Define the filter mode to use and update the QTableWidget
|
436
400
|
|
437
|
-
:param
|
401
|
+
:param mode: filtering mode
|
438
402
|
"""
|
439
403
|
self._filterMode = mode
|
440
404
|
self.updateFiltering()
|
@@ -447,8 +411,8 @@ class _ImageKeyList(qt.QTableWidget):
|
|
447
411
|
"""
|
448
412
|
Update the QTableWidget for the provided frames
|
449
413
|
|
450
|
-
:param
|
451
|
-
:param
|
414
|
+
:param frames: Iterable of tomoscan.esrf.scan.NXtomoScan.Frame
|
415
|
+
:param frames_new_keys: dictionary with frame edited. key is frame
|
452
416
|
index. Value is the new `image_key` value
|
453
417
|
"""
|
454
418
|
self.clear()
|
@@ -553,7 +517,7 @@ class _ImageKeyList(qt.QTableWidget):
|
|
553
517
|
"""
|
554
518
|
Update list of modification and emit sigKeyUpdated
|
555
519
|
|
556
|
-
:param
|
520
|
+
:param frame_index:
|
557
521
|
"""
|
558
522
|
assert isinstance(frame_index, int), "frame index should be an int"
|
559
523
|
frame_row = self._getFrameRowIndex(frame_index)
|
@@ -608,7 +572,7 @@ class _ImageKeyListFiltered(qt.QWidget):
|
|
608
572
|
# connect signal / slot
|
609
573
|
self._filterCB.currentIndexChanged.connect(self._updateFilter)
|
610
574
|
|
611
|
-
def applyModifications(self, modifications:
|
575
|
+
def applyModifications(self, modifications: slice | list, new_image_key):
|
612
576
|
if new_image_key in IMAGE_KEYS:
|
613
577
|
new_image_key = IMAGE_KEYS[new_image_key]
|
614
578
|
self._imageKeyList.applyModifications(modifications, new_image_key)
|