tomwer 1.3.26__py3-none-any.whl → 1.4.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- orangecontrib/tomwer/orange/managedprocess.py +1 -29
- orangecontrib/tomwer/orange/settings.py +2 -28
- orangecontrib/tomwer/tests/TestAcquisition.py +220 -0
- orangecontrib/tomwer/tutorials/append_raw_darks_and_flats_frames_to_NXtomos.ows +2 -2
- orangecontrib/tomwer/tutorials/copy_reduced_darks_and_flats_meth1.ows +1 -1
- orangecontrib/tomwer/tutorials/{icat_publication.ows → drac_publication.ows} +7 -21
- orangecontrib/tomwer/tutorials/id16b/ID16b_full_volume.ows +22 -0
- orangecontrib/tomwer/tutorials/id16b/ID16b_insitu.ows +302 -0
- orangecontrib/tomwer/tutorials/id16b/ID16b_normalization.ows +218 -0
- orangecontrib/tomwer/tutorials/simple_volume_to_slurm_reconstruction.ows +29 -24
- orangecontrib/tomwer/tutorials/test_cor.ows +19 -0
- orangecontrib/tomwer/tutorials/volume_casting_on_slurm.ows +54 -0
- orangecontrib/tomwer/widgets/__init__.py +3 -5
- orangecontrib/tomwer/widgets/cluster/FutureSupervisorOW.py +35 -54
- orangecontrib/tomwer/widgets/cluster/SlurmClusterOW.py +1 -31
- orangecontrib/tomwer/widgets/control/AdvancementOW.py +1 -29
- orangecontrib/tomwer/widgets/control/DataDiscoveryOW.py +5 -4
- orangecontrib/tomwer/widgets/control/DataListenerOW.py +1 -29
- orangecontrib/tomwer/widgets/control/DataSelectorOW.py +11 -30
- orangecontrib/tomwer/widgets/control/DataTransfertOW.py +2 -28
- orangecontrib/tomwer/widgets/control/DataValidatorOW.py +1 -28
- orangecontrib/tomwer/widgets/control/DataWatcherOW.py +1 -28
- orangecontrib/tomwer/widgets/control/EDF2NXTomomillOW.py +48 -51
- orangecontrib/tomwer/widgets/control/EmailOW.py +12 -2
- orangecontrib/tomwer/widgets/control/FilterOW.py +1 -28
- orangecontrib/tomwer/widgets/control/NXTomomillOW.py +37 -53
- orangecontrib/tomwer/widgets/control/NXtomoConcatenate.py +21 -20
- orangecontrib/tomwer/widgets/control/NotifierOW.py +9 -28
- orangecontrib/tomwer/widgets/control/ReduceDarkFlatSelectorOW.py +3 -2
- orangecontrib/tomwer/widgets/control/SingleTomoObjOW.py +1 -27
- orangecontrib/tomwer/widgets/control/TimerOW.py +9 -28
- orangecontrib/tomwer/widgets/control/TomoObjSeriesOW.py +58 -0
- orangecontrib/tomwer/widgets/control/VolumeSelector.py +8 -30
- orangecontrib/tomwer/widgets/control/icons/nxtomomill.svg +173 -119
- orangecontrib/tomwer/widgets/control/icons/reduced_darkflat_selector.png +0 -0
- orangecontrib/tomwer/widgets/control/icons/reduced_darkflat_selector.svg +55 -195
- orangecontrib/tomwer/widgets/control/icons/{tomoobjserie.svg → tomoobjseries.svg} +2 -2
- orangecontrib/tomwer/widgets/dataportal/PublishProcessedDataOW.py +172 -0
- orangecontrib/tomwer/widgets/{icat → dataportal}/__init__.py +2 -2
- orangecontrib/tomwer/widgets/debugtools/DatasetGeneratorOW.py +2 -29
- orangecontrib/tomwer/widgets/debugtools/ObjectInspectorOW.py +1 -29
- orangecontrib/tomwer/widgets/edit/DarkFlatPatchOW.py +48 -73
- orangecontrib/tomwer/widgets/edit/ImageKeyEditorOW.py +48 -75
- orangecontrib/tomwer/widgets/edit/ImageKeyUpgraderOW.py +5 -30
- orangecontrib/tomwer/widgets/edit/NXtomoEditorOW.py +51 -52
- orangecontrib/tomwer/widgets/other/PythonScriptOW.py +22 -10
- orangecontrib/tomwer/widgets/reconstruction/AxisOW.py +51 -60
- orangecontrib/tomwer/widgets/reconstruction/CastNabuVolumeOW.py +22 -68
- orangecontrib/tomwer/widgets/reconstruction/DarkRefAndCopyOW.py +3 -30
- orangecontrib/tomwer/widgets/reconstruction/NabuHelicalPrepareWeightsDoubleOW.py +21 -19
- orangecontrib/tomwer/widgets/reconstruction/NabuOW.py +7 -70
- orangecontrib/tomwer/widgets/reconstruction/NabuVolumeOW.py +41 -84
- orangecontrib/tomwer/widgets/reconstruction/SAAxisOW.py +15 -40
- orangecontrib/tomwer/widgets/reconstruction/SADeltaBetaOW.py +13 -35
- orangecontrib/tomwer/widgets/reconstruction/SinoNormOW.py +2 -30
- orangecontrib/tomwer/widgets/stitching/ZStitchingConfigOW.py +11 -11
- orangecontrib/tomwer/widgets/utils.py +2 -29
- orangecontrib/tomwer/widgets/visualization/DataViewerOW.py +1 -27
- orangecontrib/tomwer/widgets/visualization/DiffViewerOW.py +1 -27
- orangecontrib/tomwer/widgets/visualization/NXtomoMetadataViewerOW.py +1 -1
- orangecontrib/tomwer/widgets/visualization/RadioStackOW.py +2 -28
- orangecontrib/tomwer/widgets/visualization/SampleMovedOW.py +1 -27
- orangecontrib/tomwer/widgets/visualization/SinogramViewerOW.py +1 -27
- orangecontrib/tomwer/widgets/visualization/SliceStackOW.py +2 -28
- tomwer/__init__.py +3 -28
- tomwer/__main__.py +8 -4
- tomwer/app/__init__.py +2 -0
- tomwer/app/axis.py +8 -10
- tomwer/app/canvas.py +23 -29
- tomwer/app/canvas_launcher/config.py +14 -102
- tomwer/app/canvas_launcher/environ.py +5 -8
- tomwer/app/canvas_launcher/mainwindow.py +175 -69
- tomwer/app/canvas_launcher/splash.py +1 -3
- tomwer/app/canvas_launcher/utils.py +47 -0
- tomwer/app/canvas_launcher/widgetsscheme.py +3 -10
- tomwer/app/diffframe.py +2 -0
- tomwer/app/imagekeyeditor.py +2 -1
- tomwer/app/imagekeyupgrader.py +2 -0
- tomwer/app/multicor.py +5 -2
- tomwer/app/multipag.py +16 -5
- tomwer/app/nabuapp.py +2 -1
- tomwer/app/nxtomoeditor.py +17 -12
- tomwer/app/patchrawdarkflat.py +2 -0
- tomwer/app/radiostack.py +3 -2
- tomwer/app/reducedarkflat.py +3 -0
- tomwer/app/samplemoved.py +2 -0
- tomwer/app/scanviewer.py +2 -0
- tomwer/app/sinogramviewer.py +2 -0
- tomwer/app/slicestack.py +11 -13
- tomwer/app/stitching/common.py +431 -0
- tomwer/app/stopdatalistener.py +3 -0
- tomwer/app/ystitching.py +26 -0
- tomwer/app/zstitching.py +8 -363
- tomwer/core/__init__.py +2 -28
- tomwer/core/cluster/__init__.py +3 -0
- tomwer/core/cluster/cluster.py +10 -26
- tomwer/core/futureobject.py +17 -43
- tomwer/core/log/__init__.py +2 -0
- tomwer/core/log/processlog.py +0 -28
- tomwer/core/process/cluster/supervisor.py +52 -34
- tomwer/core/process/conditions/filters.py +3 -28
- tomwer/core/process/control/datalistener/datalistener.py +7 -75
- tomwer/core/process/control/datalistener/rpcserver.py +8 -38
- tomwer/core/process/control/datawatcher/datawatcher.py +11 -40
- tomwer/core/process/control/datawatcher/datawatcherobserver.py +30 -64
- tomwer/core/process/control/datawatcher/datawatcherprocess.py +11 -32
- tomwer/core/process/control/datawatcher/edfdwprocess.py +2 -27
- tomwer/core/process/control/datawatcher/hdf5dwprocess.py +1 -26
- tomwer/core/process/control/datawatcher/status.py +1 -26
- tomwer/core/process/control/emailnotifier.py +11 -23
- tomwer/core/process/control/nxtomoconcatenate.py +20 -18
- tomwer/core/process/control/nxtomomill.py +9 -44
- tomwer/core/process/control/scanlist.py +0 -27
- tomwer/core/process/control/scantransfer.py +15 -13
- tomwer/core/process/control/scanvalidator.py +4 -30
- tomwer/core/process/control/{test → tests}/test_concatenate_nxtomos.py +5 -5
- tomwer/core/process/control/timer.py +1 -27
- tomwer/core/process/control/tomoobjseries.py +12 -0
- tomwer/core/process/drac/binning.py +37 -0
- tomwer/core/process/drac/dracbase.py +170 -0
- tomwer/core/process/drac/gallery.py +109 -0
- tomwer/core/process/drac/output.py +12 -0
- tomwer/core/process/drac/processeddataset.py +147 -0
- tomwer/core/process/drac/publish.py +118 -0
- tomwer/core/process/drac/rawdataset.py +142 -0
- tomwer/core/process/drac/tests/test_gallery.py +71 -0
- tomwer/core/process/drac/tests/test_icat_processed_dataset.py +80 -0
- tomwer/core/process/drac/tests/test_icat_raw_dataset.py +90 -0
- tomwer/core/process/edit/darkflatpatch.py +1 -28
- tomwer/core/process/edit/imagekeyeditor.py +4 -32
- tomwer/core/process/edit/nxtomoeditor.py +307 -0
- tomwer/core/process/edit/tests/test_darkflatpatch.py +243 -0
- tomwer/core/process/edit/tests/test_imagekey_editor.py +99 -0
- tomwer/core/process/output.py +9 -2
- tomwer/core/process/reconstruction/__init__.py +0 -26
- tomwer/core/process/reconstruction/axis/anglemode.py +1 -29
- tomwer/core/process/reconstruction/axis/axis.py +47 -804
- tomwer/core/process/reconstruction/axis/mode.py +89 -25
- tomwer/core/process/reconstruction/axis/params.py +131 -283
- tomwer/core/process/reconstruction/axis/projectiontype.py +0 -28
- tomwer/core/process/reconstruction/axis/side.py +8 -0
- tomwer/core/process/reconstruction/darkref/darkrefs.py +14 -39
- tomwer/core/process/reconstruction/darkref/darkrefscopy.py +7 -39
- tomwer/core/process/reconstruction/darkref/params.py +1 -28
- tomwer/core/process/reconstruction/nabu/castvolume.py +19 -34
- tomwer/core/process/reconstruction/nabu/nabucommon.py +18 -43
- tomwer/core/process/reconstruction/nabu/nabuscores.py +64 -68
- tomwer/core/process/reconstruction/nabu/nabuslices.py +63 -105
- tomwer/core/process/reconstruction/nabu/nabuvolume.py +44 -70
- tomwer/core/process/reconstruction/nabu/plane.py +10 -0
- tomwer/core/process/reconstruction/nabu/settings.py +1 -28
- tomwer/core/process/reconstruction/nabu/target.py +0 -28
- tomwer/core/process/reconstruction/nabu/test/test_castvolume.py +116 -0
- tomwer/core/process/reconstruction/nabu/test/test_nabu_utils.py +277 -0
- tomwer/core/process/reconstruction/nabu/test/test_nabunormalization.py +199 -0
- tomwer/core/process/reconstruction/nabu/utils.py +11 -60
- tomwer/core/process/reconstruction/normalization/normalization.py +2 -32
- tomwer/core/process/reconstruction/normalization/params.py +3 -35
- tomwer/core/process/reconstruction/output.py +14 -19
- tomwer/core/process/reconstruction/paramsbase.py +4 -33
- tomwer/core/process/reconstruction/saaxis/params.py +5 -33
- tomwer/core/process/reconstruction/saaxis/saaxis.py +22 -51
- tomwer/core/process/reconstruction/sadeltabeta/params.py +2 -31
- tomwer/core/process/reconstruction/sadeltabeta/sadeltabeta.py +18 -46
- tomwer/core/process/reconstruction/scores/params.py +9 -39
- tomwer/core/process/reconstruction/scores/scores.py +10 -42
- tomwer/core/process/reconstruction/tests/__init__.py +0 -0
- tomwer/core/process/reconstruction/tests/test_axis.py +46 -0
- tomwer/core/process/reconstruction/tests/test_darkref.py +33 -0
- tomwer/core/process/reconstruction/{test → tests}/test_saaxis.py +1 -27
- tomwer/core/process/reconstruction/tests/test_sadeltabeta.py +48 -0
- tomwer/core/process/reconstruction/{test → tests}/test_utils.py +4 -4
- tomwer/core/process/reconstruction/utils/cor.py +8 -4
- tomwer/core/process/script/python.py +1 -27
- tomwer/core/process/script/tests/test_script.py +41 -0
- tomwer/core/process/stitching/metadataholder.py +5 -4
- tomwer/core/process/stitching/nabustitcher.py +35 -5
- tomwer/core/process/stitching/tests/test_metadataholder.py +17 -0
- tomwer/core/process/task.py +20 -63
- tomwer/core/process/tests/__init__.py +0 -0
- tomwer/core/process/{test → tests}/test_conditions.py +1 -28
- tomwer/core/process/{test → tests}/test_dark_and_flat.py +1 -27
- tomwer/core/process/{test → tests}/test_data_listener.py +1 -27
- tomwer/core/process/{test → tests}/test_data_transfer.py +2 -28
- tomwer/core/process/{test → tests}/test_data_watcher.py +1 -27
- tomwer/core/process/{test → tests}/test_nabu.py +2 -33
- tomwer/core/process/{test → tests}/test_normalization.py +1 -26
- tomwer/core/process/{test → tests}/test_timer.py +1 -27
- tomwer/core/process/utils.py +2 -31
- tomwer/core/process/visualization/dataviewer.py +1 -26
- tomwer/core/process/visualization/diffviewer.py +1 -26
- tomwer/core/process/visualization/imagestackviewer.py +0 -26
- tomwer/core/process/visualization/radiostack.py +0 -26
- tomwer/core/process/visualization/samplemoved.py +0 -28
- tomwer/core/process/visualization/sinogramviewer.py +0 -27
- tomwer/core/process/visualization/slicestack.py +0 -28
- tomwer/core/process/visualization/tests/test_data_viewer.py +12 -0
- tomwer/core/process/visualization/tests/test_diff_viewer.py +12 -0
- tomwer/core/process/visualization/tests/test_image_stack_viewer.py +14 -0
- tomwer/core/process/visualization/tests/test_radio_stack.py +12 -0
- tomwer/core/process/visualization/tests/test_sample_moved.py +14 -0
- tomwer/core/process/visualization/tests/test_sinogram_viewer.py +13 -0
- tomwer/core/process/visualization/tests/test_slice_stack.py +13 -0
- tomwer/core/process/visualization/tests/test_volume_viewer.py +12 -0
- tomwer/core/process/visualization/volumeviewer.py +0 -29
- tomwer/core/scan/__init__.py +3 -27
- tomwer/core/scan/blissscan.py +5 -34
- tomwer/core/scan/edfscan.py +19 -53
- tomwer/core/scan/hdf5scan.py +2 -2
- tomwer/core/scan/nxtomoscan.py +48 -54
- tomwer/core/scan/scanbase.py +107 -203
- tomwer/core/scan/scanfactory.py +11 -41
- tomwer/core/scan/tests/__init__.py +0 -0
- tomwer/core/scan/tests/test_edf.py +25 -0
- tomwer/core/scan/tests/test_future_scan.py +35 -0
- tomwer/core/scan/tests/test_nxtomoscan.py +143 -0
- tomwer/core/scan/tests/test_process_registration.py +64 -0
- tomwer/core/settings.py +18 -40
- tomwer/core/tests/__init__.py +0 -0
- tomwer/core/tests/test_scanutils.py +26 -0
- tomwer/core/{test → tests}/test_utils.py +1 -28
- tomwer/core/tomwer_object.py +4 -0
- tomwer/core/utils/__init__.py +2 -0
- tomwer/core/utils/char.py +0 -28
- tomwer/core/utils/deprecation.py +12 -38
- tomwer/core/utils/dictutils.py +1 -3
- tomwer/core/utils/ftseriesutils.py +1 -27
- tomwer/core/utils/gpu.py +0 -28
- tomwer/core/utils/image.py +8 -39
- tomwer/core/utils/locker.py +1 -28
- tomwer/core/utils/logconfig.py +0 -27
- tomwer/core/utils/normalization.py +4 -31
- tomwer/core/utils/nxtomoutils.py +8 -38
- tomwer/core/utils/resource.py +0 -26
- tomwer/core/utils/scanutils.py +23 -52
- tomwer/core/utils/slurm.py +7 -30
- tomwer/core/utils/spec.py +6 -6
- tomwer/core/utils/tests/__init__.py +0 -0
- tomwer/core/utils/tests/test_image.py +30 -0
- tomwer/core/utils/tests/test_nxtomo.py +38 -0
- tomwer/core/utils/tests/test_scan_utils.py +46 -0
- tomwer/core/utils/tests/test_time.py +6 -0
- tomwer/core/utils/threads.py +0 -26
- tomwer/core/utils/time.py +0 -27
- tomwer/core/volume/__init__.py +4 -0
- tomwer/core/volume/edfvolume.py +1 -28
- tomwer/core/volume/hdf5volume.py +1 -28
- tomwer/core/volume/jp2kvolume.py +1 -27
- tomwer/core/volume/rawvolume.py +1 -28
- tomwer/core/volume/tests/test_volumes.py +21 -0
- tomwer/core/volume/tiffvolume.py +1 -28
- tomwer/core/volume/volumebase.py +5 -0
- tomwer/core/volume/volumefactory.py +7 -33
- tomwer/gui/__init__.py +0 -28
- tomwer/gui/cluster/__init__.py +2 -0
- tomwer/gui/cluster/slurm.py +297 -95
- tomwer/gui/cluster/supervisor.py +1 -27
- tomwer/gui/cluster/tests/__init__.py +0 -0
- tomwer/gui/cluster/{test → tests}/test_cluster.py +21 -26
- tomwer/gui/cluster/{test → tests}/test_supervisor.py +1 -27
- tomwer/gui/conditions/__init__.py +2 -0
- tomwer/gui/conditions/filter.py +1 -26
- tomwer/gui/configuration/__init__.py +2 -0
- tomwer/gui/control/__init__.py +2 -0
- tomwer/gui/control/actions.py +2 -28
- tomwer/gui/control/datadiscovery.py +4 -3
- tomwer/gui/control/datalist.py +64 -69
- tomwer/gui/control/datalistener.py +1 -39
- tomwer/gui/control/datareacheractions.py +1 -28
- tomwer/gui/control/datatransfert.py +2 -29
- tomwer/gui/control/datavalidator.py +3 -37
- tomwer/gui/control/datawatcher/__init__.py +0 -28
- tomwer/gui/control/datawatcher/configuration.py +1 -28
- tomwer/gui/control/datawatcher/datawatcher.py +3 -32
- tomwer/gui/control/datawatcher/datawatcherobserver.py +2 -28
- tomwer/gui/control/history.py +5 -35
- tomwer/gui/control/nxtomomill.py +3 -30
- tomwer/gui/control/observations.py +61 -55
- tomwer/gui/control/reducedarkflatselector.py +24 -20
- tomwer/gui/control/scanselectorwidget.py +2 -28
- tomwer/gui/control/selectorwidgetbase.py +17 -17
- tomwer/gui/control/series/__init__.py +0 -0
- tomwer/gui/control/{serie/seriecreator.py → series/seriescreator.py} +214 -235
- tomwer/gui/control/series/serieswaiter.py +0 -0
- tomwer/gui/control/series/test/test_creator.py +424 -0
- tomwer/gui/control/series/test/test_nxtomo_concatenate.py +21 -0
- tomwer/gui/control/singletomoobj.py +1 -1
- tomwer/gui/control/tests/__init__.py +0 -0
- tomwer/gui/control/tests/test_datalist.py +47 -0
- tomwer/gui/control/{test → tests}/test_datalistener.py +1 -28
- tomwer/gui/control/tests/test_datavalidator.py +27 -0
- tomwer/gui/control/{test → tests}/test_inputwidget.py +1 -27
- tomwer/gui/control/tests/test_process_manager.py +38 -0
- tomwer/gui/control/tests/test_scan_observations.py +23 -0
- tomwer/gui/control/tests/test_scanselector.py +42 -0
- tomwer/gui/control/{test → tests}/test_scanvalidator.py +1 -27
- tomwer/gui/control/{test → tests}/test_volume_dialog.py +2 -30
- tomwer/gui/control/{test → tests}/test_volumeselector.py +1 -27
- tomwer/gui/control/volumeselectorwidget.py +2 -30
- tomwer/gui/dataportal/__init__.py +2 -0
- tomwer/gui/{icat → dataportal}/createscreenshots.py +3 -2
- tomwer/gui/dataportal/gallery.py +133 -0
- tomwer/gui/dataportal/outputformat.py +0 -0
- tomwer/gui/dataportal/publish.py +96 -0
- tomwer/gui/dataportal/tests/test_create_screenshots_gui.py +23 -0
- tomwer/gui/dataportal/tests/test_gallery_gui.py +21 -0
- tomwer/gui/debugtools/__init__.py +2 -0
- tomwer/gui/debugtools/datasetgenerator.py +1 -30
- tomwer/gui/debugtools/objectinspector.py +1 -29
- tomwer/gui/dialog/QDataDialog.py +89 -0
- tomwer/gui/{qfolderdialog.py → dialog/QVolumeDialog.py} +8 -107
- tomwer/gui/dialog/__init__.py +1 -0
- tomwer/gui/edit/__init__.py +2 -0
- tomwer/gui/edit/dkrfpatch.py +52 -87
- tomwer/gui/edit/imagekeyeditor.py +18 -54
- tomwer/gui/edit/nxtomoeditor.py +113 -300
- tomwer/gui/edit/nxtomowarmer.py +3 -2
- tomwer/gui/edit/tests/__init__.py +0 -0
- tomwer/gui/edit/{test → tests}/test_dkrf_patch.py +3 -29
- tomwer/gui/edit/{test → tests}/test_image_key_editor.py +1 -27
- tomwer/gui/edit/{test → tests}/test_nx_editor.py +45 -23
- tomwer/gui/fonts.py +5 -0
- tomwer/gui/icons.py +28 -66
- tomwer/gui/illustrations.py +4 -34
- tomwer/gui/imagefromfile.py +5 -30
- tomwer/gui/metadataloader.py +36 -0
- tomwer/gui/qconfigfile.py +3 -0
- tomwer/gui/qlefilesystem.py +3 -0
- tomwer/gui/reconstruction/__init__.py +2 -0
- tomwer/gui/reconstruction/axis/AxisMainWindow.py +275 -0
- tomwer/gui/reconstruction/axis/AxisOptionsWidget.py +313 -0
- tomwer/gui/reconstruction/axis/AxisSettingsWidget.py +797 -0
- tomwer/gui/reconstruction/axis/AxisWidget.py +534 -0
- tomwer/gui/reconstruction/axis/CalculationWidget.py +218 -0
- tomwer/gui/reconstruction/axis/CompareImages.py +11 -44
- tomwer/gui/reconstruction/axis/ControlWidget.py +285 -0
- tomwer/gui/reconstruction/axis/EstimatedCORWidget.py +394 -0
- tomwer/gui/reconstruction/axis/EstimatedCorComboBox.py +118 -0
- tomwer/gui/reconstruction/axis/InputWidget.py +347 -0
- tomwer/gui/reconstruction/axis/ManualFramesSelection.py +168 -0
- tomwer/gui/reconstruction/axis/__init__.py +2 -2
- tomwer/gui/reconstruction/darkref/__init__.py +0 -27
- tomwer/gui/reconstruction/darkref/darkrefcopywidget.py +5 -34
- tomwer/gui/reconstruction/darkref/darkrefwidget.py +1 -27
- tomwer/gui/reconstruction/nabu/castvolume.py +40 -59
- tomwer/gui/reconstruction/nabu/check.py +7 -33
- tomwer/gui/reconstruction/nabu/nabuconfig/base.py +7 -34
- tomwer/gui/reconstruction/nabu/nabuconfig/ctf.py +6 -5
- tomwer/gui/reconstruction/nabu/nabuconfig/nabuconfig.py +10 -69
- tomwer/gui/reconstruction/nabu/nabuconfig/output.py +3 -47
- tomwer/gui/reconstruction/nabu/nabuconfig/phase.py +54 -36
- tomwer/gui/reconstruction/nabu/nabuconfig/preprocessing.py +103 -54
- tomwer/gui/reconstruction/nabu/nabuconfig/reconstruction.py +116 -65
- tomwer/gui/reconstruction/nabu/nabuflow.py +31 -61
- tomwer/gui/reconstruction/nabu/platform.py +94 -0
- tomwer/gui/reconstruction/nabu/slices.py +81 -45
- tomwer/gui/reconstruction/nabu/slurm.py +1 -27
- tomwer/gui/reconstruction/nabu/test/test_cast_volume.py +82 -0
- tomwer/gui/reconstruction/nabu/test/test_check.py +66 -0
- tomwer/gui/reconstruction/nabu/test/test_ctf.py +46 -0
- tomwer/gui/reconstruction/nabu/test/test_helical.py +21 -0
- tomwer/gui/reconstruction/nabu/test/test_nabu_preprocessing.py +81 -0
- tomwer/gui/reconstruction/nabu/volume.py +62 -90
- tomwer/gui/reconstruction/normalization/intensity.py +5 -32
- tomwer/gui/reconstruction/normalization/test/test_intensity.py +89 -0
- tomwer/gui/reconstruction/saaxis/corrangeselector.py +32 -56
- tomwer/gui/reconstruction/saaxis/dimensionwidget.py +56 -96
- tomwer/gui/reconstruction/saaxis/saaxis.py +17 -38
- tomwer/gui/reconstruction/saaxis/sliceselector.py +8 -39
- tomwer/gui/reconstruction/sadeltabeta/saadeltabeta.py +19 -37
- tomwer/gui/reconstruction/scores/control.py +2 -30
- tomwer/gui/reconstruction/scores/scoreplot.py +23 -49
- tomwer/gui/reconstruction/tests/__init__.py +0 -0
- tomwer/gui/reconstruction/{test → tests}/test_axis.py +23 -49
- tomwer/gui/reconstruction/{test → tests}/test_nabu.py +16 -31
- tomwer/gui/reconstruction/{test → tests}/test_saaxis.py +10 -37
- tomwer/gui/reconstruction/{test → tests}/test_sadeltabeta.py +1 -26
- tomwer/gui/samplemoved/__init__.py +2 -30
- tomwer/gui/samplemoved/selectiontable.py +3 -33
- tomwer/gui/settings.py +7 -0
- tomwer/gui/stackplot.py +33 -661
- tomwer/gui/stacks.py +261 -135
- tomwer/gui/stitching/SingleAxisStitchingWidget.py +326 -0
- tomwer/gui/stitching/StitchingOptionsWidget.py +438 -0
- tomwer/gui/stitching/StitchingWindow.py +586 -0
- tomwer/gui/stitching/__init__.py +2 -0
- tomwer/gui/stitching/alignment.py +90 -0
- tomwer/gui/stitching/axisorderedlist.py +44 -34
- tomwer/gui/stitching/config/axisparams.py +25 -11
- tomwer/gui/stitching/config/output.py +6 -5
- tomwer/gui/stitching/config/positionoveraxis.py +313 -51
- tomwer/gui/stitching/config/stitchingstrategies.py +22 -16
- tomwer/gui/stitching/config/tests/test_axisparams.py +25 -0
- tomwer/gui/stitching/config/tomoobjdetails.py +3 -5
- tomwer/gui/stitching/normalization.py +1 -0
- tomwer/gui/stitching/preview.py +59 -0
- tomwer/gui/stitching/singleaxis.py +57 -0
- tomwer/gui/stitching/stitchandbackground.py +3 -2
- tomwer/gui/stitching/stitching_preview.py +44 -36
- tomwer/gui/stitching/stitching_raw.py +5 -3
- tomwer/gui/stitching/tests/test_ZStitchingWindow.py +88 -0
- tomwer/gui/stitching/tests/test_axis_ordered_list.py +21 -0
- tomwer/gui/stitching/tests/test_normalization.py +27 -0
- tomwer/gui/stitching/tests/test_preview.py +68 -0
- tomwer/gui/stitching/tests/test_stitching_raw.py +110 -0
- tomwer/gui/stitching/tests/utils.py +92 -0
- tomwer/gui/stitching/utils.py +14 -0
- tomwer/gui/stitching/z_stitching/fineestimation.py +5 -33
- tomwer/gui/stitching/z_stitching/tests/test_fine_estimation.py +35 -0
- tomwer/gui/stitching/z_stitching/tests/test_raw_estimation.py +215 -0
- tomwer/gui/stitching/z_stitching/tests/test_stitching_window.py +51 -0
- tomwer/gui/tests/__init__.py +0 -0
- tomwer/gui/tests/test_axis_gui.py +43 -0
- tomwer/gui/{test → tests}/test_qfolder_dialog.py +1 -1
- tomwer/gui/utils/RangeWidget.py +44 -0
- tomwer/gui/utils/buttons.py +4 -3
- tomwer/gui/utils/completer.py +2 -33
- tomwer/gui/utils/flow.py +11 -40
- tomwer/gui/utils/gpu.py +60 -0
- tomwer/gui/utils/illustrations.py +1 -26
- tomwer/gui/utils/inputwidget.py +35 -73
- tomwer/gui/utils/lineselector/lineselector.py +9 -46
- tomwer/gui/utils/loadingmode.py +81 -0
- tomwer/gui/utils/qt_utils.py +9 -0
- tomwer/gui/utils/sandboxes.py +1 -26
- tomwer/gui/utils/scandescription.py +2 -31
- tomwer/gui/utils/scrollarea.py +6 -55
- tomwer/gui/utils/slider.py +4 -28
- tomwer/gui/utils/splashscreen.py +0 -28
- tomwer/gui/utils/step.py +14 -13
- tomwer/gui/utils/tests/test_completer.py +41 -0
- tomwer/gui/utils/tests/test_line_selector.py +21 -0
- tomwer/gui/utils/tests/test_splashscreen.py +8 -0
- tomwer/gui/utils/tests/test_vignettes.py +68 -0
- tomwer/gui/utils/unitsystem.py +15 -69
- tomwer/gui/utils/utils.py +4 -5
- tomwer/gui/utils/vignettes.py +10 -41
- tomwer/gui/utils/waiterthread.py +0 -26
- tomwer/gui/visualization/__init__.py +2 -0
- tomwer/gui/visualization/dataviewer.py +68 -421
- tomwer/gui/visualization/diffviewer/diffviewer.py +2 -30
- tomwer/gui/visualization/diffviewer/shiftwidget.py +4 -29
- tomwer/gui/visualization/fullscreenplot.py +5 -5
- tomwer/gui/visualization/imagestack.py +403 -0
- tomwer/gui/visualization/nxtomometadata.py +0 -4
- tomwer/gui/visualization/reconstructionparameters.py +14 -32
- tomwer/gui/visualization/scanoverview.py +33 -66
- tomwer/gui/visualization/sinogramviewer.py +2 -28
- tomwer/gui/visualization/test/__init__.py +0 -28
- tomwer/gui/visualization/test/test_dataviewer.py +1 -28
- tomwer/gui/visualization/test/test_diffviewer.py +1 -28
- tomwer/gui/visualization/test/test_nx_tomo_metadata_viewer.py +0 -5
- tomwer/gui/visualization/test/test_reconstruction_parameters.py +1 -27
- tomwer/gui/visualization/test/test_sinogramviewer.py +1 -28
- tomwer/gui/visualization/test/test_stacks.py +184 -115
- tomwer/gui/visualization/test/test_volumeviewer.py +3 -2
- tomwer/gui/visualization/tomoobjoverview.py +2 -2
- tomwer/gui/visualization/volumeoverview.py +3 -2
- tomwer/gui/visualization/volumeviewer.py +47 -43
- tomwer/io/__init__.py +2 -0
- tomwer/io/utils/h5pyutils.py +1 -27
- tomwer/io/utils/test/test_raw_and_processed_data.py +10 -0
- tomwer/io/utils/test/test_utils.py +67 -0
- tomwer/io/utils/utils.py +2 -31
- tomwer/resources/__init__.py +13 -33
- tomwer/resources/gui/icons/edit_downstream.svg +114 -0
- tomwer/resources/gui/icons/edit_upstream.svg +112 -0
- tomwer/resources/gui/icons/free_edition.svg +23 -0
- tomwer/resources/gui/icons/icat_gallery_opts.png +0 -0
- tomwer/resources/gui/icons/icat_gallery_opts.svg +80 -0
- tomwer/resources/gui/icons/search.png +0 -0
- tomwer/resources/gui/icons/search.svg +23 -0
- tomwer/resources/gui/icons/warning.png +0 -0
- tomwer/synctools/__init__.py +2 -0
- tomwer/synctools/axis.py +1 -27
- tomwer/synctools/darkref.py +1 -26
- tomwer/synctools/datalistener.py +1 -27
- tomwer/synctools/datatransfert.py +2 -27
- tomwer/synctools/imageloaderthread.py +1 -28
- tomwer/synctools/rsyncmanager.py +1 -25
- tomwer/synctools/saaxis.py +1 -26
- tomwer/synctools/sadeltabeta.py +1 -26
- tomwer/synctools/stacks/control/datalistener.py +1 -26
- tomwer/synctools/stacks/processingstack.py +4 -33
- tomwer/synctools/stacks/reconstruction/axis.py +6 -53
- tomwer/synctools/stacks/reconstruction/castvolume.py +12 -43
- tomwer/synctools/stacks/reconstruction/dkrefcopy.py +4 -27
- tomwer/synctools/stacks/reconstruction/nabu.py +3 -28
- tomwer/synctools/stacks/reconstruction/normalization.py +2 -27
- tomwer/synctools/stacks/reconstruction/saaxis.py +2 -27
- tomwer/synctools/stacks/reconstruction/sadeltabeta.py +2 -27
- tomwer/synctools/tests/__init__.py +0 -0
- tomwer/synctools/{test → tests}/test_darkRefs.py +16 -40
- tomwer/synctools/{test → tests}/test_foldertransfer.py +2 -33
- tomwer/synctools/utils/scanstages.py +2 -31
- tomwer/tests/__init__.py +1 -0
- tomwer/tests/app/test_stitching.py +95 -0
- tomwer/tests/datasets.py +1 -5
- tomwer/tests/orangecontrib/tomwer/widgets/cluster/tests/test_future_supervisorow.py +48 -0
- tomwer/tests/orangecontrib/tomwer/widgets/cluster/tests/test_slurm_clusterow.py +40 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_advancement.py +8 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_data_validator.py +55 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_datadiscovery.py +129 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_datalistener.py +111 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_dataselector.py +69 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_datawatcher.py +411 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_emailow.py +29 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_notifier.py +24 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_nxtomo_concatenate_ow.py +64 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_nxtomomill.py +133 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_reduce_dark_flat_selector.py +40 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_singletomoobj.py +40 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_timerow.py +25 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_tomoobj_series.py +96 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_volume_selector.py +69 -0
- orangecontrib/tomwer/widgets/edit/test/test_image_key_editor.py → tomwer/tests/orangecontrib/tomwer/widgets/debugtools/tests/test_dataset_generator.py +17 -16
- tomwer/tests/orangecontrib/tomwer/widgets/debugtools/tests/test_object_inspector.py +36 -0
- {orangecontrib/tomwer/widgets/edit/test → tomwer/tests/orangecontrib/tomwer/widgets/edit/tests}/test_dark_flat_patch.py +1 -27
- tomwer/tests/orangecontrib/tomwer/widgets/edit/tests/test_image_key_editor.py +30 -0
- tomwer/tests/orangecontrib/tomwer/widgets/edit/tests/test_nxtomo_editor.py +138 -0
- tomwer/tests/orangecontrib/tomwer/widgets/other/tests/test_pythonscript.py +31 -0
- tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_axis.py +199 -0
- tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_cast_volumeow.py +58 -0
- tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_dark_refs_widget.py +136 -0
- tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_delta_beta_selector.py +15 -0
- tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_i_norm.py +200 -0
- tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_nabu_helical_prepare_weights_double.py +20 -0
- tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_nabu_volume.py +74 -0
- tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_nabu_widget.py +107 -0
- tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_sa_delta_beta.py +194 -0
- tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_saaxis.py +194 -0
- tomwer/tests/orangecontrib/tomwer/widgets/stitching/tests/test_zstitching.py +313 -0
- tomwer/tests/orangecontrib/tomwer/widgets/tests/test_conditions.py +85 -0
- tomwer/tests/orangecontrib/tomwer/widgets/tests/test_darkref.py +225 -0
- tomwer/tests/orangecontrib/tomwer/widgets/tests/test_foldertransfert.py +105 -0
- tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_dataviewerow.py +57 -0
- tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_diffviewerow.py +39 -0
- tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_nxtomo_metadata_viewer.py +29 -0
- tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_radio_stackow.py +31 -0
- tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_sample_movedow.py +46 -0
- tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_sinogram_viewerow.py +31 -0
- tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_slice_stackow.py +31 -0
- tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_volume_viewerow.py +32 -0
- tomwer/tests/test_ewoks/test_conversion.py +104 -0
- tomwer/tests/test_ewoks/test_single_node_execution.py +87 -0
- tomwer/tests/test_ewoks/test_workflows.py +138 -0
- tomwer/utils.py +11 -39
- tomwer/version.py +2 -2
- {tomwer-1.3.26.dist-info → tomwer-1.4.0.dist-info}/LICENSE +3 -3
- tomwer-1.4.0.dist-info/METADATA +337 -0
- tomwer-1.4.0.dist-info/RECORD +912 -0
- {tomwer-1.3.26.dist-info → tomwer-1.4.0.dist-info}/WHEEL +1 -1
- {tomwer-1.3.26.dist-info → tomwer-1.4.0.dist-info}/entry_points.txt +1 -0
- orangecontrib/tomwer/widgets/control/DataListOW.py +0 -129
- orangecontrib/tomwer/widgets/control/TomoObjSerieOW.py +0 -86
- orangecontrib/tomwer/widgets/control/VolumeSymLinkOW.py +0 -182
- orangecontrib/tomwer/widgets/edit/test/test_nxtomo_editor.py +0 -141
- orangecontrib/tomwer/widgets/icat/PublishProcessedDataOW.py +0 -115
- orangecontrib/tomwer/widgets/icat/RawDataScreenshotCreatorOW.py +0 -98
- orangecontrib/tomwer/widgets/icat/SaveToGalleryAndPublishOW.py +0 -129
- orangecontrib/tomwer/widgets/icat/icons/add_gallery.png +0 -0
- orangecontrib/tomwer/widgets/icat/icons/add_gallery.svg +0 -82
- orangecontrib/tomwer/widgets/icat/icons/raw_screenshots.png +0 -0
- orangecontrib/tomwer/widgets/icat/icons/raw_screenshots.svg +0 -143
- orangecontrib/tomwer/widgets/visualization/LivesliceOW.py +0 -87
- orangecontrib/tomwer/widgets/visualization/icons/liveslice.png +0 -0
- orangecontrib/tomwer/widgets/visualization/icons/liveslice.svg +0 -110
- tomwer/core/log/logger.py +0 -130
- tomwer/core/process/control/test/test_volume_link.py +0 -74
- tomwer/core/process/control/tomoobjserie.py +0 -12
- tomwer/core/process/control/volumesymlink.py +0 -200
- tomwer/core/process/icat/createscreenshots.py +0 -100
- tomwer/core/process/icat/gallery.py +0 -377
- tomwer/core/process/icat/icatbase.py +0 -36
- tomwer/core/process/icat/publish.py +0 -228
- tomwer/core/process/icat/screenshots.py +0 -27
- tomwer/core/process/reconstruction/test/test_darkref.py +0 -60
- tomwer/core/process/reconstruction/test/test_sadeltabeta.py +0 -74
- tomwer/core/process/test/test_axis.py +0 -309
- tomwer/core/process/visualization/liveslice.py +0 -6
- tomwer/core/progress.py +0 -100
- tomwer/core/scan/test/test_edf.py +0 -53
- tomwer/core/scan/test/test_future_scan.py +0 -61
- tomwer/core/scan/test/test_h5.py +0 -96
- tomwer/core/scan/test/test_process_registration.py +0 -109
- tomwer/core/test/test_scanutils.py +0 -53
- tomwer/gui/control/emailnotifier.py +0 -174
- tomwer/gui/control/serie/seriewaiter.py +0 -28
- tomwer/gui/control/test/__init__.py +0 -28
- tomwer/gui/control/test/test_datalist.py +0 -96
- tomwer/gui/control/test/test_datavalidator.py +0 -54
- tomwer/gui/control/test/test_email.py +0 -35
- tomwer/gui/control/test/test_process_manager.py +0 -65
- tomwer/gui/control/test/test_scanselector.py +0 -67
- tomwer/gui/edit/test/__init__.py +0 -28
- tomwer/gui/icat/gallery.py +0 -214
- tomwer/gui/icat/publish.py +0 -187
- tomwer/gui/reconstruction/axis/axis.py +0 -733
- tomwer/gui/reconstruction/axis/radioaxis.py +0 -2467
- tomwer/gui/stitching/stitching.py +0 -1392
- tomwer/gui/test/__init__.py +0 -28
- tomwer/gui/test/test_axis_gui.py +0 -34
- tomwer/synctools/stacks/edit/darkflatpatch.py +0 -169
- tomwer/synctools/stacks/edit/imagekeyeditor.py +0 -135
- tomwer/third_part/WaitingOverlay.py +0 -110
- tomwer-1.3.26-py3.11-nspkg.pth +0 -1
- tomwer-1.3.26.dist-info/METADATA +0 -292
- tomwer-1.3.26.dist-info/RECORD +0 -785
- tomwer-1.3.26.dist-info/namespace_packages.txt +0 -1
- /orangecontrib/tomwer/{widgets/edit/test → tests}/__init__.py +0 -0
- {tomwer/core/process/control/test → orangecontrib/tomwer/tutorials/id16b}/__init__.py +0 -0
- {tomwer/core/process/icat → orangecontrib/tomwer/widgets/cluster/tests}/__init__.py +0 -0
- /orangecontrib/tomwer/widgets/control/icons/{tomoobjserie.png → tomoobjseries.png} +0 -0
- {tomwer/core/process/reconstruction/test → orangecontrib/tomwer/widgets/control/tests}/__init__.py +0 -0
- /orangecontrib/tomwer/widgets/{icat → dataportal}/icons/publish_processed_data.png +0 -0
- /orangecontrib/tomwer/widgets/{icat → dataportal}/icons/publish_processed_data.svg +0 -0
- {tomwer/core/process/test → orangecontrib/tomwer/widgets/debugtools/tests}/__init__.py +0 -0
- {tomwer/core/scan/test → orangecontrib/tomwer/widgets/edit/tests}/__init__.py +0 -0
- {tomwer/core/test → orangecontrib/tomwer/widgets/other/tests}/__init__.py +0 -0
- {tomwer/gui/cluster/test → orangecontrib/tomwer/widgets/reconstruction/tests}/__init__.py +0 -0
- {tomwer/gui/control/serie → orangecontrib/tomwer/widgets/stitching/tests}/__init__.py +0 -0
- {tomwer/gui/icat → orangecontrib/tomwer/widgets/tests}/__init__.py +0 -0
- {tomwer/gui/reconstruction/test → orangecontrib/tomwer/widgets/visualization/tests}/__init__.py +0 -0
- /tomwer/{synctools/stacks/edit → app/stitching}/__init__.py +0 -0
- /tomwer/{synctools/test → core/process/control/tests}/__init__.py +0 -0
- /tomwer/core/process/control/{test → tests}/test_email.py +0 -0
- /tomwer/core/process/control/{test → tests}/test_h52nx_process.py +0 -0
- /tomwer/{third_part → core/process/drac}/__init__.py +0 -0
- /tomwer/core/process/reconstruction/{test → tests}/test_axis_params.py +0 -0
- /tomwer/core/process/reconstruction/{test → tests}/test_darkref_copy.py +0 -0
- /tomwer/core/process/reconstruction/{test → tests}/test_paramsbase.py +0 -0
- /tomwer/core/scan/{test → tests}/test_scan.py +0 -0
- /tomwer/gui/control/{serie → series}/nxtomoconcatenate.py +0 -0
- /tomwer/gui/control/{test → tests}/test_datadiscovery.py +0 -0
- /tomwer/gui/control/{test → tests}/test_reducedarkflat_selector.py +0 -0
- /tomwer/gui/control/{test → tests}/test_single_tomo_obj.py +0 -0
- {orangecontrib/tomwer/widgets/edit/test → tomwer/tests/orangecontrib/tomwer/widgets/edit/tests}/test_image_key_upgrader.py +0 -0
- {tomwer-1.3.26.dist-info → tomwer-1.4.0.dist-info}/top_level.txt +0 -0
@@ -1,129 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
# /*##########################################################################
|
3
|
-
#
|
4
|
-
# Copyright (c) 2016-2021 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__ = "01/12/2016"
|
29
|
-
|
30
|
-
import logging
|
31
|
-
|
32
|
-
from orangewidget import gui
|
33
|
-
from orangewidget.settings import Setting
|
34
|
-
from orangewidget.widget import Input, Output, OWBaseWidget
|
35
|
-
from silx.gui import qt
|
36
|
-
|
37
|
-
import tomwer.core.process.control.scanlist
|
38
|
-
from tomwer.core.scan.nxtomoscan import NXtomoScan
|
39
|
-
from tomwer.core.scan.scanbase import TomwerScanBase
|
40
|
-
from tomwer.gui.control.datalist import GenericScanListWindow
|
41
|
-
|
42
|
-
logger = logging.getLogger(__name__)
|
43
|
-
|
44
|
-
|
45
|
-
class DataListOW(OWBaseWidget, openclass=True):
|
46
|
-
name = "scan list"
|
47
|
-
id = "orange.widgets.tomwer.scanlist"
|
48
|
-
description = "List path to reconstructions/scans. Those path will be send to the next box once validated."
|
49
|
-
icon = "icons/scanlist.svg"
|
50
|
-
priority = 50
|
51
|
-
keywords = ["tomography", "file", "tomwer", "folder"]
|
52
|
-
|
53
|
-
want_main_area = True
|
54
|
-
want_control_area = False
|
55
|
-
resizing_enabled = True
|
56
|
-
|
57
|
-
_scanIDs = Setting(list())
|
58
|
-
|
59
|
-
ewokstaskclass = tomwer.core.process.control.scanlist._ScanListPlaceHolder
|
60
|
-
|
61
|
-
class Outputs:
|
62
|
-
data = Output(name="data", type=TomwerScanBase, doc="one scan to be process")
|
63
|
-
|
64
|
-
class Inputs:
|
65
|
-
data = Input(name="data", type=TomwerScanBase, multiple=True)
|
66
|
-
|
67
|
-
def __init__(self, parent=None):
|
68
|
-
"""A simple annuary which register all folder containing completed scan
|
69
|
-
|
70
|
-
.. warning: the widget won't check for scan validity and will only
|
71
|
-
emit the path to folders to the next widgets
|
72
|
-
|
73
|
-
:param parent: the parent widget
|
74
|
-
"""
|
75
|
-
super().__init__(parent)
|
76
|
-
|
77
|
-
self.widget = GenericScanListWindow(parent=self)
|
78
|
-
self.widget.setWindowFlags(qt.Qt.Widget)
|
79
|
-
self.widget.sigUpdated.connect(self._updateSettings)
|
80
|
-
self._loadSettings()
|
81
|
-
layout = gui.vBox(self.mainArea, self.name).layout()
|
82
|
-
layout.addWidget(self.widget)
|
83
|
-
self.widget._widget._sendButton.clicked.connect(self._sendList)
|
84
|
-
|
85
|
-
# expose API
|
86
|
-
self.n_scan = self.widget.n_scan
|
87
|
-
|
88
|
-
# alias used for the 'simple workflow' for now
|
89
|
-
self.start = self._sendList
|
90
|
-
self.clear = self.widget._widget.clear
|
91
|
-
|
92
|
-
def _sendList(self):
|
93
|
-
"""Send a signal for each list to the next widget"""
|
94
|
-
for data_id, item in self.widget.datalist._myitems.items():
|
95
|
-
logger.debug(f"sending {data_id}")
|
96
|
-
data_obj = item.data(qt.Qt.UserRole)
|
97
|
-
self.Outputs.data.send(data_obj)
|
98
|
-
|
99
|
-
@Inputs.data
|
100
|
-
def add(self, scan, *args, **kwargs):
|
101
|
-
if scan is None:
|
102
|
-
return
|
103
|
-
|
104
|
-
self.widget.add(scan)
|
105
|
-
|
106
|
-
def _loadSettings(self):
|
107
|
-
for scan in self._scanIDs:
|
108
|
-
assert isinstance(scan, str)
|
109
|
-
# kept for backward compatibility since 0.11. To be removed on the future version.
|
110
|
-
if "@" in scan:
|
111
|
-
entry, file_path = scan.split("@")
|
112
|
-
nxtomo_scan = NXtomoScan(entry=entry, scan=file_path)
|
113
|
-
self.add(nxtomo_scan)
|
114
|
-
else:
|
115
|
-
self.add(scan)
|
116
|
-
|
117
|
-
def _updateSettings(self):
|
118
|
-
self._scanIDs = []
|
119
|
-
for scan in self.widget.datalist._myitems:
|
120
|
-
self._scanIDs.append(scan)
|
121
|
-
|
122
|
-
def keyPressEvent(self, event):
|
123
|
-
"""
|
124
|
-
To shortcut orange and make sure the `delete` key will be interpreted we need to overwrite this function
|
125
|
-
"""
|
126
|
-
if event.key() == qt.Qt.Key_Delete:
|
127
|
-
self.widget._removeSelected()
|
128
|
-
else:
|
129
|
-
super().keyPressEvent(event)
|
@@ -1,86 +0,0 @@
|
|
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__ = "12/07/2022"
|
31
|
-
|
32
|
-
import logging
|
33
|
-
|
34
|
-
from orangewidget import gui
|
35
|
-
from orangewidget.widget import Input, Output, OWBaseWidget
|
36
|
-
from tomoscan.serie import Serie
|
37
|
-
|
38
|
-
import tomwer.core.process.control.tomoobjserie
|
39
|
-
from tomwer.core.tomwer_object import TomwerObject
|
40
|
-
from tomwer.gui.control.serie.seriecreator import SerieWidgetDialog
|
41
|
-
|
42
|
-
logger = logging.getLogger(__name__)
|
43
|
-
|
44
|
-
|
45
|
-
class TomoObjSerieOW(OWBaseWidget, openclass=True):
|
46
|
-
name = "serie of objects"
|
47
|
-
id = "orange.widgets.tomwer.tomoobjserieow"
|
48
|
-
description = "Allow user define a serie of object that will be defined as a Serie (grouped together and can be used within a purpose like stiching)"
|
49
|
-
icon = "icons/tomoobjserie.svg"
|
50
|
-
priority = 55
|
51
|
-
keywords = ["tomography", "selection", "tomwer", "serie", "group"]
|
52
|
-
|
53
|
-
ewokstaskclass = tomwer.core.process.control.tomoobjserie._TomoobjseriePlaceHolder
|
54
|
-
|
55
|
-
want_main_area = True
|
56
|
-
want_control_area = False
|
57
|
-
resizing_enabled = True
|
58
|
-
|
59
|
-
class Inputs:
|
60
|
-
tomo_obj = Input(name="tomo obj", type=TomwerObject, multiple=True)
|
61
|
-
|
62
|
-
class Outputs:
|
63
|
-
serie = Output(name="serie", type=Serie)
|
64
|
-
|
65
|
-
def __init__(self, parent=None):
|
66
|
-
""" """
|
67
|
-
super().__init__(parent)
|
68
|
-
layout = gui.vBox(self.mainArea, self.name).layout()
|
69
|
-
|
70
|
-
self._widget = SerieWidgetDialog(self)
|
71
|
-
layout.addWidget(self._widget)
|
72
|
-
|
73
|
-
# connect signal / slot
|
74
|
-
self._widget.sigSerieSelected.connect(self._send_serie)
|
75
|
-
|
76
|
-
@Inputs.tomo_obj
|
77
|
-
def addTomoObj(self, tomo_obj, *args, **kwargs):
|
78
|
-
if tomo_obj is not None:
|
79
|
-
self._widget.add(tomo_obj)
|
80
|
-
|
81
|
-
def _send_serie(self, serie: Serie):
|
82
|
-
if not isinstance(serie, Serie):
|
83
|
-
raise TypeError(
|
84
|
-
f"serie is expected to be an instance of {Serie}. Not {type(serie)}"
|
85
|
-
)
|
86
|
-
self.Outputs.serie.send(serie)
|
@@ -1,182 +0,0 @@
|
|
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__ = "16/11/2020"
|
29
|
-
|
30
|
-
|
31
|
-
# import logging
|
32
|
-
|
33
|
-
# from orangewidget import gui
|
34
|
-
# from orangewidget.settings import Setting
|
35
|
-
# from orangewidget.widget import Input, Output
|
36
|
-
# from processview.core.manager import DatasetState, ProcessManager
|
37
|
-
# from silx.gui import qt
|
38
|
-
|
39
|
-
# import tomwer.core.process.control.volumesymlink
|
40
|
-
# from orangecontrib.tomwer.orange.managedprocess import SuperviseOW
|
41
|
-
# from tomwer.core.process.control.volumesymlink import (
|
42
|
-
# OutputType,
|
43
|
-
# VolumeSymbolicLinkTask,
|
44
|
-
# )
|
45
|
-
# from tomwer.core.scan.scanbase import TomwerScanBase
|
46
|
-
|
47
|
-
# _logger = logging.getLogger(__name__)
|
48
|
-
|
49
|
-
|
50
|
-
# class VolumeSymLinkOW(SuperviseOW):
|
51
|
-
# """
|
52
|
-
# link volume reconstructed at proposal file if possible else under
|
53
|
-
# the given folder
|
54
|
-
# """
|
55
|
-
|
56
|
-
# name = "volume symbolic link"
|
57
|
-
# id = "orange.widgets.tomwer.control.VolumeSymLinkOW.VolumeSymLinkOW"
|
58
|
-
# description = (
|
59
|
-
# "create a symbolic link for the latest volume reconstructed on a "
|
60
|
-
# "given folder"
|
61
|
-
# )
|
62
|
-
# icon = "icons/volumesymlink.svg"
|
63
|
-
# priority = 200
|
64
|
-
# keywords = [
|
65
|
-
# "hdf5",
|
66
|
-
# "tomwer",
|
67
|
-
# "folder",
|
68
|
-
# "volume",
|
69
|
-
# "symlink",
|
70
|
-
# "tomography",
|
71
|
-
# "symbolic link",
|
72
|
-
# ]
|
73
|
-
|
74
|
-
# want_main_area = True
|
75
|
-
# resizing_enabled = True
|
76
|
-
|
77
|
-
# ewokstaskclass = tomwer.core.process.control.volumesymlink.VolumeSymbolicLinkTask
|
78
|
-
|
79
|
-
# _scans = Setting(list())
|
80
|
-
|
81
|
-
# class Inputs:
|
82
|
-
# data = Input(name="data", type=TomwerScanBase, doc="scan to be process")
|
83
|
-
|
84
|
-
# class Outputs:
|
85
|
-
# data = Output(name="data", type=TomwerScanBase, doc="one scan to be process")
|
86
|
-
|
87
|
-
# def __init__(self, parent=None):
|
88
|
-
# super().__init__(parent)
|
89
|
-
# self._mainWidget = _OutputDir(parent=self)
|
90
|
-
# layout = gui.vBox(self.mainArea, self.name).layout()
|
91
|
-
# layout.addWidget(self._mainWidget)
|
92
|
-
|
93
|
-
# @Inputs.data
|
94
|
-
# def process(self, scan):
|
95
|
-
# if scan is None:
|
96
|
-
# return
|
97
|
-
# symlink_process = VolumeSymbolicLinkTask(
|
98
|
-
# inputs={
|
99
|
-
# "data": scan,
|
100
|
-
# "output_type": self._mainWidget.getOutputType(),
|
101
|
-
# "output_folder": self._mainWidget.getOutputFolder(),
|
102
|
-
# "serialize_output_data": False,
|
103
|
-
# }
|
104
|
-
# )
|
105
|
-
# ProcessManager().notify_dataset_state(
|
106
|
-
# dataset=self.scan,
|
107
|
-
# process=self,
|
108
|
-
# state=DatasetState.ON_GOING,
|
109
|
-
# )
|
110
|
-
# try:
|
111
|
-
# symlink_process.run()
|
112
|
-
# except Exception:
|
113
|
-
# mess = f"Failed to create symbolic link for {scan}"
|
114
|
-
# _logger.processFailed(mess)
|
115
|
-
# ProcessManager().notify_dataset_state(
|
116
|
-
# dataset=self.scan, process=self, state=DatasetState.FAILED, details=mess
|
117
|
-
# )
|
118
|
-
# else:
|
119
|
-
# mess = f"Create symbolic link for {scan}"
|
120
|
-
# _logger.processSucceed(mess)
|
121
|
-
# ProcessManager().notify_dataset_state(
|
122
|
-
# dataset=self.scan,
|
123
|
-
# process=self,
|
124
|
-
# state=DatasetState.SUCCEED,
|
125
|
-
# details=mess,
|
126
|
-
# )
|
127
|
-
# self.Outputs.data.send(scan)
|
128
|
-
|
129
|
-
# def reprocess(self, dataset):
|
130
|
-
# self.process(dataset)
|
131
|
-
|
132
|
-
|
133
|
-
# class _OutputDir(qt.QGroupBox):
|
134
|
-
# def __init__(self, parent):
|
135
|
-
# qt.QGroupBox.__init__(self, parent)
|
136
|
-
# self._button_grp = qt.QButtonGroup(self)
|
137
|
-
# self._button_grp.setExclusive(True)
|
138
|
-
# self.setLayout(qt.QGridLayout())
|
139
|
-
# self._oneLevelCB = qt.QRadioButton(OutputType.ONE_LEVEL_UPPER.value, self)
|
140
|
-
# self._button_grp.addButton(self._oneLevelCB)
|
141
|
-
# self.layout().addWidget(self._oneLevelCB, 1, 0, 1, 3)
|
142
|
-
# self._staticOpt = qt.QRadioButton("", self)
|
143
|
-
# self._button_grp.addButton(self._staticOpt)
|
144
|
-
# self.layout().addWidget(self._staticOpt, 2, 0, 1, 1)
|
145
|
-
# self._qleFolder = qt.QLineEdit("", self)
|
146
|
-
# self.layout().addWidget(self._qleFolder, 2, 1, 1, 1)
|
147
|
-
# self._selectPB = qt.QPushButton("select", self)
|
148
|
-
# self.layout().addWidget(self._selectPB, 2, 2, 1, 1)
|
149
|
-
|
150
|
-
# # connect signal / slot
|
151
|
-
# self._selectPB.released.connect(self._selectFolder)
|
152
|
-
# self._qleFolder.editingFinished.connect(self._activeStaticOpt)
|
153
|
-
|
154
|
-
# # set up
|
155
|
-
# self._oneLevelCB.setChecked(True)
|
156
|
-
|
157
|
-
# def _activeStaticOpt(self, *args, **kwargs):
|
158
|
-
# self._staticOpt.setChecked(True)
|
159
|
-
|
160
|
-
# def _selectFolder(self): # pragma: no cover
|
161
|
-
# dialog = qt.QFileDialog(self)
|
162
|
-
# dialog.setWindowTitle("Select destination folder for symbolic link")
|
163
|
-
# dialog.setModal(1)
|
164
|
-
# dialog.setFileMode(qt.QFileDialog.DirectoryOnly)
|
165
|
-
|
166
|
-
# if not dialog.exec_():
|
167
|
-
# dialog.close()
|
168
|
-
# return None
|
169
|
-
|
170
|
-
# dest_folder = dialog.selectedFiles()[0]
|
171
|
-
# self._qleFolder.setText(dest_folder)
|
172
|
-
|
173
|
-
# def getOutputType(self) -> OutputType:
|
174
|
-
# if self._oneLevelCB.isChecked():
|
175
|
-
# return OutputType.ONE_LEVEL_UPPER
|
176
|
-
# elif self._staticOpt.isChecked():
|
177
|
-
# return OutputType.STATIC
|
178
|
-
# else:
|
179
|
-
# raise TypeError("Not managed")
|
180
|
-
|
181
|
-
# def getOutputFolder(self):
|
182
|
-
# return self._qleFolder.text()
|
@@ -1,141 +0,0 @@
|
|
1
|
-
import gc
|
2
|
-
import os
|
3
|
-
import pickle
|
4
|
-
import tempfile
|
5
|
-
|
6
|
-
import numpy
|
7
|
-
import pytest
|
8
|
-
from nxtomomill.nexus.nxtomo import NXtomo
|
9
|
-
from orangecanvas.scheme.readwrite import literal_dumps
|
10
|
-
from silx.gui import qt
|
11
|
-
from silx.gui.utils.testutils import SignalListener, TestCaseQt
|
12
|
-
from nxtomo.nxobject.nxdetector import ImageKey
|
13
|
-
|
14
|
-
from orangecontrib.tomwer.widgets.edit.NXtomoEditorOW import NXtomoEditorOW
|
15
|
-
from tomwer.core.scan.nxtomoscan import NXtomoScan
|
16
|
-
from tomwer.tests.utils import skip_gui_test
|
17
|
-
|
18
|
-
|
19
|
-
@pytest.mark.skipif(skip_gui_test(), reason="skip gui test")
|
20
|
-
class TestNXtomoEditorOW(TestCaseQt):
|
21
|
-
"""Test that the NXtomoEditorOW widget work correctly. Processing test are done in the core module. gui test are done in the tomwer.gui.edit module"""
|
22
|
-
|
23
|
-
def setUp(self):
|
24
|
-
super().setUp()
|
25
|
-
self._window = NXtomoEditorOW()
|
26
|
-
|
27
|
-
def tearDown(self):
|
28
|
-
self._window.setAttribute(qt.Qt.WA_DeleteOnClose)
|
29
|
-
self._window.close()
|
30
|
-
self._window = None
|
31
|
-
gc.collect()
|
32
|
-
|
33
|
-
def test(self):
|
34
|
-
self._window.show()
|
35
|
-
self.qWaitForWindowExposed(self._window)
|
36
|
-
|
37
|
-
def getDefaultConfig(self) -> dict:
|
38
|
-
return {
|
39
|
-
"instrument.beam.energy": (5.9, False),
|
40
|
-
"instrument.detector.distance": (2.4, True),
|
41
|
-
"instrument.detector.field_of_view": ("Full", False),
|
42
|
-
"instrument.detector.x_pixel_size": (0.023, True),
|
43
|
-
"instrument.detector.y_pixel_size": (0.025, True),
|
44
|
-
"instrument.detector.x_flipped": (True, True),
|
45
|
-
"instrument.detector.y_flipped": (False, False),
|
46
|
-
}
|
47
|
-
|
48
|
-
def testSerialization(self):
|
49
|
-
self._window.setConfiguration(self.getDefaultConfig())
|
50
|
-
assert self._window.getConfiguration() == self.getDefaultConfig()
|
51
|
-
pickle.dumps(self._window.getConfiguration())
|
52
|
-
|
53
|
-
def testLiteralDumps(self):
|
54
|
-
self._window.setConfiguration(self.getDefaultConfig())
|
55
|
-
assert self._window.getConfiguration() == self.getDefaultConfig()
|
56
|
-
literal_dumps(self._window.getConfiguration())
|
57
|
-
|
58
|
-
def testAutomation(self):
|
59
|
-
"""
|
60
|
-
test that if some field are locked then this will overwrite the Nxtomo and send the signal
|
61
|
-
"""
|
62
|
-
signal_listener = SignalListener()
|
63
|
-
self._window.sigScanReady.connect(signal_listener)
|
64
|
-
# set up the widget to define and lock distance, energy and x pixel size
|
65
|
-
distance_widget = self._window.widget.mainWidget._distanceMetricEntry
|
66
|
-
distance_widget.setValue(0.6)
|
67
|
-
distance_widget.setUnit("mm")
|
68
|
-
distance_locker = self._window.widget.mainWidget._distanceLB
|
69
|
-
distance_locker.setLock(True)
|
70
|
-
energy_widget = self._window.widget.mainWidget._energyEntry
|
71
|
-
energy_widget.setValue(88.058)
|
72
|
-
energy_locker = self._window.widget.mainWidget._energyLockerLB
|
73
|
-
energy_locker.setLock(True)
|
74
|
-
x_pixel_widget = self._window.widget.mainWidget._xPixelSizeMetricEntry
|
75
|
-
x_pixel_widget.setValue(45)
|
76
|
-
x_pixel_widget.setUnit("nm")
|
77
|
-
x_pixel_locker = self._window.widget.mainWidget._xPixelSizeLB
|
78
|
-
x_pixel_locker.setLock(True)
|
79
|
-
|
80
|
-
with tempfile.TemporaryDirectory() as tmp_dir:
|
81
|
-
# 1.0 create nx tomos with raw data
|
82
|
-
nx_tomo = NXtomo()
|
83
|
-
nx_tomo.instrument.detector.x_pixel_size = 0.023
|
84
|
-
nx_tomo.instrument.detector.y_pixel_size = 0.025
|
85
|
-
nx_tomo.instrument.detector.field_of_view = "full"
|
86
|
-
nx_tomo.instrument.detector.distance = 2.4
|
87
|
-
nx_tomo.instrument.detector.x_flipped = False
|
88
|
-
nx_tomo.instrument.detector.y_flipped = True
|
89
|
-
nx_tomo.energy = 5.9
|
90
|
-
nx_tomo.instrument.detector.image_key_control = [
|
91
|
-
ImageKey.PROJECTION.value
|
92
|
-
] * 12
|
93
|
-
nx_tomo.instrument.detector.data = numpy.empty(shape=(12, 10, 10))
|
94
|
-
nx_tomo.sample.rotation_angle = numpy.linspace(0, 20, num=12)
|
95
|
-
|
96
|
-
file_path = os.path.join(tmp_dir, "nxtomo.nx")
|
97
|
-
entry = "entry0000"
|
98
|
-
nx_tomo.save(
|
99
|
-
file_path=file_path,
|
100
|
-
data_path=entry,
|
101
|
-
)
|
102
|
-
# 2.0 set scan to the nxtomo-editor
|
103
|
-
scan = NXtomoScan(file_path, entry)
|
104
|
-
self._window._setScan(scan=scan)
|
105
|
-
self.qapp.processEvents()
|
106
|
-
# 3.0 check results are as expected
|
107
|
-
# make sure the scan has been re-emitted
|
108
|
-
assert signal_listener.callCount() == 1
|
109
|
-
# make sure the edition of the parameters have been done and only those
|
110
|
-
overwrite_nx_tomo = NXtomo().load(
|
111
|
-
file_path=file_path,
|
112
|
-
data_path=entry,
|
113
|
-
detector_data_as="as_numpy_array",
|
114
|
-
)
|
115
|
-
numpy.testing.assert_almost_equal(
|
116
|
-
overwrite_nx_tomo.instrument.detector.x_pixel_size.value, 45e-9
|
117
|
-
)
|
118
|
-
assert (
|
119
|
-
overwrite_nx_tomo.instrument.detector.y_pixel_size.value
|
120
|
-
== nx_tomo.instrument.detector.y_pixel_size.value
|
121
|
-
)
|
122
|
-
assert (
|
123
|
-
overwrite_nx_tomo.instrument.detector.field_of_view
|
124
|
-
== nx_tomo.instrument.detector.field_of_view
|
125
|
-
)
|
126
|
-
numpy.testing.assert_almost_equal(
|
127
|
-
overwrite_nx_tomo.instrument.detector.distance.value, 6.0e-4
|
128
|
-
)
|
129
|
-
assert (
|
130
|
-
overwrite_nx_tomo.instrument.detector.x_flipped
|
131
|
-
== nx_tomo.instrument.detector.x_flipped
|
132
|
-
)
|
133
|
-
assert (
|
134
|
-
overwrite_nx_tomo.instrument.detector.y_flipped
|
135
|
-
== nx_tomo.instrument.detector.y_flipped
|
136
|
-
)
|
137
|
-
numpy.testing.assert_almost_equal(overwrite_nx_tomo.energy.value, 88.058)
|
138
|
-
numpy.testing.assert_array_almost_equal(
|
139
|
-
overwrite_nx_tomo.instrument.detector.data,
|
140
|
-
nx_tomo.instrument.detector.data,
|
141
|
-
)
|
@@ -1,115 +0,0 @@
|
|
1
|
-
import weakref
|
2
|
-
from typing import Optional
|
3
|
-
from silx.gui import qt
|
4
|
-
from ewoksorange.bindings.owwidgets import OWEwoksWidgetOneThreadPerRun
|
5
|
-
from orangewidget import gui
|
6
|
-
from orangewidget.settings import Setting
|
7
|
-
|
8
|
-
import tomwer.core.process.icat.publish
|
9
|
-
from tomwer.core.scan.scanbase import TomwerScanBase
|
10
|
-
from tomwer.gui.icat.publish import PublishProcessedDataWidget
|
11
|
-
|
12
|
-
from processview.core.superviseprocess import SuperviseProcess
|
13
|
-
|
14
|
-
|
15
|
-
class PublishProcessedDataOW(
|
16
|
-
OWEwoksWidgetOneThreadPerRun,
|
17
|
-
SuperviseProcess,
|
18
|
-
ewokstaskclass=tomwer.core.process.icat.publish.PublishReconstructedVolumeFromScanTask,
|
19
|
-
):
|
20
|
-
"""
|
21
|
-
This widget can receive 'data' (scan) and but some screenshot to be pushed on GALLERY.
|
22
|
-
"""
|
23
|
-
|
24
|
-
name = "Publish processed data to icat"
|
25
|
-
id = "orangecontrib.widgets.tomwer.icat.PublishProcessedDataOW.PublishProcessedDataOW"
|
26
|
-
description = "Publish processed data to icat. \n For now we expect processed data to be reconstructed volume"
|
27
|
-
icon = "icons/publish.svg"
|
28
|
-
priority = 64
|
29
|
-
keywords = [
|
30
|
-
"tomography",
|
31
|
-
"tomwer",
|
32
|
-
"tomo_obj",
|
33
|
-
"processed data",
|
34
|
-
"PROCESSED_DATA",
|
35
|
-
"publish",
|
36
|
-
"icat",
|
37
|
-
"icatplus",
|
38
|
-
"pyicatplus",
|
39
|
-
"pyicat-plus",
|
40
|
-
]
|
41
|
-
|
42
|
-
want_main_area = True
|
43
|
-
want_control_area = False
|
44
|
-
resizing_enabled = True
|
45
|
-
|
46
|
-
_ewoks_default_inputs = Setting({})
|
47
|
-
|
48
|
-
_ewoks_inputs_to_hide_from_orange = (
|
49
|
-
"__process__",
|
50
|
-
"beamline",
|
51
|
-
"proposal",
|
52
|
-
"dataset",
|
53
|
-
"dry_run",
|
54
|
-
"path",
|
55
|
-
)
|
56
|
-
|
57
|
-
def __init__(self, parent=None):
|
58
|
-
super().__init__(parent)
|
59
|
-
SuperviseProcess.__init__(self)
|
60
|
-
self._widget = PublishProcessedDataWidget(parent=self)
|
61
|
-
layout = gui.vBox(self.mainArea, self.name).layout()
|
62
|
-
layout.addWidget(self._widget)
|
63
|
-
self._scan = None
|
64
|
-
|
65
|
-
# load settings
|
66
|
-
self._widget.setConfiguration(self._ewoks_default_inputs)
|
67
|
-
|
68
|
-
# connect signal / slot
|
69
|
-
self._widget.sigConfigChanged.connect(self._updateSettings)
|
70
|
-
|
71
|
-
def _updateSettings(self):
|
72
|
-
self._ewoks_default_inputs = self._widget.getConfiguration()
|
73
|
-
|
74
|
-
def setScan(self, scan: TomwerScanBase):
|
75
|
-
self._scan = weakref.ref(scan)
|
76
|
-
self._widget.setScan(scan=scan)
|
77
|
-
|
78
|
-
def getScan(self) -> Optional[TomwerScanBase]:
|
79
|
-
if self._scan is None:
|
80
|
-
return None
|
81
|
-
else:
|
82
|
-
return self._scan()
|
83
|
-
|
84
|
-
def handleNewSignals(self) -> None:
|
85
|
-
"""Invoked by the workflow signal propagation manager after all
|
86
|
-
signals handlers have been called.
|
87
|
-
"""
|
88
|
-
# update the widget when receive the scan (proposal, dataset...)
|
89
|
-
scan = self.get_task_input_value("data", None)
|
90
|
-
if scan is None:
|
91
|
-
return
|
92
|
-
elif scan != self.getScan():
|
93
|
-
self._widget.setScan(scan)
|
94
|
-
super().handleNewSignals()
|
95
|
-
else:
|
96
|
-
super().handleNewSignals()
|
97
|
-
|
98
|
-
def get_task_inputs(self):
|
99
|
-
task_inputs = super().get_task_inputs()
|
100
|
-
configuration = self._widget.getConfiguration()
|
101
|
-
|
102
|
-
task_inputs["beamline"] = configuration["beamline"]
|
103
|
-
task_inputs["proposal"] = configuration["proposal"]
|
104
|
-
task_inputs["dataset"] = configuration["dataset"]
|
105
|
-
task_inputs["__process__"] = weakref.ref(self)
|
106
|
-
|
107
|
-
print("get task inputs")
|
108
|
-
from pprint import pprint
|
109
|
-
|
110
|
-
pprint(task_inputs)
|
111
|
-
|
112
|
-
return task_inputs
|
113
|
-
|
114
|
-
def sizeHint(self):
|
115
|
-
return qt.QSize(500, 200)
|