tomwer 1.2.9__py3-none-any.whl → 1.3.0a0__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 +1 -0
- orangecontrib/tomwer/widgets/control/DataDiscoveryOW.py +2 -2
- orangecontrib/tomwer/widgets/control/DataListOW.py +9 -7
- orangecontrib/tomwer/widgets/control/DataSelectorOW.py +21 -10
- orangecontrib/tomwer/widgets/control/EDF2NXTomomillOW.py +11 -5
- orangecontrib/tomwer/widgets/control/EmailOW.py +4 -4
- orangecontrib/tomwer/widgets/control/NXTomomillOW.py +31 -18
- orangecontrib/tomwer/widgets/control/NXtomoConcatenate.py +14 -7
- orangecontrib/tomwer/widgets/control/NotifierOW.py +1 -0
- orangecontrib/tomwer/widgets/control/VolumeSelector.py +7 -4
- orangecontrib/tomwer/widgets/control/VolumeSymLinkOW.py +182 -182
- orangecontrib/tomwer/widgets/debugtools/DatasetGeneratorOW.py +4 -4
- orangecontrib/tomwer/widgets/edit/DarkFlatPatchOW.py +4 -4
- orangecontrib/tomwer/widgets/edit/ImageKeyEditorOW.py +3 -3
- orangecontrib/tomwer/widgets/edit/ImageKeyUpgraderOW.py +2 -0
- 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 +9 -8
- orangecontrib/tomwer/widgets/reconstruction/CastNabuVolumeOW.py +3 -3
- orangecontrib/tomwer/widgets/reconstruction/NabuHelicalPrepareWeightsDoubleOW.py +179 -169
- orangecontrib/tomwer/widgets/reconstruction/NabuOW.py +23 -0
- orangecontrib/tomwer/widgets/reconstruction/NabuVolumeOW.py +39 -5
- orangecontrib/tomwer/widgets/reconstruction/SAAxisOW.py +7 -13
- orangecontrib/tomwer/widgets/reconstruction/SADeltaBetaOW.py +7 -17
- orangecontrib/tomwer/widgets/reconstruction/SinoNormOW.py +3 -4
- orangecontrib/tomwer/widgets/visualization/LivesliceOW.py +1 -1
- orangecontrib/tomwer/widgets/visualization/NXtomoMetadataViewerOW.py +3 -3
- orangecontrib/tomwer/widgets/visualization/VolumeViewerOW.py +3 -29
- tomwer/__main__.py +11 -58
- tomwer/app/canvas.py +8 -0
- tomwer/app/canvas_launcher/config.py +13 -11
- tomwer/app/darkref.py +1 -1
- tomwer/app/darkrefpatch.py +1 -1
- tomwer/app/imagekeyeditor.py +5 -5
- tomwer/app/imagekeyupgrader.py +5 -5
- tomwer/app/intensitynormalization.py +2 -2
- tomwer/app/radiostack.py +2 -2
- tomwer/app/zstitching.py +74 -3
- 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 +3 -3
- tomwer/core/process/control/nxtomoconcatenate.py +13 -13
- tomwer/core/process/control/nxtomomill.py +83 -25
- tomwer/core/process/control/scantransfer.py +11 -10
- 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 +6 -6
- tomwer/core/process/edit/imagekeyeditor.py +17 -18
- 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 +26 -0
- tomwer/core/process/output.py +52 -0
- tomwer/core/process/reconstruction/axis/axis.py +17 -10
- tomwer/core/process/reconstruction/axis/mode.py +4 -0
- tomwer/core/process/reconstruction/axis/params.py +9 -4
- tomwer/core/process/reconstruction/darkref/darkrefs.py +8 -6
- tomwer/core/process/reconstruction/darkref/darkrefscopy.py +1 -1
- tomwer/core/process/reconstruction/darkref/params.py +1 -1
- tomwer/core/process/reconstruction/lamino/tofu.py +4 -4
- tomwer/core/process/reconstruction/nabu/castvolume.py +1 -1
- tomwer/core/process/reconstruction/nabu/helical.py +9 -5
- tomwer/core/process/reconstruction/nabu/nabucommon.py +32 -62
- tomwer/core/process/reconstruction/nabu/nabuscores.py +387 -61
- tomwer/core/process/reconstruction/nabu/nabuslices.py +33 -21
- tomwer/core/process/reconstruction/nabu/nabuvolume.py +37 -14
- tomwer/core/process/reconstruction/nabu/settings.py +2 -2
- tomwer/core/process/reconstruction/nabu/utils.py +129 -24
- tomwer/core/process/reconstruction/output.py +108 -0
- tomwer/core/process/reconstruction/saaxis/saaxis.py +233 -263
- tomwer/core/process/reconstruction/sadeltabeta/sadeltabeta.py +140 -86
- tomwer/core/process/reconstruction/scores/params.py +4 -1
- 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 +3 -3
- 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 +2 -2
- tomwer/core/process/test/test_axis.py +6 -6
- tomwer/core/process/test/test_dark_and_flat.py +10 -7
- tomwer/core/process/test/test_data_transfer.py +7 -6
- tomwer/core/process/test/test_nabu.py +4 -4
- tomwer/core/process/test/test_normalization.py +2 -2
- tomwer/core/scan/edfscan.py +4 -1
- tomwer/core/scan/hdf5scan.py +19 -500
- tomwer/core/scan/nxtomoscan.py +532 -0
- tomwer/core/scan/scanbase.py +42 -20
- tomwer/core/scan/scanfactory.py +13 -13
- tomwer/core/scan/test/test_future_scan.py +2 -2
- tomwer/core/scan/test/test_h5.py +12 -10
- tomwer/core/scan/test/test_process_registration.py +2 -2
- tomwer/core/scan/test/test_scan.py +4 -3
- tomwer/core/settings.py +20 -0
- tomwer/core/test/test_scanutils.py +8 -7
- tomwer/core/test/test_utils.py +33 -26
- 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/volumefactory.py +2 -2
- tomwer/gui/cluster/slurm.py +260 -60
- tomwer/gui/cluster/test/test_cluster.py +13 -0
- tomwer/gui/cluster/test/test_supervisor.py +2 -2
- 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 +78 -16
- tomwer/gui/control/datalistener.py +4 -16
- 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 +1 -1
- 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 +2 -2
- tomwer/gui/control/tomoobjdisplaymode.py +8 -0
- tomwer/gui/debugtools/datasetgenerator.py +3 -3
- tomwer/gui/edit/dkrfpatch.py +16 -22
- tomwer/gui/edit/imagekeyeditor.py +8 -11
- tomwer/gui/edit/nxtomoeditor.py +111 -44
- tomwer/gui/edit/nxtomowarmer.py +4 -4
- tomwer/gui/edit/test/test_dkrf_patch.py +7 -7
- 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/reconstruction/axis/axis.py +171 -57
- tomwer/gui/reconstruction/axis/radioaxis.py +80 -95
- tomwer/gui/reconstruction/darkref/darkrefcopywidget.py +3 -2
- tomwer/gui/reconstruction/lamino/tofu/projections.py +1 -1
- tomwer/gui/reconstruction/lamino/tofu/tofuoutput.py +3 -6
- tomwer/gui/reconstruction/nabu/castvolume.py +1 -1
- 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/output.py +110 -33
- tomwer/gui/reconstruction/nabu/nabuconfig/phase.py +9 -12
- tomwer/gui/reconstruction/nabu/nabuconfig/preprocessing.py +219 -29
- tomwer/gui/reconstruction/nabu/nabuconfig/reconstruction.py +3 -6
- tomwer/gui/reconstruction/nabu/nabuflow.py +12 -20
- tomwer/gui/reconstruction/nabu/slices.py +6 -7
- tomwer/gui/reconstruction/nabu/volume.py +22 -10
- tomwer/gui/reconstruction/normalization/intensity.py +15 -23
- tomwer/gui/reconstruction/saaxis/corrangeselector.py +7 -23
- tomwer/gui/reconstruction/saaxis/dimensionwidget.py +1 -1
- tomwer/gui/reconstruction/saaxis/saaxis.py +7 -9
- tomwer/gui/reconstruction/sadeltabeta/saadeltabeta.py +2 -1
- tomwer/gui/reconstruction/scores/control.py +2 -9
- tomwer/gui/reconstruction/scores/scoreplot.py +11 -5
- tomwer/gui/reconstruction/test/test_axis.py +23 -12
- tomwer/gui/reconstruction/test/test_lamino.py +8 -3
- tomwer/gui/reconstruction/test/test_nabu.py +28 -9
- tomwer/gui/reconstruction/test/test_saaxis.py +3 -3
- tomwer/gui/reconstruction/test/test_sadeltabeta.py +2 -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 +265 -43
- tomwer/gui/stitching/stitching_preview.py +62 -5
- tomwer/gui/stitching/stitching_raw.py +2 -5
- tomwer/gui/stitching/z_stitching/fineestimation.py +0 -60
- tomwer/gui/utils/buttons.py +112 -29
- tomwer/gui/utils/inputwidget.py +33 -25
- 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 +1 -4
- 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 +1 -10
- 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 +2 -2
- tomwer/io/utils/raw_and_processed_data.py +84 -0
- tomwer/io/utils/tomoobj.py +4 -6
- 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/synctools/stacks/edit/darkflatpatch.py +2 -2
- tomwer/synctools/stacks/edit/imagekeyeditor.py +2 -2
- tomwer/synctools/stacks/reconstruction/axis.py +4 -4
- tomwer/synctools/stacks/reconstruction/castvolume.py +2 -2
- tomwer/synctools/stacks/reconstruction/dkrefcopy.py +4 -10
- 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 +92 -39
- tomwer/tests/utils.py +5 -0
- tomwer/version.py +3 -3
- {tomwer-1.2.9.dist-info → tomwer-1.3.0a0.dist-info}/METADATA +39 -39
- {tomwer-1.2.9.dist-info → tomwer-1.3.0a0.dist-info}/RECORD +248 -209
- tomwer/resources/gui/icons/esrf_1.svg +0 -307
- tomwer/resources/gui/icons/triangle.svg +0 -80
- tomwer/synctools/test/test_scanstages.py +0 -162
- tomwer/tests/utils/__init__.py +0 -247
- tomwer/tests/utils/utilstest.py +0 -220
- /tomwer/app/{saaxis.py → multicor.py} +0 -0
- /tomwer/app/{sadeltabeta.py → multipag.py} +0 -0
- /tomwer/core/process/control/{email.py → emailnotifier.py} +0 -0
- /tomwer-1.2.9-py3.11-nspkg.pth → /tomwer-1.3.0a0-py3.11-nspkg.pth +0 -0
- {tomwer-1.2.9.dist-info → tomwer-1.3.0a0.dist-info}/LICENSE +0 -0
- {tomwer-1.2.9.dist-info → tomwer-1.3.0a0.dist-info}/WHEEL +0 -0
- {tomwer-1.2.9.dist-info → tomwer-1.3.0a0.dist-info}/entry_points.txt +0 -0
- {tomwer-1.2.9.dist-info → tomwer-1.3.0a0.dist-info}/namespace_packages.txt +0 -0
- {tomwer-1.2.9.dist-info → tomwer-1.3.0a0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,58 @@
|
|
1
|
+
<?xml version='1.0' encoding='utf-8'?>
|
2
|
+
<scheme version="2.0" title="Reconstruction of a volume and publication to icat" description="">
|
3
|
+
<nodes>
|
4
|
+
<node id="0" name="scan selector" qualified_name="orangecontrib.tomwer.widgets.control.DataSelectorOW.DataSelectorOW" project_name="tomwer" version="" title="scan selector" position="(150, 150)" />
|
5
|
+
<node id="1" name="reduced darks and flats" qualified_name="orangecontrib.tomwer.widgets.reconstruction.DarkRefAndCopyOW.DarkRefAndCopyOW" project_name="tomwer" version="" title="reduced darks and flats" position="(324.0, 183.0)" />
|
6
|
+
<node id="2" name="default center of rotation" qualified_name="orangecontrib.tomwer.widgets.reconstruction.AxisOW.AxisOW" project_name="tomwer" version="" title="default center of rotation" position="(490.0, 218.0)" />
|
7
|
+
<node id="3" name="nabu slice reconstruction" qualified_name="orangecontrib.tomwer.widgets.reconstruction.NabuOW.NabuOW" project_name="tomwer" version="" title="nabu slice reconstruction" position="(649.0, 261.0)" />
|
8
|
+
<node id="4" name="data viewer" qualified_name="orangecontrib.tomwer.widgets.visualization.DataViewerOW.DataViewerOW" project_name="tomwer" version="" title="data viewer" position="(818.0, 248.0)" />
|
9
|
+
<node id="5" name="nabu volume reconstruction" qualified_name="orangecontrib.tomwer.widgets.reconstruction.NabuVolumeOW.NabuVolumeOW" project_name="tomwer" version="" title="nabu volume reconstruction" position="(812.0, 391.0)" />
|
10
|
+
<node id="6" name="volume viewer" qualified_name="orangecontrib.tomwer.widgets.visualization.VolumeViewerOW.VolumeViewerOW" project_name="tomwer" version="" title="volume viewer" position="(986.75, 383.25)" />
|
11
|
+
<node id="7" name="create raw data screenshots" qualified_name="orangecontrib.tomwer.widgets.icat.RawDataScreenshotCreatorOW.RawDataScreenshotCreatorOW" project_name="tomwer" version="" title="create raw data screenshots" position="(321.0, 509.0)" />
|
12
|
+
<node id="8" name="save to gallery and publish" qualified_name="orangecontrib.tomwer.widgets.icat.SaveToGalleryAndPublishOW.SaveToGalleryAndPublishOW" project_name="tomwer" version="" title="save to gallery and publish" position="(506.0, 510.0)" />
|
13
|
+
<node id="9" name="save to gallery and publish" qualified_name="orangecontrib.tomwer.widgets.icat.SaveToGalleryAndPublishOW.SaveToGalleryAndPublishOW" project_name="tomwer" version="" title="save to gallery and publish (1)" position="(731.0, 514.0)" />
|
14
|
+
<node id="10" name="Publish processed data to icat" qualified_name="orangecontrib.tomwer.widgets.icat.PublishProcessedDataOW.PublishProcessedDataOW" project_name="tomwer" version="" title="Publish processed data to icat" position="(990.0, 514.0)" />
|
15
|
+
</nodes>
|
16
|
+
<links>
|
17
|
+
<link id="0" source_node_id="0" sink_node_id="1" source_channel="data" sink_channel="data" enabled="true" source_channel_id="data" sink_channel_id="data" />
|
18
|
+
<link id="1" source_node_id="1" sink_node_id="2" source_channel="data" sink_channel="data" enabled="true" source_channel_id="data" sink_channel_id="data" />
|
19
|
+
<link id="2" source_node_id="2" sink_node_id="3" source_channel="data" sink_channel="data" enabled="true" source_channel_id="data" sink_channel_id="data" />
|
20
|
+
<link id="3" source_node_id="3" sink_node_id="4" source_channel="data" sink_channel="data" enabled="true" source_channel_id="data" sink_channel_id="data" />
|
21
|
+
<link id="4" source_node_id="3" sink_node_id="5" source_channel="data" sink_channel="data" enabled="true" source_channel_id="data" sink_channel_id="data" />
|
22
|
+
<link id="5" source_node_id="5" sink_node_id="6" source_channel="data" sink_channel="data" enabled="true" source_channel_id="data" sink_channel_id="data" />
|
23
|
+
<link id="6" source_node_id="0" sink_node_id="7" source_channel="data" sink_channel="data" enabled="true" source_channel_id="data" sink_channel_id="data" />
|
24
|
+
<link id="7" source_node_id="7" sink_node_id="8" source_channel="screenshots" sink_channel="screenshots" enabled="true" source_channel_id="screenshots" sink_channel_id="screenshots" />
|
25
|
+
<link id="8" source_node_id="3" sink_node_id="9" source_channel="screenshots" sink_channel="screenshots" enabled="true" source_channel_id="screenshots" sink_channel_id="screenshots" />
|
26
|
+
<link id="9" source_node_id="5" sink_node_id="10" source_channel="data" sink_channel="data" enabled="true" source_channel_id="data" sink_channel_id="data" />
|
27
|
+
</links>
|
28
|
+
<annotations>
|
29
|
+
<arrow id="0" start="(267.0, 56.0)" end="(194.0, 105.0)" fill="#C1272D" />
|
30
|
+
<text id="1" type="text/plain" rect="(276.25, 17.75, 150.0, 31.0)" font-family="Ubuntu" font-size="16">provide dataset</text>
|
31
|
+
<text id="2" type="text/plain" rect="(146.0, 597.0, 168.0, 89.0)" font-family="Cantarell" font-size="16">create screenshot for raw projection, raw falt and raw dark</text>
|
32
|
+
<text id="3" type="text/plain" rect="(413.0, 612.0, 215.0, 62.0)" font-family="Cantarell" font-size="16">save screenshot to the gallry and publish to icat</text>
|
33
|
+
<arrow id="4" start="(630.0, 605.0)" end="(674.0, 573.0)" fill="#C1272D" />
|
34
|
+
<arrow id="5" start="(475.99999999999994, 612.0)" end="(477.99999999999994, 568.0)" fill="#C1272D" />
|
35
|
+
<arrow id="6" start="(607.0, 387.0)" end="(671.0, 395.0)" fill="#C1272D" />
|
36
|
+
<text id="7" type="text/plain" rect="(449.0, 350.0, 150.0, 51.0)" font-family="Cantarell" font-size="16">screenshot of the reconstructed slice</text>
|
37
|
+
<arrow id="8" start="(235.0, 592.0)" end="(281.0, 521.0)" fill="#C1272D" />
|
38
|
+
<text id="9" type="text/plain" rect="(901.0, 618.0, 179.0, 70.0)" font-family="Cantarell" font-size="16">publish reconstructed volume to icat</text>
|
39
|
+
<arrow id="10" start="(980.0, 621.0)" end="(981.0, 579.0)" fill="#C1272D" />
|
40
|
+
</annotations>
|
41
|
+
<thumbnail />
|
42
|
+
<node_properties>
|
43
|
+
<properties node_id="0" format="literal">{'_scanIDs': [], 'controlAreaVisible': True, 'savedWidgetGeometry': None, '__version__': 1}</properties>
|
44
|
+
<properties node_id="1" format="literal">{'_ewoks_default_inputs': {'data': None, 'dark_ref_params': None}, 'controlAreaVisible': True, 'savedWidgetGeometry': None, '__version__': 1}</properties>
|
45
|
+
<properties node_id="2" format="literal">{'_ewoks_default_inputs': {'data': None, 'axis_params': {'MODE': 'manual', 'POSITION_VALUE': None, 'CALC_INPUT_TYPE': 'transmission_nopag', 'ANGLE_MODE': '0-180', 'USE_SINOGRAM': False, 'SINOGRAM_LINE': '', 'SINOGRAM_SUBSAMPLING': 10, 'AXIS_URL_1': '', 'AXIS_URL_2': '', 'LOOK_AT_STDMAX': False, 'NEAR_WX': 5, 'FINE_STEP_X': 0.1, 'SCALE_IMG2_TO_IMG1': False, 'NEAR_POSITION': 0.0, 'PADDING_MODE': 'edge', 'FLIP_LR': True, 'COMPOSITE_OPTS': {'theta': 10, 'n_subsampling_y': 10, 'oversampling': 4, 'take_log': True, 'near_pos': 0, 'near_width': 20}, 'SIDE': 'all', 'COR_OPTIONS': ''}, 'gui': {'mode_is_lock': False, 'value_is_lock': False, 'auto_update_estimated_cor': True}}, 'controlAreaVisible': True, 'savedWidgetGeometry': None, '__version__': 1}</properties>
|
46
|
+
<properties node_id="3" format="literal">{'_ewoks_default_inputs': {'data': None, 'nabu_params': None}, 'controlAreaVisible': True, 'savedWidgetGeometry': None, '__version__': 1}</properties>
|
47
|
+
<properties node_id="4" format="literal">{'_viewer_config': {}, 'controlAreaVisible': True, 'savedWidgetGeometry': None, '__version__': 1}</properties>
|
48
|
+
<properties node_id="5" format="literal">{'_ewoks_default_inputs': {'data': None, 'nabu_volume_params': None, 'nabu_params': None}, 'controlAreaVisible': True, 'savedWidgetGeometry': None, '__version__': 1}</properties>
|
49
|
+
<properties node_id="6" format="literal">{'controlAreaVisible': True, 'savedWidgetGeometry': None, '__version__': 1}</properties>
|
50
|
+
<properties node_id="7" format="literal">{'_ewoks_default_inputs': {}, '_ewoks_execinfo': {}, '_ewoks_varinfo': {}, 'controlAreaVisible': True, 'default_inputs': {}, 'savedWidgetGeometry': None, '__version__': 1}</properties>
|
51
|
+
<properties node_id="8" format="literal">{'_ewoks_default_inputs': {}, '_ewoks_execinfo': {}, '_ewoks_varinfo': {}, 'controlAreaVisible': True, 'default_inputs': {}, 'savedWidgetGeometry': None, '__version__': 1}</properties>
|
52
|
+
<properties node_id="9" format="literal">{'_ewoks_default_inputs': {}, '_ewoks_execinfo': {}, '_ewoks_varinfo': {}, 'controlAreaVisible': True, 'default_inputs': {}, 'savedWidgetGeometry': None, '__version__': 1}</properties>
|
53
|
+
<properties node_id="10" format="literal">{'_ewoks_default_inputs': {}, '_ewoks_execinfo': {}, '_ewoks_varinfo': {}, 'controlAreaVisible': True, 'default_inputs': {}, 'savedWidgetGeometry': None, '__version__': 1}</properties>
|
54
|
+
</node_properties>
|
55
|
+
<session_state>
|
56
|
+
<window_groups />
|
57
|
+
</session_state>
|
58
|
+
</scheme>
|
@@ -39,6 +39,7 @@ def widget_discovery(discovery):
|
|
39
39
|
"orangecontrib.tomwer.widgets.control",
|
40
40
|
"orangecontrib.tomwer.widgets.debugtools",
|
41
41
|
"orangecontrib.tomwer.widgets.edit",
|
42
|
+
"orangecontrib.tomwer.widgets.icat",
|
42
43
|
"orangecontrib.tomwer.widgets.reconstruction",
|
43
44
|
# "orangecontrib.tomwer.widgets.stitching",
|
44
45
|
"orangecontrib.tomwer.widgets.visualization",
|
@@ -13,7 +13,7 @@ import tomwer.core.process.control.datadiscovery
|
|
13
13
|
from orangecontrib.tomwer.widgets.utils import WidgetLongProcessing
|
14
14
|
from tomwer.core.scan.blissscan import BlissScan
|
15
15
|
from tomwer.core.scan.edfscan import EDFTomoScan
|
16
|
-
from tomwer.core.scan.
|
16
|
+
from tomwer.core.scan.nxtomoscan import NXtomoScan
|
17
17
|
from tomwer.core.scan.scanbase import TomwerScanBase
|
18
18
|
from tomwer.core.scan.scanfactory import ScanFactory
|
19
19
|
from tomwer.core.scan.scantype import ScanType
|
@@ -217,7 +217,7 @@ class _DiscoverThread(qt.QThread):
|
|
217
217
|
):
|
218
218
|
self.sigDataFound.emit(scan)
|
219
219
|
elif (
|
220
|
-
isinstance(scan,
|
220
|
+
isinstance(scan, NXtomoScan)
|
221
221
|
and self._research_type is ScanType.NX_TOMO
|
222
222
|
):
|
223
223
|
self.sigDataFound.emit(scan)
|
@@ -35,9 +35,9 @@ from orangewidget.widget import Input, Output, OWBaseWidget
|
|
35
35
|
from silx.gui import qt
|
36
36
|
|
37
37
|
import tomwer.core.process.control.scanlist
|
38
|
-
from tomwer.core.scan.
|
38
|
+
from tomwer.core.scan.nxtomoscan import NXtomoScan
|
39
39
|
from tomwer.core.scan.scanbase import TomwerScanBase
|
40
|
-
from tomwer.gui.control.datalist import
|
40
|
+
from tomwer.gui.control.datalist import GenericScanListWindow
|
41
41
|
|
42
42
|
logger = logging.getLogger(__name__)
|
43
43
|
|
@@ -73,19 +73,21 @@ class DataListOW(OWBaseWidget, openclass=True):
|
|
73
73
|
:param parent: the parent widget
|
74
74
|
"""
|
75
75
|
super().__init__(parent)
|
76
|
-
|
76
|
+
|
77
|
+
self.widget = GenericScanListWindow(parent=self)
|
78
|
+
self.widget.setWindowFlags(qt.Qt.Widget)
|
77
79
|
self.widget.sigUpdated.connect(self._updateSettings)
|
78
80
|
self._loadSettings()
|
79
81
|
layout = gui.vBox(self.mainArea, self.name).layout()
|
80
82
|
layout.addWidget(self.widget)
|
81
|
-
self.widget._sendButton.clicked.connect(self._sendList)
|
83
|
+
self.widget._widget._sendButton.clicked.connect(self._sendList)
|
82
84
|
|
83
85
|
# expose API
|
84
86
|
self.n_scan = self.widget.n_scan
|
85
87
|
|
86
88
|
# alias used for the 'simple workflow' for now
|
87
89
|
self.start = self._sendList
|
88
|
-
self.clear = self.widget.clear
|
90
|
+
self.clear = self.widget._widget.clear
|
89
91
|
|
90
92
|
def _sendList(self):
|
91
93
|
"""Send a signal for each list to the next widget"""
|
@@ -107,8 +109,8 @@ class DataListOW(OWBaseWidget, openclass=True):
|
|
107
109
|
# kept for backward compatibility since 0.11. To be removed on the future version.
|
108
110
|
if "@" in scan:
|
109
111
|
entry, file_path = scan.split("@")
|
110
|
-
|
111
|
-
self.add(
|
112
|
+
nxtomo_scan = NXtomoScan(entry=entry, scan=file_path)
|
113
|
+
self.add(nxtomo_scan)
|
112
114
|
else:
|
113
115
|
self.add(scan)
|
114
116
|
|
@@ -35,7 +35,7 @@ from orangewidget.widget import Input, Output, OWBaseWidget
|
|
35
35
|
from silx.gui import qt
|
36
36
|
|
37
37
|
import tomwer.core.process.control.scanselector
|
38
|
-
from tomwer.core.scan.
|
38
|
+
from tomwer.core.scan.nxtomoscan import NXtomoScan
|
39
39
|
from tomwer.core.scan.scanbase import TomwerScanBase
|
40
40
|
from tomwer.gui.control.scanselectorwidget import ScanSelectorWidget
|
41
41
|
|
@@ -72,22 +72,21 @@ class DataSelectorOW(OWBaseWidget, openclass=True):
|
|
72
72
|
super().__init__(parent)
|
73
73
|
|
74
74
|
self.widget = ScanSelectorWidget(parent=self)
|
75
|
+
self.widget.setWindowFlags(qt.Qt.Widget)
|
75
76
|
self._loadSettings()
|
76
77
|
|
77
78
|
self.widget.sigUpdated.connect(self._updateSettings)
|
78
79
|
self.widget.sigSelectionChanged.connect(self.changeSelection)
|
79
80
|
layout = gui.vBox(self.mainArea, self.name).layout()
|
80
81
|
layout.addWidget(self.widget)
|
81
|
-
# expose API
|
82
|
-
self.setActiveScan = self.widget.setActiveData
|
83
|
-
self.selectAll = self.widget.selectAll
|
84
|
-
self.n_scan = self.widget.n_scan
|
85
|
-
self.add = self.widget.add
|
86
82
|
|
87
83
|
@Inputs.data
|
88
84
|
def addScan(self, scan, *args, **kwargs):
|
85
|
+
self.add(scan)
|
86
|
+
|
87
|
+
def add(self, scan):
|
89
88
|
if scan is not None:
|
90
|
-
self.widget.add(scan)
|
89
|
+
self.widget.add(scan=scan)
|
91
90
|
|
92
91
|
def changeSelection(self, list_objs):
|
93
92
|
if list_objs is None:
|
@@ -105,7 +104,9 @@ class DataSelectorOW(OWBaseWidget, openclass=True):
|
|
105
104
|
"""send output signals for each selected items"""
|
106
105
|
sItem = self.widget.dataList.selectedItems()
|
107
106
|
if sItem and len(sItem) >= 1:
|
108
|
-
selection = [
|
107
|
+
selection = [
|
108
|
+
_item.data(qt.Qt.UserRole).get_identifier().to_str() for _item in sItem
|
109
|
+
]
|
109
110
|
self.changeSelection(list_objs=selection)
|
110
111
|
|
111
112
|
def _loadSettings(self):
|
@@ -114,8 +115,8 @@ class DataSelectorOW(OWBaseWidget, openclass=True):
|
|
114
115
|
# kept for backward compatibility since 0.11. To be removed on the future version.
|
115
116
|
if "@" in scan:
|
116
117
|
entry, file_path = scan.split("@")
|
117
|
-
|
118
|
-
self.addScan(
|
118
|
+
nxtomo_scan = NXtomoScan(entry=entry, scan=file_path)
|
119
|
+
self.addScan(nxtomo_scan)
|
119
120
|
else:
|
120
121
|
self.addScan(scan)
|
121
122
|
|
@@ -132,3 +133,13 @@ class DataSelectorOW(OWBaseWidget, openclass=True):
|
|
132
133
|
self.widget.removeSelectedDatasets()
|
133
134
|
else:
|
134
135
|
super().keyPressEvent(event)
|
136
|
+
|
137
|
+
# expose API
|
138
|
+
def setActiveScan(self, data):
|
139
|
+
self.widget.setActiveData(data=data)
|
140
|
+
|
141
|
+
def selectAll(self):
|
142
|
+
return self.widget.selectAll()
|
143
|
+
|
144
|
+
def n_scan(self):
|
145
|
+
return self.widget.n_scan()
|
@@ -38,7 +38,7 @@ from orangecontrib.tomwer.orange.managedprocess import TomwerWithStackStack
|
|
38
38
|
from orangecontrib.tomwer.widgets.control.NXTomomillMixIn import NXTomomillMixIn
|
39
39
|
from tomwer.core.process.control.nxtomomill import EDFToNxProcess
|
40
40
|
from tomwer.core.scan.edfscan import EDFTomoScan
|
41
|
-
from tomwer.core.scan.
|
41
|
+
from tomwer.core.scan.nxtomoscan import NXtomoScan
|
42
42
|
from tomwer.gui.control.datalist import EDFDataListMainWindow
|
43
43
|
|
44
44
|
logger = logging.getLogger(__name__)
|
@@ -54,7 +54,7 @@ class EDF2NXOW(
|
|
54
54
|
to HDF5scan.
|
55
55
|
"""
|
56
56
|
|
57
|
-
name = "edf2nx-
|
57
|
+
name = "nxtomomill - edf2nx (Spec-EDF)"
|
58
58
|
id = "orange.widgets.tomwer.control.NXTomomillOW.EDF2NXOW"
|
59
59
|
description = "Convert folders with .edf to .nx"
|
60
60
|
icon = "icons/edf2nx.svg"
|
@@ -79,6 +79,12 @@ class EDF2NXOW(
|
|
79
79
|
|
80
80
|
LOGGER = logger
|
81
81
|
|
82
|
+
_ewoks_inputs_to_hide_from_orange = (
|
83
|
+
"edf_to_nx_configuration",
|
84
|
+
"progress",
|
85
|
+
"serialize_output_data",
|
86
|
+
)
|
87
|
+
|
82
88
|
def __init__(self, parent=None):
|
83
89
|
self.__configuration_cache = None
|
84
90
|
# cache updated for each folder in order to match `_execute_ewoks_task` design
|
@@ -89,7 +95,7 @@ class EDF2NXOW(
|
|
89
95
|
self.widget = EDFDataListMainWindow(parent=self)
|
90
96
|
_layout.addWidget(self.widget)
|
91
97
|
# for edf default output path is still the 'near to input file'
|
92
|
-
self.widget._dialog._nxTomomillOutputWidget.
|
98
|
+
self.widget._dialog._nxTomomillOutputWidget._inScanFolder.setChecked(True)
|
93
99
|
# add 'convert auto' check box
|
94
100
|
self._convertAutoCB = qt.QCheckBox(
|
95
101
|
"convert automatically when edf scan send through 'edf scan' channel", self
|
@@ -175,7 +181,7 @@ class EDF2NXOW(
|
|
175
181
|
edf_to_nx_configuration=self.__configuration_cache.to_dict()
|
176
182
|
)
|
177
183
|
|
178
|
-
self.notify_on_going(scan=
|
184
|
+
self.notify_on_going(scan=NXtomoScan(output_file, output_entry))
|
179
185
|
self._execute_ewoks_task(propagate=True)
|
180
186
|
|
181
187
|
def get_task_inputs(self):
|
@@ -204,7 +210,7 @@ class EDF2NXOW(
|
|
204
210
|
task_suceeded = task_executor.succeeded
|
205
211
|
config = task_executor.current_task.inputs.edf_to_nx_configuration
|
206
212
|
config = EDFConfig.from_dict(config)
|
207
|
-
scan =
|
213
|
+
scan = NXtomoScan(
|
208
214
|
config.output_file,
|
209
215
|
"entry",
|
210
216
|
)
|
@@ -4,14 +4,14 @@ from orangewidget.settings import Setting
|
|
4
4
|
from silx.gui import qt
|
5
5
|
from ewoksorange.bindings.owwidgets import OWEwoksWidgetNoThread
|
6
6
|
|
7
|
-
import tomwer.core.process.control.
|
8
|
-
from tomwer.gui.control.
|
9
|
-
from tomwer.core.utils import concatenate_dict
|
7
|
+
import tomwer.core.process.control.emailnotifier
|
8
|
+
from tomwer.gui.control.emailnotifier import Emailwidget
|
9
|
+
from tomwer.core.utils.dictutils import concatenate_dict
|
10
10
|
|
11
11
|
|
12
12
|
class EmailOW(
|
13
13
|
OWEwoksWidgetNoThread,
|
14
|
-
ewokstaskclass=tomwer.core.process.control.
|
14
|
+
ewokstaskclass=tomwer.core.process.control.emailnotifier.TomoEmailTask,
|
15
15
|
):
|
16
16
|
"""
|
17
17
|
This widget will browse a folder and sub folder to find valid tomo scan project.
|
@@ -39,7 +39,7 @@ from orangecontrib.tomwer.orange.managedprocess import TomwerWithStackStack
|
|
39
39
|
from orangecontrib.tomwer.widgets.control.NXTomomillMixIn import NXTomomillMixIn
|
40
40
|
from tomwer.core.process.control.nxtomomill import H5ToNxProcess
|
41
41
|
from tomwer.core.scan.blissscan import BlissScan
|
42
|
-
from tomwer.core.scan.
|
42
|
+
from tomwer.core.scan.nxtomoscan import NXtomoScan, NXtomoScanIdentifier
|
43
43
|
from tomwer.gui.control.datalist import BlissHDF5DataListMainWindow
|
44
44
|
from tomwer.gui.control.nxtomomill import NXTomomillInput, OverwriteMessage
|
45
45
|
from ewoksorange.bindings.owwidgets import invalid_data
|
@@ -58,7 +58,7 @@ class NXTomomillOW(
|
|
58
58
|
to HDF5scan.
|
59
59
|
"""
|
60
60
|
|
61
|
-
name = "bliss
|
61
|
+
name = "nxtomomill h52nx (bliss-HDF5)"
|
62
62
|
id = "orange.widgets.tomwer.control.NXTomomillOW.NXTomomillOW"
|
63
63
|
description = (
|
64
64
|
"Read a bliss .h5 file and extract from it all possible"
|
@@ -76,6 +76,7 @@ class NXTomomillOW(
|
|
76
76
|
"NXTomo",
|
77
77
|
"tomography",
|
78
78
|
"nxtomomill",
|
79
|
+
"h52nx",
|
79
80
|
]
|
80
81
|
|
81
82
|
want_main_area = True
|
@@ -86,6 +87,12 @@ class NXTomomillOW(
|
|
86
87
|
|
87
88
|
LOGGER = logger
|
88
89
|
|
90
|
+
_ewoks_inputs_to_hide_from_orange = (
|
91
|
+
"h5_to_nx_configuration",
|
92
|
+
"progress",
|
93
|
+
"serialize_output_data",
|
94
|
+
)
|
95
|
+
|
89
96
|
def __init__(self, parent=None):
|
90
97
|
TomwerWithStackStack.__init__(self, parent=parent)
|
91
98
|
NXTomomillMixIn.__init__(self)
|
@@ -126,8 +133,8 @@ class NXTomomillOW(
|
|
126
133
|
# kept for backward compatibility since 0.11. To be removed on the future version.
|
127
134
|
if "@" in scan:
|
128
135
|
entry, file_path = scan.split("@")
|
129
|
-
|
130
|
-
self.add(
|
136
|
+
nxtomo_scan = NXtomoScan(entry=entry, scan=file_path)
|
137
|
+
self.add(nxtomo_scan)
|
131
138
|
else:
|
132
139
|
self._scans.append(scan)
|
133
140
|
self._ewoks_default_inputs[ # pylint: disable=E1137
|
@@ -157,12 +164,10 @@ class NXTomomillOW(
|
|
157
164
|
h5_scan = super().get_task_inputs().get("hdf5_scan", None)
|
158
165
|
if h5_scan is not None:
|
159
166
|
if not isinstance(h5_scan, H5ToNxProcess):
|
160
|
-
raise TypeError(
|
161
|
-
"hdf5_scan is expected to be an instance of HDF5TomoScan"
|
162
|
-
)
|
167
|
+
raise TypeError("hdf5_scan is expected to be an instance of NXtomoScan")
|
163
168
|
self.add(h5_scan.path)
|
164
169
|
|
165
|
-
def _convertAndSend(self, bliss_url):
|
170
|
+
def _convertAndSend(self, bliss_url: str):
|
166
171
|
"""
|
167
172
|
|
168
173
|
:param str bliss_url: string at entry@file format
|
@@ -172,7 +177,7 @@ class NXTomomillOW(
|
|
172
177
|
copy(self.get_default_input_values()["h5_to_nx_configuration"])
|
173
178
|
)
|
174
179
|
|
175
|
-
identifier =
|
180
|
+
identifier = NXtomoScanIdentifier.from_str(bliss_url)
|
176
181
|
bliss_scan = BlissScan(
|
177
182
|
master_file=identifier.file_path,
|
178
183
|
entry=identifier.data_path,
|
@@ -281,11 +286,13 @@ class NXTomomillOW(
|
|
281
286
|
# reset the GUI for input (reset all the cache for answers)
|
282
287
|
self._canOverwriteOutputs = False
|
283
288
|
for bliss_url in self.widget.datalist.selectedItems():
|
284
|
-
|
289
|
+
data = bliss_url.data(qt.Qt.UserRole)
|
290
|
+
assert isinstance(data, NXtomoScan)
|
291
|
+
identifier = data.get_identifier()
|
285
292
|
self._inputGUI.setBlissScan(
|
286
293
|
entry=identifier.data_path, file_path=identifier.file_path
|
287
294
|
)
|
288
|
-
self._convertAndSend(
|
295
|
+
self._convertAndSend(identifier.to_str())
|
289
296
|
|
290
297
|
def _sendAll(self):
|
291
298
|
"""Send a signal for each scan found to the next widget"""
|
@@ -293,11 +300,13 @@ class NXTomomillOW(
|
|
293
300
|
# reset the GUI for input (reset all the cache for answers)
|
294
301
|
self._canOverwriteOutputs = False
|
295
302
|
for bliss_url in self.widget.datalist._myitems.values():
|
296
|
-
|
303
|
+
data = bliss_url.data(qt.Qt.UserRole)
|
304
|
+
identifier = data.get_identifier()
|
305
|
+
assert isinstance(data, NXtomoScan)
|
297
306
|
self._inputGUI.setBlissScan(
|
298
307
|
entry=identifier.data_path, file_path=identifier.file_path
|
299
308
|
)
|
300
|
-
self._convertAndSend(
|
309
|
+
self._convertAndSend(identifier.to_str())
|
301
310
|
|
302
311
|
def _notify_state(self):
|
303
312
|
try:
|
@@ -316,12 +325,16 @@ class NXTomomillOW(
|
|
316
325
|
def trigger_downstream(self) -> None:
|
317
326
|
for ewoksname, var in self.get_task_outputs().items():
|
318
327
|
# note: for now we want to trigger 'data' for each items of 'datas'
|
319
|
-
if ewoksname == "
|
328
|
+
if ewoksname == "serie" and not (
|
320
329
|
invalid_data.is_invalid_data(var.value) or var.value is None
|
321
330
|
):
|
322
331
|
for data in var.value:
|
323
|
-
|
324
|
-
|
325
|
-
|
332
|
+
data_channel = self._get_output_signal("data")
|
333
|
+
data_channel.send(data)
|
334
|
+
serie_channel = self._get_output_signal("serie")
|
326
335
|
# then send the list of value / serie (also know as datas)
|
327
|
-
|
336
|
+
serie_channel.send(var.value)
|
337
|
+
elif ewoksname == "data" and not (
|
338
|
+
invalid_data.is_invalid_data(var.value) or var.value is None
|
339
|
+
):
|
340
|
+
pass # handle by 'serie' in this case
|
@@ -10,7 +10,7 @@ from silx.gui import qt
|
|
10
10
|
from typing import Optional
|
11
11
|
|
12
12
|
from tomwer.core.scan.scanbase import TomwerScanBase
|
13
|
-
from tomwer.core.scan.
|
13
|
+
from tomwer.core.scan.nxtomoscan import NXtomoScan
|
14
14
|
from tomwer.core.process.control.nxtomoconcatenate import (
|
15
15
|
ConcatenateNXtomoTask,
|
16
16
|
format_output_location,
|
@@ -34,7 +34,7 @@ class NXtomoConcatenateOW(
|
|
34
34
|
# note of this widget should be the one registered on the documentation
|
35
35
|
name = "NXtomo concatenation"
|
36
36
|
id = "orangecontrib.tomwer.widgets.control.NXtomoConcatenate.NXtomoConcatenate"
|
37
|
-
description = "concatenate a serie (of NXtomo /
|
37
|
+
description = "concatenate a serie (of NXtomo / NXtomoScan) into a single Nxtomo"
|
38
38
|
icon = "icons/concatenate_nxtomos.svg"
|
39
39
|
priority = 200
|
40
40
|
keywords = [
|
@@ -44,7 +44,7 @@ class NXtomoConcatenateOW(
|
|
44
44
|
"concatenate",
|
45
45
|
"NXtomo",
|
46
46
|
"data",
|
47
|
-
"
|
47
|
+
"NXtomoScan",
|
48
48
|
]
|
49
49
|
|
50
50
|
want_main_area = True
|
@@ -59,6 +59,13 @@ class NXtomoConcatenateOW(
|
|
59
59
|
"overwrite": False,
|
60
60
|
}
|
61
61
|
)
|
62
|
+
_ewoks_inputs_to_hide_from_orange = (
|
63
|
+
"output_entry",
|
64
|
+
"serialize_output_data",
|
65
|
+
"progress",
|
66
|
+
"output_file",
|
67
|
+
"overwrite",
|
68
|
+
)
|
62
69
|
|
63
70
|
TIMEOUT = 30
|
64
71
|
|
@@ -124,9 +131,9 @@ class NXtomoConcatenateOW(
|
|
124
131
|
# task will be executed only when the user validates the dialog
|
125
132
|
data = super().get_task_inputs().get("data", None)
|
126
133
|
if data is not None:
|
127
|
-
if not isinstance(data,
|
134
|
+
if not isinstance(data, NXtomoScan):
|
128
135
|
raise TypeError(
|
129
|
-
f"data is expected to be an instance of
|
136
|
+
f"data is expected to be an instance of NXtomoScan. {type(data)} are not handled"
|
130
137
|
)
|
131
138
|
self.add(data.path)
|
132
139
|
|
@@ -136,7 +143,7 @@ class NXtomoConcatenateOW(
|
|
136
143
|
def _newTaskStarted(self):
|
137
144
|
try:
|
138
145
|
task_executor = self.sender()
|
139
|
-
scan_about_to_be_created =
|
146
|
+
scan_about_to_be_created = NXtomoScan(
|
140
147
|
scan=format_output_location(
|
141
148
|
file_path=task_executor.current_task.inputs.output_file_path,
|
142
149
|
serie=task_executor.current_task.inputs.serie,
|
@@ -168,7 +175,7 @@ class NXtomoConcatenateOW(
|
|
168
175
|
return
|
169
176
|
else:
|
170
177
|
self.__serie = serie
|
171
|
-
scan_about_to_be_created =
|
178
|
+
scan_about_to_be_created = NXtomoScan(
|
172
179
|
scan=format_output_location(
|
173
180
|
file_path=self.getOutputFilePath(),
|
174
181
|
serie=serie,
|
@@ -37,7 +37,7 @@ from orangewidget.widget import Input, Output, OWBaseWidget
|
|
37
37
|
from silx.gui import qt
|
38
38
|
|
39
39
|
import tomwer.core.process.control.volumeselector
|
40
|
-
from tomwer.core.scan.
|
40
|
+
from tomwer.core.scan.nxtomoscan import NXtomoScan
|
41
41
|
from tomwer.core.volume.volumebase import TomwerVolumeBase
|
42
42
|
from tomwer.gui.control.volumeselectorwidget import VolumeSelectorWidget
|
43
43
|
|
@@ -88,7 +88,10 @@ class VolumeSelectorOW(OWBaseWidget, openclass=True):
|
|
88
88
|
self.add = self.widget.add
|
89
89
|
|
90
90
|
@Inputs.volume
|
91
|
-
def
|
91
|
+
def _volumeReceived(self, volume, *args, **kwargs):
|
92
|
+
self.addVolume(volume)
|
93
|
+
|
94
|
+
def addVolume(self, volume):
|
92
95
|
if volume is not None:
|
93
96
|
self.widget.add(volume)
|
94
97
|
|
@@ -119,8 +122,8 @@ class VolumeSelectorOW(OWBaseWidget, openclass=True):
|
|
119
122
|
# kept for backward compatibility since 0.11. To be removed on the future version.
|
120
123
|
if "@" in scan:
|
121
124
|
entry, file_path = scan.split("@")
|
122
|
-
|
123
|
-
self.addVolume(
|
125
|
+
nxtomo_scan = NXtomoScan(entry=entry, scan=file_path)
|
126
|
+
self.addVolume(nxtomo_scan)
|
124
127
|
else:
|
125
128
|
self.addVolume(scan)
|
126
129
|
|