tomwer 1.3.26__py3-none-any.whl → 1.4.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- orangecontrib/tomwer/orange/managedprocess.py +1 -29
- orangecontrib/tomwer/orange/settings.py +2 -28
- orangecontrib/tomwer/tests/TestAcquisition.py +220 -0
- orangecontrib/tomwer/tutorials/append_raw_darks_and_flats_frames_to_NXtomos.ows +2 -2
- orangecontrib/tomwer/tutorials/copy_reduced_darks_and_flats_meth1.ows +1 -1
- orangecontrib/tomwer/tutorials/{icat_publication.ows → drac_publication.ows} +7 -21
- orangecontrib/tomwer/tutorials/id16b/ID16b_full_volume.ows +22 -0
- orangecontrib/tomwer/tutorials/id16b/ID16b_insitu.ows +302 -0
- orangecontrib/tomwer/tutorials/id16b/ID16b_normalization.ows +218 -0
- orangecontrib/tomwer/tutorials/simple_volume_to_slurm_reconstruction.ows +29 -24
- orangecontrib/tomwer/tutorials/test_cor.ows +19 -0
- orangecontrib/tomwer/tutorials/volume_casting_on_slurm.ows +54 -0
- orangecontrib/tomwer/widgets/__init__.py +3 -5
- orangecontrib/tomwer/widgets/cluster/FutureSupervisorOW.py +35 -54
- orangecontrib/tomwer/widgets/cluster/SlurmClusterOW.py +1 -31
- orangecontrib/tomwer/widgets/control/AdvancementOW.py +1 -29
- orangecontrib/tomwer/widgets/control/DataDiscoveryOW.py +5 -4
- orangecontrib/tomwer/widgets/control/DataListenerOW.py +1 -29
- orangecontrib/tomwer/widgets/control/DataSelectorOW.py +11 -30
- orangecontrib/tomwer/widgets/control/DataTransfertOW.py +2 -28
- orangecontrib/tomwer/widgets/control/DataValidatorOW.py +1 -28
- orangecontrib/tomwer/widgets/control/DataWatcherOW.py +1 -28
- orangecontrib/tomwer/widgets/control/EDF2NXTomomillOW.py +48 -51
- orangecontrib/tomwer/widgets/control/EmailOW.py +12 -2
- orangecontrib/tomwer/widgets/control/FilterOW.py +1 -28
- orangecontrib/tomwer/widgets/control/NXTomomillOW.py +37 -53
- orangecontrib/tomwer/widgets/control/NXtomoConcatenate.py +21 -20
- orangecontrib/tomwer/widgets/control/NotifierOW.py +9 -28
- orangecontrib/tomwer/widgets/control/ReduceDarkFlatSelectorOW.py +3 -2
- orangecontrib/tomwer/widgets/control/SingleTomoObjOW.py +1 -27
- orangecontrib/tomwer/widgets/control/TimerOW.py +9 -28
- orangecontrib/tomwer/widgets/control/TomoObjSeriesOW.py +58 -0
- orangecontrib/tomwer/widgets/control/VolumeSelector.py +8 -30
- orangecontrib/tomwer/widgets/control/icons/nxtomomill.svg +173 -119
- orangecontrib/tomwer/widgets/control/icons/reduced_darkflat_selector.png +0 -0
- orangecontrib/tomwer/widgets/control/icons/reduced_darkflat_selector.svg +55 -195
- orangecontrib/tomwer/widgets/control/icons/{tomoobjserie.svg → tomoobjseries.svg} +2 -2
- orangecontrib/tomwer/widgets/dataportal/PublishProcessedDataOW.py +172 -0
- orangecontrib/tomwer/widgets/{icat → dataportal}/__init__.py +2 -2
- orangecontrib/tomwer/widgets/debugtools/DatasetGeneratorOW.py +2 -29
- orangecontrib/tomwer/widgets/debugtools/ObjectInspectorOW.py +1 -29
- orangecontrib/tomwer/widgets/edit/DarkFlatPatchOW.py +48 -73
- orangecontrib/tomwer/widgets/edit/ImageKeyEditorOW.py +48 -75
- orangecontrib/tomwer/widgets/edit/ImageKeyUpgraderOW.py +5 -30
- orangecontrib/tomwer/widgets/edit/NXtomoEditorOW.py +51 -52
- orangecontrib/tomwer/widgets/other/PythonScriptOW.py +22 -10
- orangecontrib/tomwer/widgets/reconstruction/AxisOW.py +51 -60
- orangecontrib/tomwer/widgets/reconstruction/CastNabuVolumeOW.py +22 -68
- orangecontrib/tomwer/widgets/reconstruction/DarkRefAndCopyOW.py +3 -30
- orangecontrib/tomwer/widgets/reconstruction/NabuHelicalPrepareWeightsDoubleOW.py +21 -19
- orangecontrib/tomwer/widgets/reconstruction/NabuOW.py +7 -70
- orangecontrib/tomwer/widgets/reconstruction/NabuVolumeOW.py +41 -84
- orangecontrib/tomwer/widgets/reconstruction/SAAxisOW.py +15 -40
- orangecontrib/tomwer/widgets/reconstruction/SADeltaBetaOW.py +13 -35
- orangecontrib/tomwer/widgets/reconstruction/SinoNormOW.py +2 -30
- orangecontrib/tomwer/widgets/stitching/ZStitchingConfigOW.py +11 -11
- orangecontrib/tomwer/widgets/utils.py +2 -29
- orangecontrib/tomwer/widgets/visualization/DataViewerOW.py +1 -27
- orangecontrib/tomwer/widgets/visualization/DiffViewerOW.py +1 -27
- orangecontrib/tomwer/widgets/visualization/NXtomoMetadataViewerOW.py +1 -1
- orangecontrib/tomwer/widgets/visualization/RadioStackOW.py +2 -28
- orangecontrib/tomwer/widgets/visualization/SampleMovedOW.py +1 -27
- orangecontrib/tomwer/widgets/visualization/SinogramViewerOW.py +1 -27
- orangecontrib/tomwer/widgets/visualization/SliceStackOW.py +2 -28
- tomwer/__init__.py +3 -28
- tomwer/__main__.py +8 -4
- tomwer/app/__init__.py +2 -0
- tomwer/app/axis.py +8 -10
- tomwer/app/canvas.py +23 -29
- tomwer/app/canvas_launcher/config.py +14 -102
- tomwer/app/canvas_launcher/environ.py +5 -8
- tomwer/app/canvas_launcher/mainwindow.py +175 -69
- tomwer/app/canvas_launcher/splash.py +1 -3
- tomwer/app/canvas_launcher/utils.py +47 -0
- tomwer/app/canvas_launcher/widgetsscheme.py +3 -10
- tomwer/app/diffframe.py +2 -0
- tomwer/app/imagekeyeditor.py +2 -1
- tomwer/app/imagekeyupgrader.py +2 -0
- tomwer/app/multicor.py +5 -2
- tomwer/app/multipag.py +16 -5
- tomwer/app/nabuapp.py +2 -1
- tomwer/app/nxtomoeditor.py +17 -12
- tomwer/app/patchrawdarkflat.py +2 -0
- tomwer/app/radiostack.py +3 -2
- tomwer/app/reducedarkflat.py +3 -0
- tomwer/app/samplemoved.py +2 -0
- tomwer/app/scanviewer.py +2 -0
- tomwer/app/sinogramviewer.py +2 -0
- tomwer/app/slicestack.py +11 -13
- tomwer/app/stitching/common.py +431 -0
- tomwer/app/stopdatalistener.py +3 -0
- tomwer/app/ystitching.py +26 -0
- tomwer/app/zstitching.py +8 -363
- tomwer/core/__init__.py +2 -28
- tomwer/core/cluster/__init__.py +3 -0
- tomwer/core/cluster/cluster.py +10 -26
- tomwer/core/futureobject.py +17 -43
- tomwer/core/log/__init__.py +2 -0
- tomwer/core/log/processlog.py +0 -28
- tomwer/core/process/cluster/supervisor.py +52 -34
- tomwer/core/process/conditions/filters.py +3 -28
- tomwer/core/process/control/datalistener/datalistener.py +7 -75
- tomwer/core/process/control/datalistener/rpcserver.py +8 -38
- tomwer/core/process/control/datawatcher/datawatcher.py +11 -40
- tomwer/core/process/control/datawatcher/datawatcherobserver.py +30 -64
- tomwer/core/process/control/datawatcher/datawatcherprocess.py +11 -32
- tomwer/core/process/control/datawatcher/edfdwprocess.py +2 -27
- tomwer/core/process/control/datawatcher/hdf5dwprocess.py +1 -26
- tomwer/core/process/control/datawatcher/status.py +1 -26
- tomwer/core/process/control/emailnotifier.py +11 -23
- tomwer/core/process/control/nxtomoconcatenate.py +20 -18
- tomwer/core/process/control/nxtomomill.py +9 -44
- tomwer/core/process/control/scanlist.py +0 -27
- tomwer/core/process/control/scantransfer.py +15 -13
- tomwer/core/process/control/scanvalidator.py +4 -30
- tomwer/core/process/control/{test → tests}/test_concatenate_nxtomos.py +5 -5
- tomwer/core/process/control/timer.py +1 -27
- tomwer/core/process/control/tomoobjseries.py +12 -0
- tomwer/core/process/drac/binning.py +37 -0
- tomwer/core/process/drac/dracbase.py +170 -0
- tomwer/core/process/drac/gallery.py +109 -0
- tomwer/core/process/drac/output.py +12 -0
- tomwer/core/process/drac/processeddataset.py +147 -0
- tomwer/core/process/drac/publish.py +118 -0
- tomwer/core/process/drac/rawdataset.py +142 -0
- tomwer/core/process/drac/tests/test_gallery.py +71 -0
- tomwer/core/process/drac/tests/test_icat_processed_dataset.py +80 -0
- tomwer/core/process/drac/tests/test_icat_raw_dataset.py +90 -0
- tomwer/core/process/edit/darkflatpatch.py +1 -28
- tomwer/core/process/edit/imagekeyeditor.py +4 -32
- tomwer/core/process/edit/nxtomoeditor.py +307 -0
- tomwer/core/process/edit/tests/test_darkflatpatch.py +243 -0
- tomwer/core/process/edit/tests/test_imagekey_editor.py +99 -0
- tomwer/core/process/output.py +9 -2
- tomwer/core/process/reconstruction/__init__.py +0 -26
- tomwer/core/process/reconstruction/axis/anglemode.py +1 -29
- tomwer/core/process/reconstruction/axis/axis.py +47 -804
- tomwer/core/process/reconstruction/axis/mode.py +89 -25
- tomwer/core/process/reconstruction/axis/params.py +131 -283
- tomwer/core/process/reconstruction/axis/projectiontype.py +0 -28
- tomwer/core/process/reconstruction/axis/side.py +8 -0
- tomwer/core/process/reconstruction/darkref/darkrefs.py +14 -39
- tomwer/core/process/reconstruction/darkref/darkrefscopy.py +7 -39
- tomwer/core/process/reconstruction/darkref/params.py +1 -28
- tomwer/core/process/reconstruction/nabu/castvolume.py +19 -34
- tomwer/core/process/reconstruction/nabu/nabucommon.py +18 -43
- tomwer/core/process/reconstruction/nabu/nabuscores.py +64 -68
- tomwer/core/process/reconstruction/nabu/nabuslices.py +63 -105
- tomwer/core/process/reconstruction/nabu/nabuvolume.py +44 -70
- tomwer/core/process/reconstruction/nabu/plane.py +10 -0
- tomwer/core/process/reconstruction/nabu/settings.py +1 -28
- tomwer/core/process/reconstruction/nabu/target.py +0 -28
- tomwer/core/process/reconstruction/nabu/test/test_castvolume.py +116 -0
- tomwer/core/process/reconstruction/nabu/test/test_nabu_utils.py +277 -0
- tomwer/core/process/reconstruction/nabu/test/test_nabunormalization.py +199 -0
- tomwer/core/process/reconstruction/nabu/utils.py +11 -60
- tomwer/core/process/reconstruction/normalization/normalization.py +2 -32
- tomwer/core/process/reconstruction/normalization/params.py +3 -35
- tomwer/core/process/reconstruction/output.py +14 -19
- tomwer/core/process/reconstruction/paramsbase.py +4 -33
- tomwer/core/process/reconstruction/saaxis/params.py +5 -33
- tomwer/core/process/reconstruction/saaxis/saaxis.py +22 -51
- tomwer/core/process/reconstruction/sadeltabeta/params.py +2 -31
- tomwer/core/process/reconstruction/sadeltabeta/sadeltabeta.py +18 -46
- tomwer/core/process/reconstruction/scores/params.py +9 -39
- tomwer/core/process/reconstruction/scores/scores.py +10 -42
- tomwer/core/process/reconstruction/tests/__init__.py +0 -0
- tomwer/core/process/reconstruction/tests/test_axis.py +46 -0
- tomwer/core/process/reconstruction/tests/test_darkref.py +33 -0
- tomwer/core/process/reconstruction/{test → tests}/test_saaxis.py +1 -27
- tomwer/core/process/reconstruction/tests/test_sadeltabeta.py +48 -0
- tomwer/core/process/reconstruction/{test → tests}/test_utils.py +4 -4
- tomwer/core/process/reconstruction/utils/cor.py +8 -4
- tomwer/core/process/script/python.py +1 -27
- tomwer/core/process/script/tests/test_script.py +41 -0
- tomwer/core/process/stitching/metadataholder.py +5 -4
- tomwer/core/process/stitching/nabustitcher.py +35 -5
- tomwer/core/process/stitching/tests/test_metadataholder.py +17 -0
- tomwer/core/process/task.py +20 -63
- tomwer/core/process/tests/__init__.py +0 -0
- tomwer/core/process/{test → tests}/test_conditions.py +1 -28
- tomwer/core/process/{test → tests}/test_dark_and_flat.py +1 -27
- tomwer/core/process/{test → tests}/test_data_listener.py +1 -27
- tomwer/core/process/{test → tests}/test_data_transfer.py +2 -28
- tomwer/core/process/{test → tests}/test_data_watcher.py +1 -27
- tomwer/core/process/{test → tests}/test_nabu.py +2 -33
- tomwer/core/process/{test → tests}/test_normalization.py +1 -26
- tomwer/core/process/{test → tests}/test_timer.py +1 -27
- tomwer/core/process/utils.py +2 -31
- tomwer/core/process/visualization/dataviewer.py +1 -26
- tomwer/core/process/visualization/diffviewer.py +1 -26
- tomwer/core/process/visualization/imagestackviewer.py +0 -26
- tomwer/core/process/visualization/radiostack.py +0 -26
- tomwer/core/process/visualization/samplemoved.py +0 -28
- tomwer/core/process/visualization/sinogramviewer.py +0 -27
- tomwer/core/process/visualization/slicestack.py +0 -28
- tomwer/core/process/visualization/tests/test_data_viewer.py +12 -0
- tomwer/core/process/visualization/tests/test_diff_viewer.py +12 -0
- tomwer/core/process/visualization/tests/test_image_stack_viewer.py +14 -0
- tomwer/core/process/visualization/tests/test_radio_stack.py +12 -0
- tomwer/core/process/visualization/tests/test_sample_moved.py +14 -0
- tomwer/core/process/visualization/tests/test_sinogram_viewer.py +13 -0
- tomwer/core/process/visualization/tests/test_slice_stack.py +13 -0
- tomwer/core/process/visualization/tests/test_volume_viewer.py +12 -0
- tomwer/core/process/visualization/volumeviewer.py +0 -29
- tomwer/core/scan/__init__.py +3 -27
- tomwer/core/scan/blissscan.py +5 -34
- tomwer/core/scan/edfscan.py +19 -53
- tomwer/core/scan/hdf5scan.py +2 -2
- tomwer/core/scan/nxtomoscan.py +48 -54
- tomwer/core/scan/scanbase.py +107 -203
- tomwer/core/scan/scanfactory.py +11 -41
- tomwer/core/scan/tests/__init__.py +0 -0
- tomwer/core/scan/tests/test_edf.py +25 -0
- tomwer/core/scan/tests/test_future_scan.py +35 -0
- tomwer/core/scan/tests/test_nxtomoscan.py +143 -0
- tomwer/core/scan/tests/test_process_registration.py +64 -0
- tomwer/core/settings.py +18 -40
- tomwer/core/tests/__init__.py +0 -0
- tomwer/core/tests/test_scanutils.py +26 -0
- tomwer/core/{test → tests}/test_utils.py +1 -28
- tomwer/core/tomwer_object.py +4 -0
- tomwer/core/utils/__init__.py +2 -0
- tomwer/core/utils/char.py +0 -28
- tomwer/core/utils/deprecation.py +12 -38
- tomwer/core/utils/dictutils.py +1 -3
- tomwer/core/utils/ftseriesutils.py +1 -27
- tomwer/core/utils/gpu.py +0 -28
- tomwer/core/utils/image.py +8 -39
- tomwer/core/utils/locker.py +1 -28
- tomwer/core/utils/logconfig.py +0 -27
- tomwer/core/utils/normalization.py +4 -31
- tomwer/core/utils/nxtomoutils.py +8 -38
- tomwer/core/utils/resource.py +0 -26
- tomwer/core/utils/scanutils.py +23 -52
- tomwer/core/utils/slurm.py +7 -30
- tomwer/core/utils/spec.py +6 -6
- tomwer/core/utils/tests/__init__.py +0 -0
- tomwer/core/utils/tests/test_image.py +30 -0
- tomwer/core/utils/tests/test_nxtomo.py +38 -0
- tomwer/core/utils/tests/test_scan_utils.py +46 -0
- tomwer/core/utils/tests/test_time.py +6 -0
- tomwer/core/utils/threads.py +0 -26
- tomwer/core/utils/time.py +0 -27
- tomwer/core/volume/__init__.py +4 -0
- tomwer/core/volume/edfvolume.py +1 -28
- tomwer/core/volume/hdf5volume.py +1 -28
- tomwer/core/volume/jp2kvolume.py +1 -27
- tomwer/core/volume/rawvolume.py +1 -28
- tomwer/core/volume/tests/test_volumes.py +21 -0
- tomwer/core/volume/tiffvolume.py +1 -28
- tomwer/core/volume/volumebase.py +5 -0
- tomwer/core/volume/volumefactory.py +7 -33
- tomwer/gui/__init__.py +0 -28
- tomwer/gui/cluster/__init__.py +2 -0
- tomwer/gui/cluster/slurm.py +297 -95
- tomwer/gui/cluster/supervisor.py +1 -27
- tomwer/gui/cluster/tests/__init__.py +0 -0
- tomwer/gui/cluster/{test → tests}/test_cluster.py +21 -26
- tomwer/gui/cluster/{test → tests}/test_supervisor.py +1 -27
- tomwer/gui/conditions/__init__.py +2 -0
- tomwer/gui/conditions/filter.py +1 -26
- tomwer/gui/configuration/__init__.py +2 -0
- tomwer/gui/control/__init__.py +2 -0
- tomwer/gui/control/actions.py +2 -28
- tomwer/gui/control/datadiscovery.py +4 -3
- tomwer/gui/control/datalist.py +64 -69
- tomwer/gui/control/datalistener.py +1 -39
- tomwer/gui/control/datareacheractions.py +1 -28
- tomwer/gui/control/datatransfert.py +2 -29
- tomwer/gui/control/datavalidator.py +3 -37
- tomwer/gui/control/datawatcher/__init__.py +0 -28
- tomwer/gui/control/datawatcher/configuration.py +1 -28
- tomwer/gui/control/datawatcher/datawatcher.py +3 -32
- tomwer/gui/control/datawatcher/datawatcherobserver.py +2 -28
- tomwer/gui/control/history.py +5 -35
- tomwer/gui/control/nxtomomill.py +3 -30
- tomwer/gui/control/observations.py +61 -55
- tomwer/gui/control/reducedarkflatselector.py +24 -20
- tomwer/gui/control/scanselectorwidget.py +2 -28
- tomwer/gui/control/selectorwidgetbase.py +17 -17
- tomwer/gui/control/series/__init__.py +0 -0
- tomwer/gui/control/{serie/seriecreator.py → series/seriescreator.py} +214 -235
- tomwer/gui/control/series/serieswaiter.py +0 -0
- tomwer/gui/control/series/test/test_creator.py +424 -0
- tomwer/gui/control/series/test/test_nxtomo_concatenate.py +21 -0
- tomwer/gui/control/singletomoobj.py +1 -1
- tomwer/gui/control/tests/__init__.py +0 -0
- tomwer/gui/control/tests/test_datalist.py +47 -0
- tomwer/gui/control/{test → tests}/test_datalistener.py +1 -28
- tomwer/gui/control/tests/test_datavalidator.py +27 -0
- tomwer/gui/control/{test → tests}/test_inputwidget.py +1 -27
- tomwer/gui/control/tests/test_process_manager.py +38 -0
- tomwer/gui/control/tests/test_scan_observations.py +23 -0
- tomwer/gui/control/tests/test_scanselector.py +42 -0
- tomwer/gui/control/{test → tests}/test_scanvalidator.py +1 -27
- tomwer/gui/control/{test → tests}/test_volume_dialog.py +2 -30
- tomwer/gui/control/{test → tests}/test_volumeselector.py +1 -27
- tomwer/gui/control/volumeselectorwidget.py +2 -30
- tomwer/gui/dataportal/__init__.py +2 -0
- tomwer/gui/{icat → dataportal}/createscreenshots.py +3 -2
- tomwer/gui/dataportal/gallery.py +133 -0
- tomwer/gui/dataportal/outputformat.py +0 -0
- tomwer/gui/dataportal/publish.py +96 -0
- tomwer/gui/dataportal/tests/test_create_screenshots_gui.py +23 -0
- tomwer/gui/dataportal/tests/test_gallery_gui.py +21 -0
- tomwer/gui/debugtools/__init__.py +2 -0
- tomwer/gui/debugtools/datasetgenerator.py +1 -30
- tomwer/gui/debugtools/objectinspector.py +1 -29
- tomwer/gui/dialog/QDataDialog.py +89 -0
- tomwer/gui/{qfolderdialog.py → dialog/QVolumeDialog.py} +8 -107
- tomwer/gui/dialog/__init__.py +1 -0
- tomwer/gui/edit/__init__.py +2 -0
- tomwer/gui/edit/dkrfpatch.py +52 -87
- tomwer/gui/edit/imagekeyeditor.py +18 -54
- tomwer/gui/edit/nxtomoeditor.py +113 -300
- tomwer/gui/edit/nxtomowarmer.py +3 -2
- tomwer/gui/edit/tests/__init__.py +0 -0
- tomwer/gui/edit/{test → tests}/test_dkrf_patch.py +3 -29
- tomwer/gui/edit/{test → tests}/test_image_key_editor.py +1 -27
- tomwer/gui/edit/{test → tests}/test_nx_editor.py +45 -23
- tomwer/gui/fonts.py +5 -0
- tomwer/gui/icons.py +28 -66
- tomwer/gui/illustrations.py +4 -34
- tomwer/gui/imagefromfile.py +5 -30
- tomwer/gui/metadataloader.py +36 -0
- tomwer/gui/qconfigfile.py +3 -0
- tomwer/gui/qlefilesystem.py +3 -0
- tomwer/gui/reconstruction/__init__.py +2 -0
- tomwer/gui/reconstruction/axis/AxisMainWindow.py +275 -0
- tomwer/gui/reconstruction/axis/AxisOptionsWidget.py +313 -0
- tomwer/gui/reconstruction/axis/AxisSettingsWidget.py +797 -0
- tomwer/gui/reconstruction/axis/AxisWidget.py +534 -0
- tomwer/gui/reconstruction/axis/CalculationWidget.py +218 -0
- tomwer/gui/reconstruction/axis/CompareImages.py +11 -44
- tomwer/gui/reconstruction/axis/ControlWidget.py +285 -0
- tomwer/gui/reconstruction/axis/EstimatedCORWidget.py +394 -0
- tomwer/gui/reconstruction/axis/EstimatedCorComboBox.py +118 -0
- tomwer/gui/reconstruction/axis/InputWidget.py +347 -0
- tomwer/gui/reconstruction/axis/ManualFramesSelection.py +168 -0
- tomwer/gui/reconstruction/axis/__init__.py +2 -2
- tomwer/gui/reconstruction/darkref/__init__.py +0 -27
- tomwer/gui/reconstruction/darkref/darkrefcopywidget.py +5 -34
- tomwer/gui/reconstruction/darkref/darkrefwidget.py +1 -27
- tomwer/gui/reconstruction/nabu/castvolume.py +40 -59
- tomwer/gui/reconstruction/nabu/check.py +7 -33
- tomwer/gui/reconstruction/nabu/nabuconfig/base.py +7 -34
- tomwer/gui/reconstruction/nabu/nabuconfig/ctf.py +6 -5
- tomwer/gui/reconstruction/nabu/nabuconfig/nabuconfig.py +10 -69
- tomwer/gui/reconstruction/nabu/nabuconfig/output.py +3 -47
- tomwer/gui/reconstruction/nabu/nabuconfig/phase.py +54 -36
- tomwer/gui/reconstruction/nabu/nabuconfig/preprocessing.py +103 -54
- tomwer/gui/reconstruction/nabu/nabuconfig/reconstruction.py +116 -65
- tomwer/gui/reconstruction/nabu/nabuflow.py +31 -61
- tomwer/gui/reconstruction/nabu/platform.py +94 -0
- tomwer/gui/reconstruction/nabu/slices.py +81 -45
- tomwer/gui/reconstruction/nabu/slurm.py +1 -27
- tomwer/gui/reconstruction/nabu/test/test_cast_volume.py +82 -0
- tomwer/gui/reconstruction/nabu/test/test_check.py +66 -0
- tomwer/gui/reconstruction/nabu/test/test_ctf.py +46 -0
- tomwer/gui/reconstruction/nabu/test/test_helical.py +21 -0
- tomwer/gui/reconstruction/nabu/test/test_nabu_preprocessing.py +81 -0
- tomwer/gui/reconstruction/nabu/volume.py +62 -90
- tomwer/gui/reconstruction/normalization/intensity.py +5 -32
- tomwer/gui/reconstruction/normalization/test/test_intensity.py +89 -0
- tomwer/gui/reconstruction/saaxis/corrangeselector.py +32 -56
- tomwer/gui/reconstruction/saaxis/dimensionwidget.py +56 -96
- tomwer/gui/reconstruction/saaxis/saaxis.py +17 -38
- tomwer/gui/reconstruction/saaxis/sliceselector.py +8 -39
- tomwer/gui/reconstruction/sadeltabeta/saadeltabeta.py +19 -37
- tomwer/gui/reconstruction/scores/control.py +2 -30
- tomwer/gui/reconstruction/scores/scoreplot.py +23 -49
- tomwer/gui/reconstruction/tests/__init__.py +0 -0
- tomwer/gui/reconstruction/{test → tests}/test_axis.py +23 -49
- tomwer/gui/reconstruction/{test → tests}/test_nabu.py +16 -31
- tomwer/gui/reconstruction/{test → tests}/test_saaxis.py +10 -37
- tomwer/gui/reconstruction/{test → tests}/test_sadeltabeta.py +1 -26
- tomwer/gui/samplemoved/__init__.py +2 -30
- tomwer/gui/samplemoved/selectiontable.py +3 -33
- tomwer/gui/settings.py +7 -0
- tomwer/gui/stackplot.py +33 -661
- tomwer/gui/stacks.py +261 -135
- tomwer/gui/stitching/SingleAxisStitchingWidget.py +326 -0
- tomwer/gui/stitching/StitchingOptionsWidget.py +438 -0
- tomwer/gui/stitching/StitchingWindow.py +586 -0
- tomwer/gui/stitching/__init__.py +2 -0
- tomwer/gui/stitching/alignment.py +90 -0
- tomwer/gui/stitching/axisorderedlist.py +44 -34
- tomwer/gui/stitching/config/axisparams.py +25 -11
- tomwer/gui/stitching/config/output.py +6 -5
- tomwer/gui/stitching/config/positionoveraxis.py +313 -51
- tomwer/gui/stitching/config/stitchingstrategies.py +22 -16
- tomwer/gui/stitching/config/tests/test_axisparams.py +25 -0
- tomwer/gui/stitching/config/tomoobjdetails.py +3 -5
- tomwer/gui/stitching/normalization.py +1 -0
- tomwer/gui/stitching/preview.py +59 -0
- tomwer/gui/stitching/singleaxis.py +57 -0
- tomwer/gui/stitching/stitchandbackground.py +3 -2
- tomwer/gui/stitching/stitching_preview.py +44 -36
- tomwer/gui/stitching/stitching_raw.py +5 -3
- tomwer/gui/stitching/tests/test_ZStitchingWindow.py +88 -0
- tomwer/gui/stitching/tests/test_axis_ordered_list.py +21 -0
- tomwer/gui/stitching/tests/test_normalization.py +27 -0
- tomwer/gui/stitching/tests/test_preview.py +68 -0
- tomwer/gui/stitching/tests/test_stitching_raw.py +110 -0
- tomwer/gui/stitching/tests/utils.py +92 -0
- tomwer/gui/stitching/utils.py +14 -0
- tomwer/gui/stitching/z_stitching/fineestimation.py +5 -33
- tomwer/gui/stitching/z_stitching/tests/test_fine_estimation.py +35 -0
- tomwer/gui/stitching/z_stitching/tests/test_raw_estimation.py +215 -0
- tomwer/gui/stitching/z_stitching/tests/test_stitching_window.py +51 -0
- tomwer/gui/tests/__init__.py +0 -0
- tomwer/gui/tests/test_axis_gui.py +43 -0
- tomwer/gui/{test → tests}/test_qfolder_dialog.py +1 -1
- tomwer/gui/utils/RangeWidget.py +44 -0
- tomwer/gui/utils/buttons.py +4 -3
- tomwer/gui/utils/completer.py +2 -33
- tomwer/gui/utils/flow.py +11 -40
- tomwer/gui/utils/gpu.py +60 -0
- tomwer/gui/utils/illustrations.py +1 -26
- tomwer/gui/utils/inputwidget.py +35 -73
- tomwer/gui/utils/lineselector/lineselector.py +9 -46
- tomwer/gui/utils/loadingmode.py +81 -0
- tomwer/gui/utils/qt_utils.py +9 -0
- tomwer/gui/utils/sandboxes.py +1 -26
- tomwer/gui/utils/scandescription.py +2 -31
- tomwer/gui/utils/scrollarea.py +6 -55
- tomwer/gui/utils/slider.py +4 -28
- tomwer/gui/utils/splashscreen.py +0 -28
- tomwer/gui/utils/step.py +14 -13
- tomwer/gui/utils/tests/test_completer.py +41 -0
- tomwer/gui/utils/tests/test_line_selector.py +21 -0
- tomwer/gui/utils/tests/test_splashscreen.py +8 -0
- tomwer/gui/utils/tests/test_vignettes.py +68 -0
- tomwer/gui/utils/unitsystem.py +15 -69
- tomwer/gui/utils/utils.py +4 -5
- tomwer/gui/utils/vignettes.py +10 -41
- tomwer/gui/utils/waiterthread.py +0 -26
- tomwer/gui/visualization/__init__.py +2 -0
- tomwer/gui/visualization/dataviewer.py +68 -421
- tomwer/gui/visualization/diffviewer/diffviewer.py +2 -30
- tomwer/gui/visualization/diffviewer/shiftwidget.py +4 -29
- tomwer/gui/visualization/fullscreenplot.py +5 -5
- tomwer/gui/visualization/imagestack.py +403 -0
- tomwer/gui/visualization/nxtomometadata.py +0 -4
- tomwer/gui/visualization/reconstructionparameters.py +14 -32
- tomwer/gui/visualization/scanoverview.py +33 -66
- tomwer/gui/visualization/sinogramviewer.py +2 -28
- tomwer/gui/visualization/test/__init__.py +0 -28
- tomwer/gui/visualization/test/test_dataviewer.py +1 -28
- tomwer/gui/visualization/test/test_diffviewer.py +1 -28
- tomwer/gui/visualization/test/test_nx_tomo_metadata_viewer.py +0 -5
- tomwer/gui/visualization/test/test_reconstruction_parameters.py +1 -27
- tomwer/gui/visualization/test/test_sinogramviewer.py +1 -28
- tomwer/gui/visualization/test/test_stacks.py +184 -115
- tomwer/gui/visualization/test/test_volumeviewer.py +3 -2
- tomwer/gui/visualization/tomoobjoverview.py +2 -2
- tomwer/gui/visualization/volumeoverview.py +3 -2
- tomwer/gui/visualization/volumeviewer.py +47 -43
- tomwer/io/__init__.py +2 -0
- tomwer/io/utils/h5pyutils.py +1 -27
- tomwer/io/utils/test/test_raw_and_processed_data.py +10 -0
- tomwer/io/utils/test/test_utils.py +67 -0
- tomwer/io/utils/utils.py +2 -31
- tomwer/resources/__init__.py +13 -33
- tomwer/resources/gui/icons/edit_downstream.svg +114 -0
- tomwer/resources/gui/icons/edit_upstream.svg +112 -0
- tomwer/resources/gui/icons/free_edition.svg +23 -0
- tomwer/resources/gui/icons/icat_gallery_opts.png +0 -0
- tomwer/resources/gui/icons/icat_gallery_opts.svg +80 -0
- tomwer/resources/gui/icons/search.png +0 -0
- tomwer/resources/gui/icons/search.svg +23 -0
- tomwer/resources/gui/icons/warning.png +0 -0
- tomwer/synctools/__init__.py +2 -0
- tomwer/synctools/axis.py +1 -27
- tomwer/synctools/darkref.py +1 -26
- tomwer/synctools/datalistener.py +1 -27
- tomwer/synctools/datatransfert.py +2 -27
- tomwer/synctools/imageloaderthread.py +1 -28
- tomwer/synctools/rsyncmanager.py +1 -25
- tomwer/synctools/saaxis.py +1 -26
- tomwer/synctools/sadeltabeta.py +1 -26
- tomwer/synctools/stacks/control/datalistener.py +1 -26
- tomwer/synctools/stacks/processingstack.py +4 -33
- tomwer/synctools/stacks/reconstruction/axis.py +6 -53
- tomwer/synctools/stacks/reconstruction/castvolume.py +12 -43
- tomwer/synctools/stacks/reconstruction/dkrefcopy.py +4 -27
- tomwer/synctools/stacks/reconstruction/nabu.py +3 -28
- tomwer/synctools/stacks/reconstruction/normalization.py +2 -27
- tomwer/synctools/stacks/reconstruction/saaxis.py +2 -27
- tomwer/synctools/stacks/reconstruction/sadeltabeta.py +2 -27
- tomwer/synctools/tests/__init__.py +0 -0
- tomwer/synctools/{test → tests}/test_darkRefs.py +16 -40
- tomwer/synctools/{test → tests}/test_foldertransfer.py +2 -33
- tomwer/synctools/utils/scanstages.py +2 -31
- tomwer/tests/__init__.py +1 -0
- tomwer/tests/app/test_stitching.py +95 -0
- tomwer/tests/datasets.py +1 -5
- tomwer/tests/orangecontrib/tomwer/widgets/cluster/tests/test_future_supervisorow.py +48 -0
- tomwer/tests/orangecontrib/tomwer/widgets/cluster/tests/test_slurm_clusterow.py +40 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_advancement.py +8 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_data_validator.py +55 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_datadiscovery.py +129 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_datalistener.py +111 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_dataselector.py +69 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_datawatcher.py +411 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_emailow.py +29 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_notifier.py +24 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_nxtomo_concatenate_ow.py +64 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_nxtomomill.py +133 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_reduce_dark_flat_selector.py +40 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_singletomoobj.py +40 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_timerow.py +25 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_tomoobj_series.py +96 -0
- tomwer/tests/orangecontrib/tomwer/widgets/control/tests/test_volume_selector.py +69 -0
- orangecontrib/tomwer/widgets/edit/test/test_image_key_editor.py → tomwer/tests/orangecontrib/tomwer/widgets/debugtools/tests/test_dataset_generator.py +17 -16
- tomwer/tests/orangecontrib/tomwer/widgets/debugtools/tests/test_object_inspector.py +36 -0
- {orangecontrib/tomwer/widgets/edit/test → tomwer/tests/orangecontrib/tomwer/widgets/edit/tests}/test_dark_flat_patch.py +1 -27
- tomwer/tests/orangecontrib/tomwer/widgets/edit/tests/test_image_key_editor.py +30 -0
- tomwer/tests/orangecontrib/tomwer/widgets/edit/tests/test_nxtomo_editor.py +138 -0
- tomwer/tests/orangecontrib/tomwer/widgets/other/tests/test_pythonscript.py +31 -0
- tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_axis.py +199 -0
- tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_cast_volumeow.py +58 -0
- tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_dark_refs_widget.py +136 -0
- tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_delta_beta_selector.py +15 -0
- tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_i_norm.py +200 -0
- tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_nabu_helical_prepare_weights_double.py +20 -0
- tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_nabu_volume.py +74 -0
- tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_nabu_widget.py +107 -0
- tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_sa_delta_beta.py +194 -0
- tomwer/tests/orangecontrib/tomwer/widgets/reconstruction/tests/test_saaxis.py +194 -0
- tomwer/tests/orangecontrib/tomwer/widgets/stitching/tests/test_zstitching.py +313 -0
- tomwer/tests/orangecontrib/tomwer/widgets/tests/test_conditions.py +85 -0
- tomwer/tests/orangecontrib/tomwer/widgets/tests/test_darkref.py +225 -0
- tomwer/tests/orangecontrib/tomwer/widgets/tests/test_foldertransfert.py +105 -0
- tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_dataviewerow.py +57 -0
- tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_diffviewerow.py +39 -0
- tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_nxtomo_metadata_viewer.py +29 -0
- tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_radio_stackow.py +31 -0
- tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_sample_movedow.py +46 -0
- tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_sinogram_viewerow.py +31 -0
- tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_slice_stackow.py +31 -0
- tomwer/tests/orangecontrib/tomwer/widgets/visualization/tests/test_volume_viewerow.py +32 -0
- tomwer/tests/test_ewoks/test_conversion.py +104 -0
- tomwer/tests/test_ewoks/test_single_node_execution.py +87 -0
- tomwer/tests/test_ewoks/test_workflows.py +138 -0
- tomwer/utils.py +11 -39
- tomwer/version.py +2 -2
- {tomwer-1.3.26.dist-info → tomwer-1.4.0.dist-info}/LICENSE +3 -3
- tomwer-1.4.0.dist-info/METADATA +337 -0
- tomwer-1.4.0.dist-info/RECORD +912 -0
- {tomwer-1.3.26.dist-info → tomwer-1.4.0.dist-info}/WHEEL +1 -1
- {tomwer-1.3.26.dist-info → tomwer-1.4.0.dist-info}/entry_points.txt +1 -0
- orangecontrib/tomwer/widgets/control/DataListOW.py +0 -129
- orangecontrib/tomwer/widgets/control/TomoObjSerieOW.py +0 -86
- orangecontrib/tomwer/widgets/control/VolumeSymLinkOW.py +0 -182
- orangecontrib/tomwer/widgets/edit/test/test_nxtomo_editor.py +0 -141
- orangecontrib/tomwer/widgets/icat/PublishProcessedDataOW.py +0 -115
- orangecontrib/tomwer/widgets/icat/RawDataScreenshotCreatorOW.py +0 -98
- orangecontrib/tomwer/widgets/icat/SaveToGalleryAndPublishOW.py +0 -129
- orangecontrib/tomwer/widgets/icat/icons/add_gallery.png +0 -0
- orangecontrib/tomwer/widgets/icat/icons/add_gallery.svg +0 -82
- orangecontrib/tomwer/widgets/icat/icons/raw_screenshots.png +0 -0
- orangecontrib/tomwer/widgets/icat/icons/raw_screenshots.svg +0 -143
- orangecontrib/tomwer/widgets/visualization/LivesliceOW.py +0 -87
- orangecontrib/tomwer/widgets/visualization/icons/liveslice.png +0 -0
- orangecontrib/tomwer/widgets/visualization/icons/liveslice.svg +0 -110
- tomwer/core/log/logger.py +0 -130
- tomwer/core/process/control/test/test_volume_link.py +0 -74
- tomwer/core/process/control/tomoobjserie.py +0 -12
- tomwer/core/process/control/volumesymlink.py +0 -200
- tomwer/core/process/icat/createscreenshots.py +0 -100
- tomwer/core/process/icat/gallery.py +0 -377
- tomwer/core/process/icat/icatbase.py +0 -36
- tomwer/core/process/icat/publish.py +0 -228
- tomwer/core/process/icat/screenshots.py +0 -27
- tomwer/core/process/reconstruction/test/test_darkref.py +0 -60
- tomwer/core/process/reconstruction/test/test_sadeltabeta.py +0 -74
- tomwer/core/process/test/test_axis.py +0 -309
- tomwer/core/process/visualization/liveslice.py +0 -6
- tomwer/core/progress.py +0 -100
- tomwer/core/scan/test/test_edf.py +0 -53
- tomwer/core/scan/test/test_future_scan.py +0 -61
- tomwer/core/scan/test/test_h5.py +0 -96
- tomwer/core/scan/test/test_process_registration.py +0 -109
- tomwer/core/test/test_scanutils.py +0 -53
- tomwer/gui/control/emailnotifier.py +0 -174
- tomwer/gui/control/serie/seriewaiter.py +0 -28
- tomwer/gui/control/test/__init__.py +0 -28
- tomwer/gui/control/test/test_datalist.py +0 -96
- tomwer/gui/control/test/test_datavalidator.py +0 -54
- tomwer/gui/control/test/test_email.py +0 -35
- tomwer/gui/control/test/test_process_manager.py +0 -65
- tomwer/gui/control/test/test_scanselector.py +0 -67
- tomwer/gui/edit/test/__init__.py +0 -28
- tomwer/gui/icat/gallery.py +0 -214
- tomwer/gui/icat/publish.py +0 -187
- tomwer/gui/reconstruction/axis/axis.py +0 -733
- tomwer/gui/reconstruction/axis/radioaxis.py +0 -2467
- tomwer/gui/stitching/stitching.py +0 -1392
- tomwer/gui/test/__init__.py +0 -28
- tomwer/gui/test/test_axis_gui.py +0 -34
- tomwer/synctools/stacks/edit/darkflatpatch.py +0 -169
- tomwer/synctools/stacks/edit/imagekeyeditor.py +0 -135
- tomwer/third_part/WaitingOverlay.py +0 -110
- tomwer-1.3.26-py3.11-nspkg.pth +0 -1
- tomwer-1.3.26.dist-info/METADATA +0 -292
- tomwer-1.3.26.dist-info/RECORD +0 -785
- tomwer-1.3.26.dist-info/namespace_packages.txt +0 -1
- /orangecontrib/tomwer/{widgets/edit/test → tests}/__init__.py +0 -0
- {tomwer/core/process/control/test → orangecontrib/tomwer/tutorials/id16b}/__init__.py +0 -0
- {tomwer/core/process/icat → orangecontrib/tomwer/widgets/cluster/tests}/__init__.py +0 -0
- /orangecontrib/tomwer/widgets/control/icons/{tomoobjserie.png → tomoobjseries.png} +0 -0
- {tomwer/core/process/reconstruction/test → orangecontrib/tomwer/widgets/control/tests}/__init__.py +0 -0
- /orangecontrib/tomwer/widgets/{icat → dataportal}/icons/publish_processed_data.png +0 -0
- /orangecontrib/tomwer/widgets/{icat → dataportal}/icons/publish_processed_data.svg +0 -0
- {tomwer/core/process/test → orangecontrib/tomwer/widgets/debugtools/tests}/__init__.py +0 -0
- {tomwer/core/scan/test → orangecontrib/tomwer/widgets/edit/tests}/__init__.py +0 -0
- {tomwer/core/test → orangecontrib/tomwer/widgets/other/tests}/__init__.py +0 -0
- {tomwer/gui/cluster/test → orangecontrib/tomwer/widgets/reconstruction/tests}/__init__.py +0 -0
- {tomwer/gui/control/serie → orangecontrib/tomwer/widgets/stitching/tests}/__init__.py +0 -0
- {tomwer/gui/icat → orangecontrib/tomwer/widgets/tests}/__init__.py +0 -0
- {tomwer/gui/reconstruction/test → orangecontrib/tomwer/widgets/visualization/tests}/__init__.py +0 -0
- /tomwer/{synctools/stacks/edit → app/stitching}/__init__.py +0 -0
- /tomwer/{synctools/test → core/process/control/tests}/__init__.py +0 -0
- /tomwer/core/process/control/{test → tests}/test_email.py +0 -0
- /tomwer/core/process/control/{test → tests}/test_h52nx_process.py +0 -0
- /tomwer/{third_part → core/process/drac}/__init__.py +0 -0
- /tomwer/core/process/reconstruction/{test → tests}/test_axis_params.py +0 -0
- /tomwer/core/process/reconstruction/{test → tests}/test_darkref_copy.py +0 -0
- /tomwer/core/process/reconstruction/{test → tests}/test_paramsbase.py +0 -0
- /tomwer/core/scan/{test → tests}/test_scan.py +0 -0
- /tomwer/gui/control/{serie → series}/nxtomoconcatenate.py +0 -0
- /tomwer/gui/control/{test → tests}/test_datadiscovery.py +0 -0
- /tomwer/gui/control/{test → tests}/test_reducedarkflat_selector.py +0 -0
- /tomwer/gui/control/{test → tests}/test_single_tomo_obj.py +0 -0
- {orangecontrib/tomwer/widgets/edit/test → tomwer/tests/orangecontrib/tomwer/widgets/edit/tests}/test_image_key_upgrader.py +0 -0
- {tomwer-1.3.26.dist-info → tomwer-1.4.0.dist-info}/top_level.txt +0 -0
@@ -1,3 +1,5 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
1
3
|
try:
|
2
4
|
from nabu.pipeline.fullfield.reconstruction import ( # noqa F401
|
3
5
|
FullFieldReconstructor,
|
@@ -19,8 +21,9 @@ import os
|
|
19
21
|
import sys
|
20
22
|
from copy import deepcopy
|
21
23
|
import subprocess
|
22
|
-
from typing import Iterable
|
24
|
+
from typing import Iterable
|
23
25
|
import numpy
|
26
|
+
from tqdm import tqdm
|
24
27
|
|
25
28
|
from nabu.pipeline.fullfield.nabu_config import (
|
26
29
|
nabu_config as nabu_fullfield_default_config,
|
@@ -39,8 +42,11 @@ from tomwer.core.process.reconstruction.nabu.utils import (
|
|
39
42
|
slice_index_to_int,
|
40
43
|
get_nabu_multicor_file_prefix,
|
41
44
|
)
|
45
|
+
from tomwer.core.process.reconstruction.utils.cor import (
|
46
|
+
relative_pos_to_absolute,
|
47
|
+
absolute_pos_to_relative,
|
48
|
+
)
|
42
49
|
from tomwer.core.process.reconstruction.nabu.target import Target
|
43
|
-
from tomwer.core.progress import Progress
|
44
50
|
from tomwer.core.scan.scanbase import TomwerScanBase
|
45
51
|
from tomwer.core.utils.slurm import get_slurm_script_name, is_slurm_available
|
46
52
|
from tomwer.utils import docstring
|
@@ -56,30 +62,29 @@ _logger = logging.getLogger(__name__)
|
|
56
62
|
|
57
63
|
def run_nabu_one_slice_several_config(
|
58
64
|
scan: TomwerScanBase,
|
59
|
-
nabu_configs:
|
60
|
-
cluster_config:
|
65
|
+
nabu_configs: list | tuple,
|
66
|
+
cluster_config: dict | None,
|
61
67
|
dry_run: bool,
|
62
|
-
slice_index:
|
68
|
+
slice_index: int | str,
|
63
69
|
file_format: str,
|
64
70
|
axis: NabuPlane,
|
65
|
-
advancement:
|
66
|
-
process_id:
|
67
|
-
|
71
|
+
advancement: tqdm | None = None,
|
72
|
+
process_id: int | None = None,
|
73
|
+
instantiate_classes_only: bool = False,
|
68
74
|
output_file_prefix_pattern=None,
|
69
75
|
) -> tuple:
|
70
76
|
"""
|
71
77
|
Run several reconstruction of a specific slice.
|
72
78
|
|
73
79
|
:param scan: dataset
|
74
|
-
:param
|
75
|
-
:param
|
76
|
-
:param
|
77
|
-
:param
|
78
|
-
:param
|
79
|
-
:param
|
80
|
+
:param nabu_configs: set of nabu configurations to be run
|
81
|
+
:param dry_run:
|
82
|
+
:param slice_index: slice index to reconstruct or "middle"
|
83
|
+
:param advancement: optional class to display advancement
|
84
|
+
:param process_id: id of the process requesting this computation
|
85
|
+
:param cluster_config: cluster configuration if
|
80
86
|
:return: success, recons_urls (list of output urls), tuple of outs, tuples of errs, dict future_scans (key is cor, value is future_scan)
|
81
|
-
if `
|
82
|
-
:rtype: tuple
|
87
|
+
if `instantiate_classes_only` set to True then return a list of :class:`_Reconstructor`
|
83
88
|
"""
|
84
89
|
if cluster_config in (None, {}):
|
85
90
|
target = Target.LOCAL
|
@@ -113,7 +118,7 @@ def run_nabu_one_slice_several_config(
|
|
113
118
|
output_file_prefix_pattern=output_file_prefix_pattern,
|
114
119
|
axis=axis,
|
115
120
|
)
|
116
|
-
if
|
121
|
+
if instantiate_classes_only:
|
117
122
|
return (reconstructor,)
|
118
123
|
|
119
124
|
try:
|
@@ -151,12 +156,12 @@ def run_nabu_multicor(
|
|
151
156
|
scan: TomwerScanBase,
|
152
157
|
nabu_config: dict,
|
153
158
|
cors: tuple,
|
154
|
-
cluster_config:
|
159
|
+
cluster_config: dict | None,
|
155
160
|
dry_run: bool,
|
156
|
-
slice_index:
|
161
|
+
slice_index: int | str,
|
157
162
|
file_format: str,
|
158
|
-
process_id:
|
159
|
-
|
163
|
+
process_id: int | None = None,
|
164
|
+
instantiate_classes_only: bool = False,
|
160
165
|
output_file_prefix_pattern=None,
|
161
166
|
):
|
162
167
|
if cluster_config in (None, {}):
|
@@ -199,7 +204,7 @@ def run_nabu_multicor(
|
|
199
204
|
axis=axis,
|
200
205
|
output_file_prefix_pattern=output_file_prefix_pattern,
|
201
206
|
)
|
202
|
-
if
|
207
|
+
if instantiate_classes_only:
|
203
208
|
return reconstructor
|
204
209
|
|
205
210
|
try:
|
@@ -233,13 +238,13 @@ class _Reconstructor(_NabuBaseReconstructor):
|
|
233
238
|
self,
|
234
239
|
scan: TomwerScanBase,
|
235
240
|
nabu_configs: Iterable,
|
236
|
-
advancement:
|
237
|
-
slice_index:
|
238
|
-
axis:
|
241
|
+
advancement: tqdm | None,
|
242
|
+
slice_index: int | str,
|
243
|
+
axis: str | NabuPlane,
|
239
244
|
target: Target,
|
240
245
|
dry_run: bool,
|
241
246
|
file_format: str,
|
242
|
-
cluster_config:
|
247
|
+
cluster_config: dict | None,
|
243
248
|
process_name: str,
|
244
249
|
output_file_prefix_pattern=None,
|
245
250
|
) -> None:
|
@@ -252,7 +257,7 @@ class _Reconstructor(_NabuBaseReconstructor):
|
|
252
257
|
:param target: is the reconstruction is to made locally or remotly
|
253
258
|
:param file_format: reconstructed volume file format
|
254
259
|
:param cluster_config: cluster configuration in the case of a remote execution
|
255
|
-
:param
|
260
|
+
:param extra_output_file_pattern: possible extra file name pattern like for cor we want to add 'cor_' as prefix and cor value as suffix.
|
256
261
|
To make the file name unique. For delta/beta it is already forseen to be unique. For now keywords are:
|
257
262
|
* file_name: default file name according to db values and dataset name
|
258
263
|
* value: value of the nabu_configs keys
|
@@ -282,8 +287,8 @@ class _Reconstructor(_NabuBaseReconstructor):
|
|
282
287
|
)
|
283
288
|
|
284
289
|
results = {}
|
285
|
-
if self.advancement:
|
286
|
-
self.advancement.
|
290
|
+
if self.advancement is not None:
|
291
|
+
self.advancement.total = len(self.nabu_configs)
|
287
292
|
for var_value, config in self.nabu_configs.items():
|
288
293
|
if self._cancelled:
|
289
294
|
break
|
@@ -307,8 +312,8 @@ class _Reconstructor(_NabuBaseReconstructor):
|
|
307
312
|
process_name=self.process_name,
|
308
313
|
)
|
309
314
|
# specific treatment for cor: rename output files
|
310
|
-
if self.advancement:
|
311
|
-
self.advancement.
|
315
|
+
if self.advancement is not None:
|
316
|
+
self.advancement.update()
|
312
317
|
return results
|
313
318
|
|
314
319
|
def _format_file_prefix(self, file_prefix, value):
|
@@ -395,9 +400,9 @@ class _Reconstructor(_NabuBaseReconstructor):
|
|
395
400
|
dataset_params.update(config["dataset"])
|
396
401
|
config["dataset"] = dataset_params
|
397
402
|
|
398
|
-
config["resources"] =
|
399
|
-
|
400
|
-
|
403
|
+
config["resources"] = config.get("resources", {})
|
404
|
+
config["resources"]["method"] = "local"
|
405
|
+
|
401
406
|
# force overwrite results
|
402
407
|
if "output" not in config:
|
403
408
|
config["output"] = {}
|
@@ -423,10 +428,10 @@ class _ReconstructorMultiCor(_NabuBaseReconstructor):
|
|
423
428
|
def __init__(
|
424
429
|
self,
|
425
430
|
nabu_config: dict,
|
426
|
-
axis:
|
431
|
+
axis: str | NabuPlane,
|
427
432
|
cors: tuple,
|
428
433
|
file_format,
|
429
|
-
slice_index:
|
434
|
+
slice_index: int | str = "middle",
|
430
435
|
output_file_prefix_pattern=None,
|
431
436
|
*args,
|
432
437
|
**kwargs,
|
@@ -448,7 +453,7 @@ class _ReconstructorMultiCor(_NabuBaseReconstructor):
|
|
448
453
|
return self.__cors
|
449
454
|
|
450
455
|
@property
|
451
|
-
def slice_index(self) ->
|
456
|
+
def slice_index(self) -> int | str:
|
452
457
|
return self.__slice_index
|
453
458
|
|
454
459
|
@property
|
@@ -460,13 +465,13 @@ class _ReconstructorMultiCor(_NabuBaseReconstructor):
|
|
460
465
|
config_to_dump: dict,
|
461
466
|
config_file: str,
|
462
467
|
file_format: str,
|
463
|
-
info:
|
468
|
+
info: str | None,
|
464
469
|
process_name: str,
|
465
470
|
):
|
466
471
|
"""
|
467
472
|
process provided configuration
|
468
473
|
|
469
|
-
:param
|
474
|
+
:param info:
|
470
475
|
"""
|
471
476
|
if self.dry_run is True or self.only_create_config_file():
|
472
477
|
return ResultsRun(
|
@@ -494,22 +499,6 @@ class _ReconstructorMultiCor(_NabuBaseReconstructor):
|
|
494
499
|
else:
|
495
500
|
raise ValueError(f"{self.target} is not recognized as a valid target")
|
496
501
|
|
497
|
-
@staticmethod
|
498
|
-
def convert_cor_from_rel_to_abs(scan, cor):
|
499
|
-
if scan.dim_1 is not None:
|
500
|
-
return cor + scan.dim_1 / 2.0
|
501
|
-
else:
|
502
|
-
_logger.warning("enable to get image half width. Set it to 1024")
|
503
|
-
return cor + 1024
|
504
|
-
|
505
|
-
@staticmethod
|
506
|
-
def convert_cor_from_abs_to_rel(scan, cor):
|
507
|
-
if scan.dim_1 is not None:
|
508
|
-
return cor - scan.dim_1 / 2.0
|
509
|
-
else:
|
510
|
-
_logger.warning("enable to get image half width. Set it to 1024")
|
511
|
-
return cor - 1024
|
512
|
-
|
513
502
|
def _run_nabu_multicor_locally(
|
514
503
|
self,
|
515
504
|
conf_file: str,
|
@@ -519,18 +508,20 @@ class _ReconstructorMultiCor(_NabuBaseReconstructor):
|
|
519
508
|
"""
|
520
509
|
run locally nabu for a single configuration file.
|
521
510
|
|
522
|
-
:param
|
523
|
-
:param
|
524
|
-
:param
|
511
|
+
:param conf_file: path to the nabu .cfg file
|
512
|
+
:param file_format: format of the generated file
|
513
|
+
:param config_to_dump: configuration saved in the .cfg as a dictionary
|
525
514
|
:return: results of the local run
|
526
|
-
:rtype: ResultsLocalRun
|
527
515
|
"""
|
528
516
|
if not has_nabu:
|
529
517
|
raise ImportError("Fail to import nabu")
|
530
518
|
slice_index = slice_index_to_int(self.slice_index, scan=self.scan)
|
531
519
|
|
532
520
|
cor_in_nabu_ref = tuple(
|
533
|
-
[
|
521
|
+
[
|
522
|
+
relative_pos_to_absolute(relative_pos=cor, det_width=self.scan.dim_1)
|
523
|
+
for cor in self.cors
|
524
|
+
]
|
534
525
|
)
|
535
526
|
cor_in_nabu_ref = ",".join([str(cor) for cor in cor_in_nabu_ref])
|
536
527
|
command = " ".join(
|
@@ -538,7 +529,7 @@ class _ReconstructorMultiCor(_NabuBaseReconstructor):
|
|
538
529
|
sys.executable,
|
539
530
|
"-m",
|
540
531
|
settings.NABU_MULTICOR_PATH,
|
541
|
-
conf_file, # input file
|
532
|
+
f"'{conf_file}'", # input file
|
542
533
|
f"{slice_index}", # slice
|
543
534
|
f"{cor_in_nabu_ref}", # cor
|
544
535
|
)
|
@@ -567,12 +558,15 @@ class _ReconstructorMultiCor(_NabuBaseReconstructor):
|
|
567
558
|
scan=self.scan,
|
568
559
|
file_format=file_format,
|
569
560
|
cors=[
|
570
|
-
|
561
|
+
relative_pos_to_absolute(relative_pos=cor, det_width=self.scan.dim_1)
|
562
|
+
for cor in self.cors
|
571
563
|
],
|
572
564
|
)
|
573
565
|
# convert back from abs ref to rel ref
|
574
566
|
recons_vol_identifiers = {
|
575
|
-
|
567
|
+
absolute_pos_to_relative(
|
568
|
+
absolute_pos=cor, det_width=self.scan.dim_1
|
569
|
+
): identifiers
|
576
570
|
for cor, identifiers in recons_vol_identifiers.items()
|
577
571
|
}
|
578
572
|
return ResultsLocalRun(
|
@@ -595,7 +589,6 @@ class _ReconstructorMultiCor(_NabuBaseReconstructor):
|
|
595
589
|
Run a nabu reconstruction on slurm of a single configuration
|
596
590
|
|
597
591
|
:return: results of the slurm run
|
598
|
-
:rtype: ResultSlurmRun
|
599
592
|
"""
|
600
593
|
if not isinstance(conf_file, str):
|
601
594
|
raise TypeError(f"conf_file is expected to be a strg not {type(conf_file)}")
|
@@ -623,7 +616,10 @@ class _ReconstructorMultiCor(_NabuBaseReconstructor):
|
|
623
616
|
|
624
617
|
slice_index = slice_index_to_int(self.slice_index, scan=self.scan)
|
625
618
|
cor_in_nabu_ref = tuple(
|
626
|
-
[
|
619
|
+
[
|
620
|
+
relative_pos_to_absolute(relative_pos=cor, det_width=self.scan.dim_1)
|
621
|
+
for cor in self.cors
|
622
|
+
]
|
627
623
|
)
|
628
624
|
cor_in_nabu_ref = ",".join([str(cor) for cor in cor_in_nabu_ref])
|
629
625
|
|
@@ -664,9 +660,9 @@ class _ReconstructorMultiCor(_NabuBaseReconstructor):
|
|
664
660
|
dataset_params.update(config["dataset"])
|
665
661
|
config["dataset"] = dataset_params
|
666
662
|
|
667
|
-
config["resources"] =
|
668
|
-
|
669
|
-
|
663
|
+
config["resources"] = config.get("resources", {})
|
664
|
+
config["resources"]["method"] = "local"
|
665
|
+
|
670
666
|
# force overwrite results
|
671
667
|
if "output" not in config:
|
672
668
|
config["output"] = {}
|
@@ -1,32 +1,4 @@
|
|
1
|
-
|
2
|
-
# /*##########################################################################
|
3
|
-
#
|
4
|
-
# Copyright (c) 2016-2020 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__ = "26/10/2021"
|
29
|
-
|
1
|
+
from __future__ import annotations
|
30
2
|
|
31
3
|
import copy
|
32
4
|
import functools
|
@@ -44,11 +16,11 @@ from tomwer.core.utils.scanutils import data_identifier_to_scan
|
|
44
16
|
from tomwer.core.utils.slurm import is_slurm_available
|
45
17
|
from tomwer.core.process.reconstruction.nabu.plane import NabuPlane
|
46
18
|
from tomwer.core.process.reconstruction.nabu.utils import slice_index_to_int
|
47
|
-
from tomwer.core.process.
|
48
|
-
IcatScreenshots,
|
49
|
-
deduce_dataset_gallery_location,
|
50
|
-
)
|
19
|
+
from tomwer.core.process.reconstruction.utils.cor import relative_pos_to_absolute
|
51
20
|
from tomwer.core.volume.volumefactory import VolumeFactory
|
21
|
+
from tomwer.core.process.reconstruction.output import (
|
22
|
+
PROCESS_FOLDER_RECONSTRUCTED_SLICES,
|
23
|
+
)
|
52
24
|
|
53
25
|
try:
|
54
26
|
from nabu.pipeline.fullfield.reconstruction import ( # noqa F401
|
@@ -70,7 +42,7 @@ else:
|
|
70
42
|
has_nabu = True
|
71
43
|
_err_import_nabu = None
|
72
44
|
|
73
|
-
from typing import Iterable
|
45
|
+
from typing import Iterable
|
74
46
|
|
75
47
|
from nabu import version as nabu_version
|
76
48
|
from nabu.pipeline.config import (
|
@@ -114,32 +86,30 @@ def run_slices_reconstruction(
|
|
114
86
|
config: dict,
|
115
87
|
dry_run: bool = False,
|
116
88
|
advancement=None,
|
117
|
-
process_id=None,
|
118
|
-
|
89
|
+
process_id: int | None = None,
|
90
|
+
instantiate_classes_only: bool = False,
|
119
91
|
) -> tuple:
|
120
92
|
"""
|
121
93
|
call nabu for a reconstruction on scan with the given configuration
|
122
94
|
|
123
|
-
:param
|
124
|
-
:param
|
95
|
+
:param scan: scan to reconstruct
|
96
|
+
:param config: configuration to run the reconstruction.
|
125
97
|
Contains nabu reconstruction parameters and slurm cluster
|
126
|
-
|
127
|
-
:param
|
128
|
-
:param
|
98
|
+
configuration if requested (key: `slurm-cluster`).
|
99
|
+
:param dry_run: do we want to run dry
|
100
|
+
:param local: do we want to run a local reconstruction
|
129
101
|
:param stderr: file to redirect stderr
|
130
102
|
:param stdout: file to redirect stdout
|
131
103
|
:param advancement: optional Progress class to display advancement
|
132
|
-
:param
|
133
|
-
:param
|
104
|
+
:param process_id: optional process id
|
105
|
+
:param instantiate_class_only: if we don't want to run the SingleSliceRunner but only return them. Use case: we want to keep a hand on processing and it can be cancelled
|
134
106
|
|
135
107
|
:return: (all_succeed, stdouts, stderrs, final_configs, future_scan)
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
None if local reconstruction
|
142
|
-
:rtype: tuple
|
108
|
+
* all_succeed: bool, True if all the reconstruction succeed or if all job request succeed.
|
109
|
+
* stdouts: list of stdout of job reconstruction or job requests
|
110
|
+
* stderrs: list of stderr of job reconstruction or job requests
|
111
|
+
* final_configs: list of configurations submits to nabu
|
112
|
+
* future_scan: FutureTomwerScan | None future scan containing futures pointing to job submited to the cluster. None if local reconstruction
|
143
113
|
|
144
114
|
Behavior: will clear the last slices reconstructed
|
145
115
|
"""
|
@@ -162,7 +132,10 @@ def run_slices_reconstruction(
|
|
162
132
|
if scan.axis_params is not None and scan.axis_params.relative_cor_value is not None:
|
163
133
|
if "reconstruction" in config:
|
164
134
|
# move the cor value to the nabu reference
|
165
|
-
cor_nabu_ref =
|
135
|
+
cor_nabu_ref = relative_pos_to_absolute(
|
136
|
+
relative_pos=scan.axis_params.relative_cor_value,
|
137
|
+
det_width=scan.dim_1,
|
138
|
+
)
|
166
139
|
config["reconstruction"]["rotation_axis_position"] = str(cor_nabu_ref)
|
167
140
|
_logger.info(f"set nabu reconstruction parameters to {scan}")
|
168
141
|
|
@@ -178,10 +151,10 @@ def run_slices_reconstruction(
|
|
178
151
|
stdouts = []
|
179
152
|
final_configs = []
|
180
153
|
futures = []
|
181
|
-
|
154
|
+
instantiated_classes = []
|
182
155
|
all_succeed = True
|
183
156
|
if advancement is not None:
|
184
|
-
advancement.
|
157
|
+
advancement.total = len(nabu_configurations)
|
185
158
|
scan.clear_latest_reconstructions()
|
186
159
|
for nabu_configuration in nabu_configurations:
|
187
160
|
l_config, slice_index = nabu_configuration
|
@@ -191,7 +164,7 @@ def run_slices_reconstruction(
|
|
191
164
|
scan=scan,
|
192
165
|
slice_index=slice_index,
|
193
166
|
dry_run=dry_run,
|
194
|
-
|
167
|
+
instantiate_class_only=instantiate_classes_only,
|
195
168
|
axis=config.get("reconstruction", {}).get("slice_plane", "XY"),
|
196
169
|
)
|
197
170
|
|
@@ -199,8 +172,8 @@ def run_slices_reconstruction(
|
|
199
172
|
if result is None:
|
200
173
|
# in case of timeout or another issue. Log should already have been provided
|
201
174
|
pass
|
202
|
-
elif
|
203
|
-
|
175
|
+
elif instantiate_classes_only:
|
176
|
+
instantiated_classes.append(result)
|
204
177
|
continue
|
205
178
|
if slice_index is None:
|
206
179
|
continue
|
@@ -229,10 +202,10 @@ def run_slices_reconstruction(
|
|
229
202
|
all_succeed = all_succeed and result.success
|
230
203
|
|
231
204
|
if advancement is not None:
|
232
|
-
advancement.
|
205
|
+
advancement.update()
|
233
206
|
|
234
|
-
if
|
235
|
-
return
|
207
|
+
if instantiate_classes_only:
|
208
|
+
return instantiated_classes
|
236
209
|
if is_cluster_job:
|
237
210
|
future_tomo_obj = FutureTomwerObject(
|
238
211
|
tomo_obj=scan,
|
@@ -258,7 +231,7 @@ class NabuSlicesTask(
|
|
258
231
|
"dry_run",
|
259
232
|
"serialize_output_data",
|
260
233
|
),
|
261
|
-
output_names=("data", "nabu_params", "future_tomo_obj"
|
234
|
+
output_names=("data", "nabu_params", "future_tomo_obj"),
|
262
235
|
):
|
263
236
|
"""
|
264
237
|
Definition of the nabu reconstruction volume reconstruction process
|
@@ -321,10 +294,10 @@ class NabuSlicesTask(
|
|
321
294
|
scan=scan,
|
322
295
|
dry_run=self._dry_run,
|
323
296
|
process_id=self.process_id,
|
324
|
-
|
297
|
+
instantiate_classes_only=True,
|
325
298
|
)
|
326
299
|
except Exception as e:
|
327
|
-
mess = f"Fail to
|
300
|
+
mess = f"Fail to instantiate slice reconstructor for {str(scan)}. Reason is {e}."
|
328
301
|
_logger.processFailed(mess)
|
329
302
|
ProcessManager().notify_dataset_state(
|
330
303
|
dataset=scan,
|
@@ -389,15 +362,6 @@ class NabuSlicesTask(
|
|
389
362
|
VolumeFactory.from_identifier_to_vol_urls(rec_identifier)
|
390
363
|
)
|
391
364
|
|
392
|
-
self.outputs.screenshots = IcatScreenshots(
|
393
|
-
data_dir=deduce_dataset_gallery_location(scan),
|
394
|
-
screenshots={
|
395
|
-
os.path.splitext(os.path.basename(url.file_path()))[0]: url
|
396
|
-
for url in volume_urls
|
397
|
-
},
|
398
|
-
scan=scan,
|
399
|
-
)
|
400
|
-
|
401
365
|
process_index = scan.pop_process_index()
|
402
366
|
# update processes information / registration
|
403
367
|
gc.collect()
|
@@ -470,15 +434,11 @@ class NabuSlicesTask(
|
|
470
434
|
return self._dry_run
|
471
435
|
|
472
436
|
@staticmethod
|
473
|
-
def get_process_frm_process_file(process_file, entry):
|
437
|
+
def get_process_frm_process_file(process_file: str, entry: str) -> dict:
|
474
438
|
"""
|
475
|
-
Read informations regarding the nabu process save in the
|
476
|
-
tomwer_process.h5 file
|
439
|
+
Read informations regarding the nabu process save in the tomwer_process.h5 file
|
477
440
|
|
478
|
-
:param process_file:
|
479
|
-
:param entry:
|
480
441
|
:return: dictionary with the contain of the nabu process
|
481
|
-
:rtype:dict
|
482
442
|
"""
|
483
443
|
if entry is None:
|
484
444
|
with open_hdf5(process_file) as h5f:
|
@@ -553,15 +513,13 @@ class NabuSlicesTask(
|
|
553
513
|
return h5py_read_dataset(latest_nabu_node[path])
|
554
514
|
|
555
515
|
|
556
|
-
def interpret_tomwer_configuration(
|
557
|
-
config: dict, scan: Union[TomwerScanBase, None]
|
558
|
-
) -> tuple:
|
516
|
+
def interpret_tomwer_configuration(config: dict, scan: TomwerScanBase | None) -> tuple:
|
559
517
|
"""
|
560
518
|
tomwer can 'mock' the nabu reconstruction to request more feature.
|
561
519
|
Typical use case is that we can ask for reconstruction of several
|
562
520
|
slices and not only the volume
|
563
521
|
|
564
|
-
:param
|
522
|
+
:param config: tomwer configuration for nabu
|
565
523
|
:param scan: requested if we want to get slices
|
566
524
|
:return: tuple of tuples (nabu configuration, is slice)
|
567
525
|
"""
|
@@ -624,10 +582,10 @@ class SingleSliceRunner(_NabuBaseReconstructor):
|
|
624
582
|
scan: TomwerScanBase,
|
625
583
|
config: dict,
|
626
584
|
dry_run: bool,
|
627
|
-
slice_index:
|
585
|
+
slice_index: int | str | None,
|
628
586
|
axis: NabuPlane,
|
629
587
|
target: Target,
|
630
|
-
cluster_config:
|
588
|
+
cluster_config: dict | None,
|
631
589
|
process_name: str,
|
632
590
|
add_to_latest_reconstructions: bool = True,
|
633
591
|
) -> None:
|
@@ -657,6 +615,11 @@ class SingleSliceRunner(_NabuBaseReconstructor):
|
|
657
615
|
def add_to_latest_reconstructions(self):
|
658
616
|
return self._add_to_latest_reconstructions
|
659
617
|
|
618
|
+
@property
|
619
|
+
def processed_data_folder_name(self):
|
620
|
+
"""return the specific processed folder name associated to this type of reconstruction."""
|
621
|
+
return PROCESS_FOLDER_RECONSTRUCTED_SLICES
|
622
|
+
|
660
623
|
@docstring(_NabuBaseReconstructor)
|
661
624
|
def only_create_config_file(self):
|
662
625
|
return self.slice_index is None
|
@@ -690,9 +653,9 @@ class SingleSliceRunner(_NabuBaseReconstructor):
|
|
690
653
|
config_complete[key].update(self.config[key])
|
691
654
|
config = config_complete
|
692
655
|
|
693
|
-
config["resources"] =
|
694
|
-
|
695
|
-
|
656
|
+
config["resources"] = config.get("resources", {})
|
657
|
+
config["resources"]["method"] = "local"
|
658
|
+
|
696
659
|
# force overwrite results
|
697
660
|
if "output" not in config:
|
698
661
|
config["output"] = {}
|
@@ -789,7 +752,7 @@ class SingleSliceRunner(_NabuBaseReconstructor):
|
|
789
752
|
pag,
|
790
753
|
ctf,
|
791
754
|
db,
|
792
|
-
slice_index:
|
755
|
+
slice_index: str | int,
|
793
756
|
axis: NabuPlane,
|
794
757
|
):
|
795
758
|
axis = NabuPlane.from_value(axis)
|
@@ -853,12 +816,8 @@ class SingleSliceRunner(_NabuBaseReconstructor):
|
|
853
816
|
def _get_file_basename_reconstruction(self, pag, db, ctf, axis):
|
854
817
|
"""
|
855
818
|
|
856
|
-
:param
|
857
|
-
:param
|
858
|
-
if None, we want to reconstruct the
|
859
|
-
entire volume
|
860
|
-
:param bool pag: is it a paganin reconstruction
|
861
|
-
:param int db: delta / beta parameter
|
819
|
+
:param pag: is it a paganin reconstruction
|
820
|
+
:param db: delta / beta parameter
|
862
821
|
:return: basename of the file reconstructed (without any extension)
|
863
822
|
"""
|
864
823
|
return self.get_file_basename_reconstruction(
|
@@ -875,30 +834,29 @@ def run_single_slice_reconstruction(
|
|
875
834
|
scan,
|
876
835
|
nabu_config,
|
877
836
|
dry_run,
|
878
|
-
slice_index:
|
879
|
-
process_id:
|
880
|
-
cluster_config:
|
837
|
+
slice_index: int | str | None,
|
838
|
+
process_id: int | None = None,
|
839
|
+
cluster_config: dict | None = None,
|
881
840
|
add_to_latest_reconstructions=True,
|
882
|
-
|
841
|
+
instantiate_class_only=False,
|
883
842
|
axis: NabuPlane = NabuPlane.XY,
|
884
|
-
) ->
|
843
|
+
) -> ResultsRun | None:
|
885
844
|
"""
|
886
845
|
# TODO: might need something like a context or an option "keep" slice in memory
|
887
846
|
|
888
847
|
:param scan:
|
889
|
-
:param nabu_config:
|
890
|
-
:param cluster_config:
|
848
|
+
:param nabu_config: configuration of nabu process
|
849
|
+
:param cluster_config: configuration of cluster (slurm-cluster only for now)
|
891
850
|
:param dry_run:
|
892
|
-
:param
|
851
|
+
:param slice_index: slice index to reconstruct.
|
893
852
|
If str should be "middle"
|
894
853
|
:param local:
|
895
854
|
:param stdout: file to redirect stdout
|
896
855
|
:param stderr: file to redirect stderr
|
897
|
-
:param
|
856
|
+
:param add_to_latest_reconstructions: if true add reconstructed slice to the latest reconstruction.
|
898
857
|
We wan't to avoid this treatment for saaxis and sadeltebeta for example
|
899
|
-
:param
|
858
|
+
:param instantiate_class_only: if we don't want to run the SingleSliceRunner but only return them. Use case: we want to keep a hand on processing and it can be cancelled
|
900
859
|
:return: result of the slice reconstruction if succeed to launch it.
|
901
|
-
:rtype: Optional[ResultsRun]
|
902
860
|
"""
|
903
861
|
# TODO: remove local from the function signature
|
904
862
|
target = Target.SLURM if cluster_config not in ({}, None) else Target.LOCAL
|
@@ -928,7 +886,7 @@ def run_single_slice_reconstruction(
|
|
928
886
|
add_to_latest_reconstructions=add_to_latest_reconstructions,
|
929
887
|
process_name=process_name,
|
930
888
|
)
|
931
|
-
if
|
889
|
+
if instantiate_class_only:
|
932
890
|
return slice_reconstructor
|
933
891
|
|
934
892
|
try:
|