tomwer 1.2.1__py3-none-any.whl → 1.3.12__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/tutorials/icat_publication.ows +58 -0
- orangecontrib/tomwer/widgets/__init__.py +11 -11
- orangecontrib/tomwer/widgets/control/DataDiscoveryOW.py +2 -2
- orangecontrib/tomwer/widgets/control/DataListOW.py +9 -7
- orangecontrib/tomwer/widgets/control/DataListenerOW.py +6 -6
- orangecontrib/tomwer/widgets/control/DataSelectorOW.py +21 -10
- orangecontrib/tomwer/widgets/control/DataValidatorOW.py +6 -6
- orangecontrib/tomwer/widgets/control/EDF2NXTomomillOW.py +24 -7
- orangecontrib/tomwer/widgets/control/EmailOW.py +4 -4
- orangecontrib/tomwer/widgets/control/NXTomomillMixIn.py +3 -3
- orangecontrib/tomwer/widgets/control/NXTomomillOW.py +64 -23
- orangecontrib/tomwer/widgets/control/NXtomoConcatenate.py +20 -8
- orangecontrib/tomwer/widgets/control/NotifierOW.py +1 -0
- orangecontrib/tomwer/widgets/control/SingleTomoObjOW.py +6 -6
- orangecontrib/tomwer/widgets/control/VolumeSelector.py +7 -4
- orangecontrib/tomwer/widgets/control/VolumeSymLinkOW.py +182 -182
- orangecontrib/tomwer/widgets/debugtools/DatasetGeneratorOW.py +5 -5
- orangecontrib/tomwer/widgets/edit/DarkFlatPatchOW.py +4 -4
- orangecontrib/tomwer/widgets/edit/ImageKeyEditorOW.py +3 -3
- orangecontrib/tomwer/widgets/edit/ImageKeyUpgraderOW.py +8 -1
- orangecontrib/tomwer/widgets/edit/NXtomoEditorOW.py +3 -3
- orangecontrib/tomwer/widgets/edit/test/test_nxtomo_editor.py +3 -3
- orangecontrib/tomwer/widgets/icat/PublishProcessedDataOW.py +115 -0
- orangecontrib/tomwer/widgets/icat/RawDataScreenshotCreatorOW.py +98 -0
- orangecontrib/tomwer/widgets/icat/SaveToGalleryAndPublishOW.py +129 -0
- orangecontrib/tomwer/widgets/icat/__init__.py +13 -0
- orangecontrib/tomwer/widgets/icat/icons/add_gallery.png +0 -0
- orangecontrib/tomwer/widgets/icat/icons/add_gallery.svg +82 -0
- orangecontrib/tomwer/widgets/icat/icons/publish_processed_data.png +0 -0
- orangecontrib/tomwer/widgets/icat/icons/publish_processed_data.svg +95 -0
- orangecontrib/tomwer/widgets/icat/icons/raw_screenshots.png +0 -0
- orangecontrib/tomwer/widgets/icat/icons/raw_screenshots.svg +143 -0
- orangecontrib/tomwer/widgets/icons/tomwer_data_portal.png +0 -0
- orangecontrib/tomwer/widgets/icons/tomwer_data_portal.svg +76 -0
- orangecontrib/tomwer/widgets/reconstruction/AxisOW.py +22 -20
- orangecontrib/tomwer/widgets/reconstruction/CastNabuVolumeOW.py +19 -3
- orangecontrib/tomwer/widgets/reconstruction/NabuHelicalPrepareWeightsDoubleOW.py +184 -169
- orangecontrib/tomwer/widgets/reconstruction/NabuOW.py +23 -0
- orangecontrib/tomwer/widgets/reconstruction/NabuVolumeOW.py +39 -5
- orangecontrib/tomwer/widgets/reconstruction/SAAxisOW.py +18 -22
- orangecontrib/tomwer/widgets/reconstruction/SADeltaBetaOW.py +18 -26
- orangecontrib/tomwer/widgets/reconstruction/SinoNormOW.py +15 -19
- orangecontrib/tomwer/widgets/visualization/DataViewerOW.py +9 -9
- orangecontrib/tomwer/widgets/visualization/DiffViewerOW.py +1 -1
- orangecontrib/tomwer/widgets/visualization/LivesliceOW.py +1 -1
- orangecontrib/tomwer/widgets/visualization/NXtomoMetadataViewerOW.py +3 -3
- orangecontrib/tomwer/widgets/visualization/SinogramViewerOW.py +0 -1
- orangecontrib/tomwer/widgets/visualization/VolumeViewerOW.py +3 -29
- tomwer/__main__.py +7 -64
- tomwer/app/axis.py +3 -3
- tomwer/app/canvas.py +8 -0
- tomwer/app/canvas_launcher/config.py +16 -14
- tomwer/app/canvas_launcher/environ.py +1 -0
- tomwer/app/canvas_launcher/mainwindow.py +4 -1
- tomwer/app/darkref.py +1 -1
- tomwer/app/darkrefpatch.py +1 -1
- tomwer/app/diffframe.py +3 -3
- tomwer/app/imagekeyeditor.py +5 -5
- tomwer/app/imagekeyupgrader.py +5 -5
- tomwer/app/intensitynormalization.py +14 -13
- tomwer/app/{saaxis.py → multicor.py} +3 -3
- tomwer/app/{sadeltabeta.py → multipag.py} +3 -3
- tomwer/app/nabuapp.py +0 -11
- tomwer/app/radiostack.py +6 -4
- tomwer/app/samplemoved.py +3 -2
- tomwer/app/scanviewer.py +4 -2
- tomwer/app/sinogramviewer.py +3 -2
- tomwer/app/slicestack.py +3 -2
- tomwer/app/zstitching.py +88 -6
- tomwer/core/cluster/cluster.py +26 -0
- tomwer/core/log/logger.py +7 -5
- tomwer/core/process/conditions/filters.py +1 -1
- tomwer/core/process/control/datalistener/datalistener.py +19 -14
- tomwer/core/process/control/datawatcher/edfdwprocess.py +0 -9
- tomwer/core/process/control/nxtomoconcatenate.py +13 -13
- tomwer/core/process/control/nxtomomill.py +92 -34
- tomwer/core/process/control/scantransfer.py +20 -43
- tomwer/core/process/control/scanvalidator.py +3 -2
- tomwer/core/process/control/test/test_concatenate_nxtomos.py +9 -9
- tomwer/core/process/control/test/test_email.py +4 -4
- tomwer/core/process/control/test/test_h52nx_process.py +59 -7
- tomwer/core/process/control/test/test_volume_link.py +64 -64
- tomwer/core/process/control/timer.py +1 -1
- tomwer/core/process/control/volumesymlink.py +200 -200
- tomwer/core/process/edit/darkflatpatch.py +14 -15
- tomwer/core/process/edit/imagekeyeditor.py +41 -39
- tomwer/core/process/icat/__init__.py +0 -0
- tomwer/core/process/icat/createscreenshots.py +100 -0
- tomwer/core/process/icat/gallery.py +377 -0
- tomwer/core/process/icat/icatbase.py +36 -0
- tomwer/core/process/icat/publish.py +228 -0
- tomwer/core/process/icat/screenshots.py +27 -0
- tomwer/core/process/output.py +52 -0
- tomwer/core/process/reconstruction/axis/axis.py +280 -69
- tomwer/core/process/reconstruction/axis/mode.py +163 -48
- tomwer/core/process/reconstruction/axis/params.py +29 -21
- tomwer/core/process/reconstruction/darkref/darkrefs.py +41 -127
- tomwer/core/process/reconstruction/darkref/darkrefscopy.py +4 -3
- tomwer/core/process/reconstruction/darkref/params.py +1 -1
- tomwer/core/process/reconstruction/nabu/castvolume.py +4 -4
- tomwer/core/process/reconstruction/nabu/helical.py +9 -5
- tomwer/core/process/reconstruction/nabu/nabucommon.py +71 -78
- tomwer/core/process/reconstruction/nabu/nabuscores.py +425 -53
- tomwer/core/process/reconstruction/nabu/nabuslices.py +114 -93
- tomwer/core/process/reconstruction/nabu/nabuvolume.py +54 -27
- tomwer/core/process/reconstruction/nabu/plane.py +9 -0
- tomwer/core/process/reconstruction/nabu/settings.py +2 -2
- tomwer/core/process/reconstruction/nabu/utils.py +164 -26
- tomwer/core/process/reconstruction/output.py +108 -0
- tomwer/core/process/reconstruction/saaxis/saaxis.py +238 -264
- tomwer/core/process/reconstruction/sadeltabeta/sadeltabeta.py +151 -87
- tomwer/core/process/reconstruction/scores/params.py +7 -4
- tomwer/core/process/reconstruction/scores/scores.py +13 -0
- tomwer/core/process/reconstruction/test/test_axis_params.py +2 -2
- tomwer/core/process/reconstruction/test/test_darkref.py +3 -3
- tomwer/core/process/reconstruction/test/test_darkref_copy.py +7 -7
- tomwer/core/process/reconstruction/test/test_saaxis.py +3 -4
- tomwer/core/process/reconstruction/test/test_sadeltabeta.py +2 -2
- tomwer/core/process/stitching/nabustitcher.py +13 -12
- tomwer/core/process/task.py +34 -26
- tomwer/core/process/test/test_axis.py +13 -12
- tomwer/core/process/test/test_dark_and_flat.py +10 -7
- tomwer/core/process/test/test_data_transfer.py +10 -8
- tomwer/core/process/test/test_nabu.py +14 -6
- tomwer/core/process/test/test_normalization.py +4 -4
- tomwer/core/scan/blissscan.py +3 -3
- tomwer/core/scan/edfscan.py +13 -10
- tomwer/core/scan/hdf5scan.py +19 -530
- tomwer/core/scan/nxtomoscan.py +534 -0
- tomwer/core/scan/scanbase.py +72 -44
- tomwer/core/scan/scanfactory.py +13 -13
- tomwer/core/scan/test/test_edf.py +2 -2
- tomwer/core/scan/test/test_future_scan.py +3 -3
- tomwer/core/scan/test/test_h5.py +18 -16
- tomwer/core/scan/test/test_process_registration.py +4 -40
- tomwer/core/scan/test/test_scan.py +5 -78
- tomwer/core/settings.py +22 -2
- tomwer/core/test/test_scanutils.py +8 -7
- tomwer/core/test/test_utils.py +35 -28
- tomwer/core/tomwer_object.py +1 -1
- tomwer/core/utils/__init__.py +0 -466
- tomwer/core/utils/deprecation.py +1 -1
- tomwer/core/utils/dictutils.py +14 -0
- tomwer/core/utils/lbsram.py +35 -0
- tomwer/core/utils/nxtomoutils.py +1 -1
- tomwer/core/utils/scanutils.py +6 -6
- tomwer/core/utils/spec.py +263 -0
- tomwer/core/volume/edfvolume.py +6 -6
- tomwer/core/volume/hdf5volume.py +6 -6
- tomwer/core/volume/jp2kvolume.py +6 -6
- tomwer/core/volume/rawvolume.py +6 -6
- tomwer/core/volume/tiffvolume.py +12 -12
- tomwer/core/volume/volumefactory.py +2 -2
- tomwer/gui/cluster/slurm.py +274 -65
- tomwer/gui/cluster/supervisor.py +12 -0
- tomwer/gui/cluster/test/test_cluster.py +14 -2
- tomwer/gui/cluster/test/test_supervisor.py +3 -3
- tomwer/gui/configuration/__init__.py +0 -0
- tomwer/gui/{reconstruction/nabu → configuration}/action.py +1 -32
- tomwer/gui/configuration/level.py +22 -0
- tomwer/gui/control/actions.py +54 -0
- tomwer/gui/control/datalist.py +83 -16
- tomwer/gui/control/datalistener.py +4 -16
- tomwer/gui/control/datawatcher/controlwidget.py +2 -4
- tomwer/gui/control/datawatcher/datawatcher.py +1 -24
- tomwer/gui/control/{email.py → emailnotifier.py} +9 -18
- tomwer/gui/control/history.py +2 -2
- tomwer/gui/control/observations.py +2 -2
- tomwer/gui/control/reducedarkflatselector.py +9 -9
- tomwer/gui/control/selectorwidgetbase.py +36 -9
- tomwer/gui/control/serie/seriecreator.py +5 -22
- tomwer/gui/control/test/test_email.py +1 -1
- tomwer/gui/control/test/test_scanvalidator.py +6 -5
- tomwer/gui/control/test/test_single_tomo_obj.py +3 -3
- tomwer/gui/control/tomoobjdisplaymode.py +8 -0
- tomwer/gui/debugtools/datasetgenerator.py +3 -3
- tomwer/gui/edit/dkrfpatch.py +20 -26
- tomwer/gui/edit/imagekeyeditor.py +11 -12
- tomwer/gui/edit/nxtomoeditor.py +111 -44
- tomwer/gui/edit/nxtomowarmer.py +7 -6
- tomwer/gui/edit/test/test_dkrf_patch.py +13 -13
- tomwer/gui/edit/test/test_image_key_editor.py +3 -3
- tomwer/gui/edit/test/test_nx_editor.py +40 -16
- tomwer/gui/icat/__init__.py +0 -0
- tomwer/gui/icat/createscreenshots.py +80 -0
- tomwer/gui/icat/gallery.py +214 -0
- tomwer/gui/icat/publish.py +187 -0
- tomwer/gui/imagefromfile.py +2 -2
- tomwer/gui/qfolderdialog.py +24 -1
- tomwer/gui/reconstruction/axis/CompareImages.py +88 -168
- tomwer/gui/reconstruction/axis/axis.py +171 -57
- tomwer/gui/reconstruction/axis/radioaxis.py +122 -257
- tomwer/gui/reconstruction/darkref/darkrefcopywidget.py +3 -2
- tomwer/gui/reconstruction/darkref/darkrefwidget.py +2 -1
- tomwer/gui/reconstruction/nabu/castvolume.py +14 -3
- tomwer/gui/reconstruction/nabu/check.py +9 -9
- tomwer/gui/reconstruction/nabu/helical.py +29 -12
- tomwer/gui/reconstruction/nabu/nabuconfig/base.py +2 -4
- tomwer/gui/reconstruction/nabu/nabuconfig/nabuconfig.py +2 -1
- tomwer/gui/reconstruction/nabu/nabuconfig/output.py +126 -35
- tomwer/gui/reconstruction/nabu/nabuconfig/phase.py +39 -32
- tomwer/gui/reconstruction/nabu/nabuconfig/preprocessing.py +222 -31
- tomwer/gui/reconstruction/nabu/nabuconfig/reconstruction.py +57 -27
- tomwer/gui/reconstruction/nabu/nabuflow.py +12 -20
- tomwer/gui/reconstruction/nabu/slices.py +10 -11
- tomwer/gui/reconstruction/nabu/volume.py +22 -10
- tomwer/gui/reconstruction/normalization/intensity.py +18 -48
- tomwer/gui/reconstruction/saaxis/corrangeselector.py +8 -24
- tomwer/gui/reconstruction/saaxis/dimensionwidget.py +1 -1
- tomwer/gui/reconstruction/saaxis/saaxis.py +9 -21
- tomwer/gui/reconstruction/sadeltabeta/saadeltabeta.py +45 -12
- tomwer/gui/reconstruction/scores/control.py +2 -9
- tomwer/gui/reconstruction/scores/scoreplot.py +13 -11
- tomwer/gui/reconstruction/test/test_axis.py +41 -16
- tomwer/gui/reconstruction/test/test_nabu.py +31 -9
- tomwer/gui/reconstruction/test/test_saaxis.py +3 -3
- tomwer/gui/reconstruction/test/test_sadeltabeta.py +12 -2
- tomwer/gui/settings.py +5 -28
- tomwer/gui/stackplot.py +2 -5
- tomwer/gui/stitching/action.py +49 -0
- tomwer/gui/stitching/config/axisparams.py +7 -24
- tomwer/gui/stitching/config/output.py +10 -8
- tomwer/gui/stitching/config/positionoveraxis.py +22 -23
- tomwer/gui/stitching/normalization.py +117 -0
- tomwer/gui/stitching/stitchandbackground.py +4 -6
- tomwer/gui/stitching/stitching.py +267 -45
- tomwer/gui/stitching/stitching_preview.py +62 -55
- tomwer/gui/stitching/stitching_raw.py +13 -12
- tomwer/gui/stitching/z_stitching/fineestimation.py +0 -60
- tomwer/gui/utils/buttons.py +112 -29
- tomwer/gui/utils/inputwidget.py +43 -25
- tomwer/gui/utils/lineselector/lineselector.py +1 -1
- tomwer/gui/utils/scandescription.py +4 -0
- tomwer/gui/utils/step.py +144 -0
- tomwer/gui/utils/unitsystem.py +2 -5
- tomwer/gui/utils/vignettes.py +176 -15
- tomwer/gui/visualization/dataviewer.py +48 -35
- tomwer/gui/visualization/diffviewer/diffviewer.py +7 -16
- tomwer/gui/visualization/diffviewer/shiftwidget.py +2 -5
- tomwer/gui/visualization/scanoverview.py +1 -1
- tomwer/gui/visualization/sinogramviewer.py +20 -36
- tomwer/gui/visualization/test/test_diffviewer.py +3 -3
- tomwer/gui/visualization/test/test_nx_tomo_metadata_viewer.py +4 -4
- tomwer/gui/visualization/test/test_sinogramviewer.py +2 -2
- tomwer/gui/visualization/test/test_stacks.py +3 -3
- tomwer/gui/visualization/test/test_volumeviewer.py +65 -67
- tomwer/gui/visualization/volumeviewer.py +114 -113
- tomwer/io/utils/h5pyutils.py +3 -3
- tomwer/io/utils/raw_and_processed_data.py +84 -0
- tomwer/io/utils/tomoobj.py +4 -6
- tomwer/io/utils/utils.py +7 -7
- tomwer/resources/gui/icons/parameters.svg +1 -1
- tomwer/resources/gui/icons/ruler.png +0 -0
- tomwer/resources/gui/icons/ruler.svg +273 -0
- tomwer/resources/gui/icons/short_description.png +0 -0
- tomwer/resources/gui/icons/short_description.svg +58 -0
- tomwer/resources/gui/icons/url.png +0 -0
- tomwer/resources/gui/icons/url.svg +58 -0
- tomwer/resources/gui/illustrations/no_rot.svg +1 -1
- tomwer/synctools/stacks/edit/darkflatpatch.py +19 -14
- tomwer/synctools/stacks/edit/imagekeyeditor.py +2 -2
- tomwer/synctools/stacks/reconstruction/axis.py +4 -4
- tomwer/synctools/stacks/reconstruction/castvolume.py +22 -7
- tomwer/synctools/stacks/reconstruction/dkrefcopy.py +25 -20
- tomwer/synctools/stacks/reconstruction/nabu.py +2 -2
- tomwer/synctools/stacks/reconstruction/normalization.py +2 -2
- tomwer/synctools/stacks/reconstruction/saaxis.py +2 -2
- tomwer/synctools/stacks/reconstruction/sadeltabeta.py +2 -2
- tomwer/synctools/test/test_darkRefs.py +7 -58
- tomwer/synctools/test/test_foldertransfer.py +6 -6
- tomwer/synctools/utils/scanstages.py +6 -6
- tomwer/tests/conftest.py +34 -0
- tomwer/tests/datasets.py +13 -0
- tomwer/tests/test_scripts.py +91 -41
- tomwer/tests/utils.py +5 -0
- tomwer/third_part/WaitingOverlay.py +110 -0
- tomwer/third_part/__init__.py +0 -0
- tomwer/version.py +2 -2
- tomwer-1.3.12-py3.11-nspkg.pth +1 -0
- {tomwer-1.2.1.dist-info → tomwer-1.3.12.dist-info}/METADATA +73 -58
- {tomwer-1.2.1.dist-info → tomwer-1.3.12.dist-info}/RECORD +287 -286
- {tomwer-1.2.1.dist-info → tomwer-1.3.12.dist-info}/WHEEL +1 -1
- orangecontrib/tomwer/widgets/reconstruction/TofuOW.py +0 -197
- orangecontrib/tomwer/widgets/reconstruction/icons/XY_lamino.svg +0 -168
- orangecontrib/tomwer/widgets/reconstruction/icons/XZ_lamino.svg +0 -275
- orangecontrib/tomwer/widgets/reconstruction/icons/YZ_lamino.svg +0 -182
- tomwer/app/lamino.py +0 -143
- tomwer/core/process/reconstruction/lamino/__init__.py +0 -1
- tomwer/core/process/reconstruction/lamino/tofu.py +0 -1000
- tomwer/core/process/test/test_lamino.py +0 -76
- tomwer/core/test/test_lamino.py +0 -92
- tomwer/gui/reconstruction/lamino/__init__.py +0 -31
- tomwer/gui/reconstruction/lamino/tofu/TofuOptionLoader.py +0 -107
- tomwer/gui/reconstruction/lamino/tofu/__init__.py +0 -1
- tomwer/gui/reconstruction/lamino/tofu/misc.py +0 -148
- tomwer/gui/reconstruction/lamino/tofu/projections.py +0 -896
- tomwer/gui/reconstruction/lamino/tofu/settings.py +0 -75
- tomwer/gui/reconstruction/lamino/tofu/tofu.py +0 -432
- tomwer/gui/reconstruction/lamino/tofu/tofuexpert.py +0 -567
- tomwer/gui/reconstruction/lamino/tofu/tofuoutput.py +0 -760
- tomwer/gui/reconstruction/test/test_lamino.py +0 -189
- tomwer/resources/gui/icons/esrf_1.svg +0 -307
- tomwer/resources/gui/icons/lamino_parameters.svg +0 -70
- tomwer/resources/gui/icons/triangle.svg +0 -80
- tomwer/resources/gui/illustrations/lamino_angle.png +0 -0
- tomwer/resources/gui/illustrations/lamino_angle.svg +0 -509
- tomwer/resources/gui/illustrations/lamino_beta_angle.png +0 -0
- tomwer/resources/gui/illustrations/lamino_beta_angle.svg +0 -97
- tomwer/resources/gui/illustrations/lamino_theta_angle.png +0 -0
- tomwer/resources/gui/illustrations/lamino_theta_angle.svg +0 -368
- tomwer/resources/gui/illustrations/manual_slice.png +0 -0
- tomwer/resources/gui/illustrations/manual_slice.svg +0 -221
- tomwer/resources/gui/illustrations/psi_angle.png +0 -0
- tomwer/resources/gui/illustrations/psi_angle.svg +0 -479
- tomwer/resources/gui/illustrations/rotation_center.png +0 -0
- tomwer/resources/gui/illustrations/rotation_center.svg +0 -276
- tomwer/resources/gui/illustrations/slice_stack.png +0 -0
- tomwer/resources/gui/illustrations/slice_stack.svg +0 -266
- tomwer/resources/gui/illustrations/xy_slice.png +0 -0
- tomwer/resources/gui/illustrations/xy_slice.svg +0 -269
- tomwer/resources/gui/illustrations/xz_slice.png +0 -0
- tomwer/resources/gui/illustrations/xz_slice.svg +0 -270
- tomwer/resources/gui/illustrations/yz_slice.png +0 -0
- tomwer/resources/gui/illustrations/yz_slice.svg +0 -270
- tomwer/synctools/stacks/reconstruction/lamino.py +0 -233
- tomwer/synctools/test/test_scanstages.py +0 -162
- tomwer/tests/utils/__init__.py +0 -247
- tomwer/tests/utils/utilstest.py +0 -220
- tomwer-1.2.1-py3.11-nspkg.pth +0 -1
- /tomwer/core/process/control/{email.py → emailnotifier.py} +0 -0
- {tomwer-1.2.1.dist-info → tomwer-1.3.12.dist-info}/LICENSE +0 -0
- {tomwer-1.2.1.dist-info → tomwer-1.3.12.dist-info}/entry_points.txt +0 -0
- {tomwer-1.2.1.dist-info → tomwer-1.3.12.dist-info}/namespace_packages.txt +0 -0
- {tomwer-1.2.1.dist-info → tomwer-1.3.12.dist-info}/top_level.txt +0 -0
@@ -1,169 +1,184 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
#
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
#
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
#
|
142
|
-
#
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
1
|
+
import logging
|
2
|
+
|
3
|
+
from orangewidget import gui
|
4
|
+
from orangewidget.settings import Setting
|
5
|
+
from orangewidget.widget import Input, Output
|
6
|
+
from orangecontrib.tomwer.orange.managedprocess import TomwerWithStackStack
|
7
|
+
from silx.gui import qt
|
8
|
+
from typing import Optional
|
9
|
+
|
10
|
+
from tomwer.core.futureobject import FutureTomwerObject
|
11
|
+
from tomwer.core.scan.scanbase import TomwerScanBase
|
12
|
+
from tomwer.gui.reconstruction.nabu.helical import HelicalPrepareWeightsDouble
|
13
|
+
from tomwer.core.process.reconstruction.nabu.helical import (
|
14
|
+
NabuHelicalPrepareWeightsDouble,
|
15
|
+
)
|
16
|
+
from tomwer.core.scan.nxtomoscan import NXtomoScan
|
17
|
+
|
18
|
+
_logger = logging.getLogger(__name__)
|
19
|
+
|
20
|
+
|
21
|
+
class NabuHelicalPrepareWeightsDoubleOW(
|
22
|
+
TomwerWithStackStack,
|
23
|
+
ewokstaskclass=NabuHelicalPrepareWeightsDouble,
|
24
|
+
):
|
25
|
+
"""
|
26
|
+
widget used to call the `nabu-helical-prepare-weights-double` application on a dedicated thread. It define weights map and double flat field.
|
27
|
+
|
28
|
+
:param parent: the parent widget
|
29
|
+
"""
|
30
|
+
|
31
|
+
# note of this widget should be the one registered on the documentation
|
32
|
+
name = "helical prerate weights double"
|
33
|
+
id = "orangecontrib.tomwer.widgets.reconstruction.NabuHelicalPrepareWeightsDoubleOW.NabuHelicalPrepareWeightsDoubleOW"
|
34
|
+
description = "compute map of weights requested for nabu helical reconstruction"
|
35
|
+
icon = "icons/nabu_prepare_weights_double.svg"
|
36
|
+
priority = 199
|
37
|
+
keywords = [
|
38
|
+
"tomography",
|
39
|
+
"nabu",
|
40
|
+
"reconstruction",
|
41
|
+
"nabu-helical",
|
42
|
+
"helical",
|
43
|
+
"weights",
|
44
|
+
"prepare",
|
45
|
+
]
|
46
|
+
|
47
|
+
want_main_area = True
|
48
|
+
want_control_area = False
|
49
|
+
resizing_enabled = True
|
50
|
+
|
51
|
+
_ewoks_default_inputs = Setting(
|
52
|
+
{
|
53
|
+
"data": None,
|
54
|
+
"transition_width_vertical": 50,
|
55
|
+
"transition_width_horizontal": 50,
|
56
|
+
"processes_file": "",
|
57
|
+
"rotation_axis_position": 0,
|
58
|
+
}
|
59
|
+
)
|
60
|
+
|
61
|
+
_ewoks_inputs_to_hide_from_orange = (
|
62
|
+
"progress",
|
63
|
+
"processes_file",
|
64
|
+
"transition_width_vertical",
|
65
|
+
"transition_width_horizontal",
|
66
|
+
"rotation_axis_position",
|
67
|
+
)
|
68
|
+
|
69
|
+
sigScanReady = qt.Signal(TomwerScanBase)
|
70
|
+
"Signal emitted when a scan is ended"
|
71
|
+
|
72
|
+
TIMEOUT = 30
|
73
|
+
|
74
|
+
class Inputs:
|
75
|
+
data = Input(
|
76
|
+
name="data",
|
77
|
+
type=TomwerScanBase,
|
78
|
+
doc="one scan to be process",
|
79
|
+
default=True,
|
80
|
+
multiple=False,
|
81
|
+
)
|
82
|
+
|
83
|
+
class Outputs:
|
84
|
+
data = Output(name="data", type=TomwerScanBase, doc="one scan to be process")
|
85
|
+
future_tomo_obj = Output(
|
86
|
+
name="future_tomo_obj",
|
87
|
+
type=FutureTomwerObject,
|
88
|
+
doc="future object (process remotely)",
|
89
|
+
)
|
90
|
+
|
91
|
+
LOGGER = _logger
|
92
|
+
|
93
|
+
def __init__(self, parent=None):
|
94
|
+
super().__init__(parent)
|
95
|
+
self.__scan = None
|
96
|
+
|
97
|
+
# gui definition
|
98
|
+
_layout = gui.vBox(self.mainArea, self.name).layout()
|
99
|
+
self.widget = HelicalPrepareWeightsDouble(parent=self)
|
100
|
+
_layout.addWidget(self.widget)
|
101
|
+
|
102
|
+
## connect signal / slot
|
103
|
+
self.widget.sigConfigChanged.connect(self._updateSettings)
|
104
|
+
|
105
|
+
if isinstance(self.task_output_changed_callbacks, set):
|
106
|
+
self.task_output_changed_callbacks.add(self._notify_state)
|
107
|
+
elif isinstance(self.task_output_changed_callbacks, list):
|
108
|
+
self.task_output_changed_callbacks.append(self._notify_state)
|
109
|
+
else:
|
110
|
+
raise NotImplementedError
|
111
|
+
|
112
|
+
## handle settings
|
113
|
+
self._loadSettings()
|
114
|
+
self.task_executor_queue.sigComputationStarted.connect(self._newTaskStarted)
|
115
|
+
|
116
|
+
def _updateSettings(self):
|
117
|
+
config = self.widget.getConfiguration()
|
118
|
+
for key in ("transition_width", "processes_file"):
|
119
|
+
self._ewoks_default_inputs[key] = config[key] # pylint: disable=E1137
|
120
|
+
|
121
|
+
@property
|
122
|
+
def request_input(self):
|
123
|
+
return self.__request_input
|
124
|
+
|
125
|
+
@request_input.setter
|
126
|
+
def request_input(self, request):
|
127
|
+
self.__request_input = request
|
128
|
+
|
129
|
+
def get_task_inputs(self):
|
130
|
+
assert self.__scan is not None
|
131
|
+
return {
|
132
|
+
"data": self.__scan,
|
133
|
+
"transition_width": self.widget.getConfiguration()["transition_width"],
|
134
|
+
"processes_file": self.widget.getConfiguration()["processes_file"],
|
135
|
+
}
|
136
|
+
|
137
|
+
def handleNewSignals(self) -> None:
|
138
|
+
"""Invoked by the workflow signal propagation manager after all
|
139
|
+
signals handlers have been called.
|
140
|
+
"""
|
141
|
+
# for now we want to avoid propagation any processing.
|
142
|
+
# task will be executed only when the user validates the dialog
|
143
|
+
data = super().get_task_inputs().get("data", None)
|
144
|
+
if data is not None:
|
145
|
+
if not isinstance(data, NXtomoScan):
|
146
|
+
raise TypeError(
|
147
|
+
f"data is expected to be an instance of NXtomoScan. {type(data)} are not handled"
|
148
|
+
)
|
149
|
+
self.add(data.path)
|
150
|
+
|
151
|
+
def _loadSettings(self):
|
152
|
+
self.widget.setConfiguration(self._ewoks_default_inputs)
|
153
|
+
|
154
|
+
def _newTaskStarted(self):
|
155
|
+
try:
|
156
|
+
task_executor = self.sender()
|
157
|
+
scan = task_executor.current_task.inputs.data
|
158
|
+
self.notify_on_going(scan)
|
159
|
+
except Exception:
|
160
|
+
pass
|
161
|
+
|
162
|
+
def _notify_state(self):
|
163
|
+
try:
|
164
|
+
task_executor = self.sender()
|
165
|
+
task_suceeded = task_executor.succeeded
|
166
|
+
scan = task_executor.current_task.outputs.data
|
167
|
+
if task_suceeded:
|
168
|
+
self.notify_succeed(scan=scan)
|
169
|
+
else:
|
170
|
+
self.notify_failed(scan=scan)
|
171
|
+
except Exception as e:
|
172
|
+
_logger.error(f"failed to handle task finished callback. Raiseon is {e}")
|
173
|
+
|
174
|
+
@Inputs.data
|
175
|
+
def process_data(self, scan: Optional[TomwerScanBase]):
|
176
|
+
if scan is None:
|
177
|
+
return
|
178
|
+
else:
|
179
|
+
self.__scan = scan
|
180
|
+
self.notify_pending(scan=scan)
|
181
|
+
self.execute_ewoks_task()
|
182
|
+
|
183
|
+
def sizeHint(self) -> qt.QSize:
|
184
|
+
return qt.QSize(650, 60)
|
@@ -28,6 +28,7 @@ __license__ = "MIT"
|
|
28
28
|
__date__ = "14/02/2020"
|
29
29
|
|
30
30
|
|
31
|
+
import os
|
31
32
|
import copy
|
32
33
|
import logging
|
33
34
|
from contextlib import AbstractContextManager
|
@@ -44,6 +45,10 @@ from tomwer.core.futureobject import FutureTomwerObject
|
|
44
45
|
from tomwer.core.process.reconstruction.nabu.nabuslices import NabuSlicesTask
|
45
46
|
from tomwer.core.scan.scanbase import TomwerScanBase, _TomwerBaseDock
|
46
47
|
from tomwer.core.volume.volumefactory import VolumeFactory
|
48
|
+
from tomwer.core.process.icat.gallery import (
|
49
|
+
IcatScreenshots,
|
50
|
+
deduce_dataset_gallery_location,
|
51
|
+
)
|
47
52
|
from tomwer.gui.reconstruction.nabu.slices import NabuWindow
|
48
53
|
from tomwer.synctools.stacks.reconstruction.nabu import NabuSliceProcessStack
|
49
54
|
|
@@ -109,6 +114,12 @@ class NabuOW(WidgetLongProcessing, SuperviseOW):
|
|
109
114
|
|
110
115
|
slice_urls = Output(name="slice urls", type=tuple, doc="tuple of urls created")
|
111
116
|
|
117
|
+
screenshots = Output(
|
118
|
+
name="screenshots",
|
119
|
+
type=IcatScreenshots,
|
120
|
+
doc="screenshots that can be saved",
|
121
|
+
)
|
122
|
+
|
112
123
|
class DialogCM(AbstractContextManager):
|
113
124
|
"""Simple context manager to hide / show button dialogs"""
|
114
125
|
|
@@ -262,7 +273,19 @@ class NabuOW(WidgetLongProcessing, SuperviseOW):
|
|
262
273
|
)
|
263
274
|
if len(slice_urls) > 0:
|
264
275
|
slice_urls = tuple(slice_urls)
|
276
|
+
# provide list of reconstructed slices
|
265
277
|
self.Outputs.slice_urls.send(slice_urls)
|
278
|
+
# provide list of screenshots
|
279
|
+
self.Outputs.screenshots.send(
|
280
|
+
IcatScreenshots(
|
281
|
+
data_dir=deduce_dataset_gallery_location(scan),
|
282
|
+
screenshots={
|
283
|
+
os.path.splitext(os.path.basename(url.file_path()))[0]: url
|
284
|
+
for url in slice_urls
|
285
|
+
},
|
286
|
+
scan=scan,
|
287
|
+
)
|
288
|
+
)
|
266
289
|
|
267
290
|
self.sigScanReady.emit(scan)
|
268
291
|
if future_tomo_obj is not None:
|
@@ -45,6 +45,11 @@ from orangecontrib.tomwer.widgets.utils import WidgetLongProcessing
|
|
45
45
|
from tomwer.core import settings
|
46
46
|
from tomwer.core.cluster import SlurmClusterConfiguration
|
47
47
|
from tomwer.core.futureobject import FutureTomwerObject
|
48
|
+
from tomwer.core.process.icat.gallery import (
|
49
|
+
IcatScreenshots,
|
50
|
+
deduce_dataset_gallery_location,
|
51
|
+
select_screenshot_from_volume,
|
52
|
+
)
|
48
53
|
from tomwer.core.process.reconstruction.nabu import utils as nabu_utils
|
49
54
|
from tomwer.core.process.reconstruction.nabu.nabuvolume import NabuVolumeTask
|
50
55
|
from tomwer.core.scan.scanbase import TomwerScanBase
|
@@ -123,6 +128,11 @@ class NabuVolumeOW(WidgetLongProcessing, SuperviseOW):
|
|
123
128
|
volume_urls = Output(
|
124
129
|
name="volume urls", type=tuple, doc="url of the volume(s) reconstructed"
|
125
130
|
)
|
131
|
+
screenshots = Output(
|
132
|
+
name="screenshots",
|
133
|
+
type=IcatScreenshots,
|
134
|
+
doc="screenshots that can be saved",
|
135
|
+
)
|
126
136
|
|
127
137
|
class DialogCM(AbstractContextManager):
|
128
138
|
"""Simple context manager to hida / show button dialogs"""
|
@@ -172,7 +182,7 @@ class NabuVolumeOW(WidgetLongProcessing, SuperviseOW):
|
|
172
182
|
|
173
183
|
if nabu_volume_params not in (dict(), None):
|
174
184
|
try:
|
175
|
-
self.
|
185
|
+
self.setConfiguration(nabu_volume_params)
|
176
186
|
except Exception:
|
177
187
|
_logger.warning("fail to load reconstruction settings")
|
178
188
|
|
@@ -213,14 +223,19 @@ class NabuVolumeOW(WidgetLongProcessing, SuperviseOW):
|
|
213
223
|
config = scan.nabu_recons_params
|
214
224
|
# update output format if requested
|
215
225
|
if self._nabuWidget._mainWidget.redefineNabuFileFormat():
|
216
|
-
config
|
226
|
+
config["output"][
|
217
227
|
"file_format"
|
218
228
|
] = self._nabuWidget._mainWidget.getNabuFileFormat()
|
219
229
|
# update output location if requested
|
220
230
|
if self._nabuWidget._mainWidget.redefineOutputLocation():
|
221
|
-
|
222
|
-
|
223
|
-
scan=scan
|
231
|
+
location = self._nabuWidget._mainWidget.getNabuOutputLocation()
|
232
|
+
if location is not None:
|
233
|
+
location = format_output_location(location=location, scan=scan)
|
234
|
+
config["output"]["location"] = location
|
235
|
+
config["output"][
|
236
|
+
"output_dir_mode"
|
237
|
+
] = (
|
238
|
+
self._nabuWidget._mainWidget._outputLocationWidget.getOutputDirMode().value
|
224
239
|
)
|
225
240
|
|
226
241
|
if "phase" in config and "delta_beta" in config["phase"]:
|
@@ -314,7 +329,26 @@ class NabuVolumeOW(WidgetLongProcessing, SuperviseOW):
|
|
314
329
|
assert isinstance(volume_id, VolumeIdentifier)
|
315
330
|
volume_urls.extend(VolumeFactory.from_identifier_to_vol_urls(volume_id))
|
316
331
|
if len(volume_urls) > 0:
|
332
|
+
# send list of reconcstructed volume
|
317
333
|
self.Outputs.volume_urls.send(tuple(volume_urls))
|
334
|
+
# send list of screenshots
|
335
|
+
screenshots = {}
|
336
|
+
[
|
337
|
+
screenshots.update(
|
338
|
+
select_screenshot_from_volume(
|
339
|
+
VolumeFactory.create_tomo_object_from_identifier(volume_id)
|
340
|
+
)
|
341
|
+
)
|
342
|
+
for volume_id in scan.latest_vol_reconstructions
|
343
|
+
]
|
344
|
+
self.Outputs.screenshots.send(
|
345
|
+
IcatScreenshots(
|
346
|
+
data_dir=deduce_dataset_gallery_location(scan),
|
347
|
+
screenshots=screenshots,
|
348
|
+
scan=scan,
|
349
|
+
),
|
350
|
+
)
|
351
|
+
|
318
352
|
# send volume identifier(s) # only one expected
|
319
353
|
n_rec_volumes = len(scan.latest_vol_reconstructions)
|
320
354
|
if n_rec_volumes > 0:
|
@@ -43,9 +43,9 @@ from silx.gui import qt
|
|
43
43
|
import tomwer.core.process.reconstruction.saaxis.saaxis
|
44
44
|
from orangecontrib.tomwer.orange.managedprocess import SuperviseOW
|
45
45
|
from orangecontrib.tomwer.orange.settings import CallbackSettingsHandler
|
46
|
-
from tomwer.core import settings
|
46
|
+
from tomwer.core import settings
|
47
|
+
from tomwer.core.utils.lbsram import is_low_on_memory
|
47
48
|
from tomwer.core.cluster import SlurmClusterConfiguration
|
48
|
-
from tomwer.core.futureobject import FutureTomwerObject
|
49
49
|
from tomwer.core.process.reconstruction.axis import AxisTask
|
50
50
|
from tomwer.core.process.reconstruction.saaxis.saaxis import SAAxisTask
|
51
51
|
from tomwer.core.scan.scanbase import TomwerScanBase, _TomwerBaseDock
|
@@ -270,12 +270,14 @@ class SAAxisOW(SuperviseOW, WidgetLongProcessing):
|
|
270
270
|
Details about :ref:`saaxis score calculation`
|
271
271
|
"""
|
272
272
|
|
273
|
-
name = "
|
273
|
+
name = "multi-cor (sa-axis)"
|
274
274
|
id = "orange.widgets.tomwer.sa_axis"
|
275
|
-
description = "
|
275
|
+
description = "Reconstruct a slice with different center of rotation (cor) values"
|
276
276
|
icon = "icons/saaxis.png"
|
277
277
|
priority = 21
|
278
278
|
keywords = [
|
279
|
+
"multi",
|
280
|
+
"multi-cor",
|
279
281
|
"tomography",
|
280
282
|
"semi automatic",
|
281
283
|
"half automatic",
|
@@ -322,12 +324,6 @@ class SAAxisOW(SuperviseOW, WidgetLongProcessing):
|
|
322
324
|
class Outputs:
|
323
325
|
data = Output(name="data", type=TomwerScanBase, doc="one scan to be process")
|
324
326
|
|
325
|
-
future_out = Output(
|
326
|
-
name="future_tomo_obj",
|
327
|
-
type=FutureTomwerObject,
|
328
|
-
doc="data with some remote processing",
|
329
|
-
)
|
330
|
-
|
331
327
|
def __init__(self, parent=None):
|
332
328
|
"""
|
333
329
|
|
@@ -347,7 +343,6 @@ class SAAxisOW(SuperviseOW, WidgetLongProcessing):
|
|
347
343
|
|
348
344
|
# connect signal / slot
|
349
345
|
self._widget.sigConfigurationChanged.connect(self._updateSettings)
|
350
|
-
self.destroyed.connect(self._widget.stop)
|
351
346
|
self._widget._processing_stack.sigComputationStarted.connect(
|
352
347
|
self._startProcessing
|
353
348
|
)
|
@@ -358,6 +353,17 @@ class SAAxisOW(SuperviseOW, WidgetLongProcessing):
|
|
358
353
|
# expose API
|
359
354
|
self.wait_processing = self._widget.wait_processing
|
360
355
|
|
356
|
+
def getWaitingOverlay(self):
|
357
|
+
return self._widget._tabWidget._resultsViewer._plot.getWaiterOverlay()
|
358
|
+
|
359
|
+
def _startProcessing(self, *args, **kwargs):
|
360
|
+
self.getWaitingOverlay().show()
|
361
|
+
super()._startProcessing()
|
362
|
+
|
363
|
+
def _endProcessing(self, *args, **kwargs):
|
364
|
+
self.getWaitingOverlay().hide()
|
365
|
+
super()._endProcessing()
|
366
|
+
|
361
367
|
def __new__(cls, *args, **kwargs):
|
362
368
|
# ensure backward compatibility with 'static_input'
|
363
369
|
static_input = kwargs.get("stored_settings", {}).get("static_input", None)
|
@@ -404,9 +410,7 @@ class SAAxisOW(SuperviseOW, WidgetLongProcessing):
|
|
404
410
|
scan.saaxis_params = QSAAxisParams()
|
405
411
|
self._skipCurrentScan(new_scan=scan)
|
406
412
|
|
407
|
-
if settings.isOnLbsram(scan) and
|
408
|
-
settings.get_lbsram_path()
|
409
|
-
):
|
413
|
+
if settings.isOnLbsram(scan) and is_low_on_memory(settings.get_lbsram_path()):
|
410
414
|
self.notify_skip(
|
411
415
|
scan=scan,
|
412
416
|
details=f"saaxis has been skiped for {scan} because of low space in lbsram",
|
@@ -484,13 +488,5 @@ class SAAxisOW(SuperviseOW, WidgetLongProcessing):
|
|
484
488
|
self.show()
|
485
489
|
self._widget.showResults()
|
486
490
|
|
487
|
-
def stop(self):
|
488
|
-
self._widget.stop()
|
489
|
-
|
490
|
-
def close(self):
|
491
|
-
self.stop()
|
492
|
-
self._widget = None
|
493
|
-
super().close()
|
494
|
-
|
495
491
|
def getConfiguration(self):
|
496
492
|
return self._widget.getConfiguration()
|