From 3c85ce7b8da295ddd0bfce38a2df805d28b65034 Mon Sep 17 00:00:00 2001 From: Neil Vaytet Date: Thu, 28 Nov 2024 15:37:08 +0100 Subject: [PATCH 1/5] Use multi-file widget in workflow interface --- src/ess/sans/parameters.py | 6 ++++-- src/ess/sans/workflow.py | 5 ++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/ess/sans/parameters.py b/src/ess/sans/parameters.py index 4aaef525..350791f3 100644 --- a/src/ess/sans/parameters.py +++ b/src/ess/sans/parameters.py @@ -54,6 +54,7 @@ CorrectForGravity, default=False ) parameter_registry[NeXusDetectorName] = StringParameter.from_type(NeXusDetectorName) + parameter_registry[NeXusMonitorName[Incident]] = StringParameter.from_type( NeXusMonitorName[Incident], default='' ) @@ -76,10 +77,10 @@ parameter_registry[UncertaintyBroadcastMode] = ParamWithOptions.from_enum( UncertaintyBroadcastMode, default=UncertaintyBroadcastMode.upper_bound ) -parameter_registry[Filename[SampleRun]] = FilenameParameter.from_type( +parameter_registry[Filename[SampleRun]] = MultiFilenameParameter.from_type( Filename[SampleRun] ) -parameter_registry[Filename[BackgroundRun]] = FilenameParameter.from_type( +parameter_registry[Filename[BackgroundRun]] = MultiFilenameParameter.from_type( Filename[BackgroundRun] ) parameter_registry[Filename[TransmissionRun[SampleRun]]] = FilenameParameter.from_type( @@ -91,6 +92,7 @@ parameter_registry[Filename[EmptyBeamRun]] = FilenameParameter.from_type( Filename[EmptyBeamRun] ) + parameter_registry[WavelengthBins] = BinEdgesParameter( WavelengthBins, dim='wavelength', start=2, stop=12.0, nbins=300, log=False ) diff --git a/src/ess/sans/workflow.py b/src/ess/sans/workflow.py index 15a1a567..84b3ddc6 100644 --- a/src/ess/sans/workflow.py +++ b/src/ess/sans/workflow.py @@ -140,7 +140,10 @@ def with_background_runs( parameter_mappers[PixelMaskFilename] = with_pixel_mask_filenames -parameter_mappers[NeXusDetectorName] = with_banks +# TODO: for now, we leave the mapping over detecor banks out, because we do not have a +# method to merge the I(Q) of different banks, and we thus cannot compute a single +# result from the workflow. So only a single detector bank can be processed at a time. +# parameter_mappers[NeXusDetectorName] = with_banks parameter_mappers[Filename[SampleRun]] = with_sample_runs parameter_mappers[Filename[BackgroundRun]] = with_background_runs From b3309cae8a46f4cec9c1478324a6e583dbd36773 Mon Sep 17 00:00:00 2001 From: Neil Vaytet Date: Thu, 28 Nov 2024 15:56:36 +0100 Subject: [PATCH 2/5] update deps to get latest essreduce --- pyproject.toml | 2 +- requirements/base.in | 2 +- requirements/base.txt | 26 ++++++++++++++------------ requirements/basetest.txt | 4 ++-- requirements/ci.txt | 6 +++--- requirements/dev.txt | 24 +++++++++++------------- requirements/docs.txt | 10 +++++----- requirements/nightly.txt | 14 ++++++++------ requirements/static.txt | 4 ++-- requirements/wheels.txt | 4 ++-- 10 files changed, 49 insertions(+), 47 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index feb4d900..374dee3d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,7 +32,7 @@ requires-python = ">=3.10" dependencies = [ "dask", "graphviz", - "essreduce>=24.10.2", + "essreduce>=24.11.3", "numpy", "pandas", "plopp", diff --git a/requirements/base.in b/requirements/base.in index 3940e122..dc371692 100644 --- a/requirements/base.in +++ b/requirements/base.in @@ -4,7 +4,7 @@ # The following was generated by 'tox -e deps', DO NOT EDIT MANUALLY! dask graphviz -essreduce>=24.10.2 +essreduce>=24.11.3 numpy pandas plopp diff --git a/requirements/base.txt b/requirements/base.txt index b1ced258..fb0c1fdd 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -1,4 +1,4 @@ -# SHA1:cd8af8bd31889fa9a462910ccfa248a58203fec8 +# SHA1:71fbc763453db59fbe23acb0df92531c0434f7ef # # This file is autogenerated by pip-compile-multi # To update, run: @@ -13,23 +13,23 @@ cloudpickle==3.1.0 # via dask comm==0.2.2 # via ipywidgets -contourpy==1.3.0 +contourpy==1.3.1 # via matplotlib cyclebane==24.10.0 # via sciline cycler==0.12.1 # via matplotlib -dask==2024.10.0 +dask==2024.11.2 # via -r base.in decorator==5.1.1 # via ipython -essreduce==24.10.3 +essreduce==24.11.3 # via -r base.in exceptiongroup==1.2.2 # via ipython executing==2.1.0 # via stack-data -fonttools==4.54.1 +fonttools==4.55.0 # via matplotlib fsspec==2024.10.0 # via dask @@ -49,7 +49,7 @@ ipywidgets==8.1.5 # via # ipydatawidgets # pythreejs -jedi==0.19.1 +jedi==0.19.2 # via ipython jupyterlab-widgets==3.0.13 # via ipywidgets @@ -80,7 +80,7 @@ numpy==2.1.3 # scipp # scippneutron # scipy -packaging==24.1 +packaging==24.2 # via # dask # matplotlib @@ -119,7 +119,7 @@ pytz==2024.2 # via pandas pyyaml==6.0.2 # via dask -sciline==24.6.3 +sciline==24.10.0 # via # -r base.in # essreduce @@ -129,9 +129,11 @@ scipp==24.11.1 # essreduce # scippneutron # scippnexus -scippneutron==24.9.0 - # via -r base.in -scippnexus==24.11.0 +scippneutron==24.11.0 + # via + # -r base.in + # essreduce +scippnexus==24.11.1 # via # -r base.in # essreduce @@ -168,5 +170,5 @@ wcwidth==0.2.13 # via prompt-toolkit widgetsnbextension==4.0.13 # via ipywidgets -zipp==3.20.2 +zipp==3.21.0 # via importlib-metadata diff --git a/requirements/basetest.txt b/requirements/basetest.txt index e3cc752b..d30ac512 100644 --- a/requirements/basetest.txt +++ b/requirements/basetest.txt @@ -15,7 +15,7 @@ idna==3.10 # via requests iniconfig==2.0.0 # via pytest -packaging==24.1 +packaging==24.2 # via # pooch # pytest @@ -29,7 +29,7 @@ pytest==8.3.3 # via -r basetest.in requests==2.32.3 # via pooch -tomli==2.0.2 +tomli==2.2.1 # via pytest urllib3==2.2.3 # via requests diff --git a/requirements/ci.txt b/requirements/ci.txt index 5d7be1da..045acba6 100644 --- a/requirements/ci.txt +++ b/requirements/ci.txt @@ -27,7 +27,7 @@ gitpython==3.1.43 # via -r ci.in idna==3.10 # via requests -packaging==24.1 +packaging==24.2 # via # -r ci.in # pyproject-api @@ -44,7 +44,7 @@ requests==2.32.3 # via -r ci.in smmap==5.0.1 # via gitdb -tomli==2.0.2 +tomli==2.2.1 # via # pyproject-api # tox @@ -54,5 +54,5 @@ typing-extensions==4.12.2 # via tox urllib3==2.2.3 # via requests -virtualenv==20.27.1 +virtualenv==20.28.0 # via tox diff --git a/requirements/dev.txt b/requirements/dev.txt index 6fbadf9d..d91bcc2c 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -30,7 +30,7 @@ cffi==1.17.1 # via argon2-cffi-bindings copier==9.4.1 # via -r dev.in -dunamai==1.22.0 +dunamai==1.23.0 # via copier fqdn==1.5.1 # via jsonschema @@ -38,15 +38,15 @@ funcy==2.0 # via copier h11==0.14.0 # via httpcore -httpcore==1.0.6 +httpcore==1.0.7 # via httpx -httpx==0.27.2 +httpx==0.28.0 # via jupyterlab isoduration==20.11.0 # via jsonschema jinja2-ansible-filters==1.3.2 # via copier -json5==0.9.25 +json5==0.10.0 # via jupyterlab-server jsonpointer==3.0.0 # via jsonschema @@ -67,7 +67,7 @@ jupyter-server==2.14.2 # notebook-shim jupyter-server-terminals==0.5.3 # via jupyter-server -jupyterlab==4.3.0 +jupyterlab==4.3.1 # via -r dev.in jupyterlab-server==2.27.3 # via jupyterlab @@ -77,7 +77,7 @@ overrides==7.7.0 # via jupyter-server pathspec==0.12.1 # via copier -pip-compile-multi==2.6.4 +pip-compile-multi==2.7.1 # via -r dev.in pip-tools==7.4.1 # via pip-compile-multi @@ -87,9 +87,9 @@ prometheus-client==0.21.0 # via jupyter-server pycparser==2.22 # via cffi -pydantic==2.9.2 +pydantic==2.10.2 # via copier -pydantic-core==2.23.4 +pydantic-core==2.27.1 # via pydantic python-json-logger==2.0.7 # via jupyter-events @@ -106,9 +106,7 @@ rfc3986-validator==0.1.1 send2trash==1.8.3 # via jupyter-server sniffio==1.3.1 - # via - # anyio - # httpx + # via anyio terminado==0.18.1 # via # jupyter-server @@ -119,11 +117,11 @@ types-python-dateutil==2.9.0.20241003 # via arrow uri-template==1.3.0 # via jsonschema -webcolors==24.8.0 +webcolors==24.11.1 # via jsonschema websocket-client==1.8.0 # via jupyter-server -wheel==0.44.0 +wheel==0.45.1 # via pip-tools # The following packages are considered to be unsafe in a requirements file: diff --git a/requirements/docs.txt b/requirements/docs.txt index a8d402c1..dd6d11e9 100644 --- a/requirements/docs.txt +++ b/requirements/docs.txt @@ -28,7 +28,7 @@ certifi==2024.8.30 # via requests charset-normalizer==3.4.0 # via requests -debugpy==1.8.7 +debugpy==1.8.9 # via ipykernel defusedxml==0.7.1 # via nbconvert @@ -38,7 +38,7 @@ docutils==0.21.2 # nbsphinx # pydata-sphinx-theme # sphinx -fastjsonschema==2.20.0 +fastjsonschema==2.21.0 # via nbformat idna==3.10 # via requests @@ -122,7 +122,7 @@ requests==2.32.3 # via # pooch # sphinx -rpds-py==0.20.1 +rpds-py==0.21.0 # via # jsonschema # referencing @@ -159,9 +159,9 @@ sphinxcontrib-serializinghtml==2.0.0 # via sphinx tinycss2==1.4.0 # via nbconvert -tomli==2.0.2 +tomli==2.2.1 # via sphinx -tornado==6.4.1 +tornado==6.4.2 # via # ipykernel # jupyter-client diff --git a/requirements/nightly.txt b/requirements/nightly.txt index d91f700f..5e3887c0 100644 --- a/requirements/nightly.txt +++ b/requirements/nightly.txt @@ -14,13 +14,13 @@ cloudpickle==3.1.0 # via dask comm==0.2.2 # via ipywidgets -contourpy==1.3.0 +contourpy==1.3.1 # via matplotlib cyclebane==24.10.0 # via sciline cycler==0.12.1 # via matplotlib -dask==2024.10.0 +dask==2024.11.2 # via -r nightly.in decorator==5.1.1 # via ipython @@ -28,7 +28,7 @@ essreduce @ git+https://github.com/scipp/essreduce@main # via -r nightly.in executing==2.1.0 # via stack-data -fonttools==4.54.1 +fonttools==4.55.0 # via matplotlib fsspec==2024.10.0 # via dask @@ -48,7 +48,7 @@ ipywidgets==8.1.5 # via # ipydatawidgets # pythreejs -jedi==0.19.1 +jedi==0.19.2 # via ipython jupyterlab-widgets==3.0.13 # via ipywidgets @@ -125,7 +125,9 @@ scipp @ https://github.com/scipp/scipp/releases/download/nightly/scipp-nightly-c # scippneutron # scippnexus scippneutron @ git+https://github.com/scipp/scippneutron@main - # via -r nightly.in + # via + # -r nightly.in + # essreduce scippnexus @ git+https://github.com/scipp/scippnexus@main # via # -r nightly.in @@ -163,5 +165,5 @@ wcwidth==0.2.13 # via prompt-toolkit widgetsnbextension==4.0.13 # via ipywidgets -zipp==3.20.2 +zipp==3.21.0 # via importlib-metadata diff --git a/requirements/static.txt b/requirements/static.txt index dd21341b..1d6ae539 100644 --- a/requirements/static.txt +++ b/requirements/static.txt @@ -11,7 +11,7 @@ distlib==0.3.9 # via virtualenv filelock==3.16.1 # via virtualenv -identify==2.6.1 +identify==2.6.3 # via pre-commit nodeenv==1.9.1 # via pre-commit @@ -21,5 +21,5 @@ pre-commit==4.0.1 # via -r static.in pyyaml==6.0.2 # via pre-commit -virtualenv==20.27.1 +virtualenv==20.28.0 # via pre-commit diff --git a/requirements/wheels.txt b/requirements/wheels.txt index d1c1063b..bfae20bf 100644 --- a/requirements/wheels.txt +++ b/requirements/wheels.txt @@ -7,9 +7,9 @@ # build==1.2.2.post1 # via -r wheels.in -packaging==24.1 +packaging==24.2 # via build pyproject-hooks==1.2.0 # via build -tomli==2.0.2 +tomli==2.2.1 # via build From 0dfad4199ae52bc817348ef6b89fb149f70001f0 Mon Sep 17 00:00:00 2001 From: Neil Vaytet Date: Mon, 16 Dec 2024 09:31:28 +0100 Subject: [PATCH 3/5] use multifile widget for pixel masks also --- src/ess/loki/workflow.py | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/src/ess/loki/workflow.py b/src/ess/loki/workflow.py index 73aa7e0a..cd257beb 100644 --- a/src/ess/loki/workflow.py +++ b/src/ess/loki/workflow.py @@ -14,23 +14,31 @@ from ess.sans.parameters import typical_outputs from ..sans.types import ( + BackgroundRun, + BeamCenter, DetectorBankSizes, DetectorData, DetectorPixelShape, DirectBeam, DirectBeamFilename, + EmptyBeamRun, + Filename, Incident, MonitorData, MonitorType, NeXusComponent, + NeXusDetectorName, NeXusMonitorName, NonBackgroundWavelengthRange, + PixelMaskFilename, PixelShapePath, RunType, + SampleRun, ScatteringRunType, TofData, TofMonitor, Transmission, + TransmissionRun, ) DETECTOR_BANK_SIZES = { @@ -105,7 +113,7 @@ def LokiAtLarmorWorkflow() -> sciline.Pipeline: for key, param in default_parameters().items(): workflow[key] = param workflow.insert(read_xml_detector_masking) - workflow[sans.types.NeXusDetectorName] = 'larmor_detector' + workflow[NeXusDetectorName] = 'larmor_detector' workflow.typical_outputs = typical_outputs return workflow @@ -115,25 +123,14 @@ def LokiAtLarmorTutorialWorkflow() -> sciline.Pipeline: from ess.loki import data workflow = LokiAtLarmorWorkflow() - # TODO This does not work with multiple - workflow[sans.types.PixelMaskFilename] = data.loki_tutorial_mask_filenames()[0] - workflow[sans.types.Filename[sans.types.SampleRun]] = ( - data.loki_tutorial_sample_run_60339() - ) - workflow[sans.types.Filename[sans.types.BackgroundRun]] = ( - data.loki_tutorial_background_run_60393() - ) - workflow[sans.types.Filename[sans.types.TransmissionRun[sans.types.SampleRun]]] = ( + workflow[PixelMaskFilename] = data.loki_tutorial_mask_filenames() + workflow[Filename[SampleRun]] = data.loki_tutorial_sample_run_60339() + workflow[Filename[BackgroundRun]] = data.loki_tutorial_background_run_60393() + workflow[Filename[TransmissionRun[SampleRun]]] = ( data.loki_tutorial_sample_transmission_run() ) - workflow[ - sans.types.Filename[sans.types.TransmissionRun[sans.types.BackgroundRun]] - ] = data.loki_tutorial_run_60392() - workflow[sans.types.Filename[sans.types.EmptyBeamRun]] = ( - data.loki_tutorial_run_60392() - ) - workflow[sans.types.BeamCenter] = sc.vector( - value=[-0.02914868, -0.01816138, 0.0], unit='m' - ) + workflow[Filename[TransmissionRun[BackgroundRun]]] = data.loki_tutorial_run_60392() + workflow[Filename[EmptyBeamRun]] = data.loki_tutorial_run_60392() + workflow[BeamCenter] = sc.vector(value=[-0.02914868, -0.01816138, 0.0], unit='m') return workflow From 4adc1c8eed0e0419e8d6d9763e5a32c1c187bb4d Mon Sep 17 00:00:00 2001 From: Neil Vaytet Date: Fri, 24 Jan 2025 10:33:23 +0100 Subject: [PATCH 4/5] fix typo in comment --- src/ess/sans/workflow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ess/sans/workflow.py b/src/ess/sans/workflow.py index 84b3ddc6..e01b81aa 100644 --- a/src/ess/sans/workflow.py +++ b/src/ess/sans/workflow.py @@ -140,7 +140,7 @@ def with_background_runs( parameter_mappers[PixelMaskFilename] = with_pixel_mask_filenames -# TODO: for now, we leave the mapping over detecor banks out, because we do not have a +# TODO: for now, we leave the mapping over detector banks out, because we do not have a # method to merge the I(Q) of different banks, and we thus cannot compute a single # result from the workflow. So only a single detector bank can be processed at a time. # parameter_mappers[NeXusDetectorName] = with_banks From a214d63e5e656df471d99850314c4068c0d89b0f Mon Sep 17 00:00:00 2001 From: Neil Vaytet Date: Fri, 24 Jan 2025 11:13:39 +0100 Subject: [PATCH 5/5] fix workflow widget notebook --- docs/user-guide/loki/workflow-widget-loki.ipynb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/user-guide/loki/workflow-widget-loki.ipynb b/docs/user-guide/loki/workflow-widget-loki.ipynb index 7c8c3a83..93eaeb36 100644 --- a/docs/user-guide/loki/workflow-widget-loki.ipynb +++ b/docs/user-guide/loki/workflow-widget-loki.ipynb @@ -60,10 +60,10 @@ "pbox = wfw.parameter_box\n", "pbox.parameter_refresh_button.click()\n", "# Enable DirectBeam input\n", - "pbox._input_widgets[DirectBeam].children[0].enabled = True\n", - "pbox._input_widgets[DirectBeam].children[0].wrapped._option_box.value = None\n", + "pbox._input_widgets[DirectBeam].children[0].value = True\n", + "pbox._input_widgets[DirectBeam].children[1].children[1]._option_box.value = None\n", "# Adjust Q range\n", - "pbox._input_widgets[QBins].children[0].fields[\"start\"].value = 0.01\n", + "pbox._input_widgets[QBins].fields[\"start\"].value = 0.01\n", "# Run the workflow\n", "rbox = wfw.result_box\n", "rbox.run_button.click()"