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
@@ -0,0 +1,94 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
from silx.gui import qt
|
3
|
+
|
4
|
+
from tomwer.gui.reconstruction.nabu.nabuconfig.base import _NabuStageConfigBase
|
5
|
+
from tomwer.gui.utils.gpu import SelectGPUGroupBox
|
6
|
+
|
7
|
+
|
8
|
+
class NabuPlatformSettings(qt.QWidget, _NabuStageConfigBase):
|
9
|
+
"""define settings to be used for the local reconstruction like gpu..."""
|
10
|
+
|
11
|
+
sigConfigChanged = qt.Signal()
|
12
|
+
|
13
|
+
DEFAULT_GPU_FRACTION = 90
|
14
|
+
DEFAULT_CPU_FRACTION = 90
|
15
|
+
|
16
|
+
def __init__(self, parent: qt.QWidget | None = None) -> None:
|
17
|
+
qt.QWidget.__init__(self, parent, stage=None)
|
18
|
+
_NabuStageConfigBase.__init__(self, stage=None)
|
19
|
+
|
20
|
+
self.setLayout(qt.QFormLayout())
|
21
|
+
self._gpuSelWidget = SelectGPUGroupBox()
|
22
|
+
self._gpuSelWidget.setChecked(False)
|
23
|
+
# keep default behavior: don't set any default gpu
|
24
|
+
self.layout().addRow(self._gpuSelWidget)
|
25
|
+
|
26
|
+
# gpu percentage
|
27
|
+
self._GPUFractionLabel = qt.QLabel("GPU percentage usage", self)
|
28
|
+
self.registerWidget(self._GPUFractionLabel, "advanced")
|
29
|
+
self._GPUFractionSB = qt.QSpinBox(self)
|
30
|
+
self._GPUFractionSB.setSingleStep(10)
|
31
|
+
self._GPUFractionSB.setSuffix("%")
|
32
|
+
self._GPUFractionSB.setMinimum(1)
|
33
|
+
self._GPUFractionSB.setMaximum(100)
|
34
|
+
self._GPUFractionSB.setToolTip("Which fraction of GPU memory to use.")
|
35
|
+
self.registerWidget(self._GPUFractionSB, "advanced")
|
36
|
+
self.layout().addRow(self._GPUFractionLabel, self._GPUFractionSB)
|
37
|
+
|
38
|
+
# cpu percentage
|
39
|
+
self._CPUFractionLabel = qt.QLabel("CPU percentage usage", self)
|
40
|
+
self.registerWidget(self._CPUFractionLabel, "advanced")
|
41
|
+
self._CPUFractionSB = qt.QSpinBox(self)
|
42
|
+
self._CPUFractionSB.setSingleStep(10)
|
43
|
+
self._CPUFractionSB.setSuffix("%")
|
44
|
+
self._CPUFractionSB.setMinimum(1)
|
45
|
+
self._CPUFractionSB.setMaximum(100)
|
46
|
+
self._CPUFractionSB.setToolTip("Which fraction of CPU memory to use.")
|
47
|
+
self.registerWidget(self._CPUFractionSB, "advanced")
|
48
|
+
self.layout().addRow(self._CPUFractionLabel, self._CPUFractionSB)
|
49
|
+
|
50
|
+
# set up
|
51
|
+
self._GPUFractionSB.setValue(NabuPlatformSettings.DEFAULT_GPU_FRACTION)
|
52
|
+
self._CPUFractionSB.setValue(NabuPlatformSettings.DEFAULT_CPU_FRACTION)
|
53
|
+
|
54
|
+
# connect signal / slot
|
55
|
+
self._gpuSelWidget.sigGPUChanged.connect(self.sigConfigChanged)
|
56
|
+
self._GPUFractionSB.valueChanged.connect(self._triggerSigConfChanged)
|
57
|
+
self._CPUFractionSB.valueChanged.connect(self._triggerSigConfChanged)
|
58
|
+
|
59
|
+
def getCPUFraction(self) -> float:
|
60
|
+
return self._CPUFractionSB.value() / 100.0
|
61
|
+
|
62
|
+
def setCPUFraction(self, value: float):
|
63
|
+
return self._CPUFractionSB.setValue(int(value * 100.0))
|
64
|
+
|
65
|
+
def getGPUFraction(self) -> float:
|
66
|
+
return self._GPUFractionSB.value() / 100.0
|
67
|
+
|
68
|
+
def setGPUFraction(self, value: float):
|
69
|
+
return self._GPUFractionSB.setValue(int(value * 100.0))
|
70
|
+
|
71
|
+
def _triggerSigConfChanged(self, *args, **kwargs) -> None:
|
72
|
+
self.sigConfigChanged.emit()
|
73
|
+
|
74
|
+
def getConfiguration(self) -> dict:
|
75
|
+
config = {
|
76
|
+
"gpu_mem_fraction": self.getGPUFraction(),
|
77
|
+
"cpu_mem_fraction": self.getCPUFraction(),
|
78
|
+
}
|
79
|
+
selected_gpu_id = self._gpuSelWidget.getSelectedGPUId()
|
80
|
+
if selected_gpu_id is not None:
|
81
|
+
config["resources"] = {
|
82
|
+
"gpu_id": selected_gpu_id,
|
83
|
+
}
|
84
|
+
return config
|
85
|
+
|
86
|
+
def setConfiguration(self, config: dict) -> None:
|
87
|
+
gpu_id = config.get("resources", {}).get("gpu_id", None)
|
88
|
+
if gpu_id not in (None, ""):
|
89
|
+
self._gpuSelWidget.setSelectedGPUId(value=gpu_id)
|
90
|
+
self._gpuSelWidget.setChecked(True)
|
91
|
+
if "gpu_mem_fraction" in config:
|
92
|
+
self.setGPUFraction(config["gpu_mem_fraction"])
|
93
|
+
if "cpu_mem_fraction" in config:
|
94
|
+
self.setCPUFraction(config["cpu_mem_fraction"])
|
@@ -1,31 +1,6 @@
|
|
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
|
3
|
+
|
29
4
|
|
30
5
|
import logging
|
31
6
|
|
@@ -38,11 +13,14 @@ from silx.gui import qt
|
|
38
13
|
from silx.utils.enum import Enum as _Enum
|
39
14
|
from nxtomo.nxobject.nxdetector import FOV
|
40
15
|
|
16
|
+
from tomwer.core.utils.dictutils import concatenate_dict
|
41
17
|
from tomwer.core.process.reconstruction.nabu.utils import _NabuMode
|
42
18
|
from tomwer.core.scan.scanbase import TomwerScanBase
|
43
19
|
from tomwer.gui import icons as tomwer_icons
|
44
20
|
from tomwer.gui.reconstruction.nabu.nabuflow import NabuFlowArea
|
21
|
+
from tomwer.gui.reconstruction.nabu.platform import NabuPlatformSettings
|
45
22
|
from tomwer.gui.utils.buttons import PadlockButton
|
23
|
+
from tomwer.gui.settings import TAB_LABEL_PLATFORM_SETTINGS
|
46
24
|
|
47
25
|
from ...utils.flow import FlowDirection
|
48
26
|
from tomwer.gui.configuration.action import (
|
@@ -153,15 +131,15 @@ class _NabuConfiguration(qt.QWidget):
|
|
153
131
|
def filter(self, stage=None, process=None):
|
154
132
|
"""Apply a filter on the options to show
|
155
133
|
|
156
|
-
:param
|
157
|
-
:param
|
134
|
+
:param stage:
|
135
|
+
:param process:
|
158
136
|
"""
|
159
137
|
pass
|
160
138
|
|
161
139
|
def setStages(self, stages: dict) -> None:
|
162
140
|
"""
|
163
141
|
|
164
|
-
:param
|
142
|
+
:param stages: contains stages the user can edit and for each
|
165
143
|
stages the associated processes.
|
166
144
|
"""
|
167
145
|
self.clear()
|
@@ -213,7 +191,7 @@ class NabuWindow(qt.QMainWindow):
|
|
213
191
|
qt.QMainWindow.__init__(self, parent=parent)
|
214
192
|
self.setWindowFlags(qt.Qt.Widget)
|
215
193
|
|
216
|
-
self._mainWidget =
|
194
|
+
self._mainWidget = NabuTabWidget(parent=self, flow_direction=flow_direction)
|
217
195
|
self.setCentralWidget(self._mainWidget)
|
218
196
|
style = qt.QApplication.style()
|
219
197
|
|
@@ -279,14 +257,6 @@ class NabuWindow(qt.QMainWindow):
|
|
279
257
|
self.__tSpacer.setSizePolicy(qt.QSizePolicy.Expanding, qt.QSizePolicy.Preferred)
|
280
258
|
toolbar.addWidget(self.__tSpacer)
|
281
259
|
|
282
|
-
# expose API
|
283
|
-
self.setOutputDir = self._mainWidget.setOutputDir
|
284
|
-
self.setScan = self._mainWidget.setScan
|
285
|
-
self.getMode = self._mainWidget.getMode
|
286
|
-
self.setMode = self._mainWidget.setMode
|
287
|
-
self.hideSlicesInterface = self._mainWidget.hideSlicesInterface
|
288
|
-
self.hidePaganinInterface = self._mainWidget.hidePaganinInterface
|
289
|
-
|
290
260
|
# connect signal / slot
|
291
261
|
self._mainWidget.sigConfigChanged.connect(self.sigConfigChanged)
|
292
262
|
|
@@ -348,8 +318,9 @@ class NabuWindow(qt.QMainWindow):
|
|
348
318
|
)
|
349
319
|
|
350
320
|
def _resetParameters(self):
|
321
|
+
# reset nabu settings
|
351
322
|
default_config = get_default_nabu_config(nabu_fullfield_default_config)
|
352
|
-
self._mainWidget._configuration._preProcessingWidget._sinoRingsOpts.resetConfiguration()
|
323
|
+
self._mainWidget.nabuSettingsWidget._configuration._preProcessingWidget._sinoRingsOpts.resetConfiguration()
|
353
324
|
default_config["tomwer_slices"] = "middle"
|
354
325
|
default_config["preproc"]["ccd_filter_enabled"] = False
|
355
326
|
default_config["preproc"]["double_flatfield_enabled"] = False
|
@@ -427,11 +398,31 @@ class NabuWindow(qt.QMainWindow):
|
|
427
398
|
else:
|
428
399
|
raise ValueError("Level not recognize")
|
429
400
|
|
401
|
+
# expose API
|
402
|
+
|
430
403
|
def setModeLocked(self, locked: bool):
|
431
|
-
self._mainWidget.setModeLocked(locked)
|
404
|
+
self._mainWidget.nabuSettingsWidget.setModeLocked(locked)
|
432
405
|
|
433
406
|
def isModeLocked(self):
|
434
|
-
return self._mainWidget.isModeLocked()
|
407
|
+
return self._mainWidget.nabuSettingsWidget.isModeLocked()
|
408
|
+
|
409
|
+
def setOutputDir(self, dir: str):
|
410
|
+
self._mainWidget.nabuSettingsWidget.setOutputDir(dir=dir)
|
411
|
+
|
412
|
+
def setScan(self, scan: TomwerScanBase):
|
413
|
+
self._mainWidget.nabuSettingsWidget.setScan(scan=scan)
|
414
|
+
|
415
|
+
def getMode(self):
|
416
|
+
return self._mainWidget.nabuSettingsWidget.getMode()
|
417
|
+
|
418
|
+
def setMode(self, mode):
|
419
|
+
self._mainWidget.nabuSettingsWidget.setMode(mode=mode)
|
420
|
+
|
421
|
+
def hideSlicesInterface(self):
|
422
|
+
self._mainWidget.nabuSettingsWidget.hideSlicesInterface()
|
423
|
+
|
424
|
+
def hidePaganinInterface(self):
|
425
|
+
self._mainWidget.nabuSettingsWidget.hidePaganinInterface()
|
435
426
|
|
436
427
|
|
437
428
|
class NabuWidget(qt.QWidget):
|
@@ -484,9 +475,7 @@ class NabuWidget(qt.QWidget):
|
|
484
475
|
# nabu configuration
|
485
476
|
self._configurationScrollArea = qt.QScrollArea(self)
|
486
477
|
self._configurationScrollArea.setWidgetResizable(True)
|
487
|
-
self._configuration = NabuConfiguration(
|
488
|
-
parent=self, scrollArea=self._configurationScrollArea
|
489
|
-
)
|
478
|
+
self._configuration = NabuConfiguration(parent=self)
|
490
479
|
self._configurationScrollArea.setWidget(self._configuration)
|
491
480
|
self._configurationScrollArea.setHorizontalScrollBarPolicy(
|
492
481
|
qt.Qt.ScrollBarAlwaysOff
|
@@ -622,3 +611,50 @@ class NabuWidget(qt.QWidget):
|
|
622
611
|
def setFilteringActive(self, active):
|
623
612
|
self._filteringActive = active
|
624
613
|
self.updateConfigurationFilter()
|
614
|
+
|
615
|
+
|
616
|
+
class NabuTabWidget(qt.QTabWidget):
|
617
|
+
"""
|
618
|
+
Widget that group Nabu reconstruction settings and (local) platform settings
|
619
|
+
"""
|
620
|
+
|
621
|
+
sigConfigChanged = qt.Signal()
|
622
|
+
|
623
|
+
def __init__(self, parent=None, flow_direction: str = "vertical"):
|
624
|
+
super().__init__(parent=parent)
|
625
|
+
self._nabuSettingsWidget = NabuWidget(
|
626
|
+
parent=self, flow_direction=flow_direction
|
627
|
+
)
|
628
|
+
self.addTab(self._nabuSettingsWidget, "reconstruction settings")
|
629
|
+
self._platformSettingsWidget = NabuPlatformSettings(parent=self)
|
630
|
+
self.addTab(self._platformSettingsWidget, TAB_LABEL_PLATFORM_SETTINGS)
|
631
|
+
|
632
|
+
# connect signal / slot
|
633
|
+
self._nabuSettingsWidget.sigConfigChanged.connect(self.sigConfigChanged)
|
634
|
+
self._platformSettingsWidget.sigConfigChanged.connect(self.sigConfigChanged)
|
635
|
+
|
636
|
+
def getConfiguration(self) -> dict:
|
637
|
+
config = self._nabuSettingsWidget.getConfiguration()
|
638
|
+
config = concatenate_dict(
|
639
|
+
config, self._platformSettingsWidget.getConfiguration()
|
640
|
+
)
|
641
|
+
return config
|
642
|
+
|
643
|
+
def setConfiguration(self, config: dict):
|
644
|
+
self._nabuSettingsWidget.setConfiguration(config=config)
|
645
|
+
self._platformSettingsWidget.setConfiguration(config=config)
|
646
|
+
|
647
|
+
def setConfigurationLevel(self, level):
|
648
|
+
self._nabuSettingsWidget.setConfigurationLevel(level=level)
|
649
|
+
self._platformSettingsWidget.setConfigurationLevel(level=level)
|
650
|
+
|
651
|
+
def getConfigurationLevel(self):
|
652
|
+
return self._nabuSettingsWidget.getConfigurationLevel()
|
653
|
+
|
654
|
+
@property
|
655
|
+
def nabuSettingsWidget(self):
|
656
|
+
return self._nabuSettingsWidget
|
657
|
+
|
658
|
+
@property
|
659
|
+
def platformSettings(self):
|
660
|
+
return self._platformSettingsWidget
|
@@ -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__ = "11/10/2021"
|
2
|
+
from __future__ import annotations
|
29
3
|
|
30
4
|
|
31
5
|
from silx.gui import qt
|
@@ -0,0 +1,82 @@
|
|
1
|
+
from tomwer.tests.conftest import qtapp # noqa F401
|
2
|
+
from tomwer.gui.reconstruction.nabu.castvolume import CastVolumeWidget
|
3
|
+
|
4
|
+
|
5
|
+
def test_CastVolumeWidget(qtapp): # noqa F811
|
6
|
+
"""simple test of the CastVolumeWidget"""
|
7
|
+
widget = CastVolumeWidget(parent=None)
|
8
|
+
assert widget.getConfiguration() == {
|
9
|
+
"compression_ratios": None,
|
10
|
+
"data_max": None,
|
11
|
+
"data_min": None,
|
12
|
+
"output_data_type": "uint16",
|
13
|
+
"output_dir": "{volume_data_parent_folder}/cast_volume",
|
14
|
+
"output_file_format": "tiff",
|
15
|
+
"overwrite": True,
|
16
|
+
"rescale_max_percentile": 90,
|
17
|
+
"rescale_min_percentile": 10,
|
18
|
+
}
|
19
|
+
|
20
|
+
widget._minMaxAuto.setChecked(False)
|
21
|
+
assert widget.getConfiguration() == {
|
22
|
+
"compression_ratios": None,
|
23
|
+
"data_max": 0.0,
|
24
|
+
"data_min": 0.0,
|
25
|
+
"output_data_type": "uint16",
|
26
|
+
"output_dir": "{volume_data_parent_folder}/cast_volume",
|
27
|
+
"output_file_format": "tiff",
|
28
|
+
"overwrite": True,
|
29
|
+
"rescale_max_percentile": None,
|
30
|
+
"rescale_min_percentile": None,
|
31
|
+
}
|
32
|
+
|
33
|
+
widget.setDataMin(1.0)
|
34
|
+
widget.setDataMax(10.0)
|
35
|
+
|
36
|
+
assert widget.getConfiguration() == {
|
37
|
+
"compression_ratios": None,
|
38
|
+
"data_max": 10.0,
|
39
|
+
"data_min": 1.0,
|
40
|
+
"output_data_type": "uint16",
|
41
|
+
"output_dir": "{volume_data_parent_folder}/cast_volume",
|
42
|
+
"output_file_format": "tiff",
|
43
|
+
"overwrite": True,
|
44
|
+
"rescale_max_percentile": None,
|
45
|
+
"rescale_min_percentile": None,
|
46
|
+
}
|
47
|
+
widget.setOutputFileformat("edf")
|
48
|
+
assert widget.getConfiguration() == {
|
49
|
+
"compression_ratios": None,
|
50
|
+
"data_max": 10.0,
|
51
|
+
"data_min": 1.0,
|
52
|
+
"output_data_type": "uint16",
|
53
|
+
"output_dir": "{volume_data_parent_folder}/cast_volume",
|
54
|
+
"output_file_format": "edf",
|
55
|
+
"overwrite": True,
|
56
|
+
"rescale_max_percentile": None,
|
57
|
+
"rescale_min_percentile": None,
|
58
|
+
}
|
59
|
+
widget.setOverwrite(False)
|
60
|
+
assert widget.getConfiguration() == {
|
61
|
+
"compression_ratios": None,
|
62
|
+
"data_max": 10.0,
|
63
|
+
"data_min": 1.0,
|
64
|
+
"output_data_type": "uint16",
|
65
|
+
"output_dir": "{volume_data_parent_folder}/cast_volume",
|
66
|
+
"output_file_format": "edf",
|
67
|
+
"overwrite": False,
|
68
|
+
"rescale_max_percentile": None,
|
69
|
+
"rescale_min_percentile": None,
|
70
|
+
}
|
71
|
+
widget.setOutputDataType("float32")
|
72
|
+
assert widget.getConfiguration() == {
|
73
|
+
"compression_ratios": None,
|
74
|
+
"data_max": 10.0,
|
75
|
+
"data_min": 1.0,
|
76
|
+
"output_data_type": "float32",
|
77
|
+
"output_dir": "{volume_data_parent_folder}/cast_volume",
|
78
|
+
"output_file_format": "edf",
|
79
|
+
"overwrite": False,
|
80
|
+
"rescale_max_percentile": None,
|
81
|
+
"rescale_min_percentile": None,
|
82
|
+
}
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
from __future__ import annotations
|
3
|
+
|
4
|
+
|
5
|
+
import os
|
6
|
+
|
7
|
+
import pytest
|
8
|
+
from nxtomo.nxobject.nxdetector import ImageKey
|
9
|
+
|
10
|
+
from tomwer.core.scan.edfscan import EDFTomoScan
|
11
|
+
from tomwer.core.utils.scanutils import MockEDF, MockNXtomo
|
12
|
+
from tomwer.gui.reconstruction.nabu import check
|
13
|
+
|
14
|
+
|
15
|
+
def test_check_dark_series(tmpdir):
|
16
|
+
"""test check.check_dark_series function"""
|
17
|
+
full_edf_path = os.path.join(tmpdir, "my", "aquisition", "folder")
|
18
|
+
MockEDF.fastMockAcquisition(full_edf_path)
|
19
|
+
edf_scan = EDFTomoScan(full_edf_path)
|
20
|
+
with pytest.raises(TypeError):
|
21
|
+
assert check.check_dark_series(edf_scan)
|
22
|
+
|
23
|
+
full_hdf5_scan = os.path.join(tmpdir, "hdf5_scan")
|
24
|
+
scan = MockNXtomo(
|
25
|
+
scan_path=full_hdf5_scan,
|
26
|
+
n_proj=20,
|
27
|
+
n_ini_proj=20,
|
28
|
+
dim=10,
|
29
|
+
).scan
|
30
|
+
scan._image_keys = (
|
31
|
+
[ImageKey.DARK_FIELD] * 2
|
32
|
+
+ [ImageKey.PROJECTION] * 4
|
33
|
+
+ [ImageKey.DARK_FIELD] * 2
|
34
|
+
)
|
35
|
+
assert check.check_dark_series(scan, logger=None, user_input=False) is False
|
36
|
+
scan._image_keys = [ImageKey.DARK_FIELD] * 2 + [ImageKey.PROJECTION] * 4
|
37
|
+
assert check.check_dark_series(scan, logger=None, user_input=False) is True
|
38
|
+
scan._image_keys = [ImageKey.PROJECTION] * 4
|
39
|
+
assert check.check_dark_series(scan, logger=None, user_input=False) is False
|
40
|
+
|
41
|
+
|
42
|
+
def test_check_flat_series(tmpdir):
|
43
|
+
"""test check.check_flat_series function"""
|
44
|
+
full_edf_path = os.path.join(tmpdir, "my", "aquisition", "folder")
|
45
|
+
MockEDF.fastMockAcquisition(full_edf_path)
|
46
|
+
edf_scan = EDFTomoScan(full_edf_path)
|
47
|
+
with pytest.raises(TypeError):
|
48
|
+
assert check.check_flat_series(edf_scan)
|
49
|
+
|
50
|
+
full_hdf5_scan = os.path.join(tmpdir, "hdf5_scan")
|
51
|
+
scan = MockNXtomo(
|
52
|
+
scan_path=full_hdf5_scan,
|
53
|
+
n_proj=20,
|
54
|
+
n_ini_proj=20,
|
55
|
+
dim=10,
|
56
|
+
).scan
|
57
|
+
scan._image_keys = (
|
58
|
+
[ImageKey.FLAT_FIELD] * 2
|
59
|
+
+ [ImageKey.PROJECTION] * 4
|
60
|
+
+ [ImageKey.FLAT_FIELD] * 2
|
61
|
+
)
|
62
|
+
assert check.check_flat_series(scan, logger=None, user_input=False) is True
|
63
|
+
scan._image_keys = [ImageKey.FLAT_FIELD] * 2 + [ImageKey.PROJECTION] * 4
|
64
|
+
assert check.check_flat_series(scan, logger=None, user_input=False) is True
|
65
|
+
scan._image_keys = [ImageKey.PROJECTION] * 4
|
66
|
+
assert check.check_flat_series(scan, logger=None, user_input=False) is False
|
@@ -0,0 +1,46 @@
|
|
1
|
+
import pytest
|
2
|
+
from silx.gui import qt
|
3
|
+
from silx.gui.utils.testutils import TestCaseQt
|
4
|
+
|
5
|
+
from tomwer.gui.reconstruction.nabu.nabuconfig.ctf import CTFConfig
|
6
|
+
from tomwer.tests.utils import skip_gui_test
|
7
|
+
|
8
|
+
|
9
|
+
@pytest.mark.skipif(skip_gui_test(), reason="skip gui test")
|
10
|
+
class TestFutureSupervisorOW(TestCaseQt):
|
11
|
+
def setUp(self):
|
12
|
+
super().setUp()
|
13
|
+
self._widget = CTFConfig()
|
14
|
+
|
15
|
+
def tearDown(self):
|
16
|
+
self._widget.setAttribute(qt.Qt.WA_DeleteOnClose)
|
17
|
+
self._widget.close()
|
18
|
+
self._widget = None
|
19
|
+
return super().tearDown()
|
20
|
+
|
21
|
+
def test_configuration(self):
|
22
|
+
"""
|
23
|
+
test configuration setter and getter
|
24
|
+
"""
|
25
|
+
self._widget.show()
|
26
|
+
config = self._widget.getConfiguration()
|
27
|
+
assert isinstance(config, dict)
|
28
|
+
|
29
|
+
assert config == {
|
30
|
+
"ctf_geometry": " z1_v=None; z1_h=None; detec_pixel_size=None; magnification=True",
|
31
|
+
"ctf_advanced_params": " length_scale=1e-05; lim1=1e-05; lim2=0.2; normalize_by_mean=True",
|
32
|
+
"ctf_translations_file": "",
|
33
|
+
"beam_shape": "parallel",
|
34
|
+
}
|
35
|
+
|
36
|
+
config["beam_shape"] = "cone"
|
37
|
+
config["ctf_translations_file"] = "my_file.txt"
|
38
|
+
config["ctf_geometry"] = (
|
39
|
+
" z1_v=10.2; z1_h=3.6; detec_pixel_size=1e-05; magnification=False"
|
40
|
+
)
|
41
|
+
config["ctf_advanced_params"] = (
|
42
|
+
" length_scale=2e-05; lim1=1e-08; lim2=0.1; normalize_by_mean=False"
|
43
|
+
)
|
44
|
+
|
45
|
+
self._widget.setConfiguration(config)
|
46
|
+
assert self._widget.getConfiguration() == config
|
@@ -0,0 +1,21 @@
|
|
1
|
+
from tomwer.tests.conftest import qtapp # noqa F401
|
2
|
+
from tomwer.gui.reconstruction.nabu.helical import HelicalPrepareWeightsDouble
|
3
|
+
|
4
|
+
|
5
|
+
def test_DeltaBetaSelector(
|
6
|
+
qtapp, # noqa F811
|
7
|
+
):
|
8
|
+
"""simple test of the _DeltaBetaSelectorDialog"""
|
9
|
+
widget = HelicalPrepareWeightsDouble()
|
10
|
+
assert widget.getConfiguration() == {
|
11
|
+
"processes_file": "{scan_parent_dir_basename}/{scan_dir_name}/map_and_doubleff.hdf5",
|
12
|
+
"transition_width_vertical": 50.0,
|
13
|
+
"transition_width_horizontal": 50.0,
|
14
|
+
}
|
15
|
+
config = {
|
16
|
+
"processes_file": "test.hdf5",
|
17
|
+
"transition_width_vertical": 12.5,
|
18
|
+
"transition_width_horizontal": 11.5,
|
19
|
+
}
|
20
|
+
widget.setConfiguration(config=config)
|
21
|
+
assert widget.getConfiguration() == config
|
@@ -0,0 +1,81 @@
|
|
1
|
+
from tomwer.gui.reconstruction.nabu.nabuconfig.preprocessing import (
|
2
|
+
SinoRingsOptions,
|
3
|
+
TiltCorrection,
|
4
|
+
RingCorrectionMethod,
|
5
|
+
)
|
6
|
+
from tomwer.tests.conftest import qtapp # noqa F401
|
7
|
+
|
8
|
+
|
9
|
+
def test_tilt_correction_widget(qtapp): # noqa F811
|
10
|
+
"""
|
11
|
+
Test of TiltCorrection
|
12
|
+
"""
|
13
|
+
widget = TiltCorrection(text="")
|
14
|
+
assert not widget._tiltManualRB.isChecked()
|
15
|
+
assert widget._autoManualRB.isChecked()
|
16
|
+
assert widget.getTiltCorrection() == ("1d-correlation", "")
|
17
|
+
widget.setTiltCorrection(0.0)
|
18
|
+
assert widget.getTiltCorrection() == (0.0, "")
|
19
|
+
assert widget._tiltManualRB.isChecked()
|
20
|
+
assert not widget._autoManualRB.isChecked()
|
21
|
+
widget.setTiltCorrection("fft-polar", auto_tilt_options="low_pass=10")
|
22
|
+
assert widget.getTiltCorrection() == ("fft-polar", "low_pass=10")
|
23
|
+
assert not widget._tiltManualRB.isChecked()
|
24
|
+
assert widget._autoManualRB.isChecked()
|
25
|
+
|
26
|
+
|
27
|
+
def test_sino_rings_options(qtapp): # noqa F811
|
28
|
+
"""
|
29
|
+
Test of SinoRingsOptions
|
30
|
+
"""
|
31
|
+
widget = SinoRingsOptions()
|
32
|
+
# test munch options
|
33
|
+
assert widget.getOptions() == {
|
34
|
+
"sigma": 1.0,
|
35
|
+
"levels": 10,
|
36
|
+
"padding": False,
|
37
|
+
}
|
38
|
+
|
39
|
+
widget.setOptions(
|
40
|
+
{
|
41
|
+
"sigma": 3.25,
|
42
|
+
"levels": 564,
|
43
|
+
"padding": True,
|
44
|
+
}
|
45
|
+
)
|
46
|
+
assert widget.getOptions() == {
|
47
|
+
"sigma": 3.25,
|
48
|
+
"levels": 564,
|
49
|
+
"padding": True,
|
50
|
+
}
|
51
|
+
# test mean division
|
52
|
+
widget.setMethod(method=RingCorrectionMethod.MEAN_DIVISION)
|
53
|
+
assert widget.getOptions() == {
|
54
|
+
"filter_cutoff": (0, 30),
|
55
|
+
}
|
56
|
+
|
57
|
+
# test VO deringer
|
58
|
+
widget.setMethod(method=RingCorrectionMethod.VO.value)
|
59
|
+
assert widget.getOptions() == {
|
60
|
+
"dim": 1,
|
61
|
+
"la_size": 51,
|
62
|
+
"sm_size": 21,
|
63
|
+
"snr": 3.0,
|
64
|
+
}
|
65
|
+
new_vo_options = {
|
66
|
+
"dim": 2,
|
67
|
+
"la_size": 42,
|
68
|
+
"sm_size": 22,
|
69
|
+
"snr": 6.3,
|
70
|
+
}
|
71
|
+
widget.setOptions(new_vo_options)
|
72
|
+
assert widget.getOptions() == new_vo_options
|
73
|
+
|
74
|
+
# test mean division
|
75
|
+
new_mean_division_options = {
|
76
|
+
"filter_cutoff": (10, 23),
|
77
|
+
}
|
78
|
+
|
79
|
+
widget.setMethod(method=RingCorrectionMethod.MEAN_DIVISION)
|
80
|
+
widget.setOptions(new_mean_division_options)
|
81
|
+
assert widget.getOptions() == new_mean_division_options
|