tomwer 1.3.27__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.27.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.27.dist-info → tomwer-1.4.0.dist-info}/WHEEL +1 -1
- {tomwer-1.3.27.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 -1388
- tomwer/gui/test/__init__.py +0 -28
- tomwer/gui/test/test_axis_gui.py +0 -34
- tomwer/synctools/stacks/edit/darkflatpatch.py +0 -169
- tomwer/synctools/stacks/edit/imagekeyeditor.py +0 -135
- tomwer/third_part/WaitingOverlay.py +0 -110
- tomwer-1.3.27-py3.11-nspkg.pth +0 -1
- tomwer-1.3.27.dist-info/METADATA +0 -292
- tomwer-1.3.27.dist-info/RECORD +0 -785
- tomwer-1.3.27.dist-info/namespace_packages.txt +0 -1
- /orangecontrib/tomwer/{widgets/edit/test → tests}/__init__.py +0 -0
- {tomwer/core/process/control/test → orangecontrib/tomwer/tutorials/id16b}/__init__.py +0 -0
- {tomwer/core/process/icat → orangecontrib/tomwer/widgets/cluster/tests}/__init__.py +0 -0
- /orangecontrib/tomwer/widgets/control/icons/{tomoobjserie.png → tomoobjseries.png} +0 -0
- {tomwer/core/process/reconstruction/test → orangecontrib/tomwer/widgets/control/tests}/__init__.py +0 -0
- /orangecontrib/tomwer/widgets/{icat → dataportal}/icons/publish_processed_data.png +0 -0
- /orangecontrib/tomwer/widgets/{icat → dataportal}/icons/publish_processed_data.svg +0 -0
- {tomwer/core/process/test → orangecontrib/tomwer/widgets/debugtools/tests}/__init__.py +0 -0
- {tomwer/core/scan/test → orangecontrib/tomwer/widgets/edit/tests}/__init__.py +0 -0
- {tomwer/core/test → orangecontrib/tomwer/widgets/other/tests}/__init__.py +0 -0
- {tomwer/gui/cluster/test → orangecontrib/tomwer/widgets/reconstruction/tests}/__init__.py +0 -0
- {tomwer/gui/control/serie → orangecontrib/tomwer/widgets/stitching/tests}/__init__.py +0 -0
- {tomwer/gui/icat → orangecontrib/tomwer/widgets/tests}/__init__.py +0 -0
- {tomwer/gui/reconstruction/test → orangecontrib/tomwer/widgets/visualization/tests}/__init__.py +0 -0
- /tomwer/{synctools/stacks/edit → app/stitching}/__init__.py +0 -0
- /tomwer/{synctools/test → core/process/control/tests}/__init__.py +0 -0
- /tomwer/core/process/control/{test → tests}/test_email.py +0 -0
- /tomwer/core/process/control/{test → tests}/test_h52nx_process.py +0 -0
- /tomwer/{third_part → core/process/drac}/__init__.py +0 -0
- /tomwer/core/process/reconstruction/{test → tests}/test_axis_params.py +0 -0
- /tomwer/core/process/reconstruction/{test → tests}/test_darkref_copy.py +0 -0
- /tomwer/core/process/reconstruction/{test → tests}/test_paramsbase.py +0 -0
- /tomwer/core/scan/{test → tests}/test_scan.py +0 -0
- /tomwer/gui/control/{serie → series}/nxtomoconcatenate.py +0 -0
- /tomwer/gui/control/{test → tests}/test_datadiscovery.py +0 -0
- /tomwer/gui/control/{test → tests}/test_reducedarkflat_selector.py +0 -0
- /tomwer/gui/control/{test → tests}/test_single_tomo_obj.py +0 -0
- {orangecontrib/tomwer/widgets/edit/test → tomwer/tests/orangecontrib/tomwer/widgets/edit/tests}/test_image_key_upgrader.py +0 -0
- {tomwer-1.3.27.dist-info → tomwer-1.4.0.dist-info}/top_level.txt +0 -0
@@ -1,33 +1,5 @@
|
|
1
1
|
# coding: utf-8
|
2
|
-
|
3
|
-
#
|
4
|
-
# Copyright (c) 2016-2017 European Synchrotron Radiation Facility
|
5
|
-
#
|
6
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
-
# of this software and associated documentation files (the "Software"), to deal
|
8
|
-
# in the Software without restriction, including without limitation the rights
|
9
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
-
# copies of the Software, and to permit persons to whom the Software is
|
11
|
-
# furnished to do so, subject to the following conditions:
|
12
|
-
#
|
13
|
-
# The above copyright notice and this permission notice shall be included in
|
14
|
-
# all copies or substantial portions of the Software.
|
15
|
-
#
|
16
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
|
-
# THE SOFTWARE.
|
23
|
-
#
|
24
|
-
# ###########################################################################*/
|
25
|
-
|
26
|
-
__authors__ = [
|
27
|
-
"H. Payno",
|
28
|
-
]
|
29
|
-
__license__ = "MIT"
|
30
|
-
__date__ = "30/09/2020"
|
2
|
+
from __future__ import annotations
|
31
3
|
|
32
4
|
from orangewidget import gui, widget
|
33
5
|
from orangewidget.widget import Input
|
@@ -1,56 +1,23 @@
|
|
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
|
-
|
27
|
-
__authors__ = ["H. Payno"]
|
28
|
-
__license__ = "MIT"
|
29
|
-
__date__ = "02/11/2020"
|
30
|
-
|
1
|
+
from __future__ import annotations
|
31
2
|
|
32
3
|
import logging
|
33
|
-
from typing import Optional
|
34
4
|
|
35
5
|
from orangewidget import gui
|
36
6
|
from orangewidget.settings import Setting
|
37
|
-
from orangewidget.widget import Input, Output
|
38
7
|
from silx.io.url import DataUrl
|
39
8
|
|
40
9
|
import tomwer.core.process.edit.darkflatpatch
|
41
|
-
from tomwer.core.scan.nxtomoscan import NXtomoScan
|
42
|
-
from tomwer.core.scan.scanbase import TomwerScanBase
|
43
10
|
from tomwer.gui.edit.dkrfpatch import DarkRefPatchWidget
|
44
|
-
from tomwer.synctools.stacks.edit.darkflatpatch import DarkFlatPatchProcessStack
|
45
|
-
from tomwer.utils import docstring
|
46
11
|
|
47
|
-
from ...orange.managedprocess import
|
48
|
-
from ..utils import WidgetLongProcessing
|
12
|
+
from ...orange.managedprocess import TomwerWithStackStack
|
49
13
|
|
50
14
|
_logger = logging.getLogger(__name__)
|
51
15
|
|
52
16
|
|
53
|
-
class DarkFlatPatchOW(
|
17
|
+
class DarkFlatPatchOW(
|
18
|
+
TomwerWithStackStack,
|
19
|
+
ewokstaskclass=tomwer.core.process.edit.darkflatpatch.DarkFlatPatchTask,
|
20
|
+
):
|
54
21
|
"""
|
55
22
|
Widget to define on the fly the image_key of a NXtomoScan
|
56
23
|
"""
|
@@ -78,23 +45,11 @@ class DarkFlatPatchOW(WidgetLongProcessing, SuperviseOW):
|
|
78
45
|
resizing_enabled = True
|
79
46
|
|
80
47
|
_urlsSetting = Setting(dict())
|
81
|
-
|
82
|
-
ewokstaskclass = tomwer.core.process.edit.darkflatpatch.DarkFlatPatchTask
|
83
|
-
|
84
|
-
class Inputs:
|
85
|
-
data = Input(name="data", type=TomwerScanBase)
|
86
|
-
config_in = Input(name="configuration", type=dict)
|
87
|
-
|
88
|
-
class Outputs:
|
89
|
-
data = Output(name="data", type=TomwerScanBase)
|
48
|
+
_ewoks_inputs_to_hide_from_orange = ("configuration", "serialize_output_data")
|
90
49
|
|
91
50
|
def __init__(self, parent=None):
|
92
|
-
|
93
|
-
WidgetLongProcessing.__init__(self)
|
51
|
+
super().__init__(parent=parent)
|
94
52
|
layout = gui.vBox(self.mainArea, self.name).layout()
|
95
|
-
self._processingStack = DarkFlatPatchProcessStack(
|
96
|
-
self, process_id=self.process_id
|
97
|
-
)
|
98
53
|
|
99
54
|
self.widget = DarkRefPatchWidget(parent=self)
|
100
55
|
layout.addWidget(self.widget)
|
@@ -102,25 +57,34 @@ class DarkFlatPatchOW(WidgetLongProcessing, SuperviseOW):
|
|
102
57
|
self.setConfiguration(self._urlsSetting)
|
103
58
|
|
104
59
|
# connect signal / slot
|
105
|
-
self.
|
106
|
-
self.
|
60
|
+
self.task_executor_queue.sigComputationStarted.connect(self._startProcessing)
|
61
|
+
self.task_executor_queue.sigComputationEnded.connect(self._endProcessing)
|
107
62
|
self.widget.sigConfigurationChanged.connect(self._updateSettings)
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
return
|
113
|
-
elif not isinstance(scan, NXtomoScan):
|
114
|
-
_logger.error("We can only patch dark and flat for NXtomoScan")
|
63
|
+
if isinstance(self.task_output_changed_callbacks, set):
|
64
|
+
self.task_output_changed_callbacks.add(self._notify_state)
|
65
|
+
elif isinstance(self.task_output_changed_callbacks, list):
|
66
|
+
self.task_output_changed_callbacks.append(self._notify_state)
|
115
67
|
else:
|
116
|
-
|
68
|
+
raise NotImplementedError
|
117
69
|
|
118
|
-
@docstring(SuperviseOW)
|
119
70
|
def reprocess(self, dataset):
|
120
|
-
self.
|
71
|
+
self.set_default_input(
|
72
|
+
"data",
|
73
|
+
dataset,
|
74
|
+
)
|
75
|
+
|
76
|
+
def get_task_inputs(self) -> dict:
|
77
|
+
task_inputs = super().get_task_inputs()
|
78
|
+
task_inputs.update(
|
79
|
+
{
|
80
|
+
"configuration": self.getConfiguration(),
|
81
|
+
"serialize_output_data": False, # avoid serializing when using orange
|
82
|
+
}
|
83
|
+
)
|
84
|
+
return task_inputs
|
121
85
|
|
122
86
|
def getConfiguration(self):
|
123
|
-
def cast_url_to_str(url:
|
87
|
+
def cast_url_to_str(url: DataUrl | None):
|
124
88
|
if url is None:
|
125
89
|
return None
|
126
90
|
elif not isinstance(url, DataUrl):
|
@@ -137,7 +101,6 @@ class DarkFlatPatchOW(WidgetLongProcessing, SuperviseOW):
|
|
137
101
|
"flats_end": cast_url_to_str(self.widget.getEndFlatUrl()),
|
138
102
|
}
|
139
103
|
|
140
|
-
@Inputs.config_in
|
141
104
|
def setConfiguration(self, config):
|
142
105
|
if config is None:
|
143
106
|
return
|
@@ -159,17 +122,17 @@ class DarkFlatPatchOW(WidgetLongProcessing, SuperviseOW):
|
|
159
122
|
if url_key in config:
|
160
123
|
index = config.get(url_idx_key, 0)
|
161
124
|
url = config[url_key]
|
125
|
+
if isinstance(url, str):
|
126
|
+
url = DataUrl(path=url)
|
162
127
|
if url not in (None, ""):
|
128
|
+
assert isinstance(
|
129
|
+
url, DataUrl
|
130
|
+
), "url is expected to be an url. Either as a str or as an instance of DataUrl"
|
163
131
|
try:
|
164
|
-
setter(url=url,
|
132
|
+
setter(url=url, series_index=index)
|
165
133
|
except Exception as e:
|
166
134
|
_logger.error(e)
|
167
135
|
|
168
|
-
def _endProcessing(self, scan, future_tomo_obj):
|
169
|
-
WidgetLongProcessing._endProcessing(self, scan)
|
170
|
-
if scan is not None:
|
171
|
-
self.Outputs.data.send(scan)
|
172
|
-
|
173
136
|
def _updateSettings(self):
|
174
137
|
self._urlsSetting = self.getConfiguration()
|
175
138
|
self._urlsSetting.update(
|
@@ -180,3 +143,15 @@ class DarkFlatPatchOW(WidgetLongProcessing, SuperviseOW):
|
|
180
143
|
"flats_end_index": self.widget.getEndFlatIndex(),
|
181
144
|
}
|
182
145
|
)
|
146
|
+
|
147
|
+
def _notify_state(self):
|
148
|
+
try:
|
149
|
+
task_executor = self.sender()
|
150
|
+
task_suceeded = task_executor.succeeded
|
151
|
+
scan = task_executor.current_task.inputs.data
|
152
|
+
if task_suceeded:
|
153
|
+
self.notify_succeed(scan=scan)
|
154
|
+
else:
|
155
|
+
self.notify_failed(scan=scan)
|
156
|
+
except Exception as e:
|
157
|
+
_logger.error(f"failed to handle task finished callback. Reason is {e}")
|
@@ -1,53 +1,19 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
# /*##########################################################################
|
3
|
-
#
|
4
|
-
# Copyright (c) 2016-2017 European Synchrotron Radiation Facility
|
5
|
-
#
|
6
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
-
# of this software and associated documentation files (the "Software"), to deal
|
8
|
-
# in the Software without restriction, including without limitation the rights
|
9
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
-
# copies of the Software, and to permit persons to whom the Software is
|
11
|
-
# furnished to do so, subject to the following conditions:
|
12
|
-
#
|
13
|
-
# The above copyright notice and this permission notice shall be included in
|
14
|
-
# all copies or substantial portions of the Software.
|
15
|
-
#
|
16
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
|
-
# THE SOFTWARE.
|
23
|
-
#
|
24
|
-
# ###########################################################################*/
|
25
|
-
|
26
|
-
|
27
|
-
__authors__ = ["H. Payno"]
|
28
|
-
__license__ = "MIT"
|
29
|
-
__date__ = "28/10/2020"
|
30
|
-
|
31
|
-
|
32
1
|
import logging
|
33
|
-
|
34
2
|
from orangewidget import gui
|
35
|
-
from orangewidget.widget import Input, Output
|
36
3
|
|
37
4
|
import tomwer.core.process.edit.imagekeyeditor
|
38
|
-
from tomwer.core.scan.nxtomoscan import NXtomoScan
|
39
|
-
from tomwer.core.scan.scanbase import TomwerScanBase
|
40
5
|
from tomwer.gui.edit.imagekeyeditor import ImageKeyDialog
|
41
|
-
from
|
42
|
-
from tomwer.utils import docstring
|
6
|
+
from ewokscore.missing_data import MissingData
|
43
7
|
|
44
|
-
from ...orange.managedprocess import
|
45
|
-
from ..utils import WidgetLongProcessing
|
8
|
+
from ...orange.managedprocess import TomwerWithStackStack
|
46
9
|
|
47
10
|
_logger = logging.getLogger(__name__)
|
48
11
|
|
49
12
|
|
50
|
-
class ImageKeyEditorOW(
|
13
|
+
class ImageKeyEditorOW(
|
14
|
+
TomwerWithStackStack,
|
15
|
+
ewokstaskclass=tomwer.core.process.edit.imagekeyeditor.ImageKeyEditorTask,
|
16
|
+
):
|
51
17
|
"""
|
52
18
|
Widget to define on the fly the image_key of a NXtomoScan
|
53
19
|
"""
|
@@ -74,21 +40,11 @@ class ImageKeyEditorOW(SuperviseOW, WidgetLongProcessing):
|
|
74
40
|
want_main_area = True
|
75
41
|
resizing_enabled = True
|
76
42
|
|
77
|
-
|
78
|
-
|
79
|
-
class Inputs:
|
80
|
-
data = Input(name="data", type=TomwerScanBase)
|
81
|
-
|
82
|
-
class Outputs:
|
83
|
-
data = Output(name="data", type=TomwerScanBase)
|
43
|
+
_ewoks_inputs_to_hide_from_orange = ("configuration", "serialize_output_data")
|
84
44
|
|
85
45
|
def __init__(self, parent=None):
|
86
|
-
|
87
|
-
WidgetLongProcessing.__init__(self)
|
46
|
+
super().__init__(parent=parent)
|
88
47
|
self._scan = None
|
89
|
-
self._processingStack = ImageKeyEditorProcessStack(
|
90
|
-
self, process_id=self.process_id
|
91
|
-
)
|
92
48
|
layout = gui.vBox(self.mainArea, self.name).layout()
|
93
49
|
|
94
50
|
self.widget = ImageKeyDialog(parent=self)
|
@@ -96,25 +52,34 @@ class ImageKeyEditorOW(SuperviseOW, WidgetLongProcessing):
|
|
96
52
|
|
97
53
|
# connect signal / slot
|
98
54
|
self.widget.sigValidated.connect(self._validateCallback)
|
99
|
-
self.
|
100
|
-
self.
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
return
|
106
|
-
elif not isinstance(scan, NXtomoScan):
|
107
|
-
_logger.error("You can only edit image keys for the HDF5 scans")
|
55
|
+
self.task_executor_queue.sigComputationStarted.connect(self._startProcessing)
|
56
|
+
self.task_executor_queue.sigComputationEnded.connect(self._endProcessing)
|
57
|
+
if isinstance(self.task_output_changed_callbacks, set):
|
58
|
+
self.task_output_changed_callbacks.add(self._notify_state)
|
59
|
+
elif isinstance(self.task_output_changed_callbacks, list):
|
60
|
+
self.task_output_changed_callbacks.append(self._notify_state)
|
108
61
|
else:
|
109
|
-
|
110
|
-
|
62
|
+
raise NotImplementedError
|
63
|
+
|
64
|
+
def handleNewSignals(self) -> None:
|
65
|
+
scan = self.get_task_input_value("data", MissingData)
|
66
|
+
if scan not in (None, MissingData):
|
67
|
+
if scan is not self._scan:
|
68
|
+
self._scan = scan
|
69
|
+
self.widget.setScan(scan)
|
70
|
+
self.notify_pending(scan=scan)
|
111
71
|
self.activateWindow()
|
112
72
|
self.raise_()
|
113
73
|
self.show()
|
114
74
|
|
115
|
-
|
116
|
-
|
117
|
-
|
75
|
+
# warning: avoid calling "handleNewSignals" else this will trigger the processing.
|
76
|
+
# here we want for the user to explicitly click on 'validate' to modify the image keys
|
77
|
+
|
78
|
+
def reprocess(self, scan):
|
79
|
+
self.set_default_input(
|
80
|
+
"data",
|
81
|
+
scan,
|
82
|
+
)
|
118
83
|
|
119
84
|
def getConfiguration(self):
|
120
85
|
return {
|
@@ -122,12 +87,20 @@ class ImageKeyEditorOW(SuperviseOW, WidgetLongProcessing):
|
|
122
87
|
}
|
123
88
|
|
124
89
|
def _validateCallback(self):
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
self.
|
90
|
+
self.update_default_inputs(configuration=self.getConfiguration())
|
91
|
+
self.update_default_inputs(
|
92
|
+
serialize_output_data=False
|
93
|
+
) # avoid serializing when using orange
|
94
|
+
self.execute_ewoks_task()
|
95
|
+
|
96
|
+
def _notify_state(self):
|
97
|
+
try:
|
98
|
+
task_executor = self.sender()
|
99
|
+
task_suceeded = task_executor.succeeded
|
100
|
+
scan = task_executor.current_task.inputs.data
|
101
|
+
if task_suceeded:
|
102
|
+
self.notify_succeed(scan=scan)
|
103
|
+
else:
|
104
|
+
self.notify_failed(scan=scan)
|
105
|
+
except Exception as e:
|
106
|
+
_logger.error(f"failed to handle task finished callback. Reason is {e}")
|
@@ -1,32 +1,5 @@
|
|
1
1
|
# coding: utf-8
|
2
|
-
|
3
|
-
#
|
4
|
-
# Copyright (c) 2016-2017 European Synchrotron Radiation Facility
|
5
|
-
#
|
6
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
-
# of this software and associated documentation files (the "Software"), to deal
|
8
|
-
# in the Software without restriction, including without limitation the rights
|
9
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
-
# copies of the Software, and to permit persons to whom the Software is
|
11
|
-
# furnished to do so, subject to the following conditions:
|
12
|
-
#
|
13
|
-
# The above copyright notice and this permission notice shall be included in
|
14
|
-
# all copies or substantial portions of the Software.
|
15
|
-
#
|
16
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
|
-
# THE SOFTWARE.
|
23
|
-
#
|
24
|
-
# ###########################################################################*/
|
25
|
-
|
26
|
-
|
27
|
-
__authors__ = ["H. Payno"]
|
28
|
-
__license__ = "MIT"
|
29
|
-
__date__ = "28/10/2020"
|
2
|
+
from __future__ import annotations
|
30
3
|
|
31
4
|
|
32
5
|
import logging
|
@@ -118,7 +91,9 @@ class ImageKeyUpgraderOW(
|
|
118
91
|
scan = task_arguments.get("inputs", {}).get("data", None)
|
119
92
|
if scan is not None:
|
120
93
|
self.notify_pending(scan=scan)
|
121
|
-
super()._execute_ewoks_task(
|
94
|
+
super()._execute_ewoks_task( # pylint: disable=E1123
|
95
|
+
propagate=propagate, log_missing_inputs=False
|
96
|
+
)
|
122
97
|
|
123
98
|
def _notify_state(self):
|
124
99
|
try:
|
@@ -130,4 +105,4 @@ class ImageKeyUpgraderOW(
|
|
130
105
|
else:
|
131
106
|
self.notify_failed(scan=scan)
|
132
107
|
except Exception as e:
|
133
|
-
_logger.error(f"failed to handle task finished callback.
|
108
|
+
_logger.error(f"failed to handle task finished callback. Reason is {e}")
|
@@ -1,50 +1,36 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
1
3
|
import logging
|
2
4
|
|
3
5
|
from orangewidget import gui
|
4
6
|
from orangewidget.settings import Setting
|
5
|
-
from orangewidget.widget import Input, Output
|
6
7
|
from silx.gui import qt
|
8
|
+
from ewokscore.missing_data import MISSING_DATA
|
9
|
+
|
10
|
+
from ...orange.managedprocess import TomwerWithStackStack
|
7
11
|
|
8
12
|
from tomwer.core.scan.nxtomoscan import NXtomoScan
|
9
|
-
|
13
|
+
import tomwer.core.process.edit.nxtomoeditor
|
10
14
|
from tomwer.gui.edit.nxtomoeditor import NXtomoEditorDialog as _NXtomoEditorDialog
|
11
15
|
|
12
|
-
from ...orange.managedprocess import
|
16
|
+
from ...orange.managedprocess import _SuperviseMixIn
|
13
17
|
|
14
18
|
_logger = logging.getLogger(__name__)
|
15
19
|
|
16
20
|
|
17
21
|
class NXtomoEditorDialog(_NXtomoEditorDialog):
|
22
|
+
|
18
23
|
def __init__(self, parent, *args, **kwargs) -> None:
|
19
|
-
assert isinstance(parent,
|
20
|
-
self._ow = parent
|
21
|
-
# we need to save it become looks like orange is doing some stuff with parenting
|
24
|
+
assert isinstance(parent, _SuperviseMixIn)
|
22
25
|
super().__init__(parent, *args, **kwargs)
|
23
26
|
|
24
|
-
# connect signal / slot
|
25
|
-
self._buttons.button(qt.QDialogButtonBox.Ok).released.connect(
|
26
|
-
self._overwriteNXtomo
|
27
|
-
)
|
28
27
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
try:
|
34
|
-
self.overwriteNXtomo()
|
35
|
-
except Exception as e:
|
36
|
-
_logger.error(
|
37
|
-
f"Fail to overwrite NXtomo ({scan.get_identifier().to_str()}). Error is {e}"
|
38
|
-
)
|
39
|
-
self._ow.notify_failed(scan=scan)
|
40
|
-
else:
|
41
|
-
self._ow.notify_succeed(scan=scan)
|
42
|
-
self._ow._validateScan(scan)
|
43
|
-
|
44
|
-
|
45
|
-
class NXtomoEditorOW(SuperviseOW):
|
28
|
+
class NXtomoEditorOW(
|
29
|
+
TomwerWithStackStack,
|
30
|
+
ewokstaskclass=tomwer.core.process.edit.nxtomoeditor.NXtomoEditorTask,
|
31
|
+
):
|
46
32
|
"""
|
47
|
-
Widget to edit manually
|
33
|
+
Widget to edit manually a NXtomo
|
48
34
|
"""
|
49
35
|
|
50
36
|
name = "nxtomo-editor"
|
@@ -64,18 +50,14 @@ class NXtomoEditorOW(SuperviseOW):
|
|
64
50
|
"distance",
|
65
51
|
"pixel size",
|
66
52
|
]
|
67
|
-
|
68
|
-
class Inputs:
|
69
|
-
data = Input(name="data", type=TomwerScanBase)
|
70
|
-
|
71
|
-
class Outputs:
|
72
|
-
data = Output(name="data", type=TomwerScanBase)
|
53
|
+
_ewoks_inputs_to_hide_from_orange = ("configuration",)
|
73
54
|
|
74
55
|
want_main_area = True
|
56
|
+
want_control_area = False
|
75
57
|
resizing_enabled = True
|
76
58
|
|
77
59
|
sigScanReady = qt.Signal(str)
|
78
|
-
|
60
|
+
"""emit when scan ready. Used for test only"""
|
79
61
|
|
80
62
|
settings = Setting(dict())
|
81
63
|
|
@@ -86,36 +68,53 @@ class NXtomoEditorOW(SuperviseOW):
|
|
86
68
|
self.widget = NXtomoEditorDialog(parent=self, hide_lockers=False)
|
87
69
|
_layout.addWidget(self.widget)
|
88
70
|
self.widget.mainWidget.sigEditingFinished.connect(self._updateSettings)
|
71
|
+
|
89
72
|
# load settings
|
90
73
|
self.widget.setConfiguration(self.settings)
|
91
74
|
|
75
|
+
# connect signal / slot
|
76
|
+
self.widget._buttons.button(qt.QDialogButtonBox.Ok).released.connect(
|
77
|
+
self.execute_ewoks_task
|
78
|
+
)
|
79
|
+
|
92
80
|
def _updateSettings(self):
|
93
81
|
self.settings = self.getConfiguration()
|
94
82
|
|
95
|
-
def
|
96
|
-
self.
|
97
|
-
|
98
|
-
|
83
|
+
def handleNewSignals(self) -> None:
|
84
|
+
scan = self.get_task_input_value("data", MISSING_DATA)
|
85
|
+
if scan not in (MISSING_DATA, None):
|
86
|
+
self._setScan(scan=scan)
|
87
|
+
# return super().handleNewSignals() do not call to make sure the processing is not triggered
|
99
88
|
|
100
|
-
|
101
|
-
|
89
|
+
def setScan(self, scan: NXtomoScan | None):
|
90
|
+
self.set_dynamic_input("data", scan)
|
102
91
|
self._setScan(scan=scan)
|
103
92
|
|
104
|
-
def _setScan(self, scan):
|
105
|
-
if scan
|
106
|
-
pass
|
107
|
-
elif not isinstance(scan, NXtomoScan):
|
93
|
+
def _setScan(self, scan: NXtomoScan | None):
|
94
|
+
if not isinstance(scan, NXtomoScan):
|
108
95
|
raise TypeError(
|
109
96
|
f"expect to have an instance of {NXtomoScan}. {type(scan)} provided."
|
110
97
|
)
|
98
|
+
|
99
|
+
self.widget.setScan(scan)
|
100
|
+
if self.widget.hasLockField():
|
101
|
+
super().execute_ewoks_task()
|
111
102
|
else:
|
112
|
-
self.
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
103
|
+
self.show()
|
104
|
+
self.raise_()
|
105
|
+
|
106
|
+
def task_output_changed(self) -> None:
|
107
|
+
self.sigScanReady.emit(str(self.get_task_output_value("data")))
|
108
|
+
super().task_output_changed()
|
109
|
+
|
110
|
+
def get_task_inputs(self):
|
111
|
+
task_inputs = super().get_task_inputs()
|
112
|
+
task_inputs.update(
|
113
|
+
{
|
114
|
+
"configuration": self.widget.getConfigurationForTask(),
|
115
|
+
}
|
116
|
+
)
|
117
|
+
return task_inputs
|
119
118
|
|
120
119
|
def sizeHint(self):
|
121
120
|
return qt.QSize(400, 500)
|
@@ -15,7 +15,7 @@ from orangewidget.settings import Setting, SettingsHandler
|
|
15
15
|
from orangewidget.utils import itemmodels
|
16
16
|
from orangewidget.widget import Input, Output, OWBaseWidget
|
17
17
|
from silx.gui import qt
|
18
|
-
from tomoscan.
|
18
|
+
from tomoscan.series import Series
|
19
19
|
|
20
20
|
import tomwer.core.process.script.python
|
21
21
|
from tomwer.core.cluster.cluster import SlurmClusterConfiguration
|
@@ -366,6 +366,18 @@ class PrepareSavingSettingsHandler(SettingsHandler):
|
|
366
366
|
"""Calls storeSpecificSettings, which is currently not called from non-context handlers."""
|
367
367
|
|
368
368
|
def pack_data(self, widget):
|
369
|
+
"""
|
370
|
+
Pack the settings for the given widget. This method is used when
|
371
|
+
saving schema, so that when the schema is reloaded the widget is
|
372
|
+
initialized with its proper data and not the class-based defaults.
|
373
|
+
See :obj:`SettingsHandler.initialize` for detailed explanation of its
|
374
|
+
use.
|
375
|
+
|
376
|
+
Inherited classes add other data, in particular widget-specific
|
377
|
+
local contexts.
|
378
|
+
|
379
|
+
:param OWBaseWidget widget:
|
380
|
+
"""
|
369
381
|
widget.storeSpecificSettings()
|
370
382
|
return super().pack_data(widget)
|
371
383
|
|
@@ -431,10 +443,10 @@ class OWPythonScript(widget.OWBaseWidget, openclass=True):
|
|
431
443
|
default=True,
|
432
444
|
multiple=True,
|
433
445
|
)
|
434
|
-
|
435
|
-
"
|
436
|
-
|
437
|
-
replaces=["
|
446
|
+
series = Input(
|
447
|
+
"series",
|
448
|
+
Series,
|
449
|
+
replaces=["in_series"],
|
438
450
|
default=True,
|
439
451
|
multiple=True,
|
440
452
|
)
|
@@ -452,7 +464,7 @@ class OWPythonScript(widget.OWBaseWidget, openclass=True):
|
|
452
464
|
cluster_config = Output(
|
453
465
|
"cluster_config", SlurmClusterConfiguration, replaces=["out_cluster_config"]
|
454
466
|
)
|
455
|
-
|
467
|
+
series = Output("series", dict, replaces=["out_series"])
|
456
468
|
|
457
469
|
signal_names = (
|
458
470
|
"data",
|
@@ -461,7 +473,7 @@ class OWPythonScript(widget.OWBaseWidget, openclass=True):
|
|
461
473
|
"object",
|
462
474
|
"configuration",
|
463
475
|
"cluster_config",
|
464
|
-
"
|
476
|
+
"series",
|
465
477
|
"tomo_obj",
|
466
478
|
"tomo_objs",
|
467
479
|
)
|
@@ -657,9 +669,9 @@ class OWPythonScript(widget.OWBaseWidget, openclass=True):
|
|
657
669
|
def set_cluster_config(self, data, id): # noqa F811 pylint: disable=E0102
|
658
670
|
self.handle_input(data, id, "cluster_config")
|
659
671
|
|
660
|
-
@Inputs.
|
661
|
-
def
|
662
|
-
self.handle_input(data, id, "
|
672
|
+
@Inputs.series # noqa F811
|
673
|
+
def set_series(self, data, id):
|
674
|
+
self.handle_input(data, id, "series")
|
663
675
|
|
664
676
|
@Inputs.tomo_obj # noqa F811
|
665
677
|
def set_tomo_obj(self, tomo_obj, id):
|