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,31 +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__ = ["H. Payno"]
|
27
|
-
__license__ = "MIT"
|
28
|
-
__date__ = "04/03/2019"
|
2
|
+
from __future__ import annotations
|
29
3
|
|
30
4
|
import copy
|
31
5
|
import functools
|
@@ -50,7 +24,7 @@ from tomwer.core.process.reconstruction.axis import AxisTask
|
|
50
24
|
from tomwer.core.process.reconstruction.axis.mode import AxisMode
|
51
25
|
from tomwer.core.scan.nxtomoscan import NXtomoScan
|
52
26
|
from tomwer.core.scan.scanbase import TomwerScanBase, _TomwerBaseDock
|
53
|
-
from tomwer.gui.reconstruction.axis import
|
27
|
+
from tomwer.gui.reconstruction.axis import AxisMainWindow
|
54
28
|
from tomwer.synctools.axis import QAxisRP
|
55
29
|
from tomwer.synctools.stacks.reconstruction.axis import AxisProcessStack
|
56
30
|
|
@@ -64,7 +38,7 @@ class AxisOW(SuperviseOW, WidgetLongProcessing):
|
|
64
38
|
Widget used to defined the center of rotation axis to be used for a
|
65
39
|
reconstruction.
|
66
40
|
|
67
|
-
:param
|
41
|
+
:param _connect_handler: True if we want to store the modifications
|
68
42
|
on the setting. Need for unit test since
|
69
43
|
keep alive qt widgets.
|
70
44
|
"""
|
@@ -112,12 +86,12 @@ class AxisOW(SuperviseOW, WidgetLongProcessing):
|
|
112
86
|
class Outputs:
|
113
87
|
data = Output(name="data", type=TomwerScanBase, doc="one scan to be process")
|
114
88
|
|
115
|
-
def __init__(self, parent=None, axis_params=None):
|
89
|
+
def __init__(self, parent=None, axis_params: QAxisRP | None = None):
|
116
90
|
"""
|
117
91
|
|
118
92
|
:param parent: QWidget parent or None
|
119
93
|
:param _connect_handler: used for CI, because if connected fails CI
|
120
|
-
:param
|
94
|
+
:param axis_params: reconstruction parameters
|
121
95
|
"""
|
122
96
|
if axis_params is not None:
|
123
97
|
if not isinstance(axis_params, QAxisRP):
|
@@ -160,23 +134,13 @@ class AxisOW(SuperviseOW, WidgetLongProcessing):
|
|
160
134
|
axis_params=self._axis_params, process_id=self.process_id
|
161
135
|
)
|
162
136
|
|
163
|
-
self._widget =
|
137
|
+
self._widget = AxisMainWindow(parent=self, axis_params=self._axis_params)
|
164
138
|
|
165
139
|
self._layout = gui.vBox(self.mainArea, self.name).layout()
|
166
140
|
self._layout.setContentsMargins(0, 0, 0, 0)
|
167
141
|
|
168
142
|
self._layout.addWidget(self._widget)
|
169
143
|
|
170
|
-
# expose API
|
171
|
-
self.setMode = self._widget.setMode
|
172
|
-
self.getRadioMode = self._widget.getRadioMode
|
173
|
-
self.getEstimatedCor = self._widget.getEstimatedCor
|
174
|
-
self.setEstimatedCor = self._widget.setEstimatedCor
|
175
|
-
self.getAxis = self._widget.getAxis
|
176
|
-
self.setValueLock = self._widget.setValueLock
|
177
|
-
self._setModeLockFrmSettings = self._widget._setModeLockFrmSettings
|
178
|
-
self._setValueLockFrmSettings = self._widget._setValueLockFrmSettings
|
179
|
-
|
180
144
|
# load settings
|
181
145
|
try:
|
182
146
|
if "mode_is_lock" in gui_settings:
|
@@ -184,7 +148,7 @@ class AxisOW(SuperviseOW, WidgetLongProcessing):
|
|
184
148
|
# if the mode is manual or read ignore lock
|
185
149
|
if not (
|
186
150
|
mode_lock is True
|
187
|
-
and self.
|
151
|
+
and self.getMode() in (AxisMode.manual, AxisMode.read)
|
188
152
|
):
|
189
153
|
self._setModeLockFrmSettings(mode_lock)
|
190
154
|
|
@@ -196,12 +160,13 @@ class AxisOW(SuperviseOW, WidgetLongProcessing):
|
|
196
160
|
"auto_update_estimated_cor", True
|
197
161
|
)
|
198
162
|
self._widget.setAutoUpdateEstimatedCor(auto_update_estimated_cor)
|
163
|
+
self._widget.setYAxisInverted(gui_settings.get("y_axis_inverted", False))
|
199
164
|
|
200
165
|
except Exception as e:
|
201
166
|
logger.warning(f"Fail to load settings. Error is {str(e)}")
|
202
167
|
|
203
168
|
# expose API
|
204
|
-
self._applyBut = self._widget.
|
169
|
+
self._applyBut = self._widget._controlWidget._applyBut
|
205
170
|
# connect Signal / Slot
|
206
171
|
self._widget.sigComputationRequested.connect(self.__compute)
|
207
172
|
self._widget.sigApply.connect(self.__validate)
|
@@ -210,16 +175,19 @@ class AxisOW(SuperviseOW, WidgetLongProcessing):
|
|
210
175
|
self._processingStack.sigComputationEnded.connect(self._scanProcessed)
|
211
176
|
|
212
177
|
self._axis_params.sigChanged.connect(self._updateSettingsVals)
|
178
|
+
self._widget._axisWidget._settingsWidget._mainWidget._calculationWidget.sigUpdateXRotAxisPixelPosOnNewScan.connect(
|
179
|
+
self._updateSettingsVals
|
180
|
+
)
|
213
181
|
self._widget.sigAxisEditionLocked.connect(self._updateSettingsVals)
|
214
|
-
self._widget.
|
182
|
+
self._widget.sigModeChanged.connect(self._updateSettingsVals)
|
215
183
|
self._widget.sigLockModeChanged.connect(self._updateSettingsVals)
|
216
184
|
|
217
|
-
self._widget._axisWidget.
|
185
|
+
self._widget._axisWidget._settingsWidget._mainWidget._calculationWidget._estimatedCorWidget.sigValueChanged.connect(
|
218
186
|
self._updateSettingsVals
|
219
187
|
)
|
220
188
|
|
221
189
|
# handle special case of the manual mode
|
222
|
-
# force axis to manual because not handled by the widget setup
|
190
|
+
# force axis to manual because not handled by the widget setup directly
|
223
191
|
if original_mode in (
|
224
192
|
AxisMode.manual,
|
225
193
|
AxisMode.read,
|
@@ -230,11 +198,11 @@ class AxisOW(SuperviseOW, WidgetLongProcessing):
|
|
230
198
|
|
231
199
|
self.setMode(original_mode)
|
232
200
|
# force gui update
|
233
|
-
self._widget.
|
201
|
+
self._widget.sigModeChanged.emit("manual")
|
234
202
|
# hard fix, but this widget has to be redone and rework anyway
|
235
|
-
self._widget._axisWidget.
|
203
|
+
self._widget._axisWidget._settingsWidget._mainWidget._calculationWidget._modeChanged()
|
236
204
|
if original_cor is not None:
|
237
|
-
self._widget.
|
205
|
+
self._widget._controlWidget._positionInfo.setPosition(
|
238
206
|
relative_cor=original_cor, abs_cor=None
|
239
207
|
)
|
240
208
|
|
@@ -316,7 +284,9 @@ class AxisOW(SuperviseOW, WidgetLongProcessing):
|
|
316
284
|
The Axis will process the next scan in the stack.
|
317
285
|
"""
|
318
286
|
if self.__scan:
|
319
|
-
if self.
|
287
|
+
if self.getMode() is AxisMode.manual:
|
288
|
+
# when value is set from manual mode we need to retrieve it from the GUI `_axis_param`. Else it has already been set
|
289
|
+
# to the scan `_axis_params`
|
320
290
|
if (
|
321
291
|
self.__scan._axis_params.frame_width is None
|
322
292
|
and self.__scan.dim_1 is not None
|
@@ -376,7 +346,8 @@ class AxisOW(SuperviseOW, WidgetLongProcessing):
|
|
376
346
|
"gui": {
|
377
347
|
"mode_is_lock": self.isModeLocked(),
|
378
348
|
"value_is_lock": self.isValueLock(),
|
379
|
-
"auto_update_estimated_cor": self._widget.
|
349
|
+
"auto_update_estimated_cor": self._widget.getAutoUpdateEstimatedCor(),
|
350
|
+
"y_axis_inverted": self._widget.isYAxisInverted(),
|
380
351
|
},
|
381
352
|
}
|
382
353
|
|
@@ -392,7 +363,7 @@ class AxisOW(SuperviseOW, WidgetLongProcessing):
|
|
392
363
|
def _lock_axis_controls(self, lock):
|
393
364
|
"""
|
394
365
|
|
395
|
-
:param
|
366
|
+
:param lock: lock the axis controls to avoid modification of the
|
396
367
|
requested options, method... of the axis calculation
|
397
368
|
when this value is under calculation.
|
398
369
|
"""
|
@@ -482,9 +453,6 @@ class AxisOW(SuperviseOW, WidgetLongProcessing):
|
|
482
453
|
"serialize_output_data": False,
|
483
454
|
}
|
484
455
|
)
|
485
|
-
for patch in self._patches:
|
486
|
-
mode, function = patch
|
487
|
-
processing_class._CALCULATIONS_METHODS[mode] = function
|
488
456
|
processing_class.run()
|
489
457
|
self._updatePosition(scan=self.__scan)
|
490
458
|
if self.isModeLocked() or self.isValueLock():
|
@@ -533,9 +501,7 @@ class AxisOW(SuperviseOW, WidgetLongProcessing):
|
|
533
501
|
|
534
502
|
def _updatePosition(self, scan):
|
535
503
|
if scan.axis_params is not None:
|
536
|
-
self._widget.setPosition(
|
537
|
-
frm=None, value=scan.axis_params.relative_cor_value
|
538
|
-
)
|
504
|
+
self._widget.setPosition(relative_value=scan.axis_params.relative_cor_value)
|
539
505
|
|
540
506
|
@Inputs.data_recompute_axis
|
541
507
|
def reprocess(self, scan):
|
@@ -559,9 +525,34 @@ class AxisOW(SuperviseOW, WidgetLongProcessing):
|
|
559
525
|
|
560
526
|
def keyPressEvent(self, event):
|
561
527
|
"""The event has to be filtered since we have some children
|
562
|
-
|
528
|
+
that can be edited using the 'enter' key as defining the cor manually
|
563
529
|
(see #481)). As we are in a dialog this automatically trigger
|
564
530
|
'accepted'. See https://forum.qt.io/topic/5080/preventing-enter-key-from-triggering-ok-in-qbuttonbox-in-particular-qlineedit-qbuttonbox/5
|
565
531
|
"""
|
566
532
|
if event.key() != qt.Qt.Key_Enter:
|
567
533
|
super().keyPressEvent(event)
|
534
|
+
|
535
|
+
# expose API
|
536
|
+
def setMode(self, mode):
|
537
|
+
self._widget.setMode(mode=mode)
|
538
|
+
|
539
|
+
def getMode(self):
|
540
|
+
return self._widget.getMode()
|
541
|
+
|
542
|
+
def getEstimatedCor(self):
|
543
|
+
return self._widget.getEstimatedCor()
|
544
|
+
|
545
|
+
def setEstimatedCor(self, value):
|
546
|
+
self._widget.setEstimatedCor(value=value)
|
547
|
+
|
548
|
+
def getAxisParams(self):
|
549
|
+
return self._widget.getAxisParams()
|
550
|
+
|
551
|
+
def setValueLock(self, lock: bool):
|
552
|
+
self._widget.setValueLock(lock=lock)
|
553
|
+
|
554
|
+
def _setModeLockFrmSettings(self, lock: bool):
|
555
|
+
self._widget._setModeLockFrmSettings(lock=lock)
|
556
|
+
|
557
|
+
def _setValueLockFrmSettings(self, lock: bool):
|
558
|
+
self._widget._setValueLockFrmSettings(lock=lock)
|
@@ -1,50 +1,21 @@
|
|
1
|
-
|
2
|
-
# /*##########################################################################
|
3
|
-
#
|
4
|
-
# Copyright (c) 2016-2017 European Synchrotron Radiation Facility
|
5
|
-
#
|
6
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
-
# of this software and associated documentation files (the "Software"), to deal
|
8
|
-
# in the Software without restriction, including without limitation the rights
|
9
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
-
# copies of the Software, and to permit persons to whom the Software is
|
11
|
-
# furnished to do so, subject to the following conditions:
|
12
|
-
#
|
13
|
-
# The above copyright notice and this permission notice shall be included in
|
14
|
-
# all copies or substantial portions of the Software.
|
15
|
-
#
|
16
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
|
-
# THE SOFTWARE.
|
23
|
-
#
|
24
|
-
# ###########################################################################*/
|
25
|
-
|
26
|
-
__authors__ = ["H. Payno"]
|
27
|
-
__license__ = "MIT"
|
28
|
-
__date__ = "15/12/2021"
|
1
|
+
from __future__ import annotations
|
29
2
|
|
30
3
|
import logging
|
31
|
-
from typing import Optional
|
32
4
|
|
33
5
|
from orangewidget import gui
|
34
6
|
from orangewidget.settings import Setting
|
35
7
|
from orangewidget.widget import Input, Output
|
36
|
-
from processview.core.manager.manager import DatasetState, ProcessManager
|
37
8
|
from silx.gui import qt
|
38
9
|
|
39
10
|
import tomwer.core.process.reconstruction.nabu.castvolume
|
40
11
|
from orangecontrib.tomwer.widgets.utils import WidgetLongProcessing
|
41
|
-
from tomwer.core import settings
|
42
12
|
from tomwer.core.cluster.cluster import SlurmClusterConfiguration
|
43
13
|
from tomwer.core.futureobject import FutureTomwerObject
|
44
14
|
from tomwer.core.scan.scanbase import TomwerScanBase
|
45
|
-
from tomwer.core.utils.lbsram import is_low_on_memory
|
46
15
|
from tomwer.core.volume.volumebase import TomwerVolumeBase
|
47
16
|
from tomwer.gui.reconstruction.nabu.castvolume import CastVolumeWidget
|
17
|
+
from tomwer.gui.utils.qt_utils import block_signals
|
18
|
+
|
48
19
|
from tomwer.synctools.stacks.reconstruction.castvolume import CastVolumeProcessStack
|
49
20
|
from tomwer.utils import docstring
|
50
21
|
|
@@ -59,7 +30,7 @@ class CastNabuVolumeOW(WidgetLongProcessing, SuperviseOW):
|
|
59
30
|
|
60
31
|
This is done in a separate process because:
|
61
32
|
|
62
|
-
* this is done in cpu when nabu reconstruct on GPU and this should free sooner GPU
|
33
|
+
* this is done in cpu when nabu reconstruct on GPU and this should free sooner GPU resources with the current architecture.
|
63
34
|
* this is not included in nabu but also done as post processing.
|
64
35
|
* limitation is that not having computed the histogram during volume construction will slow down the cast
|
65
36
|
|
@@ -164,61 +135,43 @@ class CastNabuVolumeOW(WidgetLongProcessing, SuperviseOW):
|
|
164
135
|
return super().__new__(cls, *args, **kwargs)
|
165
136
|
|
166
137
|
@Inputs.data
|
167
|
-
def process_data(self, scan:
|
168
|
-
self.
|
138
|
+
def process_data(self, scan: TomwerScanBase | None):
|
139
|
+
self._process(scan=scan, volume=None)
|
169
140
|
|
170
|
-
def
|
171
|
-
if scan is None:
|
141
|
+
def _process(self, scan: TomwerScanBase | None, volume: TomwerVolumeBase | None):
|
142
|
+
if scan is None and volume is None:
|
172
143
|
return
|
173
|
-
|
144
|
+
# check types
|
145
|
+
if scan is not None and not isinstance(scan, TomwerScanBase):
|
174
146
|
raise TypeError(
|
175
147
|
f"scan is expected to be an instance of {TomwerScanBase} not {type(scan)}"
|
176
148
|
)
|
177
|
-
if (
|
178
|
-
|
179
|
-
|
180
|
-
):
|
181
|
-
ProcessManager().notify_dataset_state(
|
182
|
-
dataset=scan,
|
183
|
-
process=self,
|
184
|
-
state=DatasetState.SKIPPED,
|
185
|
-
)
|
186
|
-
_logger.processSkipped(
|
187
|
-
f"skip volume cast for {str(scan)} because lbsram is almost full. Try to free it"
|
149
|
+
if volume is not None and not isinstance(volume, TomwerVolumeBase):
|
150
|
+
raise TypeError(
|
151
|
+
f"volume is expected to be an instance of {TomwerVolumeBase} not {type(volume)}"
|
188
152
|
)
|
189
|
-
|
190
|
-
|
191
|
-
self._processingStack.add(scan, configuration=self.getConfiguration())
|
153
|
+
|
154
|
+
self._processingStack.add(scan or volume, configuration=self.getConfiguration())
|
192
155
|
|
193
156
|
@docstring
|
194
157
|
def reprocess(self, dataset):
|
195
158
|
if isinstance(dataset, TomwerScanBase):
|
196
|
-
self.
|
159
|
+
self._process(scan=dataset, volume=None)
|
197
160
|
elif isinstance(dataset, TomwerVolumeBase):
|
198
|
-
self.
|
161
|
+
self._process(scan=None, volume=dataset)
|
199
162
|
else:
|
200
163
|
raise TypeError("dataset is expected to be an instance of ''")
|
201
164
|
|
202
165
|
@Inputs.cluster_in
|
203
|
-
def setCluster(self, slurm_cluster:
|
166
|
+
def setCluster(self, slurm_cluster: SlurmClusterConfiguration | None):
|
204
167
|
assert isinstance(
|
205
168
|
slurm_cluster, (type(None), SlurmClusterConfiguration)
|
206
169
|
), f"Expect None of SlurmClusterConfiguration. Not {type(slurm_cluster)}"
|
207
170
|
self._slurmCluster = slurm_cluster
|
208
171
|
|
209
172
|
@Inputs.volume
|
210
|
-
def process_volume(self, volume:
|
211
|
-
self.
|
212
|
-
|
213
|
-
def _process_volume(self, volume: Optional[TomwerVolumeBase]):
|
214
|
-
if volume is None:
|
215
|
-
return
|
216
|
-
if not isinstance(volume, TomwerVolumeBase):
|
217
|
-
raise TypeError(
|
218
|
-
f"volume is expected to be an instance of {TomwerVolumeBase} not {type(volume)}"
|
219
|
-
)
|
220
|
-
else:
|
221
|
-
self._processingStack.add(volume, configuration=self.getConfiguration())
|
173
|
+
def process_volume(self, volume: TomwerVolumeBase | None):
|
174
|
+
self._process(scan=None, volume=volume)
|
222
175
|
|
223
176
|
def getConfiguration(self) -> dict:
|
224
177
|
config = self._window.getConfiguration()
|
@@ -226,7 +179,8 @@ class CastNabuVolumeOW(WidgetLongProcessing, SuperviseOW):
|
|
226
179
|
return config
|
227
180
|
|
228
181
|
def setConfiguration(self, configuration: dict) -> None:
|
229
|
-
self._window
|
182
|
+
with block_signals(self._window):
|
183
|
+
self._window.setConfiguration(configuration)
|
230
184
|
|
231
185
|
def _updateConfig(self):
|
232
186
|
self._ewoks_default_inputs = {
|
@@ -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
|
-
__authors__ = ["C. Nemoz", "H. Payno"]
|
27
|
-
__license__ = "MIT"
|
28
|
-
__date__ = "10/01/2018"
|
29
|
-
|
2
|
+
from __future__ import annotations
|
30
3
|
|
31
4
|
import copy
|
32
5
|
import logging
|
@@ -113,10 +86,10 @@ class DarkRefAndCopyOW(SuperviseOW, WidgetLongProcessing):
|
|
113
86
|
doc="DataUrl of the reduced flat. Key is the relative position, value is the reduced flat",
|
114
87
|
)
|
115
88
|
|
116
|
-
def __init__(self, parent=None, reconsparams=None):
|
89
|
+
def __init__(self, parent=None, reconsparams: QDKRFRP | None = None):
|
117
90
|
"""
|
118
91
|
|
119
|
-
:param
|
92
|
+
:param reconsparams: reconstruction parameters
|
120
93
|
"""
|
121
94
|
SuperviseOW.__init__(self, parent)
|
122
95
|
WidgetLongProcessing.__init__(self)
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# from __future__ import annotations
|
2
|
+
|
1
3
|
# import logging
|
2
4
|
|
3
5
|
# from orangewidget import gui
|
@@ -159,26 +161,26 @@
|
|
159
161
|
# except Exception:
|
160
162
|
# pass
|
161
163
|
|
162
|
-
#
|
163
|
-
#
|
164
|
-
#
|
165
|
-
#
|
166
|
-
#
|
167
|
-
#
|
168
|
-
#
|
169
|
-
# else:
|
170
|
-
# self.notify_failed(scan=scan)
|
171
|
-
# except Exception as e:
|
172
|
-
# _logger.error(f"failed to handle task finished callback. Raiseon is {e}")
|
173
|
-
|
174
|
-
# @Inputs.data
|
175
|
-
# def process_data(self, scan: Optional[TomwerScanBase]):
|
176
|
-
# if scan is None:
|
177
|
-
# return
|
164
|
+
# def _notify_state(self):
|
165
|
+
# try:
|
166
|
+
# task_executor = self.sender()
|
167
|
+
# task_suceeded = task_executor.succeeded
|
168
|
+
# scan = task_executor.current_task.outputs.data
|
169
|
+
# if task_suceeded:
|
170
|
+
# self.notify_succeed(scan=scan)
|
178
171
|
# else:
|
179
|
-
# self.
|
180
|
-
#
|
181
|
-
#
|
172
|
+
# self.notify_failed(scan=scan)
|
173
|
+
# except Exception as e:
|
174
|
+
# _logger.error(f"failed to handle task finished callback. Reason is {e}")
|
175
|
+
|
176
|
+
# @Inputs.data
|
177
|
+
# def process_data(self, scan: TomwerScanBase | None):
|
178
|
+
# if scan is None:
|
179
|
+
# return
|
180
|
+
# else:
|
181
|
+
# self.__scan = scan
|
182
|
+
# self.notify_pending(scan=scan)
|
183
|
+
# self.execute_ewoks_task()
|
182
184
|
|
183
185
|
# def sizeHint(self) -> qt.QSize:
|
184
186
|
# return qt.QSize(650, 60)
|
@@ -1,38 +1,10 @@
|
|
1
1
|
# coding: utf-8
|
2
|
-
|
3
|
-
|
4
|
-
|
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__ = ["C. Nemoz", "H. Payno"]
|
27
|
-
__license__ = "MIT"
|
28
|
-
__date__ = "14/02/2020"
|
29
|
-
|
30
|
-
|
31
|
-
import os
|
2
|
+
|
3
|
+
from __future__ import annotations
|
4
|
+
|
32
5
|
import copy
|
33
6
|
import logging
|
34
7
|
from contextlib import AbstractContextManager
|
35
|
-
from typing import Optional
|
36
8
|
|
37
9
|
from orangewidget import gui
|
38
10
|
from orangewidget.settings import Setting
|
@@ -45,10 +17,7 @@ from tomwer.core.futureobject import FutureTomwerObject
|
|
45
17
|
from tomwer.core.process.reconstruction.nabu.nabuslices import NabuSlicesTask
|
46
18
|
from tomwer.core.scan.scanbase import TomwerScanBase, _TomwerBaseDock
|
47
19
|
from tomwer.core.volume.volumefactory import VolumeFactory
|
48
|
-
|
49
|
-
IcatScreenshots,
|
50
|
-
deduce_dataset_gallery_location,
|
51
|
-
)
|
20
|
+
|
52
21
|
from tomwer.gui.reconstruction.nabu.slices import NabuWindow
|
53
22
|
from tomwer.synctools.stacks.reconstruction.nabu import NabuSliceProcessStack
|
54
23
|
|
@@ -114,12 +83,6 @@ class NabuOW(WidgetLongProcessing, SuperviseOW):
|
|
114
83
|
|
115
84
|
slice_urls = Output(name="slice urls", type=tuple, doc="tuple of urls created")
|
116
85
|
|
117
|
-
screenshots = Output(
|
118
|
-
name="screenshots",
|
119
|
-
type=IcatScreenshots,
|
120
|
-
doc="screenshots that can be saved",
|
121
|
-
)
|
122
|
-
|
123
86
|
class DialogCM(AbstractContextManager):
|
124
87
|
"""Simple context manager to hide / show button dialogs"""
|
125
88
|
|
@@ -133,17 +96,6 @@ class NabuOW(WidgetLongProcessing, SuperviseOW):
|
|
133
96
|
self._dialogButtonsBox.hide()
|
134
97
|
|
135
98
|
def __init__(self, parent=None):
|
136
|
-
"""
|
137
|
-
Widget which read the .hdf5 generated by octave and modify it.
|
138
|
-
Then run a subprocess to call octave and run ftseries
|
139
|
-
|
140
|
-
:param bool _connect_handler: True if we want to store the modifications
|
141
|
-
on the setting. Need for unit test since
|
142
|
-
keep alive qt widgets.
|
143
|
-
:param recons_params: reconsparameter to be used by the FTWidget.
|
144
|
-
If None, some will be created.
|
145
|
-
:type: :class:`QReconsParams`
|
146
|
-
"""
|
147
99
|
SuperviseOW.__init__(self, parent)
|
148
100
|
WidgetLongProcessing.__init__(self)
|
149
101
|
self._slurmCluster = None
|
@@ -220,11 +172,7 @@ class NabuOW(WidgetLongProcessing, SuperviseOW):
|
|
220
172
|
from tomwer.synctools.axis import QAxisRP
|
221
173
|
|
222
174
|
scan.axis_params = QAxisRP()
|
223
|
-
scan.axis_params.set_relative_value(float(r_cor)
|
224
|
-
try:
|
225
|
-
scan.axis_params.set_relative_value(float(r_cor) - scan.dim_1 / 2.0)
|
226
|
-
except Exception:
|
227
|
-
pass
|
175
|
+
scan.axis_params.set_relative_value(float(r_cor))
|
228
176
|
|
229
177
|
self.show()
|
230
178
|
with NabuOW.DialogCM(self._buttons):
|
@@ -254,7 +202,7 @@ class NabuOW(WidgetLongProcessing, SuperviseOW):
|
|
254
202
|
self._processingStack._process_next()
|
255
203
|
|
256
204
|
@Inputs.cluster_in
|
257
|
-
def setCluster(self, slurm_cluster:
|
205
|
+
def setCluster(self, slurm_cluster: SlurmClusterConfiguration | None):
|
258
206
|
assert isinstance(
|
259
207
|
slurm_cluster, (type(None), SlurmClusterConfiguration)
|
260
208
|
), f"Expect None of SlurmClusterConfiguration. Not {type(slurm_cluster)}"
|
@@ -275,17 +223,6 @@ class NabuOW(WidgetLongProcessing, SuperviseOW):
|
|
275
223
|
slice_urls = tuple(slice_urls)
|
276
224
|
# provide list of reconstructed slices
|
277
225
|
self.Outputs.slice_urls.send(slice_urls)
|
278
|
-
# provide list of screenshots
|
279
|
-
self.Outputs.screenshots.send(
|
280
|
-
IcatScreenshots(
|
281
|
-
data_dir=deduce_dataset_gallery_location(scan),
|
282
|
-
screenshots={
|
283
|
-
os.path.splitext(os.path.basename(url.file_path()))[0]: url
|
284
|
-
for url in slice_urls
|
285
|
-
},
|
286
|
-
scan=scan,
|
287
|
-
)
|
288
|
-
)
|
289
226
|
|
290
227
|
self.sigScanReady.emit(scan)
|
291
228
|
if future_tomo_obj is not None:
|
@@ -322,7 +259,7 @@ class NabuOW(WidgetLongProcessing, SuperviseOW):
|
|
322
259
|
|
323
260
|
def keyPressEvent(self, event):
|
324
261
|
"""The event has to be filtered since we have some children
|
325
|
-
|
262
|
+
that can be edited using the 'enter' key as defining the cor manually
|
326
263
|
(see #481)). As we are in a dialog this automatically trigger
|
327
264
|
'accepted'. See https://forum.qt.io/topic/5080/preventing-enter-key-from-triggering-ok-in-qbuttonbox-in-particular-qlineedit-qbuttonbox/5
|
328
265
|
"""
|