Skip to content

feat: allow masking from the data itself#274

Closed
floriankrb wants to merge 2 commits into
mainfrom
feature/allow-masking-from-the-data-itself
Closed

feat: allow masking from the data itself#274
floriankrb wants to merge 2 commits into
mainfrom
feature/allow-masking-from-the-data-itself

Conversation

@floriankrb
Copy link
Copy Markdown
Member

@floriankrb floriankrb commented Apr 15, 2026

Allow masking from a field in the pipeline

The apply_mask filter currently requires an external file (path) to provide the mask. This makes it awkward when the mask (e.g. lsm) is already available as a field in the same pipeline — you need to save it to a separate file first, then reference it.

This PR adds a mask_param option as an alternative to path. When mask_param is set, the filter extracts the named field from the pipeline data, uses it as the mask, and removes it from the output. All existing mask_value/threshold/rename/param options work exactly the same way.

Usage

input:
  pipe:
    - mars:
        param:
        - sd
        - lsm
    - apply_mask:
        mask_param: lsm   # Use lsm for masking
        mask_value: 0      # Set to NaN where lsm == 0 (sea points)

As a contributor to the Anemoi framework, please ensure that your changes include unit tests, updates to any affected dependencies and documentation, and have been tested in a parallel setting (i.e., with multiple GPUs). As a reviewer, you are also responsible for verifying these aspects and requesting changes if they are not adequately addressed. For guidelines about those please refer to https://anemoi.readthedocs.io/en/latest/

By opening this pull request, I affirm that all authors agree to the Contributor License Agreement.

@github-project-automation github-project-automation Bot moved this to To be triaged in Anemoi-dev Apr 15, 2026
@github-actions github-actions Bot added the enhancement New feature or request label Apr 15, 2026
@github-actions github-actions Bot added the tests label Apr 15, 2026
Copy link
Copy Markdown
Member

@mc4117 mc4117 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

@github-project-automation github-project-automation Bot moved this from To be triaged to For merging in Anemoi-dev Apr 15, 2026
@floriankrb floriankrb marked this pull request as ready for review April 15, 2026 14:09
Copy link
Copy Markdown
Contributor

@aaron-hopkinson aaron-hopkinson left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Technically this should work, but it's not really intended for a SingleFieldFilter to rely on multiple variables at "forward" time, nor is it really expected that implementations of this class would provide their own implementations of forward. So, it might be better to convert this back to a regular Filter (which itself isn't ideal)... Either keeping this as is, or converting to a Filter both feel a bit messy to me – so I guess it depends how desperate we really are for this feature.

@mc4117
Copy link
Copy Markdown
Member

mc4117 commented Apr 17, 2026

This PR has been superceded by PR #276

@mc4117 mc4117 closed this Apr 17, 2026
@github-project-automation github-project-automation Bot moved this from For merging to Done in Anemoi-dev Apr 17, 2026
aaron-hopkinson added a commit that referenced this pull request Apr 20, 2026
…ask (#277)

## Description
Alternative implementation of #276, builds on #274 but converts the
filter back to a `Filter` rather than `SingleFieldFilter` (but keeps
alignment to minimise the diff)

## Allow masking from a field in the pipeline

The `apply_mask` filter currently requires an external file (`path`) to
provide the mask. This makes it awkward when the mask (e.g. `lsm`) is
already available as a field in the same pipeline — you need to save it
to a separate file first, then reference it.

This PR adds a `mask_param` option as an alternative to `path`. When
`mask_param` is set, by default, the mask field is consumed (not
returned), but it is possible to force it to be returned with
(`return_mask: true`). All existing
`mask_value`/`threshold`/`rename`/`param` options work exactly the same
way.

### Usage

```yaml
input:
  pipe:
    - mars:
        param:
        - sd
        - lsm
    - apply_mask:
        mask_param: lsm   # Use lsm for masking
        mask_value: 0      # Set to NaN where lsm == 0 (sea points)
```


***As a contributor to the Anemoi framework, please ensure that your
changes include unit tests, updates to any affected dependencies and
documentation, and have been tested in a parallel setting (i.e., with
multiple GPUs). As a reviewer, you are also responsible for verifying
these aspects and requesting changes if they are not adequately
addressed. For guidelines about those please refer to
https://anemoi.readthedocs.io/en/latest/***

By opening this pull request, I affirm that all authors agree to the
[Contributor License
Agreement.](https://github.com/ecmwf/codex/blob/main/Legal/contributor_license_agreement.md)

---------

Co-authored-by: Florian Pinault <Florian.Pinault@ecmwf.int>
Co-authored-by: Mariana Clare <31656450+mc4117@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

3 participants