-
Notifications
You must be signed in to change notification settings - Fork 2
[ESSdiffraction] Save XYE files in tests and apply masks #673
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,23 @@ | ||
| # SPDX-License-Identifier: BSD-3-Clause | ||
| # Copyright (c) 2026 Scipp contributors (https://github.com/scipp) | ||
|
|
||
| import scipp as sc | ||
| from scipp.core import irreducible_mask | ||
|
|
||
|
|
||
| def prepare_reduced_data(da: sc.DataArray) -> sc.DataArray: | ||
| """Prepare reduced data for saving.""" | ||
| if da.ndim != 1: | ||
| raise sc.DimensionError(f"Can only save 1D data, got {da.sizes}") | ||
|
|
||
| hist = da.hist() if da.is_binned else da.copy(deep=False) | ||
| hist.coords[hist.dim] = sc.midpoints(hist.coords[hist.dim]) | ||
|
|
||
| if hist.masks: | ||
| # No file format we use here supports masks, so the next | ||
| # best thing is to zero out masked data: | ||
| hist.data = hist.data.copy() | ||
| hist.values *= irreducible_mask(hist.masks, hist.dim).values | ||
| hist.masks.clear() | ||
|
|
||
| return hist |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,36 @@ | ||
| # SPDX-License-Identifier: BSD-3-Clause | ||
| # Copyright (c) 2026 Scipp contributors (https://github.com/scipp) | ||
|
|
||
| """XYE writer for DREAM.""" | ||
|
|
||
| import scippneutron as scn | ||
| from ess.powder.types import IntensityTof, OutFilename | ||
|
|
||
| from ._common import prepare_reduced_data | ||
|
|
||
|
|
||
| def save_xye(filename: OutFilename, da: IntensityTof) -> None: | ||
| """Save reduced data to an XYE file. | ||
|
|
||
| This function can be used as | ||
|
|
||
| .. code-block:: python | ||
|
|
||
| from ess.powder.types import OutFilename | ||
| from ess.dream.io import save_xye | ||
|
|
||
| workflow = ... | ||
| workflow[OutFilename] = "..." | ||
| workflow.bind_and_call(save_xye) | ||
|
|
||
| Note that this function is not suitable as a provider as it | ||
| has side effects (writes a file). | ||
|
|
||
| Parameters | ||
| ---------- | ||
| filename: | ||
| Path of a file to write to. | ||
| da: | ||
| Reduced 1d data with a ``'tof'`` dimension and coordinate. | ||
| """ | ||
| scn.io.save_xye(filename, prepare_reduced_data(da), coord="tof") |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is the reason why we don't use
bind_and_callfor CIF files because we want to add theresult.comment?At first glance it seems strange that we use one method for CIF file and another for XYE file.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We could handle the comment differently. And having a free-form comment for XYE or other files could be useful, too. The difference comes mainly from there being this
CIFobject that you build in memory. So the workflow has something to return. But we don't have that for other formats. (We do for SQW but that is way more complicated.)We can talk about a good, common interface if you like.