tomwer 1.3.27__py3-none-any.whl → 1.4.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- orangecontrib/tomwer/orange/managedprocess.py +1 -29
- orangecontrib/tomwer/orange/settings.py +2 -28
- orangecontrib/tomwer/tests/TestAcquisition.py +220 -0
- orangecontrib/tomwer/tutorials/append_raw_darks_and_flats_frames_to_NXtomos.ows +2 -2
- orangecontrib/tomwer/tutorials/copy_reduced_darks_and_flats_meth1.ows +1 -1
- orangecontrib/tomwer/tutorials/{icat_publication.ows → drac_publication.ows} +7 -21
- orangecontrib/tomwer/tutorials/id16b/ID16b_full_volume.ows +22 -0
- orangecontrib/tomwer/tutorials/id16b/ID16b_insitu.ows +302 -0
- orangecontrib/tomwer/tutorials/id16b/ID16b_normalization.ows +218 -0
- orangecontrib/tomwer/tutorials/simple_volume_to_slurm_reconstruction.ows +29 -24
- orangecontrib/tomwer/tutorials/test_cor.ows +19 -0
- orangecontrib/tomwer/tutorials/volume_casting_on_slurm.ows +54 -0
- orangecontrib/tomwer/widgets/__init__.py +3 -5
- orangecontrib/tomwer/widgets/cluster/FutureSupervisorOW.py +35 -54
- orangecontrib/tomwer/widgets/cluster/SlurmClusterOW.py +1 -31
- orangecontrib/tomwer/widgets/control/AdvancementOW.py +1 -29
- orangecontrib/tomwer/widgets/control/DataDiscoveryOW.py +5 -4
- orangecontrib/tomwer/widgets/control/DataListenerOW.py +1 -29
- orangecontrib/tomwer/widgets/control/DataSelectorOW.py +11 -30
- orangecontrib/tomwer/widgets/control/DataTransfertOW.py +2 -28
- orangecontrib/tomwer/widgets/control/DataValidatorOW.py +1 -28
- orangecontrib/tomwer/widgets/control/DataWatcherOW.py +1 -28
- orangecontrib/tomwer/widgets/control/EDF2NXTomomillOW.py +48 -51
- orangecontrib/tomwer/widgets/control/EmailOW.py +12 -2
- orangecontrib/tomwer/widgets/control/FilterOW.py +1 -28
- orangecontrib/tomwer/widgets/control/NXTomomillOW.py +37 -53
- orangecontrib/tomwer/widgets/control/NXtomoConcatenate.py +21 -20
- orangecontrib/tomwer/widgets/control/NotifierOW.py +9 -28
- orangecontrib/tomwer/widgets/control/ReduceDarkFlatSelectorOW.py +3 -2
- orangecontrib/tomwer/widgets/control/SingleTomoObjOW.py +1 -27
- orangecontrib/tomwer/widgets/control/TimerOW.py +9 -28
- orangecontrib/tomwer/widgets/control/TomoObjSeriesOW.py +58 -0
- orangecontrib/tomwer/widgets/control/VolumeSelector.py +8 -30
- orangecontrib/tomwer/widgets/control/icons/nxtomomill.svg +173 -119
- orangecontrib/tomwer/widgets/control/icons/reduced_darkflat_selector.png +0 -0
- orangecontrib/tomwer/widgets/control/icons/reduced_darkflat_selector.svg +55 -195
- orangecontrib/tomwer/widgets/control/icons/{tomoobjserie.svg → tomoobjseries.svg} +2 -2
- orangecontrib/tomwer/widgets/dataportal/PublishProcessedDataOW.py +172 -0
- orangecontrib/tomwer/widgets/{icat → dataportal}/__init__.py +2 -2
- orangecontrib/tomwer/widgets/debugtools/DatasetGeneratorOW.py +2 -29
- orangecontrib/tomwer/widgets/debugtools/ObjectInspectorOW.py +1 -29
- orangecontrib/tomwer/widgets/edit/DarkFlatPatchOW.py +48 -73
- orangecontrib/tomwer/widgets/edit/ImageKeyEditorOW.py +48 -75
- orangecontrib/tomwer/widgets/edit/ImageKeyUpgraderOW.py +5 -30
- orangecontrib/tomwer/widgets/edit/NXtomoEditorOW.py +51 -52
- orangecontrib/tomwer/widgets/other/PythonScriptOW.py +22 -10
- orangecontrib/tomwer/widgets/reconstruction/AxisOW.py +51 -60
- orangecontrib/tomwer/widgets/reconstruction/CastNabuVolumeOW.py +22 -68
- orangecontrib/tomwer/widgets/reconstruction/DarkRefAndCopyOW.py +3 -30
- orangecontrib/tomwer/widgets/reconstruction/NabuHelicalPrepareWeightsDoubleOW.py +21 -19
- orangecontrib/tomwer/widgets/reconstruction/NabuOW.py +7 -70
- orangecontrib/tomwer/widgets/reconstruction/NabuVolumeOW.py +41 -84
- orangecontrib/tomwer/widgets/reconstruction/SAAxisOW.py +15 -40
- orangecontrib/tomwer/widgets/reconstruction/SADeltaBetaOW.py +13 -35
- orangecontrib/tomwer/widgets/reconstruction/SinoNormOW.py +2 -30
- orangecontrib/tomwer/widgets/stitching/ZStitchingConfigOW.py +11 -11
- orangecontrib/tomwer/widgets/utils.py +2 -29
- orangecontrib/tomwer/widgets/visualization/DataViewerOW.py +1 -27
- orangecontrib/tomwer/widgets/visualization/DiffViewerOW.py +1 -27
- orangecontrib/tomwer/widgets/visualization/NXtomoMetadataViewerOW.py +1 -1
- orangecontrib/tomwer/widgets/visualization/RadioStackOW.py +2 -28
- orangecontrib/tomwer/widgets/visualization/SampleMovedOW.py +1 -27
- orangecontrib/tomwer/widgets/visualization/SinogramViewerOW.py +1 -27
- orangecontrib/tomwer/widgets/visualization/SliceStackOW.py +2 -28
- tomwer/__init__.py +3 -28
- tomwer/__main__.py +8 -4
- tomwer/app/__init__.py +2 -0
- tomwer/app/axis.py +8 -10
- tomwer/app/canvas.py +23 -29
- tomwer/app/canvas_launcher/config.py +14 -102
- tomwer/app/canvas_launcher/environ.py +5 -8
- tomwer/app/canvas_launcher/mainwindow.py +175 -69
- tomwer/app/canvas_launcher/splash.py +1 -3
- tomwer/app/canvas_launcher/utils.py +47 -0
- tomwer/app/canvas_launcher/widgetsscheme.py +3 -10
- tomwer/app/diffframe.py +2 -0
- tomwer/app/imagekeyeditor.py +2 -1
- tomwer/app/imagekeyupgrader.py +2 -0
- tomwer/app/multicor.py +5 -2
- tomwer/app/multipag.py +16 -5
- tomwer/app/nabuapp.py +2 -1
- tomwer/app/nxtomoeditor.py +17 -12
- tomwer/app/patchrawdarkflat.py +2 -0
- tomwer/app/radiostack.py +3 -2
- tomwer/app/reducedarkflat.py +3 -0
- tomwer/app/samplemoved.py +2 -0
- tomwer/app/scanviewer.py +2 -0
- tomwer/app/sinogramviewer.py +2 -0
- tomwer/app/slicestack.py +11 -13
- tomwer/app/stitching/common.py +431 -0
- tomwer/app/stopdatalistener.py +3 -0
- tomwer/app/ystitching.py +26 -0
- tomwer/app/zstitching.py +8 -363
- tomwer/core/__init__.py +2 -28
- tomwer/core/cluster/__init__.py +3 -0
- tomwer/core/cluster/cluster.py +10 -26
- tomwer/core/futureobject.py +17 -43
- tomwer/core/log/__init__.py +2 -0
- tomwer/core/log/processlog.py +0 -28
- tomwer/core/process/cluster/supervisor.py +52 -34
- tomwer/core/process/conditions/filters.py +3 -28
- tomwer/core/process/control/datalistener/datalistener.py +7 -75
- tomwer/core/process/control/datalistener/rpcserver.py +8 -38
- tomwer/core/process/control/datawatcher/datawatcher.py +11 -40
- tomwer/core/process/control/datawatcher/datawatcherobserver.py +30 -64
- tomwer/core/process/control/datawatcher/datawatcherprocess.py +11 -32
- tomwer/core/process/control/datawatcher/edfdwprocess.py +2 -27
- tomwer/core/process/control/datawatcher/hdf5dwprocess.py +1 -26
- tomwer/core/process/control/datawatcher/status.py +1 -26
- tomwer/core/process/control/emailnotifier.py +11 -23
- tomwer/core/process/control/nxtomoconcatenate.py +20 -18
- tomwer/core/process/control/nxtomomill.py +9 -44
- tomwer/core/process/control/scanlist.py +0 -27
- tomwer/core/process/control/scantransfer.py +15 -13
- tomwer/core/process/control/scanvalidator.py +4 -30
- tomwer/core/process/control/{test → tests}/test_concatenate_nxtomos.py +5 -5
- tomwer/core/process/control/timer.py +1 -27
- tomwer/core/process/control/tomoobjseries.py +12 -0
- tomwer/core/process/drac/binning.py +37 -0
- tomwer/core/process/drac/dracbase.py +170 -0
- tomwer/core/process/drac/gallery.py +109 -0
- tomwer/core/process/drac/output.py +12 -0
- tomwer/core/process/drac/processeddataset.py +147 -0
- tomwer/core/process/drac/publish.py +118 -0
- tomwer/core/process/drac/rawdataset.py +142 -0
- tomwer/core/process/drac/tests/test_gallery.py +71 -0
- tomwer/core/process/drac/tests/test_icat_processed_dataset.py +80 -0
- tomwer/core/process/drac/tests/test_icat_raw_dataset.py +90 -0
- tomwer/core/process/edit/darkflatpatch.py +1 -28
- tomwer/core/process/edit/imagekeyeditor.py +4 -32
- tomwer/core/process/edit/nxtomoeditor.py +307 -0
- tomwer/core/process/edit/tests/test_darkflatpatch.py +243 -0
- tomwer/core/process/edit/tests/test_imagekey_editor.py +99 -0
- tomwer/core/process/output.py +9 -2
- tomwer/core/process/reconstruction/__init__.py +0 -26
- tomwer/core/process/reconstruction/axis/anglemode.py +1 -29
- tomwer/core/process/reconstruction/axis/axis.py +47 -804
- tomwer/core/process/reconstruction/axis/mode.py +89 -25
- tomwer/core/process/reconstruction/axis/params.py +131 -283
- tomwer/core/process/reconstruction/axis/projectiontype.py +0 -28
- tomwer/core/process/reconstruction/axis/side.py +8 -0
- tomwer/core/process/reconstruction/darkref/darkrefs.py +14 -39
- tomwer/core/process/reconstruction/darkref/darkrefscopy.py +7 -39
- tomwer/core/process/reconstruction/darkref/params.py +1 -28
- tomwer/core/process/reconstruction/nabu/castvolume.py +19 -34
- tomwer/core/process/reconstruction/nabu/nabucommon.py +18 -43
- tomwer/core/process/reconstruction/nabu/nabuscores.py +64 -68
- tomwer/core/process/reconstruction/nabu/nabuslices.py +63 -105
- tomwer/core/process/reconstruction/nabu/nabuvolume.py +44 -70
- tomwer/core/process/reconstruction/nabu/plane.py +10 -0
- tomwer/core/process/reconstruction/nabu/settings.py +1 -28
- tomwer/core/process/reconstruction/nabu/target.py +0 -28
- tomwer/core/process/reconstruction/nabu/test/test_castvolume.py +116 -0
- tomwer/core/process/reconstruction/nabu/test/test_nabu_utils.py +277 -0
- tomwer/core/process/reconstruction/nabu/test/test_nabunormalization.py +199 -0
- tomwer/core/process/reconstruction/nabu/utils.py +11 -60
- tomwer/core/process/reconstruction/normalization/normalization.py +2 -32
- tomwer/core/process/reconstruction/normalization/params.py +3 -35
- tomwer/core/process/reconstruction/output.py +14 -19
- tomwer/core/process/reconstruction/paramsbase.py +4 -33
- tomwer/core/process/reconstruction/saaxis/params.py +5 -33
- tomwer/core/process/reconstruction/saaxis/saaxis.py +22 -51
- tomwer/core/process/reconstruction/sadeltabeta/params.py +2 -31
- tomwer/core/process/reconstruction/sadeltabeta/sadeltabeta.py +18 -46
- tomwer/core/process/reconstruction/scores/params.py +9 -39
- tomwer/core/process/reconstruction/scores/scores.py +10 -42
- tomwer/core/process/reconstruction/tests/__init__.py +0 -0
- tomwer/core/process/reconstruction/tests/test_axis.py +46 -0
- tomwer/core/process/reconstruction/tests/test_darkref.py +33 -0
- tomwer/core/process/reconstruction/{test → tests}/test_saaxis.py +1 -27
- tomwer/core/process/reconstruction/tests/test_sadeltabeta.py +48 -0
- tomwer/core/process/reconstruction/{test → tests}/test_utils.py +4 -4
- tomwer/core/process/reconstruction/utils/cor.py +8 -4
- tomwer/core/process/script/python.py +1 -27
- tomwer/core/process/script/tests/test_script.py +41 -0
- tomwer/core/process/stitching/metadataholder.py +5 -4
- tomwer/core/process/stitching/nabustitcher.py +35 -5
- tomwer/core/process/stitching/tests/test_metadataholder.py +17 -0
- tomwer/core/process/task.py +20 -63
- tomwer/core/process/tests/__init__.py +0 -0
- tomwer/core/process/{test → tests}/test_conditions.py +1 -28
- tomwer/core/process/{test → tests}/test_dark_and_flat.py +1 -27
- tomwer/core/process/{test → tests}/test_data_listener.py +1 -27
- tomwer/core/process/{test → tests}/test_data_transfer.py +2 -28
- tomwer/core/process/{test → tests}/test_data_watcher.py +1 -27
- tomwer/core/process/{test → tests}/test_nabu.py +2 -33
- tomwer/core/process/{test → tests}/test_normalization.py +1 -26
- tomwer/core/process/{test → tests}/test_timer.py +1 -27
- tomwer/core/process/utils.py +2 -31
- tomwer/core/process/visualization/dataviewer.py +1 -26
- tomwer/core/process/visualization/diffviewer.py +1 -26
- tomwer/core/process/visualization/imagestackviewer.py +0 -26
- tomwer/core/process/visualization/radiostack.py +0 -26
- tomwer/core/process/visualization/samplemoved.py +0 -28
- tomwer/core/process/visualization/sinogramviewer.py +0 -27
- tomwer/core/process/visualization/slicestack.py +0 -28
- tomwer/core/process/visualization/tests/test_data_viewer.py +12 -0
- tomwer/core/process/visualization/tests/test_diff_viewer.py +12 -0
- tomwer/core/process/visualization/tests/test_image_stack_viewer.py +14 -0
- tomwer/core/process/visualization/tests/test_radio_stack.py +12 -0
- tomwer/core/process/visualization/tests/test_sample_moved.py +14 -0
- tomwer/core/process/visualization/tests/test_sinogram_viewer.py +13 -0
- tomwer/core/process/visualization/tests/test_slice_stack.py +13 -0
- tomwer/core/process/visualization/tests/test_volume_viewer.py +12 -0
- tomwer/core/process/visualization/volumeviewer.py +0 -29
- tomwer/core/scan/__init__.py +3 -27
- tomwer/core/scan/blissscan.py +5 -34
- tomwer/core/scan/edfscan.py +19 -53
- tomwer/core/scan/hdf5scan.py +2 -2
- tomwer/core/scan/nxtomoscan.py +48 -54
- tomwer/core/scan/scanbase.py +107 -203
- tomwer/core/scan/scanfactory.py +11 -41
- tomwer/core/scan/tests/__init__.py +0 -0
- tomwer/core/scan/tests/test_edf.py +25 -0
- tomwer/core/scan/tests/test_future_scan.py +35 -0
- tomwer/core/scan/tests/test_nxtomoscan.py +143 -0
- tomwer/core/scan/tests/test_process_registration.py +64 -0
- tomwer/core/settings.py +18 -40
- tomwer/core/tests/__init__.py +0 -0
- tomwer/core/tests/test_scanutils.py +26 -0
- tomwer/core/{test → tests}/test_utils.py +1 -28
- tomwer/core/tomwer_object.py +4 -0
- tomwer/core/utils/__init__.py +2 -0
- tomwer/core/utils/char.py +0 -28
- tomwer/core/utils/deprecation.py +12 -38
- tomwer/core/utils/dictutils.py +1 -3
- tomwer/core/utils/ftseriesutils.py +1 -27
- tomwer/core/utils/gpu.py +0 -28
- tomwer/core/utils/image.py +8 -39
- tomwer/core/utils/locker.py +1 -28
- tomwer/core/utils/logconfig.py +0 -27
- tomwer/core/utils/normalization.py +4 -31
- tomwer/core/utils/nxtomoutils.py +8 -38
- tomwer/core/utils/resource.py +0 -26
- tomwer/core/utils/scanutils.py +23 -52
- tomwer/core/utils/slurm.py +7 -30
- tomwer/core/utils/spec.py +6 -6
- tomwer/core/utils/tests/__init__.py +0 -0
- tomwer/core/utils/tests/test_image.py +30 -0
- tomwer/core/utils/tests/test_nxtomo.py +38 -0
- tomwer/core/utils/tests/test_scan_utils.py +46 -0
- tomwer/core/utils/tests/test_time.py +6 -0
- tomwer/core/utils/threads.py +0 -26
- tomwer/core/utils/time.py +0 -27
- tomwer/core/volume/__init__.py +4 -0
- tomwer/core/volume/edfvolume.py +1 -28
- tomwer/core/volume/hdf5volume.py +1 -28
- tomwer/core/volume/jp2kvolume.py +1 -27
- tomwer/core/volume/rawvolume.py +1 -28
- tomwer/core/volume/tests/test_volumes.py +21 -0
- tomwer/core/volume/tiffvolume.py +1 -28
- tomwer/core/volume/volumebase.py +5 -0
- tomwer/core/volume/volumefactory.py +7 -33
- tomwer/gui/__init__.py +0 -28
- tomwer/gui/cluster/__init__.py +2 -0
- tomwer/gui/cluster/slurm.py +297 -95
- tomwer/gui/cluster/supervisor.py +1 -27
- tomwer/gui/cluster/tests/__init__.py +0 -0
- tomwer/gui/cluster/{test → tests}/test_cluster.py +21 -26
- tomwer/gui/cluster/{test → tests}/test_supervisor.py +1 -27
- tomwer/gui/conditions/__init__.py +2 -0
- tomwer/gui/conditions/filter.py +1 -26
- tomwer/gui/configuration/__init__.py +2 -0
- tomwer/gui/control/__init__.py +2 -0
- tomwer/gui/control/actions.py +2 -28
- tomwer/gui/control/datadiscovery.py +4 -3
- tomwer/gui/control/datalist.py +64 -69
- tomwer/gui/control/datalistener.py +1 -39
- tomwer/gui/control/datareacheractions.py +1 -28
- tomwer/gui/control/datatransfert.py +2 -29
- tomwer/gui/control/datavalidator.py +3 -37
- tomwer/gui/control/datawatcher/__init__.py +0 -28
- tomwer/gui/control/datawatcher/configuration.py +1 -28
- tomwer/gui/control/datawatcher/datawatcher.py +3 -32
- tomwer/gui/control/datawatcher/datawatcherobserver.py +2 -28
- tomwer/gui/control/history.py +5 -35
- tomwer/gui/control/nxtomomill.py +3 -30
- tomwer/gui/control/observations.py +61 -55
- tomwer/gui/control/reducedarkflatselector.py +24 -20
- tomwer/gui/control/scanselectorwidget.py +2 -28
- tomwer/gui/control/selectorwidgetbase.py +17 -17
- tomwer/gui/control/series/__init__.py +0 -0
- tomwer/gui/control/{serie/seriecreator.py → series/seriescreator.py} +214 -235
- tomwer/gui/control/series/serieswaiter.py +0 -0
- tomwer/gui/control/series/test/test_creator.py +424 -0
- tomwer/gui/control/series/test/test_nxtomo_concatenate.py +21 -0
- tomwer/gui/control/singletomoobj.py +1 -1
- tomwer/gui/control/tests/__init__.py +0 -0
- tomwer/gui/control/tests/test_datalist.py +47 -0
- tomwer/gui/control/{test → tests}/test_datalistener.py +1 -28
- tomwer/gui/control/tests/test_datavalidator.py +27 -0
- tomwer/gui/control/{test → tests}/test_inputwidget.py +1 -27
- tomwer/gui/control/tests/test_process_manager.py +38 -0
- tomwer/gui/control/tests/test_scan_observations.py +23 -0
- tomwer/gui/control/tests/test_scanselector.py +42 -0
- tomwer/gui/control/{test → tests}/test_scanvalidator.py +1 -27
- tomwer/gui/control/{test → tests}/test_volume_dialog.py +2 -30
- tomwer/gui/control/{test → tests}/test_volumeselector.py +1 -27
- tomwer/gui/control/volumeselectorwidget.py +2 -30
- tomwer/gui/dataportal/__init__.py +2 -0
- tomwer/gui/{icat → dataportal}/createscreenshots.py +3 -2
- tomwer/gui/dataportal/gallery.py +133 -0
- tomwer/gui/dataportal/outputformat.py +0 -0
- tomwer/gui/dataportal/publish.py +96 -0
- tomwer/gui/dataportal/tests/test_create_screenshots_gui.py +23 -0
- tomwer/gui/dataportal/tests/test_gallery_gui.py +21 -0
- tomwer/gui/debugtools/__init__.py +2 -0
- tomwer/gui/debugtools/datasetgenerator.py +1 -30
- tomwer/gui/debugtools/objectinspector.py +1 -29
- tomwer/gui/dialog/QDataDialog.py +89 -0
- tomwer/gui/{qfolderdialog.py → dialog/QVolumeDialog.py} +8 -107
- tomwer/gui/dialog/__init__.py +1 -0
- tomwer/gui/edit/__init__.py +2 -0
- tomwer/gui/edit/dkrfpatch.py +52 -87
- tomwer/gui/edit/imagekeyeditor.py +18 -54
- tomwer/gui/edit/nxtomoeditor.py +113 -300
- tomwer/gui/edit/nxtomowarmer.py +3 -2
- tomwer/gui/edit/tests/__init__.py +0 -0
- tomwer/gui/edit/{test → tests}/test_dkrf_patch.py +3 -29
- tomwer/gui/edit/{test → tests}/test_image_key_editor.py +1 -27
- tomwer/gui/edit/{test → tests}/test_nx_editor.py +45 -23
- tomwer/gui/fonts.py +5 -0
- tomwer/gui/icons.py +28 -66
- tomwer/gui/illustrations.py +4 -34
- tomwer/gui/imagefromfile.py +5 -30
- tomwer/gui/metadataloader.py +36 -0
- tomwer/gui/qconfigfile.py +3 -0
- tomwer/gui/qlefilesystem.py +3 -0
- tomwer/gui/reconstruction/__init__.py +2 -0
- tomwer/gui/reconstruction/axis/AxisMainWindow.py +275 -0
- tomwer/gui/reconstruction/axis/AxisOptionsWidget.py +313 -0
- tomwer/gui/reconstruction/axis/AxisSettingsWidget.py +797 -0
- tomwer/gui/reconstruction/axis/AxisWidget.py +534 -0
- tomwer/gui/reconstruction/axis/CalculationWidget.py +218 -0
- tomwer/gui/reconstruction/axis/CompareImages.py +11 -44
- tomwer/gui/reconstruction/axis/ControlWidget.py +285 -0
- tomwer/gui/reconstruction/axis/EstimatedCORWidget.py +394 -0
- tomwer/gui/reconstruction/axis/EstimatedCorComboBox.py +118 -0
- tomwer/gui/reconstruction/axis/InputWidget.py +347 -0
- tomwer/gui/reconstruction/axis/ManualFramesSelection.py +168 -0
- tomwer/gui/reconstruction/axis/__init__.py +2 -2
- tomwer/gui/reconstruction/darkref/__init__.py +0 -27
- tomwer/gui/reconstruction/darkref/darkrefcopywidget.py +5 -34
- tomwer/gui/reconstruction/darkref/darkrefwidget.py +1 -27
- tomwer/gui/reconstruction/nabu/castvolume.py +40 -59
- tomwer/gui/reconstruction/nabu/check.py +7 -33
- tomwer/gui/reconstruction/nabu/nabuconfig/base.py +7 -34
- tomwer/gui/reconstruction/nabu/nabuconfig/ctf.py +6 -5
- tomwer/gui/reconstruction/nabu/nabuconfig/nabuconfig.py +10 -69
- tomwer/gui/reconstruction/nabu/nabuconfig/output.py +3 -47
- tomwer/gui/reconstruction/nabu/nabuconfig/phase.py +54 -36
- tomwer/gui/reconstruction/nabu/nabuconfig/preprocessing.py +103 -54
- tomwer/gui/reconstruction/nabu/nabuconfig/reconstruction.py +116 -65
- tomwer/gui/reconstruction/nabu/nabuflow.py +31 -61
- tomwer/gui/reconstruction/nabu/platform.py +94 -0
- tomwer/gui/reconstruction/nabu/slices.py +81 -45
- tomwer/gui/reconstruction/nabu/slurm.py +1 -27
- tomwer/gui/reconstruction/nabu/test/test_cast_volume.py +82 -0
- tomwer/gui/reconstruction/nabu/test/test_check.py +66 -0
- tomwer/gui/reconstruction/nabu/test/test_ctf.py +46 -0
- tomwer/gui/reconstruction/nabu/test/test_helical.py +21 -0
- tomwer/gui/reconstruction/nabu/test/test_nabu_preprocessing.py +81 -0
- tomwer/gui/reconstruction/nabu/volume.py +62 -90
- tomwer/gui/reconstruction/normalization/intensity.py +5 -32
- tomwer/gui/reconstruction/normalization/test/test_intensity.py +89 -0
- tomwer/gui/reconstruction/saaxis/corrangeselector.py +32 -56
- tomwer/gui/reconstruction/saaxis/dimensionwidget.py +56 -96
- tomwer/gui/reconstruction/saaxis/saaxis.py +17 -38
- tomwer/gui/reconstruction/saaxis/sliceselector.py +8 -39
- tomwer/gui/reconstruction/sadeltabeta/saadeltabeta.py +19 -37
- tomwer/gui/reconstruction/scores/control.py +2 -30
- tomwer/gui/reconstruction/scores/scoreplot.py +23 -49
- tomwer/gui/reconstruction/tests/__init__.py +0 -0
- tomwer/gui/reconstruction/{test → tests}/test_axis.py +23 -49
- tomwer/gui/reconstruction/{test → tests}/test_nabu.py +16 -31
- tomwer/gui/reconstruction/{test → tests}/test_saaxis.py +10 -37
- tomwer/gui/reconstruction/{test → tests}/test_sadeltabeta.py +1 -26
- tomwer/gui/samplemoved/__init__.py +2 -30
- tomwer/gui/samplemoved/selectiontable.py +3 -33
- tomwer/gui/settings.py +7 -0
- tomwer/gui/stackplot.py +33 -661
- tomwer/gui/stacks.py +261 -135
- tomwer/gui/stitching/SingleAxisStitchingWidget.py +326 -0
- tomwer/gui/stitching/StitchingOptionsWidget.py +438 -0
- tomwer/gui/stitching/StitchingWindow.py +586 -0
- tomwer/gui/stitching/__init__.py +2 -0
- tomwer/gui/stitching/alignment.py +90 -0
- tomwer/gui/stitching/axisorderedlist.py +44 -34
- tomwer/gui/stitching/config/axisparams.py +25 -11
- tomwer/gui/stitching/config/output.py +6 -5
- tomwer/gui/stitching/config/positionoveraxis.py +313 -51
- tomwer/gui/stitching/config/stitchingstrategies.py +22 -16
- tomwer/gui/stitching/config/tests/test_axisparams.py +25 -0
- tomwer/gui/stitching/config/tomoobjdetails.py +3 -5
- tomwer/gui/stitching/normalization.py +1 -0
- tomwer/gui/stitching/preview.py +59 -0
- tomwer/gui/stitching/singleaxis.py +57 -0
- tomwer/gui/stitching/stitchandbackground.py +3 -2
- tomwer/gui/stitching/stitching_preview.py +44 -36
- tomwer/gui/stitching/stitching_raw.py +5 -3
- tomwer/gui/stitching/tests/test_ZStitchingWindow.py +88 -0
- tomwer/gui/stitching/tests/test_axis_ordered_list.py +21 -0
- tomwer/gui/stitching/tests/test_normalization.py +27 -0
- tomwer/gui/stitching/tests/test_preview.py +68 -0
- tomwer/gui/stitching/tests/test_stitching_raw.py +110 -0
- tomwer/gui/stitching/tests/utils.py +92 -0
- tomwer/gui/stitching/utils.py +14 -0
- tomwer/gui/stitching/z_stitching/fineestimation.py +5 -33
- tomwer/gui/stitching/z_stitching/tests/test_fine_estimation.py +35 -0
- tomwer/gui/stitching/z_stitching/tests/test_raw_estimation.py +215 -0
- tomwer/gui/stitching/z_stitching/tests/test_stitching_window.py +51 -0
- tomwer/gui/tests/__init__.py +0 -0
- tomwer/gui/tests/test_axis_gui.py +43 -0
- tomwer/gui/{test → tests}/test_qfolder_dialog.py +1 -1
- tomwer/gui/utils/RangeWidget.py +44 -0
- tomwer/gui/utils/buttons.py +4 -3
- tomwer/gui/utils/completer.py +2 -33
- tomwer/gui/utils/flow.py +11 -40
- tomwer/gui/utils/gpu.py +60 -0
- tomwer/gui/utils/illustrations.py +1 -26
- tomwer/gui/utils/inputwidget.py +35 -73
- tomwer/gui/utils/lineselector/lineselector.py +9 -46
- tomwer/gui/utils/loadingmode.py +81 -0
- tomwer/gui/utils/qt_utils.py +9 -0
- tomwer/gui/utils/sandboxes.py +1 -26
- tomwer/gui/utils/scandescription.py +2 -31
- tomwer/gui/utils/scrollarea.py +6 -55
- tomwer/gui/utils/slider.py +4 -28
- tomwer/gui/utils/splashscreen.py +0 -28
- tomwer/gui/utils/step.py +14 -13
- tomwer/gui/utils/tests/test_completer.py +41 -0
- tomwer/gui/utils/tests/test_line_selector.py +21 -0
- tomwer/gui/utils/tests/test_splashscreen.py +8 -0
- tomwer/gui/utils/tests/test_vignettes.py +68 -0
- tomwer/gui/utils/unitsystem.py +15 -69
- tomwer/gui/utils/utils.py +4 -5
- tomwer/gui/utils/vignettes.py +10 -41
- tomwer/gui/utils/waiterthread.py +0 -26
- tomwer/gui/visualization/__init__.py +2 -0
- tomwer/gui/visualization/dataviewer.py +68 -421
- tomwer/gui/visualization/diffviewer/diffviewer.py +2 -30
- tomwer/gui/visualization/diffviewer/shiftwidget.py +4 -29
- tomwer/gui/visualization/fullscreenplot.py +5 -5
- tomwer/gui/visualization/imagestack.py +403 -0
- tomwer/gui/visualization/nxtomometadata.py +0 -4
- tomwer/gui/visualization/reconstructionparameters.py +14 -32
- tomwer/gui/visualization/scanoverview.py +33 -66
- tomwer/gui/visualization/sinogramviewer.py +2 -28
- tomwer/gui/visualization/test/__init__.py +0 -28
- tomwer/gui/visualization/test/test_dataviewer.py +1 -28
- tomwer/gui/visualization/test/test_diffviewer.py +1 -28
- tomwer/gui/visualization/test/test_nx_tomo_metadata_viewer.py +0 -5
- tomwer/gui/visualization/test/test_reconstruction_parameters.py +1 -27
- tomwer/gui/visualization/test/test_sinogramviewer.py +1 -28
- tomwer/gui/visualization/test/test_stacks.py +184 -115
- tomwer/gui/visualization/test/test_volumeviewer.py +3 -2
- tomwer/gui/visualization/tomoobjoverview.py +2 -2
- tomwer/gui/visualization/volumeoverview.py +3 -2
- tomwer/gui/visualization/volumeviewer.py +47 -43
- tomwer/io/__init__.py +2 -0
- tomwer/io/utils/h5pyutils.py +1 -27
- tomwer/io/utils/test/test_raw_and_processed_data.py +10 -0
- tomwer/io/utils/test/test_utils.py +67 -0
- tomwer/io/utils/utils.py +2 -31
- tomwer/resources/__init__.py +13 -33
- tomwer/resources/gui/icons/edit_downstream.svg +114 -0
- tomwer/resources/gui/icons/edit_upstream.svg +112 -0
- tomwer/resources/gui/icons/free_edition.svg +23 -0
- tomwer/resources/gui/icons/icat_gallery_opts.png +0 -0
- tomwer/resources/gui/icons/icat_gallery_opts.svg +80 -0
- tomwer/resources/gui/icons/search.png +0 -0
- tomwer/resources/gui/icons/search.svg +23 -0
- tomwer/resources/gui/icons/warning.png +0 -0
- tomwer/synctools/__init__.py +2 -0
- tomwer/synctools/axis.py +1 -27
- tomwer/synctools/darkref.py +1 -26
- tomwer/synctools/datalistener.py +1 -27
- tomwer/synctools/datatransfert.py +2 -27
- tomwer/synctools/imageloaderthread.py +1 -28
- tomwer/synctools/rsyncmanager.py +1 -25
- tomwer/synctools/saaxis.py +1 -26
- tomwer/synctools/sadeltabeta.py +1 -26
- tomwer/synctools/stacks/control/datalistener.py +1 -26
- tomwer/synctools/stacks/processingstack.py +4 -33
- tomwer/synctools/stacks/reconstruction/axis.py +6 -53
- tomwer/synctools/stacks/reconstruction/castvolume.py +12 -43
- tomwer/synctools/stacks/reconstruction/dkrefcopy.py +4 -27
- tomwer/synctools/stacks/reconstruction/nabu.py +3 -28
- tomwer/synctools/stacks/reconstruction/normalization.py +2 -27
- tomwer/synctools/stacks/reconstruction/saaxis.py +2 -27
- tomwer/synctools/stacks/reconstruction/sadeltabeta.py +2 -27
- tomwer/synctools/tests/__init__.py +0 -0
- tomwer/synctools/{test → tests}/test_darkRefs.py +16 -40
- tomwer/synctools/{test → tests}/test_foldertransfer.py +2 -33
- tomwer/synctools/utils/scanstages.py +2 -31
- tomwer/tests/__init__.py +1 -0
- tomwer/tests/app/test_stitching.py +95 -0
- tomwer/tests/datasets.py +1 -5
- tomwer/tests/orangecontrib/tomwer/widgets/cluster/tests/test_future_supervisorow.py +48 -0
- tomwer/tests/orangecontrib/tomwer/widgets/cluster/tests/test_slurm_clusterow.py +40 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_advancement.py +8 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_data_validator.py +55 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_datadiscovery.py +129 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_datalistener.py +111 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_dataselector.py +69 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_datawatcher.py +411 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_emailow.py +29 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_notifier.py +24 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_nxtomo_concatenate_ow.py +64 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_nxtomomill.py +133 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_reduce_dark_flat_selector.py +40 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_singletomoobj.py +40 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_timerow.py +25 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_tomoobj_series.py +96 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_volume_selector.py +69 -0
- orangecontrib/tomwer/widgets/edit/test/test_image_key_editor.py → tomwer/tests/orangecontrib/tomwer/widgets/debugtools/tests/test_dataset_generator.py +17 -16
- tomwer/tests/orangecontrib/tomwer/widgets/debugtools/tests/test_object_inspector.py +36 -0
- {orangecontrib/tomwer/widgets/edit/test → tomwer/tests/orangecontrib/tomwer/widgets/edit/tests}/test_dark_flat_patch.py +1 -27
- tomwer/tests/orangecontrib/tomwer/widgets/edit/tests/test_image_key_editor.py +30 -0
- tomwer/tests/orangecontrib/tomwer/widgets/edit/tests/test_nxtomo_editor.py +138 -0
- tomwer/tests/orangecontrib/tomwer/widgets/other/tests/test_pythonscript.py +31 -0
- tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_axis.py +199 -0
- tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_cast_volumeow.py +58 -0
- tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_dark_refs_widget.py +136 -0
- tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_delta_beta_selector.py +15 -0
- tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_i_norm.py +200 -0
- tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_nabu_helical_prepare_weights_double.py +20 -0
- tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_nabu_volume.py +74 -0
- tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_nabu_widget.py +107 -0
- tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_sa_delta_beta.py +194 -0
- tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_saaxis.py +194 -0
- tomwer/tests/orangecontrib/tomwer/widgets/stitching/tests/test_zstitching.py +313 -0
- tomwer/tests/orangecontrib/tomwer/widgets/tests/test_conditions.py +85 -0
- tomwer/tests/orangecontrib/tomwer/widgets/tests/test_darkref.py +225 -0
- tomwer/tests/orangecontrib/tomwer/widgets/tests/test_foldertransfert.py +105 -0
- tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_dataviewerow.py +57 -0
- tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_diffviewerow.py +39 -0
- tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_nxtomo_metadata_viewer.py +29 -0
- tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_radio_stackow.py +31 -0
- tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_sample_movedow.py +46 -0
- tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_sinogram_viewerow.py +31 -0
- tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_slice_stackow.py +31 -0
- tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_volume_viewerow.py +32 -0
- tomwer/tests/test_ewoks/test_conversion.py +104 -0
- tomwer/tests/test_ewoks/test_single_node_execution.py +87 -0
- tomwer/tests/test_ewoks/test_workflows.py +138 -0
- tomwer/utils.py +11 -39
- tomwer/version.py +2 -2
- {tomwer-1.3.27.dist-info → tomwer-1.4.0.dist-info}/LICENSE +3 -3
- tomwer-1.4.0.dist-info/METADATA +337 -0
- tomwer-1.4.0.dist-info/RECORD +912 -0
- {tomwer-1.3.27.dist-info → tomwer-1.4.0.dist-info}/WHEEL +1 -1
- {tomwer-1.3.27.dist-info → tomwer-1.4.0.dist-info}/entry_points.txt +1 -0
- orangecontrib/tomwer/widgets/control/DataListOW.py +0 -129
- orangecontrib/tomwer/widgets/control/TomoObjSerieOW.py +0 -86
- orangecontrib/tomwer/widgets/control/VolumeSymLinkOW.py +0 -182
- orangecontrib/tomwer/widgets/edit/test/test_nxtomo_editor.py +0 -141
- orangecontrib/tomwer/widgets/icat/PublishProcessedDataOW.py +0 -115
- orangecontrib/tomwer/widgets/icat/RawDataScreenshotCreatorOW.py +0 -98
- orangecontrib/tomwer/widgets/icat/SaveToGalleryAndPublishOW.py +0 -129
- orangecontrib/tomwer/widgets/icat/icons/add_gallery.png +0 -0
- orangecontrib/tomwer/widgets/icat/icons/add_gallery.svg +0 -82
- orangecontrib/tomwer/widgets/icat/icons/raw_screenshots.png +0 -0
- orangecontrib/tomwer/widgets/icat/icons/raw_screenshots.svg +0 -143
- orangecontrib/tomwer/widgets/visualization/LivesliceOW.py +0 -87
- orangecontrib/tomwer/widgets/visualization/icons/liveslice.png +0 -0
- orangecontrib/tomwer/widgets/visualization/icons/liveslice.svg +0 -110
- tomwer/core/log/logger.py +0 -130
- tomwer/core/process/control/test/test_volume_link.py +0 -74
- tomwer/core/process/control/tomoobjserie.py +0 -12
- tomwer/core/process/control/volumesymlink.py +0 -200
- tomwer/core/process/icat/createscreenshots.py +0 -100
- tomwer/core/process/icat/gallery.py +0 -377
- tomwer/core/process/icat/icatbase.py +0 -36
- tomwer/core/process/icat/publish.py +0 -228
- tomwer/core/process/icat/screenshots.py +0 -27
- tomwer/core/process/reconstruction/test/test_darkref.py +0 -60
- tomwer/core/process/reconstruction/test/test_sadeltabeta.py +0 -74
- tomwer/core/process/test/test_axis.py +0 -309
- tomwer/core/process/visualization/liveslice.py +0 -6
- tomwer/core/progress.py +0 -100
- tomwer/core/scan/test/test_edf.py +0 -53
- tomwer/core/scan/test/test_future_scan.py +0 -61
- tomwer/core/scan/test/test_h5.py +0 -96
- tomwer/core/scan/test/test_process_registration.py +0 -109
- tomwer/core/test/test_scanutils.py +0 -53
- tomwer/gui/control/emailnotifier.py +0 -174
- tomwer/gui/control/serie/seriewaiter.py +0 -28
- tomwer/gui/control/test/__init__.py +0 -28
- tomwer/gui/control/test/test_datalist.py +0 -96
- tomwer/gui/control/test/test_datavalidator.py +0 -54
- tomwer/gui/control/test/test_email.py +0 -35
- tomwer/gui/control/test/test_process_manager.py +0 -65
- tomwer/gui/control/test/test_scanselector.py +0 -67
- tomwer/gui/edit/test/__init__.py +0 -28
- tomwer/gui/icat/gallery.py +0 -214
- tomwer/gui/icat/publish.py +0 -187
- tomwer/gui/reconstruction/axis/axis.py +0 -733
- tomwer/gui/reconstruction/axis/radioaxis.py +0 -2467
- tomwer/gui/stitching/stitching.py +0 -1388
- tomwer/gui/test/__init__.py +0 -28
- tomwer/gui/test/test_axis_gui.py +0 -34
- tomwer/synctools/stacks/edit/darkflatpatch.py +0 -169
- tomwer/synctools/stacks/edit/imagekeyeditor.py +0 -135
- tomwer/third_part/WaitingOverlay.py +0 -110
- tomwer-1.3.27-py3.11-nspkg.pth +0 -1
- tomwer-1.3.27.dist-info/METADATA +0 -292
- tomwer-1.3.27.dist-info/RECORD +0 -785
- tomwer-1.3.27.dist-info/namespace_packages.txt +0 -1
- /orangecontrib/tomwer/{widgets/edit/test → tests}/__init__.py +0 -0
- {tomwer/core/process/control/test → orangecontrib/tomwer/tutorials/id16b}/__init__.py +0 -0
- {tomwer/core/process/icat → orangecontrib/tomwer/widgets/cluster/tests}/__init__.py +0 -0
- /orangecontrib/tomwer/widgets/control/icons/{tomoobjserie.png → tomoobjseries.png} +0 -0
- {tomwer/core/process/reconstruction/test → orangecontrib/tomwer/widgets/control/tests}/__init__.py +0 -0
- /orangecontrib/tomwer/widgets/{icat → dataportal}/icons/publish_processed_data.png +0 -0
- /orangecontrib/tomwer/widgets/{icat → dataportal}/icons/publish_processed_data.svg +0 -0
- {tomwer/core/process/test → orangecontrib/tomwer/widgets/debugtools/tests}/__init__.py +0 -0
- {tomwer/core/scan/test → orangecontrib/tomwer/widgets/edit/tests}/__init__.py +0 -0
- {tomwer/core/test → orangecontrib/tomwer/widgets/other/tests}/__init__.py +0 -0
- {tomwer/gui/cluster/test → orangecontrib/tomwer/widgets/reconstruction/tests}/__init__.py +0 -0
- {tomwer/gui/control/serie → orangecontrib/tomwer/widgets/stitching/tests}/__init__.py +0 -0
- {tomwer/gui/icat → orangecontrib/tomwer/widgets/tests}/__init__.py +0 -0
- {tomwer/gui/reconstruction/test → orangecontrib/tomwer/widgets/visualization/tests}/__init__.py +0 -0
- /tomwer/{synctools/stacks/edit → app/stitching}/__init__.py +0 -0
- /tomwer/{synctools/test → core/process/control/tests}/__init__.py +0 -0
- /tomwer/core/process/control/{test → tests}/test_email.py +0 -0
- /tomwer/core/process/control/{test → tests}/test_h52nx_process.py +0 -0
- /tomwer/{third_part → core/process/drac}/__init__.py +0 -0
- /tomwer/core/process/reconstruction/{test → tests}/test_axis_params.py +0 -0
- /tomwer/core/process/reconstruction/{test → tests}/test_darkref_copy.py +0 -0
- /tomwer/core/process/reconstruction/{test → tests}/test_paramsbase.py +0 -0
- /tomwer/core/scan/{test → tests}/test_scan.py +0 -0
- /tomwer/gui/control/{serie → series}/nxtomoconcatenate.py +0 -0
- /tomwer/gui/control/{test → tests}/test_datadiscovery.py +0 -0
- /tomwer/gui/control/{test → tests}/test_reducedarkflat_selector.py +0 -0
- /tomwer/gui/control/{test → tests}/test_single_tomo_obj.py +0 -0
- {orangecontrib/tomwer/widgets/edit/test → tomwer/tests/orangecontrib/tomwer/widgets/edit/tests}/test_image_key_upgrader.py +0 -0
- {tomwer-1.3.27.dist-info → tomwer-1.4.0.dist-info}/top_level.txt +0 -0
tomwer/app/zstitching.py
CHANGED
@@ -1,380 +1,25 @@
|
|
1
1
|
#!/usr/bin/env python
|
2
2
|
# -*- coding: utf-8 -*-
|
3
|
+
"""
|
4
|
+
Application to stitch along z (aka axis 0) a set of scans or reconstructed volumes
|
5
|
+
"""
|
6
|
+
from __future__ import annotations
|
3
7
|
|
4
|
-
import argparse
|
5
|
-
import logging
|
6
|
-
import signal
|
7
8
|
import sys
|
8
|
-
import
|
9
|
-
|
10
|
-
import silx
|
11
|
-
from silx.gui import qt
|
12
|
-
|
13
|
-
from nabu.utils import Progress
|
14
|
-
from nabu.stitching.config import StitchingType
|
15
|
-
|
16
|
-
from tomwer.core.settings import SlurmSettingsMode
|
17
|
-
from tomwer.core.utils.resource import increase_max_number_file
|
18
|
-
from tomwer.gui import icons
|
19
|
-
from tomwer.core.process.stitching.nabustitcher import StitcherTask
|
20
|
-
from tomwer.io.utils.tomoobj import get_tomo_objs_instances
|
21
|
-
from tomwer.gui.utils.splashscreen import getMainSplashScreen
|
22
|
-
from tomwer.gui.stitching.stitching import ZStitchingWindow as _ZStitchingWindow
|
23
|
-
from tomwer.gui.stitching import action as stitching_action
|
24
|
-
from tomwer.gui.cluster.slurm import SlurmSettingsWidget
|
25
|
-
from tomwer.core.scan.scanbase import TomwerScanBase
|
9
|
+
import logging
|
10
|
+
from tomwer.app.stitching.common import main as common_main
|
26
11
|
|
27
12
|
logging.basicConfig(level=logging.WARNING)
|
28
13
|
|
29
14
|
_logger = logging.getLogger(__name__)
|
30
15
|
|
31
16
|
|
32
|
-
class MainWidget(qt.QTabWidget):
|
33
|
-
DEFAULT_NB_WORKERS = 10
|
34
|
-
|
35
|
-
def __init__(
|
36
|
-
self,
|
37
|
-
parent=None,
|
38
|
-
) -> None:
|
39
|
-
super().__init__(parent)
|
40
|
-
self._stitchingConfigWindow = _ZStitchingWindow(
|
41
|
-
parent=self, with_configuration_action=False
|
42
|
-
)
|
43
|
-
self.addTab(self._stitchingConfigWindow, "stitching config")
|
44
|
-
settingsClass = SlurmSettingsMode.get_settings_class(
|
45
|
-
SlurmSettingsMode.STITCHING
|
46
|
-
)
|
47
|
-
self._slurmConfig = SlurmSettingsWidget(
|
48
|
-
parent=self, n_gpu=settingsClass.N_GPUS_PER_WORKER, jobLimitation=None
|
49
|
-
)
|
50
|
-
self._slurmConfig.setConfiguration(
|
51
|
-
{
|
52
|
-
"cpu-per-task": settingsClass.N_CORES_PER_TASK,
|
53
|
-
"n_tasks": settingsClass.N_TASKS,
|
54
|
-
"n_jobs": settingsClass.N_JOBS,
|
55
|
-
"memory": settingsClass.MEMORY_PER_WORKER,
|
56
|
-
"partition": settingsClass.PARTITION,
|
57
|
-
"n_gpus": settingsClass.N_GPUS_PER_WORKER,
|
58
|
-
"job_name": settingsClass.PROJECT_NAME,
|
59
|
-
"python_venv": settingsClass.PYTHON_VENV,
|
60
|
-
}
|
61
|
-
)
|
62
|
-
|
63
|
-
self._stitchingConfigWindow.setCallbackToGetSlurmConfig(
|
64
|
-
self._slurmConfig.getConfiguration
|
65
|
-
)
|
66
|
-
self._stitchingConfigWindow.setCallbackToSetSlurmConfig(
|
67
|
-
self._slurmConfig.setConfiguration
|
68
|
-
)
|
69
|
-
self.addTab(self._slurmConfig, "slurm config")
|
70
|
-
# add an option to clearly activate / deactivate slurm config
|
71
|
-
slurm_config_idx = self.indexOf(self._slurmConfig)
|
72
|
-
self._slurmCB = qt.QCheckBox(self)
|
73
|
-
self.tabBar().setTabButton(
|
74
|
-
slurm_config_idx,
|
75
|
-
qt.QTabBar.LeftSide,
|
76
|
-
self._slurmCB,
|
77
|
-
)
|
78
|
-
self._slurmCB.setChecked(True)
|
79
|
-
|
80
|
-
# set up
|
81
|
-
self._slurmConfig.setNWorkers(self.DEFAULT_NB_WORKERS)
|
82
|
-
|
83
|
-
def close(self):
|
84
|
-
self._stitchingConfigWindow.close()
|
85
|
-
# requested for the waiting plot update
|
86
|
-
super().close()
|
87
|
-
|
88
|
-
def keyPressEvent(self, event):
|
89
|
-
"""
|
90
|
-
To shortcut orange and make sure the `F5` <=> refresh stitching preview
|
91
|
-
"""
|
92
|
-
modifiers = event.modifiers()
|
93
|
-
key = event.key()
|
94
|
-
|
95
|
-
if key == qt.Qt.Key_F5:
|
96
|
-
self._stitchingConfigWindow._trigger_update_preview()
|
97
|
-
elif key == qt.Qt.Key_O and modifiers == qt.Qt.KeyboardModifier.ControlModifier:
|
98
|
-
self._stitchingConfigWindow._loadSettings()
|
99
|
-
elif key == qt.Qt.Key_S and modifiers == qt.Qt.KeyboardModifier.ControlModifier:
|
100
|
-
self._stitchingConfigWindow._saveSettings()
|
101
|
-
|
102
|
-
def getStitchingConfiguration(self) -> dict:
|
103
|
-
return self._stitchingConfigWindow.getConfiguration()
|
104
|
-
|
105
|
-
def getClusterConfig(self) -> dict:
|
106
|
-
return self._slurmConfig.getConfiguration()
|
107
|
-
|
108
|
-
# expose API
|
109
|
-
def addTomoObj(self, *args, **kwargs):
|
110
|
-
self._stitchingConfigWindow.addTomoObj(*args, **kwargs)
|
111
|
-
|
112
|
-
def setStitchingType(self, stitching_type):
|
113
|
-
self._stitchingConfigWindow.setStitchingType(stitching_type)
|
114
|
-
|
115
|
-
def loadSettings(self, config_file):
|
116
|
-
self._stitchingConfigWindow._loadSettings(config_file)
|
117
|
-
|
118
|
-
|
119
|
-
class _StitcherThread(qt.QThread):
|
120
|
-
def __init__(self, parent, stitching_config, cluster_config) -> None:
|
121
|
-
super().__init__(parent)
|
122
|
-
assert isinstance(stitching_config, dict)
|
123
|
-
assert isinstance(cluster_config, dict)
|
124
|
-
self._stitching_config = stitching_config
|
125
|
-
self._cluster_config = cluster_config
|
126
|
-
|
127
|
-
def run(self):
|
128
|
-
task = StitcherTask(
|
129
|
-
inputs={
|
130
|
-
"stitching_config": self._stitching_config,
|
131
|
-
"cluster_config": self._cluster_config,
|
132
|
-
"progress": Progress("stitching"),
|
133
|
-
"serialize_output_data": False,
|
134
|
-
},
|
135
|
-
)
|
136
|
-
|
137
|
-
if self._cluster_config in (None, {}):
|
138
|
-
self._runLocally(task)
|
139
|
-
else:
|
140
|
-
self._runRemotly(task)
|
141
|
-
|
142
|
-
def _runLocally(self, task):
|
143
|
-
task.run()
|
144
|
-
|
145
|
-
def _runRemotly(self, task):
|
146
|
-
task.run()
|
147
|
-
# wait for processing to be finished
|
148
|
-
for future in task.outputs.future_tomo_obj.futures:
|
149
|
-
future.result()
|
150
|
-
# note: there is also a callback to aggregate result once all are finished.
|
151
|
-
# so at this stage the final "nxtomo" or "volume" might not exists yet
|
152
|
-
print("Add slurm job finished.")
|
153
|
-
|
154
|
-
|
155
|
-
class MainWindow(qt.QDialog):
|
156
|
-
def __init__(self, parent=None) -> None:
|
157
|
-
super().__init__(parent)
|
158
|
-
self.setLayout(qt.QVBoxLayout())
|
159
|
-
# menu
|
160
|
-
self._menuBar = qt.QMenuBar(self)
|
161
|
-
self.layout().addWidget(self._menuBar)
|
162
|
-
self._menu = qt.QMenu("&Stitching")
|
163
|
-
self._menuBar.addMenu(self._menu)
|
164
|
-
# save / load configuration
|
165
|
-
self._loadConfigurationAction = stitching_action.LoadConfigurationAction(
|
166
|
-
self, "&Load configuration"
|
167
|
-
)
|
168
|
-
self._menu.addAction(self._loadConfigurationAction)
|
169
|
-
self._saveConfigurationAction = stitching_action.SaveConfigurationAction(
|
170
|
-
self, "&Save configuration"
|
171
|
-
)
|
172
|
-
self._menu.addAction(self._saveConfigurationAction)
|
173
|
-
# separator
|
174
|
-
self._menu.addSeparator()
|
175
|
-
# add tomo object
|
176
|
-
self._addTomoObjectAction = stitching_action.AddTomoObjectAction(
|
177
|
-
self, "&Add tomo object (volume or NXtomo)"
|
178
|
-
)
|
179
|
-
self._menu.addAction(self._addTomoObjectAction)
|
180
|
-
|
181
|
-
# main window
|
182
|
-
self.setWindowTitle("tomwer z-stitching")
|
183
|
-
self._mainWindow = MainWidget(parent=self)
|
184
|
-
self.layout().addWidget(self._mainWindow)
|
185
|
-
|
186
|
-
# button
|
187
|
-
types = qt.QDialogButtonBox.Apply
|
188
|
-
self._buttons = qt.QDialogButtonBox(self)
|
189
|
-
self._buttons.setStandardButtons(types)
|
190
|
-
self.layout().addWidget(self._buttons)
|
191
|
-
self._buttons.button(qt.QDialogButtonBox.Apply).setText("Launch stitching")
|
192
|
-
|
193
|
-
# connect signal / slot
|
194
|
-
self._buttons.button(qt.QDialogButtonBox.Apply).clicked.connect(self.accept)
|
195
|
-
self._loadConfigurationAction.triggered.connect(
|
196
|
-
functools.partial(
|
197
|
-
self._mainWindow._stitchingConfigWindow._loadSettings, file_path=None
|
198
|
-
)
|
199
|
-
)
|
200
|
-
self._saveConfigurationAction.triggered.connect(
|
201
|
-
functools.partial(
|
202
|
-
self._mainWindow._stitchingConfigWindow._saveSettings, file_path=None
|
203
|
-
)
|
204
|
-
)
|
205
|
-
self._addTomoObjectAction.triggered.connect(self._callbackAddTomoObj)
|
206
|
-
|
207
|
-
def _callbackAddTomoObj(self, *args, **kwargs):
|
208
|
-
"""move interface to the z-ordered list and call the 'add tomo obj' callback"""
|
209
|
-
orderedListWidget = (
|
210
|
-
self._mainWindow._stitchingConfigWindow._widget._mainWidget._zOrderedList
|
211
|
-
)
|
212
|
-
self._mainWindow._stitchingConfigWindow._widget._mainWidget.setCurrentWidget(
|
213
|
-
orderedListWidget
|
214
|
-
)
|
215
|
-
orderedListWidget._callbackAddTomoObj()
|
216
|
-
|
217
|
-
def close(self):
|
218
|
-
self._mainWindow.close()
|
219
|
-
# requested for the waiting plot update
|
220
|
-
super().close()
|
221
|
-
|
222
|
-
def reject(self):
|
223
|
-
self.close()
|
224
|
-
super().reject()
|
225
|
-
|
226
|
-
def accept(self):
|
227
|
-
self.process_stitching()
|
228
|
-
|
229
|
-
def process_stitching(self):
|
230
|
-
self._processingThread = _StitcherThread(
|
231
|
-
parent=self,
|
232
|
-
stitching_config=self.getStitchingConfiguration(),
|
233
|
-
cluster_config=self.getClusterConfig(),
|
234
|
-
)
|
235
|
-
self._processingThread.start()
|
236
|
-
|
237
|
-
def disableSlurmconfig(self):
|
238
|
-
self._mainWindow._slurmCB.setChecked(False)
|
239
|
-
self._mainWindow._slurmCB.setCheckable(False)
|
240
|
-
|
241
|
-
slurm_config_idx = self._mainWindow.indexOf(self._mainWindow._slurmConfig)
|
242
|
-
|
243
|
-
self._mainWindow.setTabEnabled(
|
244
|
-
slurm_config_idx,
|
245
|
-
False,
|
246
|
-
)
|
247
|
-
self._mainWindow.setTabToolTip(
|
248
|
-
slurm_config_idx,
|
249
|
-
"not available because unable to find slurm command (computer is probably not a slurm client ?",
|
250
|
-
)
|
251
|
-
|
252
|
-
# expose API
|
253
|
-
def addTomoObj(self, *args, **kwargs):
|
254
|
-
self._mainWindow.addTomoObj(*args, **kwargs)
|
255
|
-
|
256
|
-
def getClusterConfig(self) -> dict:
|
257
|
-
if self._mainWindow._slurmCB.isChecked():
|
258
|
-
return self._mainWindow.getClusterConfig()
|
259
|
-
else:
|
260
|
-
return {}
|
261
|
-
|
262
|
-
def getStitchingConfiguration(self) -> dict:
|
263
|
-
return self._mainWindow.getStitchingConfiguration()
|
264
|
-
|
265
|
-
def setStitchingType(self, stitching_type):
|
266
|
-
self._mainWindow.setStitchingType(stitching_type)
|
267
|
-
|
268
|
-
def loadSettings(self, config_file: str):
|
269
|
-
self._mainWindow.loadSettings(config_file)
|
270
|
-
|
271
|
-
|
272
|
-
def main(argv):
|
273
|
-
parser = argparse.ArgumentParser(description=__doc__)
|
274
|
-
parser.add_argument(
|
275
|
-
"tomo_objs",
|
276
|
-
help="All tomo objects to be stitched together",
|
277
|
-
nargs="*",
|
278
|
-
)
|
279
|
-
parser.add_argument(
|
280
|
-
"--debug",
|
281
|
-
dest="debug",
|
282
|
-
action="store_true",
|
283
|
-
default=False,
|
284
|
-
help="Set logging system in debug mode",
|
285
|
-
)
|
286
|
-
|
287
|
-
parser.add_argument(
|
288
|
-
"--config",
|
289
|
-
"--config-file",
|
290
|
-
dest="config_file",
|
291
|
-
default=None,
|
292
|
-
help="Provide stitching configuration file to load parameters from it",
|
293
|
-
)
|
294
|
-
parser.add_argument(
|
295
|
-
"--use-opengl-plot",
|
296
|
-
help="Use OpenGL for plots (instead of matplotlib)",
|
297
|
-
action="store_true",
|
298
|
-
default=False,
|
299
|
-
)
|
300
|
-
parser.add_argument(
|
301
|
-
"--check-scans",
|
302
|
-
help="If True will check scans before adding them. This check scan validity (virtual dataset contains data...)",
|
303
|
-
action="store_true",
|
304
|
-
default=False,
|
305
|
-
)
|
306
|
-
options = parser.parse_args(argv[1:])
|
307
|
-
|
308
|
-
if options.use_opengl_plot:
|
309
|
-
silx.config.DEFAULT_PLOT_BACKEND = "gl"
|
310
|
-
else:
|
311
|
-
silx.config.DEFAULT_PLOT_BACKEND = "matplotlib"
|
312
|
-
|
313
|
-
if options.debug:
|
314
|
-
logging.root.setLevel(logging.DEBUG)
|
315
|
-
|
316
|
-
increase_max_number_file()
|
317
|
-
|
318
|
-
global app # QApplication must be global to avoid seg fault on quit
|
319
|
-
app = qt.QApplication.instance() or qt.QApplication(["tomwer"])
|
320
|
-
splash = getMainSplashScreen()
|
321
|
-
qt.QApplication.processEvents()
|
322
|
-
|
323
|
-
qt.QLocale.setDefault(qt.QLocale(qt.QLocale.English))
|
324
|
-
qt.QLocale.setDefault(qt.QLocale.c())
|
325
|
-
signal.signal(signal.SIGINT, sigintHandler)
|
326
|
-
sys.excepthook = qt.exceptionHandler
|
327
|
-
|
328
|
-
timer = qt.QTimer()
|
329
|
-
timer.start(500)
|
330
|
-
# Application have to wake up Python interpreter, else SIGINT is not
|
331
|
-
# catch
|
332
|
-
timer.timeout.connect(lambda: None)
|
333
|
-
|
334
|
-
window = MainWindow()
|
335
|
-
window.setWindowFlags(qt.Qt.Window)
|
336
|
-
window.setWindowTitle("tomwer: z-stitching")
|
337
|
-
window.setWindowIcon(icons.getQIcon("tomwer"))
|
338
|
-
|
339
|
-
window.show()
|
340
|
-
from sluurp.utils import has_sbatch_available
|
341
|
-
|
342
|
-
# load configuration is some provided
|
343
|
-
if options.config_file is not None:
|
344
|
-
window.loadSettings(options.config_file)
|
345
|
-
|
346
|
-
if not has_sbatch_available():
|
347
|
-
window.disableSlurmconfig()
|
348
|
-
|
349
|
-
tomo_objs, (has_scans, has_vols) = get_tomo_objs_instances(options.tomo_objs)
|
350
|
-
for tomo_obj in tomo_objs:
|
351
|
-
if isinstance(tomo_obj, TomwerScanBase):
|
352
|
-
tomo_obj.set_check_behavior(
|
353
|
-
run_check=options.check_scans
|
354
|
-
) # speed up processing
|
355
|
-
window.addTomoObj(tomo_obj=tomo_obj)
|
356
|
-
if has_scans and has_vols:
|
357
|
-
_logger.warning(
|
358
|
-
"seems like you have both volumes and scan on your inputs. Unable to stitch the two at the same time"
|
359
|
-
)
|
360
|
-
elif has_scans:
|
361
|
-
window.setStitchingType(StitchingType.Z_PREPROC)
|
362
|
-
elif has_vols:
|
363
|
-
window.setStitchingType(StitchingType.Z_POSTPROC)
|
364
|
-
|
365
|
-
window.setAttribute(qt.Qt.WA_DeleteOnClose)
|
366
|
-
splash.finish(window)
|
367
|
-
exit(app.exec_())
|
368
|
-
|
369
|
-
|
370
17
|
def getinputinfo():
|
371
18
|
return "tomwer z-stitching [tomo objects]"
|
372
19
|
|
373
20
|
|
374
|
-
def
|
375
|
-
""
|
376
|
-
qt.QApplication.closeAllWindows() # needed because get a waiting thread behind
|
377
|
-
qt.QApplication.quit()
|
21
|
+
def main(argv):
|
22
|
+
common_main(argv, stitcher_name="z-stitching", stitching_axis=0, logger=_logger)
|
378
23
|
|
379
24
|
|
380
25
|
if __name__ == "__main__":
|
tomwer/core/__init__.py
CHANGED
@@ -1,28 +1,2 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
#
|
4
|
-
# Copyright (c) 2016-2017 European Synchrotron Radiation Facility
|
5
|
-
#
|
6
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
-
# of this software and associated documentation files (the "Software"), to deal
|
8
|
-
# in the Software without restriction, including without limitation the rights
|
9
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
-
# copies of the Software, and to permit persons to whom the Software is
|
11
|
-
# furnished to do so, subject to the following conditions:
|
12
|
-
#
|
13
|
-
# The above copyright notice and this permission notice shall be included in
|
14
|
-
# all copies or substantial portions of the Software.
|
15
|
-
#
|
16
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
|
-
# THE SOFTWARE.
|
23
|
-
#
|
24
|
-
# ###########################################################################*/
|
25
|
-
|
26
|
-
__author__ = ["H. Payno"]
|
27
|
-
__license__ = "MIT"
|
28
|
-
__date__ = "02/06/2017"
|
1
|
+
"""This package contains all the core functions / classes of tomwer
|
2
|
+
"""
|
tomwer/core/cluster/__init__.py
CHANGED
tomwer/core/cluster/cluster.py
CHANGED
@@ -1,35 +1,10 @@
|
|
1
1
|
# coding: utf-8
|
2
|
-
# /*##########################################################################
|
3
|
-
# Copyright (C) 2017-2021 European Synchrotron Radiation Facility
|
4
|
-
#
|
5
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
-
# of this software and associated documentation files (the "Software"), to deal
|
7
|
-
# in the Software without restriction, including without limitation the rights
|
8
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
-
# copies of the Software, and to permit persons to whom the Software is
|
10
|
-
# furnished to do so, subject to the following conditions:
|
11
|
-
#
|
12
|
-
# The above copyright notice and this permission notice shall be included in
|
13
|
-
# all copies or substantial portions of the Software.
|
14
|
-
#
|
15
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
-
# THE SOFTWARE.
|
22
|
-
#
|
23
|
-
#############################################################################*/
|
24
2
|
|
25
3
|
"""
|
26
4
|
Contains processing relative to a `Slurmcluster`
|
27
5
|
"""
|
28
6
|
|
29
|
-
|
30
|
-
__license__ = "MIT"
|
31
|
-
__date__ = "12/10/2021"
|
32
|
-
|
7
|
+
from __future__ import annotations
|
33
8
|
|
34
9
|
import logging
|
35
10
|
from tomwer.core.settings import SlurmSettings as _SlurmSettings
|
@@ -48,6 +23,7 @@ class SlurmClusterConfiguration:
|
|
48
23
|
queue=_SlurmSettings.PARTITION,
|
49
24
|
n_gpus=_SlurmSettings.N_GPUS_PER_WORKER,
|
50
25
|
project_name=_SlurmSettings.PROJECT_NAME,
|
26
|
+
walltime=_SlurmSettings.DEFAULT_WALLTIME,
|
51
27
|
python_venv=_SlurmSettings.PYTHON_VENV,
|
52
28
|
n_jobs=_SlurmSettings.N_JOBS,
|
53
29
|
modules_to_load: tuple = _SlurmSettings.MODULES_TO_LOAD,
|
@@ -59,6 +35,7 @@ class SlurmClusterConfiguration:
|
|
59
35
|
self._queue = queue
|
60
36
|
self._n_gpus = n_gpus
|
61
37
|
self._project_name = project_name
|
38
|
+
self._walltime = walltime
|
62
39
|
self._python_venv = python_venv
|
63
40
|
self._modules_to_load = modules_to_load
|
64
41
|
self._n_jobs = n_jobs
|
@@ -96,6 +73,10 @@ class SlurmClusterConfiguration:
|
|
96
73
|
def project_name(self):
|
97
74
|
return self._project_name
|
98
75
|
|
76
|
+
@property
|
77
|
+
def walltime(self):
|
78
|
+
return self._walltime
|
79
|
+
|
99
80
|
@property
|
100
81
|
def python_venv(self):
|
101
82
|
return self._python_venv
|
@@ -126,6 +107,7 @@ class SlurmClusterConfiguration:
|
|
126
107
|
"partition": self.queue,
|
127
108
|
"n_gpus": self.n_gpus,
|
128
109
|
"job_name": self.project_name,
|
110
|
+
"walltime": self.walltime,
|
129
111
|
"python_venv": self.python_venv,
|
130
112
|
"modules": self.modules_to_load,
|
131
113
|
"sbatch_extra_params": self.sbatch_extra_params,
|
@@ -150,6 +132,8 @@ class SlurmClusterConfiguration:
|
|
150
132
|
self._n_gpus = dict_["n_gpus"]
|
151
133
|
if "job_name" in dict_:
|
152
134
|
self._project_name = dict_["job_name"]
|
135
|
+
if "walltime" in dict_:
|
136
|
+
self._walltime = dict_["walltime"]
|
153
137
|
if "python_venv" in dict_:
|
154
138
|
self._python_venv = dict_["python_venv"]
|
155
139
|
modules = dict_.get("modules", None)
|
tomwer/core/futureobject.py
CHANGED
@@ -1,36 +1,11 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
# Copyright (C) 2016 European Synchrotron Radiation Facility
|
4
|
-
#
|
5
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
-
# of this software and associated documentation files (the "Software"), to deal
|
7
|
-
# in the Software without restriction, including without limitation the rights
|
8
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
-
# copies of the Software, and to permit persons to whom the Software is
|
10
|
-
# furnished to do so, subject to the following conditions:
|
11
|
-
#
|
12
|
-
# The above copyright notice and this permission notice shall be included in
|
13
|
-
# all copies or substantial portions of the Software.
|
14
|
-
#
|
15
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
-
# THE SOFTWARE.
|
22
|
-
#
|
23
|
-
#############################################################################*/
|
24
|
-
|
25
|
-
|
26
|
-
__authors__ = ["H.Payno"]
|
27
|
-
__license__ = "MIT"
|
28
|
-
__date__ = "09/10/2021"
|
1
|
+
"""contains 'FutureTomwerObject'. Class used when computation is done asynchronously (when submitted to slurm for example)
|
2
|
+
"""
|
29
3
|
|
4
|
+
from __future__ import annotations
|
30
5
|
|
31
6
|
import datetime
|
32
7
|
import logging
|
33
|
-
from typing import Iterable
|
8
|
+
from typing import Iterable
|
34
9
|
|
35
10
|
from sluurp.job import get_job_status, cancel_slurm_job
|
36
11
|
|
@@ -44,13 +19,12 @@ class FutureTomwerObject:
|
|
44
19
|
"""Container for an existing TomwerScanBase with some future object
|
45
20
|
(like slice reconstruction on slurm...)
|
46
21
|
|
47
|
-
:param
|
48
|
-
:param
|
22
|
+
:param scan: scan at the origin of the FutureTomwerScan
|
23
|
+
:param futures: tuple of Future
|
49
24
|
:param start_time: start_time of the FutureTomwerScan. If not provided
|
50
25
|
this will be set to the date of creation of the object.
|
51
|
-
:
|
52
|
-
|
53
|
-
processing. This is usefull to keep a trace on
|
26
|
+
:param process_requester_id: process of the id requesting future
|
27
|
+
processing. This is useful to keep a trace on
|
54
28
|
the source of the computation. To display
|
55
29
|
supervisor 'request' for example.
|
56
30
|
"""
|
@@ -58,9 +32,9 @@ class FutureTomwerObject:
|
|
58
32
|
def __init__(
|
59
33
|
self,
|
60
34
|
tomo_obj: TomwerObject,
|
61
|
-
futures:
|
62
|
-
start_time:
|
63
|
-
process_requester_id:
|
35
|
+
futures: tuple | list | None,
|
36
|
+
start_time: datetime.time | None = None,
|
37
|
+
process_requester_id: int | None = None,
|
64
38
|
):
|
65
39
|
if not isinstance(tomo_obj, TomwerObject):
|
66
40
|
raise TypeError(
|
@@ -83,11 +57,11 @@ class FutureTomwerObject:
|
|
83
57
|
self._futures = list(futures)
|
84
58
|
|
85
59
|
@property
|
86
|
-
def job_id(self) ->
|
60
|
+
def job_id(self) -> int | None:
|
87
61
|
return self._job_id
|
88
62
|
|
89
63
|
@property
|
90
|
-
def status(self) ->
|
64
|
+
def status(self) -> str | None:
|
91
65
|
all_status = [
|
92
66
|
get_job_status(fut.job_id) if hasattr(fut, "job_id") else "unknown"
|
93
67
|
for fut in self._futures
|
@@ -120,7 +94,7 @@ class FutureTomwerObject:
|
|
120
94
|
)
|
121
95
|
|
122
96
|
@property
|
123
|
-
def start_time(self) ->
|
97
|
+
def start_time(self) -> datetime.time | None:
|
124
98
|
return self._start_time
|
125
99
|
|
126
100
|
@property
|
@@ -129,7 +103,7 @@ class FutureTomwerObject:
|
|
129
103
|
return self._tomo_obj
|
130
104
|
|
131
105
|
@property
|
132
|
-
def futures(self) ->
|
106
|
+
def futures(self) -> tuple | None:
|
133
107
|
if self._futures is None:
|
134
108
|
return None
|
135
109
|
else:
|
@@ -143,7 +117,7 @@ class FutureTomwerObject:
|
|
143
117
|
self._futures.extend(futures)
|
144
118
|
|
145
119
|
@property
|
146
|
-
def process_requester_id(self) ->
|
120
|
+
def process_requester_id(self) -> int | None:
|
147
121
|
return self._process_requester_id
|
148
122
|
|
149
123
|
def results(self) -> TomwerScanBase:
|
@@ -164,7 +138,7 @@ class FutureTomwerObject:
|
|
164
138
|
done = done and future.done()
|
165
139
|
return done
|
166
140
|
|
167
|
-
def exceptions(self) ->
|
141
|
+
def exceptions(self) -> dict | None:
|
168
142
|
"""
|
169
143
|
Return exception with future as key and exception as value
|
170
144
|
"""
|
tomwer/core/log/__init__.py
CHANGED
tomwer/core/log/processlog.py
CHANGED
@@ -1,36 +1,8 @@
|
|
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
2
|
"""
|
26
3
|
Simple logs levels definition relative to process status
|
27
4
|
"""
|
28
5
|
|
29
|
-
|
30
|
-
__authors__ = ["H. Payno"]
|
31
|
-
__license__ = "MIT"
|
32
|
-
__date__ = "02/10/2020"
|
33
|
-
|
34
6
|
import logging
|
35
7
|
|
36
8
|
PROCESS_STARTED_NAME = "PROCESS_STARTED"
|