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
@@ -6,7 +6,7 @@ from nabu.io.reader import load_images_from_dataurl_dict
|
|
6
6
|
from nabu.app.prepare_weights_double import create_heli_maps
|
7
7
|
|
8
8
|
from tomwer.core.process.task import TaskWithProgress
|
9
|
-
from tomwer.core.scan.
|
9
|
+
from tomwer.core.scan.nxtomoscan import NXtomoScan
|
10
10
|
from tomwer.core.utils.scanutils import format_output_location
|
11
11
|
|
12
12
|
|
@@ -17,8 +17,10 @@ class NabuHelicalPrepareWeightsDouble(
|
|
17
17
|
TaskWithProgress,
|
18
18
|
input_names=(
|
19
19
|
"data",
|
20
|
-
"
|
20
|
+
"transition_width_vertical",
|
21
|
+
"transition_width_horizontal",
|
21
22
|
"processes_file",
|
23
|
+
"rotation_axis_position",
|
22
24
|
),
|
23
25
|
optional_input_names=("progress",),
|
24
26
|
output_names=("data",),
|
@@ -26,8 +28,8 @@ class NabuHelicalPrepareWeightsDouble(
|
|
26
28
|
def run(self):
|
27
29
|
# TODO: handle future /cluster config ???
|
28
30
|
scan = self.inputs.data
|
29
|
-
if not isinstance(scan,
|
30
|
-
raise TypeError(f"data is expected to be an instance of {
|
31
|
+
if not isinstance(scan, NXtomoScan):
|
32
|
+
raise TypeError(f"data is expected to be an instance of {NXtomoScan}")
|
31
33
|
dataset_info = HDF5DatasetAnalyzer(
|
32
34
|
scan.master_file,
|
33
35
|
extra_options={"h5_entry": scan.entry},
|
@@ -48,7 +50,9 @@ class NabuHelicalPrepareWeightsDouble(
|
|
48
50
|
profile=mappe,
|
49
51
|
process_file_name=scan.helical.processes_files,
|
50
52
|
entry_name=scan.entry,
|
51
|
-
|
53
|
+
transition_width_vertical=self.inputs.transition_width_vertical,
|
54
|
+
transition_width_horizontal=self.inputs.transition_width_horizontal,
|
55
|
+
rotation_axis_position=self.inputs.rotation_axis_position,
|
52
56
|
)
|
53
57
|
|
54
58
|
self.outputs.data = scan
|
@@ -39,29 +39,37 @@ import uuid
|
|
39
39
|
from typing import Iterable, Optional, Union
|
40
40
|
import signal
|
41
41
|
import psutil
|
42
|
+
import sys
|
42
43
|
|
43
44
|
import numpy
|
44
45
|
from silx.io.url import DataUrl
|
45
|
-
from silx.utils
|
46
|
+
from silx.io.utils import open as open_hdf5
|
46
47
|
from sluurp.executor import submit as submit_to_slurm_cluster
|
47
48
|
from sluurp.job import SBatchScriptJob
|
48
49
|
from tomoscan.io import HDF5File
|
49
50
|
from tomoscan.normalization import Method as INormMethod
|
51
|
+
from tomoscan.identifier import VolumeIdentifier
|
50
52
|
|
53
|
+
from tomwer.core.process.reconstruction.nabu.plane import NabuPlane
|
51
54
|
from tomwer.core.cluster.cluster import SlurmClusterConfiguration
|
52
55
|
from tomwer.core.process.reconstruction.nabu.target import Target
|
53
56
|
from tomwer.core.process.reconstruction.nabu.utils import (
|
54
57
|
_NabuPhaseMethod,
|
55
58
|
nabu_std_err_has_error,
|
56
59
|
)
|
60
|
+
from tomwer.core.process.reconstruction.output import (
|
61
|
+
ProcessDataOutputDirMode,
|
62
|
+
get_output_folder_from_scan,
|
63
|
+
NabuOutputFileFormat,
|
64
|
+
)
|
57
65
|
from tomwer.core.process.reconstruction.normalization.params import (
|
58
66
|
_ValueSource as INormSource,
|
59
67
|
)
|
60
68
|
from tomwer.core.scan.edfscan import EDFTomoScan
|
61
|
-
from tomwer.core.scan.
|
69
|
+
from tomwer.core.scan.nxtomoscan import NXtomoScan
|
62
70
|
from tomwer.core.scan.scanbase import TomwerScanBase
|
63
|
-
from tomwer.core.utils.scanutils import format_output_location
|
64
71
|
from tomwer.core.utils.slurm import get_slurm_script_name, is_slurm_available
|
72
|
+
from tomwer.core.volume.volumefactory import VolumeFactory
|
65
73
|
|
66
74
|
from . import settings, utils
|
67
75
|
|
@@ -85,37 +93,6 @@ else:
|
|
85
93
|
has_nabu = True
|
86
94
|
|
87
95
|
|
88
|
-
class NabuOutputFileFormat(_Enum):
|
89
|
-
TIFF = "tiff"
|
90
|
-
HDF5 = "hdf5"
|
91
|
-
JP2K = "jp2"
|
92
|
-
EDF = "edf"
|
93
|
-
RAW = "vol"
|
94
|
-
|
95
|
-
@classmethod
|
96
|
-
def from_value(cls, value):
|
97
|
-
if isinstance(value, str):
|
98
|
-
value = value.lstrip(".")
|
99
|
-
return super().from_value(value)
|
100
|
-
|
101
|
-
|
102
|
-
def get_file_format(file_str):
|
103
|
-
extension = os.path.splitext(file_str.lower())[-1]
|
104
|
-
extension = extension.lstrip(".")
|
105
|
-
if extension in ("tiff", "tif"):
|
106
|
-
return NabuOutputFileFormat.TIFF
|
107
|
-
elif extension in ("hdf5", "hdf", "h5"):
|
108
|
-
return NabuOutputFileFormat.HDF5
|
109
|
-
elif extension in ("jp2", "jp2k", "jpg2k"):
|
110
|
-
return NabuOutputFileFormat.JP2K
|
111
|
-
elif extension in ("edf",):
|
112
|
-
return NabuOutputFileFormat.EDF
|
113
|
-
elif extension in ("vol", "raw"):
|
114
|
-
return NabuOutputFileFormat.RAW
|
115
|
-
else:
|
116
|
-
raise ValueError(f"Unrecognized file extension {extension} from {file_str}")
|
117
|
-
|
118
|
-
|
119
96
|
class ResultsRun:
|
120
97
|
"""
|
121
98
|
Base class of results for nabu
|
@@ -165,24 +142,44 @@ class ResultsLocalRun(ResultsWithStd):
|
|
165
142
|
|
166
143
|
def __init__(
|
167
144
|
self,
|
168
|
-
|
145
|
+
results_identifiers: tuple,
|
169
146
|
*args,
|
170
147
|
**kwargs,
|
171
148
|
) -> None:
|
172
149
|
super().__init__(*args, **kwargs)
|
173
|
-
if not isinstance(
|
150
|
+
if not isinstance(results_identifiers, Iterable):
|
174
151
|
raise TypeError(
|
175
|
-
f"results_urls is expected to be an Iterable not {type(
|
152
|
+
f"results_urls is expected to be an Iterable not {type(results_identifiers)}"
|
176
153
|
)
|
177
|
-
|
154
|
+
|
155
|
+
# check all identifiers
|
156
|
+
def check_identifier(identifier):
|
157
|
+
if isinstance(identifier, str):
|
158
|
+
vol = VolumeFactory.create_tomo_object_from_identifier(
|
159
|
+
identifier=identifier
|
160
|
+
)
|
161
|
+
return vol.get_identifier()
|
162
|
+
elif not isinstance(identifier, VolumeIdentifier):
|
163
|
+
raise TypeError(
|
164
|
+
f"identifiers are expected to be VolumeIdentifier. Get {type(identifier)} instead."
|
165
|
+
)
|
166
|
+
else:
|
167
|
+
return identifier
|
168
|
+
|
169
|
+
self.__results_identifiers = tuple(
|
170
|
+
[
|
171
|
+
check_identifier(identifier=identifier)
|
172
|
+
for identifier in results_identifiers
|
173
|
+
]
|
174
|
+
)
|
178
175
|
|
179
176
|
@property
|
180
|
-
def
|
181
|
-
return self.
|
177
|
+
def results_identifiers(self) -> tuple:
|
178
|
+
return self.__results_identifiers
|
182
179
|
|
183
180
|
def __str__(self) -> str:
|
184
181
|
res = super().__str__()
|
185
|
-
res += f"\n - result urls: {self.
|
182
|
+
res += f"\n - result urls: {self.results_identifiers}"
|
186
183
|
return res
|
187
184
|
|
188
185
|
|
@@ -231,6 +228,7 @@ class _NabuBaseReconstructor:
|
|
231
228
|
target: Target,
|
232
229
|
cluster_config: Optional[Union[dict, SlurmClusterConfiguration]],
|
233
230
|
process_name: str,
|
231
|
+
axis: NabuPlane = NabuPlane.XY,
|
234
232
|
) -> None:
|
235
233
|
self._scan = scan
|
236
234
|
self._target = Target.from_value(target)
|
@@ -238,6 +236,7 @@ class _NabuBaseReconstructor:
|
|
238
236
|
self._process_name = process_name
|
239
237
|
self._process = None
|
240
238
|
self._cancelled = False
|
239
|
+
self._axis = NabuPlane.from_value(axis)
|
241
240
|
# nabu subprocess if run locally
|
242
241
|
if isinstance(cluster_config, SlurmClusterConfiguration):
|
243
242
|
self._cluster_config = cluster_config
|
@@ -270,6 +269,10 @@ class _NabuBaseReconstructor:
|
|
270
269
|
def process_name(self):
|
271
270
|
return self._process_name
|
272
271
|
|
272
|
+
@property
|
273
|
+
def axis(self) -> NabuPlane:
|
274
|
+
return self._axis
|
275
|
+
|
273
276
|
def only_create_config_file(self):
|
274
277
|
"""Should we run the reconstruction or only create the configuration file"""
|
275
278
|
return False
|
@@ -287,8 +290,6 @@ class _NabuBaseReconstructor:
|
|
287
290
|
config_to_dump: dict,
|
288
291
|
config_file: str,
|
289
292
|
file_format: str,
|
290
|
-
start_z: Optional[int],
|
291
|
-
end_z: Optional[int],
|
292
293
|
info: Optional[str],
|
293
294
|
process_name: str,
|
294
295
|
):
|
@@ -308,8 +309,7 @@ class _NabuBaseReconstructor:
|
|
308
309
|
conf_file=config_file,
|
309
310
|
file_format=file_format,
|
310
311
|
config_to_dump=config_to_dump,
|
311
|
-
|
312
|
-
end_z=end_z,
|
312
|
+
axis=config_to_dump["reconstruction"].get("slice_plane", "XY"),
|
313
313
|
)
|
314
314
|
elif self.target is Target.SLURM:
|
315
315
|
_logger.info(
|
@@ -319,8 +319,6 @@ class _NabuBaseReconstructor:
|
|
319
319
|
conf_file=config_file,
|
320
320
|
config_to_dump=config_to_dump,
|
321
321
|
cluster_config=self.cluster_config.to_dict(),
|
322
|
-
start_z=start_z,
|
323
|
-
end_z=end_z,
|
324
322
|
process_name=process_name,
|
325
323
|
info=info,
|
326
324
|
)
|
@@ -341,11 +339,10 @@ class _NabuBaseReconstructor:
|
|
341
339
|
|
342
340
|
def _run_nabu_locally(
|
343
341
|
self,
|
342
|
+
axis: NabuPlane,
|
344
343
|
conf_file: str,
|
345
344
|
file_format: str,
|
346
345
|
config_to_dump: dict,
|
347
|
-
start_z: int,
|
348
|
-
end_z: int,
|
349
346
|
) -> ResultsLocalRun:
|
350
347
|
"""
|
351
348
|
run locally nabu for a single configuration file.
|
@@ -365,7 +362,7 @@ class _NabuBaseReconstructor:
|
|
365
362
|
|
366
363
|
command = " ".join(
|
367
364
|
(
|
368
|
-
|
365
|
+
sys.executable,
|
369
366
|
"-m",
|
370
367
|
settings.NABU_FULL_FIELD_APP_PATH,
|
371
368
|
conf_file,
|
@@ -396,13 +393,11 @@ class _NabuBaseReconstructor:
|
|
396
393
|
slice_index=None,
|
397
394
|
scan=self.scan,
|
398
395
|
file_format=file_format,
|
399
|
-
|
400
|
-
end_z=end_z,
|
401
|
-
expects_single_slice=self.EXPECTS_SINGLE_SLICE,
|
396
|
+
axis=axis,
|
402
397
|
)
|
403
398
|
return ResultsLocalRun(
|
404
399
|
success=not nabu_std_err_has_error(errs),
|
405
|
-
|
400
|
+
results_identifiers=recons_urls,
|
406
401
|
std_out=outs,
|
407
402
|
std_err=errs,
|
408
403
|
config=config_to_dump, # config_slices,
|
@@ -413,8 +408,6 @@ class _NabuBaseReconstructor:
|
|
413
408
|
conf_file: str,
|
414
409
|
config_to_dump: dict,
|
415
410
|
cluster_config: dict,
|
416
|
-
start_z: int,
|
417
|
-
end_z: int,
|
418
411
|
process_name: str,
|
419
412
|
info: str,
|
420
413
|
) -> ResultSlurmRun:
|
@@ -521,26 +514,28 @@ class _NabuBaseReconstructor:
|
|
521
514
|
"delta_beta"
|
522
515
|
][0]
|
523
516
|
db = round(float(config["phase"]["delta_beta"]))
|
517
|
+
# retrieve axis used
|
518
|
+
axis = config.get("reconstruction", {}).get("slice_plane", "XY")
|
519
|
+
|
524
520
|
# handle output
|
525
521
|
if "output" in config:
|
526
|
-
_file_name = self._get_file_basename_reconstruction(
|
522
|
+
_file_name = self._get_file_basename_reconstruction(
|
523
|
+
pag=pag, db=db, ctf=ctf, axis=axis
|
524
|
+
)
|
527
525
|
config["output"]["file_prefix"] = _file_name
|
528
|
-
location =
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
|
533
|
-
|
534
|
-
location
|
535
|
-
|
536
|
-
|
537
|
-
|
538
|
-
NabuOutputFileFormat.
|
539
|
-
|
540
|
-
|
541
|
-
): # if user specify the location
|
542
|
-
location = "/".join([location, _file_name])
|
543
|
-
|
526
|
+
location, location_cfg_files = get_output_folder_from_scan(
|
527
|
+
mode=ProcessDataOutputDirMode.from_value(
|
528
|
+
config["output"].get(
|
529
|
+
"output_dir_mode", ProcessDataOutputDirMode.OTHER
|
530
|
+
)
|
531
|
+
),
|
532
|
+
nabu_location=config["output"].get("location", None),
|
533
|
+
scan=self.scan,
|
534
|
+
file_basename=_file_name,
|
535
|
+
file_format=config["output"].get(
|
536
|
+
"file_format", NabuOutputFileFormat.HDF5
|
537
|
+
),
|
538
|
+
)
|
544
539
|
# add reconstruction path to the list. scan `reconstruction_paths` register all the existing path where
|
545
540
|
# reconstruction are saved in order to be able to browse them all
|
546
541
|
self.scan.add_reconstruction_path(location)
|
@@ -587,9 +582,7 @@ class _NabuBaseReconstructor:
|
|
587
582
|
# if an url exists insure we can access it
|
588
583
|
dataset_url = DataUrl(path=dataset_url)
|
589
584
|
if os.path.exists(dataset_url.file_path()):
|
590
|
-
with
|
591
|
-
dataset_url.file_path(), mode="r", swmr="True"
|
592
|
-
) as h5f:
|
585
|
+
with open_hdf5(dataset_url.file_path()) as h5f:
|
593
586
|
if dataset_url.data_path() not in h5f:
|
594
587
|
dataset_url = None
|
595
588
|
else:
|
@@ -624,7 +617,7 @@ class _NabuBaseReconstructor:
|
|
624
617
|
raise NotImplementedError(f"source type {source.value} is not handled")
|
625
618
|
return config, nabu_cfg_folder
|
626
619
|
|
627
|
-
def _get_file_basename_reconstruction(self, pag, db, ctf):
|
620
|
+
def _get_file_basename_reconstruction(self, pag, db, ctf, axis):
|
628
621
|
"""return created file base name"""
|
629
622
|
raise NotImplementedError("Base class")
|
630
623
|
|
@@ -661,7 +654,7 @@ def dump_normalization_array_for_nabu(
|
|
661
654
|
f"array is expected to be a numpy array or a scalar and not {type(array)}"
|
662
655
|
)
|
663
656
|
# save the value to a dedicated path in "nabu_tomwer_serving_hatch"
|
664
|
-
if isinstance(scan,
|
657
|
+
if isinstance(scan, NXtomoScan):
|
665
658
|
entry_path = scan.entry
|
666
659
|
elif isinstance(scan, EDFTomoScan):
|
667
660
|
entry_path = "entry"
|